From fe40fb0d7b67be5da3126aef18e8db813a1acd92 Mon Sep 17 00:00:00 2001 From: Ted Jenks Date: Tue, 30 May 2023 17:14:15 +0100 Subject: [PATCH 1/6] ctas with opt --- .gradle/5.6.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/5.6.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .gradle/5.6.3/gc.properties | 0 .gradle/8.0/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .gradle/8.0/dependencies-accessors/gc.properties | 0 .gradle/8.0/fileChanges/last-build.bin | Bin 0 -> 1 bytes .gradle/8.0/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .gradle/8.0/gc.properties | 0 .gradle/buildOutputCleanup/buildOutputCleanup.lock | Bin 0 -> 17 bytes .gradle/buildOutputCleanup/cache.properties | 2 ++ .gradle/vcs-1/gc.properties | 0 .../spark/sql/execution/command/commands.scala | 4 +++- .../execution/command/createDataSourceTables.scala | 2 +- .../execution/CreateHiveTableAsSelectCommand.scala | 5 ++--- 15 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 .gradle/5.6.3/fileChanges/last-build.bin create mode 100644 .gradle/5.6.3/fileHashes/fileHashes.lock create mode 100644 .gradle/5.6.3/gc.properties create mode 100644 .gradle/8.0/checksums/checksums.lock create mode 100644 .gradle/8.0/dependencies-accessors/dependencies-accessors.lock create mode 100644 .gradle/8.0/dependencies-accessors/gc.properties create mode 100644 .gradle/8.0/fileChanges/last-build.bin create mode 100644 .gradle/8.0/fileHashes/fileHashes.lock create mode 100644 .gradle/8.0/gc.properties create mode 100644 .gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 .gradle/buildOutputCleanup/cache.properties create mode 100644 .gradle/vcs-1/gc.properties diff --git a/.gradle/5.6.3/fileChanges/last-build.bin b/.gradle/5.6.3/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/.gradle/5.6.3/fileHashes/fileHashes.lock b/.gradle/5.6.3/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..b4b75502886031dad099bb4afcf45fbea135bda5 GIT binary patch literal 17 ScmZR!O>eTz6U=R3fC2y__X5)Z literal 0 HcmV?d00001 diff --git a/.gradle/5.6.3/gc.properties b/.gradle/5.6.3/gc.properties new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/.gradle/8.0/checksums/checksums.lock b/.gradle/8.0/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..040e896a2bf0bcb57ce2907b63a4744963797513 GIT binary patch literal 17 ScmZP;I->fosmWD>0SW*s1Or|G literal 0 HcmV?d00001 diff --git a/.gradle/8.0/dependencies-accessors/dependencies-accessors.lock b/.gradle/8.0/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..00cfdedadc5428f064eab30bbc6294d3be1690ba GIT binary patch literal 17 TcmZQxvUhI7Bkl|Q3{U_7IAsJ* literal 0 HcmV?d00001 diff --git a/.gradle/8.0/dependencies-accessors/gc.properties b/.gradle/8.0/dependencies-accessors/gc.properties new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/.gradle/8.0/fileChanges/last-build.bin b/.gradle/8.0/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/.gradle/8.0/fileHashes/fileHashes.lock b/.gradle/8.0/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..163ab5e09ea588a00ce45f7eb054433008c6bc97 GIT binary patch literal 17 TcmZR6Xg6UUFU!KS3{U_7F!KZ8 literal 0 HcmV?d00001 diff --git a/.gradle/8.0/gc.properties b/.gradle/8.0/gc.properties new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..cd2c2c4947c2eb171a5e871b1753e5ea3dcfab7e GIT binary patch literal 17 UcmZQJykEz5c=qZ51_)pT05IbN@&Et; literal 0 HcmV?d00001 diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 000000000000..2a4f75462f25 --- /dev/null +++ b/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Tue May 30 16:36:00 BST 2023 +gradle.version=8.0 diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/commands.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/commands.scala index c21f330be064..cb5ddca76d0c 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/commands.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/commands.scala @@ -26,7 +26,7 @@ import org.apache.spark.sql.catalyst.{CatalystTypeConverters, InternalRow} import org.apache.spark.sql.catalyst.expressions.{Attribute, AttributeReference} import org.apache.spark.sql.catalyst.plans.QueryPlan import org.apache.spark.sql.catalyst.plans.logical.{Command, LogicalPlan} -import org.apache.spark.sql.catalyst.trees.LeafLike +import org.apache.spark.sql.catalyst.trees.{LeafLike, UnaryLike} import org.apache.spark.sql.connector.ExternalCommandRunner import org.apache.spark.sql.execution.{CommandExecutionMode, ExplainMode, LeafExecNode, SparkPlan, UnaryExecNode} import org.apache.spark.sql.execution.metric.SQLMetric @@ -51,6 +51,8 @@ trait RunnableCommand extends Command { trait LeafRunnableCommand extends RunnableCommand with LeafLike[LogicalPlan] +trait RootRunnableCommand extends RunnableCommand with UnaryLike[LogicalPlan] + /** * A physical operator that executes the run method of a `RunnableCommand` and * saves the result to prevent multiple executions. diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala index 3848d5505155..60d8dec10c45 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala @@ -141,7 +141,7 @@ case class CreateDataSourceTableAsSelectCommand( mode: SaveMode, query: LogicalPlan, outputColumnNames: Seq[String]) - extends LeafRunnableCommand { + extends RootRunnableCommand { assert(query.resolved) override def innerChildren: Seq[LogicalPlan] = query :: Nil diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala index 4127e7c75d79..da985dc033c6 100644 --- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala +++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala @@ -18,13 +18,12 @@ package org.apache.spark.sql.hive.execution import scala.util.control.NonFatal - import org.apache.spark.sql.{Row, SaveMode, SparkSession} import org.apache.spark.sql.catalyst.catalog.CatalogTable import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.catalyst.util.CharVarcharUtils import org.apache.spark.sql.errors.QueryCompilationErrors -import org.apache.spark.sql.execution.command.{DataWritingCommand, LeafRunnableCommand} +import org.apache.spark.sql.execution.command.{DataWritingCommand, RootRunnableCommand} /** * Create table and insert the query result into it. @@ -38,7 +37,7 @@ case class CreateHiveTableAsSelectCommand( query: LogicalPlan, outputColumnNames: Seq[String], mode: SaveMode) - extends LeafRunnableCommand { + extends RootRunnableCommand { assert(query.resolved) override def innerChildren: Seq[LogicalPlan] = query :: Nil From dd6617e3b02c288d260a92e45a09122cfeefc68f Mon Sep 17 00:00:00 2001 From: Ted Jenks Date: Tue, 30 May 2023 17:15:12 +0100 Subject: [PATCH 2/6] remove gradle repo stuff --- .gradle/5.6.3/fileChanges/last-build.bin | Bin 1 -> 0 bytes .gradle/5.6.3/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .gradle/5.6.3/gc.properties | 0 .gradle/8.0/checksums/checksums.lock | Bin 17 -> 0 bytes .../dependencies-accessors.lock | Bin 17 -> 0 bytes .gradle/8.0/dependencies-accessors/gc.properties | 0 .gradle/8.0/fileChanges/last-build.bin | Bin 1 -> 0 bytes .gradle/8.0/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .gradle/8.0/gc.properties | 0 .gradle/buildOutputCleanup/buildOutputCleanup.lock | Bin 17 -> 0 bytes .gradle/buildOutputCleanup/cache.properties | 2 -- .gradle/vcs-1/gc.properties | 0 12 files changed, 2 deletions(-) delete mode 100644 .gradle/5.6.3/fileChanges/last-build.bin delete mode 100644 .gradle/5.6.3/fileHashes/fileHashes.lock delete mode 100644 .gradle/5.6.3/gc.properties delete mode 100644 .gradle/8.0/checksums/checksums.lock delete mode 100644 .gradle/8.0/dependencies-accessors/dependencies-accessors.lock delete mode 100644 .gradle/8.0/dependencies-accessors/gc.properties delete mode 100644 .gradle/8.0/fileChanges/last-build.bin delete mode 100644 .gradle/8.0/fileHashes/fileHashes.lock delete mode 100644 .gradle/8.0/gc.properties delete mode 100644 .gradle/buildOutputCleanup/buildOutputCleanup.lock delete mode 100644 .gradle/buildOutputCleanup/cache.properties delete mode 100644 .gradle/vcs-1/gc.properties diff --git a/.gradle/5.6.3/fileChanges/last-build.bin b/.gradle/5.6.3/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/.gradle/5.6.3/fileHashes/fileHashes.lock b/.gradle/5.6.3/fileHashes/fileHashes.lock deleted file mode 100644 index b4b75502886031dad099bb4afcf45fbea135bda5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 ScmZR!O>eTz6U=R3fC2y__X5)Z diff --git a/.gradle/5.6.3/gc.properties b/.gradle/5.6.3/gc.properties deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/.gradle/8.0/checksums/checksums.lock b/.gradle/8.0/checksums/checksums.lock deleted file mode 100644 index 040e896a2bf0bcb57ce2907b63a4744963797513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 ScmZP;I->fosmWD>0SW*s1Or|G diff --git a/.gradle/8.0/dependencies-accessors/dependencies-accessors.lock b/.gradle/8.0/dependencies-accessors/dependencies-accessors.lock deleted file mode 100644 index 00cfdedadc5428f064eab30bbc6294d3be1690ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZQxvUhI7Bkl|Q3{U_7IAsJ* diff --git a/.gradle/8.0/dependencies-accessors/gc.properties b/.gradle/8.0/dependencies-accessors/gc.properties deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/.gradle/8.0/fileChanges/last-build.bin b/.gradle/8.0/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/.gradle/8.0/fileHashes/fileHashes.lock b/.gradle/8.0/fileHashes/fileHashes.lock deleted file mode 100644 index 163ab5e09ea588a00ce45f7eb054433008c6bc97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZR6Xg6UUFU!KS3{U_7F!KZ8 diff --git a/.gradle/8.0/gc.properties b/.gradle/8.0/gc.properties deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock deleted file mode 100644 index cd2c2c4947c2eb171a5e871b1753e5ea3dcfab7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZQJykEz5c=qZ51_)pT05IbN@&Et; diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index 2a4f75462f25..000000000000 --- a/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Tue May 30 16:36:00 BST 2023 -gradle.version=8.0 diff --git a/.gradle/vcs-1/gc.properties b/.gradle/vcs-1/gc.properties deleted file mode 100644 index e69de29bb2d1..000000000000 From 8076d7d094bb51cc04c4a02729a0d016ddde74aa Mon Sep 17 00:00:00 2001 From: Ted Jenks Date: Tue, 30 May 2023 17:39:17 +0100 Subject: [PATCH 3/6] rename to unary --- .../org/apache/spark/sql/execution/command/commands.scala | 2 +- .../spark/sql/execution/command/createDataSourceTables.scala | 2 +- .../sql/hive/execution/CreateHiveTableAsSelectCommand.scala | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/commands.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/commands.scala index cb5ddca76d0c..378627f320c2 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/commands.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/commands.scala @@ -51,7 +51,7 @@ trait RunnableCommand extends Command { trait LeafRunnableCommand extends RunnableCommand with LeafLike[LogicalPlan] -trait RootRunnableCommand extends RunnableCommand with UnaryLike[LogicalPlan] +trait UnaryRunnableCommand extends RunnableCommand with UnaryLike[LogicalPlan] /** * A physical operator that executes the run method of a `RunnableCommand` and diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala index 60d8dec10c45..ad5b498a9cad 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala @@ -141,7 +141,7 @@ case class CreateDataSourceTableAsSelectCommand( mode: SaveMode, query: LogicalPlan, outputColumnNames: Seq[String]) - extends RootRunnableCommand { + extends UnaryRunnableCommand { assert(query.resolved) override def innerChildren: Seq[LogicalPlan] = query :: Nil diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala index da985dc033c6..69e616c64d42 100644 --- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala +++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala @@ -23,7 +23,7 @@ import org.apache.spark.sql.catalyst.catalog.CatalogTable import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.catalyst.util.CharVarcharUtils import org.apache.spark.sql.errors.QueryCompilationErrors -import org.apache.spark.sql.execution.command.{DataWritingCommand, RootRunnableCommand} +import org.apache.spark.sql.execution.command.{DataWritingCommand, UnaryRunnableCommand} /** * Create table and insert the query result into it. @@ -37,7 +37,7 @@ case class CreateHiveTableAsSelectCommand( query: LogicalPlan, outputColumnNames: Seq[String], mode: SaveMode) - extends RootRunnableCommand { + extends UnaryRunnableCommand { assert(query.resolved) override def innerChildren: Seq[LogicalPlan] = query :: Nil From 916a03d00def6c7488e882f4e3dddbffa40913b6 Mon Sep 17 00:00:00 2001 From: Ted Jenks Date: Tue, 30 May 2023 22:40:44 +0100 Subject: [PATCH 4/6] add testing --- .../test/scala/org/apache/spark/sql/SQLQuerySuite.scala | 7 +++++++ .../hive/execution/CreateHiveTableAsSelectCommand.scala | 1 + 2 files changed, 8 insertions(+) diff --git a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala index 03a3acaf526f..25cc693644fe 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala @@ -4667,6 +4667,13 @@ class SQLQuerySuite extends QueryTest with SharedSparkSession with AdaptiveSpark |SELECT * FROM z |""".stripMargin).collect() } + + test("SPARK-43883: CTAS commands are unary nodes") { + withTable("t") { + val ctasQuery = sql("CREATE TABLE t AS SELECT 1") + assert(ctasQuery.queryExecution.executedPlan.containsChild.size == 1) + } + } } case class Foo(bar: Option[String]) diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala index 69e616c64d42..0fda4dd032df 100644 --- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala +++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala @@ -18,6 +18,7 @@ package org.apache.spark.sql.hive.execution import scala.util.control.NonFatal + import org.apache.spark.sql.{Row, SaveMode, SparkSession} import org.apache.spark.sql.catalyst.catalog.CatalogTable import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan From 84761440afab2f1514a3ad2355c3a88a708815d2 Mon Sep 17 00:00:00 2001 From: Ted Jenks Date: Tue, 30 May 2023 22:47:27 +0100 Subject: [PATCH 5/6] add overrides for unary trait --- .../sql/execution/command/createDataSourceTables.scala | 6 ++++++ .../sql/hive/execution/CreateHiveTableAsSelectCommand.scala | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala index ad5b498a9cad..0ab33221ea4e 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala @@ -145,6 +145,12 @@ case class CreateDataSourceTableAsSelectCommand( assert(query.resolved) override def innerChildren: Seq[LogicalPlan] = query :: Nil + override def child: LogicalPlan = query + + override protected def withNewChildInternal(newChild: LogicalPlan): LogicalPlan = { + copy(query = newChild) + } + override def run(sparkSession: SparkSession): Seq[Row] = { assert(table.tableType != CatalogTableType.VIEW) assert(table.provider.isDefined) diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala index 0fda4dd032df..e087c8bd0c94 100644 --- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala +++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala @@ -44,6 +44,12 @@ case class CreateHiveTableAsSelectCommand( protected val tableIdentifier = tableDesc.identifier + override def child: LogicalPlan = query + + override protected def withNewChildInternal(newChild: LogicalPlan): LogicalPlan = { + copy(query = newChild) + } + override def run(sparkSession: SparkSession): Seq[Row] = { val catalog = sparkSession.sessionState.catalog val tableExists = catalog.tableExists(tableIdentifier) From fe6469240243f7fe1b326179dc7a6decf73ec28d Mon Sep 17 00:00:00 2001 From: Ted Jenks Date: Wed, 31 May 2023 08:55:40 +0100 Subject: [PATCH 6/6] remove innerChildren --- .../sql/execution/command/createDataSourceTables.scala | 2 -- .../src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala | 4 ++-- .../sql/hive/execution/CreateHiveTableAsSelectCommand.scala | 6 ++---- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala index 0ab33221ea4e..dd748d67ab71 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/createDataSourceTables.scala @@ -143,8 +143,6 @@ case class CreateDataSourceTableAsSelectCommand( outputColumnNames: Seq[String]) extends UnaryRunnableCommand { assert(query.resolved) - override def innerChildren: Seq[LogicalPlan] = query :: Nil - override def child: LogicalPlan = query override protected def withNewChildInternal(newChild: LogicalPlan): LogicalPlan = { diff --git a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala index 25cc693644fe..e1b60b687cab 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala @@ -4670,8 +4670,8 @@ class SQLQuerySuite extends QueryTest with SharedSparkSession with AdaptiveSpark test("SPARK-43883: CTAS commands are unary nodes") { withTable("t") { - val ctasQuery = sql("CREATE TABLE t AS SELECT 1") - assert(ctasQuery.queryExecution.executedPlan.containsChild.size == 1) + val ctasQuery = sql("CREATE TABLE t USING parquet AS SELECT 1") + assert(ctasQuery.logicalPlan.containsChild.size == 1) } } } diff --git a/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala b/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala index e087c8bd0c94..319a9a049069 100644 --- a/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala +++ b/sql/hive/src/main/scala/org/apache/spark/sql/hive/execution/CreateHiveTableAsSelectCommand.scala @@ -20,6 +20,7 @@ package org.apache.spark.sql.hive.execution import scala.util.control.NonFatal import org.apache.spark.sql.{Row, SaveMode, SparkSession} +import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.catalog.CatalogTable import org.apache.spark.sql.catalyst.plans.logical.LogicalPlan import org.apache.spark.sql.catalyst.util.CharVarcharUtils @@ -40,10 +41,7 @@ case class CreateHiveTableAsSelectCommand( mode: SaveMode) extends UnaryRunnableCommand { assert(query.resolved) - override def innerChildren: Seq[LogicalPlan] = query :: Nil - - protected val tableIdentifier = tableDesc.identifier - + protected val tableIdentifier: TableIdentifier = tableDesc.identifier override def child: LogicalPlan = query override protected def withNewChildInternal(newChild: LogicalPlan): LogicalPlan = {