ExprNode.h
Classes
- TableExprNode -- Handle class for a table column expression tree (full description)
Interface
- friend TableExprNode operator+ (const TableExprNode& left, const TableExprNode& right)
- friend TableExprNode operator- (const TableExprNode& left, const TableExprNode& right)
- friend TableExprNode operator* (const TableExprNode& left, const TableExprNode& right)
- friend TableExprNode operator/ (const TableExprNode& left, const TableExprNode& right)
- friend TableExprNode operator% (const TableExprNode& left, const TableExprNode& right)
- friend TableExprNode operator== (const TableExprNode& left, const TableExprNode& right)
- friend TableExprNode operator!= (const TableExprNode& left, const TableExprNode& right)
- friend TableExprNode operator>= (const TableExprNode& left, const TableExprNode& right)
- friend TableExprNode operator> (const TableExprNode& left, const TableExprNode& right)
- friend TableExprNode operator<= (const TableExprNode& left, const TableExprNode& right)
- friend TableExprNode operator< (const TableExprNode& left, const TableExprNode& right)
- friend TableExprNode operator&& (const TableExprNode& left, const TableExprNode& right)
- friend TableExprNode operator|| (const TableExprNode& left, const TableExprNode& right)
- friend TableExprNode near (const TableExprNode& left, const TableExprNode& right)
- friend TableExprNode near (const TableExprNode& left, const TableExprNode& right, const TableExprNode& tolerance)
- friend TableExprNode nearAbs (const TableExprNode& left, const TableExprNode& right)
- friend TableExprNode nearAbs (const TableExprNode& left, const TableExprNode& right, const TableExprNode& tolerance)
- friend TableExprNode sin (const TableExprNode& node)
- friend TableExprNode sinh (const TableExprNode& node)
- friend TableExprNode cos (const TableExprNode& node)
- friend TableExprNode cosh (const TableExprNode& node)
- friend TableExprNode exp (const TableExprNode& node)
- friend TableExprNode log (const TableExprNode& node)
- friend TableExprNode log10 (const TableExprNode& node)
- friend TableExprNode pow (const TableExprNode& x, const TableExprNode& y)
- friend TableExprNode square (const TableExprNode& node)
- friend TableExprNode sqrt (const TableExprNode& node)
- friend TableExprNode norm (const TableExprNode& node)
- friend TableExprNode asin (const TableExprNode& node)
- friend TableExprNode acos (const TableExprNode& node)
- friend TableExprNode atan (const TableExprNode& node)
- friend TableExprNode atan2 (const TableExprNode& y, const TableExprNode& x)
- friend TableExprNode tan (const TableExprNode& node)
- friend TableExprNode tanh (const TableExprNode& node)
- friend TableExprNode sign (const TableExprNode& node)
- friend TableExprNode round (const TableExprNode& node)
- friend TableExprNode ceil (const TableExprNode& node)
- friend TableExprNode abs (const TableExprNode& node)
- friend TableExprNode floor (const TableExprNode& node)
- friend TableExprNode fmod (const TableExprNode& x, const TableExprNode& y)
- friend TableExprNode strlength (const TableExprNode& node)
- friend TableExprNode upcase (const TableExprNode& node)
- friend TableExprNode downcase (const TableExprNode& node)
- friend TableExprNode trim (const TableExprNode& node)
- friend TableExprNode regex (const TableExprNode& node)
- friend TableExprNode pattern (const TableExprNode& node)
- friend TableExprNode sqlpattern (const TableExprNode& node)
- friend TableExprNode datetime (const TableExprNode& node)
- friend TableExprNode mjdtodate (const TableExprNode& node)
- friend TableExprNode mjd (const TableExprNode& node)
- friend TableExprNode date (const TableExprNode& node)
- friend TableExprNode year (const TableExprNode& node)
- friend TableExprNode month (const TableExprNode& node)
- friend TableExprNode day (const TableExprNode& node)
- friend TableExprNode cmonth (const TableExprNode& node)
- friend TableExprNode weekday (const TableExprNode& node)
- friend TableExprNode cdow (const TableExprNode& node)
- friend TableExprNode week (const TableExprNode& node)
- friend TableExprNode time (const TableExprNode& node)
- friend TableExprNode isNaN (const TableExprNode& node)
- friend TableExprNode min (const TableExprNode& a, const TableExprNode& b)
- friend TableExprNode max (const TableExprNode& a, const TableExprNode& b)
- friend TableExprNode conj (const TableExprNode& node)
- friend TableExprNode real (const TableExprNode& node)
- friend TableExprNode imag (const TableExprNode& node)
- friend TableExprNode amplitude (const TableExprNode& node)
- friend TableExprNode phase (const TableExprNode& node)
- friend TableExprNode arg (const TableExprNode& node)
- friend TableExprNode formComplex (const TableExprNode& real, const TableExprNode& imag)
- friend TableExprNode sum (const TableExprNode& array)
- friend TableExprNode product (const TableExprNode& array)
- friend TableExprNode sumSquare (const TableExprNode& array)
- friend TableExprNode min (const TableExprNode& array)
- friend TableExprNode max (const TableExprNode& array)
- friend TableExprNode mean (const TableExprNode& array)
- friend TableExprNode variance (const TableExprNode& array)
- friend TableExprNode stddev (const TableExprNode& array)
- friend TableExprNode avdev (const TableExprNode& array)
- friend TableExprNode median (const TableExprNode& array)
- friend TableExprNode fractile (const TableExprNode& array, const TableExprNode& fraction)
- friend TableExprNode any (const TableExprNode& array)
- friend TableExprNode all (const TableExprNode& array)
- friend TableExprNode ntrue (const TableExprNode& array)
- friend TableExprNode nfalse (const TableExprNode& array)
- friend TableExprNode sums (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
- friend TableExprNode products (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
- friend TableExprNode sumSquares (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
- friend TableExprNode mins (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
- friend TableExprNode maxs (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
- friend TableExprNode means (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
- friend TableExprNode variances (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
- friend TableExprNode stddevs (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
- friend TableExprNode avdevs (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
- friend TableExprNode medians (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
- friend TableExprNode fractiles (const TableExprNode& array, const TableExprNode& fraction, const TableExprNodeSet& collapseAxes)
- friend TableExprNode anys (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
- friend TableExprNode alls (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
- friend TableExprNode ntrues (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
- friend TableExprNode nfalses (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
- friend TableExprNode array (const TableExprNode& values, const TableExprNodeSet& shape)
- friend TableExprNode isdefined (const TableExprNode& array)
- friend TableExprNode nelements (const TableExprNode& array)
- friend TableExprNode ndim (const TableExprNode& array)
- friend TableExprNode shape (const TableExprNode& array)
- friend TableExprNode iif (const TableExprNode& condition, const TableExprNode& arg1, const TableExprNode& arg2)
- Public Members
- TableExprNode ()
- TableExprNode operator+ () const
- TableExprNode operator- () const
- TableExprNode operator! () const
- TableExprNode operator() (const TableExprNodeSet& indices)
- TableExprNode in (const TableExprNode& array) const
- TableExprNode in (const TableExprNodeSet& set) const
- TableExprNode (const Bool& value)
- TableExprNode (const Int& value)
- TableExprNode (const Double& value)
- TableExprNode (const Complex& value)
- TableExprNode (const DComplex& value)
- TableExprNode (const String& value)
- TableExprNode (const char*)
- TableExprNode (const Regex& value)
- TableExprNode (const MVTime& value)
- TableExprNode (const Array<Bool>& value)
- TableExprNode (const Array<uChar>& value)
- TableExprNode (const Array<Short>& value)
- TableExprNode (const Array<uShort>& value)
- TableExprNode (const Array<Int>& value)
- TableExprNode (const Array<uInt>& value)
- TableExprNode (const Array<Float>& value)
- TableExprNode (const Array<Double>& value)
- TableExprNode (const Array<Complex>& value)
- TableExprNode (const Array<DComplex>& value)
- TableExprNode (const Array<String>& value)
- TableExprNode (const Array<MVTime>& value)
- TableExprNode (TableExprNodeRep*)
- TableExprNode (const TableExprNode&)
- TableExprNode& operator= (const TableExprNode&)
- ~TableExprNode ()
- DataType dataType() const
- Bool isScalar() const
- void get (const TableExprId& id, Bool& value) const
- void get (const TableExprId& id, Double& value) const
- void get (const TableExprId& id, DComplex& value) const
- void get (const TableExprId& id, String& value) const
- void get (const TableExprId& id, Regex& value) const
- void get (const TableExprId& id, MVTime& value) const
- void get (const TableExprId& id, Array<Bool>& value) const
- void get (const TableExprId& id, Array<Double>& value) const
- void get (const TableExprId& id, Array<DComplex>& value) const
- void get (const TableExprId& id, Array<String>& value) const
- void get (const TableExprId& id, Array<MVTime>& value) const
- DataType getColumnDataType() const
- Array<Bool> getColumnBool() const
- Array<uChar> getColumnuChar() const
- Array<Short> getColumnShort() const
- Array<uShort> getColumnuShort() const
- Array<Int> getColumnInt() const
- Array<uInt> getColumnuInt() const
- Array<Float> getColumnFloat() const
- Array<Double> getColumnDouble() const
- Array<Complex> getColumnComplex() const
- Array<DComplex> getColumnDComplex() const
- Array<String> getColumnString() const
- void show (ostream&) const
- void ranges (Block<TableExprRange>&)
- Bool checkTable (const Table& table) const
- Bool checkReplaceTable (const Table& table, Bool canBeConst=False) const
- const BaseTable* baseTablePtr() const
- static TableExprNode newColumnNode (const Table& tab, const BaseTable* tabptr, const String& name, const Base<String>& fieldNames)
- static TableExprNode newKeyConst (const TableRecord&, const TableRecord<Vector>& fieldNames)
- static void throwInvDT()
- static void throwInvDT (const String& message)
- static TableExprNode newFunctionNode (TableExprFuncNode::FunctionType, const TableExprNodeSet& set, const FunctionType& table, uInt origin = 0)
- static TableExprNode newFunctionNode (TableExprFuncNode::FunctionType, const TableExprNode& node)
- static TableExprNode newFunctionNode (TableExprFuncNode::FunctionType, const TableExprNode& node1, const TableExprNode& node2)
- static TableExprNode newFunctionNode (TableExprFuncNode::FunctionType, const TableExprNode& node1, const TableExprNode& node2, const TableExprNode& node3)
- static TableExprNode newFunctionNode (TableExprFuncNode::FunctionType, const TableExprNode& array, const TableExprNodeSet& axes)
- static TableExprNode newFunctionNode (TableExprFuncNode::FunctionType, const TableExprNode& array, const TableExprNode& node, const TableExprNodeSet& axes)
- static TableExprNode newRownrNode (const BaseTable* tabptr, uInt origin)
- static TableExprNode newRowidNode (const BaseTable* tabptr)
- static TableExprNode newRandomNode (const BaseTable* tabptr)
- static TableExprNode newArrayPartNode (const TableExprNode& arrayNode, const TableExprNodeSet& indices, uInt origin)
- Private Members
- TableExprNodeRep* getRep()
- static PtrBlock<TableExprNodeRep*> convertBlockTEN (Block<TableExprNode>& nodes)
- TableExprNodeRep* newPlus (TableExprNodeRep* right) const
- TableExprNodeRep* newMinus (TableExprNodeRep* right) const
- TableExprNodeRep* newTimes (TableExprNodeRep* right) const
- TableExprNodeRep* newDivide (TableExprNodeRep* right) const
- TableExprNodeRep* newModulo (TableExprNodeRep* right) const
- TableExprNodeRep* newEQ (TableExprNodeRep* right) const
- TableExprNodeRep* newNE (TableExprNodeRep* right) const
- TableExprNodeRep* newGE (TableExprNodeRep* right) const
- TableExprNodeRep* newGT (TableExprNodeRep* right) const
- TableExprNodeRep* newIN (TableExprNodeRep* right) const
- TableExprNodeRep* newOR (TableExprNodeRep* right) const
- TableExprNodeRep* newAND (TableExprNodeRep* right) const
Prerequisite
Etymology
TableExprNode represents a node in the tree reflecting a
table select expression.
Synopsis
TableExprNode is the class to store a table select expression,
which allows to select rows from the table. The selected rows form
a table which is a view of the original table.
TableExprNode is a handle class for the counted referenced class
TableExprNodeRep.
Classes (like TableExprNodePlusXX) derived from TableExprNodeRep
hold the individual
nodes in the expression, i.e. the operators and operands. The nodes
form a binary tree reflecting the expression.
E.g. the expression 2*COLUMN results in the node TableExprNodeTimes
with its children TableExprNodeConst and TableExprNodeColumn.
Constant subexpressions (like 2*3) are evaluated immediately and
only the result is stored as a node.
There are a few TableExprNode constructors taking a constant scalar or array.
In this way constant value are automatically converted to the
appropriate TableExprNodeConst object.
The derived classes also reflect the data type of the node.
Data types Bool, Double, DComplex and String are used.
Char, uChar, Short, uShort, Int, uInt and float are converted
to Double and Complex to DComplex.
Binary operators +, -, *, /, ==, >=, >, <, <= and != are recognized.
Also &&, ||, parentheses and unary +, - and ! are recognized.
For strings the binary operator + can also be used.
The operators have the normal C++ precedence.
Furthermore functions (like sin, max, ceil) can be used in an expression.
Operator() can be used to take a slice from an array.
The Table function col has to be used to create a TableExprNode
object for a column in the table. The Table
operator() can be used
the do the actual selection from the top TableExprNode object.
Example
// Select from table X all rows where column RA<5 and where column
// SWITCH is true.
Table table("X");
Table subtable = table(table.col("RA") < 5 && table.col("SWITCH"));
// Select from that result all rows where the concatenation of
// the strings in columns STR1 and STR2 is equal to the string
// in keyword STRKEY.
Table subsub = subtable(subtable.col("STR1") + subtable.col("STR2")
== subtable.key("STRKEY"));
Motivation
Having TableExprNode as a handle class makes it possible to
handle temporary objects created by the compiler in a smooth way.
TableExprNode and its derivations allow to store an expression
before actually evaluating it. This also allows the classes to
be used by the table expression parser defined in TableParse and
TableGram.
For each operator a special derived class is implemented.
Another approach could have been to store the operator as
a flag and switch on that. However, that causes extra overhead
and the C++ virtual function mechanism is the designed for
these purposes.
To Do
- add operations on arrays
- add selection by comparing with a set of values
Member Description
friend TableExprNode operator+ (const TableExprNode& left, const TableExprNode& right)
Arithmetic operators for numeric TableExprNode's.
+ is also defined for strings (means concatenation).
friend TableExprNode operator- (const TableExprNode& left, const TableExprNode& right)
friend TableExprNode operator* (const TableExprNode& left, const TableExprNode& right)
friend TableExprNode operator/ (const TableExprNode& left, const TableExprNode& right)
friend TableExprNode operator% (const TableExprNode& left, const TableExprNode& right)
Arithmetic operators for numeric TableExprNode's.
friend TableExprNode operator== (const TableExprNode& left, const TableExprNode& right)
friend TableExprNode operator!= (const TableExprNode& left, const TableExprNode& right)
Comparison operators.
friend TableExprNode operator>= (const TableExprNode& left, const TableExprNode& right)
friend TableExprNode operator> (const TableExprNode& left, const TableExprNode& right)
friend TableExprNode operator<= (const TableExprNode& left, const TableExprNode& right)
friend TableExprNode operator< (const TableExprNode& left, const TableExprNode& right)
Not defined for Bool.
friend TableExprNode operator&& (const TableExprNode& left, const TableExprNode& right)
friend TableExprNode operator|| (const TableExprNode& left, const TableExprNode& right)
Logical operators to combine boolean TableExprNode's.
friend TableExprNode near (const TableExprNode& left, const TableExprNode& right)
friend TableExprNode near (const TableExprNode& left, const TableExprNode& right, const TableExprNode& tolerance)
friend TableExprNode nearAbs (const TableExprNode& left, const TableExprNode& right)
friend TableExprNode nearAbs (const TableExprNode& left, const TableExprNode& right, const TableExprNode& tolerance)
Functions to return whether a value is "relatively" near another.
Returns tol > abs(val2 - val1)/max(abs(val1),(val2)).
If tol <= 0, returns val1 == val2. If either val is 0.0, takes
care of area around the minimum number that can be represented.
The nearAbs functions return whether a value is "absolutely" near
another. Returns tol > abs(val2 - val1).
Default tolerance is 1.0e-13.
They operate on scalars and arrays.
friend TableExprNode sin (const TableExprNode& node)
friend TableExprNode sinh (const TableExprNode& node)
friend TableExprNode cos (const TableExprNode& node)
friend TableExprNode cosh (const TableExprNode& node)
friend TableExprNode exp (const TableExprNode& node)
friend TableExprNode log (const TableExprNode& node)
friend TableExprNode log10 (const TableExprNode& node)
friend TableExprNode pow (const TableExprNode& x, const TableExprNode& y)
friend TableExprNode square (const TableExprNode& node)
friend TableExprNode sqrt (const TableExprNode& node)
friend TableExprNode norm (const TableExprNode& node)
Transcendental functions that can be applied to essentially all numeric
nodes containing scalars or arrays.
friend TableExprNode asin (const TableExprNode& node)
friend TableExprNode acos (const TableExprNode& node)
friend TableExprNode atan (const TableExprNode& node)
friend TableExprNode atan2 (const TableExprNode& y, const TableExprNode& x)
friend TableExprNode tan (const TableExprNode& node)
friend TableExprNode tanh (const TableExprNode& node)
friend TableExprNode sign (const TableExprNode& node)
friend TableExprNode round (const TableExprNode& node)
friend TableExprNode ceil (const TableExprNode& node)
friend TableExprNode abs (const TableExprNode& node)
friend TableExprNode floor (const TableExprNode& node)
friend TableExprNode fmod (const TableExprNode& x, const TableExprNode& y)
Transcendental functions applied to to nodes containing scalars or
arrays with double values.
They are invalid for Complex nodes.
friend TableExprNode strlength (const TableExprNode& node)
friend TableExprNode upcase (const TableExprNode& node)
friend TableExprNode downcase (const TableExprNode& node)
friend TableExprNode trim (const TableExprNode& node)
String functions on scalars or arrays.
friend TableExprNode regex (const TableExprNode& node)
friend TableExprNode pattern (const TableExprNode& node)
friend TableExprNode sqlpattern (const TableExprNode& node)
Functions for regular expression matching and
pattern matching. Defined for scalars and arrays.
pattern is for a file name like pattern.
sqlpattern is for an SQL like pattern.
friend TableExprNode datetime (const TableExprNode& node)
friend TableExprNode mjdtodate (const TableExprNode& node)
friend TableExprNode mjd (const TableExprNode& node)
friend TableExprNode date (const TableExprNode& node)
friend TableExprNode year (const TableExprNode& node)
friend TableExprNode month (const TableExprNode& node)
friend TableExprNode day (const TableExprNode& node)
friend TableExprNode cmonth (const TableExprNode& node)
friend TableExprNode weekday (const TableExprNode& node)
friend TableExprNode cdow (const TableExprNode& node)
friend TableExprNode week (const TableExprNode& node)
friend TableExprNode time (const TableExprNode& node)
Functions for date-values. Defined for scalars and arrays.
friend TableExprNode isNaN (const TableExprNode& node)
Function to test if a scalar or array is NaN (not-a-number).
It results in a Bool scalar or array.
friend TableExprNode min (const TableExprNode& a, const TableExprNode& b)
friend TableExprNode max (const TableExprNode& a, const TableExprNode& b)
Minimum or maximum of 2 nodes.
Makes sense for numeric and String values. For Complex values
the norm is compared.
One or both arguments can be scalar or array.
friend TableExprNode conj (const TableExprNode& node)
The complex conjugate of a complex node.
Defined for scalars and arrays.
friend TableExprNode real (const TableExprNode& node)
The real part of a complex node.
Defined for scalars and arrays.
friend TableExprNode imag (const TableExprNode& node)
The imaginary part of a complex node.
Defined for scalars and arrays.
friend TableExprNode amplitude (const TableExprNode& node)
The amplitude (i.e. sqrt(re*re + im*im)) of a complex node.
This is a synonym for function abs.
Defined for scalars and arrays.
friend TableExprNode phase (const TableExprNode& node)
The phase (i.e. atan2(im, re)) of a complex node.
This is a synonym for function arg.
Defined for scalars and arrays.
friend TableExprNode arg (const TableExprNode& node)
The arg (i.e. atan2(im, re)) of a complex node.
Defined for scalars and arrays.
friend TableExprNode formComplex (const TableExprNode& real, const TableExprNode& imag)
Form a complex number from two Doubles.
One or both arguments can be scalar or array.
friend TableExprNode sum (const TableExprNode& array)
friend TableExprNode product (const TableExprNode& array)
friend TableExprNode sumSquare (const TableExprNode& array)
Functions operating on a Double or Complex scalar or array resulting in
a scalar with the same data type.
friend TableExprNode min (const TableExprNode& array)
friend TableExprNode max (const TableExprNode& array)
friend TableExprNode mean (const TableExprNode& array)
friend TableExprNode variance (const TableExprNode& array)
friend TableExprNode stddev (const TableExprNode& array)
friend TableExprNode avdev (const TableExprNode& array)
friend TableExprNode median (const TableExprNode& array)
friend TableExprNode fractile (const TableExprNode& array, const TableExprNode& fraction)
Functions operating on a Double scalar or array resulting in
a Double scalar.
friend TableExprNode any (const TableExprNode& array)
friend TableExprNode all (const TableExprNode& array)
friend TableExprNode ntrue (const TableExprNode& array)
friend TableExprNode nfalse (const TableExprNode& array)
friend TableExprNode sums (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
friend TableExprNode products (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
friend TableExprNode sumSquares (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
friend TableExprNode mins (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
friend TableExprNode maxs (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
friend TableExprNode means (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
friend TableExprNode variances (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
friend TableExprNode stddevs (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
friend TableExprNode avdevs (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
friend TableExprNode medians (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
friend TableExprNode fractiles (const TableExprNode& array, const TableExprNode& fraction, const TableExprNodeSet& collapseAxes)
friend TableExprNode anys (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
friend TableExprNode alls (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
friend TableExprNode ntrues (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
friend TableExprNode nfalses (const TableExprNode& array, const TableExprNodeSet& collapseAxes)
The partial version of the functions above.
They are applied to the array subsets defined by the axes in the set
using the partialXXX functions in ArrayMath.
The axes must be 0-relative.
friend TableExprNode array (const TableExprNode& values, const TableExprNodeSet& shape)
Create an array of the given shape and fill it with the values.
The values array is rewound as needed.
friend TableExprNode isdefined (const TableExprNode& array)
Function operating on a field resulting in a bool scalar.
It can be used to test if a column has an array in the current row.
It can also be used to test if a record contains a field.
friend TableExprNode nelements (const TableExprNode& array)
friend TableExprNode ndim (const TableExprNode& array)
Functions operating on any scalar or array resulting in a Double scalar.
A scalar has 1 element and dimensionality 1.
friend TableExprNode shape (const TableExprNode& array)
Function operating on any scalar or array resulting in a Double array
containing the shape. A scalar has shape [1].
friend TableExprNode iif (const TableExprNode& condition, const TableExprNode& arg1, const TableExprNode& arg2)
Function resembling the ternary ?: construct in C++.
The argument "condition" has to be a Bool value.
If an element in "condition" is True, the corresponding element from
"arg1" is taken, otherwise it is taken from "arg2".
The arguments can be scalars or array or any combination.
TableExprNode operator+ () const
TableExprNode operator- () const
Unary operators on numeric TableExprNode's.
TableExprNode operator! () const
Unary NOT-operator on boolean TableExprNode's.
Slicing in a node containing an array. It is possible to
address a single pixel or an n-dimensional subarray.
In case of a single pixel the result is a scalar node.
Otherwise the result is an array node with the same dimensionality
as the source.
Note that there exist TableExprNodeSet constructors to
convert an IPosition or Slicer object
automatically to a .
An IPosition<src> addresses a single element and results in
a scalar node, while a <src>Slicer can address multiple
elements and always results in an array node.
TableExprNode in (const TableExprNode& array) const
TableExprNode in (const TableExprNodeSet& set) const
The IN operator to test if a value is contained in an array or set.
The array can also be a scalar.
Constructors to convert a constant value to a TableExprNode.
The constructor for char* is also supported to convert a
character-array to a string, since a two step conversion
is not done automatically.
Construct a node from a node representation.
copy constructor (reference semantics).
TableExprNode& operator= (const TableExprNode&)
Assignment (reference semantics).
The destructor deletes all the underlying TableExprNode objects,
DataType dataType() const
Get the data type of the expression.
Currently the only possible values are TpBool, TpDouble,
TpDComplex and TpString.
An expression is thrown if the result is not a scalar of one
of those types.
Is the expression a scalar?
Get a value for this node in the given row.
These functions are implemented in the derived classes and
will usually invoke the get in their children and apply the
operator on the resulting values.
Get the data type for doing a getColumn on the expression.
This is the data type of the column when the expression
consists of a single column only.
Otherwise it is the expression data type as returned by
function dataType.
Get the value of the expression evaluated for the entire column.
The data of function called should match the data type as
returned by function getColumnDataType.
void show (ostream&) const
Show the tree.
Convert the tree to a number of range vectors which at least
select the same things.
This function is very useful to convert the expression to
some intervals covering the select expression. This can
be used to do a rough fast selection via an index and do the
the slower final selection on that much smaller subset.
The function can only convert direct comparisons of columns
with constants (via ==, !=, >, >=, < or <=) and their combinations
using && or ||.
Check if the table used in the expression matches the given
Table. This is used by the Table selection to check if it is correct.
Bool checkReplaceTable (const Table& table, Bool canBeConst=False) const
Same as checkTable, but the given table only needs to have the
same description as the table in the expression. This is used by
sorting/updating which parse the expression with the original table,
but have to operate on the output of the selection process.
If the tables are different, the table pointers in the expression
are replaced.
If canbeConst==True, the expression can be constant,
thus does not need a table column in it.
Get basetable. This gets a pointer to the BaseTable to which a
TableExprNode belongs. A TableExprNode belongs to the BaseTable to
which the column(s) used in an expression belong. Note that
all columns in an expression have to belong to the same table.
static TableExprNode newColumnNode (const Table& tab, const BaseTable* tabptr, const String& name, const Base<String>& fieldNames)
Create a column node on behalf of the Table class.
For builtin data types another type of node is created than
for other data types.
isArray indicates if the column should be an array column.
static TableExprNode newKeyConst (const TableRecord&, const TableRecord<Vector>& fieldNames)
Create a TableExprNodeConst for a table keyword
(which is handled as a constant).
Throw invalid data type exception.
static TableExprNode newFunctionNode (TableExprFuncNode::FunctionType, const TableExprNodeSet& set, const FunctionType& table, uInt origin = 0)
static TableExprNode newFunctionNode (TableExprFuncNode::FunctionType, const TableExprNode& node)
static TableExprNode newFunctionNode (TableExprFuncNode::FunctionType, const TableExprNode& node1, const TableExprNode& node2)
static TableExprNode newFunctionNode (TableExprFuncNode::FunctionType, const TableExprNode& node1, const TableExprNode& node2, const TableExprNode& node3)
static TableExprNode newFunctionNode (TableExprFuncNode::FunctionType, const TableExprNode& array, const TableExprNodeSet& axes)
static TableExprNode newFunctionNode (TableExprFuncNode::FunctionType, const TableExprNode& array, const TableExprNode& node, const TableExprNodeSet& axes)
Create function node of the given type with the given arguments.
static TableExprNode newRownrNode (const BaseTable* tabptr, uInt origin)
Create rownumber() function node.
Origin indicates whether the first row should be zero (for C++ binding)
or an other value (one for TaQL binding).
static TableExprNode newRowidNode (const BaseTable* tabptr)
Create rowid() function node.
Origin is always 0.
static TableExprNode newRandomNode (const BaseTable* tabptr)
Create rand() function node.
static TableExprNode newArrayPartNode (const TableExprNode& arrayNode, const TableExprNodeSet& indices, uInt origin)
Create ArrayElement node for the given array with the given index.
The origin is 0 for C++ and 1 for TaQL.
returns pointer to the representation-object of it
convert Block of TableExprNode to PtrBlock of TableExprNodeRep*.
Construct a new node for the given operation.