@@ -253,8 +253,15 @@ fn parse_insert_default_values() {
253
253
254
254
#[ test]
255
255
fn parse_insert_select_returning ( ) {
256
- verified_stmt ( "INSERT INTO t SELECT 1 RETURNING 2" ) ;
257
- let stmt = verified_stmt ( "INSERT INTO t SELECT x RETURNING x AS y" ) ;
256
+ // Dialects that support `RETURNING` as a column identifier do
257
+ // not support this syntax.
258
+ let dialects = all_dialects_where ( |d| {
259
+ d. get_reserved_keywords_for_column_identifier ( )
260
+ . contains ( & Keyword :: RETURNING )
261
+ } ) ;
262
+
263
+ dialects. verified_stmt ( "INSERT INTO t SELECT 1 RETURNING 2" ) ;
264
+ let stmt = dialects. verified_stmt ( "INSERT INTO t SELECT x RETURNING x AS y" ) ;
258
265
match stmt {
259
266
Statement :: Insert ( Insert {
260
267
returning : Some ( ret) ,
@@ -6897,9 +6904,6 @@ fn parse_union_except_intersect_minus() {
6897
6904
verified_stmt ( "SELECT 1 EXCEPT SELECT 2" ) ;
6898
6905
verified_stmt ( "SELECT 1 EXCEPT ALL SELECT 2" ) ;
6899
6906
verified_stmt ( "SELECT 1 EXCEPT DISTINCT SELECT 1" ) ;
6900
- verified_stmt ( "SELECT 1 MINUS SELECT 2" ) ;
6901
- verified_stmt ( "SELECT 1 MINUS ALL SELECT 2" ) ;
6902
- verified_stmt ( "SELECT 1 MINUS DISTINCT SELECT 1" ) ;
6903
6907
verified_stmt ( "SELECT 1 INTERSECT SELECT 2" ) ;
6904
6908
verified_stmt ( "SELECT 1 INTERSECT ALL SELECT 2" ) ;
6905
6909
verified_stmt ( "SELECT 1 INTERSECT DISTINCT SELECT 1" ) ;
@@ -6918,6 +6922,16 @@ fn parse_union_except_intersect_minus() {
6918
6922
verified_stmt ( "SELECT 1 AS x, 2 AS y INTERSECT BY NAME SELECT 9 AS y, 8 AS x" ) ;
6919
6923
verified_stmt ( "SELECT 1 AS x, 2 AS y INTERSECT ALL BY NAME SELECT 9 AS y, 8 AS x" ) ;
6920
6924
verified_stmt ( "SELECT 1 AS x, 2 AS y INTERSECT DISTINCT BY NAME SELECT 9 AS y, 8 AS x" ) ;
6925
+
6926
+ // Dialects that support `MINUS` as column identifier
6927
+ // do not support `MINUS` as a set operator.
6928
+ let dialects = all_dialects_where ( |d| {
6929
+ d. get_reserved_keywords_for_column_identifier ( )
6930
+ . contains ( & Keyword :: MINUS )
6931
+ } ) ;
6932
+ dialects. verified_stmt ( "SELECT 1 MINUS SELECT 2" ) ;
6933
+ dialects. verified_stmt ( "SELECT 1 MINUS ALL SELECT 2" ) ;
6934
+ dialects. verified_stmt ( "SELECT 1 MINUS DISTINCT SELECT 1" ) ;
6921
6935
}
6922
6936
6923
6937
#[ test]
@@ -7594,19 +7608,28 @@ fn parse_invalid_subquery_without_parens() {
7594
7608
7595
7609
#[ test]
7596
7610
fn parse_offset ( ) {
7611
+ // Dialects that support `OFFSET` as column identifiers
7612
+ // don't support this syntax.
7613
+ let dialects = all_dialects_where ( |d| {
7614
+ d. get_reserved_keywords_for_column_identifier ( )
7615
+ . contains ( & Keyword :: OFFSET )
7616
+ } ) ;
7617
+
7597
7618
let expect = Some ( Offset {
7598
7619
value : Expr :: Value ( number ( "2" ) ) ,
7599
7620
rows : OffsetRows :: Rows ,
7600
7621
} ) ;
7601
- let ast = verified_query ( "SELECT foo FROM bar OFFSET 2 ROWS" ) ;
7622
+ let ast = dialects . verified_query ( "SELECT foo FROM bar OFFSET 2 ROWS" ) ;
7602
7623
assert_eq ! ( ast. offset, expect) ;
7603
- let ast = verified_query ( "SELECT foo FROM bar WHERE foo = 4 OFFSET 2 ROWS" ) ;
7624
+ let ast = dialects . verified_query ( "SELECT foo FROM bar WHERE foo = 4 OFFSET 2 ROWS" ) ;
7604
7625
assert_eq ! ( ast. offset, expect) ;
7605
- let ast = verified_query ( "SELECT foo FROM bar ORDER BY baz OFFSET 2 ROWS" ) ;
7626
+ let ast = dialects . verified_query ( "SELECT foo FROM bar ORDER BY baz OFFSET 2 ROWS" ) ;
7606
7627
assert_eq ! ( ast. offset, expect) ;
7607
- let ast = verified_query ( "SELECT foo FROM bar WHERE foo = 4 ORDER BY baz OFFSET 2 ROWS" ) ;
7628
+ let ast =
7629
+ dialects. verified_query ( "SELECT foo FROM bar WHERE foo = 4 ORDER BY baz OFFSET 2 ROWS" ) ;
7608
7630
assert_eq ! ( ast. offset, expect) ;
7609
- let ast = verified_query ( "SELECT foo FROM (SELECT * FROM bar OFFSET 2 ROWS) OFFSET 2 ROWS" ) ;
7631
+ let ast =
7632
+ dialects. verified_query ( "SELECT foo FROM (SELECT * FROM bar OFFSET 2 ROWS) OFFSET 2 ROWS" ) ;
7610
7633
assert_eq ! ( ast. offset, expect) ;
7611
7634
match * ast. body {
7612
7635
SetExpr :: Select ( s) => match only ( s. from ) . relation {
@@ -7617,23 +7640,23 @@ fn parse_offset() {
7617
7640
} ,
7618
7641
_ => panic ! ( "Test broke" ) ,
7619
7642
}
7620
- let ast = verified_query ( "SELECT 'foo' OFFSET 0 ROWS" ) ;
7643
+ let ast = dialects . verified_query ( "SELECT 'foo' OFFSET 0 ROWS" ) ;
7621
7644
assert_eq ! (
7622
7645
ast. offset,
7623
7646
Some ( Offset {
7624
7647
value: Expr :: Value ( number( "0" ) ) ,
7625
7648
rows: OffsetRows :: Rows ,
7626
7649
} )
7627
7650
) ;
7628
- let ast = verified_query ( "SELECT 'foo' OFFSET 1 ROW" ) ;
7651
+ let ast = dialects . verified_query ( "SELECT 'foo' OFFSET 1 ROW" ) ;
7629
7652
assert_eq ! (
7630
7653
ast. offset,
7631
7654
Some ( Offset {
7632
7655
value: Expr :: Value ( number( "1" ) ) ,
7633
7656
rows: OffsetRows :: Row ,
7634
7657
} )
7635
7658
) ;
7636
- let ast = verified_query ( "SELECT 'foo' OFFSET 1" ) ;
7659
+ let ast = dialects . verified_query ( "SELECT 'foo' OFFSET 1" ) ;
7637
7660
assert_eq ! (
7638
7661
ast. offset,
7639
7662
Some ( Offset {
0 commit comments