diff --git a/chat2db-server/chat2db-plugins/chat2b-mysql/src/main/java/ai/chat2db/plugin/mysql/builder/form.json b/chat2db-server/chat2db-plugins/chat2b-mysql/src/main/java/ai/chat2db/plugin/mysql/builder/form.json
new file mode 100644
index 00000000..24c132a9
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2b-mysql/src/main/java/ai/chat2db/plugin/mysql/builder/form.json
@@ -0,0 +1,183 @@
+{
+ "baseInfo": {
+ "items": [
+ {
+ "defaultValue": "@localhost",
+ "inputType": "INPUT",
+ "labelNameCN": "名称",
+ "labelNameEN": "Name",
+ "name": "alias",
+ "required": true,
+ "width": 100,
+ },
+ {
+ "defaultValue": "localhost",
+ "inputType": "INPUT",
+ "labelNameCN": "主机",
+ "labelNameEN": "Host",
+ "name": "host",
+ "required": true,
+ "width": 70,
+ },
+ {
+ "defaultValue": "3306",
+ "inputType": "INPUT",
+ "labelNameCN": "端口",
+ "labelNameEN": "Port",
+ "name": "port",
+ "labelTextAlign": "right",
+ "required": true,
+ "width": 30,
+ },
+ {
+ "defaultValue": AuthenticationType.USERANDPASSWORD,
+ "inputType": InputType.SELECT,
+ "labelNameCN": "身份验证",
+ "labelNameEN": "Authentication",
+ "name": "authentication",
+ "required": true,
+ "selects": [
+ {
+ "items": [
+ {
+ "defaultValue": "root",
+ "inputType": "INPUT",
+ "labelNameCN": "用户名",
+ "labelNameEN": "User",
+ "name": "user",
+ "required": true,
+ "width": 100,
+ },
+ {
+ "defaultValue": ",
+ "inputType": InputType.PASSWORD,
+ "labelNameCN": "密码",
+ "labelNameEN": "Password",
+ "name": "password",
+ "required": true,
+ "width": 100,
+ },
+ ],
+ "label": "User&Password",
+ "value": AuthenticationType.USERANDPASSWORD,
+ },
+ {
+ "label": "NONE",
+ "value": "NONE,
+ },
+ ],
+ "width": 50
+ },
+ {
+ "defaultValue": "",
+ "inputType": "INPUT",
+ "labelNameCN": "数据库",
+ "labelNameEN": "Database",
+ "name": "database",
+ "required": false,
+ "width": 100
+ },
+ {
+ "defaultValue": "jdbc:mysql://localhost:3306",
+ "inputType": "INPUT",
+ "labelNameCN": "URL",
+ "labelNameEN": "URL",
+ "name": "url",
+ "required": true,
+ "width": 100
+ },
+ {
+ "defaultValue": "8.0",
+ "inputType": "SELECT",
+ "labelNameCN": "JDBC驱动",
+ "labelNameEN": "JDBC Driver",
+ "name": "jdbc",
+ "required": true,
+ "selects": [
+ {
+ "value": "8.0"
+ },
+ {
+ "value": "5.0"
+ }
+ ],
+ "width": 100
+ }
+ ],
+ "pattern": "/jdbc:mysql:\/\/(.*):(\\d+)(\/(\\w+))?/",
+ "template": "jdbc:mysql://{host}:{port}/{database}"
+ },
+ "ssh": {
+ "items": [
+ {
+ "defaultValue": "false",
+ "inputType": "SELECT",
+ "labelNameCN": "使用SSH",
+ "labelNameEN": "USE SSH",
+ "name": "use",
+ "required": false,
+ "selects": [
+ {
+ "value": "false"
+ },
+ {
+ "value": "true"
+ }
+ ],
+ "width": 100
+ },
+ {
+ "defaultValue": "",
+ "inputType": "INPUT",
+ "labelNameCN": "SSH 主机",
+ "labelNameEN": "SSH Hostname",
+ "name": "hostName",
+ "required": false,
+ "width": 70
+ },
+ {
+ "defaultValue": "22",
+ "inputType": "INPUT",
+ "labelNameCN": "SSH 端口",
+ "labelNameEN": "Port",
+ "name": "port",
+ "required": false,
+ "width": 28
+ },
+ {
+ "defaultValue": "root",
+ "inputType": "INPUT",
+ "labelNameCN": "用户名",
+ "labelNameEN": "SSH UserName",
+ "name": "userName",
+ "required": false,
+ "width": 70
+ },
+ {
+ "defaultValue": "3306",
+ "inputType": "INPUT",
+ "labelNameCN": "本地端口",
+ "labelNameEN": "LocalPort",
+ "name": "localPort",
+ "required": false,
+ "width": 28
+ },
+ {
+ "defaultValue": "",
+ "inputType": "PASSWORD",
+ "labelNameCN": "密码",
+ "labelNameEN": "Password",
+ "name": "password",
+ "required": true,
+ "width": 100
+ }
+ ]
+ },
+ "extendInfo": [
+ {
+ "key":"zeroDateTimeBehavior",
+ "value":"convertToNull"
+ }
+ ],
+ "type":"MYSQL"
+}
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-clickhouse/pom.xml b/chat2db-server/chat2db-plugins/chat2db-clickhouse/pom.xml
new file mode 100644
index 00000000..37a9b798
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-clickhouse/pom.xml
@@ -0,0 +1,20 @@
+
+
+ 4.0.0
+
+ ai.chat2db
+ chat2db-plugins
+ ${revision}
+ ../pom.xml
+
+
+
+
+ ai.chat2db
+ chat2db-spi
+
+
+ chat2db-clickhouse
+
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/ClickHouseDBManage.java b/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/ClickHouseDBManage.java
new file mode 100644
index 00000000..137b6db1
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/ClickHouseDBManage.java
@@ -0,0 +1,44 @@
+package ai.chat2db.plugin.clickhouse;
+
+import ai.chat2db.spi.DBManage;
+
+public class ClickHouseDBManage implements DBManage {
+ @Override
+ public void connectDatabase(String database) {
+ }
+
+ @Override
+ public void modifyDatabase(String databaseName, String newDatabaseName) {
+
+ }
+
+ @Override
+ public void createDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void dropDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void createSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void dropSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
+
+ }
+
+ @Override
+ public void dropTable(String databaseName, String schemaName, String tableName) {
+
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/ClickHouseMetaData.java b/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/ClickHouseMetaData.java
new file mode 100644
index 00000000..0d30804c
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/ClickHouseMetaData.java
@@ -0,0 +1,8 @@
+package ai.chat2db.plugin.clickhouse;
+
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+
+public class ClickHouseMetaData extends DefaultMetaService implements MetaData {
+
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/ClickHousePlugin.java b/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/ClickHousePlugin.java
new file mode 100644
index 00000000..b9f80162
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/ClickHousePlugin.java
@@ -0,0 +1,25 @@
+package ai.chat2db.plugin.clickhouse;
+
+
+import ai.chat2db.plugin.clickhouse.builder.DBConfigBuilder;
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.Plugin;
+import ai.chat2db.spi.config.DBConfig;
+
+public class ClickHousePlugin implements Plugin {
+ @Override
+ public DBConfig getDBConfig() {
+ return DBConfigBuilder.buildDBConfig();
+ }
+
+ @Override
+ public MetaData getMetaData() {
+ return new ClickHouseMetaData();
+ }
+
+ @Override
+ public DBManage getDBManage() {
+ return new ClickHouseDBManage();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/builder/DBConfigBuilder.java b/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/builder/DBConfigBuilder.java
new file mode 100644
index 00000000..3b7df457
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/java/ai/chat2db/plugin/clickhouse/builder/DBConfigBuilder.java
@@ -0,0 +1,24 @@
+package ai.chat2db.plugin.clickhouse.builder;
+
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.config.DriverConfig;
+import com.google.common.collect.Lists;
+
+public class DBConfigBuilder {
+ public static DBConfig buildDBConfig() {
+ DBConfig dbConfig = new DBConfig();
+ dbConfig.setName("ClickHouse");
+ dbConfig.setDbType("CLICKHOUSE");
+
+ DriverConfig driverConfig = new DriverConfig();
+ driverConfig.setJdbcDriver("clickhouse-jdbc-0.3.2-patch8-http.jar");
+ driverConfig.setJdbcDriverClass("com.clickhouse.jdbc.ClickHouseDriver");
+ driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/clickhouse-jdbc-0.3.2-patch8-http.jar"));
+ driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
+ dbConfig.setDefaultDriverConfig(driverConfig);
+
+ dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
+ return dbConfig;
+ }
+}
+
diff --git a/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin b/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
new file mode 100644
index 00000000..a56d4375
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-clickhouse/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
@@ -0,0 +1 @@
+ai.chat2db.plugin.clickhouse.ClickHousePlugin
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-db2/pom.xml b/chat2db-server/chat2db-plugins/chat2db-db2/pom.xml
new file mode 100644
index 00000000..1bf7e5ef
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-db2/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+ ai.chat2db
+ chat2db-plugins
+ ${revision}
+ ../pom.xml
+
+
+
+
+ ai.chat2db
+ chat2db-spi
+
+
+ chat2db-db2
+
+
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/DB2DBManage.java b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/DB2DBManage.java
new file mode 100644
index 00000000..c4184b63
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/DB2DBManage.java
@@ -0,0 +1,45 @@
+package ai.chat2db.plugin.db2;
+
+import ai.chat2db.spi.DBManage;
+
+public class DB2DBManage implements DBManage {
+ @Override
+ public void connectDatabase(String database) {
+
+ }
+
+ @Override
+ public void modifyDatabase(String databaseName, String newDatabaseName) {
+
+ }
+
+ @Override
+ public void createDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void dropDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void createSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void dropSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
+
+ }
+
+ @Override
+ public void dropTable(String databaseName, String schemaName, String tableName) {
+
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/DB2MetaData.java b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/DB2MetaData.java
new file mode 100644
index 00000000..f1cfd0dd
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/DB2MetaData.java
@@ -0,0 +1,61 @@
+package ai.chat2db.plugin.db2;
+
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+import ai.chat2db.spi.sql.SQLExecutor;
+
+import java.sql.SQLException;
+
+public class DB2MetaData extends DefaultMetaService implements MetaData {
+ private String functionSQL
+ = "CREATE FUNCTION tableSchema.ufn_GetCreateTableScript( @schema_name NVARCHAR(128), @table_name NVARCHAR"
+ + "(128)) RETURNS NVARCHAR(MAX) AS BEGIN DECLARE @CreateTableScript NVARCHAR(MAX); DECLARE @IndexScripts "
+ + "NVARCHAR(MAX) = ''; DECLARE @ColumnDescriptions NVARCHAR(MAX) = N''; SELECT @CreateTableScript = CONCAT( "
+ + "'CREATE TABLE [', s.name, '].[' , t.name, '] (', STUFF( ( SELECT ', [' + c.name + '] ' + tp.name + CASE "
+ + "WHEN tp.name IN ('varchar', 'nvarchar', 'char', 'nchar') THEN '(' + IIF(c.max_length = -1, 'MAX', CAST(c"
+ + ".max_length AS NVARCHAR(10))) + ')' WHEN tp.name IN ('decimal', 'numeric') THEN '(' + CAST(c.precision AS "
+ + "NVARCHAR(10)) + ', ' + CAST(c.scale AS NVARCHAR(10)) + ')' ELSE '' END + ' ' + CASE WHEN c.is_nullable = 1"
+ + " THEN 'NULL' ELSE 'NOT NULL' END FROM sys.columns c JOIN sys.types tp ON c.user_type_id = tp.user_type_id "
+ + "WHERE c.object_id = t.object_id FOR XML PATH(''), TYPE ).value('/', 'nvarchar(max)'), 1, 1, ''), ');' ) "
+ + "FROM sys.tables t JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.name = @table_name AND s.name = "
+ + "@schema_name; SELECT @IndexScripts = @IndexScripts + 'CREATE ' + CASE WHEN i.is_unique = 1 THEN 'UNIQUE ' "
+ + "ELSE '' END + i.type_desc + ' INDEX [' + i.name + '] ON [' + s.name + '].[' + t.name + '] (' + STUFF( ( "
+ + "SELECT ', [' + c.name + ']' + CASE WHEN ic.is_descending_key = 1 THEN ' DESC' ELSE ' ASC' END FROM sys"
+ + ".index_columns ic JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id WHERE ic"
+ + ".object_id = i.object_id AND ic.index_id = i.index_id ORDER BY ic.key_ordinal FOR XML PATH('') ), 1, 1, "
+ + "'') + ')' + CASE WHEN i.has_filter = 1 THEN ' WHERE ' + i.filter_definition ELSE '' END + ';' + CHAR(13) +"
+ + " CHAR(10) FROM sys.indexes i JOIN sys.tables t ON i.object_id = t.object_id JOIN sys.schemas s ON t"
+ + ".schema_id = s.schema_id WHERE i.type > 0 AND t.name = @table_name AND s.name "
+ + "= @schema_name; SELECT @ColumnDescriptions += 'EXEC sp_addextendedproperty @name=N''MS_Description'', "
+ + "@value=N''' + CAST(p.value AS NVARCHAR(MAX)) + ''', @level0type=N''SCHEMA'', @level0name=N''' + "
+ + "@schema_name + ''', @level1type=N''TABLE'', @level1name=N''' + @table_name + ''', @level2type=N''COLUMN'',"
+ + " @level2name=N''' + c.name + ''';' + CHAR(13) + CHAR(10) FROM sys.extended_properties p JOIN sys.columns c"
+ + " ON p.major_id = c.object_id AND p.minor_id = c.column_id JOIN sys.tables t ON c.object_id = t.object_id "
+ + "JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE p.class = 1 AND t.name = @table_name AND s.name = "
+ + "@schema_name; SET @CreateTableScript = @CreateTableScript + CHAR(13) + CHAR(10) + @IndexScripts + CHAR(13)"
+ + " + CHAR(10)+ @ColumnDescriptions+ CHAR(10); RETURN @CreateTableScript; END";
+
+
+ @Override
+ public String tableDDL(String databaseName, String schemaName, String tableName) {
+ try {
+ System.out.println(functionSQL);
+ SQLExecutor.getInstance().executeSql(functionSQL.replace("tableSchema", schemaName), resultSet -> null);
+ } catch (Exception e) {
+ //log.error("创建函数失败", e);
+ }
+
+ String ddlSql = "SELECT " + schemaName + ".ufn_GetCreateTableScript('" + schemaName + "', '" + tableName
+ + "') AS sql";
+ return SQLExecutor.getInstance().executeSql(ddlSql, resultSet -> {
+ try {
+ if (resultSet.next()) {
+ return resultSet.getString("sql");
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ return null;
+ });
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/DB2Plugin.java b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/DB2Plugin.java
new file mode 100644
index 00000000..e162f991
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/DB2Plugin.java
@@ -0,0 +1,24 @@
+package ai.chat2db.plugin.db2;
+
+import ai.chat2db.plugin.db2.builder.DBConfigBuilder;
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.Plugin;
+import ai.chat2db.spi.config.DBConfig;
+
+public class DB2Plugin implements Plugin {
+ @Override
+ public DBConfig getDBConfig() {
+ return DBConfigBuilder.buildDBConfig();
+ }
+
+ @Override
+ public MetaData getMetaData() {
+ return new DB2MetaData();
+ }
+
+ @Override
+ public DBManage getDBManage() {
+ return new DB2DBManage();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/builder/DBConfigBuilder.java b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/builder/DBConfigBuilder.java
new file mode 100644
index 00000000..32d12d65
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/builder/DBConfigBuilder.java
@@ -0,0 +1,23 @@
+package ai.chat2db.plugin.db2.builder;
+
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.config.DriverConfig;
+import com.google.common.collect.Lists;
+
+public class DBConfigBuilder {
+ public static DBConfig buildDBConfig() {
+ DBConfig dbConfig = new DBConfig();
+ dbConfig.setName("DB2");
+ dbConfig.setDbType("DB2");
+
+ DriverConfig driverConfig = new DriverConfig();
+ driverConfig.setJdbcDriver("db2jcc4_4.26.14.jar");
+ driverConfig.setJdbcDriverClass("com.ibm.db2.jcc.DB2Driver");
+ driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/db2jcc4_4.26.14.jar"));
+ driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
+ dbConfig.setDefaultDriverConfig(driverConfig);
+
+ dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
+ return dbConfig;
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-db2/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
new file mode 100644
index 00000000..27ae7358
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
@@ -0,0 +1 @@
+ai.chat2db.plugin.db2.DB2Plugin
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-dm/pom.xml b/chat2db-server/chat2db-plugins/chat2db-dm/pom.xml
new file mode 100644
index 00000000..228df9d3
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-dm/pom.xml
@@ -0,0 +1,22 @@
+
+
+ 4.0.0
+
+ ai.chat2db
+ chat2db-plugins
+ ${revision}
+ ../pom.xml
+
+
+
+
+ ai.chat2db
+ chat2db-spi
+
+
+
+ chat2db-dm
+
+
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/DMDBManage.java b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/DMDBManage.java
new file mode 100644
index 00000000..b34e6328
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/DMDBManage.java
@@ -0,0 +1,45 @@
+package ai.chat2db.plugin.dm;
+
+import ai.chat2db.spi.DBManage;
+
+public class DMDBManage implements DBManage {
+ @Override
+ public void connectDatabase(String database) {
+
+ }
+
+ @Override
+ public void modifyDatabase(String databaseName, String newDatabaseName) {
+
+ }
+
+ @Override
+ public void createDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void dropDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void createSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void dropSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
+
+ }
+
+ @Override
+ public void dropTable(String databaseName, String schemaName, String tableName) {
+
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/DMMetaData.java b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/DMMetaData.java
new file mode 100644
index 00000000..59ca3909
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/DMMetaData.java
@@ -0,0 +1,27 @@
+package ai.chat2db.plugin.dm;
+
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+import ai.chat2db.spi.sql.SQLExecutor;
+import ai.chat2db.spi.util.SqlUtils;
+
+import java.sql.SQLException;
+
+public class DMMetaData extends DefaultMetaService implements MetaData {
+ public String tableDDL(String databaseName, String schemaName, String tableName) {
+ String selectObjectDDLSQL = String.format(
+ "select dbms_metadata.get_ddl(%s, %s, %s) AS \"sql\" from dual",
+ SqlUtils.formatSQLString("TABLE"), SqlUtils.formatSQLString(tableName),
+ SqlUtils.formatSQLString(schemaName));
+ return SQLExecutor.getInstance().executeSql(selectObjectDDLSQL, resultSet -> {
+ try {
+ if (resultSet.next()) {
+ return resultSet.getString("sql");
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ return null;
+ });
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/DMPlugin.java b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/DMPlugin.java
new file mode 100644
index 00000000..c26de3d0
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/DMPlugin.java
@@ -0,0 +1,24 @@
+package ai.chat2db.plugin.dm;
+
+import ai.chat2db.plugin.dm.builder.DBConfigBuilder;
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.Plugin;
+import ai.chat2db.spi.config.DBConfig;
+
+public class DMPlugin implements Plugin {
+ @Override
+ public DBConfig getDBConfig() {
+ return DBConfigBuilder.buildDBConfig();
+ }
+
+ @Override
+ public MetaData getMetaData() {
+ return new DMMetaData();
+ }
+
+ @Override
+ public DBManage getDBManage() {
+ return new DMDBManage();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/builder/DBConfigBuilder.java b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/builder/DBConfigBuilder.java
new file mode 100644
index 00000000..2e67fe78
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/builder/DBConfigBuilder.java
@@ -0,0 +1,24 @@
+package ai.chat2db.plugin.dm.builder;
+
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.config.DriverConfig;
+import com.google.common.collect.Lists;
+
+public class DBConfigBuilder {
+
+ public static DBConfig buildDBConfig() {
+ DBConfig dbConfig = new DBConfig();
+ dbConfig.setName("DM");
+ dbConfig.setDbType("DM");
+
+ DriverConfig driverConfig = new DriverConfig();
+ driverConfig.setJdbcDriver("DmJdbcDriver18-8.1.2.141.jar");
+ driverConfig.setJdbcDriverClass("dm.jdbc.driver.DmDriver");
+ driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/DmJdbcDriver18-8.1.2.141.jar"));
+ driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
+ dbConfig.setDefaultDriverConfig(driverConfig);
+
+ dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
+ return dbConfig;
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-dm/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
new file mode 100644
index 00000000..40ef1298
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
@@ -0,0 +1 @@
+ai.chat2db.plugin.dm.DMPlugin
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-h2/pom.xml b/chat2db-server/chat2db-plugins/chat2db-h2/pom.xml
new file mode 100644
index 00000000..32dd725c
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-h2/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+ ai.chat2db
+ chat2db-plugins
+ ${revision}
+ ../pom.xml
+
+
+
+
+ ai.chat2db
+ chat2db-spi
+
+
+ chat2db-h2
+
+
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/H2DBManage.java b/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/H2DBManage.java
new file mode 100644
index 00000000..3dcec492
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/H2DBManage.java
@@ -0,0 +1,45 @@
+package ai.chat2db.plugin.h2;
+
+import ai.chat2db.spi.DBManage;
+
+public class H2DBManage implements DBManage {
+ @Override
+ public void connectDatabase(String database) {
+
+ }
+
+ @Override
+ public void modifyDatabase(String databaseName, String newDatabaseName) {
+
+ }
+
+ @Override
+ public void createDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void dropDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void createSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void dropSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
+
+ }
+
+ @Override
+ public void dropTable(String databaseName, String schemaName, String tableName) {
+
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/H2Meta.java b/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/H2Meta.java
new file mode 100644
index 00000000..28623b2a
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/H2Meta.java
@@ -0,0 +1,91 @@
+package ai.chat2db.plugin.h2;
+
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+import ai.chat2db.spi.sql.SQLExecutor;
+import jakarta.validation.constraints.NotEmpty;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class H2Meta extends DefaultMetaService implements MetaData {
+ @Override
+ public String tableDDL(@NotEmpty String databaseName, String schemaName, @NotEmpty String tableName) {
+ return getDDL(databaseName, schemaName, tableName);
+ }
+
+
+ private String getDDL(String databaseName, String schemaName, String tableName) {
+ try {
+ Connection connection = SQLExecutor.getInstance().getConnection();
+ // 查询表结构信息
+ ResultSet columns = connection.getMetaData().getColumns(databaseName, schemaName, tableName, null);
+ List columnDefinitions = new ArrayList<>();
+ while (columns.next()) {
+ String columnName = columns.getString("COLUMN_NAME");
+ String columnType = columns.getString("TYPE_NAME");
+ int columnSize = columns.getInt("COLUMN_SIZE");
+ String remarks = columns.getString("REMARKS");
+ String defaultValue = columns.getString("COLUMN_DEF");
+ String nullable = columns.getInt("NULLABLE") == ResultSetMetaData.columnNullable ? "NULL" : "NOT NULL";
+ StringBuilder columnDefinition = new StringBuilder();
+ columnDefinition.append(columnName).append(" ").append(columnType);
+ if (columnSize != 0) {
+ columnDefinition.append("(").append(columnSize).append(")");
+ }
+ columnDefinition.append(" ").append(nullable);
+ if (defaultValue != null) {
+ columnDefinition.append(" DEFAULT ").append(defaultValue);
+ }
+ if (remarks != null) {
+ columnDefinition.append(" COMMENT '").append(remarks).append("'");
+ }
+ columnDefinitions.add(columnDefinition.toString());
+ }
+
+ // 查询表索引信息
+ ResultSet indexes = connection.getMetaData().getIndexInfo(databaseName, schemaName, tableName, false,
+ false);
+ Map> indexMap = new HashMap<>();
+ while (indexes.next()) {
+ String indexName = indexes.getString("INDEX_NAME");
+ String columnName = indexes.getString("COLUMN_NAME");
+ if (indexName != null) {
+ if (!indexMap.containsKey(indexName)) {
+ indexMap.put(indexName, new ArrayList<>());
+ }
+ indexMap.get(indexName).add(columnName);
+ }
+ }
+ StringBuilder createTableDDL = new StringBuilder("CREATE TABLE ");
+ createTableDDL.append(tableName).append(" (\n");
+ createTableDDL.append(String.join(",\n", columnDefinitions));
+ createTableDDL.append("\n);\n");
+
+ System.out.println("DDL建表语句:");
+ System.out.println(createTableDDL.toString());
+
+ // 输出索引信息
+ System.out.println("\nDDL索引语句:");
+ for (Map.Entry> entry : indexMap.entrySet()) {
+ String indexName = entry.getKey();
+ List columnList = entry.getValue();
+ String indexColumns = String.join(", ", columnList);
+ String createIndexDDL = String.format("CREATE INDEX %s ON %s (%s);", indexName, tableName,
+ indexColumns);
+ System.out.println(createIndexDDL);
+ createTableDDL.append(createIndexDDL);
+ }
+ return createTableDDL.toString();
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return "";
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/H2Plugin.java b/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/H2Plugin.java
new file mode 100644
index 00000000..14fd56da
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/H2Plugin.java
@@ -0,0 +1,25 @@
+package ai.chat2db.plugin.h2;
+
+import ai.chat2db.plugin.h2.builder.DBConfigBuilder;
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.Plugin;
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+
+public class H2Plugin extends DefaultMetaService implements Plugin {
+ @Override
+ public DBConfig getDBConfig() {
+ return DBConfigBuilder.buildDBConfig();
+ }
+
+ @Override
+ public MetaData getMetaData() {
+ return new H2Meta();
+ }
+
+ @Override
+ public DBManage getDBManage() {
+ return new H2DBManage();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/builder/DBConfigBuilder.java b/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/builder/DBConfigBuilder.java
new file mode 100644
index 00000000..627bde64
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-h2/src/main/java/ai/chat2db/plugin/h2/builder/DBConfigBuilder.java
@@ -0,0 +1,24 @@
+package ai.chat2db.plugin.h2.builder;
+
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.config.DriverConfig;
+import com.google.common.collect.Lists;
+
+public class DBConfigBuilder {
+
+ public static DBConfig buildDBConfig() {
+ DBConfig dbConfig = new DBConfig();
+ dbConfig.setName("H2");
+ dbConfig.setDbType("H2");
+
+ DriverConfig driverConfig = new DriverConfig();
+ driverConfig.setJdbcDriver("h2-2.1.214.jar");
+ driverConfig.setJdbcDriverClass("org.h2.Driver");
+ driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/h2-2.1.214.jar"));
+ driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
+ dbConfig.setDefaultDriverConfig(driverConfig);
+
+ dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
+ return dbConfig;
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-h2/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin b/chat2db-server/chat2db-plugins/chat2db-h2/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
new file mode 100644
index 00000000..28c34422
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-h2/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
@@ -0,0 +1 @@
+ai.chat2db.plugin.h2.H2Plugin
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-hive/pom.xml b/chat2db-server/chat2db-plugins/chat2db-hive/pom.xml
new file mode 100644
index 00000000..d5f4b150
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-hive/pom.xml
@@ -0,0 +1,23 @@
+
+
+ 4.0.0
+
+ ai.chat2db
+ chat2db-plugins
+ ${revision}
+ ../pom.xml
+
+
+
+
+ ai.chat2db
+ chat2db-spi
+
+
+
+ chat2db-hive
+
+
+
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/HiveDBManage.java b/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/HiveDBManage.java
new file mode 100644
index 00000000..4e3a6cf9
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/HiveDBManage.java
@@ -0,0 +1,45 @@
+package ai.chat2db.plugin.hive;
+
+import ai.chat2db.spi.DBManage;
+
+public class HiveDBManage implements DBManage {
+ @Override
+ public void connectDatabase(String database) {
+
+ }
+
+ @Override
+ public void modifyDatabase(String databaseName, String newDatabaseName) {
+
+ }
+
+ @Override
+ public void createDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void dropDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void createSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void dropSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
+
+ }
+
+ @Override
+ public void dropTable(String databaseName, String schemaName, String tableName) {
+
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/HiveMetaData.java b/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/HiveMetaData.java
new file mode 100644
index 00000000..e287e43d
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/HiveMetaData.java
@@ -0,0 +1,7 @@
+package ai.chat2db.plugin.hive;
+
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+
+public class HiveMetaData extends DefaultMetaService implements MetaData {
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/HivePlugin.java b/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/HivePlugin.java
new file mode 100644
index 00000000..bf17d451
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/HivePlugin.java
@@ -0,0 +1,24 @@
+package ai.chat2db.plugin.hive;
+
+import ai.chat2db.plugin.hive.builder.DBConfigBuilder;
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.Plugin;
+import ai.chat2db.spi.config.DBConfig;
+
+public class HivePlugin implements Plugin {
+ @Override
+ public DBConfig getDBConfig() {
+ return DBConfigBuilder.buildDBConfig();
+ }
+
+ @Override
+ public MetaData getMetaData() {
+ return new HiveMetaData();
+ }
+
+ @Override
+ public DBManage getDBManage() {
+ return new HiveDBManage();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/builder/DBConfigBuilder.java b/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/builder/DBConfigBuilder.java
new file mode 100644
index 00000000..6e09f1cd
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-hive/src/main/java/ai/chat2db/plugin/hive/builder/DBConfigBuilder.java
@@ -0,0 +1,21 @@
+package ai.chat2db.plugin.hive.builder;
+
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.config.DriverConfig;
+import com.google.common.collect.Lists;
+
+public class DBConfigBuilder {
+ public static DBConfig buildDBConfig() {
+ DBConfig dbConfig = new DBConfig();
+ dbConfig.setName("Hive");
+ dbConfig.setDbType("HIVE");
+ DriverConfig driverConfig = new DriverConfig();
+ driverConfig.setJdbcDriver("hive-jdbc-3.1.2-standalone.jar");
+ driverConfig.setJdbcDriverClass("org.apache.hive.jdbc.HiveDriver");
+ driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/hive-jdbc-3.1.2-standalone.jar"));
+ driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
+ dbConfig.setDefaultDriverConfig(driverConfig);
+ dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
+ return dbConfig;
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-hive/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin b/chat2db-server/chat2db-plugins/chat2db-hive/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
new file mode 100644
index 00000000..c3c306ad
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-hive/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
@@ -0,0 +1 @@
+ai.chat2db.plugin.hive.HivePlugin
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-kingbase/pom.xml b/chat2db-server/chat2db-plugins/chat2db-kingbase/pom.xml
new file mode 100644
index 00000000..31b87ca6
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-kingbase/pom.xml
@@ -0,0 +1,22 @@
+
+
+ 4.0.0
+
+ ai.chat2db
+ chat2db-plugins
+ ${revision}
+ ../pom.xml
+
+
+
+
+ ai.chat2db
+ chat2db-spi
+
+
+
+ chat2db-kingbase
+
+
\ No newline at end of file
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
new file mode 100644
index 00000000..e222a7c2
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/KingBaseDBManage.java
@@ -0,0 +1,45 @@
+package ai.chat2db.plugin.kingbase;
+
+import ai.chat2db.spi.DBManage;
+
+public class KingBaseDBManage implements DBManage {
+ @Override
+ public void connectDatabase(String database) {
+
+ }
+
+ @Override
+ public void modifyDatabase(String databaseName, String newDatabaseName) {
+
+ }
+
+ @Override
+ public void createDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void dropDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void createSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void dropSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
+
+ }
+
+ @Override
+ public void dropTable(String databaseName, String schemaName, String tableName) {
+
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/KingBaseMetaData.java b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/KingBaseMetaData.java
new file mode 100644
index 00000000..1f3404e5
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/KingBaseMetaData.java
@@ -0,0 +1,7 @@
+package ai.chat2db.plugin.kingbase;
+
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+
+public class KingBaseMetaData extends DefaultMetaService implements MetaData {
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/KingBasePlugin.java b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/KingBasePlugin.java
new file mode 100644
index 00000000..99c8ff30
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/KingBasePlugin.java
@@ -0,0 +1,24 @@
+package ai.chat2db.plugin.kingbase;
+
+import ai.chat2db.plugin.kingbase.builder.DBConfigBuilder;
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.Plugin;
+import ai.chat2db.spi.config.DBConfig;
+
+public class KingBasePlugin implements Plugin {
+ @Override
+ public DBConfig getDBConfig() {
+ return DBConfigBuilder.buildDBConfig();
+ }
+
+ @Override
+ public MetaData getMetaData() {
+ return new KingBaseMetaData();
+ }
+
+ @Override
+ public DBManage getDBManage() {
+ return new KingBaseDBManage();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/builder/DBConfigBuilder.java b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/builder/DBConfigBuilder.java
new file mode 100644
index 00000000..a83bbfc3
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/builder/DBConfigBuilder.java
@@ -0,0 +1,21 @@
+package ai.chat2db.plugin.kingbase.builder;
+
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.config.DriverConfig;
+import com.google.common.collect.Lists;
+
+public class DBConfigBuilder {
+ public static DBConfig buildDBConfig() {
+ DBConfig dbConfig = new DBConfig();
+ dbConfig.setName("KingBase");
+ dbConfig.setDbType("KINGBASE");
+ DriverConfig driverConfig = new DriverConfig();
+ driverConfig.setJdbcDriver("kingbase8-8.6.0.jar");
+ driverConfig.setJdbcDriverClass("om.kingbase8.Driver");
+ driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/kingbase8-8.6.0.jar"));
+ driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
+ dbConfig.setDefaultDriverConfig(driverConfig);
+ dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
+ return dbConfig;
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
new file mode 100644
index 00000000..4f629584
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
@@ -0,0 +1 @@
+ai.chat2db.plugin.kingbase.KingBasePlugin
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-mariadb/pom.xml b/chat2db-server/chat2db-plugins/chat2db-mariadb/pom.xml
new file mode 100644
index 00000000..a73c0c59
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-mariadb/pom.xml
@@ -0,0 +1,22 @@
+
+
+ 4.0.0
+
+ ai.chat2db
+ chat2db-plugins
+ ${revision}
+ ../pom.xml
+
+
+
+
+ ai.chat2db
+ chat2db-spi
+
+
+
+ chat2db-mariadb
+
+
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/MariaDBManage.java b/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/MariaDBManage.java
new file mode 100644
index 00000000..5c71290b
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/MariaDBManage.java
@@ -0,0 +1,45 @@
+package ai.chat2db.plugin.mariadb;
+
+import ai.chat2db.spi.DBManage;
+
+public class MariaDBManage implements DBManage {
+ @Override
+ public void connectDatabase(String database) {
+
+ }
+
+ @Override
+ public void modifyDatabase(String databaseName, String newDatabaseName) {
+
+ }
+
+ @Override
+ public void createDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void dropDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void createSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void dropSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
+
+ }
+
+ @Override
+ public void dropTable(String databaseName, String schemaName, String tableName) {
+
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/MariaDBMetaData.java b/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/MariaDBMetaData.java
new file mode 100644
index 00000000..e967240b
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/MariaDBMetaData.java
@@ -0,0 +1,7 @@
+package ai.chat2db.plugin.mariadb;
+
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+
+public class MariaDBMetaData extends DefaultMetaService implements MetaData {
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/MariaDBPlugin.java b/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/MariaDBPlugin.java
new file mode 100644
index 00000000..083d43c9
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/MariaDBPlugin.java
@@ -0,0 +1,24 @@
+package ai.chat2db.plugin.mariadb;
+
+import ai.chat2db.plugin.mariadb.builder.DBConfigBuilder;
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.Plugin;
+import ai.chat2db.spi.config.DBConfig;
+
+public class MariaDBPlugin implements Plugin {
+ @Override
+ public DBConfig getDBConfig() {
+ return DBConfigBuilder.buildDBConfig();
+ }
+
+ @Override
+ public MetaData getMetaData() {
+ return new MariaDBMetaData();
+ }
+
+ @Override
+ public DBManage getDBManage() {
+ return new MariaDBManage();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/builder/DBConfigBuilder.java b/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/builder/DBConfigBuilder.java
new file mode 100644
index 00000000..e7612716
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/java/ai/chat2db/plugin/mariadb/builder/DBConfigBuilder.java
@@ -0,0 +1,21 @@
+package ai.chat2db.plugin.mariadb.builder;
+
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.config.DriverConfig;
+import com.google.common.collect.Lists;
+
+public class DBConfigBuilder {
+ public static DBConfig buildDBConfig() {
+ DBConfig dbConfig = new DBConfig();
+ dbConfig.setName("MariaDB");
+ dbConfig.setDbType("MARIADB");
+ DriverConfig driverConfig = new DriverConfig();
+ driverConfig.setJdbcDriver("mariadb-java-client-3.0.8.jar");
+ driverConfig.setJdbcDriverClass("org.mariadb.jdbc.Driver");
+ driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/mariadb-java-client-3.0.8.jar"));
+ driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
+ dbConfig.setDefaultDriverConfig(driverConfig);
+ dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
+ return dbConfig;
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin b/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
new file mode 100644
index 00000000..aa069c77
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-mariadb/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
@@ -0,0 +1 @@
+ai.chat2db.plugin.mariadb.MariaDBPlugin
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-mongodb/pom.xml b/chat2db-server/chat2db-plugins/chat2db-mongodb/pom.xml
new file mode 100644
index 00000000..70d44ba4
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-mongodb/pom.xml
@@ -0,0 +1,23 @@
+
+
+ 4.0.0
+
+ ai.chat2db
+ chat2db-plugins
+ ${revision}
+ ../pom.xml
+
+
+
+
+ ai.chat2db
+ chat2db-spi
+
+
+
+ chat2db-mongodb
+
+
+
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/MongodbManage.java b/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/MongodbManage.java
new file mode 100644
index 00000000..b0080eee
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/MongodbManage.java
@@ -0,0 +1,45 @@
+package ai.chat2db.plugin.mongodb;
+
+import ai.chat2db.spi.DBManage;
+
+public class MongodbManage implements DBManage {
+ @Override
+ public void connectDatabase(String database) {
+
+ }
+
+ @Override
+ public void modifyDatabase(String databaseName, String newDatabaseName) {
+
+ }
+
+ @Override
+ public void createDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void dropDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void createSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void dropSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
+
+ }
+
+ @Override
+ public void dropTable(String databaseName, String schemaName, String tableName) {
+
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/MongodbMetaData.java b/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/MongodbMetaData.java
new file mode 100644
index 00000000..12210cea
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/MongodbMetaData.java
@@ -0,0 +1,8 @@
+package ai.chat2db.plugin.mongodb;
+
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+
+public class MongodbMetaData extends DefaultMetaService implements MetaData {
+
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/MongodbPlugin.java b/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/MongodbPlugin.java
new file mode 100644
index 00000000..15da3322
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/MongodbPlugin.java
@@ -0,0 +1,24 @@
+package ai.chat2db.plugin.mongodb;
+
+import ai.chat2db.plugin.mongodb.builder.DBConfigBuilder;
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.Plugin;
+import ai.chat2db.spi.config.DBConfig;
+
+public class MongodbPlugin implements Plugin {
+ @Override
+ public DBConfig getDBConfig() {
+ return DBConfigBuilder.buildDBConfig();
+ }
+
+ @Override
+ public MetaData getMetaData() {
+ return new MongodbMetaData();
+ }
+
+ @Override
+ public DBManage getDBManage() {
+ return new MongodbManage();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/builder/DBConfigBuilder.java b/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/builder/DBConfigBuilder.java
new file mode 100644
index 00000000..9d3fa652
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/java/ai/chat2db/plugin/mongodb/builder/DBConfigBuilder.java
@@ -0,0 +1,21 @@
+package ai.chat2db.plugin.mongodb.builder;
+
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.config.DriverConfig;
+import com.google.common.collect.Lists;
+
+public class DBConfigBuilder {
+ public static DBConfig buildDBConfig() {
+ DBConfig dbConfig = new DBConfig();
+ dbConfig.setName("Mongodb");
+ dbConfig.setDbType("MONGODB");
+ DriverConfig driverConfig = new DriverConfig();
+ driverConfig.setJdbcDriver("mongo-jdbc-standalone-1.18.jar");
+ driverConfig.setJdbcDriverClass("com.dbschema.MongoJdbcDriver");
+ driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/mongo-jdbc-standalone-1.18.jar"));
+ driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
+ dbConfig.setDefaultDriverConfig(driverConfig);
+ dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
+ return dbConfig;
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin b/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
new file mode 100644
index 00000000..f76f1862
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-mongodb/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
@@ -0,0 +1 @@
+ai.chat2db.plugin.mongodb.MongodbPlugin
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-oceanbase/pom.xml b/chat2db-server/chat2db-plugins/chat2db-oceanbase/pom.xml
new file mode 100644
index 00000000..a71c0b58
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-oceanbase/pom.xml
@@ -0,0 +1,22 @@
+
+
+ 4.0.0
+
+ ai.chat2db
+ chat2db-plugins
+ ${revision}
+ ../pom.xml
+
+
+
+
+ ai.chat2db
+ chat2db-spi
+
+
+
+ chat2db-oceanbase
+
+
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/OceanBaseDBManage.java b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/OceanBaseDBManage.java
new file mode 100644
index 00000000..c280a587
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/OceanBaseDBManage.java
@@ -0,0 +1,45 @@
+package ai.chat2db.plugin.oceanbase;
+
+import ai.chat2db.spi.DBManage;
+
+public class OceanBaseDBManage implements DBManage {
+ @Override
+ public void connectDatabase(String database) {
+
+ }
+
+ @Override
+ public void modifyDatabase(String databaseName, String newDatabaseName) {
+
+ }
+
+ @Override
+ public void createDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void dropDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void createSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void dropSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
+
+ }
+
+ @Override
+ public void dropTable(String databaseName, String schemaName, String tableName) {
+
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/OceanBaseMetaData.java b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/OceanBaseMetaData.java
new file mode 100644
index 00000000..30eb940e
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/OceanBaseMetaData.java
@@ -0,0 +1,7 @@
+package ai.chat2db.plugin.oceanbase;
+
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+
+public class OceanBaseMetaData extends DefaultMetaService implements MetaData {
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/OceanBasePlugin.java b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/OceanBasePlugin.java
new file mode 100644
index 00000000..28650b12
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/OceanBasePlugin.java
@@ -0,0 +1,25 @@
+package ai.chat2db.plugin.oceanbase;
+
+import ai.chat2db.plugin.oceanbase.builder.DBConfigBuilder;
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.Plugin;
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+
+public class OceanBasePlugin implements Plugin {
+ @Override
+ public DBConfig getDBConfig() {
+ return DBConfigBuilder.buildDBConfig();
+ }
+
+ @Override
+ public MetaData getMetaData() {
+ return new OceanBaseMetaData();
+ }
+
+ @Override
+ public DBManage getDBManage() {
+ return new OceanBaseDBManage();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/builder/DBConfigBuilder.java b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/builder/DBConfigBuilder.java
new file mode 100644
index 00000000..a970c3a6
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/java/ai/chat2db/plugin/oceanbase/builder/DBConfigBuilder.java
@@ -0,0 +1,21 @@
+package ai.chat2db.plugin.oceanbase.builder;
+
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.config.DriverConfig;
+import com.google.common.collect.Lists;
+
+public class DBConfigBuilder {
+ public static DBConfig buildDBConfig() {
+ DBConfig dbConfig = new DBConfig();
+ dbConfig.setName("OceanBase");
+ dbConfig.setDbType("OCEANBASE");
+ DriverConfig driverConfig = new DriverConfig();
+ driverConfig.setJdbcDriver("oceanbase-client-2.4.2.jar");
+ driverConfig.setJdbcDriverClass("com.oceanbase.jdbc.Driver");
+ driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/oceanbase-client-2.4.2.jar"));
+ driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
+ dbConfig.setDefaultDriverConfig(driverConfig);
+ dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
+ return dbConfig;
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
new file mode 100644
index 00000000..283cbc10
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-oceanbase/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
@@ -0,0 +1 @@
+ai.chat2db.plugin.oceanbase.OceanBasePlugin
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-oracle/pom.xml b/chat2db-server/chat2db-plugins/chat2db-oracle/pom.xml
new file mode 100644
index 00000000..a20f6ae1
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-oracle/pom.xml
@@ -0,0 +1,22 @@
+
+
+ 4.0.0
+
+ ai.chat2db
+ chat2db-plugins
+ ${revision}
+ ../pom.xml
+
+
+ chat2db-oracle
+
+
+
+
+ ai.chat2db
+ chat2db-spi
+
+
+
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/OracleDBManage.java b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/OracleDBManage.java
new file mode 100644
index 00000000..0c8167b7
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/OracleDBManage.java
@@ -0,0 +1,45 @@
+package ai.chat2db.plugin.oracle;
+
+import ai.chat2db.spi.DBManage;
+
+public class OracleDBManage implements DBManage {
+ @Override
+ public void connectDatabase(String database) {
+
+ }
+
+ @Override
+ public void modifyDatabase(String databaseName, String newDatabaseName) {
+
+ }
+
+ @Override
+ public void createDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void dropDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void createSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void dropSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
+
+ }
+
+ @Override
+ public void dropTable(String databaseName, String schemaName, String tableName) {
+
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/OracleMetaData.java b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/OracleMetaData.java
new file mode 100644
index 00000000..e7043d32
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/OracleMetaData.java
@@ -0,0 +1,26 @@
+package ai.chat2db.plugin.oracle;
+
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+import ai.chat2db.spi.sql.SQLExecutor;
+
+import java.sql.SQLException;
+
+public class OracleMetaData extends DefaultMetaService implements MetaData {
+ @Override
+ public String tableDDL(String databaseName, String schemaName, String tableName) {
+ String sql = "select dbms_metadata.get_ddl('TABLE','"+tableName+"') as sql from dual,"
+ + "user_tables where table_name = '" + tableName + "'";
+ return SQLExecutor.getInstance().executeSql(sql, resultSet -> {
+ try {
+ if (resultSet.next()) {
+ return resultSet.getString("sql");
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+
+ return null;
+ });
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/OraclePlugin.java b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/OraclePlugin.java
new file mode 100644
index 00000000..7bc9662a
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/OraclePlugin.java
@@ -0,0 +1,25 @@
+package ai.chat2db.plugin.oracle;
+
+
+import ai.chat2db.plugin.oracle.builder.DBConfigBuilder;
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.Plugin;
+import ai.chat2db.spi.config.DBConfig;
+
+public class OraclePlugin implements Plugin {
+ @Override
+ public DBConfig getDBConfig() {
+ return DBConfigBuilder.buildDBConfig();
+ }
+
+ @Override
+ public MetaData getMetaData() {
+ return new OracleMetaData();
+ }
+
+ @Override
+ public DBManage getDBManage() {
+ return new OracleDBManage();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/builder/DBConfigBuilder.java b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/builder/DBConfigBuilder.java
new file mode 100644
index 00000000..bee5a66f
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/builder/DBConfigBuilder.java
@@ -0,0 +1,24 @@
+package ai.chat2db.plugin.oracle.builder;
+
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.config.DriverConfig;
+import com.google.common.collect.Lists;
+
+public class DBConfigBuilder {
+
+ public static DBConfig buildDBConfig() {
+ DBConfig dbConfig = new DBConfig();
+ dbConfig.setName("Oracle");
+ dbConfig.setDbType("ORACLE");
+
+ DriverConfig driverConfig = new DriverConfig();
+ driverConfig.setJdbcDriver("ojdbc8-19.3.0.0.jar,orai18n-19.3.0.0.jar");
+ driverConfig.setJdbcDriverClass("oracle.jdbc.driver.OracleDriver");
+ driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/ojdbc8-19.3.0.0.jar", "https://oss-chat2db.alibaba.com/lib/orai18n-19.3.0.0.jar"));
+ driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
+ dbConfig.setDefaultDriverConfig(driverConfig);
+
+ dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
+ return dbConfig;
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
new file mode 100644
index 00000000..f9c3b2f5
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
@@ -0,0 +1 @@
+ai.chat2db.plugin.oracle.OraclePlugin
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-postgresql/pom.xml b/chat2db-server/chat2db-plugins/chat2db-postgresql/pom.xml
new file mode 100644
index 00000000..a3a6c2a6
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-postgresql/pom.xml
@@ -0,0 +1,23 @@
+
+
+ 4.0.0
+
+ ai.chat2db
+ chat2db-plugins
+ ${revision}
+ ../pom.xml
+
+
+ chat2db-postgresql
+
+
+
+
+ ai.chat2db
+ chat2db-spi
+
+
+
+
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/PostgreSQLDBManage.java b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/PostgreSQLDBManage.java
new file mode 100644
index 00000000..2a54b644
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/PostgreSQLDBManage.java
@@ -0,0 +1,54 @@
+package ai.chat2db.plugin.postgresql;
+
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.sql.Chat2DBContext;
+import ai.chat2db.spi.sql.ConnectInfo;
+import ai.chat2db.spi.sql.SQLExecutor;
+
+import java.sql.SQLException;
+
+public class PostgreSQLDBManage implements DBManage {
+ @Override
+ public void connectDatabase(String database) {
+ try {
+ SQLExecutor.getInstance().execute("connect " + database + "");
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void modifyDatabase(String databaseName, String newDatabaseName) {
+
+ }
+
+ @Override
+ public void createDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void dropDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void createSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void dropSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
+
+ }
+
+ @Override
+ public void dropTable(String databaseName, String schemaName, String tableName) {
+
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/PostgreSQLMetaData.java b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/PostgreSQLMetaData.java
new file mode 100644
index 00000000..e50df862
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/PostgreSQLMetaData.java
@@ -0,0 +1,181 @@
+package ai.chat2db.plugin.postgresql;
+
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+import ai.chat2db.spi.sql.SQLExecutor;
+
+import java.sql.SQLException;
+
+public class PostgreSQLMetaData extends DefaultMetaService implements MetaData {
+ private String functionSQL =
+ " CREATE OR REPLACE FUNCTION showcreatetable(namespace character varying, tablename character "
+ + "varying)\n"
+ + " RETURNS character varying AS\n"
+ + "\n"
+ + " $BODY$\n"
+ + " declare\n"
+ + " tableScript character varying default '';\n"
+ + "\n"
+ + " begin\n"
+ + " -- columns\n"
+ + " tableScript:=tableScript || ' CREATE TABLE '|| tablename|| ' ( '|| chr(13)||chr(10) || "
+ + "array_to_string"
+ + "(\n"
+ + " array(\n"
+ + " select ' ' || concat_ws(' ',fieldName, fieldType, fieldLen, indexType, isNullStr, fieldComment"
+ + " ) as "
+ + "column_line\n"
+ + " from (\n"
+ + " select a.attname as fieldName,format_type(a.atttypid,a.atttypmod) as fieldType,(case when "
+ + "atttypmod-4>0 then\n"
+ + " atttypmod-4 else 0 end) as fieldLen,\n"
+ + " (case when (select count(*) from pg_constraint where conrelid = a.attrelid and conkey[1]=attnum "
+ + "and\n"
+ + " contype='p')>0 then 'PRI'\n"
+ + " when (select count(*) from pg_constraint where conrelid = a.attrelid and conkey[1]=attnum and "
+ + "contype='u')>0\n"
+ + " then 'UNI'\n"
+ + " when (select count(*) from pg_constraint where conrelid = a.attrelid and conkey[1]=attnum and "
+ + "contype='f')>0\n"
+ + " then 'FRI'\n"
+ + " else '' end) as indexType,\n"
+ + " (case when a.attnotnull=true then 'not null' else 'null' end) as isNullStr,\n"
+ + " ' comment ' || col_description(a.attrelid,a.attnum) as fieldComment\n"
+ + " from pg_attribute a where attstattarget=-1 and attrelid = (select c.oid from pg_class c,"
+ + "pg_namespace n"
+ + " where\n"
+ + " c.relnamespace=n.oid and n.nspname =namespace and relname =tablename)\n"
+ + "\n"
+ + " ) as string_columns\n"
+ + " ),','||chr(13)||chr(10)) || ',';\n"
+ + "\n"
+ + "\n"
+ + " -- 约束\n"
+ + " tableScript:= tableScript || chr(13)||chr(10) || array_to_string(\n"
+ + " array(\n"
+ + " select concat(' CONSTRAINT ',conname ,c ,u,p,f) from (\n"
+ + " select conname,\n"
+ + " case when contype='c' then ' CHECK('|| ( select findattname(namespace,tablename,'c') ) ||')' "
+ + "end "
+ + "as c "
+ + ",\n"
+ + " case when contype='u' then ' UNIQUE('|| ( select findattname(namespace,tablename,'u') ) ||')' "
+ + "end "
+ + "as u"
+ + " ,\n"
+ + " case when contype='p' then ' PRIMARY KEY ('|| ( select findattname(namespace,tablename,'p') ) "
+ + "||')' "
+ + "end as p ,\n"
+ + " case when contype='f' then ' FOREIGN KEY('|| ( select findattname(namespace,tablename,'u') ) "
+ + "||') "
+ + "REFERENCES '||\n"
+ + " (select p.relname from pg_class p where p.oid=c.confrelid ) || '('|| ( select\n"
+ + " findattname(namespace,tablename,'u') ) ||')' end as f\n"
+ + " from pg_constraint c\n"
+ + " where contype in('u','c','f','p') and conrelid=(\n"
+ + " select oid from pg_class where relname=tablename and relnamespace =(\n"
+ + " select oid from pg_namespace where nspname = namespace\n"
+ + " )\n"
+ + " )\n"
+ + " ) as t\n"
+ + " ) ,',' || chr(13)||chr(10) ) || chr(13)||chr(10) ||' ); ';\n"
+ + "\n"
+ + " -- indexs\n"
+ + " -- CREATE UNIQUE INDEX pg_language_oid_index ON pg_language USING btree (oid); -- table "
+ + "pg_language\n"
+ + "\n"
+ + "\n"
+ + " --\n"
+ + " /** **/\n"
+ + " --- 获取非约束索引 column\n"
+ + " -- CREATE UNIQUE INDEX pg_language_oid_index ON pg_language USING btree (oid); -- table "
+ + "pg_language\n"
+ + " tableScript:= tableScript || chr(13)||chr(10) || chr(13)||chr(10) || array_to_string(\n"
+ + " array(\n"
+ + " select 'CREATE INDEX ' || indexrelname || ' ON ' || tablename || ' USING btree '|| '(' || "
+ + "attname "
+ + "|| "
+ + "');' from (\n"
+ + " SELECT\n"
+ + " i.relname AS indexrelname , x.indkey,\n"
+ + "\n"
+ + " ( select array_to_string (\n"
+ + " array(\n"
+ + " select a.attname from pg_attribute a where attrelid=c.oid and a.attnum in ( select unnest(x"
+ + ".indkey) )\n"
+ + "\n"
+ + " )\n"
+ + " ,',' ) )as attname\n"
+ + "\n"
+ + " FROM pg_class c\n"
+ + " JOIN pg_index x ON c.oid = x.indrelid\n"
+ + " JOIN pg_class i ON i.oid = x.indexrelid\n"
+ + " LEFT JOIN pg_namespace n ON n.oid = c.relnamespace\n"
+ + " WHERE c.relname=tablename and i.relname not in\n"
+ + " ( select constraint_name from information_schema.key_column_usage where table_name=tablename )\n"
+ + " )as t\n"
+ + " ) ,','|| chr(13)||chr(10));\n"
+ + "\n"
+ + "\n"
+ + " -- COMMENT COMMENT ON COLUMN sys_activity.id IS '主键';\n"
+ + " tableScript:= tableScript || chr(13)||chr(10) || chr(13)||chr(10) || array_to_string(\n"
+ + " array(\n"
+ + " SELECT 'COMMENT ON COLUMN' || tablename || '.' || a.attname ||' IS '|| ''''|| d.description "
+ + "||''''\n"
+ + " FROM pg_class c\n"
+ + " JOIN pg_description d ON c.oid=d.objoid\n"
+ + " JOIN pg_attribute a ON c.oid = a.attrelid\n"
+ + " WHERE c.relname=tablename\n"
+ + " AND a.attnum = d.objsubid),','|| chr(13)||chr(10)) ;\n"
+ + "\n"
+ + " return tableScript;\n"
+ + "\n"
+ + " end\n"
+ + " $BODY$ LANGUAGE plpgsql;\n"
+ + "\n"
+ + " CREATE OR REPLACE FUNCTION findattname(namespace character varying, tablename character "
+ + "varying, "
+ + "ctype"
+ + " character\n"
+ + " varying)\n"
+ + " RETURNS character varying as $BODY$\n"
+ + "\n"
+ + " declare\n"
+ + " tt oid ;\n"
+ + " aname character varying default '';\n"
+ + "\n"
+ + " begin\n"
+ + " tt := oid from pg_class where relname= tablename and relnamespace =(select oid from "
+ + "pg_namespace "
+ + "where\n"
+ + " nspname=namespace) ;\n"
+ + " aname:= array_to_string(\n"
+ + " array(\n"
+ + " select a.attname from pg_attribute a\n"
+ + " where a.attrelid=tt and a.attnum in (\n"
+ + " select unnest(conkey) from pg_constraint c where contype=ctype\n"
+ + " and conrelid=tt and array_to_string(conkey,',') is not null\n"
+ + " )\n"
+ + " ),',');\n"
+ + "\n"
+ + " return aname;\n"
+ + " end\n"
+ + " $BODY$ LANGUAGE plpgsql";
+
+ @Override
+ public String tableDDL(String databaseName, String schemaName, String tableName) {
+ SQLExecutor.getInstance().executeSql(functionSQL.replaceFirst("tableSchema", schemaName), resultSet -> null);
+ String ddlSql = "select showcreatetable('" + schemaName + "','" + tableName + "') as sql";
+ return SQLExecutor.getInstance().executeSql(ddlSql, resultSet -> {
+ try {
+ if (resultSet.next()) {
+ return resultSet.getString("sql");
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ return null;
+ });
+ }
+
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/PostgreSQLPlugin.java b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/PostgreSQLPlugin.java
new file mode 100644
index 00000000..7295c2e5
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/PostgreSQLPlugin.java
@@ -0,0 +1,24 @@
+package ai.chat2db.plugin.postgresql;
+
+import ai.chat2db.plugin.postgresql.builder.DBConfigBuilder;
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.Plugin;
+import ai.chat2db.spi.config.DBConfig;
+
+public class PostgreSQLPlugin implements Plugin {
+ @Override
+ public DBConfig getDBConfig() {
+ return DBConfigBuilder.buildDBConfig();
+ }
+
+ @Override
+ public MetaData getMetaData() {
+ return new PostgreSQLMetaData();
+ }
+
+ @Override
+ public DBManage getDBManage() {
+ return new PostgreSQLDBManage();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/builder/DBConfigBuilder.java b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/builder/DBConfigBuilder.java
new file mode 100644
index 00000000..adcf1a53
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/builder/DBConfigBuilder.java
@@ -0,0 +1,22 @@
+package ai.chat2db.plugin.postgresql.builder;
+
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.config.DriverConfig;
+import com.google.common.collect.Lists;
+
+public class DBConfigBuilder {
+
+ public static DBConfig buildDBConfig() {
+ DBConfig dbConfig = new DBConfig();
+ dbConfig.setName("PostgreSQL");
+ dbConfig.setDbType("POSTGRESQL");
+ DriverConfig driverConfig = new DriverConfig();
+ driverConfig.setJdbcDriver("postgresql-42.5.1.jar");
+ driverConfig.setJdbcDriverClass("org.postgresql.Driver");
+ driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/postgresql-42.5.1.jar"));
+ driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
+ dbConfig.setDefaultDriverConfig(driverConfig);
+ dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
+ return dbConfig;
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
new file mode 100644
index 00000000..f1730e0c
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
@@ -0,0 +1 @@
+ai.chat2db.plugin.postgresql.PostgreSQLPlugin
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-presto/pom.xml b/chat2db-server/chat2db-plugins/chat2db-presto/pom.xml
new file mode 100644
index 00000000..7390865b
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-presto/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+ ai.chat2db
+ chat2db-plugins
+ ${revision}
+ ../pom.xml
+
+
+
+ ai.chat2db
+ chat2db-spi
+
+
+
+ chat2db-presto
+
+
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/PrestoDBManage.java b/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/PrestoDBManage.java
new file mode 100644
index 00000000..c6068aab
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/PrestoDBManage.java
@@ -0,0 +1,45 @@
+package ai.chat2db.plugin.presto;
+
+import ai.chat2db.spi.DBManage;
+
+public class PrestoDBManage implements DBManage {
+ @Override
+ public void connectDatabase(String database) {
+
+ }
+
+ @Override
+ public void modifyDatabase(String databaseName, String newDatabaseName) {
+
+ }
+
+ @Override
+ public void createDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void dropDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void createSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void dropSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
+
+ }
+
+ @Override
+ public void dropTable(String databaseName, String schemaName, String tableName) {
+
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/PrestoMetaData.java b/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/PrestoMetaData.java
new file mode 100644
index 00000000..580e0dff
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/PrestoMetaData.java
@@ -0,0 +1,10 @@
+package ai.chat2db.plugin.presto;
+
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+
+public class PrestoMetaData extends DefaultMetaService implements MetaData {
+ public String tableDDL(String databaseName, String schemaName,String tableName) {
+ return "";
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/PrestoPlugin.java b/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/PrestoPlugin.java
new file mode 100644
index 00000000..ca421121
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/PrestoPlugin.java
@@ -0,0 +1,25 @@
+package ai.chat2db.plugin.presto;
+
+
+import ai.chat2db.plugin.presto.builder.DBConfigBuilder;
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.Plugin;
+import ai.chat2db.spi.config.DBConfig;
+
+public class PrestoPlugin implements Plugin {
+ @Override
+ public DBConfig getDBConfig() {
+ return DBConfigBuilder.buildDBConfig();
+ }
+
+ @Override
+ public MetaData getMetaData() {
+ return new PrestoMetaData();
+ }
+
+ @Override
+ public DBManage getDBManage() {
+ return new PrestoDBManage();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/builder/DBConfigBuilder.java b/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/builder/DBConfigBuilder.java
new file mode 100644
index 00000000..399eadf0
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-presto/src/main/java/ai/chat2db/plugin/presto/builder/DBConfigBuilder.java
@@ -0,0 +1,21 @@
+package ai.chat2db.plugin.presto.builder;
+
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.config.DriverConfig;
+import com.google.common.collect.Lists;
+
+public class DBConfigBuilder {
+ public static DBConfig buildDBConfig() {
+ DBConfig dbConfig = new DBConfig();
+ dbConfig.setName("Presto");
+ dbConfig.setDbType("PRESTO");
+ DriverConfig driverConfig = new DriverConfig();
+ driverConfig.setJdbcDriver("presto-jdbc-0.245.1.jar");
+ driverConfig.setJdbcDriverClass("com.facebook.presto.jdbc.PrestoDriver");
+ driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/presto-jdbc-0.245.1.jar"));
+ driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
+ dbConfig.setDefaultDriverConfig(driverConfig);
+ dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
+ return dbConfig;
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-presto/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin b/chat2db-server/chat2db-plugins/chat2db-presto/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
new file mode 100644
index 00000000..68da7174
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-presto/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
@@ -0,0 +1 @@
+ai.chat2db.plugin.presto.PrestoPlugin
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-redis/pom.xml b/chat2db-server/chat2db-plugins/chat2db-redis/pom.xml
new file mode 100644
index 00000000..0c041141
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-redis/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+ ai.chat2db
+ chat2db-plugins
+ ${revision}
+ ../pom.xml
+
+
+
+ ai.chat2db
+ chat2db-spi
+
+
+
+ chat2db-redis
+
+
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/RedisDBManage.java b/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/RedisDBManage.java
new file mode 100644
index 00000000..f908b999
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/RedisDBManage.java
@@ -0,0 +1,45 @@
+package ai.chat2db.plugin.redis;
+
+import ai.chat2db.spi.DBManage;
+
+public class RedisDBManage implements DBManage {
+ @Override
+ public void connectDatabase(String database) {
+
+ }
+
+ @Override
+ public void modifyDatabase(String databaseName, String newDatabaseName) {
+
+ }
+
+ @Override
+ public void createDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void dropDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void createSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void dropSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
+
+ }
+
+ @Override
+ public void dropTable(String databaseName, String schemaName, String tableName) {
+
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/RedisMetaData.java b/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/RedisMetaData.java
new file mode 100644
index 00000000..c2809ed9
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/RedisMetaData.java
@@ -0,0 +1,60 @@
+package ai.chat2db.plugin.redis;
+
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+import ai.chat2db.spi.model.Table;
+import ai.chat2db.spi.sql.SQLExecutor;
+import jakarta.validation.constraints.NotEmpty;
+import org.apache.commons.lang3.StringUtils;
+
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class RedisMetaData extends DefaultMetaService implements MetaData {
+ @Override
+ public String tableDDL(@NotEmpty String databaseName, String schemaName, @NotEmpty String tableName) {
+ return "";
+ }
+
+
+ @Override
+ public List databases() {
+ List databases = new ArrayList<>();
+ return SQLExecutor.getInstance().executeSql("config get databases", resultSet -> {
+ try {
+ if (resultSet.next()) {
+ Object count = resultSet.getObject(2);
+ if(StringUtils.isNotBlank(count.toString())) {
+ for (int i = 0; i < Integer.parseInt(count.toString()); i++) {
+ databases.add(String.valueOf(i));
+ }
+ }
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ return databases;
+ });
+ }
+
+ @Override
+ public List tables(String databaseName, String schemaName, String tableName) {
+ return SQLExecutor.getInstance().executeSql("scan 0 MATCH * COUNT 1000", resultSet -> {
+ List tables = new ArrayList<>();
+ try {
+ while (resultSet.next()) {
+ ArrayList list = (ArrayList)resultSet.getObject(2);
+ for (Object object : list) {
+ Table table = new Table();
+ table.setName(object.toString());
+ tables.add(table);
+ }
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ return tables;
+ });
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/RedisPlugin.java b/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/RedisPlugin.java
new file mode 100644
index 00000000..4d26009c
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/RedisPlugin.java
@@ -0,0 +1,26 @@
+package ai.chat2db.plugin.redis;
+
+
+import ai.chat2db.plugin.redis.builder.DBConfigBuilder;
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.Plugin;
+import ai.chat2db.spi.config.DBConfig;
+
+public class RedisPlugin implements Plugin {
+
+ @Override
+ public DBConfig getDBConfig() {
+ return DBConfigBuilder.buildDBConfig();
+ }
+
+ @Override
+ public MetaData getMetaData() {
+ return new RedisMetaData();
+ }
+
+ @Override
+ public DBManage getDBManage() {
+ return new RedisDBManage();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/builder/DBConfigBuilder.java b/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/builder/DBConfigBuilder.java
new file mode 100644
index 00000000..4ea0e7f5
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-redis/src/main/java/ai/chat2db/plugin/redis/builder/DBConfigBuilder.java
@@ -0,0 +1,21 @@
+package ai.chat2db.plugin.redis.builder;
+
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.config.DriverConfig;
+import com.google.common.collect.Lists;
+
+public class DBConfigBuilder {
+ public static DBConfig buildDBConfig() {
+ DBConfig dbConfig = new DBConfig();
+ dbConfig.setName("Redis");
+ dbConfig.setDbType("REDIS");
+ DriverConfig driverConfig = new DriverConfig();
+ driverConfig.setJdbcDriver("sredis-jdbc-driver-1.3.jar");
+ driverConfig.setJdbcDriverClass("jdbc.RedisDriver");
+ driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/redis-jdbc-driver-1.3.jar"));
+ driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
+ dbConfig.setDefaultDriverConfig(driverConfig);
+ dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
+ return dbConfig;
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-redis/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin b/chat2db-server/chat2db-plugins/chat2db-redis/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
new file mode 100644
index 00000000..3ccb6129
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-redis/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
@@ -0,0 +1 @@
+ai.chat2db.plugin.redis.RedisPlugin
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlite/pom.xml b/chat2db-server/chat2db-plugins/chat2db-sqlite/pom.xml
new file mode 100644
index 00000000..ba471784
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-sqlite/pom.xml
@@ -0,0 +1,19 @@
+
+
+ 4.0.0
+
+ ai.chat2db
+ chat2db-plugins
+ ${revision}
+ ../pom.xml
+
+ chat2db-sqlite
+
+
+ ai.chat2db
+ chat2db-spi
+
+
+
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/SqliteDBManage.java b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/SqliteDBManage.java
new file mode 100644
index 00000000..cc6d276a
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/SqliteDBManage.java
@@ -0,0 +1,45 @@
+package ai.chat2db.plugin.sqlite;
+
+import ai.chat2db.spi.DBManage;
+
+public class SqliteDBManage implements DBManage {
+ @Override
+ public void connectDatabase(String database) {
+
+ }
+
+ @Override
+ public void modifyDatabase(String databaseName, String newDatabaseName) {
+
+ }
+
+ @Override
+ public void createDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void dropDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void createSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void dropSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
+
+ }
+
+ @Override
+ public void dropTable(String databaseName, String schemaName, String tableName) {
+
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/SqliteMetaData.java b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/SqliteMetaData.java
new file mode 100644
index 00000000..c5dc70fc
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/SqliteMetaData.java
@@ -0,0 +1,35 @@
+package ai.chat2db.plugin.sqlite;
+
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+import ai.chat2db.spi.sql.SQLExecutor;
+import com.google.common.collect.Lists;
+
+import java.sql.SQLException;
+import java.util.List;
+
+public class SqliteMetaData extends DefaultMetaService implements MetaData {
+ @Override
+ public String tableDDL(String databaseName, String schemaName, String tableName) {
+ String sql = "SELECT sql FROM sqlite_master WHERE type='table' AND name='" + tableName + "'";
+ return SQLExecutor.getInstance().executeSql(sql, resultSet -> {
+ try {
+ if (resultSet.next()) {
+ return resultSet.getString("sql");
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ return null;
+ });
+ }
+ @Override
+ public List databases() {
+ return Lists.newArrayList("main");
+ }
+
+ @Override
+ public List schemas(String databaseName) {
+ return Lists.newArrayList();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/SqlitePlugin.java b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/SqlitePlugin.java
new file mode 100644
index 00000000..b6ebbfb4
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/SqlitePlugin.java
@@ -0,0 +1,24 @@
+package ai.chat2db.plugin.sqlite;
+
+import ai.chat2db.plugin.sqlite.builder.DBConfigBuilder;
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.Plugin;
+import ai.chat2db.spi.config.DBConfig;
+
+public class SqlitePlugin implements Plugin {
+ @Override
+ public DBConfig getDBConfig() {
+ return DBConfigBuilder.buildDBConfig();
+ }
+
+ @Override
+ public MetaData getMetaData() {
+ return new SqliteMetaData();
+ }
+
+ @Override
+ public DBManage getDBManage() {
+ return new SqliteDBManage();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/builder/DBConfigBuilder.java b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/builder/DBConfigBuilder.java
new file mode 100644
index 00000000..75676053
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/builder/DBConfigBuilder.java
@@ -0,0 +1,22 @@
+package ai.chat2db.plugin.sqlite.builder;
+
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.config.DriverConfig;
+import com.google.common.collect.Lists;
+
+public class DBConfigBuilder {
+
+ public static DBConfig buildDBConfig() {
+ DBConfig dbConfig = new DBConfig();
+ dbConfig.setName("SQLite");
+ dbConfig.setDbType("SQLITE");
+ DriverConfig driverConfig = new DriverConfig();
+ driverConfig.setJdbcDriver("sqlite-jdbc-3.39.3.0.jar");
+ driverConfig.setJdbcDriverClass("org.sqlite.JDBC");
+ driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/sqlite-jdbc-3.39.3.0.jar"));
+ driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
+ dbConfig.setDefaultDriverConfig(driverConfig);
+ dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
+ return dbConfig;
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
new file mode 100644
index 00000000..7e053df6
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
@@ -0,0 +1 @@
+ai.chat2db.plugin.sqlite.SqlitePlugin
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlserver/pom.xml b/chat2db-server/chat2db-plugins/chat2db-sqlserver/pom.xml
new file mode 100644
index 00000000..4f9b8eda
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-sqlserver/pom.xml
@@ -0,0 +1,22 @@
+
+
+ 4.0.0
+
+ ai.chat2db
+ chat2db-plugins
+ ${revision}
+ ../pom.xml
+
+
+ chat2db-sqlserver
+
+
+
+ ai.chat2db
+ chat2db-spi
+
+
+
+
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/SqlServerDBManage.java b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/SqlServerDBManage.java
new file mode 100644
index 00000000..ec82655b
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/SqlServerDBManage.java
@@ -0,0 +1,52 @@
+package ai.chat2db.plugin.sqlserver;
+
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.sql.SQLExecutor;
+
+import java.sql.SQLException;
+
+public class SqlServerDBManage implements DBManage {
+ @Override
+ public void connectDatabase(String database) {
+ try {
+ SQLExecutor.getInstance().execute("use " + database + ";");
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ @Override
+ public void modifyDatabase(String databaseName, String newDatabaseName) {
+
+ }
+
+ @Override
+ public void createDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void dropDatabase(String databaseName) {
+
+ }
+
+ @Override
+ public void createSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void dropSchema(String databaseName, String schemaName) {
+
+ }
+
+ @Override
+ public void modifySchema(String databaseName, String schemaName, String newSchemaName) {
+
+ }
+
+ @Override
+ public void dropTable(String databaseName, String schemaName, String tableName) {
+
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/SqlServerMetaData.java b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/SqlServerMetaData.java
new file mode 100644
index 00000000..6c9dd952
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/SqlServerMetaData.java
@@ -0,0 +1,61 @@
+package ai.chat2db.plugin.sqlserver;
+
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.jdbc.DefaultMetaService;
+import ai.chat2db.spi.sql.SQLExecutor;
+
+import java.sql.SQLException;
+
+public class SqlServerMetaData extends DefaultMetaService implements MetaData {
+ private String functionSQL
+ = "CREATE FUNCTION tableSchema.ufn_GetCreateTableScript( @schema_name NVARCHAR(128), @table_name NVARCHAR"
+ + "(128)) RETURNS NVARCHAR(MAX) AS BEGIN DECLARE @CreateTableScript NVARCHAR(MAX); DECLARE @IndexScripts "
+ + "NVARCHAR(MAX) = ''; DECLARE @ColumnDescriptions NVARCHAR(MAX) = N''; SELECT @CreateTableScript = CONCAT( "
+ + "'CREATE TABLE [', s.name, '].[' , t.name, '] (', STUFF( ( SELECT ', [' + c.name + '] ' + tp.name + CASE "
+ + "WHEN tp.name IN ('varchar', 'nvarchar', 'char', 'nchar') THEN '(' + IIF(c.max_length = -1, 'MAX', CAST(c"
+ + ".max_length AS NVARCHAR(10))) + ')' WHEN tp.name IN ('decimal', 'numeric') THEN '(' + CAST(c.precision AS "
+ + "NVARCHAR(10)) + ', ' + CAST(c.scale AS NVARCHAR(10)) + ')' ELSE '' END + ' ' + CASE WHEN c.is_nullable = 1"
+ + " THEN 'NULL' ELSE 'NOT NULL' END FROM sys.columns c JOIN sys.types tp ON c.user_type_id = tp.user_type_id "
+ + "WHERE c.object_id = t.object_id FOR XML PATH(''), TYPE ).value('/', 'nvarchar(max)'), 1, 1, ''), ');' ) "
+ + "FROM sys.tables t JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.name = @table_name AND s.name = "
+ + "@schema_name; SELECT @IndexScripts = @IndexScripts + 'CREATE ' + CASE WHEN i.is_unique = 1 THEN 'UNIQUE ' "
+ + "ELSE '' END + i.type_desc + ' INDEX [' + i.name + '] ON [' + s.name + '].[' + t.name + '] (' + STUFF( ( "
+ + "SELECT ', [' + c.name + ']' + CASE WHEN ic.is_descending_key = 1 THEN ' DESC' ELSE ' ASC' END FROM sys"
+ + ".index_columns ic JOIN sys.columns c ON ic.object_id = c.object_id AND ic.column_id = c.column_id WHERE ic"
+ + ".object_id = i.object_id AND ic.index_id = i.index_id ORDER BY ic.key_ordinal FOR XML PATH('') ), 1, 1, "
+ + "'') + ')' + CASE WHEN i.has_filter = 1 THEN ' WHERE ' + i.filter_definition ELSE '' END + ';' + CHAR(13) +"
+ + " CHAR(10) FROM sys.indexes i JOIN sys.tables t ON i.object_id = t.object_id JOIN sys.schemas s ON t"
+ + ".schema_id = s.schema_id WHERE i.type > 0 AND t.name = @table_name AND s.name "
+ + "= @schema_name; SELECT @ColumnDescriptions += 'EXEC sp_addextendedproperty @name=N''MS_Description'', "
+ + "@value=N''' + CAST(p.value AS NVARCHAR(MAX)) + ''', @level0type=N''SCHEMA'', @level0name=N''' + "
+ + "@schema_name + ''', @level1type=N''TABLE'', @level1name=N''' + @table_name + ''', @level2type=N''COLUMN'',"
+ + " @level2name=N''' + c.name + ''';' + CHAR(13) + CHAR(10) FROM sys.extended_properties p JOIN sys.columns c"
+ + " ON p.major_id = c.object_id AND p.minor_id = c.column_id JOIN sys.tables t ON c.object_id = t.object_id "
+ + "JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE p.class = 1 AND t.name = @table_name AND s.name = "
+ + "@schema_name; SET @CreateTableScript = @CreateTableScript + CHAR(13) + CHAR(10) + @IndexScripts + CHAR(13)"
+ + " + CHAR(10)+ @ColumnDescriptions+ CHAR(10); RETURN @CreateTableScript; END";
+
+
+ @Override
+ public String tableDDL(String databaseName, String schemaName, String tableName) {
+ try {
+ System.out.println(functionSQL);
+ SQLExecutor.getInstance().executeSql(functionSQL.replace("tableSchema", schemaName), resultSet -> null);
+ } catch (Exception e) {
+ //log.error("创建函数失败", e);
+ }
+
+ String ddlSql = "SELECT " + schemaName + ".ufn_GetCreateTableScript('" + schemaName + "', '" + tableName
+ + "') AS sql";
+ return SQLExecutor.getInstance().executeSql(ddlSql, resultSet -> {
+ try {
+ if (resultSet.next()) {
+ return resultSet.getString("sql");
+ }
+ } catch (SQLException e) {
+ throw new RuntimeException(e);
+ }
+ return null;
+ });
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/SqlServerPlugin.java b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/SqlServerPlugin.java
new file mode 100644
index 00000000..d4b16b9a
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/SqlServerPlugin.java
@@ -0,0 +1,25 @@
+package ai.chat2db.plugin.sqlserver;
+
+
+import ai.chat2db.plugin.sqlserver.builder.SqlServerDBConfigBuilder;
+import ai.chat2db.spi.DBManage;
+import ai.chat2db.spi.MetaData;
+import ai.chat2db.spi.Plugin;
+import ai.chat2db.spi.config.DBConfig;
+
+public class SqlServerPlugin implements Plugin {
+ @Override
+ public DBConfig getDBConfig() {
+ return SqlServerDBConfigBuilder.buildDBConfig();
+ }
+
+ @Override
+ public MetaData getMetaData() {
+ return new SqlServerMetaData();
+ }
+
+ @Override
+ public DBManage getDBManage() {
+ return new SqlServerDBManage();
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/builder/SqlServerDBConfigBuilder.java b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/builder/SqlServerDBConfigBuilder.java
new file mode 100644
index 00000000..c3fbc6b9
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/builder/SqlServerDBConfigBuilder.java
@@ -0,0 +1,22 @@
+package ai.chat2db.plugin.sqlserver.builder;
+
+import ai.chat2db.spi.config.DBConfig;
+import ai.chat2db.spi.config.DriverConfig;
+import com.google.common.collect.Lists;
+
+public class SqlServerDBConfigBuilder {
+
+ public static DBConfig buildDBConfig() {
+ DBConfig dbConfig = new DBConfig();
+ dbConfig.setName("SQLServer");
+ dbConfig.setDbType("SQLSERVER");
+ DriverConfig driverConfig = new DriverConfig();
+ driverConfig.setJdbcDriver("mssql-jdbc-11.2.1.jre17.jar");
+ driverConfig.setJdbcDriverClass("com.microsoft.sqlserver.jdbc.SQLServerDriver");
+ driverConfig.setDownloadJdbcDriverUrls(Lists.newArrayList("https://oss-chat2db.alibaba.com/lib/mssql-jdbc-11.2.1.jre17.jar"));
+ driverConfig.setName(driverConfig.getJdbcDriver() + ":" + driverConfig.getJdbcDriverClass());
+ dbConfig.setDefaultDriverConfig(driverConfig);
+ dbConfig.setDriverConfigList(Lists.newArrayList(driverConfig));
+ return dbConfig;
+ }
+}
diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/builder/form.json b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/builder/form.json
new file mode 100644
index 00000000..e69de29b
diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/builder/item.json b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/builder/item.json
new file mode 100644
index 00000000..e69de29b
diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
new file mode 100644
index 00000000..9992d660
--- /dev/null
+++ b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/resources/META-INF/services/ai.chat2db.spi.Plugin
@@ -0,0 +1 @@
+ai.chat2db.plugin.sqlserver.SqlServerPlugin
\ No newline at end of file
diff --git a/chat2db-server/chat2db-plugins/pom.xml b/chat2db-server/chat2db-plugins/pom.xml
index f8662fa5..e95e85c5 100644
--- a/chat2db-server/chat2db-plugins/pom.xml
+++ b/chat2db-server/chat2db-plugins/pom.xml
@@ -15,6 +15,21 @@
chat2b-mysql
+ chat2db-sqlserver
+ chat2db-postgresql
+ chat2db-oracle
+ chat2db-sqlite
+ chat2db-h2
+ chat2db-clickhouse
+ chat2db-oceanbase
+ chat2db-db2
+ chat2db-mariadb
+ chat2db-dm
+ chat2db-mongodb
+ chat2db-presto
+ chat2db-hive
+ chat2db-redis
+ chat2db-kingbase
\ No newline at end of file
diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/pom.xml b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/pom.xml
index cd9977e1..8da73a8e 100644
--- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/pom.xml
+++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/pom.xml
@@ -10,7 +10,6 @@
4.0.0
-
chat2db-server-domain-core
@@ -43,5 +42,85 @@
chat2b-mysql
${revision}
+
+ ai.chat2db
+ chat2db-clickhouse
+ ${revision}
+
+
+ ai.chat2db
+ chat2db-db2
+ ${revision}
+
+
+
+
+ ai.chat2db
+ chat2db-dm
+ ${revision}
+
+
+ ai.chat2db
+ chat2db-h2
+ ${revision}
+
+
+ ai.chat2db
+ chat2db-hive
+ ${revision}
+
+
+ ai.chat2db
+ chat2db-kingbase
+ ${revision}
+
+
+ ai.chat2db
+ chat2db-mariadb
+ ${revision}
+
+
+ ai.chat2db
+ chat2db-mongodb
+ ${revision}
+
+
+ ai.chat2db
+ chat2db-oceanbase
+ ${revision}
+
+
+
+
+ ai.chat2db
+ chat2db-oracle
+ ${revision}
+
+
+
+ ai.chat2db
+ chat2db-postgresql
+ ${revision}
+
+
+ ai.chat2db
+ chat2db-presto
+ ${revision}
+
+
+ ai.chat2db
+ chat2db-redis
+ ${revision}
+
+
+ ai.chat2db
+ chat2db-sqlite
+ ${revision}
+
+
+ ai.chat2db
+ chat2db-sqlserver
+ ${revision}
+
diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-support/src/main/java/ai/chat2db/server/domain/support/sql/SQLExecutor.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-support/src/main/java/ai/chat2db/server/domain/support/sql/SQLExecutor.java
index 57644a66..73247e85 100644
--- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-support/src/main/java/ai/chat2db/server/domain/support/sql/SQLExecutor.java
+++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-support/src/main/java/ai/chat2db/server/domain/support/sql/SQLExecutor.java
@@ -215,7 +215,7 @@ public class SQLExecutor {
}
case REDIS -> {
try {
- execute("select " + database, null);
+ execute("select " + database);
} catch (SQLException e) {
throw new RuntimeException(e);
}