@@ -273,6 +273,94 @@ pgroup.test_negative_first = function(g)
273273 t .assert_equals (objects , helpers .get_objects_by_idxs (customers , {6 }))
274274end
275275
276+ pgroup .test_positive_first = function (g )
277+ local customers = helpers .insert_objects (g , ' customers' , {
278+ {
279+ id = 1 , name = " Elizabeth" , last_name = " Jackson" ,
280+ age = 11 , city = " New York" ,
281+ }, {
282+ id = 2 , name = " Mary" , last_name = " Brown" ,
283+ age = 22 , city = " Los Angeles" ,
284+ }, {
285+ id = 3 , name = " David" , last_name = " Smith" ,
286+ age = 33 , city = " Los Angeles" ,
287+ }, {
288+ id = 4 , name = " William" , last_name = " White" ,
289+ age = 44 , city = " Chicago" ,
290+ }, {
291+ id = 5 , name = " Jack" , last_name = " Sparrow" ,
292+ age = 55 , city = " London" ,
293+ }, {
294+ id = 6 , name = " William" , last_name = " Terner" ,
295+ age = 66 , city = " Oxford" ,
296+ }, {
297+ id = 7 , name = " Elizabeth" , last_name = " Swan" ,
298+ age = 77 , city = " Cambridge" ,
299+ }, {
300+ id = 8 , name = " Hector" , last_name = " Barbossa" ,
301+ age = 88 , city = " London" ,
302+ },
303+ })
304+
305+ table.sort (customers , function (obj1 , obj2 ) return obj1 .id < obj2 .id end )
306+
307+ -- id >= 3
308+ -- first 10 after 5
309+ local conditions = {
310+ {' >=' , ' id' , 3 },
311+ }
312+ local first = 10
313+ local after = crud_utils .flatten (customers [5 ], g .space_format )
314+ local result , err = g .cluster .main_server .net_box :call (
315+ ' crud.select' , {' customers' , conditions , {first = first , after = after }})
316+
317+ t .assert_equals (err , nil )
318+ local objects = crud .unflatten_rows (result .rows , result .metadata )
319+ t .assert_equals (objects , helpers .get_objects_by_idxs (customers , {6 , 7 , 8 }))
320+
321+ -- id <= 3
322+ -- first 10 after 5
323+ local conditions = {
324+ {' <=' , ' id' , 3 },
325+ }
326+ local first = 10
327+ local after = crud_utils .flatten (customers [5 ], g .space_format )
328+ local result , err = g .cluster .main_server .net_box :call (
329+ ' crud.select' , {' customers' , conditions , {first = first , after = after }})
330+
331+ t .assert_equals (err , nil )
332+ local objects = crud .unflatten_rows (result .rows , result .metadata )
333+ t .assert_equals (objects , helpers .get_objects_by_idxs (customers , {3 , 2 , 1 }))
334+
335+ -- id <= 6
336+ -- first 10 after 5
337+ local conditions = {
338+ {' <=' , ' id' , 6 },
339+ }
340+ local first = 10
341+ local after = crud_utils .flatten (customers [5 ], g .space_format )
342+ local result , err = g .cluster .main_server .net_box :call (
343+ ' crud.select' , {' customers' , conditions , {first = first , after = after }})
344+
345+ t .assert_equals (err , nil )
346+ local objects = crud .unflatten_rows (result .rows , result .metadata )
347+ t .assert_equals (objects , helpers .get_objects_by_idxs (customers , {4 , 3 , 2 , 1 }))
348+
349+ -- id >= 6
350+ -- first 10 after 2
351+ local conditions = {
352+ {' >=' , ' id' , 6 },
353+ }
354+ local first = 10
355+ local after = crud_utils .flatten (customers [2 ], g .space_format )
356+ local result , err = g .cluster .main_server .net_box :call (
357+ ' crud.select' , {' customers' , conditions , {first = first , after = after }})
358+
359+ t .assert_equals (err , nil )
360+ local objects = crud .unflatten_rows (result .rows , result .metadata )
361+ t .assert_equals (objects , helpers .get_objects_by_idxs (customers , {6 , 7 , 8 }))
362+ end
363+
276364pgroup .test_negative_first_with_batch_size = function (g )
277365 local customers = helpers .insert_objects (g , ' customers' , {
278366 {
0 commit comments