@@ -274,7 +274,7 @@ public void OneLimitPerEngine()
274274 . ForSqlServer ( q => q . Limit ( 5 ) )
275275 . ForSqlServer ( q => q . Limit ( 10 ) ) ;
276276
277- var limits = query . GetComponents < LimitOffset > ( "limit" , EngineCodes . SqlServer ) ;
277+ var limits = query . GetComponents < LimitClause > ( "limit" , EngineCodes . SqlServer ) ;
278278 Assert . Single ( limits ) ;
279279 Assert . Equal ( 10 , limits . Single ( ) . Limit ) ;
280280 }
@@ -295,27 +295,14 @@ public void CompilerSpecificLimit()
295295 Assert . Equal ( "SELECT * FROM `mytable`" , c [ EngineCodes . MySql ] . ToString ( ) ) ;
296296 }
297297
298- [ Fact ]
299- public void Limit_Preserves_Offset ( )
300- {
301- var query = new Query ( "mytable" )
302- . Offset ( 5 ) ;
303- query . Limit ( 10 ) ;
304-
305- var limits = query . GetComponents < LimitOffset > ( "limit" ) ;
306- Assert . Single ( limits ) ;
307- Assert . Equal ( 5 , limits . Single ( ) . Offset ) ;
308- Assert . Equal ( 10 , limits . Single ( ) . Limit ) ;
309- }
310-
311298 [ Fact ]
312299 public void OneOffsetPerEngine ( )
313300 {
314301 var query = new Query ( "mytable" )
315302 . ForSqlServer ( q => q . Offset ( 5 ) )
316303 . ForSqlServer ( q => q . Offset ( 10 ) ) ;
317304
318- var limits = query . GetComponents < LimitOffset > ( "limit " , EngineCodes . SqlServer ) ;
305+ var limits = query . GetComponents < OffsetClause > ( "offset " , EngineCodes . SqlServer ) ;
319306 Assert . Single ( limits ) ;
320307 Assert . Equal ( 10 , limits . Single ( ) . Offset ) ;
321308 }
@@ -330,27 +317,29 @@ public void CompilerSpecificOffset()
330317 var engines = new [ ] { EngineCodes . SqlServer , EngineCodes . MySql , EngineCodes . PostgreSql } ;
331318 var c = Compilers . Compile ( engines , query ) ;
332319
333- Assert . Equal ( 2 , query . GetComponents ( "limit " ) . Count ( ) ) ;
320+ Assert . Equal ( 2 , query . GetComponents ( "offset " ) . Count ( ) ) ;
334321 Assert . Equal ( "SELECT * FROM `mytable` LIMIT 18446744073709551615 OFFSET 5" , c [ EngineCodes . MySql ] . ToString ( ) ) ;
335322 Assert . Equal ( "SELECT * FROM \" mytable\" OFFSET 10" , c [ EngineCodes . PostgreSql ] . ToString ( ) ) ;
336323 Assert . Equal ( "SELECT * FROM [mytable]" , c [ EngineCodes . SqlServer ] . ToString ( ) ) ;
337324 }
338325
339326 [ Fact ]
340- public void Offset_Preserves_Limit ( )
327+ public void Limit_Takes_Generic_If_Needed ( )
341328 {
342329 var query = new Query ( "mytable" )
343- . Limit ( 5 ) ;
344- query . Offset ( 10 ) ;
330+ . Limit ( 5 )
331+ . Offset ( 10 )
332+ . ForPostgreSql ( q => q . Offset ( 20 ) ) ;
345333
346- var limits = query . GetComponents < LimitOffset > ( "limit" ) ;
347- Assert . Single ( limits ) ;
348- Assert . Equal ( 10 , limits . Single ( ) . Offset ) ;
349- Assert . Equal ( 5 , limits . Single ( ) . Limit ) ;
334+ var engines = new [ ] { EngineCodes . MySql , EngineCodes . PostgreSql } ;
335+ var c = Compilers . Compile ( engines , query ) ;
336+
337+ Assert . Equal ( "SELECT * FROM `mytable` LIMIT 5 OFFSET 10" , c [ EngineCodes . MySql ] . ToString ( ) ) ;
338+ Assert . Equal ( "SELECT * FROM \" mytable\" LIMIT 5 OFFSET 20" , c [ EngineCodes . PostgreSql ] . ToString ( ) ) ;
350339 }
351340
352341 [ Fact ]
353- public void LimitOffset_Takes_Generic_If_Needed ( )
342+ public void Offset_Takes_Generic_If_Needed ( )
354343 {
355344 var query = new Query ( "mytable" )
356345 . Limit ( 5 )
@@ -363,5 +352,37 @@ public void LimitOffset_Takes_Generic_If_Needed()
363352 Assert . Equal ( "SELECT * FROM `mytable` LIMIT 5 OFFSET 10" , c [ EngineCodes . MySql ] . ToString ( ) ) ;
364353 Assert . Equal ( "SELECT * FROM \" mytable\" LIMIT 20 OFFSET 10" , c [ EngineCodes . PostgreSql ] . ToString ( ) ) ;
365354 }
355+
356+ [ Fact ]
357+ public void Can_Change_Generic_Limit_After_SpecificOffset ( )
358+ {
359+ var query = new Query ( "mytable" )
360+ . Limit ( 5 )
361+ . Offset ( 10 )
362+ . ForPostgreSql ( q => q . Offset ( 20 ) )
363+ . Limit ( 7 ) ;
364+
365+ var engines = new [ ] { EngineCodes . MySql , EngineCodes . PostgreSql } ;
366+ var c = Compilers . Compile ( engines , query ) ;
367+
368+ Assert . Equal ( "SELECT * FROM `mytable` LIMIT 7 OFFSET 10" , c [ EngineCodes . MySql ] . ToString ( ) ) ;
369+ Assert . Equal ( "SELECT * FROM \" mytable\" LIMIT 7 OFFSET 20" , c [ EngineCodes . PostgreSql ] . ToString ( ) ) ;
370+ }
371+
372+ [ Fact ]
373+ public void Can_Change_Generic_Offset_After_SpecificLimit ( )
374+ {
375+ var query = new Query ( "mytable" )
376+ . Limit ( 5 )
377+ . Offset ( 10 )
378+ . ForPostgreSql ( q => q . Limit ( 20 ) )
379+ . Offset ( 7 ) ;
380+
381+ var engines = new [ ] { EngineCodes . MySql , EngineCodes . PostgreSql } ;
382+ var c = Compilers . Compile ( engines , query ) ;
383+
384+ Assert . Equal ( "SELECT * FROM `mytable` LIMIT 5 OFFSET 7" , c [ EngineCodes . MySql ] . ToString ( ) ) ;
385+ Assert . Equal ( "SELECT * FROM \" mytable\" LIMIT 20 OFFSET 7" , c [ EngineCodes . PostgreSql ] . ToString ( ) ) ;
386+ }
366387 }
367388}
0 commit comments