|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectlux.xpath.ExpressionVisitor
lux.xpath.ExpressionVisitorBase
lux.compiler.PathOptimizer
public class PathOptimizer
Prepares an XPath expression tree for indexed execution against a Lux data store. This class is part of the Lux internal API and is not intended to be called by consumers of the API. The general strategy here is to consider each expression in isolation, determining whether it imposes any restriction on its context, and then to compose such constraints into queries, to be executed by a searcher, with the XPath/XQuery expressions evaluated against the resulting documents. Absolute expressions are targets for optimization; the optimizer attempts to form queries that retrieve the smallest possible subset of available documents for which the expression generates a non-empty result sequence. The queries for these sub-expressions are composed according to the semantics of the combining expressions and functions. Absolute sequences (occurrences of /) generally are not composed together - they form independent subqueries. When optimizing for path indexes, we attempt to compute the "vertical" or node distances between adjacent sub-expressions. Child path steps introduce a zero distance when there is a named step on either side; wildcard child steps introduce a distance of one, and descendant (or ancestor?) steps count as infinite distance, although order is preserved.
| Constructor Summary | |
|---|---|
PathOptimizer(IndexConfiguration indexConfig)
|
|
| Method Summary | |
|---|---|
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 argument's 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. |
| Methods inherited from class lux.xpath.ExpressionVisitorBase |
|---|
visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visitSubs |
| Methods inherited from class lux.xpath.ExpressionVisitor |
|---|
isDone, isReverse, setReverse |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
|---|
public PathOptimizer(IndexConfiguration indexConfig)
| Method Detail |
|---|
public XQuery optimize(XQuery query)
optimize(AbstractExpression).
query - the query to optimize
public AbstractExpression optimize(AbstractExpression expr)
expr - the expression to optimize
public 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 optimize
public AbstractExpression visit(Dot dot)
visit in class ExpressionVisitorBasepublic AbstractExpression visit(BinaryOperation op)
visit in class ExpressionVisitorBase
public 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)
ExpressionVisitorBase
visitDefault in class ExpressionVisitorBaseexpr - an expression to visit
public 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)
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||