def zip_chunk_comperator(a, b): """Compares two zipped chunks. :param a: zipped chunk tuple (See class definition). :param b: zipped chunk tuple (See class definition). :return: Boolean """ a_lo, a_hi = a[:2] b_lo, b_hi = b[:2] if RecordIORecords.entry_comperator(a_hi, b_lo) == -1: return -1 elif RecordIORecords.entry_comperator(a_lo, b_hi) == 1: return 1 return 0
def read_entries_(self, start_key=None, end_key=None): """An internal helper function to read split entries. :param start_key: An entry tuple (no value needed) :param end_key: An entry tuple (no value needed) Exclusive. :return: Yields key, split_values """ # TODO (andrin): fetch a couple of shards instead of just one based on # method argument current_key = start_key if current_key == None: current_key = ("", ) limit_shard_name = RecordIOShard.key_name(self.name, lo=start_key, hi=end_key).split(SPLIT_CHAR) while True: shard = RecordIOShard.get_shards_for_key_values( self.name, [current_key], keys_only=False).next()[0] self.db_search_and_get += 1 if shard == None: raise RecordIOShardDoesNotExistError(self.name) hi = shard.lo_hi()[1] shard_name = shard.key().name().split(SPLIT_CHAR) if (shard_name[6:10] >= limit_shard_name[6:10] and (shard_name[2:5] < limit_shard_name[2:5] or limit_shard_name[2] == SPLIT_CHAR_AFTER)): # Read the whole shard for entry in shard: yield entry else: # Read parts of the shard for entry in shard.read(current_key, end_key): yield entry if hi == None: # Was the last shard return current_key = hi if (end_key != None and RecordIORecords.entry_comperator( current_key, end_key) >= 0): # Next shard is after end_key return
def read_entries_(self, start_key=None, end_key=None): """An internal helper function to read split entries. :param start_key: An entry tuple (no value needed) :param end_key: An entry tuple (no value needed) Exclusive. :return: Yields key, split_values """ # TODO (andrin): fetch a couple of shards instead of just one based on # method argument current_key = start_key if current_key == None: current_key = ("", ) limit_shard_name = RecordIOShard.key_name( self.name, lo=start_key, hi=end_key).split(SPLIT_CHAR) while True: shard = RecordIOShard.get_shards_for_key_values( self.name, [current_key], keys_only=False).next()[0] self.db_search_and_get += 1 if shard == None: raise RecordIOShardDoesNotExistError(self.name) hi = shard.lo_hi()[1] shard_name = shard.key().name().split(SPLIT_CHAR) if (shard_name[6:10] >= limit_shard_name[6:10] and (shard_name[2:5] < limit_shard_name[2:5] or limit_shard_name[2] == SPLIT_CHAR_AFTER)): # Read the whole shard for entry in shard: yield entry else: # Read parts of the shard for entry in shard.read(current_key, end_key): yield entry if hi == None: # Was the last shard return current_key = hi if (end_key != None and RecordIORecords.entry_comperator(current_key, end_key) >= 0): # Next shard is after end_key return
def testComperator(self): self.assertEqual(RecordIORecords.entry_comperator(("a", ), ("b", )), -1) self.assertEqual(RecordIORecords.entry_comperator(("b", ), ("b", )), 0) self.assertEqual(RecordIORecords.entry_comperator(("c", ), ("b", )), 1) self.assertEqual( RecordIORecords.entry_comperator(("b", "bb"), ("b", )), 0) self.assertEqual( RecordIORecords.entry_comperator(("b", 0, 1, 1, "bb"), ("b", )), 0) self.assertEqual( RecordIORecords.entry_comperator(("b", ), ("b", 0, 1, 1, "bb")), 0) self.assertEqual( RecordIORecords.entry_comperator(("b", 0, 1, 1, "bb"), ("b", "bb")), 0) self.assertEqual( RecordIORecords.entry_comperator(("b", "bb"), ("b", 0, 1, 1, "bb")), 0) self.assertEqual( RecordIORecords.entry_comperator(("b", 0, 1, 1, "bb"), ("b", 0, 1, 2, "bb")), 0) self.assertEqual( RecordIORecords.entry_comperator(("b", 1, 2, 1, "bb"), ("b", 1, 2, 2, "bb")), -1) self.assertEqual( RecordIORecords.entry_comperator(("b", 1, 2, 1, "bb"), ("b", 1, 2, 1, "bb")), 0) self.assertEqual( RecordIORecords.entry_comperator(("b", 1, 3, 1, "bb"), ("b", 1, 2, 1, "bb")), 1)
def testComperator(self): self.assertEqual(RecordIORecords.entry_comperator(("a",), ("b",)), -1) self.assertEqual(RecordIORecords.entry_comperator(("b",), ("b",)), 0) self.assertEqual(RecordIORecords.entry_comperator(("c",), ("b",)), 1) self.assertEqual(RecordIORecords.entry_comperator(("b", "bb"), ("b",)), 0) self.assertEqual(RecordIORecords.entry_comperator(("b", 0, 1, 1, "bb"), ("b",)), 0) self.assertEqual(RecordIORecords.entry_comperator(("b",), ("b", 0, 1, 1, "bb")), 0) self.assertEqual(RecordIORecords.entry_comperator(("b", 0, 1, 1, "bb"), ("b", "bb")), 0) self.assertEqual(RecordIORecords.entry_comperator(("b", "bb"), ("b", 0, 1, 1, "bb")), 0) self.assertEqual(RecordIORecords.entry_comperator(("b", 0, 1, 1, "bb"), ("b", 0, 1, 2, "bb")), 0) self.assertEqual(RecordIORecords.entry_comperator(("b", 1, 2, 1, "bb"), ("b", 1, 2, 2, "bb")), -1) self.assertEqual(RecordIORecords.entry_comperator(("b", 1, 2, 1, "bb"), ("b", 1, 2, 1, "bb")), 0) self.assertEqual(RecordIORecords.entry_comperator(("b", 1, 3, 1, "bb"), ("b", 1, 2, 1, "bb")), 1)