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