Skip to content

Commit cb4b4d3

Browse files
authored
[FLINK-22654][sql-parser] Fix SqlCreateTable#toString()/unparse() lose CONSTRAINTS and watermarks
This closes #15918
1 parent 2ef03c4 commit cb4b4d3

2 files changed

Lines changed: 49 additions & 1 deletion

File tree

flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/ddl/SqlCreateTable.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ public void unparse(SqlWriter writer, int leftPrec, int rightPrec) {
266266
writer.keyword("IF NOT EXISTS");
267267
}
268268
tableName.unparse(writer, leftPrec, rightPrec);
269-
if (columnList.size() > 0) {
269+
if (columnList.size() > 0 || tableConstraints.size() > 0 || watermark != null) {
270270
SqlWriter.Frame frame =
271271
writer.startList(SqlWriter.FrameTypeEnum.create("sds"), "(", ")");
272272
for (SqlNode column : columnList) {

flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/FlinkSqlParserImplTest.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -816,6 +816,35 @@ public void testCreateTableWithLikeClause() {
816816
sql(sql).ok(expected);
817817
}
818818

819+
@Test
820+
public void testCreateTableWithLikeClauseWithoutColumns() {
821+
final String sql =
822+
""
823+
+ "create TEMPORARY table source_table (\n"
824+
+ " WATERMARK FOR ts AS ts - INTERVAL '5' SECOND\n"
825+
+ ") with (\n"
826+
+ " 'scan.startup.mode' = 'specific-offsets',\n"
827+
+ " 'scan.startup.specific-offsets' = 'partition:0,offset:1169129'\n"
828+
+ ") like t_order_course (\n"
829+
+ " OVERWRITING WATERMARKS\n"
830+
+ " OVERWRITING OPTIONS\n"
831+
+ " EXCLUDING CONSTRAINTS\n"
832+
+ ")";
833+
final String expected =
834+
"CREATE TEMPORARY TABLE `SOURCE_TABLE` (\n"
835+
+ " WATERMARK FOR `TS` AS (`TS` - INTERVAL '5' SECOND)\n"
836+
+ ") WITH (\n"
837+
+ " 'scan.startup.mode' = 'specific-offsets',\n"
838+
+ " 'scan.startup.specific-offsets' = 'partition:0,offset:1169129'\n"
839+
+ ")\n"
840+
+ "LIKE `T_ORDER_COURSE` (\n"
841+
+ " OVERWRITING WATERMARKS\n"
842+
+ " OVERWRITING OPTIONS\n"
843+
+ " EXCLUDING CONSTRAINTS\n"
844+
+ ")";
845+
sql(sql).ok(expected);
846+
}
847+
819848
@Test
820849
public void testCreateTemporaryTable() {
821850
final String sql =
@@ -851,6 +880,25 @@ public void testCreateTableWithNoColumns() {
851880
sql(sql).ok(expected);
852881
}
853882

883+
@Test
884+
public void testCreateTableWithOnlyWaterMark() {
885+
final String sql =
886+
"create table source_table (\n"
887+
+ " watermark FOR ts AS ts - interval '3' second\n"
888+
+ ") with (\n"
889+
+ " 'x' = 'y',\n"
890+
+ " 'abc' = 'def'\n"
891+
+ ")";
892+
final String expected =
893+
"CREATE TABLE `SOURCE_TABLE` (\n"
894+
+ " WATERMARK FOR `TS` AS (`TS` - INTERVAL '3' SECOND)\n"
895+
+ ") WITH (\n"
896+
+ " 'x' = 'y',\n"
897+
+ " 'abc' = 'def'\n"
898+
+ ")";
899+
sql(sql).ok(expected);
900+
}
901+
854902
@Test
855903
public void testDropTable() {
856904
final String sql = "DROP table catalog1.db1.tbl1";

0 commit comments

Comments
 (0)