This is an automated email from the ASF dual-hosted git repository.

snuyanzin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/master by this push:
     new 8b716346099 [FLINK-39302][table] Support `SHOW CREATE OR ALTER 
MATERIALIZED TABLE`
8b716346099 is described below

commit 8b716346099d36e5519913ac4bbab58ba64a8af4
Author: Sergey Nuyanzin <[email protected]>
AuthorDate: Tue Mar 31 18:37:38 2026 +0200

    [FLINK-39302][table] Support `SHOW CREATE OR ALTER MATERIALIZED TABLE`
---
 docs/content.zh/docs/sql/reference/utility/show.md |  10 +-
 docs/content/docs/sql/reference/utility/show.md    |  10 +-
 .../src/main/codegen/includes/parserImpls.ftl      |   4 +-
 .../parser/dql/SqlShowCreateMaterializedTable.java |  21 +-
 .../MaterializedTableStatementParserTest.java      |  16 ++
 .../flink/table/api/internal/ShowCreateUtil.java   |  17 +-
 .../ShowCreateMaterializedTableOperation.java      |  14 +-
 .../table/api/internal/ShowCreateUtilTest.java     | 247 ++++++++++-----------
 .../operations/SqlNodeToOperationConversion.java   |   3 +-
 9 files changed, 197 insertions(+), 145 deletions(-)

diff --git a/docs/content.zh/docs/sql/reference/utility/show.md 
b/docs/content.zh/docs/sql/reference/utility/show.md
index 7c2793c78a9..705d2912ec8 100644
--- a/docs/content.zh/docs/sql/reference/utility/show.md
+++ b/docs/content.zh/docs/sql/reference/utility/show.md
@@ -41,7 +41,7 @@ SHOW CREATE 语句用于打印给定对象的创建 DDL 语句。当前的 SHOW
 - SHOW TABLES
 - SHOW CREATE TABLE
 - SHOW MATERIALIZED TABLES
-- SHOW CREATE MATERIALIZED TABLE
+- SHOW CREATE [OR ALTER ]MATERIALIZED TABLE
 - SHOW COLUMNS
 - SHOW PARTITIONS
 - SHOW PROCEDURES
@@ -993,7 +993,7 @@ The syntax of sql pattern in `LIKE` clause is the same as 
that of `MySQL` dialec
 * `%` matches any number of characters, including zero characters, `\%` 
matches one `%` character.
 * `_` matches exactly one character, `\_` matches one `_` character.
 
-## SHOW CREATE MATERIALIZED TABLE
+## SHOW CREATE [OR ALTER ]MATERIALIZED TABLE
 
 ```sql
 SHOW CREATE MATERIALIZED TABLE [catalog_name.][db_name.]materialized_table_name
@@ -1001,6 +1001,12 @@ SHOW CREATE MATERIALIZED TABLE 
[catalog_name.][db_name.]materialized_table_name
 
 Show create materialized table statement for specified materialized table.
 
+```sql
+SHOW CREATE OR ALTER MATERIALIZED TABLE 
[catalog_name.][db_name.]materialized_table_name
+```
+
+Show create or alter materialized table statement for specified materialized 
table.
+
 展示创建指定视图的 create 语句。
 
 ## SHOW FUNCTIONS
diff --git a/docs/content/docs/sql/reference/utility/show.md 
b/docs/content/docs/sql/reference/utility/show.md
index 3912e625c2c..b1fd17ac77c 100644
--- a/docs/content/docs/sql/reference/utility/show.md
+++ b/docs/content/docs/sql/reference/utility/show.md
@@ -45,7 +45,7 @@ Flink SQL supports the following SHOW statements for now:
 - SHOW VIEWS
 - SHOW CREATE VIEW
 - SHOW MATERIALIZED TABLES
-- SHOW CREATE MATERIALIZED TABLE
+- SHOW CREATE [OR ALTER ]MATERIALIZED TABLE
 - SHOW FUNCTIONS
 - SHOW MODULES
 - SHOW JARS
@@ -1004,7 +1004,7 @@ The syntax of sql pattern in `LIKE` clause is the same as 
that of `MySQL` dialec
 * `%` matches any number of characters, including zero characters, `\%` 
matches one `%` character.
 * `_` matches exactly one character, `\_` matches one `_` character.
 
-## SHOW CREATE MATERIALIZED TABLE
+## SHOW CREATE [OR ALTER ]MATERIALIZED TABLE
 
 ```sql
 SHOW CREATE MATERIALIZED TABLE [catalog_name.][db_name.]materialized_table_name
@@ -1012,6 +1012,12 @@ SHOW CREATE MATERIALIZED TABLE 
[catalog_name.][db_name.]materialized_table_name
 
 Show create materialized table statement for specified materialized table.
 
+```sql
+SHOW CREATE OR ALTER MATERIALIZED TABLE 
[catalog_name.][db_name.]materialized_table_name
+```
+
+Show create or alter materialized table statement for specified materialized 
table.
+
 ## SHOW FUNCTIONS
 
 ```sql
diff --git 
a/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl 
b/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
index 5944f533616..cf01aee2f7e 100644
--- a/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
+++ b/flink-table/flink-sql-parser/src/main/codegen/includes/parserImpls.ftl
@@ -792,11 +792,13 @@ SqlShowCreate SqlShowCreate() :
             return new SqlShowCreateConnection(pos, sqlIdentifier);
         }
     |
+        {boolean createOrAlter = false;}
+        [ <OR> <ALTER> {createOrAlter = true;} ]
         <MATERIALIZED> <TABLE>
         { pos = getPos(); }
         sqlIdentifier = CompoundIdentifier()
         {
-            return new SqlShowCreateMaterializedTable(pos, sqlIdentifier);
+            return new SqlShowCreateMaterializedTable(pos, sqlIdentifier, 
createOrAlter);
         }
     )
 }
diff --git 
a/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowCreateMaterializedTable.java
 
b/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowCreateMaterializedTable.java
index eb38d2f431b..929d2fb238c 100644
--- 
a/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowCreateMaterializedTable.java
+++ 
b/flink-table/flink-sql-parser/src/main/java/org/apache/flink/sql/parser/dql/SqlShowCreateMaterializedTable.java
@@ -29,13 +29,20 @@ import org.apache.calcite.sql.parser.SqlParserPos;
 import java.util.Collections;
 import java.util.List;
 
-/** SHOW CREATE MATERIALIZED TABLE sql call. */
+/** SHOW CREATE [OR ALTER ]MATERIALIZED TABLE sql call. */
 public class SqlShowCreateMaterializedTable extends SqlShowCreate {
-    public static final SqlSpecialOperator OPERATOR =
+    private static final SqlSpecialOperator SHOW_CREATE_OPERATOR =
             new SqlSpecialOperator("SHOW CREATE MATERIALIZED TABLE", 
SqlKind.OTHER_DDL);
 
-    public SqlShowCreateMaterializedTable(SqlParserPos pos, SqlIdentifier 
sqlIdentifier) {
+    private static final SqlSpecialOperator SHOW_CREATE_OR_ALTER_OPERATOR =
+            new SqlSpecialOperator("SHOW CREATE OR ALTER MATERIALIZED TABLE", 
SqlKind.OTHER_DDL);
+
+    private final boolean createOrAlter;
+
+    public SqlShowCreateMaterializedTable(
+            SqlParserPos pos, SqlIdentifier sqlIdentifier, boolean 
createOrAlter) {
         super(pos, sqlIdentifier);
+        this.createOrAlter = createOrAlter;
     }
 
     public SqlIdentifier getMaterializedTableName() {
@@ -48,7 +55,7 @@ public class SqlShowCreateMaterializedTable extends 
SqlShowCreate {
 
     @Override
     public SqlOperator getOperator() {
-        return OPERATOR;
+        return createOrAlter ? SHOW_CREATE_OR_ALTER_OPERATOR : 
SHOW_CREATE_OPERATOR;
     }
 
     @Override
@@ -56,9 +63,13 @@ public class SqlShowCreateMaterializedTable extends 
SqlShowCreate {
         return Collections.singletonList(sqlIdentifier);
     }
 
+    public boolean isCreateOrAlter() {
+        return createOrAlter;
+    }
+
     @Override
     public void unparse(SqlWriter writer, int leftPrec, int rightPrec) {
-        writer.keyword(OPERATOR.getName());
+        writer.keyword(getOperator().getName());
         sqlIdentifier.unparse(writer, leftPrec, rightPrec);
     }
 }
diff --git 
a/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/MaterializedTableStatementParserTest.java
 
b/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/MaterializedTableStatementParserTest.java
index 559d4c320d5..d38a8cdc04e 100644
--- 
a/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/MaterializedTableStatementParserTest.java
+++ 
b/flink-table/flink-sql-parser/src/test/java/org/apache/flink/sql/parser/MaterializedTableStatementParserTest.java
@@ -741,6 +741,22 @@ class MaterializedTableStatementParserTest {
                                 + "    ");
     }
 
+    @Test
+    void testShowCreateOrAlterMaterializedTable() {
+        sql("show create materialized table mt1").ok("SHOW CREATE MATERIALIZED 
TABLE `MT1`");
+        sql("show create materialized table db1.mt1")
+                .ok("SHOW CREATE MATERIALIZED TABLE `DB1`.`MT1`");
+        sql("show create materialized table catalog1.db1.mt1")
+                .ok("SHOW CREATE MATERIALIZED TABLE `CATALOG1`.`DB1`.`MT1`");
+
+        sql("show create or alter materialized table mt1")
+                .ok("SHOW CREATE OR ALTER MATERIALIZED TABLE `MT1`");
+        sql("show create or alter materialized table db1.mt1")
+                .ok("SHOW CREATE OR ALTER MATERIALIZED TABLE `DB1`.`MT1`");
+        sql("show create or alter materialized table catalog1.db1.mt1")
+                .ok("SHOW CREATE OR ALTER MATERIALIZED TABLE 
`CATALOG1`.`DB1`.`MT1`");
+    }
+
     public SqlParserFixture fixture() {
         return SqlParserFixture.DEFAULT.withConfig(
                 c -> c.withParserFactory(FlinkSqlParserImpl.FACTORY));
diff --git 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/api/internal/ShowCreateUtil.java
 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/api/internal/ShowCreateUtil.java
index 5cd5035e806..c62cf638494 100644
--- 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/api/internal/ShowCreateUtil.java
+++ 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/api/internal/ShowCreateUtil.java
@@ -61,7 +61,7 @@ public class ShowCreateUtil {
                 new StringBuilder()
                         .append(
                                 buildCreateFormattedPrefix(
-                                        "MODEL", isTemporary, modelIdentifier, 
false));
+                                        "MODEL", isTemporary, modelIdentifier, 
false, false));
         extractFormattedColumns(model.getResolvedInputSchema())
                 .ifPresent(
                         c -> sb.append(String.format("INPUT (%s)%s", c, 
System.lineSeparator())));
@@ -93,7 +93,7 @@ public class ShowCreateUtil {
                 new StringBuilder()
                         .append(
                                 buildCreateFormattedPrefix(
-                                        "TABLE", isTemporary, tableIdentifier, 
true));
+                                        "TABLE", isTemporary, tableIdentifier, 
false, true));
         sb.append(extractFormattedColumns(table, PRINT_INDENT));
         extractFormattedWatermarkSpecs(table, PRINT_INDENT, sqlFactory)
                 .ifPresent(watermarkSpecs -> 
sb.append(",\n").append(watermarkSpecs));
@@ -117,13 +117,18 @@ public class ShowCreateUtil {
             ResolvedCatalogMaterializedTable table,
             ObjectIdentifier tableIdentifier,
             boolean isTemporary,
+            boolean createOrAlter,
             SqlFactory sqlFactory) {
         validateTableKind(table, tableIdentifier, 
TableKind.MATERIALIZED_TABLE);
         StringBuilder sb =
                 new StringBuilder()
                         .append(
                                 buildCreateFormattedPrefix(
-                                        "MATERIALIZED TABLE", isTemporary, 
tableIdentifier, true));
+                                        "MATERIALIZED TABLE",
+                                        isTemporary,
+                                        tableIdentifier,
+                                        createOrAlter,
+                                        true));
         sb.append(extractFormattedColumns(table, PRINT_INDENT));
         extractFormattedWatermarkSpecs(table, PRINT_INDENT, sqlFactory)
                 .ifPresent(watermarkSpecs -> 
sb.append(",\n").append(watermarkSpecs));
@@ -162,7 +167,7 @@ public class ShowCreateUtil {
                 new StringBuilder()
                         .append(
                                 buildCreateFormattedPrefix(
-                                        "VIEW", isTemporary, viewIdentifier, 
true));
+                                        "VIEW", isTemporary, viewIdentifier, 
false, true));
         sb.append(extractFormattedColumnNames(view, 
PRINT_INDENT)).append("\n)\n");
         extractComment(view).ifPresent(c -> 
sb.append(formatComment(c)).append("\n"));
         sb.append("AS ").append(((CatalogView) 
origin).getExpandedQuery()).append("\n");
@@ -186,9 +191,11 @@ public class ShowCreateUtil {
             String type,
             boolean isTemporary,
             ObjectIdentifier identifier,
+            boolean createOrAlter,
             boolean openParenthesis) {
         return String.format(
-                "CREATE %s%s %s%s%s",
+                "CREATE %s%s%s %s%s%s",
+                createOrAlter ? "OR ALTER " : "",
                 isTemporary ? "TEMPORARY " : "",
                 type,
                 identifier.asSerializableString(),
diff --git 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowCreateMaterializedTableOperation.java
 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowCreateMaterializedTableOperation.java
index 14377d116b1..22383d39eb3 100644
--- 
a/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowCreateMaterializedTableOperation.java
+++ 
b/flink-table/flink-table-api-java/src/main/java/org/apache/flink/table/operations/ShowCreateMaterializedTableOperation.java
@@ -27,19 +27,23 @@ import org.apache.flink.table.catalog.ObjectIdentifier;
 
 import static 
org.apache.flink.table.api.internal.TableResultUtils.buildStringArrayResult;
 
-/** Operation to describe a SHOW CREATE MATERIALIZED TABLE statement. */
+/** Operation to describe a SHOW CREATE [OR ALTER ]MATERIALIZED TABLE 
statement. */
 @Internal
 public class ShowCreateMaterializedTableOperation implements ShowOperation {
     private final ObjectIdentifier tableIdentifier;
+    private final boolean createOrAlter;
 
-    public ShowCreateMaterializedTableOperation(ObjectIdentifier 
sqlIdentifier) {
+    public ShowCreateMaterializedTableOperation(
+            ObjectIdentifier sqlIdentifier, boolean createOrAlter) {
         this.tableIdentifier = sqlIdentifier;
+        this.createOrAlter = createOrAlter;
     }
 
     @Override
     public String asSummaryString() {
         return String.format(
-                "SHOW CREATE MATERIALIZED TABLE %s", 
tableIdentifier.asSummaryString());
+                "SHOW CREATE %sMATERIALIZED TABLE %s",
+                createOrAlter ? "OR ALTER " : "", 
tableIdentifier.asSummaryString());
     }
 
     @Override
@@ -51,13 +55,15 @@ public class ShowCreateMaterializedTableOperation 
implements ShowOperation {
                                 () ->
                                         new ValidationException(
                                                 String.format(
-                                                        "Could not execute 
SHOW CREATE MATERIALIZED TABLE. Materialized table with identifier %s does not 
exist.",
+                                                        "Could not execute %s. 
Materialized table with identifier %s does not exist.",
+                                                        asSummaryString(),
                                                         
tableIdentifier.asSerializableString())));
         String resultRow =
                 ShowCreateUtil.buildShowCreateMaterializedTableRow(
                         table.getResolvedTable(),
                         tableIdentifier,
                         table.isTemporary(),
+                        createOrAlter,
                         ctx.getCatalogManager().getSqlFactory());
 
         return buildStringArrayResult("result", new String[] {resultRow});
diff --git 
a/flink-table/flink-table-api-java/src/test/java/org/apache/flink/table/api/internal/ShowCreateUtilTest.java
 
b/flink-table/flink-table-api-java/src/test/java/org/apache/flink/table/api/internal/ShowCreateUtilTest.java
index 6b50542898b..93b4683f966 100644
--- 
a/flink-table/flink-table-api-java/src/test/java/org/apache/flink/table/api/internal/ShowCreateUtilTest.java
+++ 
b/flink-table/flink-table-api-java/src/test/java/org/apache/flink/table/api/internal/ShowCreateUtilTest.java
@@ -46,9 +46,7 @@ import org.junit.jupiter.params.provider.Arguments;
 import org.junit.jupiter.params.provider.MethodSource;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -115,15 +113,18 @@ class ShowCreateUtilTest {
         assertThat(createViewString).isEqualTo(expected);
     }
 
-    @ParameterizedTest(name = "{index}: {2}")
+    @ParameterizedTest(name = "{index}: {1}")
     @MethodSource("argsForShowCreateMaterializedTable")
     void showCreateMaterializedTable(
-            ResolvedCatalogMaterializedTable materializedTable, String 
expected) {
+            ResolvedCatalogMaterializedTable materializedTable,
+            boolean createOrAlter,
+            String expected) {
         final String createMaterializedTableString =
                 ShowCreateUtil.buildShowCreateMaterializedTableRow(
                         materializedTable,
                         MATERIALIZED_TABLE_IDENTIFIER,
                         false,
+                        createOrAlter,
                         DefaultSqlFactory.INSTANCE);
         assertThat(createMaterializedTableString).isEqualTo(expected);
     }
@@ -200,10 +201,10 @@ class ShowCreateUtilTest {
                 argList,
                 createResolvedTable(
                         ONE_COLUMN_SCHEMA,
-                        Collections.emptyMap(),
-                        Collections.emptyList(),
+                        Map.of(),
+                        List.of(),
                         TableDistribution.of(
-                                TableDistribution.Kind.HASH, 2, 
Arrays.asList("key1", "key2")),
+                                TableDistribution.Kind.HASH, 2, 
List.of("key1", "key2")),
                         null),
                 "CREATE %sTABLE `catalogName`.`dbName`.`tableName` (\n"
                         + "  `id` INT\n"
@@ -214,10 +215,9 @@ class ShowCreateUtilTest {
                 argList,
                 createResolvedTable(
                         ONE_COLUMN_SCHEMA,
-                        Collections.emptyMap(),
-                        Collections.emptyList(),
-                        TableDistribution.of(
-                                TableDistribution.Kind.RANGE, 2, 
Arrays.asList("1", "10")),
+                        Map.of(),
+                        List.of(),
+                        TableDistribution.of(TableDistribution.Kind.RANGE, 2, 
List.of("1", "10")),
                         "Table comment"),
                 "CREATE %sTABLE `catalogName`.`dbName`.`tableName` (\n"
                         + "  `id` INT\n"
@@ -229,10 +229,9 @@ class ShowCreateUtilTest {
                 argList,
                 createResolvedTable(
                         TWO_COLUMNS_SCHEMA_WITH_PRIMARY_KEY_AND_IMMUTABLE_COLS,
-                        Collections.emptyMap(),
-                        Collections.emptyList(),
-                        TableDistribution.of(
-                                TableDistribution.Kind.RANGE, 2, 
Arrays.asList("1", "10")),
+                        Map.of(),
+                        List.of(),
+                        TableDistribution.of(TableDistribution.Kind.RANGE, 2, 
List.of("1", "10")),
                         "Table comment"),
                 "CREATE %sTABLE `catalogName`.`dbName`.`tableName` (\n"
                         + "  `id` INT,\n"
@@ -250,11 +249,7 @@ class ShowCreateUtilTest {
         addTemporaryAndPermanent(
                 argList,
                 createResolvedTable(
-                        TWO_COLUMNS_SCHEMA,
-                        options,
-                        Collections.emptyList(),
-                        null,
-                        "Another table comment"),
+                        TWO_COLUMNS_SCHEMA, options, List.of(), null, "Another 
table comment"),
                 "CREATE %sTABLE `catalogName`.`dbName`.`tableName` (\n"
                         + "  `id` INT,\n"
                         + "  `name` VARCHAR(2147483647)\n"
@@ -269,11 +264,7 @@ class ShowCreateUtilTest {
         addTemporaryAndPermanent(
                 argList,
                 createResolvedTable(
-                        ONE_COLUMN_SCHEMA,
-                        Collections.emptyMap(),
-                        Arrays.asList("key1", "key2"),
-                        null,
-                        "comment"),
+                        ONE_COLUMN_SCHEMA, Map.of(), List.of("key1", "key2"), 
null, "comment"),
                 "CREATE %sTABLE `catalogName`.`dbName`.`tableName` (\n"
                         + "  `id` INT\n"
                         + ")\n"
@@ -285,9 +276,9 @@ class ShowCreateUtilTest {
                 createResolvedTable(
                         TWO_COLUMNS_SCHEMA,
                         options,
-                        Arrays.asList("key1", "key2"),
+                        List.of("key1", "key2"),
                         TableDistribution.of(
-                                TableDistribution.Kind.UNKNOWN, 3, 
Arrays.asList("1", "2", "3")),
+                                TableDistribution.Kind.UNKNOWN, 3, 
List.of("1", "2", "3")),
                         "table comment"),
                 "CREATE %sTABLE `catalogName`.`dbName`.`tableName` (\n"
                         + "  `id` INT,\n"
@@ -306,107 +297,107 @@ class ShowCreateUtilTest {
 
     private static Collection<Arguments> argsForShowCreateMaterializedTable() {
         final Collection<Arguments> argList = new ArrayList<>();
-        argList.add(
-                Arguments.of(
-                        createResolvedMaterialized(
-                                ONE_COLUMN_SCHEMA,
-                                null,
-                                List.of(),
-                                null,
-                                IntervalFreshness.ofMinute(1),
-                                RefreshMode.CONTINUOUS,
-                                "SELECT 1",
-                                "SELECT 1"),
-                        "CREATE MATERIALIZED TABLE 
`catalogName`.`dbName`.`materializedTableName` (\n"
-                                + "  `id` INT\n"
-                                + ")\n"
-                                + "FRESHNESS = INTERVAL '1' MINUTE\n"
-                                + "REFRESH_MODE = CONTINUOUS\n"
-                                + "AS SELECT 1\n"));
+        addCreateAndCreateOrAlter(
+                argList,
+                createResolvedMaterialized(
+                        ONE_COLUMN_SCHEMA,
+                        null,
+                        List.of(),
+                        null,
+                        IntervalFreshness.ofMinute(1),
+                        RefreshMode.CONTINUOUS,
+                        "SELECT 1",
+                        "SELECT 1"),
+                "%sMATERIALIZED TABLE 
`catalogName`.`dbName`.`materializedTableName` (\n"
+                        + "  `id` INT\n"
+                        + ")\n"
+                        + "FRESHNESS = INTERVAL '1' MINUTE\n"
+                        + "REFRESH_MODE = CONTINUOUS\n"
+                        + "AS SELECT 1\n");
 
-        argList.add(
-                Arguments.of(
-                        createResolvedMaterialized(
-                                ONE_COLUMN_SCHEMA_WITH_PRIMARY_KEY,
-                                null,
-                                List.of(),
-                                null,
-                                IntervalFreshness.ofMinute(1),
-                                RefreshMode.CONTINUOUS,
-                                "SELECT 1",
-                                "SELECT 1"),
-                        "CREATE MATERIALIZED TABLE 
`catalogName`.`dbName`.`materializedTableName` (\n"
-                                + "  `id` INT,\n"
-                                + "  `mt_column` VARCHAR(2147483647) METADATA 
VIRTUAL,\n"
-                                + "  CONSTRAINT `pk` PRIMARY KEY (`id`) NOT 
ENFORCED\n"
-                                + ")\n"
-                                + "FRESHNESS = INTERVAL '1' MINUTE\n"
-                                + "REFRESH_MODE = CONTINUOUS\n"
-                                + "AS SELECT 1\n"));
+        addCreateAndCreateOrAlter(
+                argList,
+                createResolvedMaterialized(
+                        ONE_COLUMN_SCHEMA_WITH_PRIMARY_KEY,
+                        null,
+                        List.of(),
+                        null,
+                        IntervalFreshness.ofMinute(1),
+                        RefreshMode.CONTINUOUS,
+                        "SELECT 1",
+                        "SELECT 1"),
+                "%sMATERIALIZED TABLE 
`catalogName`.`dbName`.`materializedTableName` (\n"
+                        + "  `id` INT,\n"
+                        + "  `mt_column` VARCHAR(2147483647) METADATA 
VIRTUAL,\n"
+                        + "  CONSTRAINT `pk` PRIMARY KEY (`id`) NOT ENFORCED\n"
+                        + ")\n"
+                        + "FRESHNESS = INTERVAL '1' MINUTE\n"
+                        + "REFRESH_MODE = CONTINUOUS\n"
+                        + "AS SELECT 1\n");
 
-        argList.add(
-                Arguments.of(
-                        createResolvedMaterialized(
-                                
TWO_COLUMNS_SCHEMA_WITH_PRIMARY_KEY_AND_IMMUTABLE_COLS,
-                                null,
-                                List.of(),
-                                null,
-                                IntervalFreshness.ofMinute(1),
-                                RefreshMode.CONTINUOUS,
-                                "SELECT 1",
-                                "SELECT 1"),
-                        "CREATE MATERIALIZED TABLE 
`catalogName`.`dbName`.`materializedTableName` (\n"
-                                + "  `id` INT,\n"
-                                + "  `name` VARCHAR(2147483647),\n"
-                                + "  CONSTRAINT `pk` PRIMARY KEY (`id`) NOT 
ENFORCED\n"
-                                + ")\n"
-                                + "FRESHNESS = INTERVAL '1' MINUTE\n"
-                                + "REFRESH_MODE = CONTINUOUS\n"
-                                + "AS SELECT 1\n"));
+        addCreateAndCreateOrAlter(
+                argList,
+                createResolvedMaterialized(
+                        TWO_COLUMNS_SCHEMA_WITH_PRIMARY_KEY_AND_IMMUTABLE_COLS,
+                        null,
+                        List.of(),
+                        null,
+                        IntervalFreshness.ofMinute(1),
+                        RefreshMode.CONTINUOUS,
+                        "SELECT 1",
+                        "SELECT 1"),
+                "%sMATERIALIZED TABLE 
`catalogName`.`dbName`.`materializedTableName` (\n"
+                        + "  `id` INT,\n"
+                        + "  `name` VARCHAR(2147483647),\n"
+                        + "  CONSTRAINT `pk` PRIMARY KEY (`id`) NOT ENFORCED\n"
+                        + ")\n"
+                        + "FRESHNESS = INTERVAL '1' MINUTE\n"
+                        + "REFRESH_MODE = CONTINUOUS\n"
+                        + "AS SELECT 1\n");
 
-        argList.add(
-                Arguments.of(
-                        createResolvedMaterialized(
-                                TWO_COLUMNS_SCHEMA,
-                                "Materialized table comment",
-                                List.of("id"),
-                                
TableDistribution.of(TableDistribution.Kind.HASH, 5, List.of("id")),
-                                IntervalFreshness.ofMinute(3),
-                                RefreshMode.FULL,
-                                "SELECT id, name FROM tbl_a",
-                                "SELECT id, name FROM 
`catalogName`.`dbName`.`tbl_a`"),
-                        "CREATE MATERIALIZED TABLE 
`catalogName`.`dbName`.`materializedTableName` (\n"
-                                + "  `id` INT,\n"
-                                + "  `name` VARCHAR(2147483647)\n"
-                                + ")\n"
-                                + "COMMENT 'Materialized table comment'\n"
-                                + "DISTRIBUTED BY HASH(`id`) INTO 5 BUCKETS\n"
-                                + "PARTITIONED BY (`id`)\n"
-                                + "FRESHNESS = INTERVAL '3' MINUTE\n"
-                                + "REFRESH_MODE = FULL\n"
-                                + "AS SELECT id, name FROM 
`catalogName`.`dbName`.`tbl_a`\n"));
+        addCreateAndCreateOrAlter(
+                argList,
+                createResolvedMaterialized(
+                        TWO_COLUMNS_SCHEMA,
+                        "Materialized table comment",
+                        List.of("id"),
+                        TableDistribution.of(TableDistribution.Kind.HASH, 5, 
List.of("id")),
+                        IntervalFreshness.ofMinute(3),
+                        RefreshMode.FULL,
+                        "SELECT id, name FROM tbl_a",
+                        "SELECT id, name FROM `catalogName`.`dbName`.`tbl_a`"),
+                "%sMATERIALIZED TABLE 
`catalogName`.`dbName`.`materializedTableName` (\n"
+                        + "  `id` INT,\n"
+                        + "  `name` VARCHAR(2147483647)\n"
+                        + ")\n"
+                        + "COMMENT 'Materialized table comment'\n"
+                        + "DISTRIBUTED BY HASH(`id`) INTO 5 BUCKETS\n"
+                        + "PARTITIONED BY (`id`)\n"
+                        + "FRESHNESS = INTERVAL '3' MINUTE\n"
+                        + "REFRESH_MODE = FULL\n"
+                        + "AS SELECT id, name FROM 
`catalogName`.`dbName`.`tbl_a`\n");
 
-        argList.add(
-                Arguments.of(
-                        createResolvedMaterialized(
-                                TWO_COLUMNS_SCHEMA,
-                                "Materialized table comment",
-                                List.of("id"),
-                                
TableDistribution.of(TableDistribution.Kind.HASH, 5, List.of("id")),
-                                IntervalFreshness.ofMinute(3),
-                                RefreshMode.FULL,
-                                "SELECT * FROM tbl_a",
-                                "SELECT id, name FROM 
`catalogName`.`dbName`.`tbl_a`"),
-                        "CREATE MATERIALIZED TABLE 
`catalogName`.`dbName`.`materializedTableName` (\n"
-                                + "  `id` INT,\n"
-                                + "  `name` VARCHAR(2147483647)\n"
-                                + ")\n"
-                                + "COMMENT 'Materialized table comment'\n"
-                                + "DISTRIBUTED BY HASH(`id`) INTO 5 BUCKETS\n"
-                                + "PARTITIONED BY (`id`)\n"
-                                + "FRESHNESS = INTERVAL '3' MINUTE\n"
-                                + "REFRESH_MODE = FULL\n"
-                                + "AS SELECT id, name FROM 
`catalogName`.`dbName`.`tbl_a`\n"));
+        addCreateAndCreateOrAlter(
+                argList,
+                createResolvedMaterialized(
+                        TWO_COLUMNS_SCHEMA,
+                        "Materialized table comment",
+                        List.of("id"),
+                        TableDistribution.of(TableDistribution.Kind.HASH, 5, 
List.of("id")),
+                        IntervalFreshness.ofMinute(3),
+                        RefreshMode.FULL,
+                        "SELECT * FROM tbl_a",
+                        "SELECT id, name FROM `catalogName`.`dbName`.`tbl_a`"),
+                "%sMATERIALIZED TABLE 
`catalogName`.`dbName`.`materializedTableName` (\n"
+                        + "  `id` INT,\n"
+                        + "  `name` VARCHAR(2147483647)\n"
+                        + ")\n"
+                        + "COMMENT 'Materialized table comment'\n"
+                        + "DISTRIBUTED BY HASH(`id`) INTO 5 BUCKETS\n"
+                        + "PARTITIONED BY (`id`)\n"
+                        + "FRESHNESS = INTERVAL '3' MINUTE\n"
+                        + "REFRESH_MODE = FULL\n"
+                        + "AS SELECT id, name FROM 
`catalogName`.`dbName`.`tbl_a`\n");
 
         return argList;
     }
@@ -417,6 +408,12 @@ class ShowCreateUtilTest {
         argList.add(Arguments.of(catalogBaseTable, true, String.format(sql, 
"TEMPORARY ")));
     }
 
+    private static void addCreateAndCreateOrAlter(
+            Collection<Arguments> argList, CatalogBaseTable catalogBaseTable, 
String sql) {
+        argList.add(Arguments.of(catalogBaseTable, false, String.format(sql, 
"CREATE ")));
+        argList.add(Arguments.of(catalogBaseTable, true, String.format(sql, 
"CREATE OR ALTER ")));
+    }
+
     private static ResolvedCatalogTable createResolvedTable(
             ResolvedSchema resolvedSchema,
             Map<String, String> options,
@@ -446,7 +443,7 @@ class ShowCreateUtilTest {
                         comment,
                         originalQuery,
                         expandedQuery,
-                        Collections.emptyMap()),
+                        Map.of()),
                 resolvedSchema);
     }
 
diff --git 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/SqlNodeToOperationConversion.java
 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/SqlNodeToOperationConversion.java
index 8aed230e3a3..3609545be94 100644
--- 
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/SqlNodeToOperationConversion.java
+++ 
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/operations/SqlNodeToOperationConversion.java
@@ -515,7 +515,8 @@ public class SqlNodeToOperationConversion {
                 UnresolvedIdentifier.of(
                         
sqlShowCreateMaterializedTable.getFullMaterializedTableName());
         ObjectIdentifier identifier = 
catalogManager.qualifyIdentifier(unresolvedIdentifier);
-        return new ShowCreateMaterializedTableOperation(identifier);
+        return new ShowCreateMaterializedTableOperation(
+                identifier, sqlShowCreateMaterializedTable.isCreateOrAlter());
     }
 
     /** Convert SHOW CREATE VIEW statement. */

Reply via email to