Class RecordQueryUnionPlan
- java.lang.Object
-
- com.apple.foundationdb.record.query.plan.plans.RecordQueryUnionPlanBase
-
- com.apple.foundationdb.record.query.plan.plans.RecordQueryUnionPlan
-
- All Implemented Interfaces:
PlanHashable
,QueryPlan<FDBQueriedRecord<Message>>
,RecordQueryPlan
,RecordQueryPlanWithChildren
,RecordQueryPlanWithRequiredFields
,Bindable
,Correlated<RelationalExpression>
,PlannerGraphRewritable
,RelationalExpressionWithChildren
,RelationalExpression
@API(INTERNAL) public class RecordQueryUnionPlan extends RecordQueryUnionPlanBase implements RecordQueryPlanWithRequiredFields
A query plan that executes by taking the union of records from two or more compatibly-sorted child plans. To work, each child cursor must order its children the same way according to the comparison key.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface com.apple.foundationdb.record.query.plan.temp.Correlated
Correlated.BoundEquivalence
-
Nested classes/interfaces inherited from interface com.apple.foundationdb.record.PlanHashable
PlanHashable.PlanHashKind
-
Nested classes/interfaces inherited from interface com.apple.foundationdb.record.query.plan.temp.RelationalExpression
RelationalExpression.CombineFunction<R,S>, RelationalExpression.CombinePredicate
-
-
Field Summary
Fields Modifier and Type Field Description static org.slf4j.Logger
LOGGER
-
Fields inherited from class com.apple.foundationdb.record.query.plan.plans.RecordQueryUnionPlanBase
UNION
-
Fields inherited from interface com.apple.foundationdb.record.query.plan.plans.QueryPlan
UNKNOWN_MAX_CARDINALITY
-
-
Constructor Summary
Constructors Constructor Description RecordQueryUnionPlan(RecordQueryPlan left, RecordQueryPlan right, KeyExpression comparisonKey, boolean reverse, boolean showComparisonKey)
Deprecated.RecordQueryUnionPlan(List<RecordQueryPlan> children, KeyExpression comparisonKey, boolean reverse, boolean showComparisonKey)
Deprecated.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
equalsWithoutChildren(RelationalExpression otherExpression, AliasMap equivalencesMap)
static RecordQueryUnionPlan
from(RecordQueryPlan left, RecordQueryPlan right, KeyExpression comparisonKey, boolean showComparisonKey)
Construct a new union of two compatibly-ordered plans.static RecordQueryUnionPlan
from(List<RecordQueryPlan> children, KeyExpression comparisonKey, boolean showComparisonKey)
Construct a new union of two or more compatibly-ordered plans.KeyExpression
getComparisonKey()
Set<CorrelationIdentifier>
getCorrelatedToWithoutChildren()
Set<KeyExpression>
getRequiredFields()
int
hashCodeWithoutChildren()
int
planHash(PlanHashable.PlanHashKind hashKind)
Return a hash similar tohashCode
, but with the additional guarantee that is is stable across JVMs.RecordQueryUnionPlan
rebaseWithRebasedQuantifiers(AliasMap translationMap, List<Quantifier> rebasedQuantifiers)
PlannerGraph
rewritePlannerGraph(List<? extends PlannerGraph> childGraphs)
Method to rewrite the planner graph.RecordQueryUnionPlan
withChildren(List<RecordQueryPlan> newChildren)
-
Methods inherited from class com.apple.foundationdb.record.query.plan.plans.RecordQueryUnionPlanBase
basePlanHash, equals, execute, getAvailableFields, getChildren, getComplexity, getQuantifiers, getRelationalChildCount, hashCode, isReverse, logPlanStructure, toString
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface com.apple.foundationdb.record.PlanHashable
planHash
-
Methods inherited from interface com.apple.foundationdb.record.query.plan.plans.QueryPlan
execute, execute, getComplexity, isReverse, logPlanStructure, maxCardinality
-
Methods inherited from interface com.apple.foundationdb.record.query.plan.plans.RecordQueryPlan
accept, execute, execute, execute, execute, getAvailableFields, getChildren, getQueryPlanChildren, structuralEquals, structuralEquals, structuralHashCode
-
Methods inherited from interface com.apple.foundationdb.record.query.plan.plans.RecordQueryPlanWithChildren
getUsedIndexes, hasFullRecordScan, hasIndexScan, hasLoadBykeys, hasRecordScan
-
Methods inherited from interface com.apple.foundationdb.record.query.plan.temp.RelationalExpression
acceptPropertyVisitor, adjustMatch, bindIdentities, bindTo, canCorrelate, compensate, enumerateUnboundCorrelatedTo, exactlySubsumedBy, findMatches, getQuantifiers, getResultValues, hasIncompatibleBoundQuantifiers, hasUnboundQuantifiers, match, match, semanticEquals, semanticEquals, semanticHashCode, show, subsumedBy
-
Methods inherited from interface com.apple.foundationdb.record.query.plan.temp.expressions.RelationalExpressionWithChildren
getCorrelatedTo, rebase
-
-
-
-
Constructor Detail
-
RecordQueryUnionPlan
@Deprecated public RecordQueryUnionPlan(@Nonnull RecordQueryPlan left, @Nonnull RecordQueryPlan right, @Nonnull KeyExpression comparisonKey, boolean reverse, boolean showComparisonKey)
Deprecated.Construct a new union of two compatibly-ordered plans. This constructor has been deprecated in favor of the static initializerfrom(RecordQueryPlan, RecordQueryPlan, KeyExpression, boolean)
.- Parameters:
left
- the first plan to unionright
- the second plan to unioncomparisonKey
- a key expression by which the results of both plans are orderedreverse
- whether both plans return results in reverse (i.e., descending) order by the comparison keyshowComparisonKey
- whether the comparison key should be included in string representations of the plan
-
RecordQueryUnionPlan
@Deprecated public RecordQueryUnionPlan(@Nonnull List<RecordQueryPlan> children, @Nonnull KeyExpression comparisonKey, boolean reverse, boolean showComparisonKey)
Deprecated.Construct a union of two or more compatibly-ordered plans. This constructor has been deprecated in favor of the static initializerfrom(List, KeyExpression, boolean)
.- Parameters:
children
- the list of compatibly-ordered plans to take the union ofcomparisonKey
- a key expression by which the results of all plans are orderedreverse
- whether all plans return results in reverse (i.e., descending) order by the comparison keyshowComparisonKey
- whether the comparison key should be included in string representations of the plan
-
-
Method Detail
-
getComparisonKey
@Nonnull public KeyExpression getComparisonKey()
-
getRequiredFields
@Nonnull public Set<KeyExpression> getRequiredFields()
- Specified by:
getRequiredFields
in interfaceRecordQueryPlanWithRequiredFields
-
getCorrelatedToWithoutChildren
@Nonnull public Set<CorrelationIdentifier> getCorrelatedToWithoutChildren()
- Specified by:
getCorrelatedToWithoutChildren
in interfaceRelationalExpressionWithChildren
-
rebaseWithRebasedQuantifiers
@Nonnull public RecordQueryUnionPlan rebaseWithRebasedQuantifiers(@Nonnull AliasMap translationMap, @Nonnull List<Quantifier> rebasedQuantifiers)
- Specified by:
rebaseWithRebasedQuantifiers
in interfaceRelationalExpressionWithChildren
-
equalsWithoutChildren
public boolean equalsWithoutChildren(@Nonnull RelationalExpression otherExpression, @Nonnull AliasMap equivalencesMap)
- Specified by:
equalsWithoutChildren
in interfaceRelationalExpression
- Overrides:
equalsWithoutChildren
in classRecordQueryUnionPlanBase
-
hashCodeWithoutChildren
public int hashCodeWithoutChildren()
- Specified by:
hashCodeWithoutChildren
in interfaceRelationalExpression
- Overrides:
hashCodeWithoutChildren
in classRecordQueryUnionPlanBase
-
planHash
public int planHash(@Nonnull PlanHashable.PlanHashKind hashKind)
Description copied from interface:PlanHashable
Return a hash similar tohashCode
, but with the additional guarantee that is is stable across JVMs.- Specified by:
planHash
in interfacePlanHashable
- Parameters:
hashKind
- the "kind" of hash to calculate. Each kind of hash has a particular logic with regards to included and excluded items.- Returns:
- a stable hash code
-
from
@Nonnull public static RecordQueryUnionPlan from(@Nonnull RecordQueryPlan left, @Nonnull RecordQueryPlan right, @Nonnull KeyExpression comparisonKey, boolean showComparisonKey)
Construct a new union of two compatibly-ordered plans. The resulting plan will return all results that are returned by either theleft
orright
child plans. Each plan should return results in the same order according to the providedcomparisonKey
. The two children should also either both return results in forward order, or they should both return results in reverse order. (That is,left.isReverse()
should equalright.isReverse()
.)- Parameters:
left
- the first plan to unionright
- the second plan to unioncomparisonKey
- a key expression by which the results of both plans are orderedshowComparisonKey
- whether the comparison key should be included in string representations of the plan- Returns:
- a new plan that will return the union of all results from both child plans
-
from
@Nonnull public static RecordQueryUnionPlan from(@Nonnull List<RecordQueryPlan> children, @Nonnull KeyExpression comparisonKey, boolean showComparisonKey)
Construct a new union of two or more compatibly-ordered plans. The resulting plan will return all results that are returned by any of the child plans. Each plan should return results in the same order according to the providedcomparisonKey
. The children should also either all return results in forward order, or they should all return results in reverse order. (That is,QueryPlan.isReverse()
should return the same value for each child.)- Parameters:
children
- the list of plans to take the union ofcomparisonKey
- a key expression by which the results of both plans are orderedshowComparisonKey
- whether the comparison key should be included in string representations of the plan- Returns:
- a new plan that will return the union of all results from all child plans
-
withChildren
@Nonnull public RecordQueryUnionPlan withChildren(@Nonnull List<RecordQueryPlan> newChildren)
- Specified by:
withChildren
in classRecordQueryUnionPlanBase
-
rewritePlannerGraph
@Nonnull public PlannerGraph rewritePlannerGraph(@Nonnull List<? extends PlannerGraph> childGraphs)
Description copied from interface:PlannerGraphRewritable
Method to rewrite the planner graph.- Specified by:
rewritePlannerGraph
in interfacePlannerGraphRewritable
- Parameters:
childGraphs
- planner graphs of children expression that already have been computed- Returns:
- a new planner graph that can combine the
childGraph
s in a meaningful way. Note that there is no obligation to use thechildGraph
s at all, this method can create a new independent planner graph completely from scratch.
-
-