From 0bb789db33c9b3bffa5f46295e54fb314d425648 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Mon, 6 Dec 2021 16:59:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20sql=20=E6=8B=BC=E6=8E=A5=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../provider/query/es/EsQueryProvider.java | 2 +- .../provider/query/es/EsSqlLConstants.java | 6 +-- .../sqlserver/SqlserverQueryProvider.java | 38 ++++++++++++------- .../src/main/resources/sql/sqlTemplate.stg | 5 ++- 4 files changed, 32 insertions(+), 19 deletions(-) diff --git a/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java index d376cd3863..4c83334771 100644 --- a/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java @@ -898,7 +898,7 @@ public class EsQueryProvider extends QueryProvider { if (StringUtils.equalsIgnoreCase(y.getSummary(), "avg") || StringUtils.containsIgnoreCase(y.getSummary(), "pop")) { String cast = String.format(EsSqlLConstants.CAST, originField, y.getDeType() == DeTypeConstants.DE_INT ? "bigint" : "double"); String agg = String.format(EsSqlLConstants.AGG_FIELD, y.getSummary(), cast); - fieldName = String.format(EsSqlLConstants.CAST, agg, EsSqlLConstants.DEFAULT_FLOAT_FORMAT); + fieldName = String.format(EsSqlLConstants.ROUND, agg, "2"); } else { String cast = String.format(EsSqlLConstants.CAST, originField, y.getDeType() == DeTypeConstants.DE_INT ? "bigint" : "double"); fieldName = String.format(EsSqlLConstants.AGG_FIELD, y.getSummary(), cast); diff --git a/backend/src/main/java/io/dataease/provider/query/es/EsSqlLConstants.java b/backend/src/main/java/io/dataease/provider/query/es/EsSqlLConstants.java index 2498dc39cb..3dab2d8e56 100644 --- a/backend/src/main/java/io/dataease/provider/query/es/EsSqlLConstants.java +++ b/backend/src/main/java/io/dataease/provider/query/es/EsSqlLConstants.java @@ -19,12 +19,10 @@ public class EsSqlLConstants extends SQLConstants { public static final String CAST = "CAST(%s AS %s)"; + public static final String ROUND = "ROUND(%s, %s)"; + public static final String DEFAULT_DATE_FORMAT = "YYYY-MM-dd HH:mm:ss"; - public static final String DEFAULT_INT_FORMAT = "DECIMAL(20,0)"; - - public static final String DEFAULT_FLOAT_FORMAT = "DECIMAL(20,2)"; - public static final String WHERE_VALUE_NULL = "(NULL,'')"; public static final String WHERE_VALUE_VALUE = "'%s'"; diff --git a/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java index 908d6ec5be..d68029c77b 100644 --- a/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/sqlserver/SqlserverQueryProvider.java @@ -282,7 +282,11 @@ public class SqlserverQueryProvider extends QueryProvider { if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres); if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders); if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL); - return sqlLimit(st.render(), view); + if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) { + SQLObj limitFiled = SQLObj.builder().limitFiled("top " + view.getResultCount() + " ").build(); + st.add("limitFiled", limitFiled); + } + return st.render(); } @Override @@ -353,7 +357,11 @@ public class SqlserverQueryProvider extends QueryProvider { .build(); if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders); if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL); - return sqlLimit(st.render(), view); + if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) { + SQLObj limitFiled = SQLObj.builder().limitFiled("top " + view.getResultCount() + " ").build(); + st.add("limitFiled", limitFiled); + } + return st.render(); } @Override @@ -491,7 +499,11 @@ public class SqlserverQueryProvider extends QueryProvider { if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres); if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders); if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL); - return sqlLimit(st.render(), view); + if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) { + SQLObj limitFiled = SQLObj.builder().limitFiled("top " + view.getResultCount() + " ").build(); + st.add("limitFiled", limitFiled); + } + return st.render(); } @Override @@ -604,7 +616,11 @@ public class SqlserverQueryProvider extends QueryProvider { if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres); if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders); if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL); - return sqlLimit(st.render(), view); + if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) { + SQLObj limitFiled = SQLObj.builder().limitFiled("top " + view.getResultCount() + " ").build(); + st.add("limitFiled", limitFiled); + } + return st.render(); } @Override @@ -686,7 +702,11 @@ public class SqlserverQueryProvider extends QueryProvider { if (CollectionUtils.isNotEmpty(aggWheres)) st.add("filters", aggWheres); if (CollectionUtils.isNotEmpty(orders)) st.add("orders", orders); if (ObjectUtils.isNotEmpty(tableSQL)) st.add("table", tableSQL); - return sqlLimit(st.render(), view); + if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) { + SQLObj limitFiled = SQLObj.builder().limitFiled("top " + view.getResultCount() + " ").build(); + st.add("limitFiled", limitFiled); + } + return st.render(); } @Override @@ -1057,12 +1077,4 @@ public class SqlserverQueryProvider extends QueryProvider { } return originField; } - - private String sqlLimit(String sql, ChartViewWithBLOBs view) { - if (StringUtils.equalsIgnoreCase(view.getResultMode(), "custom")) { - return String.format("SELECT top %s * from ( %s ) as DE_SQLSERVER_TMP ", view.getResultCount(), sqlFix(sql)); - } else { - return sql; - } - } } diff --git a/backend/src/main/resources/sql/sqlTemplate.stg b/backend/src/main/resources/sql/sqlTemplate.stg index 197e44359a..066ab4f350 100644 --- a/backend/src/main/resources/sql/sqlTemplate.stg +++ b/backend/src/main/resources/sql/sqlTemplate.stg @@ -1,6 +1,9 @@ -querySql(groups, aggregators, filters, orders, table) +querySql(limitFiled, groups, aggregators, filters, orders, table) ::=<< SELECT + + + *