Support DB2 TABLE create and edit.

This commit is contained in:
SwallowGG
2023-11-02 15:50:09 +08:00
parent 3a8db447ff
commit dde29de5bc
5 changed files with 612 additions and 2 deletions

View File

@ -1,13 +1,31 @@
package ai.chat2db.plugin.db2;
import java.sql.Connection;
import java.sql.SQLException;
import ai.chat2db.spi.DBManage;
import ai.chat2db.spi.jdbc.DefaultDBManage;
import ai.chat2db.spi.sql.Chat2DBContext;
import ai.chat2db.spi.sql.ConnectInfo;
import ai.chat2db.spi.sql.SQLExecutor;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
public class DB2DBManage extends DefaultDBManage implements DBManage {
@Override
public void connectDatabase(Connection connection, String database) {
ConnectInfo connectInfo = Chat2DBContext.getConnectInfo();
if (ObjectUtils.anyNull(connectInfo) || StringUtils.isEmpty(connectInfo.getSchemaName())) {
return;
}
String schemaName = connectInfo.getSchemaName();
try {
SQLExecutor.getInstance().execute(connection, "SET SCHEMA \"" + schemaName + "\"");
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void dropTable(Connection connection, String databaseName, String schemaName, String tableName) {
String sql = "DROP TABLE " + tableName;

View File

@ -1,18 +1,25 @@
package ai.chat2db.plugin.db2;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
import ai.chat2db.plugin.db2.builder.DB2SqlBuilder;
import ai.chat2db.plugin.db2.type.DB2ColumnTypeEnum;
import ai.chat2db.plugin.db2.type.DB2IndexTypeEnum;
import ai.chat2db.spi.MetaData;
import ai.chat2db.spi.SqlBuilder;
import ai.chat2db.spi.jdbc.DefaultMetaService;
import ai.chat2db.spi.jdbc.DefaultSqlBuilder;
import ai.chat2db.spi.model.Schema;
import ai.chat2db.spi.model.TableIndex;
import ai.chat2db.spi.model.TableIndexColumn;
import ai.chat2db.spi.model.TableMeta;
import ai.chat2db.spi.sql.SQLExecutor;
import ai.chat2db.spi.util.SortUtils;
import com.google.common.collect.Lists;
public class DB2MetaData extends DefaultMetaService implements MetaData {
@ -77,4 +84,75 @@ public class DB2MetaData extends DefaultMetaService implements MetaData {
return new DB2SqlBuilder();
}
private static String IDX_SQL = "SELECT i.INDNAME, i.UNIQUERULE, i.REMARKS, ic.COLNAME, ic.COLSEQ, ic.COLORDER FROM SYSCAT.INDEXES i JOIN SYSCAT.INDEXCOLUSE ic ON i.INDNAME = ic.INDNAME AND i.INDSCHEMA = ic.INDSCHEMA WHERE i.TABNAME = '%s' AND i.INDSCHEMA = '%s' ORDER BY i.INDNAME, ic.COLSEQ";
@Override
public List<TableIndex> indexes(Connection connection, String databaseName, String schemaName, String tableName) {
String sql = String.format(IDX_SQL, tableName, schemaName);
return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
LinkedHashMap<String, TableIndex> map = new LinkedHashMap();
while (resultSet.next()) {
String keyName = resultSet.getString("INDNAME");
TableIndex tableIndex = map.get(keyName);
if (tableIndex != null) {
List<TableIndexColumn> 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);
index.setComment(resultSet.getString("REMARKS"));
List<TableIndexColumn> tableIndexColumns = new ArrayList<>();
tableIndexColumns.add(getTableIndexColumn(resultSet));
index.setColumnList(tableIndexColumns);
String uniquerule = resultSet.getString("UNIQUERULE");
if("P".equalsIgnoreCase(uniquerule)) {
index.setType(DB2IndexTypeEnum.PRIMARY_KEY.getName());
index.setUnique(true);
}else if("U".equalsIgnoreCase(uniquerule)){
index.setType(DB2IndexTypeEnum.UNIQUE.getName());
index.setUnique(true);
}else {
index.setType(DB2IndexTypeEnum.NORMAL.getName());
index.setUnique(false);
}
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("COLNAME"));
tableIndexColumn.setOrdinalPosition(resultSet.getShort("COLSEQ"));
// tableIndexColumn.setCollation(resultSet.getString("Collation"));
// tableIndexColumn.setCardinality(resultSet.getLong("Cardinality"));
// tableIndexColumn.setSubPart(resultSet.getLong("Sub_part"));
String collation = resultSet.getString("COLORDER");
if ("A".equalsIgnoreCase(collation)) {
tableIndexColumn.setAscOrDesc("ASC");
} else if ("D".equalsIgnoreCase(collation)) {
tableIndexColumn.setAscOrDesc("DESC");
}
return tableIndexColumn;
}
@Override
public TableMeta getTableMeta(String databaseName, String schemaName, String tableName) {
return TableMeta.builder()
.columnTypes(DB2ColumnTypeEnum.getTypes())
.charsets(Lists.newArrayList())
.collations(Lists.newArrayList())
.indexTypes(DB2IndexTypeEnum.getIndexTypes())
.build();
}
}

View File

@ -1,11 +1,115 @@
package ai.chat2db.plugin.db2.builder;
import ai.chat2db.plugin.db2.type.DB2ColumnTypeEnum;
import ai.chat2db.plugin.db2.type.DB2IndexTypeEnum;
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 org.apache.commons.lang3.StringUtils;
public class DB2SqlBuilder extends DefaultSqlBuilder {
@Override
public String buildCreateTableSql(Table table) {
StringBuilder script = new StringBuilder();
script.append("CREATE TABLE ").append("\"").append(table.getSchemaName()).append("\".\"").append(table.getName()).append("\" (").append("\n");
for (TableColumn column : table.getColumnList()) {
if (StringUtils.isBlank(column.getName()) || StringUtils.isBlank(column.getColumnType())) {
continue;
}
DB2ColumnTypeEnum typeEnum = DB2ColumnTypeEnum.getByType(column.getColumnType());
script.append("\t").append(typeEnum.buildCreateColumnSql(column)).append(",\n");
}
script = new StringBuilder(script.substring(0, script.length() - 2));
script.append("\n);");
for (TableIndex tableIndex : table.getIndexList()) {
if (StringUtils.isBlank(tableIndex.getName()) || StringUtils.isBlank(tableIndex.getType())) {
continue;
}
DB2IndexTypeEnum indexTypeEnum = DB2IndexTypeEnum.getByType(tableIndex.getType());
script.append("\n").append("").append(indexTypeEnum.buildIndexScript(tableIndex)).append(";");
if(StringUtils.isNotBlank(tableIndex.getComment())){
script.append("\n").append(indexTypeEnum.buildIndexComment(tableIndex)).append(";");
}
}
for (TableColumn column : table.getColumnList()) {
if (StringUtils.isBlank(column.getName()) || StringUtils.isBlank(column.getColumnType()) || StringUtils.isBlank(column.getComment())) {
continue;
}
script.append("\n").append(buildComment(column)).append(";");
}
if (StringUtils.isNotBlank(table.getComment())) {
script.append("\n").append(buildTableComment(table)).append(";");
}
return script.toString();
}
private String buildTableComment(Table table) {
StringBuilder script = new StringBuilder();
script.append("COMMENT ON TABLE ").append("\"").append(table.getSchemaName()).append("\".\"").append(table.getName()).append("\" IS '").append(table.getComment()).append("'");
return script.toString();
}
private String buildComment(TableColumn column) {
StringBuilder script = new StringBuilder();
script.append("COMMENT ON COLUMN ").append("\"").append(column.getSchemaName()).append("\".\"").append(column.getTableName()).append("\".\"").append(column.getName()).append("\" IS '").append(column.getComment()).append("'");
return script.toString();
}
@Override
public String buildModifyTaleSql(Table oldTable, Table newTable) {
StringBuilder script = new StringBuilder();
if (!StringUtils.equalsIgnoreCase(oldTable.getName(), newTable.getName())) {
script.append("ALTER TABLE ").append("\"").append(oldTable.getSchemaName()).append("\".\"").append(oldTable.getName()).append("\"");
script.append(" ").append("RENAME TO ").append("\"").append(newTable.getName()).append("\"").append(";\n");
}
if (!StringUtils.equalsIgnoreCase(oldTable.getComment(), newTable.getComment())) {
script.append("").append(buildTableComment(newTable)).append(";\n");
}
// append modify column
for (TableColumn tableColumn : newTable.getColumnList()) {
if (StringUtils.isNotBlank(tableColumn.getEditStatus())) {
DB2ColumnTypeEnum typeEnum = DB2ColumnTypeEnum.getByType(tableColumn.getColumnType());
script.append("\t").append(typeEnum.buildModifyColumn(tableColumn)).append(";\n");
if (StringUtils.isNotBlank(tableColumn.getComment())) {
script.append("\n").append(buildComment(tableColumn)).append(";\n");
}
}
}
// append modify index
for (TableIndex tableIndex : newTable.getIndexList()) {
if (StringUtils.isNotBlank(tableIndex.getEditStatus()) && StringUtils.isNotBlank(tableIndex.getType())) {
DB2IndexTypeEnum mysqlIndexTypeEnum = DB2IndexTypeEnum.getByType(tableIndex.getType());
script.append("\t").append(mysqlIndexTypeEnum.buildModifyIndex(tableIndex)).append(";\n");
if(StringUtils.isNotBlank(tableIndex.getComment())) {
script.append("\n").append(mysqlIndexTypeEnum.buildIndexComment(tableIndex)).append(";\n");
}
}
}
if (script.length() > 2) {
script = new StringBuilder(script.substring(0, script.length() - 2));
script.append(";");
}
return script.toString();
}
@Override
public String pageLimit(String sql, int offset, int pageNo, int pageSize) {

View File

@ -0,0 +1,268 @@
package ai.chat2db.plugin.db2.type;
import ai.chat2db.spi.ColumnBuilder;
import ai.chat2db.spi.enums.EditStatus;
import ai.chat2db.spi.model.ColumnType;
import ai.chat2db.spi.model.TableColumn;
import com.google.common.collect.Maps;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
public enum DB2ColumnTypeEnum implements ColumnBuilder {
ANCHOR("ANCHOR", false, false, true, false, false, false, true, true, false, false),
BIGINT("BIGINT", false, false, true, false, false, false, true, true, false, false),
BINARY("BINARY", false, false, true, false, false, false, true, true, false, false),
// BIT("BIT", false, false, true, false, false, false, true, true, false, false),
BLOB("BLOB", false, false, true, false, false, false, true, true, false, false),
BOOLEAN("BOOLEAN", false, false, true, false, false, false, true, true, false, false),
CHAR("CHAR", true, false, true, false, false, false, true, true, false, true),
// CHAR_VARYING("CHAR VARYING", true, false, true, false, false, false, true, true, false, true),
//
CHARACTER("CHARACTER", true, false, true, false, false, false, true, true, false, true),
//
// CHARACTER_VARYING("CHARACTER VARYING", true, false, true, false, false, false, true, true, false, true),
CLOB("CLOB", false, false, true, false, false, false, true, true, false, false),
COURSE("COURSE", false, false, true, false, false, false, true, true, false, false),
DATE("DATE", false, false, true, false, false, false, true, true, false, false),
DB2SECURITYLABEL("DB2SECURITYLABEL", false, false, true, false, false, false, true, true, false, false),
DBCLOB("DBCLOB", false, false, true, false, false, false, true, true, false, false),
DEC("DEC", true, true, true, false, false, false, true, true, false, false),
DECFLOAT("DECFLOAT", false, false, true, false, false, false, true, true, false, false),
DECIMAL("DECIMAL", true, true, true, false, false, false, true, true, false, false),
DOUBLE("DOUBLE", false, false, true, false, false, false, true, true, false, false),
FLOAT("FLOAT", true, false, true, false, false, false, true, true, false, false),
GRAPHIC("GRAPHIC", false, false, true, false, false, false, true, true, false, false),
INT("INT", false, false, true, false, false, false, true, true, false, false),
INTEGER("INTEGER", false, false, true, false, false, false, true, true, false, false),
LONG("LONG", false, false, true, false, false, false, true, true, false, false),
NCHAR("NCHAR", true, false, true, false, false, false, true, true, false, true),
NCLOB("NCLOB", false, false, true, false, false, false, true, true, false, false),
// LONGVARBINARY("LONGVARBINARY", false, false, true, false, false, false, true, true, false, false),
// LONGVARCHAR("LONGVARCHAR", true, false, true, false, false, false, true, true, false, false),
NUM("NUM", true, true, true, false, false, false, true, true, false, false),
NUMBERIC("NUMBERIC", true, true, true, false, false, false, true, true, false, false),
NVARCHAR("NVARCHAR", true, false, true, false, false, false, true, true, false, true),
REAL("REAL", false, false, true, false, false, false, true, true, false, false),
REF("REF", false, false, true, false, false, false, true, true, false, false),
SMALLINT("SMALLINT", false, false, true, false, false, false, true, true, false, false),
TIME("TIME", false, false, true, false, false, false, true, true, false, false),
// TIME_WITH_TIME_ZONE("TIME WITH TIME ZONE", false, false, true, false, false, false, true, true, false, false),
TIMESTAMP("TIMESTAMP", false, false, true, false, false, false, true, true, false, false),
// TIMESTAMP_WITH_TIME_ZONE("TIMESTAMP WITH TIME ZONE", false, false, true, false, false, false, true, true, false, false),
// TINYINT("TINYINT", false, false, true, false, false, false, true, true, false, false),
VARBINARY("VARBINARY", false, false, true, false, false, false, true, true, false, false),
VARCHAR("VARCHAR", true, false, true, false, false, false, true, true, false, true),
//VARCHAR2("VARCHAR2", true, false, true, false, false, false, true, true, false, true),
XML("XML", false, false, true, false, false, false, true, true, false, false),
;
private ColumnType columnType;
public static DB2ColumnTypeEnum getByType(String dataType) {
return COLUMN_TYPE_MAP.get(dataType.toUpperCase());
}
private static Map<String, DB2ColumnTypeEnum> COLUMN_TYPE_MAP = Maps.newHashMap();
static {
for (DB2ColumnTypeEnum value : DB2ColumnTypeEnum.values()) {
COLUMN_TYPE_MAP.put(value.getColumnType().getTypeName(), value);
}
}
public ColumnType getColumnType() {
return columnType;
}
DB2ColumnTypeEnum(String dataTypeName, boolean supportLength, boolean supportScale, boolean supportNullable, boolean supportAutoIncrement, boolean supportCharset, boolean supportCollation, boolean supportComments, boolean supportDefaultValue, boolean supportExtent, boolean supportUnit) {
this.columnType = new ColumnType(dataTypeName, supportLength, supportScale, supportNullable, supportAutoIncrement, supportCharset, supportCollation, supportComments, supportDefaultValue, supportExtent, false, supportUnit);
}
@Override
public String buildCreateColumnSql(TableColumn column) {
DB2ColumnTypeEnum type = COLUMN_TYPE_MAP.get(column.getColumnType().toUpperCase());
if (type == null) {
return "";
}
StringBuilder script = new StringBuilder();
script.append("\"").append(column.getName()).append("\"").append(" ");
script.append(buildDataType(column, type)).append(" ");
script.append(buildDefaultValue(column, type)).append(" ");
script.append(buildNullable(column, type)).append(" ");
return script.toString();
}
private String buildNullable(TableColumn column, DB2ColumnTypeEnum type) {
if (!type.getColumnType().isSupportNullable()) {
return "";
}
if (column.getNullable() != null && 1 == column.getNullable()) {
return "NULL";
} else {
return "NOT NULL";
}
}
private String buildDefaultValue(TableColumn column, DB2ColumnTypeEnum type) {
if (!type.getColumnType().isSupportDefaultValue() || StringUtils.isEmpty(column.getDefaultValue())) {
return "";
}
if ("EMPTY_STRING".equalsIgnoreCase(column.getDefaultValue().trim())) {
return StringUtils.join("DEFAULT ''");
}
if ("NULL".equalsIgnoreCase(column.getDefaultValue().trim())) {
return StringUtils.join("DEFAULT NULL");
}
return StringUtils.join("DEFAULT ", column.getDefaultValue());
}
private String buildDataType(TableColumn column, DB2ColumnTypeEnum type) {
String columnType = type.columnType.getTypeName();
if (Arrays.asList(CHAR, VARCHAR,NCHAR,CHARACTER,NVARCHAR).contains(type)) {
StringBuilder script = new StringBuilder();
script.append(columnType);
if (column.getColumnSize() != null && StringUtils.isEmpty(column.getUnit())) {
script.append("(").append(column.getColumnSize()).append(")");
} else if (column.getColumnSize() != null && !StringUtils.isEmpty(column.getUnit())) {
script.append("(").append(column.getColumnSize()).append(" ").append(column.getUnit()).append(")");
}
return script.toString();
}
if (Arrays.asList(DEC,DECIMAL, FLOAT, NUM, TIMESTAMP, NUMBERIC).contains(type)) {
StringBuilder script = new StringBuilder();
script.append(columnType);
if (column.getColumnSize() != null && column.getDecimalDigits() == null) {
script.append("(").append(column.getColumnSize()).append(")");
} else if (column.getColumnSize() != null && column.getDecimalDigits() != null) {
script.append("(").append(column.getColumnSize()).append(",").append(column.getDecimalDigits()).append(")");
}
return script.toString();
}
return columnType;
}
@Override
public String buildModifyColumn(TableColumn tableColumn) {
if (EditStatus.DELETE.name().equals(tableColumn.getEditStatus())) {
StringBuilder script = new StringBuilder();
script.append("ALTER TABLE ").append("\"").append(tableColumn.getSchemaName()).append("\".\"").append(tableColumn.getTableName()).append("\"");
script.append(" ").append("DROP COLUMN ").append("\"").append(tableColumn.getName()).append("\"");
return script.toString();
}
if (EditStatus.ADD.name().equals(tableColumn.getEditStatus())) {
StringBuilder script = new StringBuilder();
script.append("ALTER TABLE ").append("\"").append(tableColumn.getSchemaName()).append("\".\"").append(tableColumn.getTableName()).append("\"");
script.append(" ").append("ADD (").append(buildCreateColumnSql(tableColumn)).append(")");
return script.toString();
}
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(buildCreateColumnSql(tableColumn)).append(") \n");
if (!StringUtils.equalsIgnoreCase(tableColumn.getOldName(), tableColumn.getName())) {
script.append(";");
script.append("ALTER TABLE ").append("\"").append(tableColumn.getSchemaName()).append("\".\"").append(tableColumn.getTableName()).append("\"");
script.append(" ").append("RENAME COLUMN ").append("\"").append(tableColumn.getOldName()).append("\"").append(" TO ").append("\"").append(tableColumn.getName()).append("\"");
}
return script.toString();
}
return "";
}
public static List<ColumnType> getTypes() {
return Arrays.stream(DB2ColumnTypeEnum.values()).map(columnTypeEnum ->
columnTypeEnum.getColumnType()
).toList();
}
}

View File

@ -0,0 +1,142 @@
package ai.chat2db.plugin.db2.type;
import ai.chat2db.spi.enums.EditStatus;
import ai.chat2db.spi.model.IndexType;
import ai.chat2db.spi.model.TableIndex;
import ai.chat2db.spi.model.TableIndexColumn;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.List;
public enum DB2IndexTypeEnum {
PRIMARY_KEY("Primary", "PRIMARY KEY"),
NORMAL("Normal", "INDEX"),
UNIQUE("Unique", "UNIQUE INDEX");
// BITMAP("BITMAP", "BITMAP INDEX");
public IndexType getIndexType() {
return indexType;
}
public void setIndexType(IndexType indexType) {
this.indexType = indexType;
}
private IndexType indexType;
public String getName() {
return name;
}
private String name;
public String getKeyword() {
return keyword;
}
private String keyword;
DB2IndexTypeEnum(String name, String keyword) {
this.name = name;
this.keyword = keyword;
this.indexType = new IndexType(name);
}
public static DB2IndexTypeEnum getByType(String type) {
for (DB2IndexTypeEnum value : DB2IndexTypeEnum.values()) {
if (value.name.equalsIgnoreCase(type)) {
return value;
}
}
return null;
}
public String buildIndexScript(TableIndex tableIndex) {
StringBuilder script = new StringBuilder();
if (PRIMARY_KEY.equals(this)) {
script.append("ALTER TABLE \"").append(tableIndex.getSchemaName()).append("\".\"").append(tableIndex.getTableName()).append("\" ADD PRIMARY KEY ").append(buildIndexColumn(tableIndex));
} else {
if (UNIQUE.equals(this)) {
script.append("CREATE UNIQUE INDEX ");
} else {
script.append("CREATE INDEX ");
}
script.append(buildIndexName(tableIndex)).append(" ON \"").append(tableIndex.getSchemaName()).append("\".\"").append(tableIndex.getTableName()).append("\" ").append(buildIndexColumn(tableIndex));
}
return script.toString();
}
private String buildIndexColumn(TableIndex tableIndex) {
StringBuilder script = new StringBuilder();
script.append("(");
for (TableIndexColumn column : tableIndex.getColumnList()) {
if (StringUtils.isNotBlank(column.getColumnName())) {
script.append("\"").append(column.getColumnName()).append("\"");
if (!StringUtils.isBlank(column.getAscOrDesc()) && !PRIMARY_KEY.equals(this)) {
script.append(" ").append(column.getAscOrDesc());
}
script.append(",");
}
}
script.deleteCharAt(script.length() - 1);
script.append(")");
return script.toString();
}
public String buildIndexComment(TableIndex tableIndex) {
if (StringUtils.isBlank(tableIndex.getComment()) || EditStatus.DELETE.name().equals(tableIndex.getEditStatus())) {
return "";
} else if (NORMAL.equals(this) || UNIQUE.equals(this)) {
return StringUtils.join("COMMENT ON INDEX", " ",
"\"", tableIndex.getName(), "\" IS '", tableIndex.getComment(), "';");
} else {
return StringUtils.join("COMMENT ON CONSTRAINT", " \"", tableIndex.getName(), "\" ON \"", tableIndex.getSchemaName(),
"\".\"", tableIndex.getTableName(), "\" IS '", tableIndex.getComment(), "';");
}
}
private String buildIndexName(TableIndex tableIndex) {
return "\"" + tableIndex.getSchemaName() + "\"." + "\"" + tableIndex.getName() + "\"";
}
public String buildModifyIndex(TableIndex tableIndex) {
if (EditStatus.DELETE.name().equals(tableIndex.getEditStatus())) {
return buildDropIndex(tableIndex);
}
if (EditStatus.MODIFY.name().equals(tableIndex.getEditStatus())) {
return StringUtils.join(buildDropIndex(tableIndex), ";\n", buildIndexScript(tableIndex));
}
if (EditStatus.ADD.name().equals(tableIndex.getEditStatus())) {
return StringUtils.join(buildIndexScript(tableIndex));
}
return "";
}
private String buildDropIndex(TableIndex tableIndex) {
if (DB2IndexTypeEnum.PRIMARY_KEY.getName().equals(tableIndex.getType())) {
String tableName = "\"" + tableIndex.getSchemaName() + "\"." + "\"" + tableIndex.getTableName() + "\"";
return StringUtils.join("ALTER TABLE ",tableName," DROP PRIMARY KEY");
}
StringBuilder script = new StringBuilder();
script.append("DROP INDEX ");
script.append(buildIndexName(tableIndex));
return script.toString();
}
public static List<IndexType> getIndexTypes() {
return Arrays.asList(DB2IndexTypeEnum.values()).stream().map(DB2IndexTypeEnum::getIndexType).collect(java.util.stream.Collectors.toList());
}
}