Skip to content

Commit 6f512cd

Browse files
authored
fix(partition-plan): failed to execute partition ddl when schema or table name is in lower case (#2088)
1 parent dfa3d19 commit 6f512cd

9 files changed

Lines changed: 34 additions & 33 deletions

File tree

libs/db-browser/src/main/java/com/oceanbase/tools/dbbrowser/editor/DBTablePartitionEditor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -254,9 +254,9 @@ public String generateDropPartitionDefinitionDDL(String schemaName, @NonNull Str
254254
SqlBuilder sqlBuilder = sqlBuilder();
255255
sqlBuilder.append("ALTER TABLE ");
256256
if (StringUtils.isNotEmpty(schemaName)) {
257-
sqlBuilder.append(schemaName).append(".");
257+
sqlBuilder.identifier(schemaName).append(".");
258258
}
259-
sqlBuilder.append(tableName).append(" DROP PARTITION (");
259+
sqlBuilder.identifier(tableName).append(" DROP PARTITION (");
260260
Validate.isTrue(!CollectionUtils.isEmpty(definitions), "Partition elements can not be empty");
261261

262262
return sqlBuilder.append(definitions.stream().map(d -> sqlBuilder().identifier(d.getName()).toString())

libs/db-browser/src/main/java/com/oceanbase/tools/dbbrowser/editor/mysql/MySQLDBTablePartitionEditor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,9 @@ public String generateAddPartitionDefinitionDDL(String schemaName, @NonNull Stri
136136
SqlBuilder sqlBuilder = sqlBuilder();
137137
sqlBuilder.append("ALTER TABLE ");
138138
if (StringUtils.isNotEmpty(schemaName)) {
139-
sqlBuilder.append(schemaName).append(".");
139+
sqlBuilder.identifier(schemaName).append(".");
140140
}
141-
sqlBuilder.append(tableName).append(" ADD PARTITION (").append("\n\t");
141+
sqlBuilder.identifier(tableName).append(" ADD PARTITION (").append("\n\t");
142142
Validate.isTrue(!CollectionUtils.isEmpty(definitions), "Partition elements can not be empty");
143143
for (int i = 0; i < definitions.size(); i++) {
144144
appendDefinition(option, definitions.get(i), sqlBuilder);

libs/db-browser/src/main/java/com/oceanbase/tools/dbbrowser/editor/oracle/OracleDBTablePartitionEditor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,9 +120,9 @@ public String generateAddPartitionDefinitionDDL(String schemaName, @NonNull Stri
120120
SqlBuilder sqlBuilder = sqlBuilder();
121121
sqlBuilder.append("ALTER TABLE ");
122122
if (StringUtils.isNotEmpty(schemaName)) {
123-
sqlBuilder.append(schemaName).append(".");
123+
sqlBuilder.identifier(schemaName).append(".");
124124
}
125-
sqlBuilder.append(tableName).append(" ADD ").append("\n\t");
125+
sqlBuilder.identifier(tableName).append(" ADD ").append("\n\t");
126126
Validate.isTrue(!CollectionUtils.isEmpty(definitions), "Partition elements can not be empty");
127127
for (int i = 0; i < definitions.size(); i++) {
128128
appendDefinition(option, definitions.get(i), sqlBuilder);

libs/db-browser/src/test/resources/table/operator/ob/mysql/partition/update_multi_partition_test_cases.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
]
3030
}
3131
},
32-
"output": "ALTER TABLE schema.table ADD PARTITION (\n\tPARTITION `p1` VALUES LESS THAN (1000),\n\tPARTITION `p2` VALUES LESS THAN (2000));\n"
32+
"output": "ALTER TABLE `schema`.`table` ADD PARTITION (\n\tPARTITION `p1` VALUES LESS THAN (1000),\n\tPARTITION `p2` VALUES LESS THAN (2000));\n"
3333
},
3434
{
3535
"id": 2,

libs/db-browser/src/test/resources/table/operator/ob/oracle/partition/delete_multi_partition_test_cases.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@
2929
]
3030
}
3131
},
32-
"output": "ALTER TABLE schema.table DROP PARTITION (\"p1\", \"p2\");\n"
32+
"output": "ALTER TABLE \"schema\".\"table\" DROP PARTITION (\"p1\", \"p2\");\n"
3333
}
3434
]

libs/db-browser/src/test/resources/table/operator/ob/oracle/partition/update_multi_partition_test_cases.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
]
3030
}
3131
},
32-
"output": "ALTER TABLE schema.table ADD \n\tPARTITION \"p1\" VALUES LESS THAN (1000),\n\tPARTITION \"p2\" VALUES LESS THAN (2000);\n"
32+
"output": "ALTER TABLE \"schema\".\"table\" ADD \n\tPARTITION \"p1\" VALUES LESS THAN (1000),\n\tPARTITION \"p2\" VALUES LESS THAN (2000);\n"
3333
},
3434
{
3535
"id": 2,

server/integration-test/src/test/java/com/oceanbase/odc/service/partitionplan/PartitionPlanServiceTest.java

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ public void generatePartitionDdl_mysqlOnlyCreate_generateSucceed() throws Except
197197
connection, DialectType.OB_MYSQL, configuration.getDefaultDBName(), tableConfig);
198198
Map<PartitionPlanStrategy, List<String>> expect = new HashMap<>();
199199
expect.put(PartitionPlanStrategy.CREATE, Collections.singletonList(String.format(
200-
"ALTER TABLE %s.%s ADD PARTITION (\n"
200+
"ALTER TABLE `%s`.`%s` ADD PARTITION (\n"
201201
+ "\tPARTITION `p20240125` VALUES LESS THAN (20220801,'2024-01-26'),\n"
202202
+ "\tPARTITION `p20240125` VALUES LESS THAN (20220802,'2024-01-27'),\n"
203203
+ "\tPARTITION `p20240125` VALUES LESS THAN (20220803,'2024-01-28'),\n"
@@ -221,7 +221,7 @@ public void generatePartitionDdl_mysqlOnlyDrop_generateSucceed() throws Exceptio
221221
connection, DialectType.OB_MYSQL, configuration.getDefaultDBName(), tableConfig);
222222
Map<PartitionPlanStrategy, List<String>> expect = new HashMap<>();
223223
expect.put(PartitionPlanStrategy.DROP, Collections.singletonList(String.format(
224-
"ALTER TABLE %s.%s DROP PARTITION (`p20220830`, `p20220829`);\n",
224+
"ALTER TABLE `%s`.`%s` DROP PARTITION (`p20220830`, `p20220829`);\n",
225225
configuration.getDefaultDBName(), MYSQL_REAL_RANGE_TABLE_NAME)));
226226
Assert.assertEquals(expect, actual);
227227
}
@@ -250,10 +250,10 @@ public void generatePartitionDdl_mysqlBothCreateAndDrop_generateSucceed() throws
250250
connection, DialectType.OB_MYSQL, configuration.getDefaultDBName(), tableConfig);
251251
Map<PartitionPlanStrategy, List<String>> expect = new HashMap<>();
252252
expect.put(PartitionPlanStrategy.DROP, Collections.singletonList(String.format(
253-
"ALTER TABLE %s.%s DROP PARTITION (`p20220830`, `p20220829`);\n",
253+
"ALTER TABLE `%s`.`%s` DROP PARTITION (`p20220830`, `p20220829`);\n",
254254
configuration.getDefaultDBName(), MYSQL_REAL_RANGE_TABLE_NAME)));
255255
expect.put(PartitionPlanStrategy.CREATE, Collections.singletonList(String.format(
256-
"ALTER TABLE %s.%s ADD PARTITION (\n"
256+
"ALTER TABLE `%s`.`%s` ADD PARTITION (\n"
257257
+ "\tPARTITION `p20240126` VALUES LESS THAN (20220801,'2024-01-26'),\n"
258258
+ "\tPARTITION `p20240127` VALUES LESS THAN (20220802,'2024-01-27'),\n"
259259
+ "\tPARTITION `p20240128` VALUES LESS THAN (20220803,'2024-01-28'),\n"
@@ -287,17 +287,18 @@ public void generatePartitionDdl_oracleBothCreateAndDropWithOverlap_generateSucc
287287
connection, DialectType.OB_ORACLE, configuration.getDefaultDBName(), tableConfig);
288288
Map<PartitionPlanStrategy, List<String>> expect = new HashMap<>();
289289
expect.put(PartitionPlanStrategy.DROP, Collections.singletonList(String.format(
290-
"ALTER TABLE %s.%s DROP PARTITION (\"P1\", \"P0\") UPDATE GLOBAL INDEXES;",
290+
"ALTER TABLE \"%s\".\"%s\" DROP PARTITION (\"P1\", \"P0\") UPDATE GLOBAL INDEXES;",
291291
configuration.getDefaultDBName(), ORACLE_RANGE_TABLE_NAME)));
292-
expect.put(PartitionPlanStrategy.CREATE, Collections.singletonList(String.format("ALTER TABLE %s.%s ADD \n"
293-
+ "\tPARTITION \"P20240225\" VALUES LESS THAN (TO_DATE(' 2025-01-01 00:00:00', "
294-
+ "'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'),Timestamp '2025-12-31 23:59:59'),\n"
295-
+ "\tPARTITION \"P20240325\" VALUES LESS THAN (TO_DATE(' 2025-01-02 00:00:00', "
296-
+ "'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'),Timestamp '2026-12-31 23:59:59'),\n"
297-
+ "\tPARTITION \"P20240525\" VALUES LESS THAN (TO_DATE(' 2025-01-04 00:00:00', "
298-
+ "'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'),Timestamp '2028-12-31 23:59:59'),\n"
299-
+ "\tPARTITION \"P20240625\" VALUES LESS THAN (TO_DATE(' 2025-01-05 00:00:00', "
300-
+ "'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'),Timestamp '2029-12-31 23:59:59');\n",
292+
expect.put(PartitionPlanStrategy.CREATE, Collections.singletonList(String.format(
293+
"ALTER TABLE \"%s\".\"%s\" ADD \n"
294+
+ "\tPARTITION \"P20240225\" VALUES LESS THAN (TO_DATE(' 2025-01-01 00:00:00', "
295+
+ "'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'),Timestamp '2025-12-31 23:59:59'),\n"
296+
+ "\tPARTITION \"P20240325\" VALUES LESS THAN (TO_DATE(' 2025-01-02 00:00:00', "
297+
+ "'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'),Timestamp '2026-12-31 23:59:59'),\n"
298+
+ "\tPARTITION \"P20240525\" VALUES LESS THAN (TO_DATE(' 2025-01-04 00:00:00', "
299+
+ "'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'),Timestamp '2028-12-31 23:59:59'),\n"
300+
+ "\tPARTITION \"P20240625\" VALUES LESS THAN (TO_DATE(' 2025-01-05 00:00:00', "
301+
+ "'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'),Timestamp '2029-12-31 23:59:59');\n",
301302
configuration.getDefaultDBName(), ORACLE_RANGE_TABLE_NAME)));
302303
Assert.assertEquals(expect, actual);
303304
}
@@ -326,10 +327,10 @@ public void generatePartitionDdl_mysqlBothCreateAndDropWithOverlap_generateSucce
326327
connection, DialectType.OB_MYSQL, configuration.getDefaultDBName(), tableConfig);
327328
Map<PartitionPlanStrategy, List<String>> expect = new HashMap<>();
328329
expect.put(PartitionPlanStrategy.DROP, Collections.singletonList(String.format(
329-
"ALTER TABLE %s.%s DROP PARTITION (`p20220830`, `p20220829`);\n",
330+
"ALTER TABLE `%s`.`%s` DROP PARTITION (`p20220830`, `p20220829`);\n",
330331
configuration.getDefaultDBName(), MYSQL_OVERLAP_RANGE_TABLE_NAME)));
331332
expect.put(PartitionPlanStrategy.CREATE, Collections.singletonList(String.format(
332-
"ALTER TABLE %s.%s ADD PARTITION (\n"
333+
"ALTER TABLE `%s`.`%s` ADD PARTITION (\n"
333334
+ "\tPARTITION `p20240126` VALUES LESS THAN (20220801,'2024-01-26'),\n"
334335
+ "\tPARTITION `p20240127` VALUES LESS THAN (20220802,'2024-01-27'),\n"
335336
+ "\tPARTITION `p20240128` VALUES LESS THAN (20220803,'2024-01-28'),\n"
@@ -391,15 +392,15 @@ public void preview_twoTables_succeed() {
391392
List<PartitionPlanPreViewResp> actual = this.partitionPlanService.generatePartitionDdl(
392393
"id", Arrays.asList(p1, p2), false);
393394
PartitionPlanPreViewResp r1 = new PartitionPlanPreViewResp();
394-
r1.setSqls(Collections.singletonList(String.format("ALTER TABLE %s.%s ADD PARTITION (\n"
395+
r1.setSqls(Collections.singletonList(String.format("ALTER TABLE `%s`.`%s` ADD PARTITION (\n"
395396
+ "\tPARTITION `p20240126` VALUES LESS THAN (20220801,'2024-01-26'),\n"
396397
+ "\tPARTITION `p20240127` VALUES LESS THAN (20220802,'2024-01-27'),\n"
397398
+ "\tPARTITION `p20240128` VALUES LESS THAN (20220803,'2024-01-28'),\n"
398399
+ "\tPARTITION `p20240129` VALUES LESS THAN (20220804,'2024-01-29'));\n",
399400
configuration.getDefaultDBName(), MYSQL_OVERLAP_RANGE_TABLE_NAME)));
400401
r1.setTableName(MYSQL_OVERLAP_RANGE_TABLE_NAME);
401402
PartitionPlanPreViewResp r2 = new PartitionPlanPreViewResp();
402-
r2.setSqls(Collections.singletonList(String.format("ALTER TABLE %s.%s ADD PARTITION (\n"
403+
r2.setSqls(Collections.singletonList(String.format("ALTER TABLE `%s`.`%s` ADD PARTITION (\n"
403404
+ "\tPARTITION `p20240125` VALUES LESS THAN (20220801,'2024-01-26'),\n"
404405
+ "\tPARTITION `p20240125` VALUES LESS THAN (20220802,'2024-01-27'),\n"
405406
+ "\tPARTITION `p20240125` VALUES LESS THAN (20220803,'2024-01-28'),\n"

server/plugins/task-plugin-ob-mysql/src/test/java/com/oceanbase/odc/plugin/task/obmysql/partitionplan/OBMySQLAutoPartitionExtensionPointTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ public void generateCreatePartitionDdls_normal_succeed() throws Exception {
226226
partition.setTableName(dbTable.getName());
227227
partition.setSchemaName(dbTable.getSchemaName());
228228
List<String> actuals = extensionPoint.generateCreatePartitionDdls(connection, partition);
229-
List<String> expects = Collections.singletonList(String.format("ALTER TABLE %s.%s ADD PARTITION (\n"
229+
List<String> expects = Collections.singletonList(String.format("ALTER TABLE `%s`.`%s` ADD PARTITION (\n"
230230
+ "\tPARTITION `p20240126` VALUES LESS THAN (20220801,'2024-01-26'),\n"
231231
+ "\tPARTITION `p20240127` VALUES LESS THAN (20220802,'2024-01-27'),\n"
232232
+ "\tPARTITION `p20240128` VALUES LESS THAN (20220803,'2024-01-28'),\n"
@@ -253,7 +253,7 @@ public void generateDropPartitionDdls_reloadIndexes_succeed() throws Exception {
253253
dbTablePartition.setTableName(dbTable.getName());
254254
dbTablePartition.setSchemaName(dbTable.getSchemaName());
255255
List<String> actual = extensionPoint.generateDropPartitionDdls(connection, dbTablePartition, true);
256-
List<String> expects = Collections.singletonList(String.format("ALTER TABLE %s.%s DROP PARTITION "
256+
List<String> expects = Collections.singletonList(String.format("ALTER TABLE `%s`.`%s` DROP PARTITION "
257257
+ "(`p20220830`, `p20220829`);\n", configuration.getDefaultDBName(), REAL_RANGE_TABLE_NAME));
258258
Assert.assertEquals(expects, actual);
259259
}

server/plugins/task-plugin-ob-oracle/src/test/java/com/oceanbase/odc/plugin/task/oboracle/partitionplan/OBOracleAutoPartitionExtensionPointTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public void generateCreatePartitionDdls_normal_succeed() throws Exception {
136136
partition.setTableName(dbTable.getName());
137137
partition.setSchemaName(dbTable.getSchemaName());
138138
List<String> actuals = extensionPoint.generateCreatePartitionDdls(connection, partition);
139-
List<String> expects = Collections.singletonList(String.format("ALTER TABLE %s.%s ADD \n"
139+
List<String> expects = Collections.singletonList(String.format("ALTER TABLE \"%s\".\"%s\" ADD \n"
140140
+ "\tPARTITION \"P20240225\" VALUES LESS THAN (TO_DATE(' 2024-12-31 23:59:59', "
141141
+ "'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'),Timestamp '2024-01-26 00:00:00'),\n"
142142
+ "\tPARTITION \"P20240325\" VALUES LESS THAN (TO_DATE(' 2025-12-31 23:59:59', "
@@ -177,7 +177,7 @@ public void generateDropPartitionDdls_reloadIndexes_succeed() throws Exception {
177177
dbTablePartition.setSchemaName(dbTable.getSchemaName());
178178
List<String> actual = extensionPoint.generateDropPartitionDdls(connection, dbTablePartition, true);
179179
List<String> expects = Collections.singletonList(String.format(
180-
"ALTER TABLE %s.%s DROP PARTITION (\"P0\") UPDATE GLOBAL INDEXES;",
180+
"ALTER TABLE \"%s\".\"%s\" DROP PARTITION (\"P0\") UPDATE GLOBAL INDEXES;",
181181
configuration.getDefaultDBName(), RANGE_TABLE_NAME));
182182
Assert.assertEquals(expects, actual);
183183
}
@@ -199,8 +199,8 @@ public void generateDropPartitionDdls_dontReloadIndexes_succeed() throws Excepti
199199
dbTablePartition.setTableName(dbTable.getName());
200200
dbTablePartition.setSchemaName(dbTable.getSchemaName());
201201
List<String> actual = extensionPoint.generateDropPartitionDdls(connection, dbTablePartition, false);
202-
List<String> expects =
203-
Collections.singletonList(String.format("ALTER TABLE %s.%s DROP PARTITION (\"P0\");\n",
202+
List<String> expects = Collections.singletonList(
203+
String.format("ALTER TABLE \"%s\".\"%s\" DROP PARTITION (\"P0\");\n",
204204
configuration.getDefaultDBName(), RANGE_TABLE_NAME));
205205
Assert.assertEquals(expects, actual);
206206
}

0 commit comments

Comments
 (0)