mirror of
https://gitee.com/dromara/hutool.git
synced 2025-04-24 18:04:54 +08:00
fix code
This commit is contained in:
parent
8205a8b03a
commit
c60f30361e
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
package org.dromara.hutool.db.dialect.impl;
|
package org.dromara.hutool.db.dialect.impl;
|
||||||
|
|
||||||
|
import org.dromara.hutool.core.text.StrPool;
|
||||||
import org.dromara.hutool.core.text.StrUtil;
|
import org.dromara.hutool.core.text.StrUtil;
|
||||||
import org.dromara.hutool.db.Page;
|
import org.dromara.hutool.db.Page;
|
||||||
import org.dromara.hutool.db.dialect.DialectName;
|
import org.dromara.hutool.db.dialect.DialectName;
|
||||||
@ -25,6 +26,10 @@ import org.dromara.hutool.db.sql.SqlBuilder;
|
|||||||
public class OracleDialect extends AnsiSqlDialect {
|
public class OracleDialect extends AnsiSqlDialect {
|
||||||
private static final long serialVersionUID = 6122761762247483015L;
|
private static final long serialVersionUID = 6122761762247483015L;
|
||||||
|
|
||||||
|
private static final String DEFAULT_TABLE_ALIAS = "table_alias_";
|
||||||
|
private static final String DEFAULT_ROW_ALIAS = "row_";
|
||||||
|
private static final String DEFAULT_ROWNUM_ALIAS = "rownum_";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 检查字段值是否为Oracle自增字段,自增字段以`.nextval`结尾
|
* 检查字段值是否为Oracle自增字段,自增字段以`.nextval`结尾
|
||||||
*
|
*
|
||||||
@ -36,6 +41,9 @@ public class OracleDialect extends AnsiSqlDialect {
|
|||||||
return (value instanceof CharSequence) && StrUtil.endWithIgnoreCase(value.toString(), ".nextval");
|
return (value instanceof CharSequence) && StrUtil.endWithIgnoreCase(value.toString(), ".nextval");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 构造
|
||||||
|
*/
|
||||||
public OracleDialect() {
|
public OracleDialect() {
|
||||||
//Oracle所有字段名用双引号包围,防止字段名或表名与系统关键字冲突
|
//Oracle所有字段名用双引号包围,防止字段名或表名与系统关键字冲突
|
||||||
//wrapper = new Wrapper('"');
|
//wrapper = new Wrapper('"');
|
||||||
@ -44,11 +52,27 @@ public class OracleDialect extends AnsiSqlDialect {
|
|||||||
@Override
|
@Override
|
||||||
protected SqlBuilder wrapPageSql(final SqlBuilder find, final Page page) {
|
protected SqlBuilder wrapPageSql(final SqlBuilder find, final Page page) {
|
||||||
final int[] startEnd = page.getStartEnd();
|
final int[] startEnd = page.getStartEnd();
|
||||||
|
|
||||||
|
// 检查别名,避免重名
|
||||||
|
final String sql = find.toString();
|
||||||
|
String tableAlias = DEFAULT_TABLE_ALIAS;
|
||||||
|
while (sql.contains(tableAlias)) {
|
||||||
|
tableAlias += StrPool.UNDERLINE;
|
||||||
|
}
|
||||||
|
String rowAlias = DEFAULT_ROW_ALIAS;
|
||||||
|
while (sql.contains(rowAlias)) {
|
||||||
|
rowAlias += StrPool.UNDERLINE;
|
||||||
|
}
|
||||||
|
String rownumAlias = DEFAULT_ROWNUM_ALIAS;
|
||||||
|
while (sql.contains(rownumAlias)) {
|
||||||
|
rownumAlias += StrPool.UNDERLINE;
|
||||||
|
}
|
||||||
|
|
||||||
return find
|
return find
|
||||||
.insertPreFragment("SELECT * FROM ( SELECT row_.*, rownum rownum_ from ( ")
|
.insertPreFragment("SELECT * FROM ( SELECT " + rowAlias + ".*, rownum " + rownumAlias + " from ( ")
|
||||||
.append(" ) row_ where rownum <= ").append(startEnd[1])//
|
.append(" ) row_ where rownum <= ").append(startEnd[1])//
|
||||||
.append(") table_alias_")//
|
.append(") ").append(tableAlias)//
|
||||||
.append(" where table_alias_.rownum_ > ").append(startEnd[0]);//
|
.append(" where ").append(tableAlias).append(".rownum_ > ").append(startEnd[0]);//
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user