...
Code Block |
---|
/** * Interactive query for issuing range queries and scans over KeyValue stores. * <p> * A range query retrieves a set of records, specified using an upper and/or lower bound on the keys. * <p> * A scan query retrieves all records contained in the store. * <p> */ @Evolving public final class RangeQuery<K, V> implements Query<KeyValueIterator<K, V>> { ... private final boolean isKeyAscending; /** * Determines if the query keys are in ascending order. * @return true if ascending, false otherwise. */ public boolean isKeyAscending(); ... /** * Set the query to return keys in descending order. * @return a new RangeQuery instance with descending flag set. */ public RangeQuery<K, V> withDescendingKeys(); ... } |
According to KIP-968, we introduce a public enum ResultOrder.
ResultOrder enum
It helps with specifying the order of the returned results by the query.
Code Block | ||||
---|---|---|---|---|
| ||||
package org.apache.kafka.streams.query;
public enum ResultOrder {
ANY,
ASCENDING,
DESCENDING
} |
Test Plan
This time, our goal is to implement reverseRange
and reverseAll
functionalities. While these terms are used for clarity, in practice, they correspond to RangeQuery.withRange().withDescendingKeys()
and RangeQuery.withNoBounds().withDescendingKeys()
, respectively. To ensure the accurate retrieval of results for both functionalities, adjustments to IQv2StoreIntegrationTest
are required. In our previous approach, we stored query results in a set, which doesn't maintain order. I've transitioned to using a list for storing query results, enabling us to distinguish between rangeQuery
and reverseQuery
. Here, rangeQuery
refers to standard queries (those not using withDescendingKeys()
) such as withRange()
, withLowerBound()
, withUpperBound()
, and withNoBounds()
. In contrast, reverseQuery
denotes queries that employ the withDescendingKeys()
method.
...