Class IndexFunctionHelper
- java.lang.Object
-
- com.apple.foundationdb.record.provider.foundationdb.IndexFunctionHelper
-
@API(INTERNAL) public class IndexFunctionHelper extends Object
Helper class for finding appropriate indexes forIndexRecordFunction
andIndexAggregateFunction
.
-
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static Optional<IndexAggregateFunction>
bindAggregateFunction(FDBRecordStore store, IndexAggregateFunction function, List<String> recordTypeNames)
static Optional<IndexAggregateFunction>
bindAggregateFunctionCall(FDBRecordStore store, IndexAggregateFunctionCall functionCall, List<String> recordTypeNames)
(Public) method to bind anIndexAggregateFunctionCall
to an index resulting in anIndexAggregateFunction
if successful.protected static Optional<org.apache.commons.lang3.tuple.Pair<IndexAggregateFunction,IndexMaintainer>>
bindIndexForAggregateFunctionCall(FDBRecordStore store, IndexAggregateFunctionCall functionCall, List<String> recordTypeNames)
Bind aIndexAggregateFunctionCall
to an index and return a resultingIndexAggregateFunction
andIndexMaintainer
.static IndexAggregateFunction
count(KeyExpression by)
static IndexAggregateFunction
countUpdates(KeyExpression by)
static KeyExpression
getGroupedKey(KeyExpression key)
static KeyExpression
getGroupingKey(KeyExpression key)
protected static KeyExpression
getSubKey(KeyExpression key, int start, int end)
protected static KeyExpression
getThenSubKey(ThenKeyExpression then, int columnStart, int columnEnd)
protected static KeyExpression
groupKey(KeyExpression key)
static Stream<Index>
indexesForRecordTypes(FDBRecordStore store, List<String> recordTypeNames)
The indexes that apply to exactly the given types, no more, no less.static Stream<Index>
indexesForRecordTypes(RecordMetaData metaData, Collection<String> recordTypeNames)
The indexes that apply to exactly the given types, no more, no less.static Optional<IndexMaintainer>
indexMaintainerForAggregateFunction(FDBRecordStore store, IndexAggregateFunction function, List<String> recordTypeNames)
static Optional<IndexMaintainer>
indexMaintainerForRecordFunction(FDBRecordStore store, IndexRecordFunction<?> function, FDBRecord<?> record)
Find an index that can evaluate the given function against the given record.static Optional<IndexMaintainer>
indexMaintainerForRecordFunction(FDBRecordStore store, IndexRecordFunction<?> function, List<String> recordTypeNames)
Find an index that can evaluate the given function against all of the given record types.static boolean
isGroupPrefix(KeyExpression functionOperand, KeyExpression indexRoot)
Is the operand for this function compatible with this index? The grouped part must match.
-
-
-
Method Detail
-
indexMaintainerForRecordFunction
public static Optional<IndexMaintainer> indexMaintainerForRecordFunction(@Nonnull FDBRecordStore store, @Nonnull IndexRecordFunction<?> function, @Nonnull FDBRecord<?> record)
Find an index that can evaluate the given function against the given record.- Parameters:
store
- the record store containing the recordfunction
- the function to evaluaterecord
- the record to evaluate against- Returns:
- an index maintainer that can evaluate the function or
Optional.empty()
-
indexMaintainerForRecordFunction
public static Optional<IndexMaintainer> indexMaintainerForRecordFunction(@Nonnull FDBRecordStore store, @Nonnull IndexRecordFunction<?> function, @Nonnull List<String> recordTypeNames)
Find an index that can evaluate the given function against all of the given record types.- Parameters:
store
- the record store containing the record typesfunction
- the function to evaluaterecordTypeNames
- the names of all the record types for which the function will be evaluated- Returns:
- an index maintainer that can evaluate the function or
Optional.empty()
-
indexMaintainerForAggregateFunction
public static Optional<IndexMaintainer> indexMaintainerForAggregateFunction(@Nonnull FDBRecordStore store, @Nonnull IndexAggregateFunction function, @Nonnull List<String> recordTypeNames)
-
bindIndexForAggregateFunctionCall
protected static Optional<org.apache.commons.lang3.tuple.Pair<IndexAggregateFunction,IndexMaintainer>> bindIndexForAggregateFunctionCall(@Nonnull FDBRecordStore store, @Nonnull IndexAggregateFunctionCall functionCall, @Nonnull List<String> recordTypeNames)
Bind aIndexAggregateFunctionCall
to an index and return a resultingIndexAggregateFunction
andIndexMaintainer
. During the binding process we enumerate all indexes and for each such index we enumerate all permutations of grouping expressions in order to find an index that can be used to evaluated the aggregate function call.- Parameters:
store
- the store containing the record typesfunctionCall
- anIndexAggregateFunctionCall
recordTypeNames
- the names of the record types for which indexes need to be considered- Returns:
- an optional of a bound
IndexAggregateFunction
and aIndexMaintainer
if a matching index was found,Optional.empty()
otherwise.
-
indexesForRecordTypes
public static Stream<Index> indexesForRecordTypes(@Nonnull FDBRecordStore store, @Nonnull List<String> recordTypeNames)
The indexes that apply to exactly the given types, no more, no less.- Parameters:
store
- the store containing the record typesrecordTypeNames
- the names of the record types for which indexes are needed- Returns:
- a stream of indexes
-
indexesForRecordTypes
public static Stream<Index> indexesForRecordTypes(@Nonnull RecordMetaData metaData, @Nonnull Collection<String> recordTypeNames)
The indexes that apply to exactly the given types, no more, no less.- Parameters:
metaData
- the meta-data containing the record typesrecordTypeNames
- the names of the record types for which indexes are needed- Returns:
- a stream of indexes
-
isGroupPrefix
public static boolean isGroupPrefix(@Nonnull KeyExpression functionOperand, @Nonnull KeyExpression indexRoot)
Is the operand for this function compatible with this index? The grouped part must match. The grouping part must be a prefix.- Parameters:
functionOperand
- the operand to the functionindexRoot
- the index's expression- Returns:
true
if the operand is compatible with the index
-
getGroupedKey
public static KeyExpression getGroupedKey(@Nonnull KeyExpression key)
-
getGroupingKey
public static KeyExpression getGroupingKey(@Nonnull KeyExpression key)
-
groupKey
protected static KeyExpression groupKey(@Nonnull KeyExpression key)
-
getSubKey
protected static KeyExpression getSubKey(KeyExpression key, int start, int end)
-
getThenSubKey
protected static KeyExpression getThenSubKey(ThenKeyExpression then, int columnStart, int columnEnd)
-
count
public static IndexAggregateFunction count(@Nonnull KeyExpression by)
-
countUpdates
public static IndexAggregateFunction countUpdates(@Nonnull KeyExpression by)
-
bindAggregateFunction
public static Optional<IndexAggregateFunction> bindAggregateFunction(@Nonnull FDBRecordStore store, @Nonnull IndexAggregateFunction function, @Nonnull List<String> recordTypeNames)
-
bindAggregateFunctionCall
public static Optional<IndexAggregateFunction> bindAggregateFunctionCall(@Nonnull FDBRecordStore store, @Nonnull IndexAggregateFunctionCall functionCall, @Nonnull List<String> recordTypeNames)
(Public) method to bind anIndexAggregateFunctionCall
to an index resulting in anIndexAggregateFunction
if successful. SeebindIndexForAggregateFunctionCall(FDBRecordStore, IndexAggregateFunctionCall, List)
for details.- Parameters:
store
- the store containing the record typesfunctionCall
- anIndexAggregateFunctionCall
recordTypeNames
- the names of the record types for which indexes need to be considered- Returns:
- an optional of a bound
IndexAggregateFunction
if a matching index was found,Optional.empty()
otherwise.
-
-