@API(value=MAINTAINED) public class SplitKeyExpression extends BaseKeyExpression implements AtomKeyExpression, KeyExpressionWithoutChildren
Key.Evaluated
containing several of the values.
For example, 12
values with splitSize
3
turns into 4
Key.Evaluated
.
The same result can be achieved more transparently by having a repeated nested submessage with the several fields
in it; this is for the sake of clients with poorer type systems that only allow for lists of primitive types.BaseKeyExpression.IllegalSubKeyException, BaseKeyExpression.UnsplittableKeyExpressionException
KeyExpression.DeserializationException, KeyExpression.FanType, KeyExpression.InvalidExpressionException, KeyExpression.InvalidResultException, KeyExpression.NoSuchArgumentException, KeyExpression.SerializationException
Constructor and Description |
---|
SplitKeyExpression(KeyExpression joined,
int splitSize) |
SplitKeyExpression(RecordMetaDataProto.Split split) |
Modifier and Type | Method and Description |
---|---|
boolean |
createsDuplicates()
This states whether the given expression type is capable of evaluating more to more than
one value when applied to a single record.
|
boolean |
equals(Object o) |
boolean |
equalsAtomic(AtomKeyExpression other) |
boolean |
equivalentForSort(KeyExpression other)
Check whether a key expression is the same for purposes of determining sort order.
|
<M extends Message> |
evaluateMessage(FDBRecord<M> record,
Message message)
Evaluate this expression against a record or a Protobuf message.
|
int |
getColumnSize()
Returns the number of items in each KeyValue that will be returned.
|
KeyExpression |
getJoined() |
Iterator<? extends ExpressionRef<? extends PlannerExpression>> |
getPlannerExpressionChildren()
Return an iterator of references to the children of this planner expression.
|
GroupingKeyExpression |
groupBy(KeyExpression groupByFirst,
KeyExpression... groupByRest) |
int |
hashCode() |
boolean |
hasRecordTypeKey()
Check whether a key expression uses record type key in some way.
|
List<KeyExpression> |
normalizeKeyForPositions()
Get key in normalized form for comparing field-by-field.
|
int |
planHash()
Return a hash similar to
hashCode , but with the additional guarantee that is is stable across JVMs. |
RecordMetaDataProto.KeyExpression |
toKeyExpression() |
RecordMetaDataProto.Split |
toProto() |
String |
toString() |
GroupingKeyExpression |
ungrouped()
Get this entire split as a group without any grouping keys.
|
List<Descriptors.FieldDescriptor> |
validate(Descriptors.Descriptor descriptor)
Validate this expression against a given record type descriptor.
|
int |
versionColumns()
Returns the number of version columns produced by this key expression.
|
getSubKey, getSubKeyImpl, isPrefixKey
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
evaluate, evaluateSingleton, fromProto, getSubKey, hasProperInterfaces, isPrefixKey
iterablePlanHash, objectPlanHash, objectsPlanHash, planHash, planHash
acceptPropertyVisitor, bindTo
public SplitKeyExpression(KeyExpression joined, int splitSize)
public SplitKeyExpression(@Nonnull RecordMetaDataProto.Split split) throws KeyExpression.DeserializationException
@Nonnull public <M extends Message> List<Key.Evaluated> evaluateMessage(@Nullable FDBRecord<M> record, @Nullable Message message)
KeyExpression
evaluateMessage
.
Under ordinary circumstances, if record
is null
, then message
will be null
.
Otherwise, message
will be record.getRecord()
or some submessage of that, possibly null
if
the corresponding field is missing.evaluateMessage
in interface KeyExpression
M
- the type of recordrecord
- the recordmessage
- the Protobuf message to evaluate againstKeyExpression.evaluate(com.apple.foundationdb.record.provider.foundationdb.FDBRecord<M>)
public boolean createsDuplicates()
KeyExpression
FanType.FanOut
set (either directly
or indirectly).createsDuplicates
in interface KeyExpression
true
if this expression can evaluate to multiple values and false
otherwisepublic List<Descriptors.FieldDescriptor> validate(@Nonnull Descriptors.Descriptor descriptor)
KeyExpression
validate
in interface KeyExpression
descriptor
- the descriptor for the record type or submessagepublic int getColumnSize()
KeyExpression
KeyExpression.FanType.Concatenate
, this will the count of non-nested lists, i.e. this will be value of
evaluate(r).get(i).toList().size() for any i or r.getColumnSize
in interface KeyExpression
@Nonnull public RecordMetaDataProto.Split toProto() throws KeyExpression.SerializationException
toProto
in interface KeyExpression
KeyExpression.SerializationException
@Nonnull public RecordMetaDataProto.KeyExpression toKeyExpression()
toKeyExpression
in interface KeyExpression
@Nonnull public List<KeyExpression> normalizeKeyForPositions()
KeyExpression
normalizeKeyForPositions
in interface KeyExpression
public int versionColumns()
KeyExpression
versionColumns
in interface KeyExpression
public boolean hasRecordTypeKey()
KeyExpression
hasRecordTypeKey
in interface KeyExpression
true
if record type key is used@Nonnull public KeyExpression getJoined()
@Nonnull public GroupingKeyExpression ungrouped()
@Nonnull public GroupingKeyExpression groupBy(@Nonnull KeyExpression groupByFirst, @Nonnull KeyExpression... groupByRest)
@Nonnull @API(value=EXPERIMENTAL) public Iterator<? extends ExpressionRef<? extends PlannerExpression>> getPlannerExpressionChildren()
PlannerExpression
Collections.emptyIterator()
is returned. The returned iterator should
be treated as an immutable object and may throw an exception if Iterator.remove()
is called.
The iterator must return its elements in a consistent order.getPlannerExpressionChildren
in interface PlannerExpression
public int planHash()
PlanHashable
hashCode
, but with the additional guarantee that is is stable across JVMs.planHash
in interface PlanHashable
public boolean equalsAtomic(AtomKeyExpression other)
equalsAtomic
in interface AtomKeyExpression
public boolean equivalentForSort(@Nonnull KeyExpression other)
KeyExpression
equivalentForSort
in interface KeyExpression
other
- another key expressiontrue
if this key expression sorts entries in the same order