From 73c14748b8d514de01b15d9bf8d27b59c45bb03b Mon Sep 17 00:00:00 2001 From: taojinlong Date: Fri, 14 Apr 2023 16:24:08 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E8=BF=87=E6=BB=A4=E5=99=A8):=20=E6=A0=91?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=99=A8=E5=9C=A8sqlserver=E5=92=8Cck?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=BA=90=E4=B8=8D=E8=83=BD=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E5=8D=95=E5=AD=97=E6=AE=B5=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../query/oracle/OracleQueryProvider.java | 23 ++++++++++--- .../provider/query/pg/PgQueryProvider.java | 34 +++++++++++++------ .../sqlserver/SqlserverQueryProvider.java | 24 ++++++++++--- 3 files changed, 62 insertions(+), 19 deletions(-) diff --git a/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java index 95b7b039a3..4f97729539 100644 --- a/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/oracle/OracleQueryProvider.java @@ -1208,16 +1208,29 @@ public class OracleQueryProvider extends QueryProvider { String format = transDateFormat(request.getDateStyle(), request.getDatePattern()); if (field.getDeType() == 1) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - whereName = String.format(OracleConstants.TO_DATE, originName, format); + if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { + whereName = String.format(OracleConstants.TO_CHAR, String.format(OracleConstants.TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : OracleConstants.DEFAULT_DATE_FORMAT), format); + }else { + whereName = String.format(OracleConstants.TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : OracleConstants.DEFAULT_DATE_FORMAT); + } } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - String cast = String.format(OracleConstants.CAST, originName, OracleConstants.DEFAULT_INT_FORMAT) + "/1000"; - whereName = String.format(OracleConstants.FROM_UNIXTIME, cast, format); + if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { + String cast = String.format(OracleConstants.CAST, originName, OracleConstants.DEFAULT_INT_FORMAT) + "/1000"; + whereName = String.format(OracleConstants.FROM_UNIXTIME, cast, format); + }else { + String cast = String.format(OracleConstants.CAST, originName, OracleConstants.DEFAULT_INT_FORMAT) + "/1000"; + whereName = String.format(OracleConstants.FROM_UNIXTIME, cast, OracleConstants.DEFAULT_DATE_FORMAT); + } } if (field.getDeExtractType() == 1) { - whereName = originName; -// whereName = String.format(OracleConstants.TO_CHAR, originName, format); + if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { + whereName = String.format(OracleConstants.TO_CHAR, originName, format); + }else { + whereName = originName; + } } + } else if (field.getDeType() == 2 || field.getDeType() == 3) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { whereName = String.format(OracleConstants.CAST, originName, OracleConstants.DEFAULT_FLOAT_FORMAT); diff --git a/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java index 05c4af1617..4a102bd3d8 100644 --- a/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/pg/PgQueryProvider.java @@ -801,11 +801,11 @@ public class PgQueryProvider extends QueryProvider { } public String getTotalCount(boolean isTable, String sql, Datasource ds) { - if(isTable){ + if (isTable) { String schema = new Gson().fromJson(ds.getConfiguration(), JdbcConfiguration.class).getSchema(); String tableWithSchema = String.format(PgConstants.KEYWORD_TABLE, schema) + "." + String.format(PgConstants.KEYWORD_TABLE, sql); return "SELECT COUNT(*) from " + tableWithSchema; - }else { + } else { return "SELECT COUNT(*) from ( " + sqlFix(sql) + " ) DE_COUNT_TEMP"; } } @@ -974,7 +974,7 @@ public class PgQueryProvider extends QueryProvider { } if (field.getDeType() == 1) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { - whereName = String.format(PgConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT); + whereName = String.format(PgConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT); } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { String cast = String.format(PgConstants.CAST, originName, "bigint"); @@ -1074,16 +1074,30 @@ public class PgQueryProvider extends QueryProvider { if (field.getDeType() == 1) { String format = transDateFormat(request.getDateStyle(), request.getDatePattern()); if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) { - String timestamp = String.format(PgConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT); - whereName = String.format(PgConstants.DATE_FORMAT, timestamp, format); + if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { + String timestamp = String.format(PgConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT); + whereName = String.format(PgConstants.DATE_FORMAT, timestamp, format); + } else { + whereName = String.format(PgConstants.STR_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT); + } } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - String cast = String.format(PgConstants.CAST, originName, "bigint"); - String timestamp = String.format(PgConstants.FROM_UNIXTIME, cast); - whereName = String.format(PgConstants.DATE_FORMAT, timestamp, format); + if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { + String cast = String.format(PgConstants.CAST, originName, "bigint"); + String timestamp = String.format(PgConstants.FROM_UNIXTIME, cast); + whereName = String.format(PgConstants.DATE_FORMAT, timestamp, format); + } else { + String cast = String.format(PgConstants.CAST, originName, "bigint"); + whereName = String.format(PgConstants.FROM_UNIXTIME, cast); + } + } if (field.getDeExtractType() == 1) { - whereName = String.format(PgConstants.DATE_FORMAT, originName, format); + if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { + whereName = String.format(PgConstants.DATE_FORMAT, originName, format); + } else { + whereName = originName; + } } } else if (field.getDeType() == 2 || field.getDeType() == 3) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { @@ -1191,7 +1205,7 @@ public class PgQueryProvider extends QueryProvider { String format = transDateFormat(x.getDateStyle(), x.getDatePattern()); if (x.getDeExtractType() == DeTypeConstants.DE_STRING) { fieldName = String.format(PgConstants.DATE_FORMAT, - String.format(PgConstants.STR_TO_DATE, originField, StringUtils.isNotEmpty(x.getDateFormat()) ? x.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT), + String.format(PgConstants.STR_TO_DATE, originField, StringUtils.isNotEmpty(x.getDateFormat()) ? x.getDateFormat() : PgConstants.DEFAULT_DATE_FORMAT), format); } else { String cast = String.format(PgConstants.CAST, originField, "bigint"); 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 a18d3de5db..8ab6fced1f 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 @@ -1080,12 +1080,28 @@ public class SqlserverQueryProvider extends QueryProvider { } if (field.getDeType() == 1) { - if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5 || field.getDeExtractType() == 1) { - whereName = transDateFormat(request.getDateStyle(), request.getDatePattern(), originName); + if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) { + if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { + whereName = transDateFormat(request.getDateStyle(), request.getDatePattern(), String.format(SqlServerSQLConstants.STRING_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : SqlServerSQLConstants.DEFAULT_DATE_FORMAT)); + }else { + whereName = String.format(SqlServerSQLConstants.STRING_TO_DATE, originName, StringUtils.isNotEmpty(field.getDateFormat()) ? field.getDateFormat() : SqlServerSQLConstants.DEFAULT_DATE_FORMAT); + } } if (field.getDeExtractType() == 2 || field.getDeExtractType() == 3 || field.getDeExtractType() == 4) { - String cast = String.format(SqlServerSQLConstants.LONG_TO_DATE, originName + "/1000"); - whereName = transDateFormat(request.getDateStyle(), request.getDatePattern(), cast);; + if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { + String cast = String.format(SqlServerSQLConstants.LONG_TO_DATE, originName + "/1000"); + whereName = transDateFormat(request.getDateStyle(), request.getDatePattern(), cast); + }else { + String cast = String.format(SqlServerSQLConstants.LONG_TO_DATE, originName + "/1000"); + whereName = String.format(SqlServerSQLConstants.FROM_UNIXTIME, cast); + } + } + if (field.getDeExtractType() == 1) { + if (StringUtils.containsIgnoreCase(request.getOperator(), "in")) { + whereName = transDateFormat(request.getDateStyle(), request.getDatePattern(), originName); + }else { + whereName = originName; + } } } else if (field.getDeType() == 2 || field.getDeType() == 3) { if (field.getDeExtractType() == 0 || field.getDeExtractType() == 5) {