public abstract class Filter extends Preds
Modifier | Constructor and Description |
---|---|
protected |
Filter(InputInfo info,
Expr root,
Expr... preds)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
boolean |
accept(ASTVisitor visitor)
Traverses this expression, notifying the visitor of declared and used variables,
and checking the tree for other recursive properties.
|
Expr |
addPred(Expr p)
Adds a predicate to the filter.
|
void |
checkUp()
Checks if all updating expressions are correctly placed.
|
Expr |
compile(QueryContext qc,
VarScope scp)
Compiles and optimizes the expression, assigns types and cardinalities.
|
VarUsage |
count(Var var)
Checks how often a variable is used in this expression.
|
int |
exprSize()
Counts the number of expressions in this expression's sub-tree.
|
static Expr |
get(InputInfo info,
Expr root,
Expr... preds)
Creates a filter or path expression for the given root and predicates.
|
boolean |
has(Expr.Flag flag)
Indicates if an expression has the specified compiler property.
|
Expr |
inline(QueryContext qc,
VarScope scp,
Var var,
Expr ex)
Inlines an expression into this one, replacing all references to the given variable.
|
Expr |
optimize(QueryContext qc,
VarScope scp)
Optimizes an already compiled expression without recompiling its sub-expressions.
|
Expr |
optimizeEbv(QueryContext qc,
VarScope scp)
|
boolean |
removable(Var var)
Checks if the specified variable is replaceable by a context value.
|
String |
toString() |
atomItem, atomValue, checkAtomic, checkNoEmpty, checkNoEmpty, checkNoneUp, checkNoUp, checkType, compBln, copyType, ctxValue, ebv, item, iter, optPre, optPre, preEval, seqType, seqType, size, test, toArray, toArray, toAtomItem, toB64, toB64, toBin, toBin, toBoolean, toBoolean, toBytes, toBytes, toDouble, toDouble, toElem, toEmptyNode, toEmptyToken, toFloat, toFunc, toItem, toLong, toLong, toMap, toMap, toNode, toNode, toNumber, toQNm, toQNm, toToken, toToken, value
atomIter, copy, data, hasFreeVars, indexAccessible, inlineAll, isEmpty, isFunction, isVacuous, isValue, iterable, markTailCalls, sameAs, typeCheck, uses, visitAll
addPlan, addPlan, description, planAttr, planElem, toErrorString
public Expr root
public static Expr get(InputInfo info, Expr root, Expr... preds)
info
- input inforoot
- root expressionpreds
- predicate expressionspublic void checkUp() throws QueryException
Expr
checkUp
in class Preds
QueryException
- query exceptionpublic final Expr compile(QueryContext qc, VarScope scp) throws QueryException
Expr
QueryContext.compile()
.compile
in class Preds
qc
- query contextscp
- variable scopeQueryException
- query exceptionpublic final Expr optimizeEbv(QueryContext qc, VarScope scp) throws QueryException
Expr
This method is e.g. overwritten by expressions like CmpG
, CmpV
,
FnBoolean
, FnExists
, Path
or Filter
.
It is called at compile time by expressions that perform
effective boolean value tests (e.g. If
or Preds
).
If the arguments of the called expression return a boolean anyway,
the expression will be simplified.
Example in CmpV
:
if($x eq true())
is rewritten to if($x)
if $x
is known to return a single boolean.
optimizeEbv
in class Expr
qc
- query contextscp
- variable scopeQueryException
- query exceptionpublic Expr addPred(Expr p)
For.addPredicate(org.basex.query.expr.Expr)
.p
- predicate to be addedpublic final Expr optimize(QueryContext qc, VarScope scp) throws QueryException
Expr
optimize
in class Preds
qc
- query contextscp
- variable scopeQueryException
- query exceptionpublic final boolean has(Expr.Flag flag)
Expr
true
if at least one test is successful.public final boolean removable(Var var)
Expr
Preds.removable(org.basex.query.var.Var)
if one of the variables is used within a predicate.Path.removable(org.basex.query.var.Var)
if the variable occurs within the path.GFLWOR.compile(QueryContext, VarScope)
to rewrite where
clauses into predicates.public VarUsage count(Var var)
Expr
SwitchCase.countCases(org.basex.query.var.Var)
or (indirectly)
GFLWOR.inlineLets(org.basex.query.QueryContext, org.basex.query.var.VarScope)
.public Expr inline(QueryContext qc, VarScope scp, Var var, Expr ex) throws QueryException
Expr
GFLWOR.inlineLets(org.basex.query.QueryContext, org.basex.query.var.VarScope)
and For.toPredicate(org.basex.query.QueryContext, org.basex.query.var.VarScope, org.basex.query.expr.Expr)
,
and the variable reference is replaced in VarRef.inline(org.basex.query.QueryContext, org.basex.query.var.VarScope, org.basex.query.var.Var, org.basex.query.expr.Expr)
.inline
in class Expr
qc
- query context for reoptimizationscp
- variable scope for reoptimizationvar
- variable to replaceex
- expression to inlinenull
otherwiseQueryException
- query exceptionpublic boolean accept(ASTVisitor visitor)
Expr
public final int exprSize()
Expr
StaticFunc.inline(org.basex.query.QueryContext, org.basex.query.util.list.AnnList, org.basex.query.expr.Expr)
to check if an expression
is small enough to be inlined.Copyright © 2005–2015 BaseX Team. All rights reserved.