panbingkun commented on code in PR #47364:
URL: https://github.com/apache/spark/pull/47364#discussion_r1751388958


##########
sql/core/src/main/scala/org/apache/spark/sql/execution/SparkSqlParser.scala:
##########
@@ -1112,4 +1112,29 @@ class SparkSqlAstBuilder extends AstBuilder {
       withIdentClause(ctx.identifierReference(), UnresolvedNamespace(_)),
       cleanedProperties)
   }
+
+  /**
+   * Create a [[ShowCollationsCommand]] command.
+   * Expected format:
+   * {{{
+   *   SHOW identifier? COLLATIONS ((FROM | IN) ns=identifierReference)? 
(LIKE? pattern=stringLit);
+   * }}}
+   */
+  override def visitShowCollations(ctx: ShowCollationsContext): LogicalPlan = 
withOrigin(ctx) {
+    val ns = if (ctx.ns != null) {
+      withIdentClause(ctx.ns, UnresolvedNamespace(_))
+    } else {
+      CurrentNamespace
+    }
+    val (userScope, systemScope) = Option(ctx.identifier)
+      .map(_.getText.toLowerCase(Locale.ROOT)) match {
+      case None | Some("all") => (true, true)
+      case Some("system") => (false, true)
+      case Some("user") =>
+        throw QueryParsingErrors.showCollationsUnsupportedError("user", 
ctx.identifier())

Review Comment:
   Which of the following is more in line with what you want to think?
   
   - Option 1
   ```scala
   /**
      * Create a [[ShowCollationsCommand]] command.
      * Expected format:
      * {{{
      *   SHOW COLLATIONS ((FROM | IN) ns=identifierReference)? (LIKE? 
pattern=stringLit)?;
      * }}}
      */
     override def visitShowCollations(ctx: ShowCollationsContext): LogicalPlan 
= withOrigin(ctx) {
       val ns = if (ctx.ns != null) {
         withIdentClause(ctx.ns, UnresolvedNamespace(_))
       } else {
         CurrentNamespace
       }
       val pattern = Option(ctx.pattern).map(x => string(visitStringLit(x)))
       ShowCollationsCommand(ns, userScope = false, systemScope = true, pattern)
     }
   ```
   
   - Option 2
   ```scala
   /**
      * Create a [[ShowCollationsCommand]] command.
      * Expected format:
      * {{{
      *   SHOW COLLATIONS (LIKE? pattern=stringLit)?;
      * }}}
      */
     override def visitShowCollations(ctx: ShowCollationsContext): LogicalPlan 
= withOrigin(ctx) {
       val ns = if (ctx.ns != null) {
         withIdentClause(ctx.ns, UnresolvedNamespace(_))
       } else {
         CurrentNamespace
       }
       val pattern = Option(ctx.pattern).map(x => string(visitStringLit(x)))
       ShowCollationsCommand(ns, pattern)
     }
   ```
   
   - Option 3
   ```scala
   /**
      * Create a [[ShowCollationsCommand]] command.
      * Expected format:
      * {{{
      *   SHOW COLLATIONS (LIKE? pattern=stringLit)?;
      * }}}
      */
     override def visitShowCollations(ctx: ShowCollationsContext): LogicalPlan 
= withOrigin(ctx) {
       val pattern = Option(ctx.pattern).map(x => string(visitStringLit(x)))
       ShowCollationsCommand(pattern)
     }
   ```



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