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); }