Return all of the child nodes of this operator
Get the names of the columns produced by this operator.
Return all expression objects that appear in this node
Return a new instance of the same object, but with the children replaced with the provided list.
Replace all of the expressions in this operator.
Perform a recursive rewrite.
Perform a recursive rewrite. The following pattern is pretty common throughout Mimir: def replaceFooWithBar(e:Expression): Expression = e match { case Foo(a, b, c, ...) => Bar(a, b, c, ...) case _ => e.recur(replaceFooWithBar(_)) } Note how specific rewrites are applied to specific patterns in the tree, and recur is used to ignore/descend through every other class of object
Apply a method to recursively rewrite all of the Expressions in this object.
Apply a method to recursively rewrite all of the Expressions in this object.
Return Self.
Return Self.
This mainly exists in support of OperatorConstructors
Convert the operator into a string.
The starting point for stringification is to have no indentation
The starting point for stringification is to have no indentation
A base relation (Table).
Note that schema information is required to make Typechecking self-contained and database-independent
Metadata columns are special implicit attributes used by many database backends. They are specified as follows: (output, input, type) Where: output: The name that the implicit attribute will be referenced by in the output relation input: An expression to extract the implicit attribute type: The type of the implicit attribute. For example: ("MIMIR_ROWID", Var("ROWID"), Type.TRowId()) will extract SQL's implicit ROWID attribute into the new column "MIMIR_ROWID" with the rowid type.