public final class GFLWOR extends ParseExpr
Modifier and Type | Class and Description |
---|---|
static class |
GFLWOR.Clause
A FLWOR clause.
|
Constructor and Description |
---|
GFLWOR(InputInfo info,
LinkedList<GFLWOR.Clause> clauses,
Expr ret)
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.
|
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.
|
Expr |
copy(QueryContext qc,
VarScope scp,
IntObjMap<Var> vs)
Copies an expression.
|
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.
|
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.
|
boolean |
isVacuous()
Tests if this is a vacuous expression (empty sequence or error function).
|
Iter |
iter(QueryContext qc)
Evaluates the expression and returns an iterator on the resulting items.
|
void |
markTailCalls(QueryContext qc)
Finds and marks tail calls, enabling TCO.
|
Expr |
optimize(QueryContext qc,
VarScope scp)
Optimizes an already compiled expression without recompiling its sub-expressions.
|
void |
plan(FElem plan)
Creates an expression tree.
|
boolean |
removable(Var var)
Checks if the specified variable is replaceable by a context value.
|
String |
toString() |
Expr |
typeCheck(TypeCheck tc,
QueryContext qc,
VarScope scp)
Tries to push the given type check inside this expression.
|
atomItem, atomValue, checkAtomic, checkNoEmpty, checkNoEmpty, checkNoneUp, checkNoUp, checkType, compBln, copyType, ctxValue, ebv, item, 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, data, hasFreeVars, indexAccessible, inlineAll, isEmpty, isFunction, isValue, iterable, optimizeEbv, sameAs, uses, visitAll
addPlan, addPlan, description, planAttr, planElem, toErrorString
public Expr ret
public GFLWOR(InputInfo info, LinkedList<GFLWOR.Clause> clauses, Expr ret)
info
- input infoclauses
- FLWOR clausesret
- return expressionpublic Iter iter(QueryContext qc)
Expr
Expr.item(QueryContext, InputInfo)
must be implemented
by an expression, as it may be called by this method.public Expr compile(QueryContext qc, VarScope scp) throws QueryException
Expr
QueryContext.compile()
.compile
in class Expr
qc
- query contextscp
- variable scopeQueryException
- query exceptionpublic Expr optimize(QueryContext qc, VarScope scp) throws QueryException
Expr
optimize
in class Expr
qc
- query contextscp
- variable scopeQueryException
- query exceptionpublic boolean isVacuous()
Expr
public boolean has(Expr.Flag flag)
Expr
true
if at least one test is successful.public 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.compile(QueryContext, VarScope)
to rewrite where
clauses into predicates.public VarUsage count(Var var)
Expr
SwitchCase.countCases(org.basex.query.var.Var)
or (indirectly)
inlineLets(org.basex.query.QueryContext, org.basex.query.var.VarScope)
.public Expr inline(QueryContext qc, VarScope scp, Var var, Expr ex) throws QueryException
Expr
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 Expr copy(QueryContext qc, VarScope scp, IntObjMap<Var> vs)
Expr
public boolean accept(ASTVisitor visitor)
Expr
public void checkUp() throws QueryException
Expr
checkUp
in class Expr
QueryException
- query exceptionpublic void markTailCalls(QueryContext qc)
Expr
markTailCalls
in class Expr
qc
- query context, null
if the changes should not be reportedpublic 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.public Expr typeCheck(TypeCheck tc, QueryContext qc, VarScope scp) throws QueryException
Expr
typeCheck
in class Expr
tc
- type check to push into the expressionqc
- query contextscp
- variable scopenull
otherwiseQueryException
- query exceptionpublic void plan(FElem plan)
ExprInfo
Copyright © 2005–2015 BaseX Team. All rights reserved.