From 97a7321fd47e1657122116de576cea7a9c067cbb Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Mon, 27 Nov 2023 17:24:13 +0800 Subject: [PATCH] =?UTF-8?q?perf(=E6=95=B0=E6=8D=AE=E6=BA=90):=20=E6=A8=A1?= =?UTF-8?q?=E7=B3=8A=E6=90=9C=E7=B4=A2=E4=BB=A5=E5=8F=8A1000=E6=9D=A1?= =?UTF-8?q?=E9=99=90=E5=88=B6=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/doris/DorisQueryProvider.java | 16 ++++++-- .../engine/mysql/MysqlQueryProvider.java | 17 ++++++--- .../provider/query/api/ApiProvider.java | 4 +- .../provider/query/ck/CKQueryProvider.java | 19 ++++++++-- .../provider/query/db2/Db2QueryProvider.java | 19 ++++++++-- .../provider/query/es/EsQueryProvider.java | 19 ++++++++-- .../query/hive/HiveQueryProvider.java | 19 ++++++++-- .../query/impala/ImpalaQueryProvider.java | 19 ++++++++-- .../query/mongodb/MongoQueryProvider.java | 20 ++++++++-- .../query/mysql/MysqlQueryProvider.java | 25 +++++++++--- .../query/oracle/OracleQueryProvider.java | 19 ++++++++-- .../provider/query/pg/PgQueryProvider.java | 21 ++++++++-- .../query/redshift/RedshiftQueryProvider.java | 20 ++++++++-- .../sqlserver/SqlserverQueryProvider.java | 29 ++++++++------ .../impl/direct/DirectFieldService.java | 38 +++---------------- .../datasource/dm/query/DmQueryProvider.java | 20 ++++++++-- .../kingbase/query/KingbaseQueryProvider.java | 21 ++++++++-- .../kylin/query/KylinQueryProvider.java | 20 +++++++--- .../dm/query/MaxcomputeQueryProvider.java | 23 ++++++++--- .../mongo/query/MongobiQueryProvider.java | 22 ++++++++--- .../dm/query/PrestoQueryProvider.java | 20 +++++++--- .../plugins/common/dto/sqlObj/SQLObj.java | 1 + .../datasource/query/QueryProvider.java | 22 +++++------ 23 files changed, 316 insertions(+), 137 deletions(-) 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 9e3e541fc4..7d7fd45691 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 @@ -92,11 +92,11 @@ public class DorisQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(DorisConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -167,6 +167,7 @@ public class DorisQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -195,6 +196,10 @@ public class DorisQueryProvider extends QueryProvider { List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); String sql = st_sql.render(); @@ -208,6 +213,9 @@ public class DorisQueryProvider extends QueryProvider { if (CollectionUtils.isNotEmpty(xOrders)) { st.add("orders", xOrders); } + if (ObjectUtils.isNotEmpty(limit)) { + return st.render() + " LIMIT 0," + limit; + } return st.render(); } @@ -258,8 +266,8 @@ public class DorisQueryProvider extends QueryProvider { } @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sql + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sql + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } @Override diff --git a/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java index d25126ecbf..2b79c4571b 100644 --- a/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/engine/mysql/MysqlQueryProvider.java @@ -93,11 +93,11 @@ public class MysqlQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MysqlConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -149,6 +149,7 @@ public class MysqlQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -165,6 +166,10 @@ public class MysqlQueryProvider extends QueryProvider { List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); if (CollectionUtils.isNotEmpty(sortFields)) { @@ -178,7 +183,9 @@ public class MysqlQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); } - + if (ObjectUtils.isNotEmpty(limit)) { + return st_sql.render() + " LIMIT 0," + limit; + } return st_sql.render(); } @@ -229,8 +236,8 @@ public class MysqlQueryProvider extends QueryProvider { } @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sql + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sql + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } @Override diff --git a/core/backend/src/main/java/io/dataease/provider/query/api/ApiProvider.java b/core/backend/src/main/java/io/dataease/provider/query/api/ApiProvider.java index 30cf927e13..bbc677f418 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/api/ApiProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/api/ApiProvider.java @@ -76,12 +76,12 @@ public class ApiProvider extends QueryProvider { } @Override - public String createQuerySQL(String s, List list, boolean b, Datasource datasource, List list1, List rowPermissionsTree, List list2) { + public String createQuerySQL(String s, List list, boolean b, Datasource datasource, List list1, List rowPermissionsTree, List list2, Long limit, String keyword) { return null; } @Override - public String createQuerySQLAsTmp(String s, List list, boolean b, List list1, List rowPermissionsTree, List list2) { + public String createQuerySQLAsTmp(String s, List list, boolean b, List list1, List rowPermissionsTree, List list2, Long limit, String keyword) { return null; } diff --git a/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java index 414539684c..521d1c7a7a 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/ck/CKQueryProvider.java @@ -121,11 +121,11 @@ public class CKQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(CKConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -177,6 +177,7 @@ public class CKQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -194,6 +195,10 @@ public class CKQueryProvider extends QueryProvider { List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); List xOrders = new ArrayList<>(); @@ -208,6 +213,12 @@ public class CKQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); } + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st_sql.render(), view); + } return st_sql.render(); } @@ -260,8 +271,8 @@ public class CKQueryProvider extends QueryProvider { } @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } @Override 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 6394299e21..545806915d 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 @@ -90,11 +90,11 @@ public class Db2QueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(Db2Constants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -152,6 +152,7 @@ public class Db2QueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -170,6 +171,10 @@ public class Db2QueryProvider extends QueryProvider { List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); List xOrders = new ArrayList<>(); @@ -184,6 +189,12 @@ public class Db2QueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); } + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st_sql.render(), view); + } return st_sql.render(); } @@ -241,8 +252,8 @@ public class Db2QueryProvider extends QueryProvider { } @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } @Override diff --git a/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java index db09106e94..89069ca26d 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/es/EsQueryProvider.java @@ -120,11 +120,11 @@ public class EsQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(EsSqlLConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -172,6 +172,7 @@ public class EsQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -190,6 +191,10 @@ public class EsQueryProvider extends QueryProvider { List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); @@ -205,6 +210,12 @@ public class EsQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); } + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st_sql.render(), view); + } return st_sql.render(); } @@ -253,8 +264,8 @@ public class EsQueryProvider extends QueryProvider { } @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } @Override diff --git a/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java index efec86062f..8b0cb477d3 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/hive/HiveQueryProvider.java @@ -82,11 +82,11 @@ public class HiveQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(HiveConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -134,6 +134,7 @@ public class HiveQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -151,6 +152,10 @@ public class HiveQueryProvider extends QueryProvider { List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); List xOrders = new ArrayList<>(); @@ -165,6 +170,12 @@ public class HiveQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); } + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st_sql.render(), view); + } return st_sql.render(); } @@ -213,8 +224,8 @@ public class HiveQueryProvider extends QueryProvider { } @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } @Override diff --git a/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java index be73be8d1c..39b1a3097a 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/impala/ImpalaQueryProvider.java @@ -79,11 +79,11 @@ public class ImpalaQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(ImpalaConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -131,6 +131,7 @@ public class ImpalaQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -148,6 +149,10 @@ public class ImpalaQueryProvider extends QueryProvider { List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); List xOrders = new ArrayList<>(); @@ -163,12 +168,18 @@ public class ImpalaQueryProvider extends QueryProvider { st_sql.add("orders", xOrders); } + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st_sql.render(), view); + } return st_sql.render(); } @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } @Override diff --git a/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java index 8e4bac9bb8..7743e4d1fa 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/mongodb/MongoQueryProvider.java @@ -92,11 +92,11 @@ public class MongoQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MongoConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -118,6 +118,7 @@ public class MongoQueryProvider extends QueryProvider { String fieldName = ""; fieldName = originField; xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -137,6 +138,10 @@ public class MongoQueryProvider extends QueryProvider { String whereTrees = transFilterTrees(tableObj, rowPermissionsTree); List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (whereTrees != null) wheres.add(whereTrees); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); @@ -153,12 +158,19 @@ public class MongoQueryProvider extends QueryProvider { st_sql.add("orders", xOrders); } + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st_sql.render(), view); + } + return st_sql.render(); } @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } @Override 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 02cebb1bc6..6d19c6b574 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 @@ -95,12 +95,12 @@ public class MysqlQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, null, null, null); } private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int index) { @@ -155,7 +155,7 @@ public class MysqlQueryProvider extends QueryProvider { } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MySQLConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -222,6 +222,7 @@ public class MysqlQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -248,8 +249,12 @@ public class MysqlQueryProvider extends QueryProvider { List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); - if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } + if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); String sql = st_sql.render(); ST st = stg.getInstanceOf("previewSql"); st.add("isGroup", false); @@ -258,15 +263,23 @@ public class MysqlQueryProvider extends QueryProvider { .tableAlias(String.format(TABLE_ALIAS_PREFIX, 1)) .build(); st.add("table", tableSQL); + if (CollectionUtils.isNotEmpty(xOrders)) { st.add("orders", xOrders); } + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st.render(), view); + } return st.render(); } + @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } @Override 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 b384b29fe9..3fd78c57f7 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 @@ -105,7 +105,7 @@ public class OracleQueryProvider extends QueryProvider { } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(OracleConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(OracleConstants.ALIAS_FIX, String.format(TABLE_ALIAS_PREFIX, 0))) @@ -126,6 +126,10 @@ public class OracleQueryProvider extends QueryProvider { List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); List xOrders = new ArrayList<>(); @@ -140,18 +144,24 @@ public class OracleQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); } + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st_sql.render(), view); + } return st_sql.render(); } @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } public void setSchema(SQLObj tableObj, Datasource ds) { @@ -253,6 +263,7 @@ public class OracleQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); 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 3e1fd0a9f7..f0e0b053c4 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 @@ -108,11 +108,11 @@ public class PgQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(PgConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -162,6 +162,7 @@ public class PgQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -178,6 +179,10 @@ public class PgQueryProvider extends QueryProvider { String whereTrees = transFilterTrees(tableObj, rowPermissionsTree); List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (whereTrees != null) wheres.add(whereTrees); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); @@ -193,6 +198,14 @@ public class PgQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); } + if (ObjectUtils.isNotEmpty(limit)) { + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st_sql.render(), view); + } + } return st_sql.render(); } @@ -240,8 +253,8 @@ public class PgQueryProvider extends QueryProvider { } @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } @Override diff --git a/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java b/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java index 564e2c40f0..8c4a0c348f 100644 --- a/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java +++ b/core/backend/src/main/java/io/dataease/provider/query/redshift/RedshiftQueryProvider.java @@ -114,11 +114,11 @@ public class RedshiftQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(PgConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -168,6 +168,7 @@ public class RedshiftQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -184,6 +185,10 @@ public class RedshiftQueryProvider extends QueryProvider { String whereTrees = transFilterTrees(tableObj, rowPermissionsTree); List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (whereTrees != null) wheres.add(whereTrees); if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); @@ -200,6 +205,13 @@ public class RedshiftQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); } + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st_sql.render(), view); + } + return st_sql.render(); } @@ -247,8 +259,8 @@ public class RedshiftQueryProvider extends QueryProvider { } @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } @Override 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 ec52866ae8..3d98e2c9cb 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 @@ -97,7 +97,7 @@ public class SqlserverQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override @@ -105,16 +105,13 @@ public class SqlserverQueryProvider extends QueryProvider { return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree); } - @Override - public String createQuerySQLAsTmpWithLimit(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit) { - return createQuerySQLWithLimit("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit); - } - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } - @Override - public String createQuerySQLWithLimit(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit) { + /*@Override + public String createQuerySQLWithLimit(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(SqlServerSQLConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -199,11 +196,11 @@ public class SqlserverQueryProvider extends QueryProvider { st_sql.add("orders", xOrders); } return st_sql.render(); - } + }*/ @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(SqlServerSQLConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -253,6 +250,7 @@ public class SqlserverQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -270,6 +268,10 @@ public class SqlserverQueryProvider extends QueryProvider { List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); List xOrders = new ArrayList<>(); if (CollectionUtils.isNotEmpty(sortFields)) { @@ -280,6 +282,11 @@ public class SqlserverQueryProvider extends QueryProvider { xOrders.add(order); } } + if(ObjectUtils.isNotEmpty(limit)){ + SQLObj limitFiled = SQLObj.builder().limitFiled(" top " + limit + " ").build(); + st_sql.add("limitFiled", limitFiled); + } + if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); } diff --git a/core/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java b/core/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java index d436b1cea0..2e530d7355 100644 --- a/core/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java +++ b/core/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java @@ -2,7 +2,6 @@ package io.dataease.service.dataset.impl.direct; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ArrayUtil; -import cn.hutool.core.util.ReflectUtil; import com.google.gson.Gson; import io.dataease.commons.exception.DEException; import io.dataease.commons.model.BaseTreeNode; @@ -100,12 +99,6 @@ public class DirectFieldService implements DataSetFieldService { }); } - private String formatTableByKeyword(String keyword, String originTable, List fields, boolean useDataEaseName) { - if (StringUtils.isBlank(keyword)) return originTable; - List fieldNames = fields.stream().map(f -> useDataEaseName ? f.getDataeaseName() : f.getOriginName()).collect(Collectors.toList()); - String whereSql = fieldNames.stream().map(fieldName -> " " + fieldName + " like '%" + keyword + "%'").collect(Collectors.joining(" or ")); - return "( select * from " + originTable + " where (" + whereSql + ") )"; - } @Override public List fieldValues(List fieldIds, DeSortDTO sortDTO, Long userId, Boolean userPermissions, Boolean needMapping, Boolean rowAndColumnMgm, String keyword) throws Exception { @@ -176,41 +169,25 @@ public class DirectFieldService implements DataSetFieldService { QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); if (StringUtils.equalsIgnoreCase(datasetTable.getType(), DatasetType.DB.toString())) { datasourceRequest.setTable(dataTableInfoDTO.getTable()); - String formatSql = formatTableByKeyword(keyword, dataTableInfoDTO.getTable(), permissionFields, false); - createSQL = qp.createQuerySQLWithLimit(formatSql, permissionFields, !needSort, ds, customFilter, rowPermissionsTree, deSortFields, 1000L); + createSQL = qp.createQuerySQL(dataTableInfoDTO.getTable(), permissionFields, !needSort, ds, customFilter, rowPermissionsTree, deSortFields, 1000L, keyword); } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), DatasetType.SQL.toString())) { String sql = dataTableInfoDTO.getSql(); if (dataTableInfoDTO.isBase64Encryption()) { sql = new String(java.util.Base64.getDecoder().decode(sql)); } sql = dataSetTableService.handleVariableDefaultValue(sql, null, ds.getType(), false); - if (StringUtils.isNotBlank(keyword)) { - sql = formatTableByKeyword(keyword, " (" + sql + ") " + "inner_like_temp ", permissionFields, false); - } - createSQL = qp.createQuerySQLAsTmpWithLimit(sql, permissionFields, !needSort, customFilter, rowPermissionsTree, deSortFields, 1000L); + createSQL = qp.createQuerySQLAsTmp(sql, permissionFields, !needSort, customFilter, rowPermissionsTree, deSortFields, 1000L, keyword); } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), DatasetType.CUSTOM.toString())) { DataTableInfoDTO dt = new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class); List listUnion = dataSetTableUnionService.listByTableId(dt.getList().get(0).getTableId()); String sql = dataSetTableService.getCustomSQLDatasource(dt, listUnion, ds); - if (StringUtils.isNotBlank(keyword)) { - sql = formatTableByKeyword(keyword, " (" + sql + ") " + "inner_like_temp ", permissionFields, false); - } - createSQL = qp.createQuerySQLAsTmpWithLimit(sql, permissionFields, !needSort, customFilter, rowPermissionsTree, deSortFields, 1000L); + createSQL = qp.createQuerySQLAsTmp(sql, permissionFields, !needSort, customFilter, rowPermissionsTree, deSortFields, 1000L, keyword); } else if (StringUtils.equalsIgnoreCase(datasetTable.getType(), DatasetType.UNION.toString())) { DataTableInfoDTO dt = new Gson().fromJson(datasetTable.getInfo(), DataTableInfoDTO.class); String sql = (String) dataSetTableService.getUnionSQLDatasource(dt, ds).get("sql"); - if (StringUtils.isNotBlank(keyword)) { - sql = formatTableByKeyword(keyword, " (" + sql + ") " + "inner_like_temp ", permissionFields, false); - } - createSQL = qp.createQuerySQLAsTmpWithLimit(sql, permissionFields, !needSort, customFilter, rowPermissionsTree, deSortFields, 1000L); - } - if (StringUtils.equalsAny(ds.getType(), "ds_doris", "mysql")) { - Object[] args = new Object[]{createSQL, view}; - createSQL = ReflectUtil.invoke(qp, "sqlLimit", args); - datasourceRequest.setQuery(createSQL); - } else { - datasourceRequest.setQuery(qp.createSQLPreview(createSQL, null)); + createSQL = qp.createQuerySQLAsTmp(sql, permissionFields, !needSort, customFilter, rowPermissionsTree, deSortFields, 1000L, keyword); } + datasourceRequest.setQuery(qp.createSQLPreview(createSQL, null)); } else if (datasetTable.getMode() == 1) {// 抽取 // 连接doris,构建doris数据源查询 @@ -221,10 +198,7 @@ public class DirectFieldService implements DataSetFieldService { String tableName = "ds_" + datasetTable.getId().replaceAll("-", "_"); datasourceRequest.setTable(tableName); QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType()); - String formatSql = formatTableByKeyword(keyword, tableName, permissionFields, true); - createSQL = qp.createQuerySQL(formatSql, permissionFields, !needSort, null, customFilter, rowPermissionsTree, deSortFields); - Object[] args = new Object[]{createSQL, view}; - createSQL = ReflectUtil.invoke(qp, "sqlLimit", args); + createSQL = qp.createQuerySQL(tableName, permissionFields, !needSort, null, customFilter, rowPermissionsTree, deSortFields, 1000L, keyword); datasourceRequest.setQuery(createSQL); } diff --git a/extensions/dataease-extensions-datasource/dm/dm-backend/src/main/java/io/dataease/plugins/datasource/dm/query/DmQueryProvider.java b/extensions/dataease-extensions-datasource/dm/dm-backend/src/main/java/io/dataease/plugins/datasource/dm/query/DmQueryProvider.java index 4c23f4491d..5aef3e8ca2 100644 --- a/extensions/dataease-extensions-datasource/dm/dm-backend/src/main/java/io/dataease/plugins/datasource/dm/query/DmQueryProvider.java +++ b/extensions/dataease-extensions-datasource/dm/dm-backend/src/main/java/io/dataease/plugins/datasource/dm/query/DmQueryProvider.java @@ -103,7 +103,7 @@ public class DmQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, - List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(OracleConstants.KEYWORD_TABLE, table)) @@ -128,6 +128,10 @@ public class DmQueryProvider extends QueryProvider { wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); @@ -143,19 +147,26 @@ public class DmQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); } + + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st_sql.render(), view); + } return st_sql.render(); } @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, - List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } public void setSchema(SQLObj tableObj, Datasource ds) { @@ -270,6 +281,7 @@ public class DmQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); diff --git a/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/query/KingbaseQueryProvider.java b/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/query/KingbaseQueryProvider.java index 95513e6017..e8d475963a 100644 --- a/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/query/KingbaseQueryProvider.java +++ b/extensions/dataease-extensions-datasource/kingbase/kingbase-backend/src/main/java/io/dataease/plugins/datasource/kingbase/query/KingbaseQueryProvider.java @@ -111,14 +111,14 @@ public class KingbaseQueryProvider extends QueryProvider { public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, - List sortFields) { + List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(KingbaseConstants.KEYWORD_TABLE, table)) @@ -176,6 +176,7 @@ public class KingbaseQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -197,6 +198,10 @@ public class KingbaseQueryProvider extends QueryProvider { wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); @@ -212,6 +217,12 @@ public class KingbaseQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); } + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st_sql.render(), view); + } return st_sql.render(); } @@ -265,9 +276,11 @@ public class KingbaseQueryProvider extends QueryProvider { public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, - List sortFields) { + List sortFields, + Long limit, + String keyword) { return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, - sortFields); + sortFields, limit, keyword); } @Override diff --git a/extensions/dataease-extensions-datasource/kylin/kylin-backend/src/main/java/io/dataease/plugins/datasource/kylin/query/KylinQueryProvider.java b/extensions/dataease-extensions-datasource/kylin/kylin-backend/src/main/java/io/dataease/plugins/datasource/kylin/query/KylinQueryProvider.java index 44d78aaa42..cd40abfcd2 100644 --- a/extensions/dataease-extensions-datasource/kylin/kylin-backend/src/main/java/io/dataease/plugins/datasource/kylin/query/KylinQueryProvider.java +++ b/extensions/dataease-extensions-datasource/kylin/kylin-backend/src/main/java/io/dataease/plugins/datasource/kylin/query/KylinQueryProvider.java @@ -85,11 +85,11 @@ public class KylinQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(KylinConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -139,6 +139,7 @@ public class KylinQueryProvider extends QueryProvider { // } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -156,6 +157,10 @@ public class KylinQueryProvider extends QueryProvider { List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); List xOrders = new ArrayList<>(); @@ -170,7 +175,12 @@ public class KylinQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); } - + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st_sql.render(), view); + } return st_sql.render(); } @@ -217,8 +227,8 @@ public class KylinQueryProvider extends QueryProvider { } @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } @Override diff --git a/extensions/dataease-extensions-datasource/maxcompute/maxcompute-backend/src/main/java/io/dataease/plugins/datasource/dm/query/MaxcomputeQueryProvider.java b/extensions/dataease-extensions-datasource/maxcompute/maxcompute-backend/src/main/java/io/dataease/plugins/datasource/dm/query/MaxcomputeQueryProvider.java index 6aa592ef0e..86ef0b5e1f 100644 --- a/extensions/dataease-extensions-datasource/maxcompute/maxcompute-backend/src/main/java/io/dataease/plugins/datasource/dm/query/MaxcomputeQueryProvider.java +++ b/extensions/dataease-extensions-datasource/maxcompute/maxcompute-backend/src/main/java/io/dataease/plugins/datasource/dm/query/MaxcomputeQueryProvider.java @@ -81,11 +81,11 @@ public class MaxcomputeQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MaxConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -135,6 +135,7 @@ public class MaxcomputeQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -152,6 +153,10 @@ public class MaxcomputeQueryProvider extends QueryProvider { List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); List xOrders = new ArrayList<>(); @@ -166,10 +171,16 @@ public class MaxcomputeQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); String sql = st_sql.render(); - if (!StringUtils.containsIgnoreCase(sql, "LIMIT") && !StringUtils.containsIgnoreCase(sql, "offset")) { + if (ObjectUtils.isEmpty(limit) && !StringUtils.containsIgnoreCase(sql, "LIMIT") && !StringUtils.containsIgnoreCase(sql, "offset")) { sql += "LIMIT 1000000 offset 0"; + return sql; } - return sql; + } + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st_sql.render(), view); } return st_sql.render(); } @@ -218,8 +229,8 @@ public class MaxcomputeQueryProvider extends QueryProvider { } @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } @Override diff --git a/extensions/dataease-extensions-datasource/mongo/mongo-backend/src/main/java/io/dataease/plugins/datasource/mongo/query/MongobiQueryProvider.java b/extensions/dataease-extensions-datasource/mongo/mongo-backend/src/main/java/io/dataease/plugins/datasource/mongo/query/MongobiQueryProvider.java index 72f509d231..797b4b043e 100644 --- a/extensions/dataease-extensions-datasource/mongo/mongo-backend/src/main/java/io/dataease/plugins/datasource/mongo/query/MongobiQueryProvider.java +++ b/extensions/dataease-extensions-datasource/mongo/mongo-backend/src/main/java/io/dataease/plugins/datasource/mongo/query/MongobiQueryProvider.java @@ -88,12 +88,12 @@ public class MongobiQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, null, null, null); } private SQLObj buildSortField(DeSortField f, SQLObj tableObj, int index) { @@ -141,7 +141,7 @@ public class MongobiQueryProvider extends QueryProvider { } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(MongoConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -189,6 +189,7 @@ public class MongobiQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -208,6 +209,10 @@ public class MongobiQueryProvider extends QueryProvider { List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); List xOrders = new ArrayList<>(); @@ -222,13 +227,18 @@ public class MongobiQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); } - + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st_sql.render(), view); + } return st_sql.render(); } @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } @Override diff --git a/extensions/dataease-extensions-datasource/presto/presto-backend/src/main/java/io/dataease/plugins/datasource/dm/query/PrestoQueryProvider.java b/extensions/dataease-extensions-datasource/presto/presto-backend/src/main/java/io/dataease/plugins/datasource/dm/query/PrestoQueryProvider.java index fa78b128fb..5775c86852 100644 --- a/extensions/dataease-extensions-datasource/presto/presto-backend/src/main/java/io/dataease/plugins/datasource/dm/query/PrestoQueryProvider.java +++ b/extensions/dataease-extensions-datasource/presto/presto-backend/src/main/java/io/dataease/plugins/datasource/dm/query/PrestoQueryProvider.java @@ -86,11 +86,11 @@ public class PrestoQueryProvider extends QueryProvider { @Override public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null); + return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, null, null, null); } @Override - public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { + public String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { SQLObj tableObj = SQLObj.builder() .tableName((table.startsWith("(") && table.endsWith(")")) ? table : String.format(PrestoConstants.KEYWORD_TABLE, table)) .tableAlias(String.format(TABLE_ALIAS_PREFIX, 0)) @@ -139,6 +139,7 @@ public class PrestoQueryProvider extends QueryProvider { } } xFields.add(SQLObj.builder() + .fieldOriginName(originField) .fieldName(fieldName) .fieldAlias(fieldAlias) .build()); @@ -156,6 +157,10 @@ public class PrestoQueryProvider extends QueryProvider { List wheres = new ArrayList<>(); if (customWheres != null) wheres.add(customWheres); if (whereTrees != null) wheres.add(whereTrees); + if (StringUtils.isNotBlank(keyword)) { + String keyWhere = "("+transKeywordFilterList(tableObj, xFields, keyword)+")"; + wheres.add(keyWhere); + } if (CollectionUtils.isNotEmpty(wheres)) st_sql.add("filters", wheres); List xOrders = new ArrayList<>(); @@ -170,7 +175,12 @@ public class PrestoQueryProvider extends QueryProvider { if (ObjectUtils.isNotEmpty(xOrders)) { st_sql.add("orders", xOrders); } - + if (ObjectUtils.isNotEmpty(limit)) { + ChartViewWithBLOBs view = new ChartViewWithBLOBs(); + view.setResultMode("custom"); + view.setResultCount(Integer.parseInt(limit.toString())); + return sqlLimit(st_sql.render(), view); + } return st_sql.render(); } @@ -217,8 +227,8 @@ public class PrestoQueryProvider extends QueryProvider { } @Override - public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields) { - return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields); + public String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword) { + return createQuerySQL("(" + sqlFix(sql) + ")", fields, isGroup, null, fieldCustomFilter, rowPermissionsTree, sortFields, limit, keyword); } @Override diff --git a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/dto/sqlObj/SQLObj.java b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/dto/sqlObj/SQLObj.java index 30cea65dad..8510185a87 100644 --- a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/dto/sqlObj/SQLObj.java +++ b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/dto/sqlObj/SQLObj.java @@ -14,6 +14,7 @@ public class SQLObj { private String tableAlias; private String fieldName; + private String fieldOriginName; private String fieldAlias; private String groupField; 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 674e9464ae..c3b3313c80 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 @@ -25,6 +25,7 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; /** * @Author gin @@ -40,18 +41,9 @@ public abstract class QueryProvider { public abstract String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree); - public abstract String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields); - - public String createQuerySQLWithLimit(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit) { - return createQuerySQL(table, fields, isGroup, ds, fieldCustomFilter, rowPermissionsTree, sortFields); - } - - public abstract String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields); - - public String createQuerySQLAsTmpWithLimit(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit) { - return createQuerySQLAsTmp(sql, fields, isGroup, fieldCustomFilter, rowPermissionsTree, sortFields); - } + public abstract String createQuerySQL(String table, List fields, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword); + public abstract String createQuerySQLAsTmp(String sql, List fields, boolean isGroup, List fieldCustomFilter, List rowPermissionsTree, List sortFields, Long limit, String keyword); public abstract String createQueryTableWithPage(String table, List fields, Integer page, Integer pageSize, Integer realSize, boolean isGroup, Datasource ds, List fieldCustomFilter, List rowPermissionsTree); @@ -171,6 +163,14 @@ public abstract class QueryProvider { return CollectionUtils.isNotEmpty(res) ? "(" + String.join(" AND ", res) + ")" : null; } + public String transKeywordFilterList(SQLObj tableObj, List xFields, String keyword) { + String tableAlias = tableObj.getTableAlias(); + return xFields.stream().map(xField -> { + String whereName = xField.getFieldOriginName(); + return whereName + " LIKE '%"+keyword+"%'"; + }).collect(Collectors.joining(" or ")); + } + private String transTreeToWhere(SQLObj tableObj, DatasetRowPermissionsTreeObj tree) { if (ObjectUtils.isEmpty(tree)) { return null;