Visitar URL original
Keep ALTER partition accessors backed by structured state by minleejae · Pull Request #2739 · JSQLParser/JSqlParser · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
fix: preserve quoted partition column names when editing
Signed-off-by: minleejae <mmj9808@gmail.com>
  • Loading branch information
minleejae committed Oct 1, 2026
commit adb6aadedc8bc56bf89fa4d61a94684f10e7b5cb
Original file line number Diff line number Diff line change
Expand Up @@ -169,12 +169,12 @@ public int size() {

@Override
public String set(int index, String column) {
return columns.set(index, new Column(column)).getFullyQualifiedName();
return columns.set(index, columnWithName(column)).getFullyQualifiedName();
}

@Override
public void add(int index, String column) {
columns.add(index, new Column(column));
columns.add(index, columnWithName(column));
}

@Override
Expand All @@ -192,13 +192,19 @@ public void setPartitionColumns(List<String> partitionColumns) {
partitioning.setColumns(null);
} else {
ExpressionList<Column> columns = new ExpressionList<>();
partitionColumns.forEach(column -> columns.add(new Column(column)));
partitionColumns.forEach(column -> columns.add(columnWithName(column)));
partitioning.setColumns(columns);
partitioning.setColumnsSyntax(partitioning.getType() == TablePartitioning.Type.RANGE
|| partitioning.getType() == TablePartitioning.Type.LIST);
}
}

private static Column columnWithName(String name) {
Column column = new Column();
column.setName(name, false);
return column;
}

@Override
public List<PartitionDefinition> getPartitionDefinitions() {
return partitioning != null ? partitioning.getPartitionDefinitions()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,26 @@ void replacingAndClearingPartitioningDoesNotLeaveLegacySnapshots() throws JSQLPa
+ "(PARTITION pmax VALUES LESS THAN MAXVALUE)");
}

@Test
void quotedDotsRemainPartOfTheColumnNameInLegacySettersAndListEdits()
throws JSQLParserException {
Alter alter = parse("ALTER TABLE sales PARTITION BY KEY (id) PARTITIONS 8");
AlterExpressionPartition action = action(alter);
action.setPartitionColumns(List.of("`event.date`"));
Column column = action.getPartitioning().getColumns().get(0);
assertNull(column.getTable());
assertEquals("`event.date`", column.getColumnName());
assertRendering(alter, "ALTER TABLE sales PARTITION BY KEY (`event.date`) PARTITIONS 8");

List<String> names = action.getPartitionColumns();
assertEquals("`event.date`", names.set(0, "`renamed.value`"));
names.add("`other.column`");
assertEquals(List.of("`renamed.value`", "`other.column`"), names);
action.getPartitioning().getColumns().forEach(item -> assertNull(item.getTable()));
assertRendering(alter, "ALTER TABLE sales PARTITION BY KEY "
+ "(`renamed.value`, `other.column`) PARTITIONS 8");
}

private static Alter parse(String sql) throws JSQLParserException {
return (Alter) CCJSqlParserUtil.parse(sql, parser -> parser.withDialect(Dialect.MYSQL));
}
Expand All @@ -205,10 +225,14 @@ private static AlterExpressionPartition action(Alter alter) {
}

private static void assertRoundTrip(Alter alter, String expected) throws JSQLParserException {
assertRendering(alter, expected);
assertEquals(expected, parse(alter.toString()).toString());
}

private static void assertRendering(Alter alter, String expected) {
assertEquals(expected, alter.toString());
StringBuilder output = new StringBuilder();
alter.accept(new StatementDeParser(output), null);
assertEquals(expected, output.toString());
assertEquals(expected, parse(output.toString()).toString());
}
}
Loading