@@ -25,9 +25,9 @@ use sqlparser::ast::SelectItem::UnnamedExpr;
2525use sqlparser:: ast:: TableFactor :: { Pivot , Unpivot } ;
2626use sqlparser:: ast:: * ;
2727use 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 ,
3131} ;
3232use sqlparser:: keywords:: ALL_KEYWORDS ;
3333use sqlparser:: parser:: { Parser , ParserError , ParserOptions } ;
@@ -9658,3 +9658,52 @@ fn test_dictionary_syntax() {
96589658 ] ) ,
96599659 )
96609660}
9661+
9662+ #[ test]
9663+ fn tests_select_values_without_parens ( ) {
9664+ let dialects = TestedDialects {
9665+ dialects : vec ! [
9666+ Box :: new( GenericDialect { } ) ,
9667+ Box :: new( SnowflakeDialect { } ) ,
9668+ Box :: new( DatabricksDialect { } ) ,
9669+ ] ,
9670+ options : None ,
9671+ } ;
9672+ let sql = "SELECT * FROM VALUES (1, 2), (2,3) AS tbl (id, val)" ;
9673+ let canonical = "SELECT * FROM (VALUES (1, 2), (2, 3)) AS tbl (id, val)" ;
9674+ dialects. verified_only_select_with_canonical ( sql, canonical) ;
9675+ }
9676+
9677+ #[ test]
9678+ fn tests_select_values_without_parens_and_set_op ( ) {
9679+ let dialects = TestedDialects {
9680+ dialects : vec ! [
9681+ Box :: new( GenericDialect { } ) ,
9682+ Box :: new( SnowflakeDialect { } ) ,
9683+ Box :: new( DatabricksDialect { } ) ,
9684+ ] ,
9685+ options : None ,
9686+ } ;
9687+ let sql = "SELECT id + 1, name FROM VALUES (1, 'Apple'), (2, 'Banana'), (3, 'Orange') AS fruits (id, name) UNION ALL SELECT 5, 'Strawberry'" ;
9688+ let canonical = "SELECT id + 1, name FROM (VALUES (1, 'Apple'), (2, 'Banana'), (3, 'Orange')) AS fruits (id, name) UNION ALL SELECT 5, 'Strawberry'" ;
9689+ let query = dialects. verified_query_with_canonical ( sql, canonical) ;
9690+ match * query. body {
9691+ SetExpr :: SetOperation {
9692+ op,
9693+ set_quantifier : _,
9694+ left,
9695+ right,
9696+ } => {
9697+ assert_eq ! ( SetOperator :: Union , op) ;
9698+ match * left {
9699+ SetExpr :: Select ( _) => { }
9700+ _ => panic ! ( "Expected a SELECT statement" ) ,
9701+ }
9702+ match * right {
9703+ SetExpr :: Select ( _) => { }
9704+ _ => panic ! ( "Expected a SELECT statement" ) ,
9705+ }
9706+ }
9707+ _ => panic ! ( "Expected a SET OPERATION" ) ,
9708+ }
9709+ }
0 commit comments