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() return TableCondition.builder()
.databaseName(condition.getDatabaseName()) .databaseName(condition.getDatabaseName())
.tableName(tableName) .tableName(tableName)
.schemaName(condition.getSchemaName())
.ignoreTableNameRegex(condition.getIgnoreTableNameRegex()) .ignoreTableNameRegex(condition.getIgnoreTableNameRegex())
.ignoreTableColumnNameRegex(condition.getIgnoreTableColumnNameRegex()) .ignoreTableColumnNameRegex(condition.getIgnoreTableColumnNameRegex())
.build(); .build();

View File

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

View File

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