SQL define
| 35 | g_having_agg_threshold = 0.9 |
| 36 | |
| 37 | class SQL(object): |
| 38 | """SQL define""" |
| 39 | op_sql_dict = {0: ">", 1: "<", 2: "==", 3: "!=", 4: ">=", 5: "<="} |
| 40 | agg_sql_dict = {0: "", 1: "AVG", 2: "MAX", 3: "MIN", 4: "COUNT", 5: "SUM"} |
| 41 | conn_sql_dict = {0: "", 1: "and", 2: "or"} |
| 42 | order_dict = {0: "", 1: "asc", 2: "desc"} |
| 43 | sel_num_dict = {0: 1, 1: 2, 2: 3, 3: 4} |
| 44 | #cond_num_dict = {0: 1, 1: 2, 2: 3, 3: 4, 4: 5} |
| 45 | cond_num_dict = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4} |
| 46 | group_num_dict = {0: 0, 1: 1} |
| 47 | group_type_dict = {0: 'none', 1: 'group', 2: 'group_having', 3: 'group_order'} |
| 48 | |
| 49 | order2id = {"": 0, "asc": 1, "desc": 2} |
| 50 | |
| 51 | num_where_ops = len(op_sql_dict) + 1 |
| 52 | num_agg_ops = len(agg_sql_dict) |
| 53 | num_cond_ops = len(conn_sql_dict) |
| 54 | num_order_directions = len(order_dict) |
| 55 | num_sel_num = len(sel_num_dict) |
| 56 | num_where_num = len(cond_num_dict) |
| 57 | num_group_num = len(group_num_dict) |
| 58 | num_group_type = len(group_type_dict) |
| 59 | |
| 60 | dtype_str = 'text' |
| 61 | dtype_num = 'real' |
| 62 | |
| 63 | def __init__(self, cond_conn_op: int, agg: list, sel: list, conds: list, **kwargs): |
| 64 | """doc""" |
| 65 | self.cond_conn_op = cond_conn_op |
| 66 | self.sel = [] |
| 67 | self.agg = [] |
| 68 | sel_agg_pairs = sorted(zip(sel, agg), key=lambda x: x[0]) |
| 69 | for col_id, agg_op in sel_agg_pairs: |
| 70 | self.sel.append(col_id) |
| 71 | self.agg.append(agg_op) |
| 72 | self.conds = list(sorted(conds, key=lambda x: x[0])) |
| 73 | self.order_by = list(sorted(kwargs.get("order_by", []))) |
| 74 | self.group_by = list(sorted(kwargs.get("group_by", []))) |
| 75 | self.having = list(sorted(kwargs.get("having", []))) |
| 76 | order_str = kwargs.get("order_direction", "").lower() |
| 77 | self.order_direction = self.order2id.get(order_str, 0) |
| 78 | limit = kwargs.get("limit", None) |
| 79 | self.limit = '0' if limit is None else str(limit) |
| 80 | self.sel_num = len(self.sel) |
| 81 | self.cond_num = len(self.conds) |
| 82 | self.group_num = len(self.group_by) |
| 83 | self.group_type = 0 |
| 84 | if len(self.group_by) > 0: |
| 85 | self.group_type = 1 |
| 86 | if len(self.having) > 0: |
| 87 | self.group_type = 2 |
| 88 | elif len(self.order_by) > 0 and self.order_by[0][0] > 0: |
| 89 | self.group_type = 3 |
| 90 | |
| 91 | |
| 92 | @classmethod |
| 93 | def from_dict(cls, data: dict): |
| 94 | """doc""" |
nothing calls this directly
no outgoing calls
no test coverage detected