Class VersionElement
- java.lang.Object
-
- com.apple.foundationdb.record.query.plan.temp.view.VersionElement
-
- All Implemented Interfaces:
PlanHashable
,Element
public class VersionElement extends Object implements Element
AnElement
representing a serialized versionstamp in a query or index entry. Since versions are associated with individual index entries rather than records per se, a version element does not have a source.
-
-
Constructor Summary
Constructors Constructor Description VersionElement()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Object
eval(SourceEntry sourceEntry)
Evaluate this element with respect to the given source entry, producing an object that can be interpreted by aComparisons.Comparison
.Set<Source>
getAncestralSources()
Get the set of all sources for this element, including all ancestors of this element's sources.Optional<ViewExpressionComparisons>
matchSourcesWith(ViewExpressionComparisons viewExpressionComparisons, Element element)
Determine whether this element is the same as the givenElement
when unused sources are combined with each other.Optional<ComparisonRange>
matchWith(ComparisonRange existingComparisons, ElementPredicate predicate)
Determine whether this element can be used to satisfy the givenElementPredicate
, under the assumption that this element is already being used to satisfy the givenComparisonRange
.int
planHash()
Return a hash similar tohashCode
, but with the additional guarantee that is is stable across JVMs.Element
withSourceMappedInto(Source originalSource, Source duplicateSource)
Replace the given duplicate source with the given original source everywhere that it occurs in this element, including in ancestor sources of this element's source.
-
-
-
Method Detail
-
matchWith
@Nonnull public Optional<ComparisonRange> matchWith(@Nonnull ComparisonRange existingComparisons, @Nonnull ElementPredicate predicate)
Description copied from interface:Element
Determine whether this element can be used to satisfy the givenElementPredicate
, under the assumption that this element is already being used to satisfy the givenComparisonRange
. Note that this method relies on strict comparisons between elements, i.e., the sources must be reference-equal to each other.- Specified by:
matchWith
in interfaceElement
- Parameters:
existingComparisons
- a range of existing comparisons that the planner is using this element to supportpredicate
- an element predicate to match with this element and the given comparison range- Returns:
- a new comparison range incorporating the predicate's comparison if the match was successful,
Optional.empty()
otherwise
-
matchSourcesWith
@Nonnull public Optional<ViewExpressionComparisons> matchSourcesWith(@Nonnull ViewExpressionComparisons viewExpressionComparisons, @Nonnull Element element)
Description copied from interface:Element
Determine whether this element is the same as the givenElement
when unused sources are combined with each other. Sources are determined to be used or unused based on their usage in the givenViewExpressionComparisons
. A source is used if any element using that source has a comparison already matched to it; otherwise, it is unused. If an available match is found, produce a version of the givenViewExpressionComparisons
with all instances of this element's source replaced with the given element's source.This method makes it possible to match
ElementPredicate
s generated by normalizing aQueryComponent
with those generated by normalizing aKeyExpression
. These normalization processes are decoupled so the sources for each will not match in general; therefore,Element.matchWith(ComparisonRange, ElementPredicate)
will fail to notice when an index defined by aKeyExpression
can support a predicate.- Specified by:
matchSourcesWith
in interfaceElement
- Parameters:
viewExpressionComparisons
- view expression comparisons that determine which sources are used and unusedelement
- an element to compare with this one and look for matches made through combining sources- Returns:
- a new view expression comparisons with instances of this element's source replaced with the given element's
if a match is found,
Optional.empty()
otherwise
-
getAncestralSources
@Nonnull public Set<Source> getAncestralSources()
Description copied from interface:Element
Get the set of all sources for this element, including all ancestors of this element's sources.- Specified by:
getAncestralSources
in interfaceElement
- Returns:
- a set of the sources of all (inclusive) ancestors of this element's sources
-
withSourceMappedInto
@Nonnull public Element withSourceMappedInto(@Nonnull Source originalSource, @Nonnull Source duplicateSource)
Description copied from interface:Element
Replace the given duplicate source with the given original source everywhere that it occurs in this element, including in ancestor sources of this element's source.- Specified by:
withSourceMappedInto
in interfaceElement
- Parameters:
originalSource
- a source to replace all occurrences of the duplicate source withduplicateSource
- a source to replace with the original source- Returns:
- a copy of this element with all occurrences of the duplicate source replaced with the original source
-
eval
@Nullable public Object eval(@Nonnull SourceEntry sourceEntry)
Description copied from interface:Element
Evaluate this element with respect to the given source entry, producing an object that can be interpreted by aComparisons.Comparison
.
-
planHash
public int planHash()
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
- Returns:
- a stable hash code
-
-