diff --git a/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/builder/DB2SqlBuilder.java b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/builder/DB2SqlBuilder.java index c38a84c9..20dc5cfb 100644 --- a/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/builder/DB2SqlBuilder.java +++ b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/builder/DB2SqlBuilder.java @@ -7,7 +7,6 @@ import ai.chat2db.spi.model.Schema; import ai.chat2db.spi.model.Table; import ai.chat2db.spi.model.TableColumn; import ai.chat2db.spi.model.TableIndex; -import ai.chat2db.spi.util.TableUtils; import org.apache.commons.lang3.StringUtils; public class DB2SqlBuilder extends DefaultSqlBuilder { @@ -85,7 +84,7 @@ public class DB2SqlBuilder extends DefaultSqlBuilder { for (TableColumn tableColumn : newTable.getColumnList()) { if (StringUtils.isNotBlank(tableColumn.getEditStatus())) { DB2ColumnTypeEnum typeEnum = DB2ColumnTypeEnum.getByType(tableColumn.getColumnType()); - script.append("\t").append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append(";\n"); + script.append("\t").append(typeEnum.buildModifyColumn(tableColumn)).append(";\n"); if (StringUtils.isNotBlank(tableColumn.getComment())) { script.append("\n").append(buildComment(tableColumn)).append(";\n"); } diff --git a/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/type/DB2ColumnTypeEnum.java b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/type/DB2ColumnTypeEnum.java index f81ac1f1..81465314 100644 --- a/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/type/DB2ColumnTypeEnum.java +++ b/chat2db-server/chat2db-plugins/chat2db-db2/src/main/java/ai/chat2db/plugin/db2/type/DB2ColumnTypeEnum.java @@ -229,7 +229,7 @@ public enum DB2ColumnTypeEnum implements ColumnBuilder { @Override - public String buildModifyColumn(TableColumn tableColumn, TableColumn oldColumn) { + public String buildModifyColumn(TableColumn tableColumn) { if (EditStatus.DELETE.name().equals(tableColumn.getEditStatus())) { StringBuilder script = new StringBuilder(); diff --git a/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/builder/DMSqlBuilder.java b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/builder/DMSqlBuilder.java index 4b64bf3f..5f840cf5 100644 --- a/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/builder/DMSqlBuilder.java +++ b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/builder/DMSqlBuilder.java @@ -7,7 +7,6 @@ import ai.chat2db.spi.model.Schema; import ai.chat2db.spi.model.Table; import ai.chat2db.spi.model.TableColumn; import ai.chat2db.spi.model.TableIndex; -import ai.chat2db.spi.util.TableUtils; import org.apache.commons.lang3.StringUtils; public class DMSqlBuilder extends DefaultSqlBuilder { @@ -82,7 +81,7 @@ public class DMSqlBuilder extends DefaultSqlBuilder { for (TableColumn tableColumn : newTable.getColumnList()) { if (StringUtils.isNotBlank(tableColumn.getEditStatus())) { DMColumnTypeEnum typeEnum = DMColumnTypeEnum.getByType(tableColumn.getColumnType()); - script.append("\t").append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append(";\n"); + script.append("\t").append(typeEnum.buildModifyColumn(tableColumn)).append(";\n"); if (StringUtils.isNotBlank(tableColumn.getComment())) { script.append("\n").append(buildComment(tableColumn)).append(";\n"); } diff --git a/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/type/DMColumnTypeEnum.java b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/type/DMColumnTypeEnum.java index 8cc91906..dd15ed23 100644 --- a/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/type/DMColumnTypeEnum.java +++ b/chat2db-server/chat2db-plugins/chat2db-dm/src/main/java/ai/chat2db/plugin/dm/type/DMColumnTypeEnum.java @@ -250,7 +250,7 @@ public enum DMColumnTypeEnum implements ColumnBuilder { @Override - public String buildModifyColumn(TableColumn tableColumn, TableColumn oldColumn) { + public String buildModifyColumn(TableColumn tableColumn) { if (EditStatus.DELETE.name().equals(tableColumn.getEditStatus())) { StringBuilder script = new StringBuilder(); diff --git a/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/builder/KingBaseSqlBuilder.java b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/builder/KingBaseSqlBuilder.java index 82f7983d..bccae895 100644 --- a/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/builder/KingBaseSqlBuilder.java +++ b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/builder/KingBaseSqlBuilder.java @@ -5,7 +5,6 @@ import ai.chat2db.plugin.kingbase.type.KingBaseIndexTypeEnum; import ai.chat2db.spi.SqlBuilder; import ai.chat2db.spi.jdbc.DefaultSqlBuilder; import ai.chat2db.spi.model.*; -import ai.chat2db.spi.util.TableUtils; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; @@ -110,7 +109,7 @@ public class KingBaseSqlBuilder extends DefaultSqlBuilder implements SqlBuilder // append modify column for (TableColumn tableColumn : newTable.getColumnList()) { KingBaseColumnTypeEnum typeEnum = KingBaseColumnTypeEnum.getByType(tableColumn.getColumnType()); - scriptModify.append("\t").append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append(",\n"); + scriptModify.append("\t").append(typeEnum.buildModifyColumn(tableColumn)).append(",\n"); modify = true; } diff --git a/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/type/KingBaseColumnTypeEnum.java b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/type/KingBaseColumnTypeEnum.java index 093d0b34..1eec1a77 100644 --- a/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/type/KingBaseColumnTypeEnum.java +++ b/chat2db-server/chat2db-plugins/chat2db-kingbase/src/main/java/ai/chat2db/plugin/kingbase/type/KingBaseColumnTypeEnum.java @@ -130,7 +130,7 @@ public enum KingBaseColumnTypeEnum implements ColumnBuilder { } @Override - public String buildModifyColumn(TableColumn column, TableColumn oldColumn) { + public String buildModifyColumn(TableColumn column) { if (EditStatus.DELETE.name().equals(column.getEditStatus())) { return StringUtils.join("DROP COLUMN `", column.getName() + "`"); diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/builder/MysqlSqlBuilder.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/builder/MysqlSqlBuilder.java index f984bf67..c2cc32c0 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/builder/MysqlSqlBuilder.java +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/builder/MysqlSqlBuilder.java @@ -8,7 +8,6 @@ import ai.chat2db.spi.model.Database; import ai.chat2db.spi.model.Table; import ai.chat2db.spi.model.TableColumn; import ai.chat2db.spi.model.TableIndex; -import ai.chat2db.spi.util.TableUtils; import org.apache.commons.lang3.StringUtils; @@ -87,7 +86,7 @@ public class MysqlSqlBuilder extends DefaultSqlBuilder implements SqlBuilder { for (TableColumn tableColumn : newTable.getColumnList()) { if (StringUtils.isNotBlank(tableColumn.getEditStatus()) && StringUtils.isNotBlank(tableColumn.getColumnType())&& StringUtils.isNotBlank(tableColumn.getName())){ MysqlColumnTypeEnum typeEnum = MysqlColumnTypeEnum.getByType(tableColumn.getColumnType()); - script.append("\t").append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append(",\n"); + script.append("\t").append(typeEnum.buildModifyColumn(tableColumn)).append(",\n"); } } diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/type/MysqlColumnTypeEnum.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/type/MysqlColumnTypeEnum.java index c414c486..bd89f786 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/type/MysqlColumnTypeEnum.java +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/type/MysqlColumnTypeEnum.java @@ -181,7 +181,7 @@ public enum MysqlColumnTypeEnum implements ColumnBuilder { } @Override - public String buildModifyColumn(TableColumn tableColumn, TableColumn oldColumn) { + public String buildModifyColumn(TableColumn tableColumn) { if (EditStatus.DELETE.name().equals(tableColumn.getEditStatus())) { return StringUtils.join("DROP COLUMN `", tableColumn.getName() + "`"); diff --git a/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/builder/OracleSqlBuilder.java b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/builder/OracleSqlBuilder.java index b34d880c..468ac202 100644 --- a/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/builder/OracleSqlBuilder.java +++ b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/builder/OracleSqlBuilder.java @@ -4,12 +4,9 @@ import ai.chat2db.plugin.oracle.type.OracleColumnTypeEnum; import ai.chat2db.plugin.oracle.type.OracleIndexTypeEnum; import ai.chat2db.spi.SqlBuilder; import ai.chat2db.spi.jdbc.DefaultSqlBuilder; -import ai.chat2db.spi.model.Schema; import ai.chat2db.spi.model.Table; import ai.chat2db.spi.model.TableColumn; import ai.chat2db.spi.model.TableIndex; -import ai.chat2db.spi.sql.Chat2DBContext; -import ai.chat2db.spi.util.TableUtils; import org.apache.commons.lang3.StringUtils; public class OracleSqlBuilder extends DefaultSqlBuilder implements SqlBuilder { @@ -82,7 +79,7 @@ public class OracleSqlBuilder extends DefaultSqlBuilder implements SqlBuilder { for (TableColumn tableColumn : newTable.getColumnList()) { if (StringUtils.isNotBlank(tableColumn.getEditStatus())) { OracleColumnTypeEnum typeEnum = OracleColumnTypeEnum.getByType(tableColumn.getColumnType()); - script.append("\t").append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append(";\n"); + script.append("\t").append(typeEnum.buildModifyColumn(tableColumn)).append(";\n"); if (StringUtils.isNotBlank(tableColumn.getComment())) { script.append("\n").append(buildComment(tableColumn)).append(";\n"); } diff --git a/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/type/OracleColumnTypeEnum.java b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/type/OracleColumnTypeEnum.java index bde09d87..8b9ea3b6 100644 --- a/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/type/OracleColumnTypeEnum.java +++ b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/type/OracleColumnTypeEnum.java @@ -215,7 +215,7 @@ public enum OracleColumnTypeEnum implements ColumnBuilder { @Override - public String buildModifyColumn(TableColumn tableColumn, TableColumn oldColumn) { + public String buildModifyColumn(TableColumn tableColumn) { if (EditStatus.DELETE.name().equals(tableColumn.getEditStatus())) { StringBuilder script = new StringBuilder(); @@ -232,7 +232,7 @@ public enum OracleColumnTypeEnum implements ColumnBuilder { if (EditStatus.MODIFY.name().equals(tableColumn.getEditStatus())) { StringBuilder script = new StringBuilder(); script.append("ALTER TABLE "). append("\"").append(tableColumn.getSchemaName()).append("\".\"").append(tableColumn.getTableName()).append("\""); - script.append(" ").append("MODIFY (").append(buildModifyColumnSql(tableColumn,oldColumn)).append(") \n" ); + script.append(" ").append("MODIFY (").append(buildModifyColumnSql(tableColumn,tableColumn.getOldColumn())).append(") \n" ); if (!StringUtils.equalsIgnoreCase(tableColumn.getOldName(), tableColumn.getName())) { script.append(";"); diff --git a/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/builder/PostgreSQLSqlBuilder.java b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/builder/PostgreSQLSqlBuilder.java index 1491897c..e0d90a51 100644 --- a/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/builder/PostgreSQLSqlBuilder.java +++ b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/builder/PostgreSQLSqlBuilder.java @@ -5,8 +5,6 @@ import ai.chat2db.plugin.postgresql.type.PostgreSQLIndexTypeEnum; import ai.chat2db.spi.SqlBuilder; import ai.chat2db.spi.jdbc.DefaultSqlBuilder; import ai.chat2db.spi.model.*; -import ai.chat2db.spi.util.TableUtils; -import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.StringUtils; @@ -108,7 +106,7 @@ public class PostgreSQLSqlBuilder extends DefaultSqlBuilder implements SqlBuilde // append modify column for (TableColumn tableColumn : newTable.getColumnList()) { PostgreSQLColumnTypeEnum typeEnum = PostgreSQLColumnTypeEnum.getByType(tableColumn.getColumnType()); - scriptModify.append("\t").append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append(",\n"); + scriptModify.append("\t").append(typeEnum.buildModifyColumn(tableColumn)).append(",\n"); modify = true; } diff --git a/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/type/PostgreSQLColumnTypeEnum.java b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/type/PostgreSQLColumnTypeEnum.java index c5f0eccd..23977676 100644 --- a/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/type/PostgreSQLColumnTypeEnum.java +++ b/chat2db-server/chat2db-plugins/chat2db-postgresql/src/main/java/ai/chat2db/plugin/postgresql/type/PostgreSQLColumnTypeEnum.java @@ -119,7 +119,7 @@ public enum PostgreSQLColumnTypeEnum implements ColumnBuilder { } @Override - public String buildModifyColumn(TableColumn column, TableColumn oldColumn) { + public String buildModifyColumn(TableColumn column) { if (EditStatus.DELETE.name().equals(column.getEditStatus())) { return StringUtils.join("DROP COLUMN `", column.getName() + "`"); diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/builder/SqliteBuilder.java b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/builder/SqliteBuilder.java index 0a6f3881..58f15763 100644 --- a/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/builder/SqliteBuilder.java +++ b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/builder/SqliteBuilder.java @@ -7,7 +7,6 @@ import ai.chat2db.spi.jdbc.DefaultSqlBuilder; import ai.chat2db.spi.model.Table; import ai.chat2db.spi.model.TableColumn; import ai.chat2db.spi.model.TableIndex; -import ai.chat2db.spi.util.TableUtils; import org.apache.commons.lang3.StringUtils; @@ -58,7 +57,7 @@ public class SqliteBuilder extends DefaultSqlBuilder implements SqlBuilder { if (StringUtils.isNotBlank(tableColumn.getEditStatus()) && StringUtils.isNotBlank(tableColumn.getColumnType()) && StringUtils.isNotBlank(tableColumn.getName())) { script.append("ALTER TABLE ").append("\"").append(newTable.getDatabaseName()).append("\".\"").append(newTable.getName()).append("\"").append("\n"); SqliteColumnTypeEnum typeEnum = SqliteColumnTypeEnum.getByType(tableColumn.getColumnType()); - script.append("\t").append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append(";\n"); + script.append("\t").append(typeEnum.buildModifyColumn(tableColumn)).append(";\n"); } } diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/type/SqliteColumnTypeEnum.java b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/type/SqliteColumnTypeEnum.java index 3477e8e8..5aded889 100644 --- a/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/type/SqliteColumnTypeEnum.java +++ b/chat2db-server/chat2db-plugins/chat2db-sqlite/src/main/java/ai/chat2db/plugin/sqlite/type/SqliteColumnTypeEnum.java @@ -92,7 +92,7 @@ public enum SqliteColumnTypeEnum implements ColumnBuilder { } @Override - public String buildModifyColumn(TableColumn tableColumn, TableColumn oldColumn) { + public String buildModifyColumn(TableColumn tableColumn) { // if (EditStatus.DELETE.name().equals(tableColumn.getEditStatus())) { // return StringUtils.join("DROP COLUMN \"", tableColumn.getName() + "\""); 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 index 89e3284d..cc4b084b 100644 --- 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 @@ -1,9 +1,9 @@ package ai.chat2db.plugin.sqlserver; import java.sql.Connection; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.*; import java.util.stream.Collectors; import ai.chat2db.plugin.sqlserver.builder.SqlServerSqlBuilder; @@ -23,12 +23,12 @@ import static ai.chat2db.spi.util.SortUtils.sortDatabase; public class SqlServerMetaData extends DefaultMetaService implements MetaData { - private List systemDatabases = Arrays.asList("master", "model", "msdb", "tempdb"); + @Override public List databases(Connection connection) { List databases = SQLExecutor.getInstance().databases(connection); - return sortDatabase(databases,systemDatabases,connection); + return sortDatabase(databases, systemDatabases, connection); } private List systemSchemas = Arrays.asList("guest", "INFORMATION_SCHEMA", "sys", "db_owner", @@ -130,11 +130,11 @@ public class SqlServerMetaData extends DefaultMetaService implements MetaData { column.setDefaultValue(resultSet.getString("COLUMN_DEFAULT")); //column.setAutoIncrement(resultSet.getString("EXTRA").contains("auto_increment")); column.setComment(resultSet.getString("COLUMN_COMMENT")); - // column.setPrimaryKey("PRI".equalsIgnoreCase(resultSet.getString("COLUMN_KEY"))); + // column.setPrimaryKey("PRI".equalsIgnoreCase(resultSet.getString("COLUMN_KEY"))); column.setNullable(resultSet.getInt("IS_NULLABLE")); column.setOrdinalPosition(resultSet.getInt("ORDINAL_POSITION")); column.setDecimalDigits(resultSet.getInt("NUMERIC_SCALE")); - // column.setCharSetName(resultSet.getString("CHARACTER_SET_NAME")); + // column.setCharSetName(resultSet.getString("CHARACTER_SET_NAME")); column.setCollationName(resultSet.getString("COLLATION_NAME")); column.setColumnSize(resultSet.getInt("COLUMN_SIZE")); //setColumnSize(column, resultSet.getString("COLUMN_TYPE")); @@ -299,6 +299,77 @@ public class SqlServerMetaData extends DefaultMetaService implements MetaData { }); } + private static final String INDEX_SQL = "SELECT ic.key_ordinal AS COLUMN_POSITION, ic.is_descending_key as DESCEND , ind.name AS INDEX_NAME, ind.is_unique AS IS_UNIQUE, col.name AS COLUMN_NAME, ind.type_desc AS INDEX_TYPE, CASE WHEN ic.key_ordinal = 0 THEN 'N' ELSE 'Y' END AS IS_PRIMARY FROM sys.indexes ind INNER JOIN sys.index_columns ic ON ind.object_id = ic.object_id and ind.index_id = ic.index_id INNER JOIN sys.columns col ON ic.object_id = col.object_id and ic.column_id = col.column_id INNER JOIN sys.tables t ON ind.object_id = t.object_id LEFT JOIN sys.key_constraints kc ON ind.object_id = kc.parent_object_id AND ind.index_id = kc.unique_index_id WHERE t.name = '%s' and t.schema_id= SCHEMA_ID('%s') ORDER BY t.name, ind.name, ind.index_id, ic.index_column_id"; + + @Override + public List indexes(Connection connection, String databaseName, String schemaName, String tableName) { + String sql = String.format(INDEX_SQL, tableName,schemaName); + return SQLExecutor.getInstance().execute(connection, sql, resultSet -> { + LinkedHashMap map = new LinkedHashMap(); + while (resultSet.next()) { + String keyName = resultSet.getString("INDEX_NAME"); + TableIndex tableIndex = map.get(keyName); + if (tableIndex != null) { + List columnList = tableIndex.getColumnList(); + columnList.add(getTableIndexColumn(resultSet)); + columnList = columnList.stream().sorted(Comparator.comparing(TableIndexColumn::getOrdinalPosition)) + .collect(Collectors.toList()); + tableIndex.setColumnList(columnList); + } else { + TableIndex index = new TableIndex(); + index.setDatabaseName(databaseName); + index.setSchemaName(schemaName); + index.setTableName(tableName); + index.setName(keyName); + int isunique = resultSet.getInt("IS_UNIQUE"); + if(isunique ==1){ + index.setUnique(true); + }else { + index.setUnique(false); + } + List tableIndexColumns = new ArrayList<>(); + tableIndexColumns.add(getTableIndexColumn(resultSet)); + index.setColumnList(tableIndexColumns); + String indexType = resultSet.getString("INDEX_TYPE"); + if ("Y".equalsIgnoreCase(resultSet.getString("IS_PRIMARY"))) { + index.setType(SqlServerIndexTypeEnum.PRIMARY_KEY.getName()); + }else if("CLUSTERED".equalsIgnoreCase(indexType)){ + if(index.getUnique()){ + index.setType(SqlServerIndexTypeEnum.UNIQUE_CLUSTERED.getName()); + }else { + index.setType(SqlServerIndexTypeEnum.CLUSTERED.getName()); + } + }else if("NONCLUSTERED".equalsIgnoreCase(indexType)){ + if(index.getUnique()){ + index.setType(SqlServerIndexTypeEnum.UNIQUE_NONCLUSTERED.getName()); + }else { + index.setType(SqlServerIndexTypeEnum.NONCLUSTERED.getName()); + } + }else { + index.setType(indexType); + } + map.put(keyName, index); + } + } + return map.values().stream().collect(Collectors.toList()); + }); + + } + + private TableIndexColumn getTableIndexColumn(ResultSet resultSet) throws SQLException { + TableIndexColumn tableIndexColumn = new TableIndexColumn(); + tableIndexColumn.setColumnName(resultSet.getString("COLUMN_NAME")); + tableIndexColumn.setOrdinalPosition(resultSet.getShort("COLUMN_POSITION")); + int collation = resultSet.getInt("DESCEND"); + if (collation == 1) { + tableIndexColumn.setAscOrDesc("ASC"); + } else { + tableIndexColumn.setAscOrDesc("DESC"); + } + return tableIndexColumn; + } + + @Override public SqlBuilder getSqlBuilder() { return new SqlServerSqlBuilder(); diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/builder/SqlServerSqlBuilder.java b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/builder/SqlServerSqlBuilder.java index 15ea87d0..54978d45 100644 --- a/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/builder/SqlServerSqlBuilder.java +++ b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/builder/SqlServerSqlBuilder.java @@ -6,7 +6,6 @@ import ai.chat2db.spi.SqlBuilder; import ai.chat2db.spi.jdbc.DefaultSqlBuilder; import ai.chat2db.spi.model.*; import ai.chat2db.spi.sql.Chat2DBContext; -import ai.chat2db.spi.util.TableUtils; import org.apache.commons.lang3.StringUtils; public class SqlServerSqlBuilder extends DefaultSqlBuilder implements SqlBuilder { @@ -93,7 +92,7 @@ public class SqlServerSqlBuilder extends DefaultSqlBuilder implements SqlBuilder for (TableColumn tableColumn : newTable.getColumnList()) { if (StringUtils.isNotBlank(tableColumn.getEditStatus())) { SqlServerColumnTypeEnum typeEnum = SqlServerColumnTypeEnum.getByType(tableColumn.getColumnType()); - script.append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append("\n"); + script.append(typeEnum.buildModifyColumn(tableColumn)).append("\n"); } } diff --git a/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/type/SqlServerColumnTypeEnum.java b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/type/SqlServerColumnTypeEnum.java index 6d04bd79..9117be84 100644 --- a/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/type/SqlServerColumnTypeEnum.java +++ b/chat2db-server/chat2db-plugins/chat2db-sqlserver/src/main/java/ai/chat2db/plugin/sqlserver/type/SqlServerColumnTypeEnum.java @@ -10,6 +10,7 @@ import org.apache.commons.lang3.StringUtils; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Objects; public enum SqlServerColumnTypeEnum implements ColumnBuilder { //JSON("JSON", false, false, true, false, false, false, true, false, false, false) @@ -166,12 +167,12 @@ public enum SqlServerColumnTypeEnum implements ColumnBuilder { } - if (column.getSparse() != null && column.getSparse()) { + if (!Objects.equals(column.getSparse(), column.getOldColumn().getSparse())) { script.append("ALTER TABLE ").append("[").append(column.getSchemaName()).append("].[").append(column.getTableName()).append("]"); script.append(" ").append("ALTER COLUMN ").append("[").append(column.getName()).append("]").append(" add ").append("SPARSE").append(" \ngo\n"); } - if (StringUtils.isNotBlank(column.getCollationName())) { + if (!Objects.equals(column.getCollationName(), column.getOldColumn().getCollationName())) { script.append("ALTER TABLE ").append("[").append(column.getSchemaName()).append("].[").append(column.getTableName()).append("]"); script.append(" ").append("ALTER COLUMN ").append("[").append(column.getName()).append("]").append(" ").append("COLLATE ").append(column.getCollationName()).append(" \ngo\n"); } @@ -267,7 +268,7 @@ public enum SqlServerColumnTypeEnum implements ColumnBuilder { @Override - public String buildModifyColumn(TableColumn tableColumn, TableColumn oldColumn) { + public String buildModifyColumn(TableColumn tableColumn) { if (EditStatus.DELETE.name().equals(tableColumn.getEditStatus())) { StringBuilder script = new StringBuilder(); @@ -302,7 +303,7 @@ public enum SqlServerColumnTypeEnum implements ColumnBuilder { script.append("ALTER TABLE ").append("[").append(tableColumn.getSchemaName()).append("].[").append(tableColumn.getTableName()).append("]"); script.append(" ").append("ALTER COLUMN ").append(buildUpdateColumnSql(tableColumn)).append(" \n"); - if (StringUtils.isNotBlank(tableColumn.getComment())) { + if (!Objects.equals(tableColumn.getComment(), tableColumn.getOldColumn().getComment())) { script.append("\n").append(buildModifyColumnComment(tableColumn)); } diff --git a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/TableServiceImpl.java b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/TableServiceImpl.java index 8b443768..f36ba848 100644 --- a/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/TableServiceImpl.java +++ b/chat2db-server/chat2db-server-domain/chat2db-server-domain-core/src/main/java/ai/chat2db/server/domain/core/impl/TableServiceImpl.java @@ -3,10 +3,7 @@ package ai.chat2db.server.domain.core.impl; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -29,10 +26,9 @@ import ai.chat2db.server.tools.common.util.ContextUtils; import ai.chat2db.spi.DBManage; import ai.chat2db.spi.MetaData; import ai.chat2db.spi.SqlBuilder; +import ai.chat2db.spi.enums.EditStatus; import ai.chat2db.spi.model.*; import ai.chat2db.spi.sql.Chat2DBContext; -import ai.chat2db.spi.util.ResultSetUtils; -import ai.chat2db.spi.util.SqlUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -109,33 +105,196 @@ public class TableServiceImpl implements TableService { metaSchema.indexes(Chat2DBContext.getConnection(), param.getDatabaseName(), param.getSchemaName(), param.getTableName())); table.setColumnList( metaSchema.columns(Chat2DBContext.getConnection(), param.getDatabaseName(), param.getSchemaName(), param.getTableName())); + setPrimaryKey(table); return DataResult.of(table); } return DataResult.of(null); } + private void setPrimaryKey(Table table) { + if (table == null) { + return; + } + List tableIndices = table.getIndexList(); + if (CollectionUtils.isEmpty(tableIndices)) { + return; + } + List columns = table.getColumnList(); + if (CollectionUtils.isEmpty(columns)) { + return; + } + Map columnMap = columns.stream() + .collect(Collectors.toMap(TableColumn::getName, Function.identity())); + List indexes = new ArrayList<>(); + for (TableIndex tableIndex : tableIndices) { + if ("Primary".equalsIgnoreCase(tableIndex.getType())) { + List indexColumns = tableIndex.getColumnList(); + if (CollectionUtils.isNotEmpty(indexColumns)) { + for (TableIndexColumn indexColumn : indexColumns) { + TableColumn column = columnMap.get(indexColumn.getColumnName()); + if (column != null) { + column.setPrimaryKey(true); + column.setPrimaryKeyOrder(indexColumn.getOrdinalPosition()); + column.setPrimaryKeyName(tableIndex.getName()); + } + } + } + } else { + indexes.add(tableIndex); + } + } + table.setIndexList(indexes); + } + @Override public ListResult buildSql(Table oldTable, Table newTable) { initOldTable(oldTable, newTable); SqlBuilder sqlBuilder = Chat2DBContext.getSqlBuilder(); List sqls = new ArrayList<>(); if (oldTable == null) { + initPrimaryKey(newTable); sqls.add(Sql.builder().sql(sqlBuilder.buildCreateTableSql(newTable)).build()); } else { + initUpdatePrimaryKey(oldTable, newTable); sqls.add(Sql.builder().sql(sqlBuilder.buildModifyTaleSql(oldTable, newTable)).build()); } return ListResult.of(sqls); } - private void initOldTable(Table oldTable, Table newTable) { - if (oldTable == null) { + private void initUpdatePrimaryKey(Table oldTable, Table newTable) { + if (newTable == null || oldTable == null) { return; } - Map columnMap = oldTable.getColumnList().stream().collect(Collectors.toMap(TableColumn::getName, Function.identity())); - for (TableColumn newColumn : newTable.getColumnList()) { - TableColumn oldColumn = columnMap.get(newColumn.getName()); - if (oldColumn != null) { - newColumn.setOldColumn(oldColumn); + List newColumns = getPrimaryKeyColumn(newTable); + List oldColumns = getPrimaryKeyColumn(oldTable); + if (CollectionUtils.isEmpty(newColumns) && CollectionUtils.isEmpty(oldColumns)) { + return; + } + if (!CollectionUtils.isEmpty(newColumns) && CollectionUtils.isEmpty(oldColumns)) { + initPrimaryKey(newTable); + return; + } + if (CollectionUtils.isEmpty(newColumns) && CollectionUtils.isNotEmpty(oldColumns)) { + addPrimaryKey(newTable, oldColumns.get(0), EditStatus.DELETE.name()); + return; + } + if (newColumns.size() != oldColumns.size()) { + for (TableColumn column : newColumns) { + if (column.getPrimaryKey() != null && column.getPrimaryKey()) { + addPrimaryKey(newTable, column, EditStatus.MODIFY.name()); + } + } + return; + } + boolean flag = false; + Map oldColumnMap = oldColumns.stream().collect(Collectors.toMap(TableColumn::getName, Function.identity())); + for (TableColumn column : newColumns) { + TableColumn oldColumn = oldColumnMap.get(column.getName()); + if (oldColumn == null) { + flag = true; + } + } + if (flag) { + for (TableColumn column : newColumns) { + if (column.getPrimaryKey() != null && column.getPrimaryKey()) { + addPrimaryKey(newTable, column, EditStatus.MODIFY.name()); + } + } + } + } + + private List getPrimaryKeyColumn(Table table) { + if (table == null || CollectionUtils.isEmpty(table.getColumnList())) { + return null; + } + return table.getColumnList().stream().filter(tableColumn -> + tableColumn.getPrimaryKey() != null && tableColumn.getPrimaryKey()) + .collect(Collectors.toList()); + } + + private void initPrimaryKey(Table newTable) { + if (newTable == null) { + return; + } + List columns = newTable.getColumnList(); + if (CollectionUtils.isEmpty(columns)) { + return; + } + for (TableColumn column : columns) { + if (column.getPrimaryKey() != null && column.getPrimaryKey()) { + addPrimaryKey(newTable, column, EditStatus.ADD.name()); + } + } + } + + private void addPrimaryKey(Table newTable, TableColumn column, String status) { + List indexes = newTable.getIndexList(); + if (indexes == null) { + indexes = new ArrayList<>(); + } + TableIndex keyIndex = indexes.stream().filter(index -> "Primary".equalsIgnoreCase(index.getType())).findFirst().orElse(null); + if (keyIndex == null) { + keyIndex = new TableIndex(); + keyIndex.setType("Primary"); + keyIndex.setName(StringUtils.isBlank(column.getPrimaryKeyName()) ? "PRIMARY_KEY" : column.getPrimaryKeyName()); + keyIndex.setTableName(newTable.getName()); + keyIndex.setSchemaName(newTable.getSchemaName()); + keyIndex.setDatabaseName(newTable.getDatabaseName()); + keyIndex.setEditStatus(status); + indexes.add(keyIndex); + } + List tableIndexColumns = keyIndex.getColumnList(); + if (tableIndexColumns == null) { + tableIndexColumns = new ArrayList<>(); + } + TableIndexColumn indexColumn = new TableIndexColumn(); + indexColumn.setColumnName(column.getName()); + indexColumn.setTableName(newTable.getName()); + indexColumn.setSchemaName(newTable.getSchemaName()); + indexColumn.setDatabaseName(newTable.getDatabaseName()); + indexColumn.setOrdinalPosition(Short.valueOf(column.getPrimaryKeyOrder() + "")); + indexColumn.setEditStatus(status); + tableIndexColumns.add(indexColumn); + List sortTableIndexColumns = tableIndexColumns.stream().sorted(Comparator.comparing(TableIndexColumn::getOrdinalPosition)).collect(Collectors.toList()); + Set statusList = sortTableIndexColumns.stream().map(TableIndexColumn::getEditStatus).collect(Collectors.toSet()); + if (statusList.size() == 1) { + //only one status ,set index status + keyIndex.setEditStatus(statusList.iterator().next()); + } else { + //more status ,set index status modify + keyIndex.setEditStatus(EditStatus.MODIFY.name()); + } + + keyIndex.setColumnList(sortTableIndexColumns); + newTable.setIndexList(indexes); + + } + + + private void initOldTable(Table oldTable, Table newTable) { + if (oldTable == null || newTable == null) { + return; + } + Map columnMap = new HashMap<>(); + if (CollectionUtils.isNotEmpty(oldTable.getColumnList())) { + for (TableColumn column : oldTable.getColumnList()) { + columnMap.put(column.getName(), column); + } + } + if (CollectionUtils.isNotEmpty(newTable.getColumnList())) { + for (TableColumn newColumn : newTable.getColumnList()) { + if (EditStatus.ADD.name().equals(newColumn.getEditStatus())) { + continue; + } + String name = newColumn.getOldName() == null ? newColumn.getName() : newColumn.getOldName(); + TableColumn oldColumn = columnMap.get(name); + if (oldColumn != null) { + if (oldColumn.equals(newColumn) && EditStatus.MODIFY.name().equals(newColumn.getEditStatus())) { + newColumn.setEditStatus(null); + } else { + newColumn.setOldColumn(oldColumn); + } + } } } } @@ -182,7 +341,7 @@ public class TableServiceImpl implements TableService { } Page page = new Page<>(param.getPageNo(), param.getPageSize()); // page.setSearchCount(param.getEnableReturnCount()); - IPage iPage = tableCacheMapper.pageQuery(page, param.getDataSourceId(),param.getDatabaseName(),param.getSchemaName(),param.getSearchKey()); + IPage iPage = tableCacheMapper.pageQuery(page, param.getDataSourceId(), param.getDatabaseName(), param.getSchemaName(), param.getSearchKey()); List tables = new ArrayList<>(); if (CollectionUtils.isNotEmpty(iPage.getRecords())) { for (TableCacheDO tableCacheDO : iPage.getRecords()) { @@ -194,7 +353,7 @@ public class TableServiceImpl implements TableService { tables.add(t); } } - if(param.getPageNo()<=1) { + if (param.getPageNo() <= 1) { tables = pinTable(tables, param); } return PageResult.of(tables, total, param); @@ -206,7 +365,7 @@ public class TableServiceImpl implements TableService { String key = getTableKey(param.getDataSourceId(), param.getDatabaseName(), param.getSchemaName()); queryWrapper.eq(TableCacheVersionDO::getKey, key); TableCacheVersionDO versionDO = tableCacheVersionMapper.selectOne(queryWrapper); - if(versionDO == null){ + if (versionDO == null) { return ListResult.of(Lists.newArrayList()); } long version = "2".equals(versionDO.getStatus()) ? versionDO.getVersion() - 1 : versionDO.getVersion(); @@ -243,7 +402,7 @@ public class TableServiceImpl implements TableService { Connection connection = Chat2DBContext.getConnection(); long n = 0; try (ResultSet resultSet = connection.getMetaData().getTables(databaseName, schemaName, null, - new String[]{"TABLE","SYSTEM TABLE"})) { + new String[]{"TABLE", "SYSTEM TABLE"})) { List cacheDOS = new ArrayList<>(); while (resultSet.next()) { TableCacheDO tableCacheDO = new TableCacheDO(); @@ -378,7 +537,17 @@ public class TableServiceImpl implements TableService { @Override public TableMeta queryTableMeta(TypeQueryParam param) { MetaData metaSchema = Chat2DBContext.getMetaData(); - return metaSchema.getTableMeta(null, null, null); + TableMeta tableMeta = metaSchema.getTableMeta(null, null, null); + if (tableMeta != null) { + //filter primary key + List indexTypes = tableMeta.getIndexTypes(); + if (CollectionUtils.isNotEmpty(indexTypes)) { + List types = indexTypes.stream().filter(indexType -> !"Primary".equals(indexType.getTypeName())).collect(Collectors.toList()); + tableMeta.setIndexTypes(types); + } + } + return tableMeta; + } @Override diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/ColumnBuilder.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/ColumnBuilder.java index 6ada4cf5..6fec2695 100644 --- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/ColumnBuilder.java +++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/ColumnBuilder.java @@ -15,8 +15,7 @@ public interface ColumnBuilder { /** * Build modify column sql * @param tableColumn - * @param oldColumn * @return */ - String buildModifyColumn(TableColumn tableColumn, TableColumn oldColumn); + String buildModifyColumn(TableColumn tableColumn); } diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/TableColumn.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/TableColumn.java index 053b2427..797f2771 100644 --- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/TableColumn.java +++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/TableColumn.java @@ -6,6 +6,8 @@ import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.SuperBuilder; +import java.util.Objects; + /** * 列信息 * @@ -82,6 +84,18 @@ public class TableColumn { */ private Boolean primaryKey; + + /** + * 主键名 + */ + private String primaryKeyName; + + + /** + * 主键顺序 + */ + private int primaryKeyOrder; + /** * 空间名 */ @@ -184,4 +198,17 @@ public class TableColumn { // sqlserver private String defaultConstraintName; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + TableColumn that = (TableColumn) o; + return Objects.equals(name, that.name) && Objects.equals(tableName, that.tableName) && Objects.equals(columnType, that.columnType) && Objects.equals(defaultValue, that.defaultValue) && Objects.equals(autoIncrement, that.autoIncrement) && Objects.equals(comment, that.comment) && Objects.equals(typeName, that.typeName) && Objects.equals(columnSize, that.columnSize) && Objects.equals(decimalDigits, that.decimalDigits) && Objects.equals(numPrecRadix, that.numPrecRadix) && Objects.equals(sqlDataType, that.sqlDataType) && Objects.equals(ordinalPosition, that.ordinalPosition) && Objects.equals(nullable, that.nullable) && Objects.equals(extent, that.extent) && Objects.equals(charSetName, that.charSetName) && Objects.equals(collationName, that.collationName) && Objects.equals(value, that.value) && Objects.equals(unit, that.unit) && Objects.equals(sparse, that.sparse) && Objects.equals(defaultConstraintName, that.defaultConstraintName); + } + + @Override + public int hashCode() { + return Objects.hash(name, tableName, columnType, defaultValue, autoIncrement, comment, typeName, columnSize, decimalDigits, numPrecRadix, sqlDataType, ordinalPosition, nullable, extent, charSetName, collationName, value, unit, sparse, defaultConstraintName); + } } diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/TableIndexColumn.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/TableIndexColumn.java index b33a25de..8feb7bec 100644 --- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/TableIndexColumn.java +++ b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/model/TableIndexColumn.java @@ -111,5 +111,8 @@ public class TableIndexColumn { private Long subPart; + + + private String editStatus; } diff --git a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/util/TableUtils.java b/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/util/TableUtils.java deleted file mode 100644 index bb1cc6c1..00000000 --- a/chat2db-server/chat2db-spi/src/main/java/ai/chat2db/spi/util/TableUtils.java +++ /dev/null @@ -1,20 +0,0 @@ -package ai.chat2db.spi.util; - -import ai.chat2db.spi.model.Table; -import ai.chat2db.spi.model.TableColumn; -import org.apache.commons.collections4.CollectionUtils; - -public class TableUtils { - - public static TableColumn getTableColumn(Table table,String columnName) { - if(table == null || CollectionUtils.isEmpty(table.getColumnList())){ - return null ; - } - for (TableColumn tableColumn : table.getColumnList()) { - if(tableColumn.getName().equalsIgnoreCase(columnName)){ - return tableColumn ; - } - } - return null; - } -}