public class VersionElement extends Object implements Element
Element
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 and Description |
---|
VersionElement() |
Modifier and Type | Method and Description |
---|---|
Object |
eval(SourceEntry sourceEntry)
Evaluate this element with respect to the given source entry, producing an object that can be interpreted
by a
Comparisons.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 given
Element 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 given
ElementPredicate , under the assumption
that this element is already being used to satisfy the given ComparisonRange . |
int |
planHash()
Return a hash similar to
hashCode , 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.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
combineHashes, iterablePlanHash, objectPlanHash, objectsPlanHash, planHash, planHash, planHashUnordered, stringHashUnordered
@Nonnull public Optional<ComparisonRange> matchWith(@Nonnull ComparisonRange existingComparisons, @Nonnull ElementPredicate predicate)
Element
ElementPredicate
, under the assumption
that this element is already being used to satisfy the given ComparisonRange
. Note that this method
relies on strict comparisons between elements, i.e., the sources must be reference-equal to each other.matchWith
in interface Element
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 rangeOptional.empty()
otherwise@Nonnull public Optional<ViewExpressionComparisons> matchSourcesWith(@Nonnull ViewExpressionComparisons viewExpressionComparisons, @Nonnull Element element)
Element
Element
when unused sources are combined with
each other. Sources are determined to be used or unused based on their usage in the given
ViewExpressionComparisons
. 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 given
ViewExpressionComparisons
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 a
QueryComponent
with those generated by normalizing a
KeyExpression
. 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 a KeyExpression
can support a predicate.
matchSourcesWith
in interface Element
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 sourcesOptional.empty()
otherwise@Nonnull public Set<Source> getAncestralSources()
Element
getAncestralSources
in interface Element
@Nonnull public Element withSourceMappedInto(@Nonnull Source originalSource, @Nonnull Source duplicateSource)
Element
withSourceMappedInto
in interface Element
originalSource
- a source to replace all occurrences of the duplicate source withduplicateSource
- a source to replace with the original source@Nullable public Object eval(@Nonnull SourceEntry sourceEntry)
Element
Comparisons.Comparison
.public int planHash()
PlanHashable
hashCode
, but with the additional guarantee that is is stable across JVMs.planHash
in interface PlanHashable