CMP_EQUAL, CMP_GREATER, CMP_INDETERMINATE, CMP_LESS, CMP_UNEQUAL, NONE| Modifier and Type | Method and Description |
|---|---|
Expr |
applyNodeTransform(NodeTransform transform)
Rewrite, applying a node->node transformation
|
Expr |
copySubstitute(Binding binding)
Deep copy with substitution
|
boolean |
equals(Expr other,
boolean bySyntax)
General equality operation - consider this to be 'protected'
|
NodeValue |
eval(Binding binding,
FunctionEnv env)
Evaluate this expression against the binding
|
int |
hashCode()
Expr are used in both syntax and algebra. |
void |
visit(ExprVisitor visitor) |
asVar, deepCopy, equals, equalsBySyntax, getConstant, getExpr, getExprVar, getFunction, getGraphPattern, getVarName, getVarNamesMentioned, getVarsMentioned, isConstant, isExpr, isFunction, isGraphPattern, isSatisfied, isVariable, toString, varNamesMentioned, varsMentionedpublic void visit(ExprVisitor visitor)
public NodeValue eval(Binding binding, FunctionEnv env)
Exprpublic int hashCode()
ExprExpr 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.
public boolean equals(Expr other, boolean bySyntax)
Exprpublic Expr copySubstitute(Binding binding)
ExprcopySubstitute in interface ExprcopySubstitute in class ExprNodepublic Expr applyNodeTransform(NodeTransform transform)
ExprapplyNodeTransform in interface ExprapplyNodeTransform in class ExprNodeLicenced under the Apache License, Version 2.0