fix: 修复oracle分页排序是每页内排序,不是整体全排序 #9008

This commit is contained in:
taojinlong 2024-06-13 19:39:19 +08:00
parent b278ac771e
commit c0e267d2e5

View File

@ -463,6 +463,7 @@ public class OracleQueryProvider extends QueryProvider {
} else {
if (pageInfo.getGoPage() != null && pageInfo.getPageSize() != null) {
System.out.println("SELECT * FROM (" + sqlFix(originalTableInfo("(" + sqlFix(table) + ")", xAxis, OrgFieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, fieldCustomFilter)) + ") DE_RESULT_TMP " + " WHERE DE_ROWNUM > " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize());
return "SELECT * FROM (" + sqlFix(originalTableInfo("(" + sqlFix(table) + ")", xAxis, OrgFieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, fieldCustomFilter)) + ") DE_RESULT_TMP " + " WHERE DE_ROWNUM > " + (pageInfo.getGoPage() - 1) * pageInfo.getPageSize();
} else {
return "SELECT * FROM (" + sqlFix(originalTableInfo("(" + sqlFix(table) + ")", xAxis, OrgFieldCustomFilter, rowPermissionsTree, extFilterRequestList, ds, view, fieldCustomFilter)) + ") DE_RESULT_TMP ";
@ -476,16 +477,14 @@ public class OracleQueryProvider extends QueryProvider {
.tableAlias(String.format(OracleConstants.ALIAS_FIX, String.format(TABLE_ALIAS_PREFIX, 0)))
.build();
setSchema(tableObj, ds);
boolean isPage = false;
List<SQLObj> xFields = new ArrayList<>();
List<SQLObj> xOrders = new ArrayList<>();
if (CollectionUtils.isNotEmpty(xAxis)) {
for (int i = 0; i < xAxis.size(); i++) {
ChartViewFieldDTO x = xAxis.get(i);
if (x.getOriginName().equalsIgnoreCase("ROWNUM")) {
xFields.add(SQLObj.builder()
.fieldName(x.getOriginName())
.fieldAlias("DE_ROWNUM")
.build());
isPage = true;
continue;
}
String originField;
@ -540,19 +539,42 @@ public class OracleQueryProvider extends QueryProvider {
ST st_sql = stg.getInstanceOf("previewSql");
st_sql.add("isGroup", false);
if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields);
if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres);
if (CollectionUtils.isNotEmpty(orders)) st_sql.add("orders", orders);
if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj);
String sql = st_sql.render();
ST st = stg.getInstanceOf("previewSql");
st.add("isGroup", false);
st.add("notUseAs", true);
SQLObj tableSQL = SQLObj.builder()
.tableName(String.format(OracleConstants.BRACKETS, sql))
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 1))
.build();
if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders);
List<SQLObj> xFields2 = new ArrayList<>();
xFields2.add(SQLObj.builder()
.fieldName(tableSQL.getTableAlias() + ".*")
.build());
if (isPage) {
xFields2.add(SQLObj.builder()
.fieldName("ROWNUM AS DE_ROWNUM")
.fieldAlias("DE_ROWNUM")
.build());
}
if (CollectionUtils.isNotEmpty(xFields)) st.add("groups", xFields2);
if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL);
return st.render();
sql = st.render();
ST st2 = stg.getInstanceOf("previewSql");
st2.add("isGroup", false);
SQLObj tableSQL2 = SQLObj.builder()
.tableName(String.format(OracleConstants.BRACKETS, sql))
.tableAlias(String.format(TABLE_ALIAS_PREFIX, 2))
.build();
if (CollectionUtils.isNotEmpty(wheres)) st2.add("filters", wheres);
if (ObjectUtils.isNotEmpty(tableSQL)) st2.add("table", tableSQL2);
return st2.render();
}
@Override