@@ -240,6 +240,46 @@ def test_query_gsi_pagination(table_name=None):
240240 ]
241241
242242
243+ @pytest .mark .aws_verified
244+ @dynamodb_aws_verified (add_range = True , add_gsi = True )
245+ def test_query_gsi_pagination_with_string_range (table_name = None ):
246+ dynamodb = boto3 .resource ("dynamodb" , region_name = "us-east-1" )
247+ table = dynamodb .Table (table_name )
248+
249+ for i in range (3 , 7 ):
250+ table .put_item (Item = {"pk" : "the-key" , "sk" : f"{ i } " , "gsi_pk" : "johndoe" })
251+
252+ for i in range (9 , 6 , - 1 ):
253+ table .put_item (Item = {"pk" : "the-key" , "sk" : f"{ i } " , "gsi_pk" : "johndoe" })
254+
255+ for i in range (3 ):
256+ table .put_item (Item = {"pk" : "the-key" , "sk" : f"{ i } " , "gsi_pk" : "johndoe" })
257+
258+ page1 = table .query (
259+ KeyConditionExpression = Key ("gsi_pk" ).eq ("johndoe" ),
260+ IndexName = "test_gsi" ,
261+ Limit = 6 ,
262+ )
263+ assert page1 ["Count" ] == 6
264+ assert page1 ["ScannedCount" ] == 6
265+ assert len (page1 ["Items" ]) == 6
266+
267+ page2 = table .query (
268+ KeyConditionExpression = Key ("gsi_pk" ).eq ("johndoe" ),
269+ IndexName = "test_gsi" ,
270+ Limit = 6 ,
271+ ExclusiveStartKey = page1 ["LastEvaluatedKey" ],
272+ )
273+ assert page2 ["Count" ] == 4
274+ assert page2 ["ScannedCount" ] == 4
275+ assert len (page2 ["Items" ]) == 4
276+ assert "LastEvaluatedKey" not in page2
277+
278+ results = page1 ["Items" ] + page2 ["Items" ]
279+ subjects = set ([int (r ["sk" ]) for r in results ])
280+ assert subjects == set (range (10 ))
281+
282+
243283@pytest .mark .aws_verified
244284@dynamodb_aws_verified (add_range = True , numeric_gsi_range = True )
245285def test_query_gsi_pagination_with_numeric_range (table_name = None ):
0 commit comments