diff --git a/spanner/tests/system/test_system.py b/spanner/tests/system/test_system.py index 4783eebf4c02..5e77258c5a21 100644 --- a/spanner/tests/system/test_system.py +++ b/spanner/tests/system/test_system.py @@ -1003,6 +1003,60 @@ def test_read_w_ranges(self): expected = all_data_rows[START+1 : END+1] self._check_row_data(rows, expected) + def test_read_partial_range_until_end(self): + row_count = 3000 + start = 1000 + session, committed = self._set_up_table(row_count) + snapshot = session.snapshot(read_timestamp=committed, multi_use=True) + all_data_rows = list(self._row_data(row_count)) + + expected_map = { + ('start_closed', 'end_closed'): all_data_rows[start:], + ('start_closed', 'end_open'): [], + ('start_open', 'end_closed'): all_data_rows[start+1:], + ('start_open', 'end_open'): [], + } + for start_arg in ('start_closed', 'start_open'): + for end_arg in ('end_closed', 'end_open'): + range_kwargs = {start_arg: [start], end_arg: []} + keyset = KeySet( + ranges=( + KeyRange(**range_kwargs), + ), + ) + + rows = list(snapshot.read( + self.TABLE, self.COLUMNS, keyset)) + expected = expected_map[(start_arg, end_arg)] + self._check_row_data(rows, expected) + + def test_read_partial_range_from_beginning(self): + row_count = 3000 + end = 2000 + session, committed = self._set_up_table(row_count) + snapshot = session.snapshot(read_timestamp=committed, multi_use=True) + all_data_rows = list(self._row_data(row_count)) + + expected_map = { + ('start_closed', 'end_closed'): all_data_rows[:end+1], + ('start_closed', 'end_open'): all_data_rows[:end], + ('start_open', 'end_closed'): [], + ('start_open', 'end_open'): [], + } + for start_arg in ('start_closed', 'start_open'): + for end_arg in ('end_closed', 'end_open'): + range_kwargs = {start_arg: [], end_arg: [end]} + keyset = KeySet( + ranges=( + KeyRange(**range_kwargs), + ), + ) + + rows = list(snapshot.read( + self.TABLE, self.COLUMNS, keyset)) + expected = expected_map[(start_arg, end_arg)] + self._check_row_data(rows, expected) + def test_read_with_range_keys_index_single_key(self): row_count = 10 columns = self.COLUMNS[1], self.COLUMNS[2]