diff --git a/spark/src/main/scala/org/apache/spark/sql/delta/catalog/AbstractDeltaCatalog.scala b/spark/src/main/scala/org/apache/spark/sql/delta/catalog/AbstractDeltaCatalog.scala index 12bcfaf8cce..1b0b59b95ea 100644 --- a/spark/src/main/scala/org/apache/spark/sql/delta/catalog/AbstractDeltaCatalog.scala +++ b/spark/src/main/scala/org/apache/spark/sql/delta/catalog/AbstractDeltaCatalog.scala @@ -374,13 +374,17 @@ class AbstractDeltaCatalog extends DelegatingCatalogExtension .map(_.loadTable(ident)) .getOrElse(super.loadTable(ident)) - ServerSidePlannedTable.tryCreate(spark, ident, table, isUnityCatalog).foreach { sspt => - return sspt - } - table match { case v1: V1Table if DeltaTableUtils.isDeltaTable(v1.catalogTable) => - loadCatalogTable(ident, v1.catalogTable) + // Server-side planning only applies to Delta tables. Attempt it here, inside the + // Delta-`V1Table` branch, rather than on every loaded table: a non-Delta table or a + // catalog-specific shape (e.g. Unity Catalog's `MetadataTable` wrapping a `ViewInfo` + // for a metric view) must flow through the `case o => o` fallthrough unchanged so the + // resolver can route it correctly. Capturing those in `ServerSidePlannedTable.tryCreate` + // would short-circuit view loading. + ServerSidePlannedTable + .tryCreate(spark, ident, table, isUnityCatalog) + .getOrElse(loadCatalogTable(ident, v1.catalogTable)) case o => o } } catch { diff --git a/spark/src/test/scala/org/apache/spark/sql/delta/serverSidePlanning/ServerSidePlannedTableSuite.scala b/spark/src/test/scala/org/apache/spark/sql/delta/serverSidePlanning/ServerSidePlannedTableSuite.scala index 231ea7493ed..ab035bda505 100644 --- a/spark/src/test/scala/org/apache/spark/sql/delta/serverSidePlanning/ServerSidePlannedTableSuite.scala +++ b/spark/src/test/scala/org/apache/spark/sql/delta/serverSidePlanning/ServerSidePlannedTableSuite.scala @@ -36,7 +36,7 @@ class ServerSidePlannedTableSuite extends QueryTest with DeltaSQLCommandTest { name STRING, value INT, a STRUCT<`b.c`: STRING> - ) USING parquet + ) USING delta """) sql(""" INSERT INTO test_db.shared_test (id, name, value, a) VALUES @@ -222,7 +222,7 @@ class ServerSidePlannedTableSuite extends QueryTest with DeltaSQLCommandTest { CREATE TABLE readonly_test ( id INT, data STRING - ) USING parquet + ) USING delta """) // First insert WITHOUT server-side planning should succeed