public interface QueryRecorderFilter<T> extends Filter<T>
During a query execution each filter performs one or more logical operations
called "steps". Filters that implement this interface are expected
to produce an estimated cost of execution by the
explain
method
and the actual execution cost by the
trace(QueryContext, com.tangosol.util.QueryRecord.PartialResult.TraceStep, java.util.Set)
and
trace(QueryContext, com.tangosol.util.QueryRecord.PartialResult.TraceStep, java.util.Map.Entry)
methods.
Modifier and Type | Method and Description |
---|---|
void |
explain(QueryContext ctx,
QueryRecord.PartialResult.ExplainStep step,
Set setKeys)
Record the projected query execution cost by this filter.
|
boolean |
trace(QueryContext ctx,
QueryRecord.PartialResult.TraceStep step,
Map.Entry entry)
Evaluate the specified entry against this filter and record the evaluation
cost on the given step of the
QueryRecord . |
Filter |
trace(QueryContext ctx,
QueryRecord.PartialResult.TraceStep step,
Set setKeys)
Filter the given keys using available indexes and record the cost
of execution on the given step of the
QueryRecord . |
and, asLimitFilter, associatedWith, evaluate, forKeys, forPartitions, or, xor
void explain(QueryContext ctx, QueryRecord.PartialResult.ExplainStep step, Set setKeys)
This method is expected to record the order of execution and estimated
cost of applying corresponding indexes in the given
step
without actually applying any
indexes or evaluating entries.
ctx
- the query contextstep
- the step used to record the estimated execution costsetKeys
- the set of keys that would be filteredFilter trace(QueryContext ctx, QueryRecord.PartialResult.TraceStep step, Set setKeys)
QueryRecord
.
This method should record the size of the given key set before and
after applying corresponding indexes using
QueryRecord.PartialResult.RecordableStep.recordPreFilterKeys(int)
and
QueryRecord.PartialResult.TraceStep.recordPostFilterKeys(int)
as well as the corresponding execution time using the
QueryRecord.PartialResult.TraceStep.recordDuration(long)
method.
This method is only called if the filter is an IndexAwareFilter
and its implementations should explicitly call applyIndex()
to actually perform
the query. Additionally, this method should return the filter object (if
any) returned by the applyIndex() call.
ctx
- the query contextstep
- the step used to record the execution costsetKeys
- the mutable set of keys that remain to be filteredIndexAwareFilter.applyIndex(Map, Set)
boolean trace(QueryContext ctx, QueryRecord.PartialResult.TraceStep step, Map.Entry entry)
QueryRecord
.
This method should record the corresponding latencies using
QueryRecord.PartialResult.TraceStep.recordDuration(long)
.
Implementations are responsible for explicitly calling evaluateEntry()
method to perform
the actual entry evaluation. Additionally, this method should return the
result of the evaluateEntry call.
ctx
- the contextstep
- the step used to record the evaluation costentry
- the entry to evaluateEntryFilter.evaluateEntry(Map.Entry)