diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/views.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/views.scala index a7631eee4e8ee..5a63965e1eee8 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/views.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/views.scala @@ -154,7 +154,7 @@ case class CreateViewCommand( originalText)) } else { TemporaryViewRelation( - prepareTemporaryViewFromDataFrame(name, aliasedPlan), + prepareTemporaryViewFromDataFrame(viewIdent, aliasedPlan), Some(aliasedPlan)) } catalog.createGlobalTempView(name.table, tableDefinition, overrideIfExists = replace) diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/SQLViewTestSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/SQLViewTestSuite.scala index 88218b1865882..bbb661568d408 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/SQLViewTestSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/SQLViewTestSuite.scala @@ -18,6 +18,7 @@ package org.apache.spark.sql.execution import org.apache.spark.sql.{AnalysisException, QueryTest, Row} +import org.apache.spark.sql.catalyst.TableIdentifier import org.apache.spark.sql.catalyst.plans.logical.Repartition import org.apache.spark.sql.internal.SQLConf._ import org.apache.spark.sql.test.{SharedSparkSession, SQLTestUtils} @@ -32,6 +33,7 @@ abstract class SQLViewTestSuite extends QueryTest with SQLTestUtils { protected def viewTypeString: String protected def formattedViewName(viewName: String): String + protected def tableIdentifier(viewName: String): TableIdentifier def createView( viewName: String, @@ -293,22 +295,45 @@ abstract class SQLViewTestSuite extends QueryTest with SQLTestUtils { } } } + + test("SPARK-34152: view's identifier should be correctly stored") { + Seq(true, false).foreach { storeAnalyzed => + withSQLConf(STORE_ANALYZED_PLAN_FOR_VIEW.key -> storeAnalyzed.toString) { + val viewName = createView("v", "SELECT 1") + withView(viewName) { + val tblIdent = tableIdentifier("v") + val metadata = spark.sessionState.catalog.getTempViewOrPermanentTableMetadata(tblIdent) + assert(metadata.identifier == tblIdent) + } + } + } + } } class LocalTempViewTestSuite extends SQLViewTestSuite with SharedSparkSession { override protected def viewTypeString: String = "TEMPORARY VIEW" override protected def formattedViewName(viewName: String): String = viewName + override protected def tableIdentifier(viewName: String): TableIdentifier = { + TableIdentifier(viewName) + } } class GlobalTempViewTestSuite extends SQLViewTestSuite with SharedSparkSession { + private def db: String = spark.sharedState.globalTempViewManager.database override protected def viewTypeString: String = "GLOBAL TEMPORARY VIEW" override protected def formattedViewName(viewName: String): String = { - val globalTempDB = spark.sharedState.globalTempViewManager.database - s"$globalTempDB.$viewName" + s"$db.$viewName" + } + override protected def tableIdentifier(viewName: String): TableIdentifier = { + TableIdentifier(viewName, Some(db)) } } class PersistedViewTestSuite extends SQLViewTestSuite with SharedSparkSession { + private def db: String = "default" override protected def viewTypeString: String = "VIEW" - override protected def formattedViewName(viewName: String): String = s"default.$viewName" + override protected def formattedViewName(viewName: String): String = s"$db.$viewName" + override protected def tableIdentifier(viewName: String): TableIdentifier = { + TableIdentifier(viewName, Some(db)) + } }