diff --git a/sql/core/src/main/scala/org/apache/spark/sql/internal/CatalogImpl.scala b/sql/core/src/main/scala/org/apache/spark/sql/internal/CatalogImpl.scala index d817fed529a5a..125a597a21e6f 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/internal/CatalogImpl.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/internal/CatalogImpl.scala @@ -396,8 +396,13 @@ class CatalogImpl(sparkSession: SparkSession) extends Catalog { */ override def dropTempView(viewName: String): Boolean = { sparkSession.sessionState.catalog.getTempView(viewName).exists { viewDef => - sparkSession.sharedState.cacheManager.uncacheQuery( - sparkSession, viewDef, cascade = false) + try { + val plan = sparkSession.sessionState.executePlan(viewDef) + sparkSession.sharedState.cacheManager.uncacheQuery( + sparkSession, plan.analyzed, cascade = false) + } catch { + case NonFatal(_) => // ignore + } sessionCatalog.dropTempView(viewName) } } @@ -412,8 +417,13 @@ class CatalogImpl(sparkSession: SparkSession) extends Catalog { */ override def dropGlobalTempView(viewName: String): Boolean = { sparkSession.sessionState.catalog.getGlobalTempView(viewName).exists { viewDef => - sparkSession.sharedState.cacheManager.uncacheQuery( - sparkSession, viewDef, cascade = false) + try { + val plan = sparkSession.sessionState.executePlan(viewDef) + sparkSession.sharedState.cacheManager.uncacheQuery( + sparkSession, plan.analyzed, cascade = false) + } catch { + case NonFatal(_) => // ignore + } sessionCatalog.dropGlobalTempView(viewName) } } diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/hive/CachedTableSuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/hive/CachedTableSuite.scala index 7044e6ff78d4a..fea9951ad27c1 100644 --- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/CachedTableSuite.scala +++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/CachedTableSuite.scala @@ -452,4 +452,28 @@ class CachedTableSuite extends QueryTest with SQLTestUtils with TestHiveSingleto } } } + + test("SPARK-34076: should be able to drop temp view with cached tables") { + val t = "cachedTable" + val v = "tempView" + withTable(t) { + withTempView(v) { + sql(s"CREATE TEMPORARY VIEW $v AS SELECT key FROM src LIMIT 10") + sql(s"CREATE TABLE $t AS SELECT * FROM src") + sql(s"CACHE TABLE $t") + } + } + } + + test("SPARK-34076: should be able to drop global temp view with cached tables") { + val t = "cachedTable" + val v = "globalTempView" + withTable(t) { + withGlobalTempView(v) { + sql(s"CREATE GLOBAL TEMPORARY VIEW $v AS SELECT key FROM src LIMIT 10") + sql(s"CREATE TABLE $t AS SELECT * FROM src") + sql(s"CACHE TABLE $t") + } + } + } }