mirror of
https://github.com/grafana/grafana.git
synced 2025-07-30 23:42:10 +08:00
SQL Expressions: Allow more MySQL AST node-types (#102973)
* SQL Expressions: Add Null-literal node * Retain some order in the code - put NullVal with BoolVal * Add support for `IN` keyword * Add GROUP_CONCAT keyword * Add COLLATE keyword From Claude: The test case demonstrates a simple use of COLLATE with a string literal, but in real MySQL queries, COLLATE is often used in more complex scenarios like: 1. String comparisons: `SELECT * FROM table WHERE name COLLATE utf8mb4_bin = 'John'` 2. Sorting: `SELECT * FROM table ORDER BY name COLLATE utf8mb4_unicode_ci` 3. JOINs: `SELECT * FROM table1 JOIN table2 ON table1.name COLLATE utf8mb4_bin = table2.name` The COLLATE clause is particularly useful when you need case-sensitive comparisons (utf8mb4_bin) or specific language-aware sorting rules.
This commit is contained in:
@ -60,7 +60,7 @@ func allowedNode(node sqlparser.SQLNode) (b bool) {
|
||||
case *sqlparser.BinaryExpr, *sqlparser.UnaryExpr:
|
||||
return
|
||||
|
||||
case sqlparser.BoolVal:
|
||||
case sqlparser.BoolVal, *sqlparser.NullVal:
|
||||
return
|
||||
|
||||
case *sqlparser.CaseExpr, *sqlparser.When:
|
||||
@ -81,6 +81,15 @@ func allowedNode(node sqlparser.SQLNode) (b bool) {
|
||||
case *sqlparser.ConvertExpr, *sqlparser.ConvertType:
|
||||
return
|
||||
|
||||
case *sqlparser.CollateExpr:
|
||||
return
|
||||
|
||||
case sqlparser.Exprs:
|
||||
return
|
||||
|
||||
case *sqlparser.GroupConcatExpr:
|
||||
return
|
||||
|
||||
case sqlparser.GroupBy:
|
||||
return
|
||||
|
||||
@ -132,6 +141,9 @@ func allowedNode(node sqlparser.SQLNode) (b bool) {
|
||||
case *sqlparser.TrimExpr:
|
||||
return
|
||||
|
||||
case sqlparser.ValTuple:
|
||||
return
|
||||
|
||||
case *sqlparser.With:
|
||||
return
|
||||
|
||||
|
Reference in New Issue
Block a user