Package org.apache.calcite.rel.metadata
Class RelMdUniqueKeys
java.lang.Object
org.apache.calcite.rel.metadata.RelMdUniqueKeys
- All Implemented Interfaces:
MetadataHandler<BuiltInMetadata.UniqueKeys>
RelMdUniqueKeys supplies a default implementation of
RelMetadataQuery.getUniqueKeys(org.apache.calcite.rel.RelNode)
for the standard logical algebra.
The number of returned keys for each relational expression is bounded by a limit.
The limit is used to restrict the exponential logic that can appear for certain query patterns
and lead to CPU/memory exhaustion and crashes.-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionCreates a metadata handler for unique keys with the default limit.RelMdUniqueKeys
(int limit) Creates a metadata handler for unique keys with the specified limit. -
Method Summary
Modifier and TypeMethodDescriptiongetDef()
getUniqueKeys
(Aggregate rel, RelMetadataQuery mq, boolean ignoreNulls) @Nullable Set<ImmutableBitSet>
getUniqueKeys
(Calc rel, RelMetadataQuery mq, boolean ignoreNulls) @Nullable Set<ImmutableBitSet>
getUniqueKeys
(Correlate rel, RelMetadataQuery mq, boolean ignoreNulls) @Nullable Set<ImmutableBitSet>
getUniqueKeys
(Filter rel, RelMetadataQuery mq, boolean ignoreNulls) getUniqueKeys
(Intersect rel, RelMetadataQuery mq, boolean ignoreNulls) Any unique key of any input of Intersect is an unique key of the Intersect.@Nullable Set<ImmutableBitSet>
getUniqueKeys
(Join rel, RelMetadataQuery mq, boolean ignoreNulls) getUniqueKeys
(Minus rel, RelMetadataQuery mq, boolean ignoreNulls) The unique keys of Minus are precisely the unique keys of its first input.getUniqueKeys
(Project rel, RelMetadataQuery mq, boolean ignoreNulls) @Nullable Set<ImmutableBitSet>
getUniqueKeys
(Sort rel, RelMetadataQuery mq, boolean ignoreNulls) @Nullable Set<ImmutableBitSet>
getUniqueKeys
(TableModify rel, RelMetadataQuery mq, boolean ignoreNulls) @Nullable Set<ImmutableBitSet>
getUniqueKeys
(TableScan rel, RelMetadataQuery mq, boolean ignoreNulls) getUniqueKeys
(Union rel, RelMetadataQuery mq, boolean ignoreNulls) @Nullable Set<ImmutableBitSet>
getUniqueKeys
(Values rel, RelMetadataQuery mq, boolean ignoreNulls) @Nullable Set<ImmutableBitSet>
getUniqueKeys
(RelNode rel, RelMetadataQuery mq, boolean ignoreNulls)
-
Field Details
-
SOURCE
-
-
Constructor Details
-
RelMdUniqueKeys
public RelMdUniqueKeys()Creates a metadata handler for unique keys with the default limit. -
RelMdUniqueKeys
public RelMdUniqueKeys(int limit) Creates a metadata handler for unique keys with the specified limit.- Parameters:
limit
- a non-negative integer that bounds the number of unique keys returned for each relational expression.
-
-
Method Details
-
getDef
- Specified by:
getDef
in interfaceMetadataHandler<BuiltInMetadata.UniqueKeys>
-
getUniqueKeys
public @Nullable Set<ImmutableBitSet> getUniqueKeys(Filter rel, RelMetadataQuery mq, boolean ignoreNulls) -
getUniqueKeys
public @Nullable Set<ImmutableBitSet> getUniqueKeys(Sort rel, RelMetadataQuery mq, boolean ignoreNulls) -
getUniqueKeys
public @Nullable Set<ImmutableBitSet> getUniqueKeys(Correlate rel, RelMetadataQuery mq, boolean ignoreNulls) -
getUniqueKeys
public @Nullable Set<ImmutableBitSet> getUniqueKeys(TableModify rel, RelMetadataQuery mq, boolean ignoreNulls) -
getUniqueKeys
-
getUniqueKeys
public @Nullable Set<ImmutableBitSet> getUniqueKeys(Calc rel, RelMetadataQuery mq, boolean ignoreNulls) -
getUniqueKeys
public @Nullable Set<ImmutableBitSet> getUniqueKeys(Join rel, RelMetadataQuery mq, boolean ignoreNulls) -
getUniqueKeys
-
getUniqueKeys
-
getUniqueKeys
Any unique key of any input of Intersect is an unique key of the Intersect. -
getUniqueKeys
The unique keys of Minus are precisely the unique keys of its first input. -
getUniqueKeys
public @Nullable Set<ImmutableBitSet> getUniqueKeys(TableScan rel, RelMetadataQuery mq, boolean ignoreNulls) -
getUniqueKeys
public @Nullable Set<ImmutableBitSet> getUniqueKeys(Values rel, RelMetadataQuery mq, boolean ignoreNulls) -
getUniqueKeys
public @Nullable Set<ImmutableBitSet> getUniqueKeys(RelNode rel, RelMetadataQuery mq, boolean ignoreNulls)
-