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


##########
sql/catalyst/src/main/scala/org/apache/spark/sql/connector/catalog/CatalogManager.scala:
##########
@@ -349,4 +350,45 @@ private[sql] object CatalogManager {
     compact(JArray(entries.map(parts =>
       JArray(parts.map(JString(_)).toList)).toList))
   }
+
+  /**
+   * Parse a stored frozen path string from view/function metadata.
+   * Returns None if the payload is malformed.
+   */
+  def deserializePathEntries(storedPathStr: String): Option[Seq[Seq[String]]] 
= {
+    import org.json4s.JsonAST.{JArray, JString}
+    import org.json4s.jackson.JsonMethods.parse
+
+    Try(parse(storedPathStr)).toOption match {
+      case Some(JArray(entries)) =>
+        entries.foldLeft(Option(Seq.empty[Seq[String]])) { (acc, entry) =>
+          acc.flatMap { collected =>
+            entry match {
+              case JArray(parts) =>
+                val strings = parts.collect { case JString(s) => s }
+                if (strings.size == parts.size) Some(collected :+ strings)
+                else {
+                  logWarning(
+                    s"Invalid stored SQL path metadata: expected string parts 
in array entry: " +
+                      s"$storedPathStr")
+                  None
+                }
+              case _ =>
+                logWarning(
+                  s"Invalid stored SQL path metadata: expected array entry but 
found non-array: " +
+                    s"$storedPathStr")
+                None
+            }
+          }
+        }
+      case Some(_) =>
+        logWarning(
+          s"Invalid stored SQL path metadata: expected top-level JSON array: 
$storedPathStr")
+        None
+      case None =>
+        logWarning(
+          s"Invalid stored SQL path metadata: failed to parse JSON payload: 
$storedPathStr")
+        None

Review Comment:
   Follow-up: we changed course and implemented fail-loud behavior in 
a9ce5a50334. Malformed persisted SQL PATH metadata for views/functions now 
throws AnalysisException instead of silently falling back, and we added 
regression tests for both cases.



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