From ef2e87edecd78ec3d7428b7e246ad2aebe3dd1a5 Mon Sep 17 00:00:00 2001 From: Jerry Fan Date: Tue, 14 Nov 2023 16:54:46 +0800 Subject: [PATCH 01/11] feat: Modify Readme --- README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index e5adcc36..69060e0a 100644 --- a/README.md +++ b/README.md @@ -179,12 +179,18 @@ $ npm run build:web:prod / cp -r dist ../chat2db-server/chat2db-server-start/src ## ☎️ Contact Us -Please star and fork on GitHub before joining the group. -Follow our WeChat public account. +### WeChat - Click and join discord server +### Discord + +[![Discord](https://img.shields.io/badge/-Join%20us%20on%20Discord-%237289DA.svg?style=flat&logo=discord&logoColor=white)](https://discord.gg/N6JscF7q) + +## LICENSE + +The primary license used by this software is the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0), supplemented by the [Chat2DB License](./Chat2DB_LICENSE). + ## ❤️ Acknowledgements From ca12a45457a1d77e3c923f113dec4471345b8c01 Mon Sep 17 00:00:00 2001 From: shanhexi Date: Thu, 16 Nov 2023 12:25:45 +0800 Subject: [PATCH 02/11] feat: /api/jdbc/driver/save show error --- chat2db-client/src/service/connection.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chat2db-client/src/service/connection.ts b/chat2db-client/src/service/connection.ts index 7e485401..87b88563 100644 --- a/chat2db-client/src/service/connection.ts +++ b/chat2db-client/src/service/connection.ts @@ -80,7 +80,7 @@ const downloadDriver = createRequest<{ dbType: string }, void>('/api/jdbc/driver method: 'get', }); -const saveDriver = createRequest('/api/jdbc/driver/save', { errorLevel: false, method: 'post' }); +const saveDriver = createRequest('/api/jdbc/driver/save', { method: 'post' }); const getEnvList = createRequest('/api/common/environment/list_all', { errorLevel: false }); From 144b8b8d9ef44e6b134163fb734433d04a7aa7a8 Mon Sep 17 00:00:00 2001 From: SwallowGG <1558143046@qq.com> Date: Thu, 16 Nov 2023 12:38:21 +0800 Subject: [PATCH 03/11] Fix oracle datatype error --- .../domain/core/impl/JdbcDriverServiceImpl.java | 11 ++++++++++- .../java/ai/chat2db/spi/sql/IDriverManager.java | 16 ++++++++-------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/JdbcDriverServiceImpl.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/JdbcDriverServiceImpl.java index 7cb5f58a..c1d6e8c7 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/JdbcDriverServiceImpl.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/JdbcDriverServiceImpl.java @@ -9,6 +9,7 @@ import ai.chat2db.server.tools.base.wrapper.result.DataResult; import ai.chat2db.spi.config.DBConfig; import ai.chat2db.spi.config.DriverConfig; import ai.chat2db.spi.sql.Chat2DBContext; +import ai.chat2db.spi.sql.IDriverManager; import ai.chat2db.spi.util.JdbcJarUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.google.common.collect.Lists; @@ -19,6 +20,7 @@ import org.springframework.stereotype.Service; import java.io.File; import java.io.IOException; +import java.net.MalformedURLException; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -58,7 +60,8 @@ public class JdbcDriverServiceImpl implements JdbcDriverService { boolean flag = driverExists(driverConfig); if (flag && driverConfigMap.get(driverConfig.getJdbcDriver()) == null) { driverConfigMap.put(driverConfig.getJdbcDriver(), driverConfig); - setDriverDefaultProperty(driverConfig); + //TODO :临时解决方案,后续需要优化 + //setDriverDefaultProperty(driverConfig); } else { log.warn("Driver file not found: {}", driverConfig.getJdbcDriver()); } @@ -87,6 +90,12 @@ public class JdbcDriverServiceImpl implements JdbcDriverService { driverDO.setJdbcDriverClass(jdbcDriverClass); driverDO.setDbType(dbType); driverDO.setJdbcDriver(localPath); + DriverConfig driverConfig = driverConfigConverter.do2Config(driverDO); + try { + IDriverManager.getClassLoader(driverConfig); + } catch (Exception e) { + throw new RuntimeException("Driver error,please check the driver file", e); + } jdbcDriverMapper.insert(driverDO); return ActionResult.isSuccess(); } diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/IDriverManager.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/IDriverManager.java index 383193e4..32173357 100644 --- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/IDriverManager.java +++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/IDriverManager.java @@ -76,7 +76,7 @@ public class IDriverManager { } public static Connection getConnection(String url, Properties info, DriverConfig driver) - throws SQLException { + throws SQLException { if (Objects.isNull(url)) { throw new SQLException("The url cannot be null", SQL_STATE_CODE); } @@ -86,7 +86,7 @@ public class IDriverManager { driverEntry = getJDBCDriver(driver); } Connection connection; - try { + try { connection = driverEntry.getDriver().connect(url, info); if (Objects.isNull(connection)) { throw new SQLException(String.format("driver.connect return null , No suitable driver found for url %s", url), SQL_STATE_CODE); @@ -98,7 +98,7 @@ public class IDriverManager { if (Objects.isNull(con)) { throw new SQLException(String.format("Cannot create connection (%s)", sqlException.getMessage()), SQL_STATE_CODE, - sqlException); + sqlException); } return con; @@ -111,10 +111,10 @@ public class IDriverManager { return null; } DriverEntry driverEntry = DRIVER_ENTRY_MAP.get(driver.getJdbcDriver()); - if (driverEntry == null) { - driverEntry = getJDBCDriver(driver); - } try { + if (driverEntry == null) { + driverEntry = getJDBCDriver(driver); + } String url = Objects.isNull(driver.getUrl()) ? "" : driver.getUrl(); return driverEntry.getDriver().getPropertyInfo(url, null); } catch (Exception var7) { @@ -153,7 +153,7 @@ public class IDriverManager { } - public static ClassLoader getClassLoader(DriverConfig driverConfig) throws MalformedURLException { + public static ClassLoader getClassLoader(DriverConfig driverConfig) throws MalformedURLException, ClassNotFoundException { String jarPath = driverConfig.getJdbcDriver(); if (CLASS_LOADER_MAP.containsKey(jarPath)) { return CLASS_LOADER_MAP.get(jarPath); @@ -184,7 +184,7 @@ public class IDriverManager { } //urls[jarPaths.length] = new File(JdbcJarUtils.getFullPath("HikariCP-4.0.3.jar")).toURI().toURL(); cl = new URLClassLoader(urls, ClassLoader.getSystemClassLoader()); - + cl.loadClass(driverConfig.getJdbcDriverClass()); } CLASS_LOADER_MAP.put(jarPath, cl); return cl; From 290631abcb8b84e94db6008bc4e9f52f5fe71928 Mon Sep 17 00:00:00 2001 From: SwallowGG <1558143046@qq.com> Date: Thu, 16 Nov 2023 20:48:45 +0800 Subject: [PATCH 04/11] Support database or schema --- .../chat2db/plugin/clickhouse/clickhouse.json | 2 ++ .../main/java/ai/chat2db/plugin/db2/db2.json | 2 ++ .../main/java/ai/chat2db/plugin/dm/dm.json | 2 ++ .../main/java/ai/chat2db/plugin/h2/h2.json | 2 ++ .../java/ai/chat2db/plugin/hive/hive.json | 2 ++ .../ai/chat2db/plugin/kingbase/kingbase.json | 2 ++ .../ai/chat2db/plugin/mariadb/mariadb.json | 2 ++ .../ai/chat2db/plugin/mongodb/mongodb.json | 2 ++ .../java/ai/chat2db/plugin/mysql/mysql.json | 2 ++ .../chat2db/plugin/oceanbase/oceanbase.json | 2 ++ .../java/ai/chat2db/plugin/oracle/oracle.json | 2 ++ .../java/ai/chat2db/plugin/postgresql/pg.json | 2 ++ .../java/ai/chat2db/plugin/presto/presto.json | 2 ++ .../java/ai/chat2db/plugin/redis/redis.json | 2 ++ .../java/ai/chat2db/plugin/sqlite/sqlite.json | 2 ++ .../chat2db/plugin/sqlserver/sqlserver.json | 2 ++ .../server/domain/api/model/DataSource.java | 5 ++++ .../core/impl/DataSourceServiceImpl.java | 27 ++++++++++--------- .../src/main/resources/application-dev.yml | 2 +- .../data/source/vo/DataSourceVO.java | 10 +++++++ .../java/ai/chat2db/spi/config/DBConfig.java | 21 +++++++++++++++ .../ai/chat2db/spi/sql/Chat2DBContext.java | 4 +++ 22 files changed, 87 insertions(+), 14 deletions(-) diff --git a/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/clickhouse.json b/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/clickhouse.json index f0528ea2..936c2c00 100644 --- a/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/clickhouse.json +++ b/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/clickhouse.json @@ -1,5 +1,7 @@ { "dbType": "CLICKHOUSE", + "supportDatabase": false, + "supportSchema": false, "driverConfigList": [ { "url": "jdbc:clickhouse://localhost:8123/", diff --git a/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/db2.json b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/db2.json index 0f72b596..b0b3d12a 100644 --- a/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/db2.json +++ b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/db2.json @@ -1,5 +1,7 @@ { "dbType": "DB2", + "supportDatabase": false, + "supportSchema": true, "driverConfigList": [ { "url": "jdbc:db2://localhost:50000/", diff --git a/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/dm.json b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/dm.json index e58e1254..075966e1 100644 --- a/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/dm.json +++ b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/dm.json @@ -1,5 +1,7 @@ { "dbType": "DM", + "supportDatabase": false, + "supportSchema": true, "driverConfigList": [ { "url": "jdbc:dm://localhost:5236/", diff --git a/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/h2.json b/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/h2.json index 552e0ef3..ee11410d 100644 --- a/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/h2.json +++ b/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/h2.json @@ -1,5 +1,7 @@ { "dbType": "H2", + "supportDatabase": true, + "supportSchema": true, "driverConfigList": [ { "url": "jdbc:h2:tcp://localhost:9092/", diff --git a/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/hive.json b/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/hive.json index 87f528c8..119cf9a7 100644 --- a/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/hive.json +++ b/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/hive.json @@ -1,5 +1,7 @@ { "dbType": "HIVE", + "supportDatabase": false, + "supportSchema": false, "driverConfigList": [ { "url": "jdbc:hive2://localhost:10000/", diff --git a/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/kingbase.json b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/kingbase.json index 540721bc..c401d478 100644 --- a/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/kingbase.json +++ b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/kingbase.json @@ -1,5 +1,7 @@ { "dbType": "KINGBASE", + "supportDatabase": true, + "supportSchema": true, "driverConfigList": [ { "url": "jdbc:kingbase8://localhost:54321/", diff --git a/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/mariadb.json b/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/mariadb.json index e2e33688..59caa4a1 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/mariadb.json +++ b/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/mariadb.json @@ -1,5 +1,7 @@ { "dbType": "MARIADB", + "supportDatabase": true, + "supportSchema": false, "driverConfigList": [ { "url": "jdbc:mariadb://localhost:3306/", diff --git a/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/mongodb.json b/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/mongodb.json index cb4118f9..3a34cd3d 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/mongodb.json +++ b/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/mongodb.json @@ -1,5 +1,7 @@ { "dbType": "MONGODB", + "supportDatabase": false, + "supportSchema": false, "driverConfigList": [ { "url": "jdbc:mongodb://localhost:27017", diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/mysql.json b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/mysql.json index d326f1b2..5c720fa7 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/mysql.json +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/mysql.json @@ -1,5 +1,7 @@ { "dbType": "MYSQL", + "supportDatabase": true, + "supportSchema": false, "driverConfigList": [ { "url": "jdbc:mysql://localhost:3306/", diff --git a/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/oceanbase.json b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/oceanbase.json index 1e96bc9a..c3e2cff3 100644 --- a/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/oceanbase.json +++ b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/oceanbase.json @@ -1,5 +1,7 @@ { "dbType": "OCEANBASE", + "supportDatabase": false, + "supportSchema": false, "driverConfigList": [ { "url": "jdbc:oceanbase://localhost:2883/", diff --git a/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/oracle.json b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/oracle.json index 18203f8e..e2ae89fb 100644 --- a/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/oracle.json +++ b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/oracle.json @@ -1,5 +1,7 @@ { "dbType": "ORACLE", + "supportDatabase": false, + "supportSchema": true, "driverConfigList": [ { "url": "jdbc:oracle:thin:@localhost:1521:XE", diff --git a/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/pg.json b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/pg.json index ea52c00e..040611bb 100644 --- a/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/pg.json +++ b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/pg.json @@ -1,5 +1,7 @@ { "dbType": "POSTGRESQL", + "supportDatabase": true, + "supportSchema": true, "driverConfigList": [ { "url": "jdbc:postgresql://localhost:5432/postgres", diff --git a/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/presto.json b/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/presto.json index e2b87b54..b382dbf4 100644 --- a/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/presto.json +++ b/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/presto.json @@ -1,5 +1,7 @@ { "dbType": "PRESTO", + "supportDatabase": false, + "supportSchema": false, "driverConfigList": [ { "url": "jdbc:presto://localhost:8080/", diff --git a/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/redis.json b/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/redis.json index 6c0be71d..a10b33ae 100644 --- a/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/redis.json +++ b/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/redis.json @@ -1,5 +1,7 @@ { "dbType": "REDIS", + "supportDatabase": false, + "supportSchema": false, "driverConfigList": [ { "url": "jdbc:redis://127.0.0.1:6379/0", diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/sqlite.json b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/sqlite.json index a2acf8c2..a12e7bd5 100644 --- a/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/sqlite.json +++ b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/sqlite.json @@ -1,5 +1,7 @@ { "dbType": "SQLITE", + "supportDatabase": false, + "supportSchema": false, "driverConfigList": [ { "url": "jdbc:sqlite:identifier.sqlite", diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/sqlserver.json b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/sqlserver.json index ee8faea3..1c54832c 100644 --- a/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/sqlserver.json +++ b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/sqlserver.json @@ -1,5 +1,7 @@ { "dbType": "SQLSERVER", + "supportDatabase": true, + "supportSchema": true, "driverConfigList": [ { "url": "jdbc:sqlserver://localhost:1433;database=master", diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/model/DataSource.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/model/DataSource.java index 930aa7f8..1abce5fa 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/model/DataSource.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-api/src/main/java/ai/chat2db/server/domain/api/model/DataSource.java @@ -143,6 +143,11 @@ public class DataSource { */ private String serviceType; + + private boolean supportDatabase; + + private boolean supportSchema; + public LinkedHashMap getExtendMap() { if (ObjectUtils.isEmpty(extendInfo)) { return new LinkedHashMap<>(); diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java index 8486450f..26f69f81 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/DataSourceServiceImpl.java @@ -35,6 +35,7 @@ import ai.chat2db.server.tools.common.util.ContextUtils; import ai.chat2db.server.tools.common.util.EasyCollectionUtils; import ai.chat2db.server.tools.common.util.EasyEnumUtils; import ai.chat2db.server.tools.common.util.EasySqlUtils; +import ai.chat2db.spi.config.DBConfig; import ai.chat2db.spi.config.DriverConfig; import ai.chat2db.spi.model.DataSourceConnect; import ai.chat2db.spi.model.Database; @@ -278,27 +279,27 @@ public class DataSourceServiceImpl implements DataSourceService { fillEnvironment(list, selector); - fillExtendInfo(list); + fillSupportDatabase(list); } - private void fillExtendInfo(List list) { - for (DataSource dataSource : list) { - List keyValues = dataSource.getExtendInfo(); - if (CollectionUtils.isEmpty(keyValues)) { - continue; - } - for (KeyValue keyValue : keyValues) { - if (keyValue != null) { - if ("serviceName".equalsIgnoreCase(keyValue.getKey())) { + private void fillSupportDatabase(List list) { - } + if(CollectionUtils.isEmpty(list)) { + return; + } + for (DataSource dataSource:list) { + String type = dataSource.getType(); + if(StringUtils.isNotBlank(type)) { + DBConfig config = Chat2DBContext.getDBConfig(type); + if(config != null) { + dataSource.setSupportDatabase(config.isSupportDatabase()); + dataSource.setSupportSchema(config.isSupportSchema()); } } - } - } + private void fillEnvironment(List list, DataSourceSelector selector) { if (BooleanUtils.isNotTrue(selector.getEnvironment())) { return; diff --git a/chat2db-server/chat2db-server-start/src/main/resources/application-dev.yml b/chat2db-server/chat2db-server-start/src/main/resources/application-dev.yml index 62dbd0eb..f3eea546 100644 --- a/chat2db-server/chat2db-server-start/src/main/resources/application-dev.yml +++ b/chat2db-server/chat2db-server-start/src/main/resources/application-dev.yml @@ -1,7 +1,7 @@ spring: datasource: # 配置自带数据库的相对路径 - url: jdbc:h2:~/.chat2db/db/chat2db_dev;MODE=MYSQL;FILE_LOCK=NO + url: jdbc:h2:~/.chat2db/db/chat2db_dev;FILE_LOCK=NO;MODE=MYSQL driver-class-name: org.h2.Driver h2: console: diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/vo/DataSourceVO.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/vo/DataSourceVO.java index a8c9531b..f0a3c201 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/vo/DataSourceVO.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/data/source/vo/DataSourceVO.java @@ -128,4 +128,14 @@ public class DataSourceVO { * 服务类型 */ private String serviceType; + + /** + * 是否支持数据库 + */ + private boolean supportDatabase; + + /** + * 是否支持schema + */ + private boolean supportSchema; } diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/config/DBConfig.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/config/DBConfig.java index f2a2c4f3..979ef078 100644 --- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/config/DBConfig.java +++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/config/DBConfig.java @@ -42,6 +42,27 @@ public class DBConfig { private String simpleAlterTable; + private boolean supportDatabase; + + + private boolean supportSchema; + + public boolean isSupportDatabase() { + return supportDatabase; + } + + public void setSupportDatabase(boolean supportDatabase) { + this.supportDatabase = supportDatabase; + } + + public boolean isSupportSchema() { + return supportSchema; + } + + public void setSupportSchema(boolean supportSchema) { + this.supportSchema = supportSchema; + } + public String getDbType() { return dbType; } diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/Chat2DBContext.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/Chat2DBContext.java index 69021a62..4ef3c104 100644 --- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/Chat2DBContext.java +++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/Chat2DBContext.java @@ -67,6 +67,10 @@ public class Chat2DBContext { return PLUGIN_MAP.get(dbType).getMetaData(); } + public static DBConfig getDBConfig(String dbType) { + return PLUGIN_MAP.get(dbType).getDBConfig(); + } + public static DBConfig getDBConfig() { return PLUGIN_MAP.get(getConnectInfo().getDbType()).getDBConfig(); } From 0c44af1b04d01ba3c556b0072b0b4a4fbc577a65 Mon Sep 17 00:00:00 2001 From: robin <850379744@qq.com> Date: Mon, 20 Nov 2023 15:20:41 +0800 Subject: [PATCH 05/11] prompt update --- .../chat2db/server/web/api/controller/ai/ChatController.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/ChatController.java b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/ChatController.java index 6a67be49..c9e77806 100644 --- a/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/ChatController.java +++ b/chat2db-server/chat2db-server-web/chat2db-server-web-api/src/main/java/ai/chat2db/server/web/api/controller/ai/ChatController.java @@ -626,7 +626,8 @@ public class ChatController { default: break; } - return schemaProperty; + String cleanedInput = schemaProperty.replaceAll("[\r\t]", ""); + return cleanedInput; } /** From 4af8dc52b622c065ebf2e0e1b8b73bf59853c98f Mon Sep 17 00:00:00 2001 From: tmlx1990 Date: Mon, 20 Nov 2023 17:57:05 +0800 Subject: [PATCH 06/11] =?UTF-8?q?FIX:847=E4=BF=AE=E5=A4=8DMySQL=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E8=A1=A8=E6=B3=A8=E9=87=8A=E5=90=8E=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E5=9B=9E=E6=98=BE=E7=9A=84=E9=97=AE=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/ai/chat2db/spi/sql/SQLExecutor.java | 63 ++++++++++++------- 1 file changed, 42 insertions(+), 21 deletions(-) diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/SQLExecutor.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/SQLExecutor.java index 834a3749..f3706538 100644 --- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/SQLExecutor.java +++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/sql/SQLExecutor.java @@ -1,15 +1,5 @@ package ai.chat2db.spi.sql; -import java.sql.Connection; -import java.sql.ResultSet; -import java.sql.ResultSetMetaData; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.List; -import java.util.function.Consumer; -import java.util.function.Function; -import java.util.stream.Collectors; - import ai.chat2db.server.tools.base.constant.EasyToolsConstant; import ai.chat2db.server.tools.common.util.I18nUtils; import ai.chat2db.spi.ValueHandler; @@ -24,6 +14,12 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.util.Assert; +import java.sql.*; +import java.util.List; +import java.util.function.Consumer; +import java.util.function.Function; +import java.util.stream.Collectors; + /** * Dbhub 统一数据库连接管理 * @@ -94,12 +90,12 @@ public class SQLExecutor { } public void executeSql(Connection connection, String sql, Consumer> headerConsumer, - Consumer> rowConsumer,ValueHandler valueHandler) { - executeSql(connection, sql, headerConsumer, rowConsumer, true,valueHandler); + Consumer> rowConsumer, ValueHandler valueHandler) { + executeSql(connection, sql, headerConsumer, rowConsumer, true, valueHandler); } public void executeSql(Connection connection, String sql, Consumer> headerConsumer, - Consumer> rowConsumer, boolean limitSize,ValueHandler valueHandler) { + Consumer> rowConsumer, boolean limitSize, ValueHandler valueHandler) { Assert.notNull(sql, "SQL must not be null"); log.info("execute:{}", sql); try (Statement stmt = connection.createStatement();) { @@ -147,8 +143,8 @@ public class SQLExecutor { * @return * @throws SQLException */ - public ExecuteResult execute(final String sql, Connection connection,ValueHandler valueHandler) throws SQLException { - return execute(sql, connection, true, null, null,valueHandler); + public ExecuteResult execute(final String sql, Connection connection, ValueHandler valueHandler) throws SQLException { + return execute(sql, connection, true, null, null, valueHandler); } public ExecuteResult executeUpdate(final String sql, Connection connection, int n) @@ -162,7 +158,7 @@ public class SQLExecutor { if (affectedRows != n) { executeResult.setSuccess(false); executeResult.setMessage("Update error " + sql + " update affectedRows = " + affectedRows + ", Each SQL statement should update no more than one record. Please use a unique key for updates."); - // connection.rollback(); + // connection.rollback(); } } return executeResult; @@ -270,12 +266,12 @@ public class SQLExecutor { * @return * @throws SQLException */ - public ExecuteResult execute(Connection connection, String sql,ValueHandler valueHandler) throws SQLException { - return execute(sql, connection, true, null, null,valueHandler); + public ExecuteResult execute(Connection connection, String sql, ValueHandler valueHandler) throws SQLException { + return execute(sql, connection, true, null, null, valueHandler); } public ExecuteResult execute(Connection connection, String sql) throws SQLException { - return execute(sql, connection, true, null, null,new DefaultValueHandler()); + return execute(sql, connection, true, null, null, new DefaultValueHandler()); } /** @@ -342,8 +338,33 @@ public class SQLExecutor { */ public List tables(Connection connection, String databaseName, String schemaName, String tableName, String types[]) { - try (ResultSet resultSet = connection.getMetaData().getTables(databaseName, schemaName, tableName, - types)) { + + try { + DatabaseMetaData metadata = connection.getMetaData(); + ResultSet resultSet = metadata.getTables(databaseName, schemaName, tableName, + types); + // 如果connection为mysql + if ("MySQL".equalsIgnoreCase(metadata.getDatabaseProductName())) { + // 获取mysql表的comment + List
tables = ResultSetUtils.toObjectList(resultSet, Table.class); + if (CollectionUtils.isNotEmpty(tables)) { + for (Table table : tables) { + String sql = "show table status where name = '" + table.getName() + "'"; + try (Statement stmt = connection.createStatement()) { + boolean query = stmt.execute(sql); + if (query) { + try (ResultSet rs = stmt.getResultSet();) { + while (rs.next()) { + table.setComment(rs.getString("Comment")); + } + } + } + } + } + + return tables; + } + } return ResultSetUtils.toObjectList(resultSet, Table.class); } catch (SQLException e) { throw new RuntimeException(e); From 39ccca46324c5bcf68df50ecd8d2fcca63966259 Mon Sep 17 00:00:00 2001 From: shanhexi Date: Mon, 20 Nov 2023 21:36:45 +0800 Subject: [PATCH 07/11] fix: tem table scroll --- .../main/team/datasource-management/index.tsx | 74 +++++++++++-------- chat2db-client/src/pages/main/team/index.less | 5 ++ chat2db-client/src/pages/main/team/index.tsx | 1 + .../pages/main/team/team-management/index.tsx | 23 ++++-- .../pages/main/team/user-management/index.tsx | 9 +++ 5 files changed, 74 insertions(+), 38 deletions(-) diff --git a/chat2db-client/src/pages/main/team/datasource-management/index.tsx b/chat2db-client/src/pages/main/team/datasource-management/index.tsx index 815b461f..3655e44f 100644 --- a/chat2db-client/src/pages/main/team/datasource-management/index.tsx +++ b/chat2db-client/src/pages/main/team/datasource-management/index.tsx @@ -1,7 +1,7 @@ import React, { useEffect, useMemo, useRef, useState } from 'react'; import { Button, Input, Table, Popconfirm, message, Drawer } from 'antd'; import { SearchOutlined, PlusOutlined } from '@ant-design/icons'; -import ConnectionServer from '@/service/connection' +import ConnectionServer from '@/service/connection'; import { createDataSource, deleteDataSource, getDataSourceList, updateDataSource } from '@/service/team'; import { IConnectionDetails } from '@/typings'; import { AffiliationType, IDataSourceVO } from '@/typings/team'; @@ -23,13 +23,13 @@ function DataSourceManagement() { showQuickJumper: true, // pageSizeOptions: ['10', '20', '30', '40'], }); - const [showCreateConnection, setShowCreateConnection] = useState(false) + const [showCreateConnection, setShowCreateConnection] = useState(false); const connectionInfo = useRef(); const [drawerInfo, setDrawerInfo] = useState<{ open: boolean; type: AffiliationType; id?: number }>({ open: false, - type: AffiliationType['DATASOURCE_USER/TEAM'] - }) + type: AffiliationType['DATASOURCE_USER/TEAM'], + }); const columns = useMemo( () => [ @@ -49,18 +49,24 @@ function DataSourceManagement() { width: 300, render: (_: any, record: IDataSourceVO) => ( <> - - { - setPagination({ ...pagination, ...p, @@ -110,7 +119,7 @@ function DataSourceManagement() { const handleAddDataSource = () => { connectionInfo.current = undefined; setShowCreateConnection(true); - } + }; const handleEdit = async (record: IDataSourceVO) => { const { id } = record; @@ -118,14 +127,14 @@ function DataSourceManagement() { return; } - let detail = await ConnectionServer.getDetails({ id }) + let detail = await ConnectionServer.getDetails({ id }); connectionInfo.current = detail; - setShowCreateConnection(true) - } + setShowCreateConnection(true); + }; const handleDelete = async (id?: number) => { if (isNumber(id)) { - await deleteDataSource({ id }) + await deleteDataSource({ id }); message.success(i18n('common.text.successfullyDelete')); queryDataSourceList(); } @@ -140,14 +149,12 @@ function DataSourceManagement() { const isUpdate = isValid(connectionInfo?.current?.id); const requestApi = isUpdate ? updateDataSource : createDataSource; try { - await requestApi({ ...connectionInfo.current }) - message.success(isUpdate ? i18n('common.tips.updateSuccess') : i18n('common.tips.createSuccess')) - setShowCreateConnection(false) - queryDataSourceList() - } catch { - - } - } + await requestApi({ ...connectionInfo.current }); + message.success(isUpdate ? i18n('common.tips.updateSuccess') : i18n('common.tips.createSuccess')); + setShowCreateConnection(false); + queryDataSourceList(); + } catch {} + }; return (
@@ -163,6 +170,11 @@ function DataSourceManagement() {
{ setDrawerInfo({ ...drawerInfo, - open: false - }) + open: false, + }); }} /> - + ); } diff --git a/chat2db-client/src/pages/main/team/index.less b/chat2db-client/src/pages/main/team/index.less index 3f464307..3344f40c 100644 --- a/chat2db-client/src/pages/main/team/index.less +++ b/chat2db-client/src/pages/main/team/index.less @@ -1,4 +1,9 @@ .teamWrapper { height: 100vh; padding: 24px 36px; + box-sizing: border-box; +} + +.teamTabsBox{ + height: 100%; } diff --git a/chat2db-client/src/pages/main/team/index.tsx b/chat2db-client/src/pages/main/team/index.tsx index 84b94d17..9ba1c4f9 100644 --- a/chat2db-client/src/pages/main/team/index.tsx +++ b/chat2db-client/src/pages/main/team/index.tsx @@ -33,6 +33,7 @@ const Team = () => { return (
setActiveKey(activeKey)} items={tabList.map((tab, index) => { diff --git a/chat2db-client/src/pages/main/team/team-management/index.tsx b/chat2db-client/src/pages/main/team/team-management/index.tsx index 8db55191..bfe6bf1d 100644 --- a/chat2db-client/src/pages/main/team/team-management/index.tsx +++ b/chat2db-client/src/pages/main/team/team-management/index.tsx @@ -17,7 +17,7 @@ const requireRule = { required: true, message: i18n('common.form.error.required' function TeamManagement() { const [form] = Form.useForm(); - const [loadding, setLoading] = useState(false) + const [loadding, setLoading] = useState(false); const [dataSource, setDataSource] = useState([]); const [pagination, setPagination] = useState({ searchKey: '', @@ -66,7 +66,7 @@ function TeamManagement() { ...drawerInfo, open: true, teamId: record.id, - type: AffiliationType.TEAM_USER + type: AffiliationType.TEAM_USER, }); }} > @@ -79,9 +79,10 @@ function TeamManagement() { ...drawerInfo, open: true, teamId: record.id, - type: AffiliationType.TEAM_DATASOURCE + type: AffiliationType.TEAM_DATASOURCE, }); - }}> + }} + > {i18n('team.action.affiliation.datasource')}
{ form.scrollToField(errorInfo.errorFields[0].name); form.setFields(errorInfo.errorFields); - }) + }); }} onCancel={() => { form.resetFields(); diff --git a/chat2db-client/src/pages/main/team/user-management/index.tsx b/chat2db-client/src/pages/main/team/user-management/index.tsx index 967fbc12..b827290d 100644 --- a/chat2db-client/src/pages/main/team/user-management/index.tsx +++ b/chat2db-client/src/pages/main/team/user-management/index.tsx @@ -116,6 +116,10 @@ function UserManagement() { let res = await getUserManagementList({ searchKey, pageNo, pageSize }); if (res) { setDataSource(res?.data ?? []); + setPagination({ + ...pagination, + total: res?.total ?? 0, + } as any); } }; @@ -178,6 +182,11 @@ function UserManagement() {
Date: Mon, 20 Nov 2023 21:40:27 +0800 Subject: [PATCH 08/11] style --- chat2db-client/src/pages/main/team/index.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/chat2db-client/src/pages/main/team/index.less b/chat2db-client/src/pages/main/team/index.less index 3344f40c..f6b05a87 100644 --- a/chat2db-client/src/pages/main/team/index.less +++ b/chat2db-client/src/pages/main/team/index.less @@ -1,6 +1,6 @@ .teamWrapper { height: 100vh; - padding: 24px 36px; + padding: 14px 16px; box-sizing: border-box; } From f599221e1608e07b50f1cca7a8eccd9e00c22f98 Mon Sep 17 00:00:00 2001 From: shanhexi Date: Mon, 20 Nov 2023 21:45:44 +0800 Subject: [PATCH 09/11] update changelog --- CHANGELOG.md | 10 ++++++++++ CHANGELOG_CN.md | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 24567d3c..38d092e0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,13 @@ +## 3.0.14 + +`2023-11-20` + +**更新日志** + +- 🐞【Fixed】Team paging problem +- 【Developer】Friends don't worry, the company has some things recently, and is preparing 3.1.0, be patient + + ## 3.0.13 `2023-11-15` diff --git a/CHANGELOG_CN.md b/CHANGELOG_CN.md index 6dddaa64..11bfd832 100644 --- a/CHANGELOG_CN.md +++ b/CHANGELOG_CN.md @@ -1,3 +1,12 @@ +## 3.0.14 + +`2023-11-20` + +**更新日志** + +- 🐞【修复】团队分页问题 +- 【开发者】友友们不要着急呀,最近公司有些事情,并且在准备3.1.0,耐心等待哦 + ## 3.0.13 `2023-11-15` From 7c1cf20a8b8f024484635b057a5bda07e353bf60 Mon Sep 17 00:00:00 2001 From: shanhexi Date: Mon, 20 Nov 2023 21:52:49 +0800 Subject: [PATCH 10/11] changelog --- CHANGELOG.md | 6 ++++-- CHANGELOG_CN.md | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 38d092e0..a90ec925 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,12 +2,14 @@ `2023-11-20` -**更新日志** +**Changelog** - 🐞【Fixed】Team paging problem +- 🐞【Fixed】Oracle service name bug +- 🐞【Fixed】Oracle datatype error +- ⚡️【Optimize】Support database or schema - 【Developer】Friends don't worry, the company has some things recently, and is preparing 3.1.0, be patient - ## 3.0.13 `2023-11-15` diff --git a/CHANGELOG_CN.md b/CHANGELOG_CN.md index 11bfd832..70f3d147 100644 --- a/CHANGELOG_CN.md +++ b/CHANGELOG_CN.md @@ -5,8 +5,10 @@ **更新日志** - 🐞【修复】团队分页问题 +- 🐞【修复】Oracle服务名称错误 +- 🐞【修复】Oracle数据类型错误 +- ⚡️【优化】支持数据库或模式 - 【开发者】友友们不要着急呀,最近公司有些事情,并且在准备3.1.0,耐心等待哦 - ## 3.0.13 `2023-11-15` From c2483692f8cb98e89d98f70b7f6ade97b1185a65 Mon Sep 17 00:00:00 2001 From: shanhexi Date: Mon, 20 Nov 2023 21:54:45 +0800 Subject: [PATCH 11/11] changelog --- CHANGELOG.md | 1 + CHANGELOG_CN.md | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a90ec925..75aa458b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - 🐞【Fixed】Team paging problem - 🐞【Fixed】Oracle service name bug - 🐞【Fixed】Oracle datatype error +- 🐞【Fixed】Fixed an issue where MySQL changed table structure without displaying comments. - ⚡️【Optimize】Support database or schema - 【Developer】Friends don't worry, the company has some things recently, and is preparing 3.1.0, be patient diff --git a/CHANGELOG_CN.md b/CHANGELOG_CN.md index 70f3d147..992a5ef2 100644 --- a/CHANGELOG_CN.md +++ b/CHANGELOG_CN.md @@ -7,6 +7,7 @@ - 🐞【修复】团队分页问题 - 🐞【修复】Oracle服务名称错误 - 🐞【修复】Oracle数据类型错误 +- 🐞【修复】修复MySQL修改表结构,不回显注释的问题。 - ⚡️【优化】支持数据库或模式 - 【开发者】友友们不要着急呀,最近公司有些事情,并且在准备3.1.0,耐心等待哦 ## 3.0.13