@@ -327,4 +327,182 @@ public void testClone() {
327
327
assertThat (clonedReq ).isEqualTo (query );
328
328
assertThat (clonedReq .toProto (requestContext )).isEqualTo (request );
329
329
}
330
+
331
+ @ Test
332
+ public void testQueryPaginatorRangeLimitReached () {
333
+ int chunkSize = 10 , limit = 15 ;
334
+ Query query = Query .create (TABLE_ID ).range ("a" , "z" ).limit (limit );
335
+ Query .QueryPaginator paginator = query .createPaginator (chunkSize );
336
+
337
+ Query nextQuery = paginator .getNextQuery ();
338
+
339
+ Builder expectedProto =
340
+ expectedProtoBuilder ()
341
+ .setRows (
342
+ RowSet .newBuilder ()
343
+ .addRowRanges (
344
+ RowRange .newBuilder ()
345
+ .setStartKeyClosed (ByteString .copyFromUtf8 ("a" ))
346
+ .setEndKeyOpen (ByteString .copyFromUtf8 ("z" ))
347
+ .build ()))
348
+ .setRowsLimit (chunkSize );
349
+ assertThat (nextQuery .toProto (requestContext )).isEqualTo (expectedProto .build ());
350
+
351
+ assertThat (paginator .advance (ByteString .copyFromUtf8 ("c" ))).isTrue ();
352
+ int expectedLimit = limit - chunkSize ;
353
+ nextQuery = paginator .getNextQuery ();
354
+ expectedProto =
355
+ expectedProtoBuilder ()
356
+ .setRows (
357
+ RowSet .newBuilder ()
358
+ .addRowRanges (
359
+ RowRange .newBuilder ()
360
+ .setStartKeyOpen (ByteString .copyFromUtf8 ("c" ))
361
+ .setEndKeyOpen (ByteString .copyFromUtf8 ("z" ))
362
+ .build ()))
363
+ .setRowsLimit (expectedLimit );
364
+ assertThat (nextQuery .toProto (requestContext )).isEqualTo (expectedProto .build ());
365
+
366
+ assertThat (paginator .advance (ByteString .copyFromUtf8 ("d" ))).isFalse ();
367
+ }
368
+
369
+ @ Test
370
+ public void testQueryPaginatorRangeLimitMultiplyOfChunkSize () {
371
+ int chunkSize = 10 , limit = 20 ;
372
+ Query query = Query .create (TABLE_ID ).range ("a" , "z" ).limit (limit );
373
+ Query .QueryPaginator paginator = query .createPaginator (chunkSize );
374
+
375
+ Query nextQuery = paginator .getNextQuery ();
376
+
377
+ Builder expectedProto =
378
+ expectedProtoBuilder ()
379
+ .setRows (
380
+ RowSet .newBuilder ()
381
+ .addRowRanges (
382
+ RowRange .newBuilder ()
383
+ .setStartKeyClosed (ByteString .copyFromUtf8 ("a" ))
384
+ .setEndKeyOpen (ByteString .copyFromUtf8 ("z" ))
385
+ .build ()))
386
+ .setRowsLimit (chunkSize );
387
+ assertThat (nextQuery .toProto (requestContext )).isEqualTo (expectedProto .build ());
388
+
389
+ assertThat (paginator .advance (ByteString .copyFromUtf8 ("c" ))).isTrue ();
390
+ int expectedLimit = limit - chunkSize ;
391
+ nextQuery = paginator .getNextQuery ();
392
+ expectedProto =
393
+ expectedProtoBuilder ()
394
+ .setRows (
395
+ RowSet .newBuilder ()
396
+ .addRowRanges (
397
+ RowRange .newBuilder ()
398
+ .setStartKeyOpen (ByteString .copyFromUtf8 ("c" ))
399
+ .setEndKeyOpen (ByteString .copyFromUtf8 ("z" ))
400
+ .build ()))
401
+ .setRowsLimit (expectedLimit );
402
+ assertThat (nextQuery .toProto (requestContext )).isEqualTo (expectedProto .build ());
403
+
404
+ assertThat (paginator .advance (ByteString .copyFromUtf8 ("d" ))).isFalse ();
405
+ }
406
+
407
+ @ Test
408
+ public void testQueryPaginatorRagneNoLimit () {
409
+ int chunkSize = 10 ;
410
+ Query query = Query .create (TABLE_ID ).range ("a" , "z" );
411
+ Query .QueryPaginator paginator = query .createPaginator (chunkSize );
412
+
413
+ Query nextQuery = paginator .getNextQuery ();
414
+
415
+ Builder expectedProto =
416
+ expectedProtoBuilder ()
417
+ .setRows (
418
+ RowSet .newBuilder ()
419
+ .addRowRanges (
420
+ RowRange .newBuilder ()
421
+ .setStartKeyClosed (ByteString .copyFromUtf8 ("a" ))
422
+ .setEndKeyOpen (ByteString .copyFromUtf8 ("z" ))
423
+ .build ()))
424
+ .setRowsLimit (chunkSize );
425
+ assertThat (nextQuery .toProto (requestContext )).isEqualTo (expectedProto .build ());
426
+
427
+ assertThat (paginator .advance (ByteString .copyFromUtf8 ("c" ))).isTrue ();
428
+ nextQuery = paginator .getNextQuery ();
429
+ expectedProto
430
+ .setRows (
431
+ RowSet .newBuilder ()
432
+ .addRowRanges (
433
+ RowRange .newBuilder ()
434
+ .setStartKeyOpen (ByteString .copyFromUtf8 ("c" ))
435
+ .setEndKeyOpen (ByteString .copyFromUtf8 ("z" ))
436
+ .build ()))
437
+ .setRowsLimit (chunkSize );
438
+ assertThat (nextQuery .toProto (requestContext )).isEqualTo (expectedProto .build ());
439
+
440
+ assertThat (paginator .advance (ByteString .copyFromUtf8 ("z" ))).isFalse ();
441
+ }
442
+
443
+ @ Test
444
+ public void testQueryPaginatorRowsNoLimit () {
445
+ int chunkSize = 10 ;
446
+ Query query = Query .create (TABLE_ID ).rowKey ("a" ).rowKey ("b" ).rowKey ("c" );
447
+
448
+ Query .QueryPaginator paginator = query .createPaginator (chunkSize );
449
+
450
+ Query nextQuery = paginator .getNextQuery ();
451
+
452
+ ReadRowsRequest .Builder expectedProto = expectedProtoBuilder ();
453
+ expectedProto
454
+ .getRowsBuilder ()
455
+ .addRowKeys (ByteString .copyFromUtf8 ("a" ))
456
+ .addRowKeys (ByteString .copyFromUtf8 ("b" ))
457
+ .addRowKeys (ByteString .copyFromUtf8 ("c" ));
458
+ expectedProto .setRowsLimit (chunkSize );
459
+
460
+ assertThat (nextQuery .toProto (requestContext )).isEqualTo (expectedProto .build ());
461
+
462
+ paginator .advance (ByteString .copyFromUtf8 ("b" ));
463
+ nextQuery = paginator .getNextQuery ();
464
+ expectedProto = expectedProtoBuilder ();
465
+ expectedProto .getRowsBuilder ().addRowKeys (ByteString .copyFromUtf8 ("c" ));
466
+ expectedProto .setRowsLimit (chunkSize );
467
+
468
+ assertThat (nextQuery .toProto (requestContext )).isEqualTo (expectedProto .build ());
469
+
470
+ assertThat (paginator .advance (ByteString .copyFromUtf8 ("c" ))).isFalse ();
471
+ }
472
+
473
+ @ Test
474
+ public void testQueryPaginatorFullTableScan () {
475
+ int chunkSize = 10 ;
476
+ Query query = Query .create (TABLE_ID );
477
+ Query .QueryPaginator queryPaginator = query .createPaginator (chunkSize );
478
+
479
+ ReadRowsRequest .Builder expectedProto = expectedProtoBuilder ().setRowsLimit (chunkSize );
480
+ assertThat (queryPaginator .getNextQuery ().toProto (requestContext ))
481
+ .isEqualTo (expectedProto .build ());
482
+
483
+ assertThat (queryPaginator .advance (ByteString .copyFromUtf8 ("a" ))).isTrue ();
484
+ expectedProto
485
+ .setRows (
486
+ RowSet .newBuilder ()
487
+ .addRowRanges (
488
+ RowRange .newBuilder ().setStartKeyOpen (ByteString .copyFromUtf8 ("a" )).build ()))
489
+ .setRowsLimit (chunkSize );
490
+ assertThat (queryPaginator .getNextQuery ().toProto (requestContext ))
491
+ .isEqualTo (expectedProto .build ());
492
+
493
+ assertThat (queryPaginator .advance (ByteString .copyFromUtf8 ("a" ))).isFalse ();
494
+ }
495
+
496
+ @ Test
497
+ public void testQueryPaginatorEmptyTable () {
498
+ int chunkSize = 10 ;
499
+ Query query = Query .create (TABLE_ID );
500
+ Query .QueryPaginator queryPaginator = query .createPaginator (chunkSize );
501
+
502
+ ReadRowsRequest .Builder expectedProto = expectedProtoBuilder ().setRowsLimit (chunkSize );
503
+ assertThat (queryPaginator .getNextQuery ().toProto (requestContext ))
504
+ .isEqualTo (expectedProto .build ());
505
+
506
+ assertThat (queryPaginator .advance (ByteString .EMPTY )).isFalse ();
507
+ }
330
508
}
0 commit comments