Class RecordQueryInJoinPlan
- java.lang.Object
-
- com.apple.foundationdb.record.query.plan.plans.RecordQueryInJoinPlan
-
- All Implemented Interfaces:
PlanHashable
,QueryPlan<FDBQueriedRecord<Message>>
,RecordQueryPlan
,RecordQueryPlanWithChild
,RecordQueryPlanWithChildren
,Bindable
,Correlated<RelationalExpression>
,PlannerGraphRewritable
,RelationalExpressionWithChildren
,RelationalExpression
- Direct Known Subclasses:
RecordQueryInParameterJoinPlan
,RecordQueryInValuesJoinPlan
@API(INTERNAL) public abstract class RecordQueryInJoinPlan extends Object implements RecordQueryPlanWithChild
A query plan that executes a child plan once for each of the elements of someIN
list.
-
-
Nested Class Summary
-
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 protected String
bindingName
protected Quantifier.Physical
inner
protected boolean
sortReverse
protected boolean
sortValuesNeeded
protected static Comparator<Object>
VALUE_COMPARATOR
-
Fields inherited from interface com.apple.foundationdb.record.query.plan.plans.QueryPlan
UNKNOWN_MAX_CARDINALITY
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
RecordQueryInJoinPlan(Quantifier.Physical inner, String bindingName, boolean sortValuesNeeded, boolean sortReverse)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected int
basePlanHash(PlanHashable.PlanHashKind hashKind, ObjectPlanHash baseHash, Object... hashables)
Base implementation ofPlanHashable.planHash(com.apple.foundationdb.record.PlanHashable.PlanHashKind)
.boolean
equals(Object other)
boolean
equalsWithoutChildren(RelationalExpression otherExpression, AliasMap equivalencesMap)
<M extends Message>
RecordCursor<FDBQueriedRecord<M>>execute(FDBRecordStoreBase<M> store, EvaluationContext context, byte[] continuation, ExecuteProperties executeProperties)
Execute this query plan.RecordQueryPlan
getChild()
int
getComplexity()
Returns an integer representing the "complexity" of the generated plan.RecordQueryPlan
getInnerPlan()
List<? extends Quantifier>
getQuantifiers()
Return an iterator of references to the children of this planner expression.protected abstract List<Object>
getValues(EvaluationContext context)
int
hashCode()
int
hashCodeWithoutChildren()
boolean
isReverse()
Indicates whether this plan will return values in "reverse" order from the natural order of results of this plan.boolean
isSorted()
protected List<Object>
sortValues(List<Object> values)
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface com.apple.foundationdb.record.PlanHashable
planHash, planHash
-
Methods inherited from interface com.apple.foundationdb.record.query.plan.temp.explain.PlannerGraphRewritable
rewritePlannerGraph
-
Methods inherited from interface com.apple.foundationdb.record.query.plan.plans.QueryPlan
execute, execute, logPlanStructure
-
Methods inherited from interface com.apple.foundationdb.record.query.plan.plans.RecordQueryPlan
accept, execute, execute, execute, getQueryPlanChildren, structuralEquals, structuralEquals, structuralHashCode
-
Methods inherited from interface com.apple.foundationdb.record.query.plan.plans.RecordQueryPlanWithChild
getAvailableFields, getChildren, getRelationalChildCount, getUsedIndexes, hasFullRecordScan, hasIndexScan, hasLoadBykeys, hasRecordScan, maxCardinality
-
Methods inherited from interface com.apple.foundationdb.record.query.plan.temp.RelationalExpression
acceptPropertyVisitor, bindIdentities, bindTo, canCorrelate, enumerateUnboundCorrelatedTo, findMatches, match, semanticEquals, semanticEquals, semanticHashCode, show
-
Methods inherited from interface com.apple.foundationdb.record.query.plan.temp.expressions.RelationalExpressionWithChildren
getCorrelatedTo, getCorrelatedToWithoutChildren, rebase, rebaseWithRebasedQuantifiers
-
-
-
-
Field Detail
-
VALUE_COMPARATOR
protected static final Comparator<Object> VALUE_COMPARATOR
-
inner
@Nonnull protected final Quantifier.Physical inner
-
sortValuesNeeded
protected final boolean sortValuesNeeded
-
sortReverse
protected final boolean sortReverse
-
-
Constructor Detail
-
RecordQueryInJoinPlan
protected RecordQueryInJoinPlan(@Nonnull Quantifier.Physical inner, @Nonnull String bindingName, boolean sortValuesNeeded, boolean sortReverse)
-
-
Method Detail
-
execute
@Nonnull public <M extends Message> RecordCursor<FDBQueriedRecord<M>> execute(@Nonnull FDBRecordStoreBase<M> store, @Nonnull EvaluationContext context, @Nullable byte[] continuation, @Nonnull ExecuteProperties executeProperties)
Description copied from interface:RecordQueryPlan
Execute this query plan.- Specified by:
execute
in interfaceRecordQueryPlan
- Type Parameters:
M
- type used to represent stored records- Parameters:
store
- record store from which to fetch recordscontext
- evaluation context containing parameter bindingscontinuation
- continuation from a previous execution of this same planexecuteProperties
- limits on execution- Returns:
- a cursor of records that match the query criteria
-
getInnerPlan
@Nonnull public RecordQueryPlan getInnerPlan()
-
getChild
@Nonnull public RecordQueryPlan getChild()
- Specified by:
getChild
in interfaceRecordQueryPlanWithChild
-
isSorted
public boolean isSorted()
-
getQuantifiers
@Nonnull public List<? extends Quantifier> getQuantifiers()
Description copied from interface:RelationalExpression
Return an iterator of references to the children of this planner expression. The iterators returned by different calls are guaranteed to be independent (i.e., advancing one will not advance another). However, they might point to the same object, as whenCollections.emptyIterator()
is returned. The returned iterator should be treated as an immutable object and may throw an exception ifIterator.remove()
is called. The iterator must return its elements in a consistent order.- Specified by:
getQuantifiers
in interfaceRelationalExpression
- Returns:
- an iterator of references to the children of this planner expression
-
isReverse
public boolean isReverse()
Description copied from interface:QueryPlan
Indicates whether this plan will return values in "reverse" order from the natural order of results of this plan. The return value istrue
if the plan returns elements in descending order andfalse
if the elements are returned in ascending order.- Specified by:
isReverse
in interfaceQueryPlan<FDBQueriedRecord<Message>>
- Returns:
true
if this plan returns elements in reverse order
-
equalsWithoutChildren
public boolean equalsWithoutChildren(@Nonnull RelationalExpression otherExpression, @Nonnull AliasMap equivalencesMap)
- Specified by:
equalsWithoutChildren
in interfaceRelationalExpression
-
hashCodeWithoutChildren
public int hashCodeWithoutChildren()
- Specified by:
hashCodeWithoutChildren
in interfaceRelationalExpression
-
basePlanHash
protected int basePlanHash(@Nonnull PlanHashable.PlanHashKind hashKind, ObjectPlanHash baseHash, Object... hashables)
Base implementation ofPlanHashable.planHash(com.apple.foundationdb.record.PlanHashable.PlanHashKind)
. This implementation makes each concrete subclass implement its own version ofPlanHashable.planHash(com.apple.foundationdb.record.PlanHashable.PlanHashKind)
so that they are guided to add their own class modifier (SeeObjectPlanHash
). This implementation is meant to give subclasses common functionality for their own implementation.- Parameters:
hashKind
- the plan hash kind to usebaseHash
- the subclass' base hash (concrete identifier)hashables
- the rest of the subclass' hashable parameters (if any)- Returns:
- the plan hash value calculated
-
getValues
@Nullable protected abstract List<Object> getValues(EvaluationContext context)
-
getComplexity
public int getComplexity()
Description copied from interface:QueryPlan
Returns an integer representing the "complexity" of the generated plan. Currently, this should simply be the number of plans in the plan tree with this plan as the root (i.e. the number of descendants of this plan, including itself).- Specified by:
getComplexity
in interfaceQueryPlan<FDBQueriedRecord<Message>>
- Returns:
- the complexity of this plan
-
-