mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-08-02 21:50:43 +08:00
Fix oracle table edit error
This commit is contained in:
@ -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");
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
||||
}
|
||||
|
@ -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() + "`");
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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() + "`");
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -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()
|
||||
|
@ -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;
|
||||
|
||||
}
|
||||
|
@ -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() + "`");
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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() + "\"");
|
||||
|
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user