Ejemplo n.º 1
0
    def to_sql(self, schema, not_null=False, boolean=False):
        acc = {"b": [], "s": [], "n": []}

        for term in self.terms:
            for t, v in SQLang[term].to_sql(schema)[0].sql.items():
                acc[t].append(v)

        output = {}
        for t, terms in acc.items():
            if not terms:
                continue
            elif len(terms) == 1:
                output[t] = terms[0]
            else:
                output[t] = sql_coalesce(terms)
        return wrap([{"name": ".", "sql": output}])
Ejemplo n.º 2
0
    def to_sql(self, schema, not_null=False, boolean=False):
        value = SQLang[self.term].to_sql(schema, not_null=True)
        acc = []
        for c in value:
            for t, v in c.sql.items():
                if t == "s":
                    acc.append("CAST(" + v + " as FLOAT)")
                else:
                    acc.append(v)

        if not acc:
            return wrap([])
        elif len(acc) == 1:
            return wrap([{"name": ".", "sql": {"n": acc[0]}}])
        else:
            return wrap([{"name": ".", "sql": {"n": sql_coalesce(acc)}}])
Ejemplo n.º 3
0
def to_sql(self, schema, not_null=False, boolean=False):
    test = self.term.missing().to_sql(schema, boolean=True)[0].sql.b
    value = self.term.to_sql(schema, not_null=True)[0].sql
    acc = []
    for t, v in value.items():
        if t == "b":
            acc.append(SQL_CASE+SQL_WHEN + sql_iso(test) + SQL_THEN + SQL_NULL + SQL_WHEN + sql_iso(v) + SQL_THEN+"'true'"+SQL_ELSE+"'false'"+SQL_END)
        elif t == "s":
            acc.append(v)
        else:
            acc.append("RTRIM(RTRIM(CAST" + sql_iso(v + " as TEXT), " + quote_value('0')) + ", " + quote_value(".") + ")")
    if not acc:
        return wrap([{}])
    elif len(acc) == 1:
        return wrap([{"name": ".", "sql": {"s": acc[0]}}])
    else:
        return wrap([{"name": ".", "sql": {"s": sql_coalesce(acc)}}])
Ejemplo n.º 4
0
def to_sql(self, schema, not_null=False, boolean=False):
    lhs = self.lhs.to_sql(schema)[0].sql.n
    rhs = self.rhs.to_sql(schema)[0].sql.n
    d = self.default.to_sql(schema)[0].sql.n

    if lhs and rhs:
        if d == None:
            return wrap([{
                "name": ".",
                "sql": {"n": sql_iso(lhs) + " / " + sql_iso(rhs)}
            }])
        else:
            return wrap([{
                "name": ".",
                "sql": {"n": sql_coalesce([sql_iso(lhs) + " / " + sql_iso(rhs), d])}
            }])
    else:
        return Null
Ejemplo n.º 5
0
                        index_to_column[column_number] = ColumnMapping(
                            push_name=s.name,
                            push_column_name=s.name,
                            push_column=si,
                            push_child=name,
                            pull=get_column(column_number),
                            sql=full_sql,
                            column_alias=_make_column_name(column_number),
                            type="number")
            else:  # STANDARD AGGREGATES
                for details in s.value.partial_eval().to_sql(schema):
                    for sql_type, sql in details.sql.items():
                        column_number = len(outer_selects)
                        sql = sql_aggs[s.aggregate] + sql_iso(sql)
                        if s.default != None:
                            sql = sql_coalesce([sql, quote_value(s.default)])
                        outer_selects.append(
                            sql_alias(sql, _make_column_name(column_number)))
                        index_to_column[column_number] = ColumnMapping(
                            push_name=s.name,
                            push_column_name=s.name,
                            push_column=si,
                            push_child=
                            ".",  # join_field(split_field(details.name)[1::]),
                            pull=get_column(column_number),
                            sql=sql,
                            column_alias=_make_column_name(column_number),
                            type=sql_type_to_json_type[sql_type])

        for w in query.window:
            outer_selects.append(self._window_op(self, query, w))