示例#1
0
 def next(self):
     if self.on_field is None:  # so, we iterate using hash-index
         if self.do_next_page:
             curr_page = Ipage(page_offset=self.page_offsets.pop(), filename=self.filename)
             self.curr_items = curr_page.items()
             self.do_next_page = False
         item = self.curr_items[self.curr_iter]
         self.curr_iter += 1
         if self.curr_iter == len(self.curr_items):
             self.do_next_page = True
             self.curr_iter = 0
         self.iter += 1
         attrs = self.type(to_parse=item).attrs
         return tuple(attrs[k] for k in self.type.__attrs__[:])
     else:  # so, we iterate using b_tree index on field "on_field"
         if self.do_next_set:
             self.tree_cursor.next()
             self.cur_set = self.tree_cursor.read_value().copy()
             self.do_next_set = False
         res = self.cur_set.pop()
         if len(self.cur_set) == 0:
             self.do_next_set = True
         toks = res.split(',')
         f = open(toks[0], 'r')
         f.seek(int(toks[1]))
         res = f.read(int(toks[2]))
         f.close()
         ent = self.type(to_parse=res)
         return tuple(ent.attrs[k] for k in self.type.__attrs__[:])
示例#2
0
 def next(self):
     if self.on_field is None:  # so, we iterate using hash-index
         if self.do_next_page:
             curr_page = Ipage(page_offset=self.page_offsets.pop(),
                               filename=self.filename)
             self.curr_items = curr_page.items()
             self.do_next_page = False
         item = self.curr_items[self.curr_iter]
         self.curr_iter += 1
         if self.curr_iter == len(self.curr_items):
             self.do_next_page = True
             self.curr_iter = 0
         self.iter += 1
         attrs = self.type(to_parse=item).attrs
         return tuple(attrs[k] for k in self.type.__attrs__[:])
     else:  # so, we iterate using b_tree index on field "on_field"
         if self.do_next_set:
             self.tree_cursor.next()
             self.cur_set = self.tree_cursor.read_value().copy()
             self.do_next_set = False
         res = self.cur_set.pop()
         if len(self.cur_set) == 0:
             self.do_next_set = True
         toks = res.split(',')
         f = open(toks[0], 'r')
         f.seek(int(toks[1]))
         res = f.read(int(toks[2]))
         f.close()
         ent = self.type(to_parse=res)
         return tuple(ent.attrs[k] for k in self.type.__attrs__[:])
示例#3
0
    def next(self):
        if self.on_cursor is None:
            if self.ordered_on is None:  # so, we iterate using hash-index
                if self.do_next_page:
                    curr_page = Ipage(page_offset=self.page_offsets.pop(),
                                      filename=self.filename)
                    self.curr_items = curr_page.items()
                    self.do_next_page = False
                item = self.curr_items[self.curr_iter]
                self.curr_iter += 1
                if self.curr_iter == len(self.curr_items):
                    self.do_next_page = True
                    self.curr_iter = 0
                self.iter += 1
                res = {}
                attrs = self.type(to_parse=item).attrs
                for field in self.fields:
                    res[field] = attrs[field]
                return tuple(res[k] for k in self.fields)
            else:  # so, we iterate using b_tree index on field "on_field"
                if self.do_next_set:
                    self.tree_cursor.next()
                    self.cur_set = self.tree_cursor.read_value().copy()
                    self.do_next_set = False
                res = self.cur_set.pop()
                if len(self.cur_set) == 0:
                    self.do_next_set = True
                toks = res.split(',')
                f = open(toks[0], 'r')
                f.seek(int(toks[1]))
                res = f.read(int(toks[2]))
                f.close()
                ent = self.type(to_parse=res)

                res = {}
                for field in self.fields:
                    res[field] = ent.attrs[field]
                return tuple(res[k] for k in self.fields)
        else:
            res = self.on_cursor.next()
            tmp = []

            # remove redundant attributes from result of calling next on given cursor
            for attr in self.on_cursor.type_attrs:
                if attr in self.fields:
                    tmp.append(self.on_cursor.type_attrs.index(attr))
            return tuple(res[t] for t in tmp)
示例#4
0
    def next(self):
        if self.on_cursor is None:
            if self.ordered_on is None:  # so, we iterate using hash-index
                if self.do_next_page:
                    curr_page = Ipage(page_offset=self.page_offsets.pop(), filename=self.filename)
                    self.curr_items = curr_page.items()
                    self.do_next_page = False
                item = self.curr_items[self.curr_iter]
                self.curr_iter += 1
                if self.curr_iter == len(self.curr_items):
                    self.do_next_page = True
                    self.curr_iter = 0
                self.iter += 1
                res = {}
                attrs = self.type(to_parse=item).attrs
                for field in self.fields:
                    res[field] = attrs[field]
                return tuple(res[k] for k in self.fields)
            else:  # so, we iterate using b_tree index on field "on_field"
                if self.do_next_set:
                    self.tree_cursor.next()
                    self.cur_set = self.tree_cursor.read_value().copy()
                    self.do_next_set = False
                res = self.cur_set.pop()
                if len(self.cur_set) == 0:
                    self.do_next_set = True
                toks = res.split(',')
                f = open(toks[0], 'r')
                f.seek(int(toks[1]))
                res = f.read(int(toks[2]))
                f.close()
                ent = self.type(to_parse=res)

                res = {}
                for field in self.fields:
                    res[field] = ent.attrs[field]
                return tuple(res[k] for k in self.fields)
        else:
            res = self.on_cursor.next()
            tmp = []

            # remove redundant attributes from result of calling next on given cursor
            for attr in self.on_cursor.type_attrs:
                if attr in self.fields:
                    tmp.append(self.on_cursor.type_attrs.index(attr))
            return tuple(res[t] for t in tmp)
示例#5
0
 def has_next(self):
     if self.on_cursor is None:
         if self.on_field is None:
             print("Something tried to create range-query cursor without assigned field")
         else:
             if self.equal_to is None:
                 res = self.tree_cursor.next()
                 key = self.tree_cursor.read_key()
                 self.tree_cursor.prev()
                 if key > self.less_than:
                     self.refresh()
                     return False
                 if res and len(self.cur_set) == 0:
                     return True
                 else:
                     self.refresh()
                     return False
             else:
                 l = len(self.cur_set)
                 if l != 0:
                     return True
                 else:
                     self.refresh()
                     return False
     else:
         if self.equal_to is None:
             if self.on_cursor.on_field is not None:
                 if not self.on_cursor.tree_cursor.next():
                     return False
                 key = self.on_cursor.tree_cursor.read_key()
                 if key > self.less_than:
                     return False
                 self.on_cursor.tree_cursor.prev()
                 return self.on_cursor.has_next()
             else:
                 tmp_iter = self.on_cursor.iter
                 tmp_curr_iter = self.on_cursor.curr_iter
                 tmp_page_offsets = self.on_cursor.page_offsets.copy()
                 tmp_do_next_set = self.on_cursor.do_next_set
                 items = self.on_cursor.curr_items
                 while True:
                     if tmp_iter == self.on_cursor.size:
                         self.refresh()
                         return False
                     if len(tmp_page_offsets) == 0:
                         self.refresh()
                         return False
                     if tmp_do_next_set:
                         curr_page = Ipage(page_offset=tmp_page_offsets.pop(), filename=self.on_cursor.filename)
                         items = curr_page.items()
                         tmp_do_next_set = False
                         tmp_curr_iter = 0
                     item = items[tmp_curr_iter]
                     tmp_curr_iter += 1
                     if tmp_curr_iter == len(items):
                         tmp_do_next_set = True
                         tmp_curr_iter = 0
                     tmp_iter += 1
                     attrs = self.on_cursor.type(to_parse=item).attrs
                     if self.less_than > attrs[self.on_field] > self.greater_than:
                         return True
         else:
             l = len(self.on_cursor.cur_set)
             if l != 0:
                 return True
             else:
                 self.refresh()
                 return False
示例#6
0
 def has_next(self):
     if self.on_cursor is None:
         if self.on_field is None:
             print(
                 "Something tried to create range-query cursor without assigned field"
             )
         else:
             if self.equal_to is None:
                 res = self.tree_cursor.next()
                 key = self.tree_cursor.read_key()
                 self.tree_cursor.prev()
                 if key > self.less_than:
                     self.refresh()
                     return False
                 if res and len(self.cur_set) == 0:
                     return True
                 else:
                     self.refresh()
                     return False
             else:
                 l = len(self.cur_set)
                 if l != 0:
                     return True
                 else:
                     self.refresh()
                     return False
     else:
         if self.equal_to is None:
             if self.on_cursor.on_field is not None:
                 if not self.on_cursor.tree_cursor.next():
                     return False
                 key = self.on_cursor.tree_cursor.read_key()
                 if key > self.less_than:
                     return False
                 self.on_cursor.tree_cursor.prev()
                 return self.on_cursor.has_next()
             else:
                 tmp_iter = self.on_cursor.iter
                 tmp_curr_iter = self.on_cursor.curr_iter
                 tmp_page_offsets = self.on_cursor.page_offsets.copy()
                 tmp_do_next_set = self.on_cursor.do_next_set
                 items = self.on_cursor.curr_items
                 while True:
                     if tmp_iter == self.on_cursor.size:
                         self.refresh()
                         return False
                     if len(tmp_page_offsets) == 0:
                         self.refresh()
                         return False
                     if tmp_do_next_set:
                         curr_page = Ipage(
                             page_offset=tmp_page_offsets.pop(),
                             filename=self.on_cursor.filename)
                         items = curr_page.items()
                         tmp_do_next_set = False
                         tmp_curr_iter = 0
                     item = items[tmp_curr_iter]
                     tmp_curr_iter += 1
                     if tmp_curr_iter == len(items):
                         tmp_do_next_set = True
                         tmp_curr_iter = 0
                     tmp_iter += 1
                     attrs = self.on_cursor.type(to_parse=item).attrs
                     if self.less_than > attrs[
                             self.on_field] > self.greater_than:
                         return True
         else:
             l = len(self.on_cursor.cur_set)
             if l != 0:
                 return True
             else:
                 self.refresh()
                 return False