@@ -2265,34 +2265,52 @@ fn parse_invalid_subquery_without_parens() {
2265
2265
2266
2266
#[ test]
2267
2267
fn parse_offset ( ) {
2268
+ let expect = Some ( Offset {
2269
+ value : Expr :: Value ( number ( "2" ) ) ,
2270
+ rows : OffsetRows :: Rows ,
2271
+ } ) ;
2268
2272
let ast = verified_query ( "SELECT foo FROM bar OFFSET 2 ROWS" ) ;
2269
- assert_eq ! ( ast. offset, Some ( Expr :: Value ( number ( "2" ) ) ) ) ;
2273
+ assert_eq ! ( ast. offset, expect ) ;
2270
2274
let ast = verified_query ( "SELECT foo FROM bar WHERE foo = 4 OFFSET 2 ROWS" ) ;
2271
- assert_eq ! ( ast. offset, Some ( Expr :: Value ( number ( "2" ) ) ) ) ;
2275
+ assert_eq ! ( ast. offset, expect ) ;
2272
2276
let ast = verified_query ( "SELECT foo FROM bar ORDER BY baz OFFSET 2 ROWS" ) ;
2273
- assert_eq ! ( ast. offset, Some ( Expr :: Value ( number ( "2" ) ) ) ) ;
2277
+ assert_eq ! ( ast. offset, expect ) ;
2274
2278
let ast = verified_query ( "SELECT foo FROM bar WHERE foo = 4 ORDER BY baz OFFSET 2 ROWS" ) ;
2275
- assert_eq ! ( ast. offset, Some ( Expr :: Value ( number ( "2" ) ) ) ) ;
2279
+ assert_eq ! ( ast. offset, expect ) ;
2276
2280
let ast = verified_query ( "SELECT foo FROM (SELECT * FROM bar OFFSET 2 ROWS) OFFSET 2 ROWS" ) ;
2277
- assert_eq ! ( ast. offset, Some ( Expr :: Value ( number ( "2" ) ) ) ) ;
2281
+ assert_eq ! ( ast. offset, expect ) ;
2278
2282
match ast. body {
2279
2283
SetExpr :: Select ( s) => match only ( s. from ) . relation {
2280
2284
TableFactor :: Derived { subquery, .. } => {
2281
- assert_eq ! ( subquery. offset, Some ( Expr :: Value ( number ( "2" ) ) ) ) ;
2285
+ assert_eq ! ( subquery. offset, expect ) ;
2282
2286
}
2283
2287
_ => panic ! ( "Test broke" ) ,
2284
2288
} ,
2285
2289
_ => panic ! ( "Test broke" ) ,
2286
2290
}
2287
2291
let ast = verified_query ( "SELECT 'foo' OFFSET 0 ROWS" ) ;
2288
- assert_eq ! ( ast. offset, Some ( Expr :: Value ( number( "0" ) ) ) ) ;
2289
- }
2290
-
2291
- #[ test]
2292
- fn parse_singular_row_offset ( ) {
2293
- one_statement_parses_to (
2294
- "SELECT foo FROM bar OFFSET 1 ROW" ,
2295
- "SELECT foo FROM bar OFFSET 1 ROWS" ,
2292
+ assert_eq ! (
2293
+ ast. offset,
2294
+ Some ( Offset {
2295
+ value: Expr :: Value ( number( "0" ) ) ,
2296
+ rows: OffsetRows :: Rows ,
2297
+ } )
2298
+ ) ;
2299
+ let ast = verified_query ( "SELECT 'foo' OFFSET 1 ROW" ) ;
2300
+ assert_eq ! (
2301
+ ast. offset,
2302
+ Some ( Offset {
2303
+ value: Expr :: Value ( number( "1" ) ) ,
2304
+ rows: OffsetRows :: Row ,
2305
+ } )
2306
+ ) ;
2307
+ let ast = verified_query ( "SELECT 'foo' OFFSET 1" ) ;
2308
+ assert_eq ! (
2309
+ ast. offset,
2310
+ Some ( Offset {
2311
+ value: Expr :: Value ( number( "1" ) ) ,
2312
+ rows: OffsetRows :: None ,
2313
+ } )
2296
2314
) ;
2297
2315
}
2298
2316
@@ -2343,7 +2361,13 @@ fn parse_fetch() {
2343
2361
let ast = verified_query (
2344
2362
"SELECT foo FROM bar WHERE foo = 4 ORDER BY baz OFFSET 2 ROWS FETCH FIRST 2 ROWS ONLY" ,
2345
2363
) ;
2346
- assert_eq ! ( ast. offset, Some ( Expr :: Value ( number( "2" ) ) ) ) ;
2364
+ assert_eq ! (
2365
+ ast. offset,
2366
+ Some ( Offset {
2367
+ value: Expr :: Value ( number( "2" ) ) ,
2368
+ rows: OffsetRows :: Rows ,
2369
+ } )
2370
+ ) ;
2347
2371
assert_eq ! ( ast. fetch, fetch_first_two_rows_only) ;
2348
2372
let ast = verified_query (
2349
2373
"SELECT foo FROM (SELECT * FROM bar FETCH FIRST 2 ROWS ONLY) FETCH FIRST 2 ROWS ONLY" ,
@@ -2359,12 +2383,24 @@ fn parse_fetch() {
2359
2383
_ => panic ! ( "Test broke" ) ,
2360
2384
}
2361
2385
let ast = verified_query ( "SELECT foo FROM (SELECT * FROM bar OFFSET 2 ROWS FETCH FIRST 2 ROWS ONLY) OFFSET 2 ROWS FETCH FIRST 2 ROWS ONLY" ) ;
2362
- assert_eq ! ( ast. offset, Some ( Expr :: Value ( number( "2" ) ) ) ) ;
2386
+ assert_eq ! (
2387
+ ast. offset,
2388
+ Some ( Offset {
2389
+ value: Expr :: Value ( number( "2" ) ) ,
2390
+ rows: OffsetRows :: Rows ,
2391
+ } )
2392
+ ) ;
2363
2393
assert_eq ! ( ast. fetch, fetch_first_two_rows_only) ;
2364
2394
match ast. body {
2365
2395
SetExpr :: Select ( s) => match only ( s. from ) . relation {
2366
2396
TableFactor :: Derived { subquery, .. } => {
2367
- assert_eq ! ( subquery. offset, Some ( Expr :: Value ( number( "2" ) ) ) ) ;
2397
+ assert_eq ! (
2398
+ subquery. offset,
2399
+ Some ( Offset {
2400
+ value: Expr :: Value ( number( "2" ) ) ,
2401
+ rows: OffsetRows :: Rows ,
2402
+ } )
2403
+ ) ;
2368
2404
assert_eq ! ( subquery. fetch, fetch_first_two_rows_only) ;
2369
2405
}
2370
2406
_ => panic ! ( "Test broke" ) ,
0 commit comments