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__[:])
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)
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
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