public interface Expr
Modifier and Type | Field and Description |
---|---|
static int |
CMP_EQUAL |
static int |
CMP_GREATER |
static int |
CMP_INDETERMINATE |
static int |
CMP_LESS |
static int |
CMP_UNEQUAL |
Modifier and Type | Method and Description |
---|---|
Expr |
applyNodeTransform(NodeTransform transform)
Rewrite, applying a node->node transformation
|
Var |
asVar()
Convert to a Var variable.
|
Expr |
copySubstitute(Binding binding)
Deep copy with substitution
|
Expr |
deepCopy()
Deep copy
|
boolean |
equals(Expr other,
boolean bySyntax)
General equality operation - consider this to be 'protected'
|
boolean |
equals(Object other) |
boolean |
equalsBySyntax(Expr other) |
NodeValue |
eval(Binding binding,
FunctionEnv env)
Evaluate this expression against the binding
|
NodeValue |
getConstant()
NodeValue constant (returns null if not a constant)
|
ExprVar |
getExprVar()
Variable (or null)
|
ExprFunction |
getFunction()
Get the function (returns null if not a function)
|
String |
getVarName()
Variable name (returns null if not a variable)
|
Set<Var> |
getVarsMentioned()
Variables used by this expression - excludes variables scoped to (NOT)EXISTS
|
int |
hashCode()
Expr are used in both syntax and algebra. |
boolean |
isConstant()
Answer whether this is a constant expression - false includes "don't know"
No constant folding so "false" from an expression that evaluates to a constant
|
boolean |
isFunction()
Answer wether this is a function.
|
boolean |
isSatisfied(Binding binding,
FunctionEnv execCxt)
Test whether a Constraint is satisfied, given a set of bindings
Includes error propagtion and Effective Boolean Value rules.
|
boolean |
isVariable()
Answer whether this is a variable (in which case getVarName and getNodeVar can be called)
|
void |
varsMentioned(Collection<Var> acc)
Variables used by this expression - excludes variables scoped to (NOT)EXISTS
|
void |
visit(ExprVisitor visitor) |
static final int CMP_GREATER
static final int CMP_EQUAL
static final int CMP_LESS
static final int CMP_UNEQUAL
static final int CMP_INDETERMINATE
boolean isSatisfied(Binding binding, FunctionEnv execCxt)
binding
- The bindingsexecCxt
- FunctionEnvSet<Var> getVarsMentioned()
void varsMentioned(Collection<Var> acc)
NodeValue eval(Binding binding, FunctionEnv env)
binding
- env
- Expr applyNodeTransform(NodeTransform transform)
Expr deepCopy()
boolean isVariable()
String getVarName()
ExprVar getExprVar()
Var asVar()
boolean isConstant()
NodeValue getConstant()
boolean isFunction()
ExprFunction getFunction()
void visit(ExprVisitor visitor)
int hashCode()
Expr
are used in both syntax and algebra. There is no syntax
to algebra translation step because the parser uses operator precedence
to build the right evaluation structure directly.
The exceptions to this are the NOT EXISTS
and
EXISTS
expressions which involve a query pattern. As a
result there are different ways in syntax to produce the same algebra
form.
Two Expr
are considered equal if they are equal as algebra
expressions. hashCode
and equals
must implement
that.
There is also equalsBySyntax
. Because two different syntax
forms can yield the same algebra, but two different algebra forms
must be different syntax, equalsBySyntax
implies equals
(by alegbra).
Hence, different hashCode
=> not equalsBySyntax
.
boolean equalsBySyntax(Expr other)
boolean equals(Expr other, boolean bySyntax)
Licenced under the Apache License, Version 2.0