raminqaf commented on code in PR #27327:
URL: https://github.com/apache/flink/pull/27327#discussion_r2618719221
##########
flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/MaterializedTableStatementParserTest.java:
##########
@@ -467,11 +467,134 @@ void testAlterMaterializedTableAddWatermark() {
+ "watermark for ts as ts - interval '1' second,\n"
+ "^watermark^ for f1 as now()\n"
+ ")")
- .fails("Multiple WATERMARK statements is not supported yet.");
+ .fails("Multiple WATERMARK declarations are not supported
yet.");
}
@Test
- void testAlterMaterializedTableAddDistribution() {
+ void testModifySingleColumn() {
+ sql("alter materialized table mt1 modify new_column string comment
'new_column docs'")
+ .ok(
+ "ALTER MATERIALIZED TABLE `MT1` MODIFY (\n"
+ + " `NEW_COLUMN` STRING COMMENT 'new_column
docs'\n"
+ + ")");
+ sql("alter materialized table mt1 modify new_column string comment
'new_column docs'")
+ .ok(
+ "ALTER MATERIALIZED TABLE `MT1` MODIFY (\n"
+ + " `NEW_COLUMN` STRING COMMENT 'new_column
docs'\n"
+ + ")");
+ sql("alter materialized table mt1 modify new_column string comment
'new_column docs' first")
+ .ok(
+ "ALTER MATERIALIZED TABLE `MT1` MODIFY (\n"
+ + " `NEW_COLUMN` STRING COMMENT 'new_column
docs' FIRST\n"
+ + ")");
+ sql("alter materialized table mt1 modify new_column string comment
'new_column docs' after id")
+ .ok(
+ "ALTER MATERIALIZED TABLE `MT1` MODIFY (\n"
+ + " `NEW_COLUMN` STRING COMMENT 'new_column
docs' AFTER `ID`\n"
+ + ")");
+ // modify column type
+ sql("alter materialized table mt1 modify new_column array<string not
null> not null")
+ .ok(
+ "ALTER MATERIALIZED TABLE `MT1` MODIFY (\n"
+ + " `NEW_COLUMN` ARRAY< STRING NOT NULL > NOT
NULL\n"
+ + ")");
+
+ // modify compute column
+ sql("alter materialized table mt1 modify col_int as col_a - col_b
after col_b")
+ .ok(
+ "ALTER MATERIALIZED TABLE `MT1` MODIFY (\n"
+ + " `COL_INT` AS (`COL_A` - `COL_B`) AFTER
`COL_B`\n"
+ + ")");
+ // modify metadata column
+ sql("alter materialized table mt1 modify col_int int metadata from
'mk1' virtual comment 'comment_metadata' after col_b")
+ .ok(
+ "ALTER MATERIALIZED TABLE `MT1` MODIFY (\n"
+ + " `COL_INT` INTEGER METADATA FROM 'mk1'
VIRTUAL COMMENT 'comment_metadata' AFTER `COL_B`\n"
+ + ")");
+
+ // modify nested column
+ sql("alter materialized table mt1 modify row_column.f0 int not null
comment 'change nullability'")
+ .ok(
+ "ALTER MATERIALIZED TABLE `MT1` MODIFY (\n"
+ + " `ROW_COLUMN`.`F0` INTEGER NOT NULL
COMMENT 'change nullability'\n"
+ + ")");
+
+ // modify nested column, shift position
+ sql("alter materialized table mt1 modify row_column.f0 int after
row_column.f2")
+ .ok(
+ "ALTER MATERIALIZED TABLE `MT1` MODIFY (\n"
+ + " `ROW_COLUMN`.`F0` INTEGER AFTER
`ROW_COLUMN`.`F2`\n"
+ + ")");
+ }
+
+ @Test
+ void testModifyWatermark() {
+ sql("alter materialized table mt1 modify watermark for ts as ts")
+ .ok(
+ "ALTER MATERIALIZED TABLE `MT1` MODIFY (\n"
+ + " WATERMARK FOR `TS` AS `TS`\n"
+ + ")");
+ sql("alter materialized table mt1 modify watermark for ts as ts -
interval '1' second")
+ .ok(
+ "ALTER MATERIALIZED TABLE `MT1` MODIFY (\n"
+ + " WATERMARK FOR `TS` AS (`TS` - INTERVAL
'1' SECOND)\n"
+ + ")");
+ sql("alter materialized table default_database.mt1 modify watermark
for ts as ts - interval '1' second")
+ .ok(
+ "ALTER MATERIALIZED TABLE `DEFAULT_DATABASE`.`MT1`
MODIFY (\n"
+ + " WATERMARK FOR `TS` AS (`TS` - INTERVAL
'1' SECOND)\n"
+ + ")");
+ sql("alter materialized table default_catalog.default_database.mt1
modify watermark for ts as ts - interval '1' second")
+ .ok(
+ "ALTER MATERIALIZED TABLE
`DEFAULT_CATALOG`.`DEFAULT_DATABASE`.`MT1` MODIFY (\n"
+ + " WATERMARK FOR `TS` AS (`TS` - INTERVAL
'1' SECOND)\n"
+ + ")");
+
+ sql("alter materialized table default_catalog.default_database.mt1
modify (\n"
+ + "watermark for ts as ts - interval '1' second,\n"
+ + "^watermark^ for f1 as now()\n"
+ + ")")
+ .fails("Multiple WATERMARK declarations are not supported
yet.");
+ }
+
+ @Test
+ void testModifyConstraint() {
+ sql("alter materialized table mt1 modify constraint ct1 primary key(a,
b) not enforced")
+ .ok(
+ "ALTER MATERIALIZED TABLE `MT1` MODIFY (\n"
+ + " CONSTRAINT `CT1` PRIMARY KEY (`A`, `B`)
NOT ENFORCED\n"
+ + ")");
+ sql("alter materialized table mt1 modify unique(a, b)")
+ .ok("ALTER MATERIALIZED TABLE `MT1` MODIFY (\n" + " UNIQUE
(`A`, `B`)\n" + ")");
+ }
+
+ @Test
+ void testModifyMultipleColumn() {
+ final String sql1 =
+ "alter materialized table mt1 modify (\n"
+ + "col_int int,\n"
+ + "log_ts string comment 'log timestamp string'
first,\n"
+ + "ts AS to_timestamp(log_ts) after log_ts,\n"
+ + "col_meta int metadata from 'mk1' virtual comment
'comment_str' after col_b,\n"
+ + "primary key (id) not enforced,\n"
+ + "unique(a, b),\n"
+ + "watermark for ts as ts - interval '3' second\n"
+ + ")";
+ final String expected1 =
+ "ALTER MATERIALIZED TABLE `MT1` MODIFY (\n"
+ + " `COL_INT` INTEGER,\n"
+ + " `LOG_TS` STRING COMMENT 'log timestamp string'
FIRST,\n"
+ + " `TS` AS `TO_TIMESTAMP`(`LOG_TS`) AFTER
`LOG_TS`,\n"
+ + " `COL_META` INTEGER METADATA FROM 'mk1' VIRTUAL
COMMENT 'comment_str' AFTER `COL_B`,\n"
+ + " PRIMARY KEY (`ID`) NOT ENFORCED,\n"
+ + " UNIQUE (`A`, `B`),\n"
+ + " WATERMARK FOR `TS` AS (`TS` - INTERVAL '3'
SECOND)\n"
+ + ")";
+ sql(sql1).ok(expected1);
+ }
Review Comment:
nit: Can we inline the variables here?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]