From 8a1b4e404c03e83602de16aac44dda2ccdb2f298 Mon Sep 17 00:00:00 2001 From: Angerszhuuuu Date: Tue, 12 Oct 2021 12:24:14 +0800 Subject: [PATCH 1/3] [SPARK-36980][SQL] Insert support query with CTE --- .../org/apache/spark/sql/catalyst/parser/SqlBase.g4 | 2 +- .../org/apache/spark/sql/catalyst/parser/AstBuilder.scala | 4 +--- .../scala/org/apache/spark/sql/sources/InsertSuite.scala | 8 ++++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/sql/catalyst/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBase.g4 b/sql/catalyst/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBase.g4 index 3cd39a91919ab..4485c0d3d783a 100644 --- a/sql/catalyst/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBase.g4 +++ b/sql/catalyst/src/main/antlr4/org/apache/spark/sql/catalyst/parser/SqlBase.g4 @@ -444,7 +444,7 @@ resource ; dmlStatementNoWith - : insertInto queryTerm queryOrganization #singleInsertQuery + : insertInto query #singleInsertQuery | fromClause multiInsertQueryBody+ #multiInsertQuery | DELETE FROM multipartIdentifier tableAlias whereClause? #deleteFromTable | UPDATE multipartIdentifier tableAlias setClause whereClause? #updateTable diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala index 1968142a0409f..b813d939fdaae 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/parser/AstBuilder.scala @@ -239,9 +239,7 @@ class AstBuilder extends SqlBaseBaseVisitor[AnyRef] with SQLConfHelper with Logg */ override def visitSingleInsertQuery( ctx: SingleInsertQueryContext): LogicalPlan = withOrigin(ctx) { - withInsertInto( - ctx.insertInto(), - plan(ctx.queryTerm).optionalMap(ctx.queryOrganization)(withQueryResultClauses)) + withInsertInto(ctx.insertInto(), visitQuery(ctx.query)) } /** diff --git a/sql/core/src/test/scala/org/apache/spark/sql/sources/InsertSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/sources/InsertSuite.scala index 73fdf2804b2c6..2b83f9eb0de12 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/sources/InsertSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/sources/InsertSuite.scala @@ -1055,6 +1055,14 @@ class InsertSuite extends DataSourceTest with SharedSparkSession { } } } + + test("SPARK-36980: Insert support query with CTE") { + withTable("t") { + sql("CREATE TABLE t(i int, part1 int, part2 int) using parquet") + sql("INSERT INTO t WITH v1(c1) as (values (1)) select 1, 2,3 from v1") + checkAnswer(spark.table("t"), Row(1, 2, 3)) + } + } } class FileExistingTestFileSystem extends RawLocalFileSystem { From 82f40ba55284065290e0c2aa9dbb9c03e3bd04a7 Mon Sep 17 00:00:00 2001 From: Angerszhuuuu Date: Tue, 12 Oct 2021 17:00:18 +0800 Subject: [PATCH 2/3] update --- docs/sql-ref-syntax-dml-insert-into.md | 4 ++-- docs/sql-ref-syntax-dml-insert-overwrite-directory-hive.md | 4 ++-- docs/sql-ref-syntax-dml-insert-overwrite-directory.md | 4 ++-- docs/sql-ref-syntax-dml-insert-overwrite-table.md | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/sql-ref-syntax-dml-insert-into.md b/docs/sql-ref-syntax-dml-insert-into.md index 1120c6e0a89df..e1c44d1559dcf 100644 --- a/docs/sql-ref-syntax-dml-insert-into.md +++ b/docs/sql-ref-syntax-dml-insert-into.md @@ -61,8 +61,8 @@ INSERT INTO [ TABLE ] table_identifier [ partition_spec ] [ ( column_list ) ] * **query** A query that produces the rows to be inserted. It can be in one of following formats: - * a `SELECT` statement - * a `TABLE` statement + * a [SELECT](sql-ref-syntax-qry-select.html) statement + * a [Inline Table](sql-ref-syntax-qry-select-inline-table.html) statement * a `FROM` statement ### Examples diff --git a/docs/sql-ref-syntax-dml-insert-overwrite-directory-hive.md b/docs/sql-ref-syntax-dml-insert-overwrite-directory-hive.md index 8ed6a3cd1be09..cecb88be32971 100644 --- a/docs/sql-ref-syntax-dml-insert-overwrite-directory-hive.md +++ b/docs/sql-ref-syntax-dml-insert-overwrite-directory-hive.md @@ -54,8 +54,8 @@ INSERT OVERWRITE [ LOCAL ] DIRECTORY directory_path * **query** A query that produces the rows to be inserted. It can be in one of following formats: - * a `SELECT` statement - * a `TABLE` statement + * a [SELECT](sql-ref-syntax-qry-select.html) statement + * a [Inline Table](sql-ref-syntax-qry-select-inline-table.html) statement * a `FROM` statement ### Examples diff --git a/docs/sql-ref-syntax-dml-insert-overwrite-directory.md b/docs/sql-ref-syntax-dml-insert-overwrite-directory.md index fd7437d37c909..c6e743aa910ca 100644 --- a/docs/sql-ref-syntax-dml-insert-overwrite-directory.md +++ b/docs/sql-ref-syntax-dml-insert-overwrite-directory.md @@ -54,8 +54,8 @@ INSERT OVERWRITE [ LOCAL ] DIRECTORY [ directory_path ] * **query** A query that produces the rows to be inserted. It can be in one of following formats: - * a `SELECT` statement - * a `TABLE` statement + * a [SELECT](sql-ref-syntax-qry-select.html) statement + * a [Inline Table](sql-ref-syntax-qry-select-inline-table.html) statement * a `FROM` statement ### Examples diff --git a/docs/sql-ref-syntax-dml-insert-overwrite-table.md b/docs/sql-ref-syntax-dml-insert-overwrite-table.md index 04e2ce5caf843..12cbe766ad588 100644 --- a/docs/sql-ref-syntax-dml-insert-overwrite-table.md +++ b/docs/sql-ref-syntax-dml-insert-overwrite-table.md @@ -63,8 +63,8 @@ INSERT OVERWRITE [ TABLE ] table_identifier [ partition_spec [ IF NOT EXISTS ] ] * **query** A query that produces the rows to be inserted. It can be in one of following formats: - * a `SELECT` statement - * a `TABLE` statement + * a [SELECT](sql-ref-syntax-qry-select.html) statement + * a [Inline Table](sql-ref-syntax-qry-select-inline-table.html) statement * a `FROM` statement ### Examples From 39307baf22568c2627150653a405f89658b03595 Mon Sep 17 00:00:00 2001 From: Angerszhuuuu Date: Tue, 12 Oct 2021 17:00:43 +0800 Subject: [PATCH 3/3] Update InsertSuite.scala --- .../test/scala/org/apache/spark/sql/sources/InsertSuite.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sql/core/src/test/scala/org/apache/spark/sql/sources/InsertSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/sources/InsertSuite.scala index 2b83f9eb0de12..85d325ecd2e85 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/sources/InsertSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/sources/InsertSuite.scala @@ -1059,7 +1059,7 @@ class InsertSuite extends DataSourceTest with SharedSparkSession { test("SPARK-36980: Insert support query with CTE") { withTable("t") { sql("CREATE TABLE t(i int, part1 int, part2 int) using parquet") - sql("INSERT INTO t WITH v1(c1) as (values (1)) select 1, 2,3 from v1") + sql("INSERT INTO t WITH v1(c1) as (values (1)) select 1, 2, 3 from v1") checkAnswer(spark.table("t"), Row(1, 2, 3)) } }