flyrain commented on a change in pull request #4396:
URL: https://github.com/apache/iceberg/pull/4396#discussion_r835794566



##########
File path: 
spark/v3.2/spark-extensions/src/main/scala/org/apache/spark/sql/catalyst/parser/extensions/IcebergSparkSqlExtensionsParser.scala
##########
@@ -176,7 +176,12 @@ class IcebergSparkSqlExtensionsParser(delegate: 
ParserInterface) extends ParserI
   }
 
   private def isIcebergCommand(sqlText: String): Boolean = {
-    val normalized = 
sqlText.toLowerCase(Locale.ROOT).trim().replaceAll("\\s+", " ")
+    val normalized = sqlText.toLowerCase(Locale.ROOT).trim()
+      // Catch all SQL comments, including simple comments (that start with 
--), as well as multiline comments
+      .replaceAll("(?ms)/\\*.*?\\*/|--.*?\\n", " ")
+      // Replace any remaining newlines
+      .replaceAll("\\s+", " ")
+      .trim()

Review comment:
       Thanks for the explain. Sorry, I miss that point. But I see another 
issue here. The method `isIcebergCommand` isn't reliable. For example, you can 
have a statement like this. 
   ```
   alter table table_name SET TBLPROPERTIES ('key1' = 'add partition field')
   ```
   It isn't an Iceberg command, but `isIcebergCommand` will return true since 
it just searches for the string `add partition field`.
   
   One solution is to use the parser to get all tokens first, then decide if it 
is an Iceberg command.
   




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