Exemple #1
0
def find_source_table(expr):
    # A more complex version of _find_base_table.
    # TODO: Revisit/refactor this all at some point
    node = expr.op()

    # First table expression observed for each argument that the expr
    # depends on
    first_tables = []

    def push_first(arg):
        if not isinstance(arg, ir.Expr):
            return
        if isinstance(arg, ir.TableExpr):
            first_tables.append(arg)
        else:
            collect(arg.op())

    def collect(node):
        for arg in node.flat_args():
            push_first(arg)

    collect(node)
    options = util.unique_by_key(first_tables, id)

    if len(options) > 1:
        raise NotImplementedError

    return options[0]
Exemple #2
0
def find_backend(expr):
    from ibis.client import Client

    backends = []

    def walk(expr):
        node = expr.op()
        for arg in node.flat_args():
            if isinstance(arg, Client):
                backends.append(arg)
            elif isinstance(arg, ir.Expr):
                walk(arg)

    walk(expr)
    backends = util.unique_by_key(backends, id)

    if len(backends) > 1:
        raise ValueError('Multiple backends found')

    return backends[0]
Exemple #3
0
def find_backend(expr):
    backends = []

    def walk(expr):
        node = expr.op()
        for arg in node.flat_args():
            if isinstance(arg, Client):
                backends.append(arg)
            elif isinstance(arg, ir.Expr):
                walk(arg)

    walk(expr)
    backends = util.unique_by_key(backends, id)

    if len(backends) > 1:
        raise ValueError('Multiple backends found')
    elif len(backends) == 0:
        default = options.default_backend
        if default is None:
            raise com.IbisError('Expression depends on no backends, '
                                'and found no default')
        return default

    return backends[0]
Exemple #4
0
def distinct_roots(*args):
    all_roots = []
    for arg in args:
        all_roots.extend(arg._root_tables())
    return util.unique_by_key(all_roots, id)
Exemple #5
0
def distinct_roots(*args):
    all_roots = []
    for arg in args:
        all_roots.extend(arg._root_tables())
    return util.unique_by_key(all_roots, id)