def main(self, model: db.Base, limit: int = 999, filter: str = "", order_by: str = "", offset: int = 0, join: str = "") -> tuple: s = constants.db_session() q = s.query(model) if join: if not isinstance(join, (list, tuple)): join = [join] for j in join: if isinstance(j, str): q = q.join(db.sa_text(j)) else: q = q.join(j) if filter: if isinstance(filter, str): q = q.filter(db.sa_text(filter)) else: q = q.filter(filter) if order_by: q = q.order_by(db.sa_text(order_by)) self.fetched_items = tuple(self._query(q, limit, offset)) self.fetched.emit(db.model_name(model), self.fetched_items) return self.fetched_items
def main(self, model: db.Base, limit: int = 999, filter: str = "", order_by: str = "", offset: int = 0) -> tuple: s = constants.db_session() q = s.query(model) if filter: q = q.filter(db.sa_text(filter)) if order_by: q = q.order_by(db.sa_text(order_by)) self.fetched_items = tuple(self._query(q, limit, offset)) self.fetched.emit(db.model_name(model), self.fetched_items) return self.fetched_items
def main(self, model: db.Base, ids: set, limit: int = 999, filter: str = "", order_by: str = "", offset: int = 0) -> tuple: log.d("Fetching items from a set with", len(ids), "ids", "offset:", offset, "limit:", limit) if not ids: return tuple() s = constants.db_session() q = s.query(model) if filter: q = q.filter(db.sa_text(filter)) if order_by: q = q.order_by(db.sa_text(order_by)) id_amount = len(ids) # TODO: only SQLite has 999 variables limit _max_variables = 900 if id_amount > _max_variables: fetched_list = [x for x in q.all() if x.id in ids] fetched_list = fetched_list[offset:][:limit] self.fetched_items = tuple(fetched_list) elif id_amount == 1: self.fetched_items = (q.get(ids.pop()), ) else: q = q.filter(model.id.in_(ids)) self.fetched_items = tuple(self._query(q, limit, offset)) self.fetched.emit(db.model_name(model), self.fetched_items) log.d("Returning", len(self.fetched_items), "fetched items") return self.fetched_items
def _get_sql(self, expr): if isinstance(expr, str): return db.sa_text(expr) else: return expr