Fix oracle table edit error

This commit is contained in:
SwallowGG
2023-11-03 16:04:35 +08:00
parent b7ddff2022
commit e1cbe0293c
19 changed files with 69 additions and 19 deletions

View File

@ -7,6 +7,7 @@ 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 {
@ -84,7 +85,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)).append(";\n");
script.append("\t").append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append(";\n");
if (StringUtils.isNotBlank(tableColumn.getComment())) {
script.append("\n").append(buildComment(tableColumn)).append(";\n");
}

View File

@ -229,7 +229,7 @@ public enum DB2ColumnTypeEnum implements ColumnBuilder {
@Override
public String buildModifyColumn(TableColumn tableColumn) {
public String buildModifyColumn(TableColumn tableColumn, TableColumn oldColumn) {
if (EditStatus.DELETE.name().equals(tableColumn.getEditStatus())) {
StringBuilder script = new StringBuilder();

View File

@ -7,6 +7,7 @@ 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 {
@ -81,7 +82,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)).append(";\n");
script.append("\t").append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append(";\n");
if (StringUtils.isNotBlank(tableColumn.getComment())) {
script.append("\n").append(buildComment(tableColumn)).append(";\n");
}

View File

@ -250,7 +250,7 @@ public enum DMColumnTypeEnum implements ColumnBuilder {
@Override
public String buildModifyColumn(TableColumn tableColumn) {
public String buildModifyColumn(TableColumn tableColumn, TableColumn oldColumn) {
if (EditStatus.DELETE.name().equals(tableColumn.getEditStatus())) {
StringBuilder script = new StringBuilder();

View File

@ -5,6 +5,7 @@ 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;
@ -109,7 +110,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)).append(",\n");
scriptModify.append("\t").append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append(",\n");
modify = true;
}

View File

@ -130,7 +130,7 @@ public enum KingBaseColumnTypeEnum implements ColumnBuilder {
}
@Override
public String buildModifyColumn(TableColumn column) {
public String buildModifyColumn(TableColumn column, TableColumn oldColumn) {
if (EditStatus.DELETE.name().equals(column.getEditStatus())) {
return StringUtils.join("DROP COLUMN `", column.getName() + "`");

View File

@ -8,6 +8,7 @@ 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;
@ -86,7 +87,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)).append(",\n");
script.append("\t").append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append(",\n");
}
}

View File

@ -181,7 +181,7 @@ public enum MysqlColumnTypeEnum implements ColumnBuilder {
}
@Override
public String buildModifyColumn(TableColumn tableColumn) {
public String buildModifyColumn(TableColumn tableColumn, TableColumn oldColumn) {
if (EditStatus.DELETE.name().equals(tableColumn.getEditStatus())) {
return StringUtils.join("DROP COLUMN `", tableColumn.getName() + "`");

View File

@ -9,6 +9,7 @@ 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 {
@ -81,7 +82,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)).append(";\n");
script.append("\t").append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append(";\n");
if (StringUtils.isNotBlank(tableColumn.getComment())) {
script.append("\n").append(buildComment(tableColumn)).append(";\n");
}

View File

@ -215,7 +215,7 @@ public enum OracleColumnTypeEnum implements ColumnBuilder {
@Override
public String buildModifyColumn(TableColumn tableColumn) {
public String buildModifyColumn(TableColumn tableColumn, TableColumn oldColumn) {
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(buildCreateColumnSql(tableColumn)).append(") \n" );
script.append(" ").append("MODIFY (").append(buildModifyColumnSql(tableColumn,oldColumn)).append(") \n" );
if (!StringUtils.equalsIgnoreCase(tableColumn.getOldName(), tableColumn.getName())) {
script.append(";");
@ -245,6 +245,27 @@ public enum OracleColumnTypeEnum implements ColumnBuilder {
}
return "";
}
public String buildModifyColumnSql(TableColumn column,TableColumn oldColumn) {
OracleColumnTypeEnum 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(" ");
if(oldColumn.getNullable() != column.getNullable()) {
script.append(buildNullable(column, type)).append(" ");
}
return script.toString();
}
public static List<ColumnType> getTypes(){
return Arrays.stream(OracleColumnTypeEnum.values()).map(columnTypeEnum ->
columnTypeEnum.getColumnType()

View File

@ -5,6 +5,7 @@ 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;
@ -107,7 +108,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)).append(",\n");
scriptModify.append("\t").append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append(",\n");
modify = true;
}

View File

@ -119,7 +119,7 @@ public enum PostgreSQLColumnTypeEnum implements ColumnBuilder {
}
@Override
public String buildModifyColumn(TableColumn column) {
public String buildModifyColumn(TableColumn column, TableColumn oldColumn) {
if (EditStatus.DELETE.name().equals(column.getEditStatus())) {
return StringUtils.join("DROP COLUMN `", column.getName() + "`");

View File

@ -7,6 +7,7 @@ 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;
@ -57,7 +58,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)).append(";\n");
script.append("\t").append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append(";\n");
}
}

View File

@ -92,7 +92,7 @@ public enum SqliteColumnTypeEnum implements ColumnBuilder {
}
@Override
public String buildModifyColumn(TableColumn tableColumn) {
public String buildModifyColumn(TableColumn tableColumn, TableColumn oldColumn) {
// if (EditStatus.DELETE.name().equals(tableColumn.getEditStatus())) {
// return StringUtils.join("DROP COLUMN \"", tableColumn.getName() + "\"");

View File

@ -6,6 +6,7 @@ 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 {
@ -92,7 +93,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)).append("\n");
script.append(typeEnum.buildModifyColumn(tableColumn, TableUtils.getTableColumn(oldTable,tableColumn.getOldName()))).append("\n");
}
}

View File

@ -267,7 +267,7 @@ public enum SqlServerColumnTypeEnum implements ColumnBuilder {
@Override
public String buildModifyColumn(TableColumn tableColumn) {
public String buildModifyColumn(TableColumn tableColumn, TableColumn oldColumn) {
if (EditStatus.DELETE.name().equals(tableColumn.getEditStatus())) {
StringBuilder script = new StringBuilder();

View File

@ -110,7 +110,7 @@ public class RdbDmlController {
//connection.commit();
return DataResult.of(resultVOS.get(0));
}else {
connection.rollback();
//connection.rollback();
return DataResult.of(executeResult);
}
} catch (Exception e) {

View File

@ -15,7 +15,8 @@ public interface ColumnBuilder {
/**
* Build modify column sql
* @param tableColumn
* @param oldColumn
* @return
*/
String buildModifyColumn(TableColumn tableColumn);
String buildModifyColumn(TableColumn tableColumn, TableColumn oldColumn);
}

View File

@ -0,0 +1,20 @@
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;
}
}