Class ExpressionRefTraversal
- java.lang.Object
-
- com.apple.foundationdb.record.query.plan.temp.ExpressionRefTraversal
-
@API(EXPERIMENTAL) public class ExpressionRefTraversal extends Object
Utility class to provide a graph view of a expression reference DAG given by a root expression reference (to aRelationalExpression
that allows to perform traversal operations that are normally not possible on instances ofExpressionRef
such asgetLeafReferences()
andgetParentRefs(com.apple.foundationdb.record.query.plan.temp.ExpressionRef<? extends com.apple.foundationdb.record.query.plan.temp.RelationalExpression>)
. The implementation of this class assumes that the original DAG is not mutated after the traversal is created. If the underlying DAG is mutated against assumptions, the semantics of this class is defined in a way that calls to graph-backed methods return data as if the mutation hadn't occurred while references that are being returned as part of the result of method calls naturally reflect any mutations that have occurred.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ExpressionRefTraversal.ReferencePath
Case class to hold information about the path from an expression to another expression reference.
-
Method Summary
-
-
-
Method Detail
-
getRootReference
@Nonnull public ExpressionRef<? extends RelationalExpression> getRootReference()
-
getRefs
@Nonnull public Set<ExpressionRef<? extends RelationalExpression>> getRefs()
-
getLeafReferences
@Nonnull public Set<ExpressionRef<? extends RelationalExpression>> getLeafReferences()
-
getRefsContaining
public Set<ExpressionRef<? extends RelationalExpression>> getRefsContaining(RelationalExpression expression)
Returns all references containing the expression passed in.- Parameters:
expression
- the expression- Returns:
- a set of expression references containing
expression
-
getParentRefs
@Nonnull public Set<ExpressionRef<? extends RelationalExpression>> getParentRefs(@Nonnull ExpressionRef<? extends RelationalExpression> reference)
Return all expression references that contain a path fromparent -> expression -> quantifier -> this reference
- Parameters:
reference
- reference- Returns:
- the set of references that are considered parents of this reference.
-
getParentExpressions
@Nonnull public Set<RelationalExpression> getParentExpressions(@Nonnull ExpressionRef<? extends RelationalExpression> reference)
Return all expressions (asRelationalExpression
s) that refer to this expression reference- Parameters:
reference
- reference- Returns:
- the set of expressions (as identity-based set) that are considered parents of this reference.
-
getParentRefPaths
@Nonnull public Set<ExpressionRefTraversal.ReferencePath> getParentRefPaths(@Nonnull ExpressionRef<? extends RelationalExpression> reference)
Return all expressions (asRelationalExpression
s) that refer to this expression reference- Parameters:
reference
- reference to return the parent reference paths for- Returns:
- the set of expressions that are considered parents of this reference.
-
forEachParentExpression
public void forEachParentExpression(@Nonnull ExpressionRef<? extends RelationalExpression> reference, @Nonnull BiConsumer<ExpressionRef<? extends RelationalExpression>,RelationalExpression> biConsumer)
-
addExpression
public void addExpression(ExpressionRef<? extends RelationalExpression> reference, RelationalExpression expression)
-
withRoot
public static ExpressionRefTraversal withRoot(ExpressionRef<? extends RelationalExpression> rootRef)
Construct a traversal object using therootRef
reference passed in.- Parameters:
rootRef
- the reference acting as the root for this traversal object- Returns:
- a new traversal object
-
-