public abstract class SqlNode
extends java.lang.Object
implements java.lang.Cloneable
SqlNode
is a SQL parse tree.
It may be an
operator
, literal
,
identifier
, and so forth.
Modifier and Type | Field and Description |
---|---|
static SqlNode[] |
EMPTY_ARRAY |
protected SqlParserPos |
pos |
Constructor and Description |
---|
SqlNode(SqlParserPos pos)
Creates a node.
|
Modifier and Type | Method and Description |
---|---|
abstract <R> R |
accept(SqlVisitor<R> visitor)
Accepts a generic visitor.
|
java.lang.Object |
clone()
Deprecated.
Please use
clone(SqlNode) ; this method brings
along too much baggage from early versions of Java |
static <E extends SqlNode> |
clone(E e)
Creates a copy of a SqlNode.
|
abstract SqlNode |
clone(SqlParserPos pos)
Clones a SqlNode with a different position.
|
static SqlNode[] |
cloneArray(SqlNode[] nodes)
Deprecated.
|
static boolean |
equalDeep(java.util.List<SqlNode> operands0,
java.util.List<SqlNode> operands1,
Litmus litmus)
Returns whether two lists of operands are equal.
|
static boolean |
equalDeep(SqlNode node1,
SqlNode node2,
Litmus litmus)
Returns whether two nodes are equal (using
equalsDeep(SqlNode, Litmus) ) or are both null. |
boolean |
equalsDeep(SqlNode node,
boolean fail)
Deprecated.
|
abstract boolean |
equalsDeep(SqlNode node,
Litmus litmus)
Returns whether this node is structurally equivalent to another node.
|
void |
findValidOptions(SqlValidator validator,
SqlValidatorScope scope,
SqlParserPos pos,
java.util.Collection<SqlMoniker> hintList)
Lists all the valid alternatives for this node if the parse position of
the node matches that of pos.
|
SqlKind |
getKind()
Returns the type of node this is, or
SqlKind.OTHER if it's nothing special. |
SqlMonotonicity |
getMonotonicity(SqlValidatorScope scope)
Returns whether expression is always ascending, descending or constant.
|
SqlParserPos |
getParserPosition() |
boolean |
isA(java.util.Set<SqlKind> category)
Returns whether this node is a member of an aggregate category.
|
SqlString |
toSqlString(SqlDialect dialect) |
SqlString |
toSqlString(SqlDialect dialect,
boolean forceParens)
Returns the SQL text of the tree of which this
SqlNode is
the root. |
java.lang.String |
toString() |
abstract void |
unparse(SqlWriter writer,
int leftPrec,
int rightPrec)
Writes a SQL representation of this node to a writer.
|
abstract void |
validate(SqlValidator validator,
SqlValidatorScope scope)
Validates this node.
|
void |
validateExpr(SqlValidator validator,
SqlValidatorScope scope)
Validates this node in an expression context.
|
public static final SqlNode[] EMPTY_ARRAY
protected final SqlParserPos pos
SqlNode(SqlParserPos pos)
pos
- Parser position, must not be null.@Deprecated public java.lang.Object clone()
clone(SqlNode)
; this method brings
along too much baggage from early versions of Javaclone
in class java.lang.Object
public static <E extends SqlNode> E clone(E e)
public abstract SqlNode clone(SqlParserPos pos)
@Nonnull public SqlKind getKind()
SqlKind.OTHER
if it's nothing special.SqlKind
value, never nullisA(java.util.Set<org.apache.calcite.sql.SqlKind>)
public final boolean isA(java.util.Set<SqlKind> category)
For example, node.isA(SqlKind.QUERY)
returns true
if the node is a SELECT, INSERT, UPDATE etc.
This method is shorthand: node.isA(category)
is always
equivalent to node.getKind().belongsTo(category)
.
category
- Categorypublic java.lang.String toString()
toString
in class java.lang.Object
public SqlString toSqlString(SqlDialect dialect, boolean forceParens)
SqlNode
is
the root.dialect
- DialectforceParens
- wraps all expressions in parentheses; good for parse
test, but false by default.
Typical return values are:
public SqlString toSqlString(SqlDialect dialect)
public abstract void unparse(SqlWriter writer, int leftPrec, int rightPrec)
The leftPrec
and rightPrec
parameters give
us enough context to decide whether we need to enclose the expression in
parentheses. For example, we need parentheses around "2 + 3" if preceded
by "5 *". This is because the precedence of the "*" operator is greater
than the precedence of the "+" operator.
The algorithm handles left- and right-associative operators by giving them slightly different left- and right-precedence.
If SqlWriter.isAlwaysUseParentheses()
is true, we use
parentheses even when they are not required by the precedence rules.
For the details of this algorithm, see SqlCall.unparse(org.apache.calcite.sql.SqlWriter, int, int)
.
public SqlParserPos getParserPosition()
public abstract void validate(SqlValidator validator, SqlValidatorScope scope)
The typical implementation of this method will make a callback to the
validator appropriate to the node type and context. The validator has
methods such as SqlValidator.validateLiteral(org.apache.calcite.sql.SqlLiteral)
for these purposes.
scope
- Validatorpublic void findValidOptions(SqlValidator validator, SqlValidatorScope scope, SqlParserPos pos, java.util.Collection<SqlMoniker> hintList)
validator
- Validatorscope
- Validation scopepos
- SqlParserPos indicating the cursor position at which
completion hints are requested forhintList
- list of valid optionspublic void validateExpr(SqlValidator validator, SqlValidatorScope scope)
Usually, this method does much the same as validate(org.apache.calcite.sql.validate.SqlValidator, org.apache.calcite.sql.validate.SqlValidatorScope)
, but a
SqlIdentifier
can occur in expression and non-expression
contexts.
public abstract <R> R accept(SqlVisitor<R> visitor)
Implementations of this method in subtypes simply call the appropriate
visit
method on the
visitor object
.
The type parameter R
must be consistent with the type
parameter of the visitor.
public abstract boolean equalsDeep(SqlNode node, Litmus litmus)
@Deprecated public final boolean equalsDeep(SqlNode node, boolean fail)
public static boolean equalDeep(SqlNode node1, SqlNode node2, Litmus litmus)
equalsDeep(SqlNode, Litmus)
) or are both null.node1
- First expressionnode2
- Second expressionlitmus
- What to do if an error is detected (expressions are
not equal)public SqlMonotonicity getMonotonicity(SqlValidatorScope scope)
The default implementation returns
SqlMonotonicity.NOT_MONOTONIC
.
scope
- ScopeCopyright © 2012–2019 The Apache Software Foundation. All rights reserved.