コード例 #1
0
ファイル: pg_query.py プロジェクト: j2project/pyon
    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"])
コード例 #2
0
ファイル: pg_query.py プロジェクト: scion-network/scioncc
    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
コード例 #3
0
ファイル: pg_query.py プロジェクト: edwardhunter/scioncc
    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