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 f5846010d69 [FLINK-40096][table] Migrate `EXPLAIN` `CTAS`/`RTAS` 
Explain tests to Java
f5846010d69 is described below

commit f5846010d6908e5407d78dadf597f1989f08a29c
Author: Ramin Gharib <[email protected]>
AuthorDate: Thu Jul 9 06:58:13 2026 +0200

    [FLINK-40096][table] Migrate `EXPLAIN` `CTAS`/`RTAS` Explain tests to Java
---
 .../table/planner/plan/stream/sql/ExplainTest.java |  88 +++++++++++++++++-
 .../src/test/resources/explain/testExplainCtas.out |   6 +-
 ...ExplainCtasWithColumnsInCreateAndQueryParts.out |   4 +-
 .../planner/plan/stream/sql/TableSinkTest.scala    | 101 +--------------------
 4 files changed, 89 insertions(+), 110 deletions(-)

diff --git 
a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/plan/stream/sql/ExplainTest.java
 
b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/plan/stream/sql/ExplainTest.java
index e3b35dd9f6b..e6b4024fae9 100644
--- 
a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/plan/stream/sql/ExplainTest.java
+++ 
b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/plan/stream/sql/ExplainTest.java
@@ -174,15 +174,95 @@ public class ExplainTest extends TableTestBase {
                         + "    MyTable");
     }
 
+    @Test
+    void testExplainCreateTableAsSelect() {
+        verifyExplain(
+                "CREATE TABLE MyCtasTable\n"
+                        + " WITH (\n"
+                        + "   'connector' = 'values'\n"
+                        + ") AS\n"
+                        + "  SELECT\n"
+                        + "    `a`,\n"
+                        + "    `b`\n"
+                        + "  FROM\n"
+                        + "    MyTable",
+                "testExplainCtas");
+    }
+
+    @Test
+    void testExplainReplaceTableAsSelect() {
+        // Produces the same plan as CREATE TABLE AS SELECT.
+        verifyExplain(
+                "REPLACE TABLE MyCtasTable\n"
+                        + " WITH (\n"
+                        + "   'connector' = 'values'\n"
+                        + ") AS\n"
+                        + "  SELECT\n"
+                        + "    `a`,\n"
+                        + "    `b`\n"
+                        + "  FROM\n"
+                        + "    MyTable",
+                "testExplainCtas");
+    }
+
+    @Test
+    void testExplainCreateTableAsSelectWithColumnsInCreateAndQueryParts() {
+        verifyExplain(
+                "CREATE TABLE MyCtasTable(\n"
+                        + "  `votes` INT,\n"
+                        + "  `votes_2x` AS `b` * 2,\n"
+                        + "  `metadata_col` BIGINT METADATA,\n"
+                        + "  `virtual_col` STRING METADATA VIRTUAL\n"
+                        + ")\n"
+                        + " WITH (\n"
+                        + "   'connector' = 'values',\n"
+                        + "   'readable-metadata' = 'metadata_col:BIGINT, 
virtual_col:STRING',\n"
+                        + "   'writable-metadata' = 'metadata_col:BIGINT'\n"
+                        + ") AS\n"
+                        + "  SELECT\n"
+                        + "    `a`,\n"
+                        + "    `b`\n"
+                        + "  FROM\n"
+                        + "    MyTable",
+                "testExplainCtasWithColumnsInCreateAndQueryParts");
+    }
+
+    @Test
+    void testExplainReplaceTableAsSelectWithColumnsInCreateAndQueryParts() {
+        // Produces the same plan as CREATE TABLE AS SELECT.
+        verifyExplain(
+                "REPLACE TABLE MyCtasTable(\n"
+                        + "  `votes` INT,\n"
+                        + "  `votes_2x` AS `b` * 2,\n"
+                        + "  `metadata_col` BIGINT METADATA,\n"
+                        + "  `virtual_col` STRING METADATA VIRTUAL\n"
+                        + ")\n"
+                        + " WITH (\n"
+                        + "   'connector' = 'values',\n"
+                        + "   'readable-metadata' = 'metadata_col:BIGINT, 
virtual_col:STRING',\n"
+                        + "   'writable-metadata' = 'metadata_col:BIGINT'\n"
+                        + ") AS\n"
+                        + "  SELECT\n"
+                        + "    `a`,\n"
+                        + "    `b`\n"
+                        + "  FROM\n"
+                        + "    MyTable",
+                "testExplainCtasWithColumnsInCreateAndQueryParts");
+    }
+
     private void verifyExplain(final String statement) {
-        final String actual = util.getTableEnv().explainSql(statement);
         final String displayName = this.testInfo.getDisplayName();
-        final String fileName = displayName.substring(0, displayName.length() 
- 2) + ".out";
+        verifyExplain(statement, displayName.substring(0, displayName.length() 
- 2));
+    }
+
+    private void verifyExplain(final String statement, final String fileName) {
+        final String actual = util.getTableEnv().explainSql(statement);
+        final String fullFileName = fileName + ".out";
         if (REGENERATE_FILES) {
-            writeToResource(fileName, actual);
+            writeToResource(fullFileName, actual);
             return;
         }
-        final String expected = TableTestUtil.readFromResource("/explain/" + 
fileName);
+        final String expected = TableTestUtil.readFromResource("/explain/" + 
fullFileName);
         assertThat(TableTestUtil.replaceStageId(actual))
                 .isEqualTo(TableTestUtil.replaceStageId(expected));
     }
diff --git 
a/flink-table/flink-table-planner/src/test/resources/explain/testExplainCtas.out
 
b/flink-table/flink-table-planner/src/test/resources/explain/testExplainCtas.out
index 9ebb7197beb..a0dbe7abfd7 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/explain/testExplainCtas.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/explain/testExplainCtas.out
@@ -5,10 +5,8 @@ 
LogicalSink(table=[default_catalog.default_database.MyCtasTable], fields=[a, b])
 
 == Optimized Physical Plan ==
 Sink(table=[default_catalog.default_database.MyCtasTable], fields=[a, b])
-+- Calc(select=[a, b])
-   +- DataStreamScan(table=[[default_catalog, default_database, MyTable]], 
fields=[a, b, c])
++- TableSourceScan(table=[[default_catalog, default_database, MyTable, 
project=[a, b], metadata=[]]], fields=[a, b])
 
 == Optimized Execution Plan ==
 Sink(table=[default_catalog.default_database.MyCtasTable], fields=[a, b])
-+- Calc(select=[a, b])
-   +- DataStreamScan(table=[[default_catalog, default_database, MyTable]], 
fields=[a, b, c])
++- TableSourceScan(table=[[default_catalog, default_database, MyTable, 
project=[a, b], metadata=[]]], fields=[a, b])
diff --git 
a/flink-table/flink-table-planner/src/test/resources/explain/testExplainCtasWithColumnsInCreateAndQueryParts.out
 
b/flink-table/flink-table-planner/src/test/resources/explain/testExplainCtasWithColumnsInCreateAndQueryParts.out
index eb7db8e3862..c738e804db9 100644
--- 
a/flink-table/flink-table-planner/src/test/resources/explain/testExplainCtasWithColumnsInCreateAndQueryParts.out
+++ 
b/flink-table/flink-table-planner/src/test/resources/explain/testExplainCtasWithColumnsInCreateAndQueryParts.out
@@ -6,9 +6,9 @@ 
LogicalSink(table=[default_catalog.default_database.MyCtasTable], fields=[votes,
 == Optimized Physical Plan ==
 Sink(table=[default_catalog.default_database.MyCtasTable], fields=[votes, a, 
b, metadata_col])
 +- Calc(select=[null:INTEGER AS votes, a, b, null:BIGINT AS metadata_col])
-   +- DataStreamScan(table=[[default_catalog, default_database, MyTable]], 
fields=[a, b, c])
+   +- TableSourceScan(table=[[default_catalog, default_database, MyTable, 
project=[a, b], metadata=[]]], fields=[a, b])
 
 == Optimized Execution Plan ==
 Sink(table=[default_catalog.default_database.MyCtasTable], fields=[votes, a, 
b, metadata_col])
 +- Calc(select=[null:INTEGER AS votes, a, b, null:BIGINT AS metadata_col])
-   +- DataStreamScan(table=[[default_catalog, default_database, MyTable]], 
fields=[a, b, c])
+   +- TableSourceScan(table=[[default_catalog, default_database, MyTable, 
project=[a, b], metadata=[]]], fields=[a, b])
diff --git 
a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/stream/sql/TableSinkTest.scala
 
b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/stream/sql/TableSinkTest.scala
index 5201b1f20bc..31f0d6ca6fa 100644
--- 
a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/stream/sql/TableSinkTest.scala
+++ 
b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/stream/sql/TableSinkTest.scala
@@ -26,11 +26,10 @@ import org.apache.flink.table.connector.ChangelogMode
 import org.apache.flink.table.connector.source.{DynamicTableSource, 
ScanTableSource}
 import org.apache.flink.table.data.RowData
 import org.apache.flink.table.factories.{DynamicTableFactory, 
DynamicTableSourceFactory}
-import org.apache.flink.table.planner.utils.{TableTestBase, TableTestUtil, 
TestingTableEnvironment}
+import org.apache.flink.table.planner.utils.{TableTestBase, 
TestingTableEnvironment}
 
 import org.assertj.core.api.Assertions
 import org.assertj.core.api.Assertions.assertThatThrownBy
-import org.junit.jupiter.api.Assertions.assertEquals
 import org.junit.jupiter.api.Test
 
 import java.util
@@ -847,104 +846,6 @@ class TableSinkTest extends TableTestBase {
         "Table 'default_catalog.default_database.sink' is a bucketed table and 
it supports [HASH, UNKNOWN], but algorithm RANGE was requested.")
   }
 
-  @Test
-  def testExplainCreateTableAsSelect(): Unit = {
-    val actual = util.tableEnv.explainSql("""
-                                            |CREATE TABLE MyCtasTable
-                                            | WITH (
-                                            |   'connector' = 'values'
-                                            |) AS
-                                            |  SELECT
-                                            |    `a`,
-                                            |    `b`
-                                            |  FROM
-                                            |    MyTable
-                                            |""".stripMargin)
-
-    val expected = 
TableTestUtil.readFromResource("/explain/testExplainCtas.out")
-
-    assertEquals(TableTestUtil.replaceStageId(expected), 
TableTestUtil.replaceStageId(actual))
-  }
-
-  @Test
-  def testExplainReplaceTableAsSelect(): Unit = {
-    val actual = util.tableEnv.explainSql("""
-                                            |REPLACE TABLE MyCtasTable
-                                            | WITH (
-                                            |   'connector' = 'values'
-                                            |) AS
-                                            |  SELECT
-                                            |    `a`,
-                                            |    `b`
-                                            |  FROM
-                                            |    MyTable
-                                            |""".stripMargin)
-
-    // Same as CTAS
-    val expected = 
TableTestUtil.readFromResource("/explain/testExplainCtas.out")
-
-    assertEquals(TableTestUtil.replaceStageId(expected), 
TableTestUtil.replaceStageId(actual))
-  }
-
-  @Test
-  def testExplainCreateTableAsSelectWithColumnsInCreateAndQueryParts(): Unit = 
{
-    val actual =
-      util.tableEnv.explainSql(
-        """
-          |CREATE TABLE MyCtasTable(
-          |  `votes` INT,
-          |  `votes_2x` AS `b` * 2,
-          |  `metadata_col` BIGINT METADATA,
-          |  `virtual_col` STRING METADATA VIRTUAL
-          |)
-          | WITH (
-          |   'connector' = 'values',
-          |   'readable-metadata' = 'metadata_col:BIGINT, virtual_col:STRING',
-          |   'writable-metadata' = 'metadata_col:BIGINT'
-          |) AS
-          |  SELECT
-          |    `a`,
-          |    `b`
-          |  FROM
-          |    MyTable
-          |""".stripMargin)
-
-    val expected =
-      
TableTestUtil.readFromResource("/explain/testExplainCtasWithColumnsInCreateAndQueryParts.out")
-
-    assertEquals(TableTestUtil.replaceStageId(expected), 
TableTestUtil.replaceStageId(actual))
-  }
-
-  @Test
-  def testExplainReplaceTableAsSelectWithColumnsInCreateAndQueryParts(): Unit 
= {
-    val actual =
-      util.tableEnv.explainSql(
-        """
-          |REPLACE TABLE MyCtasTable(
-          |  `votes` INT,
-          |  `votes_2x` AS `b` * 2,
-          |  `metadata_col` BIGINT METADATA,
-          |  `virtual_col` STRING METADATA VIRTUAL
-          |)
-          | WITH (
-          |   'connector' = 'values',
-          |   'readable-metadata' = 'metadata_col:BIGINT, virtual_col:STRING',
-          |   'writable-metadata' = 'metadata_col:BIGINT'
-          |) AS
-          |  SELECT
-          |    `a`,
-          |    `b`
-          |  FROM
-          |    MyTable
-          |""".stripMargin)
-
-    // Same as CTAS
-    val expected =
-      
TableTestUtil.readFromResource("/explain/testExplainCtasWithColumnsInCreateAndQueryParts.out")
-
-    assertEquals(TableTestUtil.replaceStageId(expected), 
TableTestUtil.replaceStageId(actual))
-  }
-
   @Test
   def testInsertOnConflictDoDeduplicate(): Unit = {
     util.addTable(s"""

Reply via email to