diff --git a/tempsdb/varlen.pyx b/tempsdb/varlen.pyx index b1df106e51e1ffe45ce9f94ab8c725d69432130a..6ca068a8d769e926116f668b8bef44399b4fae7c 100644 --- a/tempsdb/varlen.pyx +++ b/tempsdb/varlen.pyx @@ -85,6 +85,7 @@ cdef class VarlenEntry: return False cdef bytes b = self.slice(self.len-len_v, self.len) + logger.warning('comparing %s against %s', repr(b), repr(v)) return b == v def __gt__(self, other) -> bool: @@ -196,19 +197,24 @@ cdef class VarlenEntry: bytes temp_data int offset = self.parent.size_field - while write_pointer < length and len(self.chunks) > segment: + while write_pointer < length: if chunk_len-start_reading_at >= + (length - write_pointer): # We have all the data that we require - temp_data = chunk.get_slice_of_piece_at(self.item_no[segment], - offset, offset+length-write_pointer) + try: + temp_data = chunk.get_slice_of_piece_at(self.item_no[segment], + offset, offset+length-write_pointer) + except IndexError: + raise ValueError('Invalid indices') assert len(temp_data) == length-write_pointer, 'invalid length' b[write_pointer:length] = temp_data return bytes(b) if chunk_len > length - write_pointer: chunk_len = length - write_pointer - - temp_data = chunk.get_slice_of_piece_at(self.item_no[segment], offset, offset+chunk_len) + try: + temp_data = chunk.get_slice_of_piece_at(self.item_no[segment], offset, offset+chunk_len) + except IndexError: + raise ValueError('Invalid indices') b[write_pointer:write_pointer+chunk_len] = temp_data write_pointer += chunk_len segment += 1 diff --git a/tests/test_varlen.py b/tests/test_varlen.py index ace8d4516e74d6a716ab5b6092dddc06ae729204..e0b98ad4d0b8e76c03d4b0f8f78a495e9fa86e12 100644 --- a/tests/test_varlen.py +++ b/tests/test_varlen.py @@ -29,6 +29,8 @@ class TestVarlen(unittest.TestCase): varlen.append(*series[0]) varlen.append(*series[1]) + self.assertEqual(varlen.last_entry_ts, 10) + with varlen.iterate_range(0, 20) as iterator: ve = iterator.get_next() while ve is not None: