Esempio n. 1
0
        return ("coalesce(" + sign.join("(" + (t).to_python() + ")"
                                        for t in self.terms) + ", " +
                (self.default).to_python() + ")")


def with_var(var, expression, eval):
    """
    :param var: NAME GIVEN TO expression
    :param expression: THE EXPRESSION TO COMPUTE FIRST
    :param eval: THE EXPRESSION TO COMPUTE SECOND, WITH var ASSIGNED
    :return: PYTHON EXPRESSION
    """
    return "[(" + eval + ") for " + var + " in [" + expression + "]][0]"


Python = Language("Python")

_python_operators = {
    "add": (" + ", "0"),  # (operator, zero-array default value) PAIR
    "sum": (" + ", "0"),
    "mul": (" * ", "1"),
    "sub": (" - ", None),
    "div": (" / ", None),
    "exp": (" ** ", None),
    "mod": (" % ", None),
    "gt": (" > ", None),
    "gte": (" >= ", None),
    "lte": (" <= ", None),
    "lt": (" < ", None),
}
Esempio n. 2
0
                                        for t in self.terms) + ", " +
                BQLang[self.default].to_bq(schema) + ")")


def basic_multiop_to_bq(self,
                        schema,
                        not_null=False,
                        boolean=False,
                        many=False):
    op, identity = _sql_operators[self.op.split("basic.")[1]]
    sql = op.join(
        sql_iso(BQLang[t].to_bq(schema)[0].sql.n) for t in self.terms)
    return wrap([{"name": ".", "sql": {"n": sql}}])


BQLang = Language("BQLang")

_sql_operators = {
    # (operator, zero-array default value) PAIR
    "add": (SQL_PLUS, SQL_ZERO),
    "sum": (SQL_PLUS, SQL_ZERO),
    "mul": (SQL_STAR, SQL_ONE),
    "sub": (SQL(" - "), None),
    "div": (SQL(" / "), None),
    "exp": (SQL(" ** "), None),
    "mod": (SQL(" % "), None),
    "gt": (SQL(" > "), None),
    "gte": (SQL(" >= "), None),
    "lte": (SQL(" <= "), None),
    "lt": (SQL_LT, None),
}
Esempio n. 3
0
    all_paths = set(c.nested_path[0] for v in where_vars
                    for c in var_to_columns[v.var])

    if len(all_paths) == 0:
        output.setdefault(".", []).append(expr)
    elif len(all_paths) == 1:
        output.setdefault(first(all_paths), []).append(expr)
    elif is_op(expr, AndOp_):
        for w in expr.terms:
            split_expression_by_path(w,
                                     schema,
                                     output,
                                     var_to_columns,
                                     lang=lang)
    else:
        Log.error("Can not handle complex expression clause")

    return output


def get_type(var_name):
    type_ = var_name.split(".$")[1:]
    if not type_:
        return "j"
    return json_type_to_es_script_type.get(type_[0], "j")


json_type_to_es_script_type = {"string": "s", "boolean": "b", "number": "n"}

ES52 = Language("ES52")
Esempio n. 4
0
                                 schema=schema),
            }).partial_eval().to_es_script(schema))
    else:
        calc = op.join("(" + NumberOp(t).to_es_script(schema).expr + ")"
                       for t in self.terms)
        return (WhenOp(
            OrOp([t.missing() for t in self.terms]), **{
                "then": self.default,
                "else": EsScript(type=NUMBER,
                                 expr=calc,
                                 frum=self,
                                 schema=schema),
            }).partial_eval().to_es_script(schema))


Painless = Language("Painless")

_count_template = (
    "long count=0; for(v in {{expr}}) if (v!=null) count+=1; return count;")

_painless_operators = {
    "add": (" + ", "0"),  # (operator, zero-array default value) PAIR
    "sum": (" + ", "0"),
    "mul": (" * ", "1"),
    "basic.add": (" + ", "0"),
    "basic.mul": (" * ", "1"),
    "sub": ("-", None),
    "div": ("/", None),
    "exp": ("**", None),
    "mod": ("%", None),
    "gt": (">", None),
Esempio n. 5
0
    return ConcatSQL(SQL("WITH x AS (SELECT ("), expression, SQL(") AS "), var,
                     SQL(") SELECT "), eval, SQL(" FROM x"))


def basic_multiop_to_sql(self,
                         schema,
                         not_null=False,
                         boolean=False,
                         many=False):
    op, identity = _sql_operators[self.op.split("basic.")[1]]
    sql = op.join(
        sql_iso(SQLang[t].to_sql(schema)[0].sql.n) for t in self.terms)
    return wrap([{"name": ".", "sql": {"n": sql}}])


SQLang = Language("SQLang")

_sql_operators = {
    # (operator, zero-array default value) PAIR
    "add": (SQL_PLUS, SQL_ZERO),
    "sum": (SQL_PLUS, SQL_ZERO),
    "mul": (SQL_STAR, SQL_ONE),
    "sub": (SQL(" - "), None),
    "div": (SQL(" / "), None),
    "exp": (SQL(" ** "), None),
    "mod": (SQL(" % "), None),
    "gt": (SQL(" > "), None),
    "gte": (SQL(" >= "), None),
    "lte": (SQL(" <= "), None),
    "lt": (SQL_LT, None),
}
Esempio n. 6
0
                    return class_.define(expr)

                # THIS LANGUAGE DOES NOT SUPPORT THIS OPERATOR, GOTO BASE LANGUAGE AND GET THE MACRO
                class_ = language[op.get_id()]
                output = class_.define(expr).partial_eval()
                return _jx_expression(output, lang)
        else:
            if not items:
                return NULL
            raise Log.error("{{instruction|json}} is not known", instruction=expr)

    except Exception as e:
        Log.error("programmer error expr = {{value|quote}}", value=expr, cause=e)


language = Language(None)


_json_encoder = utf8_json_encoder


def value2json(value):
    try:
        scrubbed = scrub(value, scrub_number=float)
        return text(_json_encoder(scrubbed))
    except Exception as e:
        e = Except.wrap(e)
        Log.warning("problem serializing {{type}}", type=text(repr(value)), cause=e)
        raise e