Package org.basex.query.func
Class Closure
java.lang.Object
org.basex.query.expr.ExprInfo
org.basex.query.expr.Expr
org.basex.query.expr.ParseExpr
org.basex.query.expr.Single
org.basex.query.func.Closure
- All Implemented Interfaces:
XQFunctionExpr,Scope
Inline function.
- Author:
- BaseX Team 2005-21, BSD License, Leo Woerteler
-
Field Summary
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionbooleanaccept(ASTVisitor visitor) Traverses this expression, notifying the visitor of declared and used variables, and checking the tree for other recursive properties.Annotations of this function.intarity()Number of arguments this function takes.voidcheckUp()Checks if the updating semantics are satisfied.voidcomp(CompileContext cc) Compiles the expression contained in this scope.Compiles and optimizes the expression, assigns types and cardinalities.booleancompiled()Checks if this scope has already been compiled.copy(CompileContext cc, IntObjMap<Var> vm) Copies an expression.Checks how often a variable or context reference is used in this expression.booleanThis function is e.g.intexprSize()Counts the number of expressions in this expression's sub-tree.funcName()Name of this function,nullmeans anonymous function.funcType()Returns the function type of this expression.Returns an iterator over the non-local bindings of this closure.booleanIndicates if an expression has one of the specified compiler properties.inline(Expr[] exprs, CompileContext cc) Tries to inline this function with the given arguments.inline(InlineContext ic) Inlines an expression into this one, replacing all variable or context references.booleanChecks if inlining is possible.item(QueryContext qc, InputInfo ii) Evaluates the expression and returns the resulting item, orEmpty.VALUEif the expression yields an empty sequence.Optimizes an already compiled expression without recompiling its sub-expressions.paramName(int pos) Name of the parameter at the given position.voidCreates a query plan.voidplan(QueryString qs) Creates a query string.static ClosureundeclaredLiteral(QNm name, int arity, QueryContext qc, StaticContext sc, InputInfo ii) Creates a function literal for a function that was not yet encountered while parsing.booleanvacuous()Tests if this is a vacuous expression (empty sequence or error function).booleanChecks if this function returns vacuous results (seeExpr.vacuous()).booleanvisit(ASTVisitor visitor) Traverses this scope with the givenASTVisitor.Methods inherited from class org.basex.query.expr.ParseExpr
adoptType, atomValue, checkAllUp, checkNoEmpty, checkNoEmpty, checkNoneUp, checkNoUp, checkType, checkType, checkUp, copyType, ctxValue, ebv, iter, refineType, seqType, size, test, toArray, toArray, toAtomItem, toB64, toB64, toBin, toBin, toBoolean, toBoolean, toBytes, toBytes, toDouble, toDouble, toElem, toFloat, toFunc, toItem, toItem, toLong, toLong, toMap, toMap, toNode, toNode, toNodeOrNull, toNumber, toNumberOrNull, toQNm, toQNm, toToken, toToken, toTokenOrNull, toZeroToken, valueMethods inherited from class org.basex.query.expr.Expr
arg, args, atomItem, atomIter, data, data, ddo, hasFreeVars, indexAccessible, isSimple, markTailCalls, mergeEbv, simplifyFor, typeCheck, uses, visitAllMethods inherited from class org.basex.query.expr.ExprInfo
description, toErrorString, toString
-
Constructor Details
-
Closure
public Closure(InputInfo info, SeqType declType, Var[] params, Expr expr, AnnList anns, Map<Var, Expr> global, VarScope vs) Constructor.- Parameters:
info- input infodeclType- declared type (can benull)params- formal parametersexpr- function bodyanns- annotationsglobal- bindings for non-local variablesvs- scope
-
-
Method Details
-
arity
public int arity()Description copied from interface:XQFunctionExprNumber of arguments this function takes.- Specified by:
arityin interfaceXQFunctionExpr- Returns:
- function arity
-
funcName
Description copied from interface:XQFunctionExprName of this function,nullmeans anonymous function.- Specified by:
funcNamein interfaceXQFunctionExpr- Returns:
- name or
null
-
paramName
Description copied from interface:XQFunctionExprName of the parameter at the given position.- Specified by:
paramNamein interfaceXQFunctionExpr- Parameters:
pos- position of the parameter- Returns:
- name of the parameter
-
funcType
Description copied from class:ExprReturns the function type of this expression.- Specified by:
funcTypein interfaceXQFunctionExpr- Overrides:
funcTypein classExpr- Returns:
- function type, or
nullif expression yields no functions
-
annotations
Description copied from interface:XQFunctionExprAnnotations of this function.- Specified by:
annotationsin interfaceXQFunctionExpr- Returns:
- this function's annotations
-
comp
Description copied from interface:ScopeCompiles the expression contained in this scope.- Specified by:
compin interfaceScope- Parameters:
cc- compilation context- Throws:
QueryException- compilation errors
-
compile
Description copied from class:ExprCompiles and optimizes the expression, assigns types and cardinalities.- Overrides:
compilein classSingle- Parameters:
cc- compilation context- Returns:
- optimized expression
- Throws:
QueryException- query exception
-
optimize
Description copied from class:ExprOptimizes an already compiled expression without recompiling its sub-expressions.- Overrides:
optimizein classSingle- Parameters:
cc- compilation context- Returns:
- optimized expression
- Throws:
QueryException- query exception
-
count
Description copied from class:ExprChecks how often a variable or context reference is used in this expression. This function is called by:-
optimize(org.basex.query.CompileContext) -
GFLWOR.inlineForLet(org.basex.query.CompileContext) -
GFLWOR.optimizePos(org.basex.query.CompileContext) -
GFLWOR.simplify(org.basex.query.CompileContext) -
GFLWOR.unusedVars(org.basex.query.CompileContext) -
SimpleMap.optimize(org.basex.query.CompileContext) -
TypeswitchGroup.optimize(org.basex.query.CompileContext)
-
-
inline
Description copied from class:ExprInlines an expression into this one, replacing all variable or context references. This function is called byInlineContext.inline(Expr)(see invocations of this functions for further inlinings). The variable reference is replaced in: The context is replaced in:- Overrides:
inlinein classSingle- Parameters:
ic- inlining context- Returns:
- resulting expression if something has changed,
nullotherwise - Throws:
QueryException- query exception
-
copy
Description copied from class:ExprCopies an expression. Used for inlining functions, or for copying static queries. It is utilized byVarRef.inline(org.basex.query.InlineContext),FuncItem.inline(org.basex.query.expr.Expr[], org.basex.query.CompileContext),inline(org.basex.query.InlineContext)andStaticFunc.inline(org.basex.query.expr.Expr[], org.basex.query.CompileContext).- Specified by:
copyin classExpr- Parameters:
cc- compilation contextvm- mapping from old variable IDs to new variable copies. Required bycopy(org.basex.query.CompileContext, org.basex.util.hash.IntObjMap<org.basex.query.var.Var>)andVarRef.copy(org.basex.query.CompileContext, org.basex.util.hash.IntObjMap<org.basex.query.var.Var>)- Returns:
- copied expression
-
inline
Description copied from interface:XQFunctionExprTries to inline this function with the given arguments.- Specified by:
inlinein interfaceXQFunctionExpr- Parameters:
exprs- argumentscc- compilation context- Returns:
- the expression to inline if successful,
nullotherwise - Throws:
QueryException- query exception
-
item
Description copied from class:ExprEvaluates the expression and returns the resulting item, orEmpty.VALUEif the expression yields an empty sequence. If this method is not implemented,Expr.value(QueryContext)must be implemented instead.- Overrides:
itemin classParseExpr- Parameters:
qc- query contextii- input info (only required bySeqinstances, which have no input info)- Returns:
- item or
Empty.VALUE - Throws:
QueryException- query exception
-
has
Description copied from class:ExprIndicates if an expression has one of the specified compiler properties. This method must only be called at compile time. It is invoked to test properties of sub-expressions. It returnstrueif at least flag matches an expression. -
inlineable
Description copied from class:ExprChecks if inlining is possible. This function is called byInlineContext.inlineable(org.basex.query.expr.Expr...)and:CNode.inlineable(org.basex.query.InlineContext)returns false if the new expression construct new nodes. The following tests might reject inlining if the expression is a context reference:- Overrides:
inlineablein classSingle- Parameters:
ic- inlining context- Returns:
- result of check
-
visit
Description copied from interface:ScopeTraverses this scope with the givenASTVisitor. -
checkUp
Description copied from class:ExprChecks if the updating semantics are satisfied. This function is only called if any updating expression was found in the query.- Overrides:
checkUpin classSingle- Throws:
QueryException- query exception
-
vacuous
public boolean vacuous()Description copied from class:ExprTests if this is a vacuous expression (empty sequence or error function). This check is needed for updating queries. -
vacuousBody
public boolean vacuousBody()Description copied from interface:XQFunctionExprChecks if this function returns vacuous results (seeExpr.vacuous()).- Specified by:
vacuousBodyin interfaceXQFunctionExpr- Returns:
- result of check
-
accept
Description copied from class:ExprTraverses this expression, notifying the visitor of declared and used variables, and checking the tree for other recursive properties. -
exprSize
public int exprSize()Description copied from class:ExprCounts the number of expressions in this expression's sub-tree. This method is e.g. called byStaticFunc.inline(org.basex.query.expr.Expr[], org.basex.query.CompileContext)to check if an expression is small enough to be inlined. -
compiled
public boolean compiled()Description copied from interface:ScopeChecks if this scope has already been compiled. -
globalBindings
Returns an iterator over the non-local bindings of this closure.- Returns:
- the iterator
-
undeclaredLiteral
public static Closure undeclaredLiteral(QNm name, int arity, QueryContext qc, StaticContext sc, InputInfo ii) throws QueryException Creates a function literal for a function that was not yet encountered while parsing.- Parameters:
name- function namearity- function arityqc- query contextsc- static contextii- input info- Returns:
- function literal
- Throws:
QueryException- query exception
-
equals
Description copied from class:SingleThis function is e.g. called by:Must be overwritten by implementing class.If.optimize(CompileContext),Switch.optimize(CompileContext),Typeswitch.optimize(CompileContext), in order to discard identical expressions.CmpR.mergeEbv(Expr, boolean, CompileContext)orCmpSR.mergeEbv(Expr, boolean, CompileContext), in order to merge expressions with identical input.CmpG.optimize(CompileContext)orCmpV.optimize(CompileContext), in order to pre-evaluate equality tests.CmpG.optimize(CompileContext)orPos.get(Expr, CmpV.OpV, InputInfo, CompileContext), in order to compare the start and end value.PathCache, in order to find identical root values at runtime.
-
plan
Description copied from class:ExprInfoCreates a query plan. -
plan
Description copied from class:ExprInfoCreates a query string.
-