コード例 #1
0
  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
コード例 #2
0
    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
コード例 #3
0
ファイル: recordio_reader.py プロジェクト: n-dream/recordio
    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
コード例 #4
0
ファイル: recordio_reader.py プロジェクト: n-dream/recordio
  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
コード例 #5
0
 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)
コード例 #6
0
 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)