From 927bdbdebfaed6d26889f4ef0fa976d7817266b4 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Fri, 31 Dec 2021 16:34:21 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20mongo=20sql=20=E6=8B=BC=E6=8E=A5?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../provider/datasource/JdbcProvider.java | 4 ++ .../dataease/provider/query/SQLConstants.java | 14 ++--- .../query/mongodb/MongoQueryProvider.java | 63 +++++++++++++++---- .../src/main/resources/sql/sqlTemplate.stg | 24 +++++-- 4 files changed, 79 insertions(+), 26 deletions(-) diff --git a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java index 8027b6cfd2..df88db99c1 100644 --- a/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java +++ b/backend/src/main/java/io/dataease/provider/datasource/JdbcProvider.java @@ -137,6 +137,10 @@ public class JdbcProvider extends DatasourceProvider { @Override public List getTableFileds(DatasourceRequest datasourceRequest) throws Exception { + if(datasourceRequest.getDatasource().getType().equalsIgnoreCase("mongo")){ + datasourceRequest.setQuery("select * from " + datasourceRequest.getTable()); + return fetchResultField(datasourceRequest); + } List list = new LinkedList<>(); try (Connection connection = getConnectionFromPool(datasourceRequest)) { DatabaseMetaData databaseMetaData = connection.getMetaData(); diff --git a/backend/src/main/java/io/dataease/provider/query/SQLConstants.java b/backend/src/main/java/io/dataease/provider/query/SQLConstants.java index d361d76c7e..e7174b5211 100644 --- a/backend/src/main/java/io/dataease/provider/query/SQLConstants.java +++ b/backend/src/main/java/io/dataease/provider/query/SQLConstants.java @@ -31,11 +31,11 @@ public class SQLConstants { */ public static final String SQL_TEMPLATE = "sql/sqlTemplate.stg"; - public static final String TABLE_ALIAS_PREFIX = "T_A_%s"; - public static final String FIELD_ALIAS_X_PREFIX = "F_AX_%s"; - public static final String FIELD_ALIAS_Y_PREFIX = "F_AY_%s"; - public static final String GROUP_ALIAS_PREFIX = "G_A_%s"; - public static final String ORDER_ALIAS_X_PREFIX = "O_AX_%s"; - public static final String ORDER_ALIAS_Y_PREFIX = "O_AY_%s"; - public static final String WHERE_ALIAS_PREFIX = "W_A_%s"; + public static final String TABLE_ALIAS_PREFIX = "t_a_%s"; + public static final String FIELD_ALIAS_X_PREFIX = "f_ax_%s"; + public static final String FIELD_ALIAS_Y_PREFIX = "f_ay_%s"; + public static final String GROUP_ALIAS_PREFIX = "g_a_%s"; + public static final String ORDER_ALIAS_X_PREFIX = "o_ax_%s"; + public static final String ORDER_ALIAS_Y_PREFIX = "o_ay_%s"; + public static final String WHERE_ALIAS_PREFIX = "w_a_%s"; } diff --git a/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java b/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java index c1b600f8eb..2a4377dbe7 100644 --- a/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java +++ b/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java @@ -114,7 +114,10 @@ public class MongoQueryProvider extends QueryProvider { STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("previewSql"); st_sql.add("isGroup", isGroup); - if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); + if (CollectionUtils.isNotEmpty(xFields)) { + st_sql.add("groups", xFields); + st_sql.add("notUseAs", true); + } if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); String customWheres = transCustomFilterList(tableObj, fieldCustomFilter); List wheres = new ArrayList<>(); @@ -233,8 +236,14 @@ public class MongoQueryProvider extends QueryProvider { STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("querySql"); - if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); - if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields); + if (CollectionUtils.isNotEmpty(xFields)) { + st_sql.add("groups", xFields); + st_sql.add("notUseAs", true); + } + if (CollectionUtils.isNotEmpty(yFields)) { + st_sql.add("aggregators", yFields); + st_sql.add("notUseAs", true); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); String sql = st_sql.render(); @@ -302,7 +311,10 @@ public class MongoQueryProvider extends QueryProvider { STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("previewSql"); st_sql.add("isGroup", false); - if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); + if (CollectionUtils.isNotEmpty(xFields)) { + st_sql.add("groups", xFields); + st_sql.add("notUseAs", true); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); String sql = st_sql.render(); @@ -417,8 +429,14 @@ public class MongoQueryProvider extends QueryProvider { STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("querySql"); - if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); - if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields); + if (CollectionUtils.isNotEmpty(xFields)) { + st_sql.add("groups", xFields); + st_sql.add("notUseAs", true); + } + if (CollectionUtils.isNotEmpty(yFields)) { + st_sql.add("aggregators", yFields); + st_sql.add("notUseAs", true); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); String sql = st_sql.render(); @@ -527,8 +545,14 @@ public class MongoQueryProvider extends QueryProvider { STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("querySql"); - if (CollectionUtils.isNotEmpty(xFields)) st_sql.add("groups", xFields); - if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields); + if (CollectionUtils.isNotEmpty(xFields)) { + st_sql.add("groups", xFields); + st_sql.add("notUseAs", true); + } + if (CollectionUtils.isNotEmpty(yFields)) { + st_sql.add("aggregators", yFields); + st_sql.add("notUseAs", true); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); String sql = st_sql.render(); @@ -610,7 +634,10 @@ public class MongoQueryProvider extends QueryProvider { STGroup stg = new STGroupFile(SQLConstants.SQL_TEMPLATE); ST st_sql = stg.getInstanceOf("querySql"); - if (CollectionUtils.isNotEmpty(yFields)) st_sql.add("aggregators", yFields); + if (CollectionUtils.isNotEmpty(yFields)) { + st_sql.add("aggregators", yFields); + st_sql.add("notUseAs", true); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (ObjectUtils.isNotEmpty(tableObj)) st_sql.add("table", tableObj); String sql = st_sql.render(); @@ -735,7 +762,7 @@ public class MongoQueryProvider extends QueryProvider { for (ChartCustomFilterItemDTO filterItemDTO : filter) { String value = filterItemDTO.getValue(); String whereTerm = transMysqlFilterTerm(filterItemDTO.getTerm()); - String whereValue = ""; + String whereValue = value; if (StringUtils.equalsIgnoreCase(filterItemDTO.getTerm(), "null")) { whereValue = ""; @@ -750,7 +777,9 @@ public class MongoQueryProvider extends QueryProvider { } else if (StringUtils.containsIgnoreCase(filterItemDTO.getTerm(), "like")) { whereValue = "'%" + value + "%'"; } else { - whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value); + if(field.getDeType() == DeTypeConstants.DE_STRING){ + whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value); + } } list.add(SQLObj.builder() .whereField(whereName) @@ -809,7 +838,11 @@ public class MongoQueryProvider extends QueryProvider { whereValue = String.format(MongoConstants.WHERE_BETWEEN, value.get(0), value.get(1)); } } else { - whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value.get(0)); + if(field.getDeType() == DeTypeConstants.DE_STRING){ + whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, value.get(0)); + }else { + whereValue = value.get(0); + } } list.add(SQLObj.builder() .whereField(whereName) @@ -908,7 +941,11 @@ public class MongoQueryProvider extends QueryProvider { } else if (StringUtils.containsIgnoreCase(f.getTerm(), "like")) { whereValue = "'%" + f.getValue() + "%'"; } else { - whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, f.getValue()); + if(y.getDeType() == DeTypeConstants.DE_STRING){ + whereValue = String.format(MongoConstants.WHERE_VALUE_VALUE, f.getValue()); + }else { + whereValue = f.getValue(); + } } list.add(SQLObj.builder() .whereField(fieldAlias) diff --git a/backend/src/main/resources/sql/sqlTemplate.stg b/backend/src/main/resources/sql/sqlTemplate.stg index f101e3471c..e1a80c86ad 100644 --- a/backend/src/main/resources/sql/sqlTemplate.stg +++ b/backend/src/main/resources/sql/sqlTemplate.stg @@ -1,4 +1,4 @@ -querySql(limitFiled, groups, aggregators, filters, orders, table) +querySql(limitFiled, groups, aggregators, filters, orders, table, notUseAs) ::=<< SELECT @@ -7,11 +7,17 @@ SELECT * - + + }; separator=",\n"> + + AS }; separator=",\n"> , - + + }; separator=",\n"> + + AS }; separator=",\n"> FROM @@ -31,7 +37,7 @@ ORDER BY >> -previewSql(limitFiled, groups, aggregators, filters, orders, table, isGroup) +previewSql(limitFiled, groups, aggregators, filters, orders, table, isGroup, notUseAs) ::=<< SELECT @@ -40,11 +46,17 @@ SELECT * - + + }; separator=",\n"> + + AS }; separator=",\n"> , - + + }; separator=",\n"> + + AS }; separator=",\n"> FROM