copy and delete Table

This commit is contained in:
SwallowGG
2024-06-27 11:50:55 +08:00
parent 0152ec4ead
commit 57f0cfa2db
10 changed files with 125 additions and 14 deletions

View File

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

View File

@ -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<Trigger> triggers(Connection connection, String databaseName, String schemaName) {
List<Trigger> 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<TableIndex> 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("."));
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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