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 index d05b760b..1af8b639 100644 --- 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 @@ -96,4 +96,13 @@ public class ClickHouseDBManage extends DefaultDBManage implements DBManage { } + @Override + public void copyTable(Connection connection, String databaseName, String schemaName, String tableName, String newTableName,boolean copyData) throws SQLException { + String sql = "CREATE TABLE " + newTableName + " AS " + tableName + ""; + SQLExecutor.getInstance().execute(connection, sql, resultSet -> null); + if(copyData){ + sql = "INSERT INTO " + newTableName + " SELECT * FROM " + tableName; + SQLExecutor.getInstance().execute(connection, sql, resultSet -> null); + } + } } 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 index b13ce6f9..6ebdd82b 100644 --- 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 @@ -81,7 +81,7 @@ public class ClickHouseMetaData extends DefaultMetaService implements MetaData { @Override public String tableDDL(Connection connection, @NotEmpty String databaseName, String schemaName, @NotEmpty String tableName) { - String sql = "SHOW CREATE TABLE " + format(databaseName) + "." + String sql = "SHOW CREATE TABLE " + format(schemaName) + "." + format(tableName); return SQLExecutor.getInstance().execute(connection, sql, resultSet -> { if (resultSet.next()) { @@ -112,7 +112,7 @@ public class ClickHouseMetaData extends DefaultMetaService implements MetaData { @Override public List triggers(Connection connection, String databaseName, String schemaName) { List triggers = new ArrayList<>(); - String sql = String.format(TRIGGER_SQL_LIST, databaseName); + String sql = String.format(TRIGGER_SQL_LIST, schemaName); return SQLExecutor.getInstance().execute(connection, sql, resultSet -> { while (resultSet.next()) { Trigger trigger = new Trigger(); @@ -145,7 +145,7 @@ public class ClickHouseMetaData extends DefaultMetaService implements MetaData { @Override public Procedure procedure(Connection connection, @NotEmpty String databaseName, String schemaName, String procedureName) { - String sql = String.format(ROUTINES_SQL, "PROCEDURE", databaseName, procedureName); + String sql = String.format(ROUTINES_SQL, "PROCEDURE", schemaName, procedureName); return SQLExecutor.getInstance().execute(connection, sql, resultSet -> { Procedure procedure = new Procedure(); procedure.setDatabaseName(databaseName); @@ -235,7 +235,7 @@ public class ClickHouseMetaData extends DefaultMetaService implements MetaData { @Override public List indexes(Connection connection, String databaseName, String schemaName, String tableName) { StringBuilder queryBuf = new StringBuilder("SHOW INDEX FROM "); - queryBuf.append("`").append(tableName).append("`"); + queryBuf.append("`").append(schemaName).append("`"); queryBuf.append(" FROM "); queryBuf.append("`").append(databaseName).append("`"); return SQLExecutor.getInstance().execute(connection, queryBuf.toString(), resultSet -> { @@ -298,11 +298,8 @@ public class ClickHouseMetaData extends DefaultMetaService implements MetaData { @Override public String getMetaDataName(String... names) { - return Arrays.stream(names) - .skip(1) // 跳过第一个名称 - .filter(StringUtils::isNotBlank) - .map(name -> "`" + name + "`") - .collect(Collectors.joining(".")); + return Arrays.stream(names).filter(name -> StringUtils.isNotBlank(name)).map(name -> "`" + name + "`").collect(Collectors.joining(".")); + } 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 index 39114b59..5f079170 100644 --- 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 @@ -111,4 +111,14 @@ public class DB2DBManage extends DefaultDBManage implements DBManage { String sql = "DROP TABLE " + tableName; SQLExecutor.getInstance().execute(connection, sql, resultSet -> null); } + + @Override + public void copyTable(Connection connection, String databaseName, String schemaName, String tableName, String newTableName,boolean copyData) throws SQLException { + String sql = "CREATE TABLE " + newTableName + " LIKE " + tableName + " INCLUDING INDEXES"; + SQLExecutor.getInstance().execute(connection, sql, resultSet -> null); + if(copyData){ + sql = "INSERT INTO " + newTableName + " SELECT * FROM " + tableName; + SQLExecutor.getInstance().execute(connection, sql, resultSet -> null); + } + } } 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 index cb3d7a3f..92e1bbb6 100644 --- 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 @@ -28,4 +28,14 @@ public class HiveDBManage extends DefaultDBManage implements DBManage { String sql = "drop table if exists " +tableName; SQLExecutor.getInstance().execute(connection,sql, resultSet -> null); } + + @Override + public void copyTable(Connection connection, String databaseName, String schemaName, String tableName, String newTableName,boolean copyData) throws SQLException { + String sql = "CREATE TABLE " + newTableName + "LIKE " + tableName; + SQLExecutor.getInstance().execute(connection, sql, resultSet -> null); + if(copyData){ + sql = "INSERT INTO " + newTableName + " SELECT * FROM " + tableName; + SQLExecutor.getInstance().execute(connection, sql, resultSet -> null); + } + } } diff --git a/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/KingBaseDBManage.java b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/KingBaseDBManage.java index 076d7214..42db2114 100644 --- a/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/KingBaseDBManage.java +++ b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/KingBaseDBManage.java @@ -1,6 +1,7 @@ package ai.chat2db.plugin.kingbase; import java.sql.Connection; +import java.sql.SQLException; import ai.chat2db.spi.DBManage; import ai.chat2db.spi.jdbc.DefaultDBManage; @@ -64,4 +65,15 @@ public class KingBaseDBManage extends DefaultDBManage implements DBManage { String sql = "drop table if exists " +tableName; SQLExecutor.getInstance().execute(connection,sql, resultSet -> null); } + + @Override + public void copyTable(Connection connection, String databaseName, String schemaName, String tableName, String newTableName,boolean copyData) throws SQLException { + String sql = ""; + if(copyData){ + sql = "CREATE TABLE " + newTableName + " AS TABLE " + tableName + " WITH DATA"; + }else { + sql = "CREATE TABLE " + newTableName + " AS TABLE " + tableName + " WITH NO DATA"; + } + SQLExecutor.getInstance().execute(connection, sql, resultSet -> null); + } } 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 index 3554eb7a..c2d9af99 100644 --- 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 @@ -184,4 +184,15 @@ public class OracleDBManage extends DefaultDBManage implements DBManage { } } + @Override + public void copyTable(Connection connection, String databaseName, String schemaName, String tableName, String newTableName,boolean copyData) throws SQLException { + String sql = ""; + if(copyData){ + sql = "CREATE TABLE " + newTableName + " AS SELECT * FROM " + tableName; + }else { + sql = "CREATE TABLE " + newTableName + " AS SELECT * FROM " + tableName + " WHERE 1=0"; + } + SQLExecutor.getInstance().execute(connection, sql, resultSet -> null); + } + } 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 index d09c5c03..d8411b91 100644 --- 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 @@ -159,4 +159,15 @@ public class PostgreSQLDBManage extends DefaultDBManage implements DBManage { SQLExecutor.getInstance().execute(connection, sql, resultSet -> null); } + @Override + public void copyTable(Connection connection, String databaseName, String schemaName, String tableName, String newTableName,boolean copyData) throws SQLException { + String sql = ""; + if(copyData){ + sql = "CREATE TABLE " + newTableName + " AS TABLE " + tableName + " WITH DATA"; + }else { + sql = "CREATE TABLE " + newTableName + " AS TABLE " + tableName + " WITH NO DATA"; + } + SQLExecutor.getInstance().execute(connection, sql, resultSet -> null); + } + } 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 index 5b3901ee..36331e70 100644 --- 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 @@ -203,4 +203,15 @@ public class SqlServerDBManage extends DefaultDBManage implements DBManage { throw new RuntimeException(e); } } + + @Override + public void copyTable(Connection connection, String databaseName, String schemaName, String tableName, String newTableName,boolean copyData) throws SQLException { + String sql = ""; + if(copyData){ + sql = "SELECT * INTO " + newTableName + " FROM " + tableName; + }else { + sql = "SELECT * INTO " + newTableName + " FROM " + tableName + " WHERE 1=0"; + } + SQLExecutor.getInstance().execute(connection, sql, resultSet -> null); + } } diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/DBManage.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/DBManage.java index 343e4b52..e2410c46 100644 --- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/DBManage.java +++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/DBManage.java @@ -140,4 +140,27 @@ public interface DBManage { * @return */ void exportTable(Connection connection, String databaseName, String schemaName,String tableName,AsyncContext asyncContext) throws SQLException; + + + /** + * truncate table + * @param connection + * @param databaseName + * @param schemaName + * @param tableName + * @throws SQLException + */ + void truncateTable(Connection connection, String databaseName, String schemaName, String tableName)throws SQLException; + + + /** + * copy table + * + * @param databaseName + * @param schemaName + * @param tableName + * @param newTableName + * @return + */ + void copyTable(Connection connection, String databaseName, String schemaName, String tableName, String newTableName,boolean copyData) throws SQLException; } \ No newline at end of file diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/jdbc/DefaultDBManage.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/jdbc/DefaultDBManage.java index 3c41ee03..da2bd198 100644 --- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/jdbc/DefaultDBManage.java +++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/jdbc/DefaultDBManage.java @@ -38,15 +38,15 @@ public class DefaultDBManage implements DBManage { protected static final String TABLE_TITLE = DIVIDING_LINE + NEW_LINE + "-- Table structure for table %s" + NEW_LINE + DIVIDING_LINE; - protected static final String VIEW_TITLE = DIVIDING_LINE + NEW_LINE +"-- View structure for view %s"+ NEW_LINE + DIVIDING_LINE; + protected static final String VIEW_TITLE = DIVIDING_LINE + NEW_LINE + "-- View structure for view %s" + NEW_LINE + DIVIDING_LINE; - protected static final String FUNCTION_TITLE = DIVIDING_LINE + NEW_LINE +"-- Function structure for function %s"+ NEW_LINE + DIVIDING_LINE; + protected static final String FUNCTION_TITLE = DIVIDING_LINE + NEW_LINE + "-- Function structure for function %s" + NEW_LINE + DIVIDING_LINE; - protected static final String TRIGGER_TITLE = DIVIDING_LINE + NEW_LINE + "-- Trigger structure for trigger %s"+ NEW_LINE + DIVIDING_LINE; + protected static final String TRIGGER_TITLE = DIVIDING_LINE + NEW_LINE + "-- Trigger structure for trigger %s" + NEW_LINE + DIVIDING_LINE; - protected static final String PROCEDURE_TITLE = DIVIDING_LINE + NEW_LINE + "-- Procedure structure for procedure %s"+ NEW_LINE + DIVIDING_LINE; + protected static final String PROCEDURE_TITLE = DIVIDING_LINE + NEW_LINE + "-- Procedure structure for procedure %s" + NEW_LINE + DIVIDING_LINE; - private static final String RECORD_TITLE = DIVIDING_LINE + NEW_LINE +"-- Records of %s"+ NEW_LINE + DIVIDING_LINE; + private static final String RECORD_TITLE = DIVIDING_LINE + NEW_LINE + "-- Records of %s" + NEW_LINE + DIVIDING_LINE; @Override @@ -179,6 +179,23 @@ public class DefaultDBManage implements DBManage { } + @Override + public void truncateTable(Connection connection, String databaseName, String schemaName, String tableName) throws SQLException { + String sql = "TRUNCATE TABLE " + tableName ; + SQLExecutor.getInstance().execute(connection, sql, resultSet -> null); + } + + @Override + public void copyTable(Connection connection, String databaseName, String schemaName, String tableName, String newTableName,boolean copyData) throws SQLException { + String sql = ""; + if(copyData){ + sql = "CREATE TABLE " + newTableName + " AS SELECT * FROM " + tableName; + }else { + sql = "CREATE TABLE " + newTableName + " AS SELECT * FROM " + tableName + " WHERE 1=0"; + } + SQLExecutor.getInstance().execute(connection, sql, resultSet -> null); + } + // public void exportDatabaseData(Connection connection, String databaseName, String schemaName, String tableName, AsyncContext asyncContext) throws SQLException { // exportTableData(connection, databaseName, schemaName, tableName, asyncContext); // }