T
- the type of the input argument to the filterE
- the type of the extracted attribute to use for comparisonpublic class BetweenFilter<T,E extends Comparable<? super E>> extends AndFilter
ArrayFilter.WeightedFilter
ExternalizableHelper.DecoratedMultiBufferReadBuffer, ExternalizableHelper.DefaultObjectStreamFactory, ExternalizableHelper.FormatAwareCompressor, ExternalizableHelper.IntDecoratedObject, ExternalizableHelper.Shielded, ExternalizableHelper.ShieldedDataOutputStream, ExternalizableHelper.ShieldedInputStream, ExternalizableHelper.ShieldedObjectOutputStream, ExternalizableHelper.ShieldedOutputStream, ExternalizableHelper.SimpleXmlBeanClassCache, ExternalizableHelper.Stats, ExternalizableHelper.XmlBeanClassCache
Base.LoggingWriter, Base.StackFrame
Modifier and Type | Field and Description |
---|---|
static int |
EVAL_COST
The evaluation cost as a factor to the single index access operation.
|
m_aFilter, m_fPreserveOrder
CONVERTER_FROM_BINARY, CONVERTER_STRIP_INTDECO, CONVERTER_TO_BINARY, DECO_APP_1, DECO_APP_2, DECO_APP_3, DECO_CUSTOM, DECO_EXPIRY, DECO_ID_MAX, DECO_ID_MIN, DECO_JCACHE, DECO_JCACHE_SYNTHETIC, DECO_MEMCACHED, DECO_PUSHREP, DECO_QUEUE_METADATA, DECO_RSVD_1, DECO_RSVD_2, DECO_STORE, DECO_TX, DECO_VALUE, DECO_WLS, EMPTY_BINARY_ARRAY, FMT_B_ARRAY, FMT_BIN_DECO, FMT_BIN_EXT_DECO, FMT_BINARY, FMT_BOOLEAN, FMT_BYTE, FMT_DECIMAL, FMT_DOUBLE, FMT_EXT, FMT_FLOAT, FMT_IDO, FMT_INT, FMT_INTEGER, FMT_LONG, FMT_NONE, FMT_NULL, FMT_OBJ_EXT, FMT_OBJ_SER, FMT_OPT, FMT_OPT_DOUBLE, FMT_OPT_INT, FMT_OPT_LONG, FMT_SHORT, FMT_STRING, FMT_UNKNOWN, FMT_XML_BEAN, FMT_XML_SER, FORCE_RESOLVING_STREAMS, MAX_DECO_HEADER_BYTES, PROPERTY_CONFIG, s_streamfactory, TRINT_DOMAIN_SPAN, TRINT_MAX_VALUE, TRINT_MAX_VARIANCE, USE_POF_STREAMS, USE_XMLBEAN_CLASS_CACHE, XMLBEAN_CLASS_CACHE
Constructor and Description |
---|
BetweenFilter()
Default constructor (necessary for serialization).
|
BetweenFilter(String sMethod,
E from,
E to)
Construct a BetweenFilter for testing "Between" condition.
|
BetweenFilter(String sMethod,
E lowerBound,
E upperBound,
boolean fIncludeLowerBound,
boolean fIncludeUpperBound)
Construct a BetweenFilter for testing "Between" condition.
|
BetweenFilter(ValueExtractor<? super T,? extends E> extractor,
E from,
E to)
Construct a BetweenFilter for testing "Between" condition.
|
BetweenFilter(ValueExtractor<? super T,? extends E> extractor,
E lowerBound,
E upperBound,
boolean fIncludeLowerBound,
boolean fIncludeUpperBound)
Construct a BetweenFilter for testing "Between" condition.
|
Modifier and Type | Method and Description |
---|---|
Filter |
applyIndex(Map mapIndexes,
Set setKeys)
Filter remaining keys using a Map of available indexes.
|
protected void |
applySortedIndex(Set setKeys,
SortedMap<Object,Set> mapInverted)
Called by the
applyIndex(java.util.Map, java.util.Set) method
if the index corresponding to this filter's value extractor is a
sorted index. |
int |
calculateEffectiveness(Map mapIndexes,
Set setKeys)
Given a Map of available indexes, determine if this IndexAwareFilter
can use any of the indexes to assist in its processing, and if so,
determine how effective the use of that index would be.
|
boolean |
evaluate(Object oTarget)
Apply the test to the input argument.
|
boolean |
evaluateEntry(Map.Entry entry)
Apply the test to a Map Entry.
|
protected boolean |
evaluateEntry(Map.Entry entry,
QueryContext ctx,
QueryRecord.PartialResult.TraceStep step)
Check if the given entry passes the filter's evaluation.
|
protected boolean |
evaluateExtracted(Object oExtracted)
Evaluate the specified extracted value.
|
void |
explain(QueryContext ctx,
QueryRecord.PartialResult.ExplainStep step,
Set setKeys)
Record the projected query execution cost by this filter.
|
E |
getLowerBound()
Obtain the lower bound of the range being used to evaluate
values by this BetweenFilter.
|
E |
getUpperBound()
Obtain the upper bound of the range being used to evaluate
values by this BetweenFilter.
|
ValueExtractor |
getValueExtractor()
Obtain the ValueExtractor used by this filter.
|
boolean |
isLowerBoundInclusive()
Obtain the flag indicating whether values matching the lower bound
of the range evaluate to true.
|
boolean |
isUpperBoundInclusive()
Obtain the flag indicating whether values matching the upper bound
of the range evaluate to true.
|
String |
toString()
Return a human-readable description for 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 . |
applyIndex
applyFilter, equals, evaluateFilter, getFilters, hashCode, honorOrder, optimizeFilterOrder, readExternal, readExternal, writeExternal, writeExternal
asBinary, calculatePackedLength, calculatePackedLength, checkObjectInputFilter, convertUTF, decodeExpiry, decorate, decorate, decorate, decorate, decorate, decorateBinary, encodeExpiry, ensureSerializer, extractIntDecoration, fromBinary, fromBinary, fromBinary, fromBinary, fromBinary, fromBinary, fromByteArray, fromByteArray, getClass, getDecoration, getDecoration, getDecorations, getDeltaCompressor, getInputStream, getNewObjectInput, getObjectInput, getObjectOutput, getObjectStreamFactory, getOutputStream, getShieldedOutputStream, getStreamFormat, getUndecorated, getUndecorated, isDecorated, isDecorated, isIntDecorated, isIntDecorated, isResolving, isSerializable, isSerializerCompatible, isVersionCompatible, isVersionCompatible, loadClass, loadResource, main, makeTrint, readBigDecimal, readBigInteger, readBooleanArray, readByteArray, readCollection, readDate, readDoubleArray, readExternalizableLite, readExternalizableLite, readFloatArray, readInt, readInt, readIntArray2d, readLong, readLong, readMap, readMap, readObject, readObject, readSafeUTF, readSafeUTF, readSerializable, readSerializable, readStringArray, readTime, readTimestamp, readTrint, readUnsignedTrint, readUTF, readXmlBean, readXmlSerializable, readXmlSerializable, realize, removeIntDecoration, removeIntDecoration, replace, reportIncompatibleSerializers, setObjectStreamFactory, toBinary, toBinary, toByteArray, toByteArray, toByteArray, toLiteBinary, toLong, undecorate, undecorate, validateBufferSize, writeBigDecimal, writeBigInteger, writeBooleanArray, writeByteArray, writeCollection, writeDate, writeDoubleArray, writeExternalizableLite, writeFloatArray, writeInt, writeInt, writeIntArray2d, writeLong, writeLong, writeMap, writeObject, writeSafeUTF, writeSafeUTF, writeSerializable, writeStringArray, writeTime, writeTimestamp, writeTrint, writeTrint, writeUTF, writeXmlBean, writeXmlSerializable
countBits, countBits, countBits, indexOfLSB, indexOfLSB, indexOfLSB, indexOfMSB, indexOfMSB, indexOfMSB, rotateLeft, rotateLeft, rotateLeft, rotateRight, rotateRight, rotateRight, toBitString, toBitString, toBitString, toBytes, toBytes, toBytes, toBytes, toInt, toInt, toLong
azzert, azzert, azzert, azzertFailed, breakLines, breakLines, capitalize, checkNotEmpty, checkNotNull, checkRange, computeSafeWaitTime, decimalValue, dup, dup, ensureBigDecimal, ensureClassLoader, ensureRuntimeException, ensureRuntimeException, equals, equalsDeep, err, err, err, err, err, escape, formatDateTime, getCallerStackFrame, getCommonMonitor, getCommonMonitor, getCommonMonitor, getContextClassLoader, getContextClassLoader, getDeepMessage, getErr, getLastSafeTimeMillis, getLog, getMaxDecDigits, getMaxHexDigits, getOriginalException, getOut, getProcessRandom, getRandom, getRandomBinary, getRandomBinary, getRandomString, getSafeTimeMillis, getStackFrame, getStackFrames, getStackTrace, getStackTrace, getThreadFactory, getTimeZone, getUpTimeMillis, hashCode, hexValue, indentString, indentString, isDecimal, isHex, isLogEcho, isOctal, log, log, log, log, log, makeInteger, makeLong, makeThread, mod, mod, octalValue, out, out, out, out, out, pad, parseBandwidth, parseBandwidth, parseDelimitedString, parseHex, parseHex, parseMemorySize, parseMemorySize, parsePercentage, parseTime, parseTime, parseTimeNanos, parseTimeNanos, printStackTrace, randomize, randomize, randomize, randomize, read, read, read, read, read, read, read, replace, setErr, setLog, setLogEcho, setOut, sleep, toBandwidthString, toBandwidthString, toCharEscape, toCrc, toCrc, toCrc, toCrc, toCrc, toDecString, toDelimitedString, toDelimitedString, toDelimitedString, toDelimitedString, toHex, toHex, toHexDump, toHexEscape, toHexEscape, toHexEscape, toHexEscape, toHexString, toMemorySizeString, toMemorySizeString, toQuotedCharEscape, toQuotedStringEscape, toSqlString, toString, toString, toStringEscape, toUnicodeEscape, trace, trace, trace, trace, trace, trace, trace, trace, trace, truncateString, truncateString, wait
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
and, asLimitFilter, associatedWith, forKeys, forPartitions, or, xor
public static int EVAL_COST
public BetweenFilter()
public BetweenFilter(ValueExtractor<? super T,? extends E> extractor, E from, E to)
extractor
- the ValueExtractor to use by this filterfrom
- the object to compare the "Greater or Equals"
boundary withto
- the object to compare the "Less or Equals" boundary
withpublic BetweenFilter(String sMethod, E from, E to)
sMethod
- the name of the method to invoke via reflectionfrom
- the object to compare the "Greater or Equals" boundary
withto
- the object to compare the "Less or Equals" boundary
withpublic BetweenFilter(String sMethod, E lowerBound, E upperBound, boolean fIncludeLowerBound, boolean fIncludeUpperBound)
sMethod
- the name of the method to invoke via reflectionlowerBound
- the lower bound of the rangeupperBound
- the upper bound of the rangefIncludeLowerBound
- a flag indicating whether values matching the lower bound evaluate to truefIncludeUpperBound
- a flag indicating whether values matching the upper bound evaluate to truepublic BetweenFilter(ValueExtractor<? super T,? extends E> extractor, E lowerBound, E upperBound, boolean fIncludeLowerBound, boolean fIncludeUpperBound)
extractor
- the ValueExtractor
to be used by this filterlowerBound
- the lower bound of the rangeupperBound
- the upper bound of the rangefIncludeLowerBound
- a flag indicating whether values matching the lower bound evaluate to truefIncludeUpperBound
- a flag indicating whether values matching the upper bound evaluate to truepublic ValueExtractor getValueExtractor()
public E getLowerBound()
public E getUpperBound()
public boolean isLowerBoundInclusive()
public boolean isUpperBoundInclusive()
public boolean evaluate(Object oTarget)
public boolean evaluateEntry(Map.Entry entry)
evaluateEntry
in interface EntryFilter
evaluateEntry
in class ArrayFilter
entry
- the Map Entry to evaluate; never nullprotected boolean evaluateEntry(Map.Entry entry, QueryContext ctx, QueryRecord.PartialResult.TraceStep step)
evaluateEntry
in class AllFilter
entry
- a key value pair to filterctx
- the query ctx; may be nullstep
- the step used to record the execution costpublic Filter applyIndex(Map mapIndexes, Set setKeys)
The filter is responsible for removing all keys from the passed set of
keys that the applicable indexes can prove should be filtered. If the
filter does not fully evaluate the remaining keys using just the index
information, it must return a filter (which may be an
EntryFilter
) that can complete the task using an iterating
implementation. If, on the other hand, the filter does fully evaluate
the remaining keys using just the index information, then it should
return null to indicate that no further filtering is necessary.
applyIndex
in interface IndexAwareFilter
applyIndex
in class ArrayFilter
mapIndexes
- the available MapIndex
objects keyed by the
related ValueExtractor; read-onlysetKeys
- the mutable set of keys that remain to be filteredFilter
object (which may be an EntryFilter
)
that can be used to process the remaining keys, or null if no
additional filter processing is necessarypublic int calculateEffectiveness(Map mapIndexes, Set setKeys)
The returned value is an effectiveness estimate of how well this filter can use the specified indexes to filter the specified keys. An operation that requires no more than a single access to the index content (i.e. Equals, NotEquals) has an effectiveness of one. Evaluation of a single entry is assumed to have an effectiveness that depends on the index implementation and is usually measured as a constant number of the single operations. This number is referred to as evaluation cost.
If the effectiveness of a filter evaluates to a number larger than the keySet.size() * <evaluation cost> then a user could avoid using the index and iterate through the keySet calling evaluate rather then applyIndex.
calculateEffectiveness
in interface IndexAwareFilter
calculateEffectiveness
in class AllFilter
mapIndexes
- the available MapIndex
objects keyed by the
related ValueExtractor; read-onlysetKeys
- the set of keys that will be filtered; read-onlypublic 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.
explain
in interface QueryRecorderFilter
explain
in class ArrayFilter
ctx
- the query contextstep
- the step used to record the estimated execution costsetKeys
- the set of keys that would be filteredpublic Filter 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.
trace
in interface QueryRecorderFilter
trace
in class ArrayFilter
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)
public 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.
trace
in interface QueryRecorderFilter
trace
in class ArrayFilter
ctx
- the contextstep
- the step used to record the evaluation costentry
- the entry to evaluateEntryFilter.evaluateEntry(Map.Entry)
public String toString()
toString
in class ArrayFilter
protected boolean evaluateExtracted(Object oExtracted)
oExtracted
- an extracted value to evaluateprotected void applySortedIndex(Set setKeys, SortedMap<Object,Set> mapInverted)
applyIndex(java.util.Map, java.util.Set)
method
if the index corresponding to this filter's value extractor is a
sorted index.setKeys
- the set of keys of the entries being filteredmapInverted
- the index to apply