fix: sync duplicate column

This commit is contained in:
vran 2022-03-13 09:28:46 +08:00
parent 74d7d5d86b
commit 2e44576e7f
3 changed files with 9 additions and 6 deletions

View File

@ -15,6 +15,7 @@ public class TableCondition extends Condition {
return TableCondition.builder()
.databaseName(condition.getDatabaseName())
.tableName(tableName)
.schemaName(condition.getSchemaName())
.ignoreTableNameRegex(condition.getIgnoreTableNameRegex())
.ignoreTableColumnNameRegex(condition.getIgnoreTableColumnNameRegex())
.build();

View File

@ -30,10 +30,11 @@ public class JdbcColumnMetaRepository implements ColumnMetaRepository {
List<ColumnMeta> columnDocs = new ArrayList<>();
String databaseName = tableCondition.getDatabaseName();
String tableName = tableCondition.getTableName();
List<String> primaryKeyColumns = selectPrimaryKeyColumns(connection.getMetaData(), databaseName, tableName);
List<String> primaryKeyColumns = selectPrimaryKeyColumns(connection.getMetaData(), tableCondition);
ResultSet columnsResult;
try {
columnsResult = connection.getMetaData().getColumns(databaseName, null, tableName, null);
columnsResult = connection.getMetaData()
.getColumns(databaseName, tableCondition.getSchemaName(), tableName, null);
} catch (SQLException e) {
log.warn("warn: ignore columns in " + databaseName + "." + tableName);
return columnDocs;
@ -85,9 +86,9 @@ public class JdbcColumnMetaRepository implements ColumnMetaRepository {
}
private List<String> selectPrimaryKeyColumns(DatabaseMetaData meta,
String catalog,
String tableName) throws SQLException {
ResultSet result = meta.getPrimaryKeys(catalog, null, tableName);
TableCondition tableCondition) throws SQLException {
ResultSet result = meta.getPrimaryKeys(tableCondition.getDatabaseName(),
tableCondition.getSchemaName(), tableCondition.getTableName());
List<String> columns = new ArrayList<>();
while (result.next()) {
String columnName = result.getString("COLUMN_NAME");

View File

@ -28,7 +28,8 @@ public class JdbcIndexMetaRepository implements IndexMetaRepository {
List<IndexMeta> indexMetas = new ArrayList<>();
ResultSet indexResults;
try {
indexResults = connection.getMetaData().getIndexInfo(databaseName, null, tableName, false, false);
indexResults = connection.getMetaData()
.getIndexInfo(databaseName, condition.getSchemaName(), tableName, false, false);
} catch (SQLException e) {
log.warn("warn: ignore " + databaseName + "." + tableName);
return indexMetas;