@@ -266,5 +266,87 @@ public void AddOrReplace_Throws_MoreThanOne()
266266 Action act = ( ) => query . AddOrReplaceComponent ( "where" , new BasicCondition ( ) ) ;
267267 Assert . Throws < InvalidOperationException > ( act ) ;
268268 }
269+
270+ [ Fact ]
271+ public void OneLimitPerEngine ( )
272+ {
273+ var query = new Query ( "mytable" )
274+ . ForSqlServer ( q => q . Limit ( 5 ) )
275+ . ForSqlServer ( q => q . Limit ( 10 ) ) ;
276+
277+ var limits = query . GetComponents < LimitOffset > ( "limit" , EngineCodes . SqlServer ) ;
278+ Assert . Single ( limits ) ;
279+ Assert . Equal ( 10 , limits . Single ( ) . Limit ) ;
280+ }
281+
282+ [ Fact ]
283+ public void CompilerSpecificLimit ( )
284+ {
285+ var query = new Query ( "mytable" )
286+ . ForSqlServer ( q => q . Limit ( 5 ) )
287+ . ForPostgreSql ( q => q . Limit ( 10 ) ) ;
288+
289+ var engines = new [ ] { EngineCodes . SqlServer , EngineCodes . MySql , EngineCodes . PostgreSql } ;
290+ var c = Compilers . Compile ( engines , query ) ;
291+
292+ Assert . Equal ( 2 , query . GetComponents ( "limit" ) . Count ( ) ) ;
293+ Assert . Equal ( "SELECT TOP (5) * FROM [mytable]" , c [ EngineCodes . SqlServer ] . ToString ( ) ) ;
294+ Assert . Equal ( "SELECT * FROM \" mytable\" LIMIT 10" , c [ EngineCodes . PostgreSql ] . ToString ( ) ) ;
295+ Assert . Equal ( "SELECT * FROM `mytable`" , c [ EngineCodes . MySql ] . ToString ( ) ) ;
296+ }
297+
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+
311+ [ Fact ]
312+ public void OneOffsetPerEngine ( )
313+ {
314+ var query = new Query ( "mytable" )
315+ . ForSqlServer ( q => q . Offset ( 5 ) )
316+ . ForSqlServer ( q => q . Offset ( 10 ) ) ;
317+
318+ var limits = query . GetComponents < LimitOffset > ( "limit" , EngineCodes . SqlServer ) ;
319+ Assert . Single ( limits ) ;
320+ Assert . Equal ( 10 , limits . Single ( ) . Offset ) ;
321+ }
322+
323+ [ Fact ]
324+ public void CompilerSpecificOffset ( )
325+ {
326+ var query = new Query ( "mytable" )
327+ . ForMySql ( q => q . Offset ( 5 ) )
328+ . ForPostgreSql ( q => q . Offset ( 10 ) ) ;
329+
330+ var engines = new [ ] { EngineCodes . SqlServer , EngineCodes . MySql , EngineCodes . PostgreSql } ;
331+ var c = Compilers . Compile ( engines , query ) ;
332+
333+ Assert . Equal ( 2 , query . GetComponents ( "limit" ) . Count ( ) ) ;
334+ Assert . Equal ( "SELECT * FROM `mytable` LIMIT 18446744073709551615 OFFSET 5" , c [ EngineCodes . MySql ] . ToString ( ) ) ;
335+ Assert . Equal ( "SELECT * FROM \" mytable\" OFFSET 10" , c [ EngineCodes . PostgreSql ] . ToString ( ) ) ;
336+ Assert . Equal ( "SELECT * FROM [mytable]" , c [ EngineCodes . SqlServer ] . ToString ( ) ) ;
337+ }
338+
339+ [ Fact ]
340+ public void Offset_Preserves_Limit ( )
341+ {
342+ var query = new Query ( "mytable" )
343+ . Limit ( 5 ) ;
344+ query . Offset ( 10 ) ;
345+
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 ) ;
350+ }
269351 }
270352}
0 commit comments