@API(value=EXPERIMENTAL) public interface Element extends PlanHashable
ViewExpression
language that can be represented as an element of FoundationDB tuple.
An element is the atom of a FoundationDB tuple, and therefore has a representation as a byte string with a defined
total order (i.e., an order where a <= b
and b <= a
implies that a == b
, and where either
a <= b
or b <= a
). Elements generate the values that can be used to define the projection, predicate,
sort order, or grouping of a view expression. Since elements must be usable in FoundationDB tuples, they are also
the fundamental unit of key planning operations such as incremental index selection. Many, but not all, elements
reference a Source
which identifies what streams of data will generate them.
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 . |
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.
|
combineHashes, iterablePlanHash, objectPlanHash, objectsPlanHash, planHash, planHash, planHash, planHashUnordered, stringHashUnordered
@Nonnull Optional<ComparisonRange> matchWith(@Nonnull ComparisonRange existingComparisons, @Nonnull ElementPredicate predicate)
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.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 Optional<ViewExpressionComparisons> matchSourcesWith(@Nonnull ViewExpressionComparisons viewExpressionComparisons, @Nonnull 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, matchWith(ComparisonRange, ElementPredicate)
will fail to notice when an index defined by a KeyExpression
can support a predicate.
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 Set<Source> getAncestralSources()
@Nonnull Element withSourceMappedInto(@Nonnull Source originalSource, @Nonnull Source duplicateSource)
originalSource
- a source to replace all occurrences of the duplicate source withduplicateSource
- a source to replace with the original source@Nullable Object eval(@Nonnull SourceEntry sourceEntry)
Comparisons.Comparison
.sourceEntry
- a source entry to use when evaluating this element