snuyanzin commented on code in PR #27327:
URL: https://github.com/apache/flink/pull/27327#discussion_r2618731321


##########
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:
   the problem with inline of such large vars is that the actual action like 
function call might be missed while code reading



-- 
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]

Reply via email to