|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.eigenbase.sql.SqlNode
public abstract class SqlNode
A SqlNode
is a SQL parse tree. It may be an operator
, literal
, identifier
, and
so forth.
Field Summary | |
---|---|
static SqlNode[] |
emptyArray
|
private SqlParserPos |
pos
|
Constructor Summary | |
---|---|
SqlNode(SqlParserPos pos)
Creates a node. |
Method Summary | ||
---|---|---|
abstract
|
accept(SqlVisitor<R> visitor)
Accepts a generic visitor. |
|
Object |
clone()
|
|
SqlNode |
clone(SqlParserPos pos)
Clones a SqlNode with a different position. |
|
static SqlNode[] |
cloneArray(SqlNode[] nodes)
|
|
static boolean |
equalDeep(SqlNode node1,
SqlNode node2,
boolean fail)
Returns whether two nodes are equal (using equalsDeep(SqlNode,boolean) ) or are both null. |
|
abstract boolean |
equalsDeep(SqlNode node,
boolean fail)
Returns whether this node is structurally equivalent to another node. |
|
void |
findValidOptions(SqlValidator validator,
SqlValidatorScope scope,
SqlParserPos pos,
List<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(SqlKind kind)
Returns whether this node is a particular kind. |
|
String |
toSqlString(SqlDialect dialect)
|
|
String |
toSqlString(SqlDialect dialect,
boolean forceParens)
Returns the SQL text of the tree of which this SqlNode is
the root. |
|
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. |
Methods inherited from class java.lang.Object |
---|
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
public static final SqlNode[] emptyArray
private final SqlParserPos pos
Constructor Detail |
---|
SqlNode(SqlParserPos pos)
pos
- Parser position, must not be null.Method Detail |
---|
public Object clone()
clone
in class Object
public SqlNode clone(SqlParserPos pos)
public boolean isA(SqlKind kind)
kind
- a SqlKind
valuepublic SqlKind getKind()
SqlKind.Other
if it's nothing special.
SqlKind
value, never nullpublic static SqlNode[] cloneArray(SqlNode[] nodes)
public String toString()
toString
in class Object
public String toSqlString(SqlDialect dialect, boolean forceParens)
SqlNode
is
the root.
dialect
- forceParens
- wraps all expressions in parentheses; good for parse
test, but false by default.
Typical return values are:
public String 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.eigenbase.sql.SqlWriter, int, int)
.
writer
- Target writerleftPrec
- The precedence of the SqlNode
immediately
preceding this node in a depth-first scan of the parse treerightPrec
- The precedence of the SqlNode
immediatelypublic 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.eigenbase.sql.SqlLiteral)
for these purposes.
scope
- Validatorpublic void findValidOptions(SqlValidator validator, SqlValidatorScope scope, SqlParserPos pos, List<SqlMoniker> hintList)
validator
- Validatorscope
- Validation scopepos
- SqlParserPos indicating the cursor position at which competion
hints are requested forhintList
- list of valid optionspublic void validateExpr(SqlValidator validator, SqlValidatorScope scope)
Usually, this method does much the same as validate(org.eigenbase.sql.validate.SqlValidator, org.eigenbase.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, boolean fail)
public static boolean equalDeep(SqlNode node1, SqlNode node2, boolean fail)
equalsDeep(SqlNode,boolean)
) or are both null.
node1
- First expressionnode2
- Second expressionfail
- Whether to throw AssertionError
if expressions are
not equalpublic SqlMonotonicity getMonotonicity(SqlValidatorScope scope)
The default implementation returns SqlMonotonicity.NotMonotonic
.
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |