This is an automated email from the ASF dual-hosted git repository. wenchen pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/master by this push: new 0cc96f76d8a [SPARK-39810][SQL] Catalog.tableExists should handle nested namespace 0cc96f76d8a is described below commit 0cc96f76d8a4858aee09e1fa32658da3ae76d384 Author: Rui Wang <rui.w...@databricks.com> AuthorDate: Wed Jul 20 11:18:34 2022 +0800 [SPARK-39810][SQL] Catalog.tableExists should handle nested namespace ### What changes were proposed in this pull request? Let CatalogImpl.tableExists to reuse CatalogImpl.getTable code. ### Why are the changes needed? Currently `tableExists` assume input is only have 3 name parts which is wrong assumption (namespace could be an array). The `getTable` implementation is correct. So we can re-use `getTable` code and if the getTable succeeds, then `tableExists` can return true. ### Does this PR introduce _any_ user-facing change? No ### How was this patch tested? UT Closes #37220 from amaliujia/SPARK-39810. Authored-by: Rui Wang <rui.w...@databricks.com> Signed-off-by: Wenchen Fan <wenc...@databricks.com> --- .../scala/org/apache/spark/sql/internal/CatalogImpl.scala | 12 ++++-------- .../scala/org/apache/spark/sql/internal/CatalogSuite.scala | 12 ++++++++++++ 2 files changed, 16 insertions(+), 8 deletions(-) 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 8ca11f620a5..e11b349777e 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 @@ -28,7 +28,7 @@ import org.apache.spark.sql.catalyst.catalog._ import org.apache.spark.sql.catalyst.encoders.ExpressionEncoder import org.apache.spark.sql.catalyst.plans.logical.{CreateTable, LocalRelation, RecoverPartitions, ShowFunctions, ShowNamespaces, ShowTables, SubqueryAlias, TableSpec, View} import org.apache.spark.sql.catalyst.util.CharVarcharUtils -import org.apache.spark.sql.connector.catalog.{CatalogManager, CatalogPlugin, Identifier, SupportsNamespaces, TableCatalog} +import org.apache.spark.sql.connector.catalog.{CatalogManager, CatalogPlugin, SupportsNamespaces, TableCatalog} import org.apache.spark.sql.connector.catalog.CatalogV2Implicits.{CatalogHelper, IdentifierHelper, MultipartIdentifierHelper, TransformHelper} import org.apache.spark.sql.errors.QueryCompilationErrors import org.apache.spark.sql.execution.datasources.{DataSource, LogicalRelation} @@ -493,14 +493,10 @@ class CatalogImpl(sparkSession: SparkSession) extends Catalog { */ override def tableExists(tableName: String): Boolean = { try { - val tableIdent = sparkSession.sessionState.sqlParser.parseTableIdentifier(tableName) - tableExists(tableIdent.database.orNull, tableIdent.table) + getTable(tableName) + true } catch { - case e: org.apache.spark.sql.catalyst.parser.ParseException => - val ident = sparkSession.sessionState.sqlParser.parseMultipartIdentifier(tableName) - val catalog = - sparkSession.sessionState.catalogManager.catalog(ident(0)).asTableCatalog - catalog.tableExists(Identifier.of(Array(ident(1)), ident(2))) + case e: AnalysisException => false } } diff --git a/sql/core/src/test/scala/org/apache/spark/sql/internal/CatalogSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/internal/CatalogSuite.scala index f3133026836..0de48325d98 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/internal/CatalogSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/internal/CatalogSuite.scala @@ -122,6 +122,7 @@ class CatalogSuite extends SharedSparkSession with AnalysisTest with BeforeAndAf override def afterEach(): Unit = { try { sessionCatalog.reset() + spark.sessionState.catalogManager.reset() } finally { super.afterEach() } @@ -769,6 +770,17 @@ class CatalogSuite extends SharedSparkSession with AnalysisTest with BeforeAndAf assert(spark.catalog.tableExists(Array(catalogName, dbName, tableName).mkString("."))) } + test("SPARK-39810: Catalog.tableExists should handle nested namespace") { + val tableSchema = new StructType().add("i", "int") + val catalogName = "testcat" + val dbName = "my_db2.my_db3" + val tableName = "my_table2" + assert(!spark.catalog.tableExists(Array(catalogName, dbName, tableName).mkString("."))) + createTable(tableName, dbName, catalogName, classOf[FakeV2Provider].getName, tableSchema, + Map.empty[String, String], "") + assert(spark.catalog.tableExists(Array(catalogName, dbName, tableName).mkString("."))) + } + test("three layer namespace compatibility - database exists") { val catalogName = "testcat" val dbName = "my_db" --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org For additional commands, e-mail: commits-h...@spark.apache.org