Skip to content

Commit c833698

Browse files
packy92wanpengfei-git
authored andcommitted
[BugFix] fix comment lost escape character (backport #24909)
Signed-off-by: packy <[email protected]>
1 parent c19691b commit c833698

File tree

12 files changed

+117
-44
lines changed

12 files changed

+117
-44
lines changed

fe/fe-core/src/main/java/com/starrocks/catalog/Catalog.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ public String getComment() {
6767
return comment;
6868
}
6969

70+
public String getDisplayComment() {
71+
return CatalogUtils.addEscapeCharacter(comment);
72+
}
73+
7074
public void getProcNodeData(BaseProcResult result) {
7175
result.addRow(Lists.newArrayList(this.getName(), config.get(CATALOG_TYPE), this.getComment()));
7276
}

fe/fe-core/src/main/java/com/starrocks/catalog/CatalogUtils.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.starrocks.sql.ast.MultiItemListPartitionDesc;
2727
import com.starrocks.sql.ast.PartitionDesc;
2828
import com.starrocks.sql.ast.SingleItemListPartitionDesc;
29+
import org.apache.commons.lang3.StringUtils;
2930
import org.apache.logging.log4j.LogManager;
3031
import org.apache.logging.log4j.Logger;
3132

@@ -350,4 +351,22 @@ public static int calAvgBucketNumOfRecentPartitions(OlapTable olapTable, int rec
350351
return bucketNum;
351352
}
352353

354+
public static String addEscapeCharacter(String comment) {
355+
if (StringUtils.isEmpty(comment)) {
356+
return comment;
357+
}
358+
StringBuilder output = new StringBuilder();
359+
for (int i = 0; i < comment.length(); i++) {
360+
char c = comment.charAt(i);
361+
362+
if (c == '\\' || c == '"') {
363+
output.append('\\');
364+
output.append(c);
365+
} else {
366+
output.append(c);
367+
}
368+
}
369+
return output.toString();
370+
}
371+
353372
}

fe/fe-core/src/main/java/com/starrocks/catalog/Column.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,12 @@ public String getComment() {
311311
return comment;
312312
}
313313

314+
// Attention: cause the remove escape character in parser phase, when you want to print the
315+
// comment, you need add the escape character back
316+
public String getDisplayComment() {
317+
return CatalogUtils.addEscapeCharacter(comment);
318+
}
319+
314320
public int getOlapColumnIndexSize() {
315321
PrimitiveType type = this.getPrimitiveType();
316322
if (type == PrimitiveType.CHAR) {
@@ -472,7 +478,7 @@ public String toSql() {
472478
getPrimitiveType() != PrimitiveType.BITMAP) {
473479
sb.append("DEFAULT \"").append(defaultValue).append("\" ");
474480
}
475-
sb.append("COMMENT \"").append(comment).append("\"");
481+
sb.append("COMMENT \"").append(getDisplayComment()).append("\"");
476482

477483
return sb.toString();
478484
}

fe/fe-core/src/main/java/com/starrocks/catalog/MaterializedView.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -749,7 +749,7 @@ public String getMaterializedViewDdlStmt(boolean simple) {
749749
StringBuilder sb = new StringBuilder();
750750
sb.append("CREATE MATERIALIZED VIEW `").append(this.getName()).append("`");
751751
if (!Strings.isNullOrEmpty(this.getComment())) {
752-
sb.append("\nCOMMENT \"").append(this.getComment()).append("\"");
752+
sb.append("\nCOMMENT \"").append(this.getDisplayComment()).append("\"");
753753
}
754754

755755
// partition

fe/fe-core/src/main/java/com/starrocks/catalog/Table.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,15 @@ public String getComment() {
550550
return "";
551551
}
552552

553+
// Attention: cause the remove escape character in parser phase, when you want to print the
554+
// comment, you need add the escape character back
555+
public String getDisplayComment() {
556+
if (!Strings.isNullOrEmpty(comment)) {
557+
return CatalogUtils.addEscapeCharacter(comment);
558+
}
559+
return "";
560+
}
561+
553562
public void setComment(String comment) {
554563
this.comment = Strings.nullToEmpty(comment);
555564
}

fe/fe-core/src/main/java/com/starrocks/lake/LakeMaterializedView.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.google.common.base.Strings;
1919
import com.staros.proto.FileCacheInfo;
2020
import com.staros.proto.FilePathInfo;
21+
import com.starrocks.catalog.CatalogUtils;
2122
import com.starrocks.catalog.Column;
2223
import com.starrocks.catalog.DistributionInfo;
2324
import com.starrocks.catalog.KeysType;
@@ -174,4 +175,12 @@ public String getComment() {
174175
}
175176
return TableType.MATERIALIZED_VIEW.name();
176177
}
178+
179+
@Override
180+
public String getDisplayComment() {
181+
if (!Strings.isNullOrEmpty(comment)) {
182+
return CatalogUtils.addEscapeCharacter(comment);
183+
}
184+
return TableType.MATERIALIZED_VIEW.name();
185+
}
177186
}

fe/fe-core/src/main/java/com/starrocks/lake/LakeTable.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.starrocks.alter.AlterJobV2Builder;
2222
import com.starrocks.alter.LakeTableAlterJobV2Builder;
2323
import com.starrocks.backup.Status;
24+
import com.starrocks.catalog.CatalogUtils;
2425
import com.starrocks.catalog.Column;
2526
import com.starrocks.catalog.DistributionInfo;
2627
import com.starrocks.catalog.KeysType;
@@ -205,4 +206,12 @@ public String getComment() {
205206
}
206207
return TableType.OLAP.name();
207208
}
209+
210+
@Override
211+
public String getDisplayComment() {
212+
if (!Strings.isNullOrEmpty(comment)) {
213+
return CatalogUtils.addEscapeCharacter(comment);
214+
}
215+
return TableType.OLAP.name();
216+
}
208217
}

fe/fe-core/src/main/java/com/starrocks/qe/ShowExecutor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -949,7 +949,7 @@ private void handleShowTableStatus() {
949949
// Create_options
950950
row.add("");
951951
// Comment
952-
row.add(table.getComment());
952+
row.add(table.getDisplayComment());
953953

954954
rows.add(row);
955955
}
@@ -1192,7 +1192,7 @@ private void handleShowColumn() throws AnalysisException {
11921192
defaultValue,
11931193
aggType,
11941194
"",
1195-
col.getComment()));
1195+
col.getDisplayComment()));
11961196
} else {
11971197
// Field Type Null Key Default Extra
11981198
rows.add(Lists.newArrayList(columnName,
@@ -2541,7 +2541,7 @@ private void handleShowCreateExternalCatalog() {
25412541
// Comment
25422542
String comment = catalog.getComment();
25432543
if (comment != null) {
2544-
createCatalogSql.append("comment \"").append(catalog.getComment()).append("\"\n");
2544+
createCatalogSql.append("comment \"").append(catalog.getDisplayComment()).append("\"\n");
25452545
}
25462546
Map<String, String> clonedConfig = new HashMap<>(catalog.getConfig());
25472547
CloudCredentialUtil.maskCloudCredential(clonedConfig);

fe/fe-core/src/main/java/com/starrocks/server/GlobalStateMgr.java

Lines changed: 21 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2214,15 +2214,14 @@ public static void getDdlStmt(String dbName, Table table, List<String> createTab
22142214
StringBuilder colSb = new StringBuilder();
22152215
colSb.append(column.getName());
22162216
if (!Strings.isNullOrEmpty(column.getComment())) {
2217-
colSb.append(" COMMENT ").append("\"").append(column.getComment()).append("\"");
2217+
colSb.append(" COMMENT ").append("\"").append(column.getDisplayComment()).append("\"");
22182218
}
22192219
colDef.add(colSb.toString());
22202220
}
22212221
sb.append(Joiner.on(", ").join(colDef));
22222222
sb.append(")");
2223-
if (!Strings.isNullOrEmpty(view.getComment())) {
2224-
sb.append(" COMMENT \"").append(view.getComment()).append("\"");
2225-
}
2223+
addTableComment(sb, view);
2224+
22262225
sb.append(" AS ").append(view.getInlineViewDef()).append(";");
22272226
createTableStmt.add(sb.toString());
22282227
return;
@@ -2285,9 +2284,7 @@ public static void getDdlStmt(String dbName, Table table, List<String> createTab
22852284
}
22862285
}
22872286
sb.append(Joiner.on(", ").join(keysColumnNames)).append(")");
2288-
if (!Strings.isNullOrEmpty(table.getComment())) {
2289-
sb.append("\nCOMMENT \"").append(table.getComment()).append("\"");
2290-
}
2287+
addTableComment(sb, table);
22912288

22922289
// partition
22932290
PartitionInfo partitionInfo = olapTable.getPartitionInfo();
@@ -2494,9 +2491,8 @@ public static void getDdlStmt(String dbName, Table table, List<String> createTab
24942491
sb.append("\n)");
24952492
} else if (table.getType() == TableType.MYSQL) {
24962493
MysqlTable mysqlTable = (MysqlTable) table;
2497-
if (!Strings.isNullOrEmpty(table.getComment())) {
2498-
sb.append("\nCOMMENT \"").append(table.getComment()).append("\"");
2499-
}
2494+
addTableComment(sb, table);
2495+
25002496
// properties
25012497
sb.append("\nPROPERTIES (\n");
25022498
sb.append("\"host\" = \"").append(mysqlTable.getHost()).append("\",\n");
@@ -2508,9 +2504,8 @@ public static void getDdlStmt(String dbName, Table table, List<String> createTab
25082504
sb.append(")");
25092505
} else if (table.getType() == TableType.BROKER) {
25102506
BrokerTable brokerTable = (BrokerTable) table;
2511-
if (!Strings.isNullOrEmpty(table.getComment())) {
2512-
sb.append("\nCOMMENT \"").append(table.getComment()).append("\"");
2513-
}
2507+
addTableComment(sb, table);
2508+
25142509
// properties
25152510
sb.append("\nPROPERTIES (\n");
25162511
sb.append("\"broker_name\" = \"").append(brokerTable.getBrokerName()).append("\",\n");
@@ -2526,9 +2521,7 @@ public static void getDdlStmt(String dbName, Table table, List<String> createTab
25262521
}
25272522
} else if (table.getType() == TableType.ELASTICSEARCH) {
25282523
EsTable esTable = (EsTable) table;
2529-
if (!Strings.isNullOrEmpty(table.getComment())) {
2530-
sb.append("\nCOMMENT \"").append(table.getComment()).append("\"");
2531-
}
2524+
addTableComment(sb, table);
25322525

25332526
// partition
25342527
PartitionInfo partitionInfo = esTable.getPartitionInfo();
@@ -2563,9 +2556,7 @@ public static void getDdlStmt(String dbName, Table table, List<String> createTab
25632556
sb.append(")");
25642557
} else if (table.getType() == TableType.HIVE) {
25652558
HiveTable hiveTable = (HiveTable) table;
2566-
if (!Strings.isNullOrEmpty(table.getComment())) {
2567-
sb.append("\nCOMMENT \"").append(table.getComment()).append("\"");
2568-
}
2559+
addTableComment(sb, table);
25692560

25702561
// properties
25712562
sb.append("\nPROPERTIES (\n");
@@ -2581,17 +2572,14 @@ public static void getDdlStmt(String dbName, Table table, List<String> createTab
25812572
FileTable fileTable = (FileTable) table;
25822573
Map<String, String> clonedFileProperties = new HashMap<>(fileTable.getFileProperties());
25832574
CloudCredentialUtil.maskCloudCredential(clonedFileProperties);
2584-
if (!Strings.isNullOrEmpty(table.getComment())) {
2585-
sb.append("\nCOMMENT \"").append(table.getComment()).append("\"");
2586-
}
2575+
addTableComment(sb, table);
2576+
25872577
sb.append("\nPROPERTIES (\n");
25882578
sb.append(new PrintableMap<>(clonedFileProperties, " = ", true, true, false).toString());
25892579
sb.append("\n)");
25902580
} else if (table.getType() == TableType.HUDI) {
25912581
HudiTable hudiTable = (HudiTable) table;
2592-
if (!Strings.isNullOrEmpty(table.getComment())) {
2593-
sb.append("\nCOMMENT \"").append(table.getComment()).append("\"");
2594-
}
2582+
addTableComment(sb, table);
25952583

25962584
// properties
25972585
sb.append("\nPROPERTIES (\n");
@@ -2601,9 +2589,7 @@ public static void getDdlStmt(String dbName, Table table, List<String> createTab
26012589
sb.append("\n)");
26022590
} else if (table.getType() == TableType.ICEBERG) {
26032591
IcebergTable icebergTable = (IcebergTable) table;
2604-
if (!Strings.isNullOrEmpty(table.getComment())) {
2605-
sb.append("\nCOMMENT \"").append(table.getComment()).append("\"");
2606-
}
2592+
addTableComment(sb, table);
26072593

26082594
// properties
26092595
sb.append("\nPROPERTIES (\n");
@@ -2613,9 +2599,7 @@ public static void getDdlStmt(String dbName, Table table, List<String> createTab
26132599
sb.append("\n)");
26142600
} else if (table.getType() == TableType.JDBC) {
26152601
JDBCTable jdbcTable = (JDBCTable) table;
2616-
if (!Strings.isNullOrEmpty(table.getComment())) {
2617-
sb.append("\nCOMMENT \"").append(table.getComment()).append("\"");
2618-
}
2602+
addTableComment(sb, table);
26192603

26202604
// properties
26212605
sb.append("\nPROPERTIES (\n");
@@ -2679,6 +2663,12 @@ public static void getDdlStmt(String dbName, Table table, List<String> createTab
26792663
}
26802664
}
26812665

2666+
private static void addTableComment(StringBuilder sb, Table table) {
2667+
if (!Strings.isNullOrEmpty(table.getComment())) {
2668+
sb.append("\nCOMMENT \"").append(table.getDisplayComment()).append("\"");
2669+
}
2670+
}
2671+
26822672
public void replayCreateTable(String dbName, Table table) {
26832673
localMetastore.replayCreateTable(dbName, table);
26842674
}

fe/fe-core/src/main/java/com/starrocks/sql/parser/StarRocksLex.g4

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -479,10 +479,6 @@ DIGIT_IDENTIFIER
479479
: DIGIT (LETTER | DIGIT | '_')+
480480
;
481481

482-
QUOTED_IDENTIFIER
483-
: '"' ( ~'"' | '""' )* '"'
484-
;
485-
486482
BACKQUOTED_IDENTIFIER
487483
: '`' ( ~'`' | '``' )* '`'
488484
;

0 commit comments

Comments
 (0)