Skip to content

Commit cf8bbc1

Browse files
imback82cloud-fan
authored andcommitted
[SPARK-34152][SQL][FOLLOW-UP] Global temp view's identifier should be correctly stored
### What changes were proposed in this pull request? This PR proposed to fix a bug introduced in #31273 (https://github.com/apache/spark/pull/31273/files#r589494855). ### Why are the changes needed? This fixes a bug where global temp view's database name was not passed correctly. ### Does this PR introduce _any_ user-facing change? Yes, now the global temp view's database is correctly stored. ### How was this patch tested? Added a new test that catches the bug. Closes #31783 from imback82/SPARK-34152-bug-fix. Authored-by: Terry Kim <[email protected]> Signed-off-by: Wenchen Fan <[email protected]>
1 parent a9c1189 commit cf8bbc1

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

sql/core/src/main/scala/org/apache/spark/sql/execution/command/views.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ case class CreateViewCommand(
154154
originalText))
155155
} else {
156156
TemporaryViewRelation(
157-
prepareTemporaryViewFromDataFrame(name, aliasedPlan),
157+
prepareTemporaryViewFromDataFrame(viewIdent, aliasedPlan),
158158
Some(aliasedPlan))
159159
}
160160
catalog.createGlobalTempView(name.table, tableDefinition, overrideIfExists = replace)

sql/core/src/test/scala/org/apache/spark/sql/execution/SQLViewTestSuite.scala

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package org.apache.spark.sql.execution
1919

2020
import org.apache.spark.sql.{AnalysisException, QueryTest, Row}
21+
import org.apache.spark.sql.catalyst.TableIdentifier
2122
import org.apache.spark.sql.catalyst.plans.logical.Repartition
2223
import org.apache.spark.sql.internal.SQLConf._
2324
import org.apache.spark.sql.test.{SharedSparkSession, SQLTestUtils}
@@ -32,6 +33,7 @@ abstract class SQLViewTestSuite extends QueryTest with SQLTestUtils {
3233

3334
protected def viewTypeString: String
3435
protected def formattedViewName(viewName: String): String
36+
protected def tableIdentifier(viewName: String): TableIdentifier
3537

3638
def createView(
3739
viewName: String,
@@ -293,22 +295,45 @@ abstract class SQLViewTestSuite extends QueryTest with SQLTestUtils {
293295
}
294296
}
295297
}
298+
299+
test("SPARK-34152: view's identifier should be correctly stored") {
300+
Seq(true, false).foreach { storeAnalyzed =>
301+
withSQLConf(STORE_ANALYZED_PLAN_FOR_VIEW.key -> storeAnalyzed.toString) {
302+
val viewName = createView("v", "SELECT 1")
303+
withView(viewName) {
304+
val tblIdent = tableIdentifier("v")
305+
val metadata = spark.sessionState.catalog.getTempViewOrPermanentTableMetadata(tblIdent)
306+
assert(metadata.identifier == tblIdent)
307+
}
308+
}
309+
}
310+
}
296311
}
297312

298313
class LocalTempViewTestSuite extends SQLViewTestSuite with SharedSparkSession {
299314
override protected def viewTypeString: String = "TEMPORARY VIEW"
300315
override protected def formattedViewName(viewName: String): String = viewName
316+
override protected def tableIdentifier(viewName: String): TableIdentifier = {
317+
TableIdentifier(viewName)
318+
}
301319
}
302320

303321
class GlobalTempViewTestSuite extends SQLViewTestSuite with SharedSparkSession {
322+
private def db: String = spark.sharedState.globalTempViewManager.database
304323
override protected def viewTypeString: String = "GLOBAL TEMPORARY VIEW"
305324
override protected def formattedViewName(viewName: String): String = {
306-
val globalTempDB = spark.sharedState.globalTempViewManager.database
307-
s"$globalTempDB.$viewName"
325+
s"$db.$viewName"
326+
}
327+
override protected def tableIdentifier(viewName: String): TableIdentifier = {
328+
TableIdentifier(viewName, Some(db))
308329
}
309330
}
310331

311332
class PersistedViewTestSuite extends SQLViewTestSuite with SharedSparkSession {
333+
private def db: String = "default"
312334
override protected def viewTypeString: String = "VIEW"
313-
override protected def formattedViewName(viewName: String): String = s"default.$viewName"
335+
override protected def formattedViewName(viewName: String): String = s"$db.$viewName"
336+
override protected def tableIdentifier(viewName: String): TableIdentifier = {
337+
TableIdentifier(viewName, Some(db))
338+
}
314339
}

0 commit comments

Comments
 (0)