From a7dc7402218b4cc8b5c5d2512286e51256ec1a8c Mon Sep 17 00:00:00 2001 From: SwallowGG <1558143046@qq.com> Date: Fri, 3 Nov 2023 12:05:32 +0800 Subject: [PATCH] Simplify the update and delete statements for query results when the table contains primary keys --- .../plugin/kingbase/KingBaseDBManage.java | 1 + .../core/impl/DlTemplateServiceImpl.java | 7 ++--- .../domain/core/util/MetaNameUtils.java | 26 +++++++++++++++++++ .../common/util/EasyCollectionUtils.java | 17 ++++++++---- 4 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/util/MetaNameUtils.java diff --git a/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/KingBaseDBManage.java b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/KingBaseDBManage.java index 4a790d9c..4f967a60 100644 --- a/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/KingBaseDBManage.java +++ b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/KingBaseDBManage.java @@ -19,6 +19,7 @@ public class KingBaseDBManage extends DefaultDBManage implements DBManage { SQLExecutor.getInstance().execute(connection, "SET search_path TO \"" + connectInfo.getSchemaName() + "\""); } } catch (Exception e) { + e.printStackTrace(); } } diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DlTemplateServiceImpl.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DlTemplateServiceImpl.java index 82c43435..b5fe79ab 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DlTemplateServiceImpl.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DlTemplateServiceImpl.java @@ -9,6 +9,7 @@ import ai.chat2db.server.domain.api.param.*; import ai.chat2db.server.domain.api.param.operation.OperationLogCreateParam; import ai.chat2db.server.domain.api.service.OperationLogService; import ai.chat2db.server.domain.api.service.TableService; +import ai.chat2db.server.domain.core.util.MetaNameUtils; import ai.chat2db.spi.MetaData; import ai.chat2db.spi.model.*; import ai.chat2db.spi.sql.ConnectInfo; @@ -180,7 +181,7 @@ public class DlTemplateServiceImpl implements DlTemplateService { } List
headers = executeResult.getHeaderList(); - if (executeResult.isCanEdit()) { + if (executeResult.getSuccess() && executeResult.isCanEdit() && CollectionUtils.isNotEmpty(headers)){ headers = setColumnInfo(headers, executeResult.getTableName(), param.getSchemaName(), param.getDatabaseName()); } Header rowNumberHeader = Header.builder() @@ -188,7 +189,7 @@ public class DlTemplateServiceImpl implements DlTemplateService { .dataType(DataTypeEnum.CHAT2DB_ROW_NUMBER .getCode()).build(); - executeResult.setHeaderList(ListUtils.union(Arrays.asList(rowNumberHeader), headers)); + executeResult.setHeaderList(EasyCollectionUtils.union(Arrays.asList(rowNumberHeader), headers)); if (executeResult.getDataList() != null) { int rowNumberIncrement = 1 + Math.max(pageNo - 1, 0) * pageSize; for (int i = 0; i < executeResult.getDataList().size(); i++) { @@ -392,7 +393,7 @@ public class DlTemplateServiceImpl implements DlTemplateService { private List
setColumnInfo(List
headers, String tableName, String schemaName, String databaseName) { TableQueryParam tableQueryParam = new TableQueryParam(); - tableQueryParam.setTableName(tableName); + tableQueryParam.setTableName(MetaNameUtils.getMetaName(tableName)); tableQueryParam.setSchemaName(schemaName); tableQueryParam.setDatabaseName(databaseName); List columns = tableService.queryColumns(tableQueryParam); diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/util/MetaNameUtils.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/util/MetaNameUtils.java new file mode 100644 index 00000000..eab4d644 --- /dev/null +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/util/MetaNameUtils.java @@ -0,0 +1,26 @@ +package ai.chat2db.server.domain.core.util; + + +import org.apache.commons.lang3.StringUtils; + +public class MetaNameUtils { + + public static String getMetaName(String tableName) { + if(StringUtils.isBlank(tableName)){ + return tableName; + } + if(tableName.startsWith("`") && tableName.endsWith("`")){ + return tableName.substring(1,tableName.length()-1); + } + if(tableName.startsWith("\"") && tableName.endsWith("\"")){ + return tableName.substring(1,tableName.length()-1); + } + if(tableName.startsWith("'") && tableName.endsWith("'")){ + return tableName.substring(1,tableName.length()-1); + } + if(tableName.startsWith("[") && tableName.endsWith("]")){ + return tableName.substring(1,tableName.length()-1); + } + return tableName; + } +} diff --git a/chat2db-server/chat2db-server-tools/chat2db-server-tools-common/src/main/java/ai/chat2db/server/tools/common/util/EasyCollectionUtils.java b/chat2db-server/chat2db-server-tools/chat2db-server-tools-common/src/main/java/ai/chat2db/server/tools/common/util/EasyCollectionUtils.java index 2576da48..9f1ad43a 100644 --- a/chat2db-server/chat2db-server-tools/chat2db-server-tools-common/src/main/java/ai/chat2db/server/tools/common/util/EasyCollectionUtils.java +++ b/chat2db-server/chat2db-server-tools/chat2db-server-tools-common/src/main/java/ai/chat2db/server/tools/common/util/EasyCollectionUtils.java @@ -1,10 +1,6 @@ package ai.chat2db.server.tools.common.util; -import java.util.Collection; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import java.util.function.Predicate; @@ -189,4 +185,15 @@ public class EasyCollectionUtils { return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; } + public static List union(List list1, List list2) { + ArrayList result = new ArrayList(); + if(list1 != null && list1.size()>0) { + result.addAll(list1); + } + if(list2!= null && list2.size()>0) { + result.addAll(list2); + } + return result; + } + }