support oracle table edit

This commit is contained in:
SwallowGG
2023-10-02 11:39:12 +08:00
parent 7e81e8ca82
commit 831134e315
2 changed files with 24 additions and 20 deletions

View File

@ -19,10 +19,12 @@ import jakarta.validation.constraints.NotEmpty;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
public class OracleMetaData extends DefaultMetaService implements MetaData { public class OracleMetaData extends DefaultMetaService implements MetaData {
private static final String TABLE_DDL_SQL = "select dbms_metadata.get_ddl('TABLE','%s','%s') as sql from dual";
@Override @Override
public String tableDDL(Connection connection, String databaseName, String schemaName, String tableName) { public String tableDDL(Connection connection, String databaseName, String schemaName, String tableName) {
String sql = "select dbms_metadata.get_ddl('TABLE','" + tableName + "') as sql from dual," String sql = String.format(TABLE_DDL_SQL, tableName, schemaName);
+ "user_tables where table_name = '" + tableName + "'";
return SQLExecutor.getInstance().executeSql(connection, sql, resultSet -> { return SQLExecutor.getInstance().executeSql(connection, sql, resultSet -> {
try { try {
if (resultSet.next()) { if (resultSet.next()) {
@ -43,7 +45,7 @@ public class OracleMetaData extends DefaultMetaService implements MetaData {
@Override @Override
public List<Table> tables(Connection connection, String databaseName, String schemaName, String tableName) { public List<Table> tables(Connection connection, String databaseName, String schemaName, String tableName) {
String sql = String.format(SELECT_TABLE_SQL, schemaName); String sql = String.format(SELECT_TABLE_SQL, schemaName);
if(StringUtils.isNotBlank(tableName)){ if (StringUtils.isNotBlank(tableName)) {
sql = sql + " and A.TABLE_NAME = '" + tableName + "'"; sql = sql + " and A.TABLE_NAME = '" + tableName + "'";
} }
return SQLExecutor.getInstance().execute(connection, sql, resultSet -> { return SQLExecutor.getInstance().execute(connection, sql, resultSet -> {
@ -61,6 +63,7 @@ public class OracleMetaData extends DefaultMetaService implements MetaData {
} }
private static String SELECT_TAB_COLS = "SELECT atc.column_id , atc.column_name as COLUMN_NAME, atc.data_type as DATA_TYPE , atc.data_length as DATA_LENGTH , atc.data_type_mod , atc.nullable , atc.data_default , acc.comments , atc.DATA_PRECISION , atc.DATA_SCALE , atc.CHAR_USED FROM all_tab_columns atc, all_col_comments acc WHERE atc.owner = acc.owner AND atc.table_name = acc.table_name AND atc.column_name = acc.column_name AND atc.owner = '%s' AND atc.table_name = '%s' order by atc.column_id"; private static String SELECT_TAB_COLS = "SELECT atc.column_id , atc.column_name as COLUMN_NAME, atc.data_type as DATA_TYPE , atc.data_length as DATA_LENGTH , atc.data_type_mod , atc.nullable , atc.data_default , acc.comments , atc.DATA_PRECISION , atc.DATA_SCALE , atc.CHAR_USED FROM all_tab_columns atc, all_col_comments acc WHERE atc.owner = acc.owner AND atc.table_name = acc.table_name AND atc.column_name = acc.column_name AND atc.owner = '%s' AND atc.table_name = '%s' order by atc.column_id";
@Override @Override
public List<TableColumn> columns(Connection connection, String databaseName, String schemaName, String tableName) { public List<TableColumn> columns(Connection connection, String databaseName, String schemaName, String tableName) {
String sql = String.format(SELECT_TAB_COLS, schemaName, tableName); String sql = String.format(SELECT_TAB_COLS, schemaName, tableName);
@ -75,13 +78,13 @@ public class OracleMetaData extends DefaultMetaService implements MetaData {
tableColumn.setColumnSize(resultSet.getInt("DATA_LENGTH")); tableColumn.setColumnSize(resultSet.getInt("DATA_LENGTH"));
tableColumn.setDefaultValue(resultSet.getString("DATA_DEFAULT")); tableColumn.setDefaultValue(resultSet.getString("DATA_DEFAULT"));
tableColumn.setComment(resultSet.getString("COMMENTS")); tableColumn.setComment(resultSet.getString("COMMENTS"));
tableColumn.setNullable("Y".equalsIgnoreCase(resultSet.getString("NULLABLE"))?1:0); tableColumn.setNullable("Y".equalsIgnoreCase(resultSet.getString("NULLABLE")) ? 1 : 0);
tableColumn.setOrdinalPosition(resultSet.getInt("COLUMN_ID")); tableColumn.setOrdinalPosition(resultSet.getInt("COLUMN_ID"));
tableColumn.setDecimalDigits(resultSet.getInt("DATA_SCALE")); tableColumn.setDecimalDigits(resultSet.getInt("DATA_SCALE"));
String charUsed = resultSet.getString("CHAR_USED"); String charUsed = resultSet.getString("CHAR_USED");
if("B".equalsIgnoreCase(charUsed)){ if ("B".equalsIgnoreCase(charUsed)) {
tableColumn.setUnit("BYTE"); tableColumn.setUnit("BYTE");
}else if("C".equalsIgnoreCase(charUsed)){ } else if ("C".equalsIgnoreCase(charUsed)) {
tableColumn.setUnit("CHAR"); tableColumn.setUnit("CHAR");
} }
tableColumns.add(tableColumn); tableColumns.add(tableColumn);
@ -167,10 +170,10 @@ public class OracleMetaData extends DefaultMetaService implements MetaData {
index.setType(OracleIndexTypeEnum.NORMAL.getName()); index.setType(OracleIndexTypeEnum.NORMAL.getName());
} else if ("BITMAP".equalsIgnoreCase(index.getType())) { } else if ("BITMAP".equalsIgnoreCase(index.getType())) {
index.setType(OracleIndexTypeEnum.BITMAP.getName()); index.setType(OracleIndexTypeEnum.BITMAP.getName());
} else if(StringUtils.isNotBlank(index.getType()) && index.getType().toUpperCase().contains("NORMAL")){ } else if (StringUtils.isNotBlank(index.getType()) && index.getType().toUpperCase().contains("NORMAL")) {
index.setType(OracleIndexTypeEnum.NORMAL.getName()); index.setType(OracleIndexTypeEnum.NORMAL.getName());
} }
if(pkSet.contains(keyName)){ if (pkSet.contains(keyName)) {
index.setType(OracleIndexTypeEnum.PRIMARY_KEY.getName()); index.setType(OracleIndexTypeEnum.PRIMARY_KEY.getName());
} }
map.put(keyName, index); map.put(keyName, index);
@ -185,8 +188,8 @@ public class OracleMetaData extends DefaultMetaService implements MetaData {
TableIndexColumn tableIndexColumn = new TableIndexColumn(); TableIndexColumn tableIndexColumn = new TableIndexColumn();
tableIndexColumn.setColumnName(resultSet.getString("Column_name")); tableIndexColumn.setColumnName(resultSet.getString("Column_name"));
String expression = resultSet.getString("COLUMN_EXPRESSION"); String expression = resultSet.getString("COLUMN_EXPRESSION");
if(!StringUtils.isBlank(expression)){ if (!StringUtils.isBlank(expression)) {
tableIndexColumn.setColumnName(expression.replace("\"","")); tableIndexColumn.setColumnName(expression.replace("\"", ""));
} }
tableIndexColumn.setOrdinalPosition(resultSet.getShort("Seq_in_index")); tableIndexColumn.setOrdinalPosition(resultSet.getShort("Seq_in_index"));
tableIndexColumn.setCollation(resultSet.getString("Collation")); tableIndexColumn.setCollation(resultSet.getString("Collation"));

View File

@ -47,14 +47,15 @@ public enum OracleIndexTypeEnum {
public String buildIndexScript(TableIndex tableIndex) { public String buildIndexScript(TableIndex tableIndex) {
StringBuilder script = new StringBuilder(); StringBuilder script = new StringBuilder();
if (PRIMARY_KEY.equals(this)) { if (PRIMARY_KEY.equals(this)) {
script.append("CREATE PRIMARY KEY "); 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 { } else {
script.append("CREATE INDEX "); 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));
} }
script.append(buildIndexName(tableIndex)).append(" ON \"").append(tableIndex.getSchemaName()).append("\".\"").append(tableIndex.getTableName()).append("\" ").append(buildIndexColumn(tableIndex));
return script.toString(); return script.toString();
} }
@ -65,10 +66,10 @@ public enum OracleIndexTypeEnum {
for (TableIndexColumn column : tableIndex.getColumnList()) { for (TableIndexColumn column : tableIndex.getColumnList()) {
if (StringUtils.isNotBlank(column.getColumnName())) { if (StringUtils.isNotBlank(column.getColumnName())) {
script.append("\"").append(column.getColumnName()).append("\""); script.append("\"").append(column.getColumnName()).append("\"");
if(!StringUtils.isBlank(column.getAscOrDesc())){ if (!StringUtils.isBlank(column.getAscOrDesc())) {
script.append(" ").append(column.getAscOrDesc()); script.append(" ").append(column.getAscOrDesc());
} }
script .append(","); script.append(",");
} }
} }
script.deleteCharAt(script.length() - 1); script.deleteCharAt(script.length() - 1);
@ -85,10 +86,10 @@ public enum OracleIndexTypeEnum {
return buildDropIndex(tableIndex); return buildDropIndex(tableIndex);
} }
if (EditStatus.MODIFY.name().equals(tableIndex.getEditStatus())) { if (EditStatus.MODIFY.name().equals(tableIndex.getEditStatus())) {
return StringUtils.join(buildDropIndex(tableIndex), ";\n" , buildIndexScript(tableIndex)); return StringUtils.join(buildDropIndex(tableIndex), ";\n", buildIndexScript(tableIndex));
} }
if (EditStatus.ADD.name().equals(tableIndex.getEditStatus())) { if (EditStatus.ADD.name().equals(tableIndex.getEditStatus())) {
return StringUtils.join( buildIndexScript(tableIndex)); return StringUtils.join(buildIndexScript(tableIndex));
} }
return ""; return "";
} }