def __init__(self, query, basetable): DatastoreQueryBuilder.check_query(query) self.query = query self.basetable = basetable self.cols = ["id"] if not self.query["query_args"].get("id_only", True): self.cols.append("doc") self._valcnt = 0 self.values = {} self.where = self._build_where(self.query["where"]) self.order_by = self._build_order_by(self.query["order_by"])
def __init__(self, query, basetable): DatastoreQueryBuilder.check_query(query) self.query = query self.basetable = basetable self.from_tables = basetable self._valcnt = 0 self.values = {} self.query_params = query.get("query_params", {}) self.ds_sub = self.query["query_args"].get("ds_sub", "") self.query_format = self.query["query_args"].get("format", "") self.table_aliases = [self.basetable] self.has_basic_cols = True if self.query_format == "sql": self.basic_cols = False self.cols = self.query["returns"] self.from_tables = self.query["from"] self.table_aliases = [] self.where = self.query.get("where", None) self.group_by = self.query.get("group_by", None) self.having = self.query.get("having", None) self.order_by = self.query.get("order_by", None) elif self.query_format == "complex": # Build list of return values self.cols = ["base.id"] if not self.query["query_args"].get("id_only", True): self.cols.append("base.doc") if self.query.get("returns", None): if self.query["returns"][0] is True: self.cols.extend(self.query["returns"][1:]) else: self.has_basic_cols = False self.cols = self.query["returns"][1:] # Build FROM fragment with aliases using base table and provided list of other tables # Convention for table aliases: # base table (resources, associations, events) as base # subsequent from tables t0, t1 etc self.table_aliases = ["base"] self.from_tables += " AS base" if self.query.get("from", None): for i, from_table in enumerate(self.query["from"]): if " as " in from_table.lower(): self.table_aliases.append( from_table[from_table.lower().find(" as ") + 4:]) self.from_tables += ",%s" % from_table else: f_alias = "t%s" % i self.table_aliases.append(f_alias) self.from_tables += ",%s as %s" % (from_table, f_alias) if self.query.get("where_join", None): self.where = "(" + self._build_where( self.query["where"]) + ") AND ((" + ") AND (".join( self.query["where_join"]) + "))" else: self.where = self._build_where(self.query["where"]) self.order_by = self._build_order_by(self.query["order_by"]) self.group_by = self.query.get("group_by", None) self.having = self.query.get("having", None) else: self.cols = ["id"] if not self.query["query_args"].get("id_only", True): self.cols.append("doc") if self.ds_sub: self.basetable += "_" + self.query["query_args"]["ds_sub"] self.from_tables = self.basetable self.table_aliases = [self.basetable] self.where = self._build_where(self.query["where"]) self.order_by = self._build_order_by(self.query["order_by"]) self.group_by = None self.having = None
def __init__(self, query, basetable): DatastoreQueryBuilder.check_query(query) self.query = query self.basetable = basetable self.from_tables = basetable self._valcnt = 0 self.values = {} self.query_params = query.get("query_params", {}) self.ds_sub = self.query["query_args"].get("ds_sub", "") self.query_format = self.query["query_args"].get("format", "") self.table_aliases = [self.basetable] self.has_basic_cols = True if self.query_format == "sql": self.basic_cols = False self.cols = self.query["returns"] self.from_tables = self.query["from"] self.table_aliases = [] self.where = self.query.get("where", None) self.group_by = self.query.get("group_by", None) self.having = self.query.get("having", None) self.order_by = self.query.get("order_by", None) elif self.query_format == "complex": # Build list of return values self.cols = ["base.id"] if not self.query["query_args"].get("id_only", True): self.cols.append("base.doc") if self.query.get("returns", None): if self.query["returns"][0] is True: self.cols.extend(self.query["returns"][1:]) else: self.has_basic_cols = False self.cols = self.query["returns"][1:] # Build FROM fragment with aliases using base table and provided list of other tables # Convention for table aliases: # base table (resources, associations, events) as base # subsequent from tables t0, t1 etc self.table_aliases = ["base"] self.from_tables += " AS base" if self.query.get("from", None): for i, from_table in enumerate(self.query["from"]): if " as " in from_table.lower(): self.table_aliases.append(from_table[from_table.lower().find(" as ") + 4:]) self.from_tables += ",%s" % from_table else: f_alias = "t%s" % i self.table_aliases.append(f_alias) self.from_tables += ",%s as %s" % (from_table, f_alias) if self.query.get("where_join", None): self.where = "(" + self._build_where(self.query["where"]) + ") AND ((" + ") AND (".join(self.query["where_join"]) + "))" else: self.where = self._build_where(self.query["where"]) self.order_by = self._build_order_by(self.query["order_by"]) self.group_by = self.query.get("group_by", None) self.having = self.query.get("having", None) else: self.cols = ["id"] if not self.query["query_args"].get("id_only", True): self.cols.append("doc") if self.ds_sub: self.basetable += "_" + self.query["query_args"]["ds_sub"] self.from_tables = self.basetable self.table_aliases = [self.basetable] self.where = self._build_where(self.query["where"]) self.order_by = self._build_order_by(self.query["order_by"]) self.group_by = None self.having = None