diff --git a/pkg/expr/sql/parser_allow.go b/pkg/expr/sql/parser_allow.go index 21573b179e1..f19f1bc4e63 100644 --- a/pkg/expr/sql/parser_allow.go +++ b/pkg/expr/sql/parser_allow.go @@ -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 diff --git a/pkg/expr/sql/parser_allow_test.go b/pkg/expr/sql/parser_allow_test.go index 31b777edac2..36aca7b0c27 100644 --- a/pkg/expr/sql/parser_allow_test.go +++ b/pkg/expr/sql/parser_allow_test.go @@ -42,6 +42,26 @@ func TestAllowQuery(t *testing.T) { q: `SELECT * FROM a_table WHERE a_column IS NOT NULL`, err: nil, }, + { + name: "null literal", + q: `SELECT 1 as id, NULL as null_col`, + err: nil, + }, + { + name: "val tuple in read query", + q: `SELECT 1 WHERE 1 IN (1, 2, 3)`, + err: nil, + }, + { + name: "group concat in read query", + q: `SELECT 1 as id, GROUP_CONCAT('will_', 'concatenate') as concat_val`, + err: nil, + }, + { + name: "collate in read query", + q: `SELECT 'some text' COLLATE utf8mb4_bin`, + err: nil, + }, } for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) {