srielau commented on code in PR #55717:
URL: https://github.com/apache/spark/pull/55717#discussion_r3196683245


##########
sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala:
##########
@@ -2471,6 +2471,18 @@ object SQLConf {
       .booleanConf
       .createWithDefault(false)
 
+  val DEFAULT_PATH =
+    buildConf("spark.sql.defaultPath")
+      .version("4.2.0")
+      .doc("Default SQL PATH used when no SET PATH has been issued in the 
session, and the " +
+        "value SET PATH = DEFAULT_PATH expands to. Accepts the full SET PATH 
grammar; an inner " +
+        "DEFAULT_PATH token resolves to the spark-builtin default ordering. 
When empty, the " +
+        "spark-builtin default ordering controlled by " +
+        "[[SESSION_FUNCTION_RESOLUTION_ORDER]] applies.")

Review Comment:
   test 2477-2481



##########
sql/catalyst/src/main/scala/org/apache/spark/sql/connector/catalog/CatalogManager.scala:
##########
@@ -52,6 +53,38 @@ class CatalogManager(
   // TODO: create a real SYSTEM catalog to host `TempVariableManager` under 
the SESSION namespace.
   val tempVariableManager: TempVariableManager = new TempVariableManager
 
+  // Wire the path-driven kinds provider into SessionCatalog so the 
function-resolution loop
+  // and the security check that blocks temp functions from shadowing builtins 
read the live
+  // SQL PATH (post-`SET PATH`, with `DEFAULT_PATH` and `defaultPathOrder` 
fallbacks already
+  // applied) instead of the legacy 
[[SQLConf.SESSION_FUNCTION_RESOLUTION_ORDER]] proxy.
+  // Order is every `system.builtin` / `system.session` entry on the PATH in 
path order
+  // (user-catalog segments in between are skipped for this list).

Review Comment:
   test 60-61



##########
sql/catalyst/src/main/scala/org/apache/spark/sql/connector/catalog/CatalogManager.scala:
##########
@@ -52,6 +53,38 @@ class CatalogManager(
   // TODO: create a real SYSTEM catalog to host `TempVariableManager` under 
the SESSION namespace.
   val tempVariableManager: TempVariableManager = new TempVariableManager
 
+  // Wire the path-driven kinds provider into SessionCatalog so the 
function-resolution loop
+  // and the security check that blocks temp functions from shadowing builtins 
read the live
+  // SQL PATH (post-`SET PATH`, with `DEFAULT_PATH` and `defaultPathOrder` 
fallbacks already
+  // applied) instead of the legacy 
[[SQLConf.SESSION_FUNCTION_RESOLUTION_ORDER]] proxy.
+  // Order is every `system.builtin` / `system.session` entry on the PATH in 
path order
+  // (user-catalog segments in between are skipped for this list).
+  v1SessionCatalog.sessionFunctionKindsProvider = () => 
leadingSystemFunctionKinds()
+
+  /**
+   * Walk the effective SQL PATH and collect every system function namespace 
entry
+   * (`system.builtin` / `system.session`) in path order, mapped to
+   * [[SessionCatalog.SessionFunctionKind]].
+   *
+   * User-catalog entries (e.g. `spark_catalog.default`) appear on the PATH 
before
+   * `system.builtin` / `system.session`; they must not hide later system 
entries.
+   * Unqualified builtin/temp resolution follows this ordered kind list via
+   * 
[[org.apache.spark.sql.catalyst.catalog.SessionCatalog.lookupFunctionWithShadowing]].
+   *
+   * When no system entries appear on the PATH (user-defined path without 
builtins/session),
+   * falls back to builtin-then-session so bare names still resolve like the 
legacy default.
+   */
+  private def leadingSystemFunctionKinds(): 
Seq[SessionCatalog.SessionFunctionKind] = {
+    val path = sqlResolutionPathEntries(currentCatalog.name(), 
currentNamespace.toSeq)
+    val kinds = path.flatMap { e =>
+      if (CatalogManager.isSystemBuiltinPathEntry(e)) 
Some(SessionCatalog.Builtin)
+      else if (CatalogManager.isSystemSessionPathEntry(e)) 
Some(SessionCatalog.Temp)
+      else None
+    }
+    if (kinds.nonEmpty) kinds
+    else Seq(SessionCatalog.Builtin, SessionCatalog.Temp)

Review Comment:
   test 84-85



##########
sql/catalyst/src/main/scala/org/apache/spark/sql/internal/SQLConf.scala:
##########
@@ -2471,6 +2471,18 @@ object SQLConf {
       .booleanConf
       .createWithDefault(false)
 
+  val DEFAULT_PATH =
+    buildConf("spark.sql.defaultPath")
+      .version("4.2.0")
+      .doc("Default SQL PATH used when no SET PATH has been issued in the 
session, and the " +
+        "value SET PATH = DEFAULT_PATH expands to. Accepts the full SET PATH 
grammar; an inner " +
+        "DEFAULT_PATH token resolves to the spark-builtin default ordering. 
When empty, the " +
+        "spark-builtin default ordering controlled by " +
+        "[[SESSION_FUNCTION_RESOLUTION_ORDER]] applies.")

Review Comment:
   test 2477-2481



-- 
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.

To unsubscribe, e-mail: [email protected]

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