Repository: spark
Updated Branches:
  refs/heads/master 8c13cb2ae -> f6356f9bc


[SPARK-25046][SQL] Fix Alter View can excute sql like "ALTER VIEW ... AS INSERT 
INTO"

## What changes were proposed in this pull request?

Alter View  can excute sql  like "ALTER VIEW ... AS INSERT INTO" . We should 
throw ParseException(s"Operation not allowed: $message", ctx)  as Create View 
does.
 ```
override def visitCreateView(ctx: CreateViewContext): LogicalPlan = 
withOrigin(ctx) {
    if (ctx.identifierList != null) {
      operationNotAllowed("CREATE VIEW ... PARTITIONED ON", ctx)
    } else {
      // CREATE VIEW ... AS INSERT INTO is not allowed.
      ctx.query.queryNoWith match {
        case s: SingleInsertQueryContext if s.insertInto != null =>
          operationNotAllowed("CREATE VIEW ... AS INSERT INTO", ctx)
        case _: MultiInsertQueryContext =>
          operationNotAllowed("CREATE VIEW ... AS FROM ... [INSERT INTO ...]+", 
ctx)
        case _ => // OK
      }
```

```
override def visitAlterViewQuery(ctx: AlterViewQueryContext): LogicalPlan = 
withOrigin(ctx) {
    // ALTER VIEW ... AS INSERT INTO is not allowed.
    ctx.query.queryNoWith match {
      case s: SingleInsertQueryContext if s.insertInto != null =>
        operationNotAllowed("ALTER VIEW ... AS INSERT INTO", ctx)
      case _: MultiInsertQueryContext =>
        operationNotAllowed("ALTER VIEW ... AS FROM ... [INSERT INTO ...]+", 
ctx)
      case _ => // OK
    }
    AlterViewAsCommand(
      name = visitTableIdentifier(ctx.tableIdentifier),
      originalText = source(ctx.query),
      query = plan(ctx.query))
  }
```

## How was this patch tested?

UT has been added in SparkSqlParserSuite

Closes #22028 from sddyljsx/SPARK-25046.

Lead-authored-by: Neal Song <neal_s...@126.com>
Co-authored-by: neal <neal_s...@126.com>
Signed-off-by: Xiao Li <gatorsm...@gmail.com>


Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/f6356f9b
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/f6356f9b
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/f6356f9b

Branch: refs/heads/master
Commit: f6356f9bc0ddcb84827c468a3da677995abe033f
Parents: 8c13cb2
Author: Neal Song <neal_s...@126.com>
Authored: Tue Aug 7 14:51:41 2018 -0700
Committer: Xiao Li <gatorsm...@gmail.com>
Committed: Tue Aug 7 14:51:41 2018 -0700

----------------------------------------------------------------------
 .../org/apache/spark/sql/execution/SparkSqlParser.scala  |  8 ++++++++
 .../apache/spark/sql/execution/SparkSqlParserSuite.scala | 11 +++++++++++
 2 files changed, 19 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/f6356f9b/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkSqlParser.scala
----------------------------------------------------------------------
diff --git 
a/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkSqlParser.scala 
b/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkSqlParser.scala
index 4828fa6..89cb637 100644
--- 
a/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkSqlParser.scala
+++ 
b/sql/core/src/main/scala/org/apache/spark/sql/execution/SparkSqlParser.scala
@@ -1458,6 +1458,14 @@ class SparkSqlAstBuilder(conf: SQLConf) extends 
AstBuilder(conf) {
    * }}}
    */
   override def visitAlterViewQuery(ctx: AlterViewQueryContext): LogicalPlan = 
withOrigin(ctx) {
+    // ALTER VIEW ... AS INSERT INTO is not allowed.
+    ctx.query.queryNoWith match {
+      case s: SingleInsertQueryContext if s.insertInto != null =>
+        operationNotAllowed("ALTER VIEW ... AS INSERT INTO", ctx)
+      case _: MultiInsertQueryContext =>
+        operationNotAllowed("ALTER VIEW ... AS FROM ... [INSERT INTO ...]+", 
ctx)
+      case _ => // OK
+    }
     AlterViewAsCommand(
       name = visitTableIdentifier(ctx.tableIdentifier),
       originalText = source(ctx.query),

http://git-wip-us.apache.org/repos/asf/spark/blob/f6356f9b/sql/core/src/test/scala/org/apache/spark/sql/execution/SparkSqlParserSuite.scala
----------------------------------------------------------------------
diff --git 
a/sql/core/src/test/scala/org/apache/spark/sql/execution/SparkSqlParserSuite.scala
 
b/sql/core/src/test/scala/org/apache/spark/sql/execution/SparkSqlParserSuite.scala
index 107a2f7..28a060a 100644
--- 
a/sql/core/src/test/scala/org/apache/spark/sql/execution/SparkSqlParserSuite.scala
+++ 
b/sql/core/src/test/scala/org/apache/spark/sql/execution/SparkSqlParserSuite.scala
@@ -366,4 +366,15 @@ class SparkSqlParserSuite extends AnalysisTest {
       "SELECT a || b || c FROM t",
       Project(UnresolvedAlias(concat) :: Nil, 
UnresolvedRelation(TableIdentifier("t"))))
   }
+
+  test("SPARK-25046 Fix Alter View ... As Insert Into Table") {
+    // Single insert query
+    intercept("ALTER VIEW testView AS INSERT INTO jt VALUES(1, 1)",
+      "Operation not allowed: ALTER VIEW ... AS INSERT INTO")
+
+    // Multi insert query
+    intercept("ALTER VIEW testView AS FROM jt INSERT INTO tbl1 SELECT * WHERE 
jt.id < 5 " +
+      "INSERT INTO tbl2 SELECT * WHERE jt.id > 4",
+      "Operation not allowed: ALTER VIEW ... AS FROM ... [INSERT INTO ...]+")
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org
For additional commands, e-mail: commits-h...@spark.apache.org

Reply via email to