def root_tables(self): return distinct_roots(*self.flat_args())
def root_tables(self): return distinct_roots(self.arg)
def root_tables(self): # pragma: no cover args = (arg for arg in self.flat_args() if isinstance(arg, ir.Expr)) return distinct_roots(*args)
def root_tables(self): return distinct_roots(*self.values)
def root_tables(self): return distinct_roots(self.expr, *self.window._order_by, *self.window._group_by)
def root_tables(self): return distinct_roots(*self.func_args)
def root_tables(self): if util.all_of([self.left.op(), self.right.op()], (Join, Selection)): # Unraveling is not possible return [self.left.op(), self.right.op()] else: return distinct_roots(self.left, self.right)