com.akiban.sql.parser
Class SimpleCaseNode
java.lang.Object
com.akiban.sql.parser.QueryTreeNode
com.akiban.sql.parser.ValueNode
com.akiban.sql.parser.SimpleCaseNode
- All Implemented Interfaces:
- Visitable
public class SimpleCaseNode
- extends ValueNode
A SimpleCaseNode represents the CASE THEN ... form.
| Methods inherited from class com.akiban.sql.parser.ValueNode |
getColumnName, getSchemaName, getSourceResultColumn, getTableName, getType, getTypeId, init, isBinaryEqualsOperatorNode, isBooleanFalse, isBooleanTrue, isConstantExpression, isInListProbeNode, isParameterNode, isRelationalOperator, isSameNodeType, setNullability, setType, toString |
| Methods inherited from class com.akiban.sql.parser.QueryTreeNode |
accept, convertDefaultNode, debugFlush, debugPrint, formatNodeString, getBeginOffset, getDebugOutput, getEndOffset, getNodeFactory, getNodeType, getNullNode, getParserContext, getStatementType, getUserData, init, init, init, init, init, init, init, init, init, init, init, init, isInstanceOf, makeTableName, makeTableName, nodeHeader, printLabel, setBeginOffset, setDebugOutput, setEndOffset, setNodeType, setParserContext, setUserData, stackPrint, treePrint, treePrint, treePrint |
SimpleCaseNode
public SimpleCaseNode()
init
public void init(Object operand)
throws StandardException
- Initializer for a SimpleCaseNode
- Overrides:
init in class QueryTreeNode
- Parameters:
operand - The expression being compared
- Throws:
StandardException - Thrown on error
copyFrom
public void copyFrom(QueryTreeNode node)
throws StandardException
- Fill this node with a deep copy of the given node.
- Overrides:
copyFrom in class ValueNode
- Throws:
StandardException
getOperand
public ValueNode getOperand()
getCaseOperands
public ValueNodeList getCaseOperands()
getResultValues
public ValueNodeList getResultValues()
getElseValue
public ValueNode getElseValue()
setElseValue
public void setElseValue(ValueNode elseValue)
getNumberOfCases
public int getNumberOfCases()
- The number of
WHEN cases.
getCaseOperand
public ValueNode getCaseOperand(int index)
- The
WHEN part.
getResultValue
public ValueNode getResultValue(int index)
- The
THEN part.
addCase
public void addCase(ValueNode operand,
ValueNode result)
printSubNodes
public void printSubNodes(int depth)
- Prints the sub-nodes of this object. See QueryTreeNode.java for
how tree printing is supposed to work.
- Overrides:
printSubNodes in class QueryTreeNode
- Parameters:
depth - The depth of this node in the tree
isEquivalent
protected boolean isEquivalent(ValueNode o)
throws StandardException
- Tests if this node is equivalent to the specified ValueNode. Two
ValueNodes are considered equivalent if they will evaluate to the same
value during query execution.
This method provides basic expression matching facility for the derived
class of ValueNode and it is used by the language layer to compare the
node structural form of the two expressions for equivalence at bind
phase.
Note that it is not comparing the actual row values at runtime to produce
a result; hence, when comparing SQL NULLs, they are considered to be
equivalent and not unknown.
One usage case of this method in this context is to compare the select
column expression against the group by expression to check if they are
equivalent. e.g.:
SELECT c1+c2 FROM t1 GROUP BY c1+c2
In general, node equivalence is determined by the derived class of
ValueNode. But they generally abide to the rules below:
- The two ValueNodes must be of the same node type to be considered
equivalent. e.g.: CastNode vs. CastNode - equivalent (if their args
also match), ColumnReference vs CastNode - not equivalent.
- If node P contains other ValueNode(s) and so on, those node(s) must
also be of the same node type to be considered equivalent.
- If node P takes a parameter list, then the number of arguments and its
arguments for the two nodes must also match to be considered
equivalent. e.g.: CAST(c1 as INTEGER) vs CAST(c1 as SMALLINT), they
are not equivalent.
- When comparing SQL NULLs in this context, they are considered to be
equivalent.
- If this does not apply or it is determined that the two nodes are not
equivalent then the derived class of this method should return false;
otherwise, return true.
- Specified by:
isEquivalent in class ValueNode
- Parameters:
o - the node to compare this ValueNode against.
- Returns:
true if the two nodes are equivalent,
false otherwise.
- Throws:
StandardException
Copyright © 2013 Akiban Technologies, Inc. All rights reserved.