imback82 commented on a change in pull request #30079:
URL: https://github.com/apache/spark/pull/30079#discussion_r507208340



##########
File path: 
sql/core/src/test/scala/org/apache/spark/sql/connector/TestV2SessionCatalogBase.scala
##########
@@ -74,8 +82,11 @@ private[connector] trait TestV2SessionCatalogBase[T <: 
Table] extends Delegating
   }
 
   def clearTables(): Unit = {
-    assert(!tables.isEmpty, "Tables were empty, maybe didn't use the session 
catalog code path?")

Review comment:
       Now that `withTable` works consistently, this log should be updated.

##########
File path: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/Analyzer.scala
##########
@@ -1091,6 +1095,19 @@ class Analyzer(
     }
   }
 
+  /**
+   * Resolve [[UnresolvedTableOrView]] by replacing it with 
[[NotFoundTableOrView]]
+   * if resolution of table or view is not required.
+   *
+   * This rule should run after [[ResolveRelations]] and [[ResolveTables]] are 
run.

Review comment:
       I remember we shouldn't have a dependency on other rules. I can put 
these into one rule if the current approach is not desired.

##########
File path: 
sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/v2ResolutionPlans.scala
##########
@@ -45,12 +45,25 @@ case class UnresolvedTable(multipartIdentifier: 
Seq[String]) extends LeafNode {
 /**
  * Holds the name of a table or view that has yet to be looked up in a 
catalog. It will
  * be resolved to [[ResolvedTable]] or [[ResolvedView]] during analysis.
+ *
+ * If 'isResolutionRequired' is set to false and the name cannot be resolved 
to a table or view,
+ * [[UnresolvedTableOrView]] will be converted to [[NotFoundTableOrView]].
  */
-case class UnresolvedTableOrView(multipartIdentifier: Seq[String]) extends 
LeafNode {
+case class UnresolvedTableOrView(
+    multipartIdentifier: Seq[String],
+    isResolutionRequired: Boolean = true) extends LeafNode {
   override lazy val resolved: Boolean = false
   override def output: Seq[Attribute] = Nil
 }
 
+/**
+ * Holds the name of a table or view that has been looked up in a catalog, but 
not found.
+ * This is a "resolved" logical.
+ */
+case class NotFoundTableOrView(multipartIdentifier: Seq[String]) extends 
LeafNode {

Review comment:
       @cloud-fan `DROP TABLE` is a bit tricky to handle in the new resolution 
framework because the command has the "ifExists" option. So, even if a 
table/view cannot be resolved, we shouldn't fail if `ifExists` is set to true. 
Please let me know if the current approach is reasonable. Thanks in advance!




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to