public class PathOptimizer extends ExpressionVisitorBase
| Constructor and Description |
|---|
PathOptimizer(Compiler compiler) |
| Modifier and Type | Method and Description |
|---|---|
AbstractExpression |
getBoundExpression(QName name) |
boolean |
isOptimizedForOrderedResults() |
static ParseableQuery |
makeAttributeValueQuery(QName qname,
String value,
IndexConfiguration config) |
static NodeTextQuery |
makeElementValueQuery(QName qname,
String value,
IndexConfiguration config) |
static ParseableQuery |
makeTextQuery(String value,
IndexConfiguration config) |
AbstractExpression |
optimize(AbstractExpression expr)
Prepares an XQuery expression for indexed execution against a Lux data
store.
|
XQuery |
optimize(XQuery query)
Prepares an XQuery module for indexed execution against a Lux data store.
|
XPathQuery |
peek() |
void |
setSearchStrategy(Compiler.SearchStrategy searchStrategy) |
AbstractExpression |
visit(BinaryOperation op) |
AbstractExpression |
visit(Dot dot) |
AbstractExpression |
visit(FLWOR flwor)
Optimizing FLWOR expressions is more complicated than path expressions
and other simpler XPath expressions because the relationship among the
clauses is not a simple dependency, but is mediated by variables.
|
ForClause |
visit(ForClause forClause) |
AbstractExpression |
visit(FunCall funcall)
If a function F is emptiness-preserving, in other words F(a,b,c...) is
empty ( =()) if *any* of its arguments are empty, and is non-empty if
*all* of its arguments are non-empty, then its arguments' queries can be
combined with Occur.MUST.
|
LetClause |
visit(LetClause letClause) |
AbstractExpression |
visit(LiteralExpression literal) |
OrderByClause |
visit(OrderByClause orderByClause) |
AbstractExpression |
visit(PathExpression pathExpr)
Conjoin the queries for the two expressions joined by the path.
|
AbstractExpression |
visit(PathStep step) |
AbstractExpression |
visit(Predicate predicate) |
AbstractExpression |
visit(Root expr) |
AbstractExpression |
visit(Sequence sequence) |
AbstractExpression |
visit(Subsequence subsequence) |
AbstractExpression |
visit(Variable variable) |
WhereClause |
visit(WhereClause whereClause) |
AbstractExpression |
visitDefault(AbstractExpression expr)
This method is called by every visit() method in this class.
|
visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visitSubsisDone, isReverse, setReversepublic PathOptimizer(Compiler compiler)
public XQuery optimize(XQuery query)
optimize(AbstractExpression).query - the query to optimizepublic AbstractExpression optimize(AbstractExpression expr)
expr - the expression to optimizepublic XPathQuery peek()
public AbstractExpression visit(Root expr)
visit in class ExpressionVisitorBasepublic AbstractExpression visit(PathExpression pathExpr)
visit in class ExpressionVisitorBasepublic AbstractExpression visit(Predicate predicate)
visit in class ExpressionVisitorBasepublic AbstractExpression visit(PathStep step)
visit in class ExpressionVisitorBasepublic AbstractExpression visit(FunCall funcall)
visit in class ExpressionVisitorBasefuncall - the function call expression to optimizepublic AbstractExpression visit(Dot dot)
visit in class ExpressionVisitorBasepublic AbstractExpression visit(BinaryOperation op)
visit in class ExpressionVisitorBasepublic static NodeTextQuery makeElementValueQuery(QName qname, String value, IndexConfiguration config)
public static ParseableQuery makeAttributeValueQuery(QName qname, String value, IndexConfiguration config)
public static ParseableQuery makeTextQuery(String value, IndexConfiguration config)
public AbstractExpression visit(LiteralExpression literal)
visit in class ExpressionVisitorBasepublic AbstractExpression visit(Variable variable)
visit in class ExpressionVisitorBasepublic AbstractExpression visit(Subsequence subsequence)
visit in class ExpressionVisitorBasepublic AbstractExpression visit(Sequence sequence)
visit in class ExpressionVisitorBasepublic AbstractExpression visitDefault(AbstractExpression expr)
ExpressionVisitorBasevisitDefault in class ExpressionVisitorBaseexpr - an expression to visitpublic AbstractExpression visit(FLWOR flwor)
Optimizing FLWOR expressions is more complicated than path expressions and other simpler XPath expressions because the relationship among the clauses is not a simple dependency, but is mediated by variables.
The strategy is to use constraints from each clause and its dependent for, where and return clauses to filter that clause's sequence. Dependent let and order by clauses are not considered when filtering enclosing clauses. Order by clauses *do* contribute to ordering relations in their enclosing for clause and may be folded together with them when searchable.
Additionally, constraints may come in via variable references, but this is not handled explicitly as part of the FLWOR optimization; rather it is handled in the visit method for each clause.
visit in class ExpressionVisitorBasepublic OrderByClause visit(OrderByClause orderByClause)
visit in class ExpressionVisitorBasepublic ForClause visit(ForClause forClause)
visit in class ExpressionVisitorBasepublic WhereClause visit(WhereClause whereClause)
visit in class ExpressionVisitorBasepublic LetClause visit(LetClause letClause)
visit in class ExpressionVisitorBasepublic AbstractExpression getBoundExpression(QName name)
public boolean isOptimizedForOrderedResults()
public void setSearchStrategy(Compiler.SearchStrategy searchStrategy)
Copyright © 2013. All Rights Reserved.