Skip to content

Commit 449db05

Browse files
authored
Fix InventoryDumper first time dump SQL without ORDER BY on multiple columns unique key table (#34736)
1 parent 9f57576 commit 449db05

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/ingest/dumper/inventory/InventoryDumper.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,9 @@ private void consumeResultSetToChannel(final PipelineTableMetaData tableMetaData
332332
private String buildFetchAllSQLWithStreamingQuery() {
333333
String schemaName = dumperContext.getCommonContext().getTableAndSchemaNameMapper().getSchemaName(dumperContext.getLogicTableName());
334334
List<String> columnNames = dumperContext.getQueryColumnNames();
335+
if (dumperContext.hasUniqueKey()) {
336+
return sqlBuilder.buildFetchAllSQL(schemaName, dumperContext.getActualTableName(), columnNames, dumperContext.getUniqueKeyColumns().get(0).getName());
337+
}
335338
return sqlBuilder.buildFetchAllSQL(schemaName, dumperContext.getActualTableName(), columnNames);
336339
}
337340

kernel/data-pipeline/core/src/main/java/org/apache/shardingsphere/data/pipeline/core/sqlbuilder/sql/PipelineInventoryDumpSQLBuilder.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,20 @@ public String buildFetchAllSQL(final String schemaName, final String tableName,
104104
String queryColumns = columnNames.stream().map(sqlSegmentBuilder::getEscapedIdentifier).collect(Collectors.joining(","));
105105
return String.format("SELECT %s FROM %s", queryColumns, qualifiedTableName);
106106
}
107+
108+
/**
109+
* Build fetch all inventory dump SQL.
110+
*
111+
* @param schemaName schema name
112+
* @param tableName tableName
113+
* @param columnNames column names
114+
* @param uniqueKey unique key
115+
* @return built SQL
116+
*/
117+
public String buildFetchAllSQL(final String schemaName, final String tableName, final Collection<String> columnNames, final String uniqueKey) {
118+
String qualifiedTableName = sqlSegmentBuilder.getQualifiedTableName(schemaName, tableName);
119+
String queryColumns = columnNames.stream().map(sqlSegmentBuilder::getEscapedIdentifier).collect(Collectors.joining(","));
120+
String quotedUniqueKey = sqlSegmentBuilder.getEscapedIdentifier(uniqueKey);
121+
return String.format("SELECT %s FROM %s ORDER BY %s ASC", queryColumns, qualifiedTableName, quotedUniqueKey);
122+
}
107123
}

kernel/data-pipeline/core/src/test/java/org/apache/shardingsphere/data/pipeline/core/sqlbuilder/sql/PipelineInventoryDumpSQLBuilderTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,5 +65,9 @@ void assertBuildFetchAllSQL() {
6565
assertThat(actual, is("SELECT order_id,user_id,status FROM t_order"));
6666
actual = sqlBuilder.buildFetchAllSQL(null, "t_order", Collections.singletonList("*"));
6767
assertThat(actual, is("SELECT * FROM t_order"));
68+
actual = sqlBuilder.buildFetchAllSQL(null, "t_order", Arrays.asList("order_id", "user_id", "status"), "order_id");
69+
assertThat(actual, is("SELECT order_id,user_id,status FROM t_order ORDER BY order_id ASC"));
70+
actual = sqlBuilder.buildFetchAllSQL(null, "t_order", Collections.singletonList("*"), "order_id");
71+
assertThat(actual, is("SELECT * FROM t_order ORDER BY order_id ASC"));
6872
}
6973
}

0 commit comments

Comments
 (0)