diff --git a/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java index ec8e792b7e..7b22212f9c 100644 --- a/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/engine/doris/DorisQueryProvider.java @@ -40,7 +40,6 @@ import javax.annotation.Resource; import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -109,14 +108,13 @@ public class DorisQueryProvider extends QueryProvider { .build(); List xFields = new ArrayList<>(); List fieldList = fields.stream().map(DatasetTableField::getId).collect(Collectors.toList()); - AtomicInteger sortIndex = new AtomicInteger(-1); if (CollectionUtils.isNotEmpty(sortFields)) { sortFields.forEach(item -> { - sortIndex.set(fieldList.indexOf(item.getId())); - if (sortIndex.get() == -1) { + int indexOf = fieldList.indexOf(item.getId()); + if (indexOf == -1) { fields.add(item); } else { - fields.set(sortIndex.get(), item); + fields.set(indexOf, item); } }); } @@ -220,19 +218,6 @@ public class DorisQueryProvider extends QueryProvider { if (CollectionUtils.isNotEmpty(xOrders)) { st.add("orders", xOrders); } - if (CollectionUtils.isNotEmpty(xFields)) { - List finallyFields = new ArrayList<>(); - for (int i = 0; i < xFields.size(); i++) { - if (CollectionUtils.isNotEmpty(xOrders) && sortIndex.get() == -1 && i == xFields.size() - 1) { - continue; - } - SQLObj f = xFields.get(i); - String prefix = finallyFields.isEmpty() ? " DISTINCT " : ""; - f.setFieldName(prefix + String.format(MySQLConstants.KEYWORD_FIX, tableSQL.getTableAlias(), f.getFieldAlias())); - finallyFields.add(f); - } - st.add("groups", finallyFields); - } if (ObjectUtils.isNotEmpty(limit)) { return st.render() + " LIMIT 0," + limit; } diff --git a/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java index a17535c851..2dd9ea9ce1 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/db2/Db2QueryProvider.java @@ -163,6 +163,7 @@ public class Db2QueryProvider extends QueryProvider { .build()); } } + STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("previewSql"); st_sql.add("isGroup", isGroup); @@ -192,17 +193,6 @@ public class Db2QueryProvider extends QueryProvider { } if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); - if (needDistinct(sortFields, limit)) { - st_sql.remove("groups"); - xOrders.forEach(f -> { - if (xFields.stream().noneMatch(x -> x.getFieldName().equals(f.getOrderField()))) { - String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, xFields.size()); - SQLObj tField = SQLObj.builder().fieldName(f.getOrderField()).fieldAlias(fieldAlias).build(); - xFields.add(tField); - } - }); - st_sql.add("groups", xFields); - } } if (ObjectUtils.isNotEmpty(limit)) { ChartViewWithBLOBs view = new ChartViewWithBLOBs(); diff --git a/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java index d1b54f8cd7..74fe391f29 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/mysql/MysqlQueryProvider.java @@ -39,7 +39,6 @@ import javax.annotation.Resource; import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -169,14 +168,13 @@ public class MysqlQueryProvider extends QueryProvider { .build(); List xFields = new ArrayList<>(); List fieldList = fields.stream().map(DatasetTableField::getId).collect(Collectors.toList()); - AtomicInteger sortIndex = new AtomicInteger(-1); if (CollectionUtils.isNotEmpty(sortFields)) { sortFields.forEach(item -> { - sortIndex.set(fieldList.indexOf(item.getId())); - if (sortIndex.get() == -1) { + int indexOf = fieldList.indexOf(item.getId()); + if (indexOf == -1) { fields.add(item); } else { - fields.set(sortIndex.get(), item); + fields.set(indexOf, item); } }); } @@ -275,19 +273,6 @@ public class MysqlQueryProvider extends QueryProvider { if (CollectionUtils.isNotEmpty(xOrders)) { st.add("orders", xOrders); } - if (CollectionUtils.isNotEmpty(xFields)) { - List finallyFields = new ArrayList<>(); - for (int i = 0; i < xFields.size(); i++) { - if (CollectionUtils.isNotEmpty(xOrders) && sortIndex.get() == -1 && i == xFields.size() - 1) { - continue; - } - SQLObj f = xFields.get(i); - String prefix = finallyFields.isEmpty() ? " DISTINCT " : ""; - f.setFieldName(prefix + String.format(MySQLConstants.KEYWORD_FIX, tableSQL.getTableAlias(), f.getFieldAlias())); - finallyFields.add(f); - } - st.add("groups", finallyFields); - } if (ObjectUtils.isNotEmpty(limit)) { ChartViewWithBLOBs view = new ChartViewWithBLOBs(); view.setResultMode("custom"); diff --git a/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java index 1b5c70fb9d..dfcc5ccbbe 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java @@ -121,6 +121,8 @@ public class OracleQueryProvider extends QueryProvider { setSchema(tableObj, ds); List xFields = xFields(table, fields); + + STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("previewSql"); st_sql.add("isGroup", isGroup); @@ -149,17 +151,6 @@ public class OracleQueryProvider extends QueryProvider { } if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); - if (needDistinct(sortFields, limit)) { - st_sql.remove("groups"); - xOrders.forEach(f -> { - if (xFields.stream().noneMatch(x -> x.getFieldName().equals(f.getOrderField()))) { - String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, xFields.size()); - SQLObj tField = SQLObj.builder().fieldName(f.getOrderField()).fieldAlias(fieldAlias).build(); - xFields.add(tField); - } - }); - st_sql.add("groups", xFields); - } } if (ObjectUtils.isNotEmpty(limit)) { ChartViewWithBLOBs view = new ChartViewWithBLOBs(); diff --git a/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java index 2a2c1a9076..a18e0cc6f7 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java @@ -170,10 +170,10 @@ public class PgQueryProvider extends QueryProvider { .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) - .build()); } } + STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("previewSql"); st_sql.add("isGroup", isGroup); @@ -207,17 +207,6 @@ public class PgQueryProvider extends QueryProvider { } if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); - if (needDistinct(sortFields, limit)) { - st_sql.remove("groups"); - xOrders.forEach(f -> { - if (xFields.stream().noneMatch(x -> x.getFieldName().equals(f.getOrderField()))) { - String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, xFields.size()); - SQLObj tField = SQLObj.builder().fieldName(f.getOrderField()).fieldAlias(fieldAlias).build(); - xFields.add(tField); - } - }); - st_sql.add("groups", xFields); - } } if (ObjectUtils.isNotEmpty(limit)) { if (ObjectUtils.isNotEmpty(limit)) { diff --git a/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java index 716c32860b..37b0e78a00 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java @@ -250,20 +250,7 @@ public class SqlserverQueryProvider extends QueryProvider { } } if (ObjectUtils.isNotEmpty(limit)) { - String topKeyWord = " top "; - if (needDistinct(sortFields, limit)) { - topKeyWord = " distinct top "; - st_sql.remove("groups"); - xOrders.forEach(f -> { - if (xFields.stream().noneMatch(x -> x.getFieldName().equals(f.getOrderField()))) { - String fieldAlias = String.format(SQLConstants.FIELD_ALIAS_X_PREFIX, xFields.size()); - SQLObj tField = SQLObj.builder().fieldName(f.getOrderField()).fieldAlias(fieldAlias).build(); - xFields.add(tField); - } - }); - st_sql.add("groups", xFields); - } - SQLObj limitFiled = SQLObj.builder().limitFiled(topKeyWord + limit + " ").build(); + SQLObj limitFiled = SQLObj.builder().limitFiled(" top " + limit + " ").build(); st_sql.add("limitFiled", limitFiled); } diff --git a/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/query/QueryProvider.java b/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/query/QueryProvider.java index d60e4a37f9..b9f863dc8b 100644 --- a/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/query/QueryProvider.java +++ b/sdk/dataease-plugin-datasource/src/main/java/io/dataease/plugins/datasource/query/QueryProvider.java @@ -263,8 +263,4 @@ public abstract class QueryProvider { } return "'%" + value + "%'"; } - - public boolean needDistinct(List sortFields, Long limit) { - return CollectionUtils.isNotEmpty(sortFields) && ObjectUtils.isNotEmpty(limit); - } }