Table of Contents

Class TExpression

Namespace
gudusoft.gsqlparser.nodes
Assembly
gudusoft.gsqlparser.dll

An expression is a combination of one or more values, operators, and SQL functions that evaluates to a value. There are lots of types of expression in this SQL parser, ExpressionType was used to distinguish these types.

OBJECT NAME/CONSTANT/SOURCE TOKEN/FUNCTION CALL

UNARY
<ul>
    <li>  + expr1
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.unary_plus_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: getRightOperand</li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    <li>  - expr1
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.unary_minus_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: getRightOperand</li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    <li>  expr1 !
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.unary_factorial_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: N/A</li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    <li>  ~ expr1
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.unary_bitwise_not_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    <li>  @ expr1
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.unary_absolutevalue_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    <li>  |/ expr1
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.unary_squareroot_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    <li>  ||/ expr1
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.unary_cuberoot_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    <li>  !! expr1
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.unary_factorialprefix_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    <li>  Oracle: PRIOR expr1
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.unary_prior_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: getRightOperand</li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    <li>  Oracle: CONNECT_BY_ROOT expr1
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.unary_connect_by_root_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: getRightOperand</li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    <li>  MySQL: BINARY expr1
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.unary_prior_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: getRightOperand</li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>

ARITHMETIC
<ul>
    <li>Addition: expr1 + expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.arithmetic_plus_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    <li>Subtraction: expr1 - expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.arithmetic_minus_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    <li>Multiplication: expr1 * expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.arithmetic_times_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    <li>Division: expr1 / expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.arithmetic_divide_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    <li>Modula: expr1 % expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.arithmetic_modulo_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    <li>exponentiate: expr1 ^ expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.exponentiate_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    <li>sql server 2008 +=,-=,*=,/=,%=: expr1 [+=|-=|*=|/=|%=] expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.arithmetic_compound_operator_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
</ul>

LOGICAL
<ul>
    <li>expr1 AND|&& expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.logical_and_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    <li>expr1 OR | || expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.logical_or_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    <li>expr1 XOR expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.logical_xor_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    <li>NOT|! expr1
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.logical_not_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    </ul>

ASSIGNMENT
<ul>
    <li>ASSIGNMENT: expr1 [:=|=] expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.assignment_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    </ul>

CONCATENATE
<ul>
    <li>CONCATENATE: expr1 || expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.concatenate_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    </ul>

AT TIME ZONE
<ul>
    <li>expr1 at time zone expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.at_time_zone_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: N/A</li>
        </ul>
    </li>
    </ul>

AT LOCAL
<ul>
    <li>expr1 at local
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.at_local_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: N/A </li>
        <li>operator: N/A</li>
        </ul>
    </li>
    </ul>

BITWISE
<ul>
    <li>Bitwise and : expr1 & expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.bitwise_and_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    <li>Bitwise or : expr1 | expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.bitwise_or_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    <li>Bitwise exclusive or : expr1 ^ expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.bitwise_exclusive_or_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    <li>Bitwise xor : expr1 ^ expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.bitwise_xor_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    <li>Bitwise shift left : expr1 << expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.bitwise_shift_left_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    <li>Bitwise shift right : expr1 >> expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.bitwise_shift_right_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    </ul>

SUBQUERY
<ul>
    <li> A scalar subquery expression is a subquery that returns exactly one column value from one row.
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.subquery_t" data-throw-if-not-resolved="false"></xref></li>
         <li>subquery: <xref href="gudusoft.gsqlparser.nodes.TExpression.SubQuery" data-throw-if-not-resolved="false"></xref> </li>
        <li>left operand:  N/A</li>
        <li>right operand: N/A </li>
        <li>operator: N/A</li>
        </ul>
    </li>
    </ul>

EXPRESSION WITH PARENTHESIS
<ul>
    <li> ( expr1 )
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.parenthesis_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand is expr1:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: N/A </li>
        <li>operator: use <xref href="gudusoft.gsqlparser.nodes.TParseTreeNode.startToken" data-throw-if-not-resolved="false"></xref> to get ( and <xref href="gudusoft.gsqlparser.nodes.TParseTreeNode.endToken" data-throw-if-not-resolved="false"></xref> to get )</li>
        </ul>
    </li>
    </ul>

LIST EXPRESSION
<ul>
    <li>An expression list inside parenthesis like (expr,expr,...),
    or one or more set of expressions: ((expr1,expr2,...),(expr1,expr2,...),(expr1,expr2,...)...)
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.list_t" data-throw-if-not-resolved="false"></xref></li>
         <li>expr list: <xref href="gudusoft.gsqlparser.nodes.TExpression.ExprList" data-throw-if-not-resolved="false"></xref>, may return null when expression list in syntax like this: () </li>
        <li>left operand:  N/A</li>
        <li>right operand: N/A </li>
        <li>operator: open parenthsis ( can be fetched via <xref href="gudusoft.gsqlparser.nodes.TParseTreeNode.startToken" data-throw-if-not-resolved="false"></xref>,
        close parenthesis ) can be fetched via <xref href="gudusoft.gsqlparser.nodes.TParseTreeNode.endToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    </ul>

COLLECTION CONSTRUCTORS (informix)

GROUP EXPRESSION,  @deprecated As of v1.4.3.3
<ul>
    <li>
    </li>
    </ul>

COMPARISON
<ul>
    <li>A <b>simple comparison condition</b> specifies a comparison with expressions or subquery results.
    <br />expr1 EQUAL|NOT_EQUAL|LESS_THAN|GRREAT_THAN|LESS_EQUAL_THAN|GREATE_EQUAL_THAN expr2,
    or, (expr_list) EQUAL|NOT_EQUAL (subquery)
        <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.simple_comparison_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    <li>A <b>group comparison condition</b> specifies a comparison with any or all members
    in a list or subquery.
    <br />expr EQUAL|NOT_EQUAL|LESS_THAN|GRREAT_THAN|LESS_EQUAL_THAN|GREATE_EQUAL_THAN ANY|SOME|ALL (expr_list|subquery),
    or, (expr_list) EQUAL|NOT_EQUAL ANY|SOME|ALL (expr_list|subquery)
        <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.group_comparison_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        <li> ANY|SOME|ALL: <xref href="gudusoft.gsqlparser.nodes.TExpression.Quantifier" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>

IN
<ul>
    <li>(expr|expr_list) |NOT] IN (expr_list)|(subquery)|expr
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.in_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
       <li>operator is IN: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        <li>NOT keyword: <xref href="gudusoft.gsqlparser.nodes.TExpression.NotToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    </ul>

CASE
<ul>
    <li>case expression,let you use IF ... THEN ... ELSE logic in SQL statements without having to invoke procedures.
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.case_t" data-throw-if-not-resolved="false"></xref></li>
         <li> case expression: <xref href="gudusoft.gsqlparser.nodes.TExpression.CaseExpression" data-throw-if-not-resolved="false"></xref>}</li>
        <li>left operand:  N/A</li>
        <li>right operand: N/A </li>
        <li>operator: N/A </li>
        </ul>
    </li>
    </ul>

CURSOR
<ul>
    <li>CURSOR subquery
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.cursor_t" data-throw-if-not-resolved="false"></xref></li>
         <li>subquery: <xref href="gudusoft.gsqlparser.nodes.TExpression.SubQuery" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: N/A </li>
        <li>operator: CURSOR can be fetched via <xref href="gudusoft.gsqlparser.nodes.TParseTreeNode.startToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    </ul>

PATTERN MATCHING
<ul>
    <li>expr1 [NOT] [LIKE|ILIKE|RLIKE|REGEXP|SIMILAR TO] [ALL|ANY|SOME]expr2 [ESCAPE expr3]
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.pattern_matching_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand:<xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
         <li>expr3: <xref href="gudusoft.gsqlparser.nodes.TExpression.LikeEscapeOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
         <li>NOT keyword: <xref href="gudusoft.gsqlparser.nodes.TExpression.NotToken" data-throw-if-not-resolved="false"></xref></li>
         <li>ALL|ANY|SOME keyword: <xref href="gudusoft.gsqlparser.nodes.TExpression.Quantifier" data-throw-if-not-resolved="false"></xref></li>
         <li>ESCAPE keyword: N/A</li>
        </ul>
    </li>
    </ul>

NULL
<ul>
    <li>expr ISNULL|NOTNULL|IS [NOT] NULL
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.null_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: N/A </li>
        <li>operator is NULL: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
         <li>NOT keyword: <xref href="gudusoft.gsqlparser.nodes.TExpression.NotToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>

BETWEEN
<ul>
    <li>expr1 [NOT] BETWEEN expr2 AND expr3
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.between_t" data-throw-if-not-resolved="false"></xref></li>
         <li>expr1:  <xref href="gudusoft.gsqlparser.nodes.TExpression.BetweenOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>expr2:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>expr3: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator is BETWEEN: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
         <li>NOT keyword: <xref href="gudusoft.gsqlparser.nodes.TExpression.NotToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>

EXISTS
<ul>
    <li>EXISTS (subquery)
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.exists_t" data-throw-if-not-resolved="false"></xref></li>
         <li>left operand:  N/A</li>
        <li>right operand: N/A</li>
        <li>subquery: <xref href="gudusoft.gsqlparser.nodes.TExpression.SubQuery" data-throw-if-not-resolved="false"></xref> </li>
        <li>EXISTS: <xref href="gudusoft.gsqlparser.nodes.TParseTreeNode.startToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>

IS UNKNOWN

IS TRUE

IS FALSE

DAY TO SECOND
<ul>
    <li>expr DAY [( integer )] TO SECOND [( integer )]
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.day_to_second_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: N/A </li>
        <li>operator: N/A</li>
        </ul>
    </li>
    </ul>

YEAR TO MONTH
<ul>
    <li>expr YEAR [( integer )] TO MONTH
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.year_to_month_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: N/A </li>
        <li>operator: N/A</li>
        </ul>
    </li>
    </ul>

INTERVAL(teradata)
<ul>
    <li>( date_time_expression date_time_term ) start TO end
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.interval_t" data-throw-if-not-resolved="false"></xref></li>
         <li>date_time_expression: <xref href="gudusoft.gsqlparser.nodes.TExpression.IntervalExpr" data-throw-if-not-resolved="false"></xref> </li>
        <li>left operand:  N/A</li>
        <li>right operand: N/A </li>
        <li>operator: N/A</li>
        </ul>
    </li>
    </ul>

NEW STRUCTURED TYPE
<ul>
    <li>NEW function_call
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.new_structured_type_t" data-throw-if-not-resolved="false"></xref></li>
         <li>function_call: <xref href="gudusoft.gsqlparser.nodes.TExpression.FunctionCall" data-throw-if-not-resolved="false"></xref> </li>
        <li>left operand:  N/A</li>
        <li>right operand: N/A </li>
        <li>operator: N/A</li>
        </ul>
    </li>
    </ul>

NEW VARIANT_TYPE
<ul>
    <li>NEW VARIANT_TYPE ( type_argument_list )
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.new_variant_type_t" data-throw-if-not-resolved="false"></xref></li>
         <li>type_argument_list: <xref href="gudusoft.gsqlparser.nodes.TExpression.NewVariantTypeArgumentList" data-throw-if-not-resolved="false"></xref> </li>
        <li>left operand:  N/A</li>
        <li>right operand: N/A </li>
        <li>operator: N/A</li>
        </ul>
    </li>
    </ul>

LDIFF,RDIFF,P_INTERSECT,P_NORMALIZE
<ul>
    <li> expr1 LDIFF|RDIFF|P_INTERSECT|P_NORMALIZE expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.new_variant_type_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>

UNTIL CHANGED

LEFT SHIFT
<ul>
    <li>expr1 >> expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.left_shift_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    </ul>

RIGHT SHIFT
<ul>
    <li>expr1 >> expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.right_shift_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    </ul>

IS DOCUMENT

IS DISTINCT FROM
<ul>
    <li> expr1 IS [NOT] DISTINCT FROM expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.is_distinct_from_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        <li>NOT keyword: <xref href="gudusoft.gsqlparser.nodes.TExpression.NotToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>

SQL SERVER left join
<ul>
    <li> expr1 *= expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.left_join_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
       <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>

SQL SERVER right join
<ul>
    <li> expr1 =* expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.right_join_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
       <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>

COLLATE
<ul>
    <li> expr1 COLLATE expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.collate_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        <li>NOT keyword: <xref href="gudusoft.gsqlparser.nodes.TExpression.NotToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>

MEMBER OF
<ul>
    <li> expr1 MEMBER OF expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.member_of_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>

NEXT VALUE FOR
<ul>
    <li> NEXT VALUE FOR sequence name, or NEXT integer expression VALUE FOR sequence name
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.next_value_for_t" data-throw-if-not-resolved="false"></xref></li>
        <li>sequence name: <xref href="gudusoft.gsqlparser.nodes.TExpression.SequenceName" data-throw-if-not-resolved="false"></xref>   </li>
        <li>over_clause : <xref href="gudusoft.gsqlparser.nodes.TExpression.Over_clause" data-throw-if-not-resolved="false"></xref>} </li>
        <li>left operand(integer expression):  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>

    </ul>

REF ARROW(named parameters in function call)
<ul>
    <li> expr1 => expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.ref_arrow_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    </ul>

TYPECAST
<ul>
    <li> expr1 TYPECAST typename
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.typecast_t" data-throw-if-not-resolved="false"></xref></li>
         <li>typename: <xref href="gudusoft.gsqlparser.nodes.TExpression.TypeName" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: N/A </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref> </li>
    </ul>
    </li>
</ul>

MULTISET
<ul>
    <li>MULTISET subquery
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.multiset_t" data-throw-if-not-resolved="false"></xref></li>
         <li>subquery: <xref href="gudusoft.gsqlparser.nodes.TExpression.SubQuery" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: N/A </li>
        <li>operator: MULTISET can be fetched via <xref href="gudusoft.gsqlparser.nodes.TParseTreeNode.startToken" data-throw-if-not-resolved="false"></xref> </li>
        </ul>
    </li>
    </ul>

FLOATING POINT
<ul>
    <li>expr is [NOT] NAN|INFINITE
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.floating_point_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: N/A </li>
        <li>operator is IS: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
         <li>NOT keyword: <xref href="gudusoft.gsqlparser.nodes.TExpression.NotToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>

ROW CONSTRUCTOR
<ul>
    <li>ROW ( expr_list )
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.row_constructor_t" data-throw-if-not-resolved="false"></xref></li>
         <li>expr_list:  <xref href="gudusoft.gsqlparser.nodes.TExpression.ExprList" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: N/A </li>
        <li>operator is ROW: <xref href="gudusoft.gsqlparser.nodes.TParseTreeNode.startToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>

IS OF TYPE
<ul>
    <li>expr is of type ( datatype,...)
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.is_of_type_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: N/A </li>
        <li>operator: N/A</li>
        </ul>
    </li>
    </ul>

PLACE HOLDER
<ul>
    <li>place holder expression
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.place_holder_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: N/A </li>
        <li>operator: N/A</li>
        </ul>
    </li>
    </ul>

TYPE_CONSTRUCTOR_EXPRESSION
<ul>
    <li>[NEW] type_name( expr_list )
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.type_constructor_t" data-throw-if-not-resolved="false"></xref></li>
        <li>type_name(expr_list): <xref href="gudusoft.gsqlparser.nodes.TExpression.FunctionCall" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: N/A </li>
        <li>operator: N/A</li>
        </ul>
    </li>
    </ul>

ARRAY ACCESS
<ul>
    <li>array_name(index1)(index2)(index3)
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.arrayaccess_t" data-throw-if-not-resolved="false"></xref></li>
        <li>array_name(index1)(index2)(index3): <xref href="gudusoft.gsqlparser.nodes.TExpression.ArrayAccess" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: N/A </li>
        <li>operator: N/A</li>
        </ul>
    </li>
    </ul>

OBJECT ACCESS EXPRESSION
<ul>
    <li>objectExpr.[attributes].method()
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.object_access_t" data-throw-if-not-resolved="false"></xref></li>
        <li>objectExpr.[attributes].method(): <xref href="gudusoft.gsqlparser.nodes.TExpression.ObjectAccess" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  N/A</li>
        <li>right operand: N/A </li>
        <li>operator: N/A</li>
        </ul>
    </li>
 </ul>

Unknown
<ul>
    <li>expr OPERATOR expr, means this expression was not recognized by SQL parser yet.
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.unknown_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>

Unknown unary left
<ul>
    <li>OPERATOR expr, means this expression was not recognized by SQL parser yet.
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.unary_left_unknown_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand: N/A</li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.RightOperand" data-throw-if-not-resolved="false"></xref> </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>

Unknown unary right
<ul>
    <li> expr OPERATOR, means this expression was not recognized by SQL parser yet.
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.unary_right_unknown_t" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: N/A </li>
        <li>operator: <xref href="gudusoft.gsqlparser.nodes.TExpression.OperatorToken" data-throw-if-not-resolved="false"></xref></li>
        </ul>
    </li>
    </ul>
ARRAY CONSTRUCTOR
<ul>
    <li>

An array constructor is an expression that builds an array value using values for its member elements.

like this: ARRAY[1,2,3+4]

array element values can be accessed via ExprList,

or ExprList can be null when it is: array[]

It is also possible to construct an array from the results of a subquery like this:

SELECT ARRAY(SELECT oid FROM pg_proc WHERE proname LIKE 'bytea%');

thus, subquery can be access via SubQuery

   </p>
   </li> </ul>
FIELD SELECTION
<ul>
    <li>

If an expression yields a value of a composite type (row type), then a specific field of the row can be extracted by writing

expression.fieldname

In general the row expression must be parenthesized, but the parentheses can be omitted

when the expression to be selected from is just a table reference or positional parameter.

For example:

mytable.mycolumn

$1.somecolumn

(rowfunction(a,b)).col3

(Thus, a qualified column reference is actually just a special case of the field selection syntax.) An important special case is extracting a field from a table column that is of a composite type:

(compositecol).somefield

(mytable.compositecol).somefield

The parentheses are required here to show that compositecol is a column name not a table name,

or that mytable is a table name not a schema name in the second case.

n a select list, you can ask for all fields of a composite value by writing .*:

(compositecol).*

When expression in following syntax, it will be marked as fieldSelection, and check FieldName

(rowfunction(a,b)).col3

(compositecol).somefield

(mytable.compositecol).somefield

(compositecol).*

Otherwise, it will be marked as simpleObjectname:

mytable.mycolumn

$1.somecolumn

HIVE ARRAY ACCESS

HIVE FIELD ACCESS

JSON Operators (PostgreSQL)

<ul>
    <li> expr1 -> expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.json_get_object" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref> </li>
    </ul>
    </li>
    <li> expr1 ->> expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.json_get_text" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref> </li>
    </ul>
    </li>
    <li> expr1 > expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.json_get_object_at_path" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref> </li>
    </ul>
    </li>
    <li> expr1 >> expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.json_get_text_at_path" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref> </li>
    </ul>
    </li>
    <li> expr1 @> expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.json_left_contain" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref> </li>
    </ul>
    </li>
    <li> expr1 >@ expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.json_right_contain" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref> </li>
    </ul>
    </li>
    <li> expr1 ? expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.json_exist" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref> </li>
    </ul>
    </li>
    <li> expr1 ?| expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.json_any_exist" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref> </li>
    </ul>
    </li>
    <li> expr1 ?& expr2
    <ul>
        <li>type: <xref href="gudusoft.gsqlparser.EExpressionType.json_all_exist" data-throw-if-not-resolved="false"></xref></li>
        <li>left operand:  <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref></li>
        <li>right operand: <xref href="gudusoft.gsqlparser.nodes.TExpression.LeftOperand" data-throw-if-not-resolved="false"></xref> </li>
    </ul>
    </li>
</ul>
public class TExpression : TParseTreeNode, Visitable
Inheritance
TExpression
Implements
Inherited Members

Constructors

TExpression()

public TExpression()

TExpression(EExpressionType)

public TExpression(EExpressionType exprType)

Parameters

exprType EExpressionType

TExpression(EExpressionType, TConstant)

public TExpression(EExpressionType exprType, TConstant constant)

Parameters

exprType EExpressionType
constant TConstant

TExpression(EExpressionType, TExpression, TExpression)

public TExpression(EExpressionType exprType, TExpression left, TExpression right)

Parameters

exprType EExpressionType
left TExpression
right TExpression

TExpression(EExpressionType, TExpression, TExpression, EComparisonType)

public TExpression(EExpressionType exprType, TExpression left, TExpression right, EComparisonType comparisonType)

Parameters

exprType EExpressionType
left TExpression
right TExpression
comparisonType EComparisonType

TExpression(EExpressionType, TFunctionCall)

public TExpression(EExpressionType exprType, TFunctionCall func)

Parameters

exprType EExpressionType
func TFunctionCall

TExpression(EExpressionType, TObjectName)

public TExpression(EExpressionType exprType, TObjectName dbObject)

Parameters

exprType EExpressionType
dbObject TObjectName

Fields

ASSIGNMENT

Used in set clause of update statement.

Or, assign argument in postgresql function argument like this:

param_name ASSIGN_SIGN basic_expr expr can be accessed via LeftOperand and RightOperand

public const int ASSIGNMENT = 7

Field Value

int

BITWISE_AND

SQL SERVER, postgresql

expr can be accessed via LeftOperand and RightOperand

public const int BITWISE_AND = 8

Field Value

int

BITWISE_EXCLUSIVE_OR

SQL SERVER

expr can be accessed via LeftOperand and RightOperand

public const int BITWISE_EXCLUSIVE_OR = 11

Field Value

int

BITWISE_NOT

Postgresql bitwise not

~expr

expr can be accessed via RightOperand

public const int BITWISE_NOT = 529

Field Value

int

BITWISE_OR

SQL SERVER, postgresql

expr can be accessed via LeftOperand and RightOperand

public const int BITWISE_OR = 9

Field Value

int

BITWISE_SHIFT_LEFT

Postgresql bitwise shit left

expr << expr

expr can be accessed via LeftOperand and RightOperand

public const int BITWISE_SHIFT_LEFT = 525

Field Value

int

BITWISE_SHIFT_RIGHT

Postgresql bitwise shit right

expr >> expr

expr can be accessed via LeftOperand and RightOperand

public const int BITWISE_SHIFT_RIGHT = 527

Field Value

int

BITWISE_XOR

MySQL, postgresql

expr can be accessed via LeftOperand and RightOperand

public const int BITWISE_XOR = 10

Field Value

int

BigAndOrNestLevel

public static int BigAndOrNestLevel

Field Value

int

COLLATE

sql server, Is a clause that can be applied to a database definition or a column definition to define the collation, or to a character string expression to apply a collation cast.

postgresql

expr can be accessed via LeftOperand and RightOperand

public const int COLLATE = 223

Field Value

int

CONCATENATE

Links two string operands to form a string expression.

syntax: expr || expr,

expr can be accessed via LeftOperand and RightOperand

public const int CONCATENATE = 5

Field Value

int

DIVIDE

syntax: expr / expr

expr can be accessed via LeftOperand and RightOperand

public const int DIVIDE = 4

Field Value

int

EXPONENTIATE

teradata ** , Postgresql ^

expr can be accessed via LeftOperand and RightOperand

public const int EXPONENTIATE = 13

Field Value

int

LEFTJOIN_OP

sql server, LEFTJOIN_OP *=

expr can be accessed via LeftOperand and RightOperand

public const int LEFTJOIN_OP = 224

Field Value

int

MINUS

syntax: expr - expr

expr can be accessed via LeftOperand and RightOperand

public const int MINUS = 2

Field Value

int

MODULO

SQL SERVER,TERADATE(mod)

expr can be accessed via LeftOperand and RightOperand

public const int MODULO = 6

Field Value

int

PLUS

Addition: expr + expr

expr can be accessed via LeftOperand and RightOperand

public const int PLUS = 1

Field Value

int

POWER

mdx power operator ^

public const int POWER = 56

Field Value

int

RANGE

Mdx range operator :

public const int RANGE = 55

Field Value

int

RIGHTJOIN_OP

sql server, RIGHTJOIN_OP =*

expr can be accessed via LeftOperand and RightOperand

public const int RIGHTJOIN_OP = 225

Field Value

int

SCOPE_RESOLUTION

SQL SERVER

The scope resolution operator :: provides access to static members of a compound data type, SELECT @hid = hierarchyid::GetRoot();

Not implemented yet,

public const int SCOPE_RESOLUTION = 12

Field Value

int

TIMES

syntax: expr * expr

expr can be accessed via LeftOperand and RightOperand

public const int TIMES = 3

Field Value

int

UnknownOperator

This UnknownOperator means this expression was not recognized by SQL parser yet.

In syntax like this:

expr OPERATOR expr

expr can be accessed via LeftOperand and RightOperand

public const int UnknownOperator = 901

Field Value

int

UnknownUnaryOperator

This UnknownLeftUnaryOperator means this expression was not recognized by SQL parser yet.

In syntax like this:

OPERATOR expr

expr can be accessed via RightOperand

public const int UnknownUnaryOperator = 905

Field Value

int

UnknownUnaryOperatorRight

This UnknownLeftUnaryOperator means this expression was not recognized by SQL parser yet.

In syntax like this:

expr OPERATOR

expr can be accessed via LeftOperand

public const int UnknownUnaryOperatorRight = 909

Field Value

int

absoluteValue

Postgresql absolute value

@ -5.0

expr can be accessed via RightOperand

public const int absoluteValue = 523

Field Value

int

arrayConstructor

An array constructor is an expression that builds an array value using values for its member elements.

like this: ARRAY[1,2,3+4]

array element values can be accessed via ExprList,

or ExprList can be null when it is: array[]

It is also possible to construct an array from the results of a subquery like this:

SELECT ARRAY(SELECT oid FROM pg_proc WHERE proname LIKE 'bytea%');

thus, subquery can be access via SubQuery

public const int arrayConstructor = 505

Field Value

int

at_local

ORACLE,teradata date time expression, at local.

Syntax: expr AT LOCAL.

expr can be accessed via LeftOperand

public const int at_local = 101

Field Value

int

at_time_zone

ORACLE,teradata date time expression, at time zone.

Syntax: expr1 AT TIME ZONE expr2

expr can be accessed via LeftOperand and RightOperand

public const int at_time_zone = 100

Field Value

int

between_conditions

A BETWEEN condition determines whether the value of one expression is in an interval defined by two other expressions.

Syntax: expr1 [NOT] BETWEEN expr2 AND expr3

expr1 can be get via gudusoft.gsqlparser.nodes.TExpression._betweenOperand,

expr2 can be get via LeftOperand, and expr3 can be get via RightOperand,

Use OperatorToken to distinguish is between or is not between

public const int between_conditions = 47

Field Value

int

caseExprOperator

CASE expressions let you use IF ... THEN ... ELSE logic in SQL statements without having to invoke procedures. value can be accessed via CaseExpression which is type of TCaseExpression.

public const int caseExprOperator = 22

Field Value

int

compoundAssignment

sql server 2008 +=,-=,*=,/=,%=

expr can be accessed via LeftOperand and RightOperand

public const int compoundAssignment = 14

Field Value

int

compoundParenthesis

expression with parenthesis, expr can be get via LeftOperand which is type of TExpression.

public const int compoundParenthesis = 18

Field Value

int

compoundPrior

Oracle prior expression, syntax: PRIOR expr value can be accessed via RightOperand which is type of TExpression

public const int compoundPrior = 21

Field Value

int

compoundUnaryBitwiseNot

sql server

expr can be accessed via RightOperand

public const int compoundUnaryBitwiseNot = 222

Field Value

int

compoundUnaryMinus

unary minus expression,

syntax: - expression

expr can be accessed via RightOperand

public const int compoundUnaryMinus = 20

Field Value

int

compoundUnaryPlus

unary plus expression,

syntax: + expression

expr can be accessed via RightOperand

public const int compoundUnaryPlus = 19

Field Value

int

connect_by_root

oracle unary operator connect_by_root is only valid in hierarchical queries

expr can be accessed via RightOperand

public const int connect_by_root = 229

Field Value

int

cubeRoot

Postgresql cube root

||/ 27.0

expr can be accessed via RightOperand

public const int cubeRoot = 519

Field Value

int

cursorExprOperator

A CURSOR expression returns a nested cursor.

syntax: CURSOR(subquery ),

subquery can be accessed via SubQuery which is type of TSelectSqlStatement.

public const int cursorExprOperator = 23

Field Value

int

datetimeExprOperator

datetime expression

N/A

public const int datetimeExprOperator = 25

Field Value

int

day_to_second

ORACLE date time expression, day to second.

Syntax: expr DAY [( integer )] TO SECOND [( integer )].

expr cam be get via LeftOperand.

The type of this operand is TExpression.

public const int day_to_second = 102

Field Value

int

dummyOperator

public const int dummyOperator = 37

Field Value

int

exists_condition

An EXISTS condition tests for existence of rows in a subquery.

Syntax: EXISTS (subquery).

value of subquery can be get via SubQuery

public const int exists_condition = 48

Field Value

int

expr_list

row descriptor, values can be get via ExprList

public const int expr_list = 35

Field Value

int

factorial

Postgresql factorial:

expr !

expr can be accessed via LeftOperand

public const int factorial = 515

Field Value

int

factorialPrefix

Postgresql factorial (prefix operator):

!! 5

expr can be accessed via RightOperand

public const int factorialPrefix = 521

Field Value

int

fieldSelection

If an expression yields a value of a composite type (row type), then a specific field of the row can be extracted by writing

expression.fieldname

In general the row expression must be parenthesized, but the parentheses can be omitted

when the expression to be selected from is just a table reference or positional parameter.

For example:

mytable.mycolumn

$1.somecolumn

(rowfunction(a,b)).col3

(Thus, a qualified column reference is actually just a special case of the field selection syntax.) An important special case is extracting a field from a table column that is of a composite type:

(compositecol).somefield

(mytable.compositecol).somefield

The parentheses are required here to show that compositecol is a column name not a table name,

or that mytable is a table name not a schema name in the second case.

n a select list, you can ask for all fields of a composite value by writing .*:

(compositecol).*

When expression in following syntax, it will be marked as fieldSelection, and check FieldName

(rowfunction(a,b)).col3

(compositecol).somefield

(mytable.compositecol).somefield

(compositecol).*

Otherwise, it will be marked as simpleObjectname:

mytable.mycolumn

$1.somecolumn

public const int fieldSelection = 501

Field Value

int

floating_point_conditions

The ORACLE floating-point conditions let you determine whether an expression is infinite or is the undefined result of an operation (is not a number or NaN).

Syntax: expr IS|IS NOT (NAM|INFINITE).

Value can be get via LeftOperand

public const int floating_point_conditions = 43

Field Value

int

funcationCallOperator

funcation expression,

value can be get via FunctionCall

public const int funcationCallOperator = 24

Field Value

int

group_comparison_conditions

Comparison conditions compare one expression with another. The result of such a comparison can be TRUE, FALSE, or NULL.

A group comparison condition specifies a comparison with any or all members in a list or subquery.

Syntax: expr EQUAL|NOT_EQUAL|LESS_THAN|GRREAT_THAN|LESS_EQUAL_THAN|GREATE_EQUAL_THAN ANY|SOME|ALL (expr_list|subquery), or, (expr_list) EQUAL|NOT_EQUAL ANY|SOME|ALL (expr_list|subquery)

expr can be accessed via LeftOperand and RightOperand

public const int group_comparison_conditions = 41

Field Value

int

in_conditions

An in_condition is a membership condition. It tests a value for membership in a list of values or subquery.

Syntax: (expr|expr_list) IN|NOT IN (expr_list|subquery).

expr can be accessed via LeftOperand and RightOperand

Use OperatorToken to distinguish in or not in.

public const int in_conditions = 42

Field Value

int

in_expr

IN expr, values can be get via InExpr

public const int in_expr = 34

Field Value

int

intervalExprOperator

interval expression

N/A

public const int intervalExprOperator = 26

Field Value

int

interval_expression

teradata interval expression:

( date_time_expression date_time_term ) start TO end

IntervalExpr

public const int interval_expression = 104

Field Value

int

is_distinct_from

Postgresql,

expr is [not] distinct from expr

expr can be accessed via LeftOperand and RightOperand

OperatorToken can be used to check whether NOT keyword was used or not.

public const int is_distinct_from = 135

Field Value

int

is_document

Postgresql, is document condition

expr is [not] document

expr was set in gudusoft.gsqlparser.nodes.TExpression._leftOperand.

OperatorToken can be used to check whether NOT keyword was used or not.

public const int is_document = 133

Field Value

int

isoftype_condition

expr can be accessed via LeftOperand

public const int isoftype_condition = 49

Field Value

int

left_shift

MySQL left shift

Syntax: expr << expr.

expr can be accessed via LeftOperand and RightOperand

public const int left_shift = 301

Field Value

int

logical_conditions_and

A logical condition combines the results of two component conditions to produce a single result based on them or to invert the result of a single condition.

Syntax: expr AND expr.

expr can be accessed via LeftOperand and RightOperand

public const int logical_conditions_and = 50

Field Value

int

logical_conditions_is

Mdx is logical condition

public const int logical_conditions_is = 54

Field Value

int

logical_conditions_not

A logical condition combines the results of two component conditions to produce a single result based on them or to invert the result of a single condition.

Syntax: NOT expr.

value can be get via gudusoft.gsqlparser.nodes.TExpression._rightOperand,

public const int logical_conditions_not = 53

Field Value

int

logical_conditions_or

A logical condition combines the results of two component conditions to produce a single result based on them or to invert the result of a single condition.

Syntax: expr OR expr.

expr can be accessed via LeftOperand and RightOperand

public const int logical_conditions_or = 51

Field Value

int

logical_conditions_xor

A logical condition combines the results of two component conditions to produce a single result based on them or to invert the result of a single condition.

Syntax: expr XOR expr.

expr can be accessed via LeftOperand and RightOperand

public const int logical_conditions_xor = 52

Field Value

int

member_of

ORACLE

expr can be accessed via LeftOperand and RightOperand

public const int member_of = 541

Field Value

int

modelExprOperator

model expression, not implemented yet

N/A

public const int modelExprOperator = 27

Field Value

int

multisetExprOperator

Oracle MULTISET operator

Syntax MULTISET (subquery)

subquery can be get via SubQuery

public const int multisetExprOperator = 310

Field Value

int

mysql_binary_operator

MySQL binary operator, select binary 'a' = 'A'

syntax: binary expr

expr can be accessed via RightOperand

public const int mysql_binary_operator = 300

Field Value

int

new_structured_type

teradata

Constructs a new instance of a structured type and initializes it using the specified constructor method or function.

public const int new_structured_type = 110

Field Value

int

new_variant_type

teradata Constructs a new instance of a dynamic or VARIANT_TYPE UDT and defines the run time composition of the UDT. object reference NewVariantTypeArgumentList

public const int new_variant_type = 111

Field Value

int

nextValueOf

Netezza

NEXT VALUE FOR sequence name

NEXT integer expression VALUE FOR sequence name

integer expression can be accessed via LeftOperand if any.

sequence name name can be accessed via RightOperand

public const int nextValueOf = 601

Field Value

int

null_conditions

A NULL condition tests for nulls. This is the only condition that you should use to test for nulls.

Syntax: expr IS [NOT] null

expr can be accessed via LeftOperand

Use OperatorToken to distinguish is null or is not null

public const int null_conditions = 46

Field Value

int

objectaccessExprOperator

object access expression, some of those was represented by simpleObjectname expression.

N/A

public const int objectaccessExprOperator = 30

Field Value

int

pattern_matching_conditions

The pattern-matching conditions compare character data.

The LIKE conditions specify a test involving pattern matching.

Syntax: expr1 LIKE|NOT_LIKE expr1 [ESCAPE expr3],

expr1 can be get via LeftOperand,

expr2 can be get via RightOperand,

expr3 can be get via LikeEscapeOperand,

Use OperatorToken to distinguish is like or is not like

public const int pattern_matching_conditions = 45

Field Value

int

period_ldiff

teradata period expression: ldiff

expression can be accessed via LeftOperand and RightOperand

public const int period_ldiff = 115

Field Value

int

period_p_intersect

teradata period expression: p_intersect

expression can be accessed via LeftOperand and RightOperand

public const int period_p_intersect = 119

Field Value

int

period_p_normalize

teradata period expression: p_normalize

expression can be accessed via LeftOperand and RightOperand

public const int period_p_normalize = 121

Field Value

int

period_rdiff

teradata period expression: rdiff

expression can be accessed via LeftOperand and RightOperand

public const int period_rdiff = 117

Field Value

int

placeholderExprOperator

place holder expression

public const int placeholderExprOperator = 32

Field Value

int

ref_arrow

plsql RAISE_APPLICATION_ERROR (num=> -20107, msg=> 'Duplicate customer or order ID');

expr can be accessed via LeftOperand and RightOperand

public const int ref_arrow = 226

Field Value

int

right_shift

MySQL rigth shift

Syntax: expr >> expr.

expr can be accessed via LeftOperand and RightOperand

public const int right_shift = 302

Field Value

int

rowConstructor

A row constructor is an expression that builds a row value (also called a composite value) using values for its member fields.

like this: ROW(1,2.5,'this is a test')

element values can be accessed via ExprList,

or ExprList can be null when it is: row()

public const int rowConstructor = 509

Field Value

int

simpleConstant

specifies a constant, value can be get via ConstantOperand

public const int simpleConstant = 16

Field Value

int

simpleObjectname

specifies a column, pseudocolumn, sequence number, value can be get via ObjectOperand which is type of TObjectName.

public const int simpleObjectname = 15

Field Value

int

simpleSourcetoken

specifies a null, value can be get via SourcetokenOperand which is type of TSourceToken.

public const int simpleSourcetoken = 17

Field Value

int

simple_comparison_conditions

Comparison conditions compare one expression with another. The result of such a comparison can be TRUE, FALSE, or NULL.

A simple comparison condition specifies a comparison with expressions or subquery results.

Syntax: expr EQUAL|NOT_EQUAL|LESS_THAN|GRREAT_THAN|LESS_EQUAL_THAN|GREATE_EQUAL_THAN expr, or, (expr_list) EQUAL|NOT_EQUAL (subquery)

expr can be accessed via LeftOperand and RightOperand

public const int simple_comparison_conditions = 40

Field Value

int

sqlserver_proprietary_column_alias

SQL SERVER Proprietary syntax, set alias of a column in select list, column expr in rightOperand.

expr can be accessed via LeftOperand and RightOperand

public const int sqlserver_proprietary_column_alias = 230

Field Value

int

squareRoot

Postgresql square root

|/ 25.0

expr can be accessed via RightOperand

public const int squareRoot = 517

Field Value

int

subqueryExprOperator

A scalar subquery expression is a subquery that returns exactly one column value from one row.
value can be get via SubQuery which is type of TSelectSqlStatement.

public const int subqueryExprOperator = 28

Field Value

int

true_false_unknown

Postgresql

true, false, unknown condition

expr is [not] true

expr is [not] false

expr is [not] unknown

expr can be accessed via LeftOperand

OperatorToken can be used to check whether NOT keyword was used or not.

public const int true_false_unknown = 137

Field Value

int

typecast

plsql

expr can be accessed via LeftOperand

public const int typecast = 227

Field Value

int

typeconstructorExprOperator

type constructor expression,

not implemented yet

public const int typeconstructorExprOperator = 29

Field Value

int

unknown

public const int unknown = 0

Field Value

int

until_changed

teradata until changed condition

syntax: END(period_value_expression) IS[NOT] UNTIL_CHANGED

ending bound of a Period value expression can be accessed via LeftOperand

public const int until_changed = 123

Field Value

int

year_to_month

ORACLE date time expression, year to month.

Syntax: expr YEAR [( integer )] TO MONTH.

expr can be accessed via LeftOperand

public const int year_to_month = 103

Field Value

int

Properties

ArrayAccess

public virtual TArrayAccess ArrayAccess { get; set; }

Property Value

TArrayAccess

BetweenOperand

public virtual TExpression BetweenOperand { get; set; }

Property Value

TExpression

CaseExpression

public virtual TCaseExpression CaseExpression { get; set; }

Property Value

TCaseExpression

ComparisonOperator

public virtual TSourceToken ComparisonOperator { get; set; }

Property Value

TSourceToken

operator used in comparison condition.

ComparisonType

public virtual EComparisonType ComparisonType { get; set; }

Property Value

EComparisonType

ConstantOperand

public virtual TConstant ConstantOperand { get; set; }

Property Value

TConstant

DataTypeConversion

public virtual TExplicitDataTypeConversion DataTypeConversion { get; set; }

Property Value

TExplicitDataTypeConversion

DataTypeConversionList

public virtual List<TExplicitDataTypeConversion> DataTypeConversionList { get; set; }

Property Value

List<TExplicitDataTypeConversion>

DatetimeExpression

public virtual TDatetimeExpression DatetimeExpression { get; set; }

Property Value

TDatetimeExpression

ExprAlias

In Teradata/DB2, it is possible there is an alias for expression

public virtual TAliasClause ExprAlias { get; set; }

Property Value

TAliasClause

expression alias

ExprList

public virtual TExpressionList ExprList { get; set; }

Property Value

TExpressionList

ExpressionType

change return type from int to EExpressionType since 1.4.3.0

public virtual EExpressionType ExpressionType { get; set; }

Property Value

EExpressionType

a value of EExpressionType

FieldList

public virtual TObjectNameList FieldList { get; set; }

Property Value

TObjectNameList

FieldName

public virtual TObjectName FieldName { get; set; }

Property Value

TObjectName

field name

FunctionCall

public virtual TFunctionCall FunctionCall { get; set; }

Property Value

TFunctionCall

Hive_variable

public virtual THiveVariable Hive_variable { get; set; }

Property Value

THiveVariable

InExpr

public virtual TInExpr InExpr { get; set; }

Property Value

TInExpr

Indirection

public virtual TIndirection Indirection { get; set; }

Property Value

TIndirection

IntervalExpr

public virtual TIntervalExpression IntervalExpr { get; set; }

Property Value

TIntervalExpression

IntervalExpression

public virtual TIntervalExpression IntervalExpression { get; set; }

Property Value

TIntervalExpression

Leaf

expression type such as column reference is a leaf expression while subtract expression is not a leaf expression. Usually, non-leaf expression should including both LeftOperand and RightOperand.

public virtual bool Leaf { get; }

Property Value

bool

leaf expression or not.

LeftOperand

public virtual TExpression LeftOperand { get; set; }

Property Value

TExpression

LikeEscapeOperand

public virtual TExpression LikeEscapeOperand { get; set; }

Property Value

TExpression

NewVariantTypeArgumentList

public virtual TNewVariantTypeArgumentList NewVariantTypeArgumentList { get; set; }

Property Value

TNewVariantTypeArgumentList

NotModifier

return true for expression like this:

expr NOT IS NULL, expr NOT LIKE expr , expr NOT BETWEEN expr AND expr

and return false for expression like this:

expr IS NULL, expr LIKE expr , expr BETWEEN expr AND expr

@return

[Obsolete("Property is deprecated, , please use NotToken instead")]
public virtual bool NotModifier { get; }

Property Value

bool

NotOperator

public virtual bool NotOperator { get; set; }

Property Value

bool

NotToken

public virtual TSourceToken NotToken { get; set; }

Property Value

TSourceToken

ObjectAccess

public virtual TObjectAccess ObjectAccess { get; set; }

Property Value

TObjectAccess

ObjectOperand

public virtual TObjectName ObjectOperand { get; set; }

Property Value

TObjectName

OperatorToken

public virtual TSourceToken OperatorToken { get; set; }

Property Value

TSourceToken

OracleOuterJoin

public virtual bool OracleOuterJoin { get; set; }

Property Value

bool

OutputFormatPhraseList

public virtual TOutputFormatPhraseList OutputFormatPhraseList { get; set; }

Property Value

TOutputFormatPhraseList

Over_clause

public virtual TAnalyticFunction Over_clause { get; set; }

Property Value

TAnalyticFunction

OwnerStmt

public virtual TCustomSqlStatement OwnerStmt { get; set; }

Property Value

TCustomSqlStatement

ParentExpr

public virtual TExpression ParentExpr { get; set; }

Property Value

TExpression

Quantifier

one of the following quantifier keywords: SOME, ANY, ALL

public virtual TSourceToken Quantifier { get; set; }

Property Value

TSourceToken

SOME, ANY, ALL in group comparison condition.

QuantifierType

public virtual EQuantifierType QuantifierType { get; set; }

Property Value

EQuantifierType

RightOperand

public virtual TExpression RightOperand { get; set; }

Property Value

TExpression

SequenceName

public virtual TObjectName SequenceName { get; set; }

Property Value

TObjectName

SourcetokenOperand

public virtual TSourceToken SourcetokenOperand { get; set; }

Property Value

TSourceToken

SubQuery

public virtual TSelectSqlStatement SubQuery { get; set; }

Property Value

TSelectSqlStatement

SubQueryInStmt

public virtual bool SubQueryInStmt { get; set; }

Property Value

bool

SubQueryNode

public virtual TSelectSqlNode SubQueryNode { set; }

Property Value

TSelectSqlNode

Subscripts

If an expression yields a value of an array type, then a specific element of the array value can be extracted by writing

expression[subscript]

or multiple adjacent elements (an "array slice") can be extracted by writing

expression[lower_subscript:upper_subscript]

In general the array expression must be parenthesized, but the parentheses can be omitted when the expression to be subscripted is just a column reference or positional parameter.

Also, multiple subscripts can be concatenated when the original array is multidimensional. For example:

when sytnax like this:

mytable.arraycolumn[4]

mytable.two_d_column[17][34]

$1[10:42]

check ObjectOperand for more detailed information about subscript.

when syntax like this:

(arrayfunction(a,b))[42]

check Indirection when Subscripts is true.

public virtual bool Subscripts { get; set; }

Property Value

bool

tells whether it is an expression with subscript.

Symmetric

public virtual bool Symmetric { get; set; }

Property Value

bool

TypeName

public virtual TTypeName TypeName { get; set; }

Property Value

TTypeName

Val

public virtual object Val { get; set; }

Property Value

object

VisitSubTree

public virtual bool VisitSubTree { get; set; }

Property Value

bool

WindowSpecification

public virtual TWindowDef WindowSpecification { set; }

Property Value

TWindowDef

Methods

accept(TParseTreeVisitor)

public override void accept(TParseTreeVisitor v)

Parameters

v TParseTreeVisitor

acceptChildren(TParseTreeVisitor)

public override void acceptChildren(TParseTreeVisitor v)

Parameters

v TParseTreeVisitor

addANDCondition(string)

if original expr is f > 1, and call addANDCondition("f2 > 2") expression will be: f > 1 and f2 > 2

public virtual void addANDCondition(string condition)

Parameters

condition string

addORCondition(string)

if original expr is f > 1, and call addORCondition("f2 > 2") expression will be: f > 1 or f2 > 2

public virtual void addORCondition(string condition)

Parameters

condition string

copyTo(TExpression)

public void copyTo(TExpression target)

Parameters

target TExpression

doParse(TCustomSqlStatement, ESqlClause)

analyze this node

public override void doParse(TCustomSqlStatement psql, ESqlClause plocation)

Parameters

psql TCustomSqlStatement
plocation ESqlClause

getAndOrTokenBeforeExpr()

public TSourceToken getAndOrTokenBeforeExpr()

Returns

TSourceToken

getComparisonType(TSourceToken)

public static EComparisonType getComparisonType(TSourceToken comparisonOperator)

Parameters

comparisonOperator TSourceToken

Returns

EComparisonType

getFlattedAndOrExprs()

public ArrayList getFlattedAndOrExprs()

Returns

ArrayList

inOrderTraverse(IExpressionVisitor)

Traverse expression in In Order.

public virtual void inOrderTraverse(IExpressionVisitor ev)

Parameters

ev IExpressionVisitor

user defined visitor

init(object)

Initialize a query tree node.

public override void init(object arg1)

Parameters

arg1 object

init(object, object)

public override void init(object arg1, object arg2)

Parameters

arg1 object
arg2 object

init(object, object, object)

public override void init(object arg1, object arg2, object arg3)

Parameters

arg1 object
arg2 object
arg3 object

init(object, object, object, object)

initialize a new instance of TExpression.

public override void init(object arg1, object arg2, object arg3, object arg4)

Parameters

arg1 object

type of this expression, a value of type EExpressionType

arg2 object

operator, a value of TSourceToken

arg3 object

left operand, a value of TExpression the meaning of this parameter varies depends on the value of arg1.

arg4 object

right operand, a value of TExpression

isLeafExpr(TParseTreeNode)

public virtual bool isLeafExpr(TParseTreeNode pnode)

Parameters

pnode TParseTreeNode

Returns

bool

mergeObjectNameList(TExpression, TObjectNameList)

public static TExpression mergeObjectNameList(TExpression expr, TObjectNameList objectNameList)

Parameters

expr TExpression
objectNameList TObjectNameList

Returns

TExpression

postOrderTraverse(IExpressionVisitor)

Traverse expression in post order.

public virtual void postOrderTraverse(IExpressionVisitor ev)

Parameters

ev IExpressionVisitor

user defined visitor

preOrderTraverse(IExpressionVisitor)

Traverse expression in pre Order.

public virtual void preOrderTraverse(IExpressionVisitor ev)

Parameters

ev IExpressionVisitor

user defined visitor

remove()

public void remove()

searchColumn(string)

public TExpressionList searchColumn(string columnName)

Parameters

columnName string

Returns

TExpressionList

setBetweenOperand(TExpression)

public void setBetweenOperand(TExpression e)

Parameters

e TExpression

setCaseExpression(TCaseExpression)

public void setCaseExpression(TCaseExpression ce)

Parameters

ce TCaseExpression

setExprList(TExpressionList)

public void setExprList(TExpressionList el)

Parameters

el TExpressionList

setFunctionCall(TFunctionCall)

public void setFunctionCall(TFunctionCall c)

Parameters

c TFunctionCall

setIndirection(TIndirection)

public void setIndirection(TIndirection i)

Parameters

i TIndirection

setLeftOperand(TExpression)

public void setLeftOperand(TExpression e)

Parameters

e TExpression

setLikeEscapeOperand(TExpression)

public void setLikeEscapeOperand(TExpression e)

Parameters

e TExpression

setNotToken(TSourceToken)

public void setNotToken(TSourceToken st)

Parameters

st TSourceToken

setOperatorToken(TSourceToken)

public void setOperatorToken(TSourceToken st)

Parameters

st TSourceToken

setQuantifier(TSourceToken)

public void setQuantifier(TSourceToken st)

Parameters

st TSourceToken

setRightOperand(TExpression)

public void setRightOperand(TExpression e)

Parameters

e TExpression

setSubQueryNode(TSelectSqlNode)

public void setSubQueryNode(TSelectSqlNode subquery)

Parameters

subquery TSelectSqlNode

setSymmetric(bool)

public void setSymmetric(bool b)

Parameters

b bool

setTokenToIdentifier()

public virtual void setTokenToIdentifier()

setTypeName(TTypeName)

public void setTypeName(TTypeName n)

Parameters

n TTypeName