@@ -25,9 +25,9 @@ use sqlparser::ast::SelectItem::UnnamedExpr;
25
25
use sqlparser:: ast:: TableFactor :: { Pivot , Unpivot } ;
26
26
use sqlparser:: ast:: * ;
27
27
use sqlparser:: dialect:: {
28
- AnsiDialect , BigQueryDialect , ClickHouseDialect , Dialect , DuckDbDialect , GenericDialect ,
29
- HiveDialect , MsSqlDialect , MySqlDialect , PostgreSqlDialect , RedshiftSqlDialect , SQLiteDialect ,
30
- SnowflakeDialect ,
28
+ AnsiDialect , BigQueryDialect , ClickHouseDialect , DatabricksDialect , Dialect , DuckDbDialect ,
29
+ GenericDialect , HiveDialect , MsSqlDialect , MySqlDialect , PostgreSqlDialect , RedshiftSqlDialect ,
30
+ SQLiteDialect , SnowflakeDialect ,
31
31
} ;
32
32
use sqlparser:: keywords:: ALL_KEYWORDS ;
33
33
use sqlparser:: parser:: { Parser , ParserError , ParserOptions } ;
@@ -9728,3 +9728,52 @@ fn parse_within_group() {
9728
9728
"OVER (PARTITION BY department)" ,
9729
9729
) ) ;
9730
9730
}
9731
+
9732
+ #[ test]
9733
+ fn tests_select_values_without_parens ( ) {
9734
+ let dialects = TestedDialects {
9735
+ dialects : vec ! [
9736
+ Box :: new( GenericDialect { } ) ,
9737
+ Box :: new( SnowflakeDialect { } ) ,
9738
+ Box :: new( DatabricksDialect { } ) ,
9739
+ ] ,
9740
+ options : None ,
9741
+ } ;
9742
+ let sql = "SELECT * FROM VALUES (1, 2), (2,3) AS tbl (id, val)" ;
9743
+ let canonical = "SELECT * FROM (VALUES (1, 2), (2, 3)) AS tbl (id, val)" ;
9744
+ dialects. verified_only_select_with_canonical ( sql, canonical) ;
9745
+ }
9746
+
9747
+ #[ test]
9748
+ fn tests_select_values_without_parens_and_set_op ( ) {
9749
+ let dialects = TestedDialects {
9750
+ dialects : vec ! [
9751
+ Box :: new( GenericDialect { } ) ,
9752
+ Box :: new( SnowflakeDialect { } ) ,
9753
+ Box :: new( DatabricksDialect { } ) ,
9754
+ ] ,
9755
+ options : None ,
9756
+ } ;
9757
+ let sql = "SELECT id + 1, name FROM VALUES (1, 'Apple'), (2, 'Banana'), (3, 'Orange') AS fruits (id, name) UNION ALL SELECT 5, 'Strawberry'" ;
9758
+ let canonical = "SELECT id + 1, name FROM (VALUES (1, 'Apple'), (2, 'Banana'), (3, 'Orange')) AS fruits (id, name) UNION ALL SELECT 5, 'Strawberry'" ;
9759
+ let query = dialects. verified_query_with_canonical ( sql, canonical) ;
9760
+ match * query. body {
9761
+ SetExpr :: SetOperation {
9762
+ op,
9763
+ set_quantifier : _,
9764
+ left,
9765
+ right,
9766
+ } => {
9767
+ assert_eq ! ( SetOperator :: Union , op) ;
9768
+ match * left {
9769
+ SetExpr :: Select ( _) => { }
9770
+ _ => panic ! ( "Expected a SELECT statement" ) ,
9771
+ }
9772
+ match * right {
9773
+ SetExpr :: Select ( _) => { }
9774
+ _ => panic ! ( "Expected a SELECT statement" ) ,
9775
+ }
9776
+ }
9777
+ _ => panic ! ( "Expected a SET OPERATION" ) ,
9778
+ }
9779
+ }
0 commit comments