Ejemplo n.º 1
0
def equality(ctx, x, y):
    if util.is_empty(x) or util.is_empty(y):
        return False

    if type(x[0]) in DATETIME_NODES_LIST or type(y[0]) in DATETIME_NODES_LIST:
        return datetime_equality(ctx, x, y)

    return x == y
Ejemplo n.º 2
0
def indexer_expression(ctx, parentData, node):
    coll_node = node["children"][0]
    idx_node = node["children"][1]

    coll = engine.do_eval(ctx, parentData, coll_node)
    idx = engine.do_eval(ctx, parentData, idx_node)

    if util.is_empty(idx):
        return []

    idxNum = int(idx[0])

    if coll is not None and util.is_some(
            idxNum) and len(coll) > idxNum and idxNum >= 0:
        return [coll[idxNum]]

    return []
Ejemplo n.º 3
0
def doInvoke(ctx, fn_name, data, raw_params):
    if isinstance(fn_name, list) and len(fn_name) == 1:
        fn_name = fn_name[0]

    if type(fn_name) != str or not fn_name in invocations:
        raise Exception("Not implemented: " + str(fn_name))

    invocation = invocations[fn_name]

    if not "arity" in invocation:
        if raw_params is None or util.is_empty(raw_params):
            res = invocation["fn"](ctx, util.arraify(data))
            return util.arraify(res)

        raise Exception(fn_name + " expects no params")

    paramsNumber = 0
    if isinstance(raw_params, list):
        paramsNumber = len(raw_params)

    if not paramsNumber in invocation["arity"]:
        raise Exception(fn_name + " wrong arity: got " + str(paramsNumber))

    params = []
    argTypes = invocation["arity"][paramsNumber]

    for i in range(0, paramsNumber):
        tp = argTypes[i]
        pr = raw_params[i]
        params.append(make_param(ctx, data, tp, pr))

    params.insert(0, data)
    params.insert(0, ctx)

    if "nullable" in invocation:
        if any(util.is_nullable(x) for x in params):
            return []

    res = invocation["fn"](*params)

    return util.arraify(res)
Ejemplo n.º 4
0
def is_empty(x):
    if util.is_number(x):
        return False
    return util.is_empty(x)
Ejemplo n.º 5
0
def empty_fn(ctx, value):
    return util.is_empty(value)
Ejemplo n.º 6
0
def exists_macro(ctx, coll, expr=None):
    vec = coll
    if expr is not None:
        return exists_macro(ctx, filtering.where_macro(ctx, coll, expr))

    return not util.is_empty(vec)