Class BaseShortUpdateByOperator
java.lang.Object
com.illumon.iris.db.v2.updateby.internal.BaseShortUpdateByOperator
- All Implemented Interfaces:
UpdateByOperator
- Direct Known Subclasses:
ShortCumMinMaxOperator
,ShortDeltaOperator
,ShortFillByOperator
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from interface com.illumon.iris.db.v2.updateby.UpdateByOperator
UpdateByOperator.UpdateContext
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final String[]
protected ShortArraySource
protected boolean
protected final boolean
protected final WritableSource<Short>
protected final WritableSource<Short>
protected final MatchPair
protected long
protected short
These are only used in grouped operationsFields inherited from interface com.illumon.iris.db.v2.updateby.UpdateByOperator
ZERO_LENGTH_OP_ARRAY
-
Constructor Summary
ConstructorsConstructorDescriptionBaseShortUpdateByOperator
(MatchPair pair, String[] affectingColumns, RedirectionIndex redirectionIndex) Construct a base operator for operations that produce short outputs. -
Method Summary
Modifier and TypeMethodDescriptionvoid
addChunk
(UpdateByOperator.UpdateContext updateContext, OrderedKeys inputKeys, LongChunk<Attributes.OrderedKeyIndices> keyChunk, Chunk<Attributes.Values> values, long bucketPosition) Add a chunk of non-bucketed items to the operation.final boolean
Check if the update has modified any rows for this operator.void
applyOutputShift
(UpdateByOperator.UpdateContext context, ReadOnlyIndex subIndexToShift, long delta) Apply a shift to the operation.final void
applyShift
(UpdateByOperator.UpdateContext updateContext, ReadOnlyIndex prevIndex, IndexShiftData shifted) Apply a shift to the operation.boolean
Query if this operator can process the update normally, or if it can only reprocess.protected abstract void
doAddChunk
(BaseShortUpdateByOperator.Context ctx, OrderedKeys inputKeys, Chunk<Attributes.Values> workingChunk, long bucketPosition) Add a chunk of values to the operator.void
finishFor
(UpdateByOperator.UpdateContext updateContext, UpdateBy.UpdateType type) Perform and bookkeeping required at the end of a single part of the update.final ReadOnlyIndex
Get an index of rows that were modified beyond the input set of modifications from the upstream.String[]
Get an array of column names that, when modified, affect the result of this computation.Get the name of the input column this operator depends on.String[]
Get an array of the output column names.Map<String,
ColumnSource<?>> Get a map of outputName to outputColumnSource
for this operation.void
initializeFor
(UpdateByOperator.UpdateContext updateContext, ReadOnlyIndex updateIndex, UpdateBy.UpdateType type) Initialize the context for the specified stage of the update process.void
initializeForUpdate
(UpdateByOperator.UpdateContext context, ShiftAwareListener.Update upstream, ReadOnlyIndex resultSourceIndex, boolean usingBuckets, boolean isUpstreamAppendOnly) Initialize the operator for an update cycle.makeUpdateContext
(int chunkSize) Make anUpdateByOperator.UpdateContext
suitable for use with non-bucketed updates.final void
modifyChunk
(UpdateByOperator.UpdateContext updateContext, LongChunk<Attributes.OrderedKeyIndices> prevKeyChunk, LongChunk<Attributes.OrderedKeyIndices> keyChunk, Chunk<Attributes.Values> prevValuesChunk, Chunk<Attributes.Values> postValuesChunk, long bucketPosition) Modify a chunk of values with the operation.void
onBucketsRemoved
(ReadOnlyIndex removedBuckets) Called when some buckets have been completely emptied.final void
removeChunk
(UpdateByOperator.UpdateContext updateContext, LongChunk<Attributes.OrderedKeyIndices> keyChunk, Chunk<Attributes.Values> prevValuesChunk, long bucketPosition) Remove a chunk of values from the operation.void
reprocessChunk
(UpdateByOperator.UpdateContext updateContext, OrderedKeys chunkOk, Chunk<Attributes.Values> values, LongChunk<? extends Attributes.KeyIndices> keyChunk, IntChunk<Attributes.KeyIndices> bucketPositions, IntChunk<Attributes.ChunkPositions> runStartPositions, IntChunk<Attributes.ChunkLengths> runLengths) Reprocess a chunk of data for a bucketed table.void
reprocessChunk
(UpdateByOperator.UpdateContext updateContext, OrderedKeys inputKeys, LongChunk<Attributes.OrderedKeyIndices> keyChunk, Chunk<Attributes.Values> valuesChunk, ReadOnlyIndex postUpdateSourceIndex) Reprocess a chunk of data for a non-bucketed table.boolean
Query if the operator requires key values for the current stage.boolean
Query if the operator requires values for the current stage.void
resetForReprocess
(UpdateByOperator.UpdateContext context, ReadOnlyIndex sourceIndex, ColumnSource<?> inputSource, long firstUnmodifiedKey) Reset the operator to the state at the `firstModifiedKey` for non-bucketed operation.void
resetForReprocess
(UpdateByOperator.UpdateContext ctx, ReadOnlyIndex bucketIndex, ColumnSource<?> inputSource, long bucketPosition, long firstUnmodifiedKey) Reset the operator to the state at the `firstModifiedKey` for the specified bucket.void
setBucketCapacity
(int capacity) Notify the operator of the current maximum bucket.void
setChunkSize
(UpdateByOperator.UpdateContext context, int chunkSize) Set the chunk size to be used for operations.void
Indicate that the operation should start tracking previous values for ticking updates.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface com.illumon.iris.db.v2.updateby.UpdateByOperator
addChunk
-
Field Details
-
outputSource
-
maybeInnerSource
-
pair
-
affectingColumns
-
isRedirected
protected final boolean isRedirected -
bucketLastVal
-
singletonVal
protected short singletonValThese are only used in grouped operations -
singletonGroup
protected long singletonGroup -
initialized
protected boolean initialized
-
-
Constructor Details
-
BaseShortUpdateByOperator
public BaseShortUpdateByOperator(@NotNull MatchPair pair, @NotNull String[] affectingColumns, @Nullable RedirectionIndex redirectionIndex) Construct a base operator for operations that produce short outputs.- Parameters:
pair
- theMatchPair
that defines the input/output for this operationaffectingColumns
- a list of all columns (including the input column from the pair) that affects the result of this operator.redirectionIndex
- theRedirectionIndex
if one is used
-
-
Method Details
-
setChunkSize
Description copied from interface:UpdateByOperator
Set the chunk size to be used for operations. This is used during theUpdateBy.UpdateType.Reprocess
phase when the chunks allocated during the normal processing phase may not be large enough.- Specified by:
setChunkSize
in interfaceUpdateByOperator
- Parameters:
context
- the context objectchunkSize
- the new chunk size
-
setBucketCapacity
public void setBucketCapacity(int capacity) Description copied from interface:UpdateByOperator
Notify the operator of the current maximum bucket.- Specified by:
setBucketCapacity
in interfaceUpdateByOperator
- Parameters:
capacity
- the capacity
-
getInputColumnName
Description copied from interface:UpdateByOperator
Get the name of the input column this operator depends on.- Specified by:
getInputColumnName
in interfaceUpdateByOperator
- Returns:
- the name of the input column
-
getAffectingColumnNames
Description copied from interface:UpdateByOperator
Get an array of column names that, when modified, affect the result of this computation.- Specified by:
getAffectingColumnNames
in interfaceUpdateByOperator
- Returns:
- an array of column names that affect this operator.
-
getOutputColumnNames
Description copied from interface:UpdateByOperator
Get an array of the output column names.- Specified by:
getOutputColumnNames
in interfaceUpdateByOperator
- Returns:
- the output column names.
-
getOutputColumns
Description copied from interface:UpdateByOperator
Get a map of outputName to outputColumnSource
for this operation.- Specified by:
getOutputColumns
in interfaceUpdateByOperator
- Returns:
- a map of output column name to output column source
-
makeUpdateContext
Description copied from interface:UpdateByOperator
Make anUpdateByOperator.UpdateContext
suitable for use with non-bucketed updates.- Specified by:
makeUpdateContext
in interfaceUpdateByOperator
- Parameters:
chunkSize
- The expected size of chunks that will be provided during the update,- Returns:
- a new context
-
initializeForUpdate
public void initializeForUpdate(@NotNull UpdateByOperator.UpdateContext context, @NotNull ShiftAwareListener.Update upstream, @NotNull ReadOnlyIndex resultSourceIndex, boolean usingBuckets, boolean isUpstreamAppendOnly) Description copied from interface:UpdateByOperator
Initialize the operator for an update cycle. This is invoked before any other update processing occurs.- Specified by:
initializeForUpdate
in interfaceUpdateByOperator
- Parameters:
context
- the context objectupstream
- the upstream update to processresultSourceIndex
- the result index of the source tableusingBuckets
- if the update is bucketed or notisUpstreamAppendOnly
- if the upstream update was detected to be append-only.
-
initializeFor
public void initializeFor(@NotNull UpdateByOperator.UpdateContext updateContext, @NotNull ReadOnlyIndex updateIndex, @NotNull UpdateBy.UpdateType type) Description copied from interface:UpdateByOperator
Initialize the context for the specified stage of the update process. This will always be followed by a call to
UpdateByOperator.finishFor(UpdateContext, UpdateType)
at the end of each successful update.- Specified by:
initializeFor
in interfaceUpdateByOperator
- Parameters:
updateContext
- the context objectupdateIndex
- the index of rows associated with the update.type
- the type of update being applied
-
finishFor
public void finishFor(@NotNull UpdateByOperator.UpdateContext updateContext, @NotNull UpdateBy.UpdateType type) Description copied from interface:UpdateByOperator
Perform and bookkeeping required at the end of a single part of the update. This is always preceded with a call toUpdateByOperator.initializeFor(UpdateContext, ReadOnlyIndex, UpdateType)
- Specified by:
finishFor
in interfaceUpdateByOperator
- Parameters:
updateContext
- the context objecttype
- the type of update being applied
-
requiresKeys
public boolean requiresKeys()Description copied from interface:UpdateByOperator
Query if the operator requires key values for the current stage. This method will always be invoked after an appropriate invocation ofUpdateByOperator.initializeFor(UpdateContext, ReadOnlyIndex, UpdateType)
- Specified by:
requiresKeys
in interfaceUpdateByOperator
- Returns:
- true if the operator requires keys for this operation
-
requiresValues
Description copied from interface:UpdateByOperator
Query if the operator requires values for the current stage.- Specified by:
requiresValues
in interfaceUpdateByOperator
- Parameters:
context
- the context object- Returns:
- true if values are required for compuitation
-
startTrackingPrev
public void startTrackingPrev()Description copied from interface:UpdateByOperator
Indicate that the operation should start tracking previous values for ticking updates.- Specified by:
startTrackingPrev
in interfaceUpdateByOperator
-
getAdditionalModifications
@NotNull public final ReadOnlyIndex getAdditionalModifications(@NotNull UpdateByOperator.UpdateContext ctx) Description copied from interface:UpdateByOperator
Get an index of rows that were modified beyond the input set of modifications from the upstream. This is invoked once at the end of a complete update cycle (that is, after all adds, removes, modifies and shifts have been processed) ifUpdateByOperator.anyModified(UpdateContext)
has returned true.- Specified by:
getAdditionalModifications
in interfaceUpdateByOperator
- Parameters:
ctx
- the context object- Returns:
- a
index
of additional rows that were modified
-
anyModified
Description copied from interface:UpdateByOperator
Check if the update has modified any rows for this operator. This is invoked once at the end of a complete update cycle (that is, after all adds, removes, modifies and shifts have been processed).- Specified by:
anyModified
in interfaceUpdateByOperator
- Parameters:
ctx
- the context object- Returns:
- true if the update modified any rows.
-
onBucketsRemoved
Description copied from interface:UpdateByOperator
Called when some buckets have been completely emptied. Operators can use this to reset internal states.- Specified by:
onBucketsRemoved
in interfaceUpdateByOperator
- Parameters:
removedBuckets
- an index of removed bucket positions.
-
canProcessNormalUpdate
Description copied from interface:UpdateByOperator
Query if this operator can process the update normally, or if it can only reprocess. This method is guaranteed to be invoked afterUpdateByOperator.initializeForUpdate(UpdateContext, ShiftAwareListener.Update, ReadOnlyIndex, boolean, boolean)
so the operator is aware of the upstreamShiftAwareListener.Update
.- Specified by:
canProcessNormalUpdate
in interfaceUpdateByOperator
- Parameters:
context
- the context- Returns:
- true if this operator can process the update normally.
-
addChunk
public void addChunk(@NotNull UpdateByOperator.UpdateContext updateContext, @NotNull OrderedKeys inputKeys, @Nullable LongChunk<Attributes.OrderedKeyIndices> keyChunk, @NotNull Chunk<Attributes.Values> values, long bucketPosition) Description copied from interface:UpdateByOperator
Add a chunk of non-bucketed items to the operation.- Specified by:
addChunk
in interfaceUpdateByOperator
- Parameters:
updateContext
- the context objectkeyChunk
- a chunk of keys for the rows being added. If the operator returnsfalse
forUpdateByOperator.requiresKeys()
this will be null.values
- the chunk of values for the rows being addedbucketPosition
- the group position
-
doAddChunk
protected abstract void doAddChunk(@NotNull BaseShortUpdateByOperator.Context ctx, @NotNull OrderedKeys inputKeys, @NotNull Chunk<Attributes.Values> workingChunk, long bucketPosition) Add a chunk of values to the operator.- Parameters:
ctx
- the context objectinputKeys
- the input keys for the chunkworkingChunk
- the chunk of valuesbucketPosition
- the bucket position that the values belong to.
-
applyOutputShift
public void applyOutputShift(@NotNull UpdateByOperator.UpdateContext context, @NotNull ReadOnlyIndex subIndexToShift, long delta) Description copied from interface:UpdateByOperator
Apply a shift to the operation.- Specified by:
applyOutputShift
in interfaceUpdateByOperator
- Parameters:
context
- the context object
-
resetForReprocess
public void resetForReprocess(@NotNull UpdateByOperator.UpdateContext context, @NotNull ReadOnlyIndex sourceIndex, @NotNull ColumnSource<?> inputSource, long firstUnmodifiedKey) Description copied from interface:UpdateByOperator
Reset the operator to the state at the `firstModifiedKey` for non-bucketed operation. This is invoked immediately prior to calls toUpdateByOperator.reprocessChunk(UpdateContext, OrderedKeys, LongChunk, Chunk, ReadOnlyIndex)
.
A `firstUnmodifiedKey` ofReadOnlyIndex.NULL_KEY
indicates that the entire table needs to be recomputed.- Specified by:
resetForReprocess
in interfaceUpdateByOperator
- Parameters:
context
- the context objectsourceIndex
- the current index of the source tableinputSource
- the most primitive form of the input column sourcefirstUnmodifiedKey
- the first unmodified key after which we will reprocess rows.
-
resetForReprocess
public void resetForReprocess(@NotNull UpdateByOperator.UpdateContext ctx, @NotNull ReadOnlyIndex bucketIndex, @NotNull ColumnSource<?> inputSource, long bucketPosition, long firstUnmodifiedKey) Description copied from interface:UpdateByOperator
Reset the operator to the state at the `firstModifiedKey` for the specified bucket. This is invoked immediately prior to calls toUpdateByOperator.reprocessChunk(UpdateContext, OrderedKeys, Chunk, LongChunk, IntChunk, IntChunk, IntChunk)
.- Specified by:
resetForReprocess
in interfaceUpdateByOperator
- Parameters:
ctx
- the context objectbucketIndex
- the current index of the specified bucketinputSource
- the most primitive form of the input column sourcefirstUnmodifiedKey
- the first unmodified key in the bucket after which we will reprocess rows.
-
reprocessChunk
public void reprocessChunk(@NotNull UpdateByOperator.UpdateContext updateContext, @NotNull OrderedKeys inputKeys, @Nullable LongChunk<Attributes.OrderedKeyIndices> keyChunk, @NotNull Chunk<Attributes.Values> valuesChunk, @NotNull ReadOnlyIndex postUpdateSourceIndex) Description copied from interface:UpdateByOperator
Reprocess a chunk of data for a non-bucketed table.- Specified by:
reprocessChunk
in interfaceUpdateByOperator
- Parameters:
updateContext
- the context objectinputKeys
- the keys contained in the chunkkeyChunk
- aLongChunk
containing the keys if requested byUpdateByOperator.requiresKeys()
or null.valuesChunk
- the current chunk of working values.postUpdateSourceIndex
- the resulting source index af
-
reprocessChunk
public void reprocessChunk(@NotNull UpdateByOperator.UpdateContext updateContext, @NotNull OrderedKeys chunkOk, @NotNull Chunk<Attributes.Values> values, @NotNull LongChunk<? extends Attributes.KeyIndices> keyChunk, @NotNull IntChunk<Attributes.KeyIndices> bucketPositions, @NotNull IntChunk<Attributes.ChunkPositions> runStartPositions, @NotNull IntChunk<Attributes.ChunkLengths> runLengths) Description copied from interface:UpdateByOperator
Reprocess a chunk of data for a bucketed table.- Specified by:
reprocessChunk
in interfaceUpdateByOperator
- Parameters:
updateContext
- the context objectchunkOk
- the keys contained in the chunkvalues
- the current chunk of working values.keyChunk
- aLongChunk
containing the keys.bucketPositions
- aIntChunk
containing the bucket position of each key. Parallel to `keyChunk` and `valuesrunStartPositions
- the starting positions of each run within the key and value chunkrunLengths
- the run runLengths of each run in the key and value chunks. Parallel to `runStartPositions`
-
modifyChunk
public final void modifyChunk(@NotNull UpdateByOperator.UpdateContext updateContext, @Nullable LongChunk<Attributes.OrderedKeyIndices> prevKeyChunk, @Nullable LongChunk<Attributes.OrderedKeyIndices> keyChunk, @NotNull Chunk<Attributes.Values> prevValuesChunk, @NotNull Chunk<Attributes.Values> postValuesChunk, long bucketPosition) Description copied from interface:UpdateByOperator
Modify a chunk of values with the operation.- Specified by:
modifyChunk
in interfaceUpdateByOperator
- Parameters:
updateContext
- the context objectprevKeyChunk
- a chunk of pre-shift keys. This will be equal tokeyChunk
if no shift is presentkeyChunk
- a chunk of post-shift space keys for the update.prevValuesChunk
- a chunk of previous values for the updatepostValuesChunk
- a chunk of current values for the updatebucketPosition
- the position of the current group being processed
-
removeChunk
public final void removeChunk(@NotNull UpdateByOperator.UpdateContext updateContext, @Nullable LongChunk<Attributes.OrderedKeyIndices> keyChunk, @NotNull Chunk<Attributes.Values> prevValuesChunk, long bucketPosition) Description copied from interface:UpdateByOperator
Remove a chunk of values from the operation.- Specified by:
removeChunk
in interfaceUpdateByOperator
- Parameters:
updateContext
- the context objectkeyChunk
- a chunk of keys being removed.prevValuesChunk
- the chunk of values being removedbucketPosition
- the position of the current group being processed
-
applyShift
public final void applyShift(@NotNull UpdateByOperator.UpdateContext updateContext, @NotNull ReadOnlyIndex prevIndex, @NotNull IndexShiftData shifted) Description copied from interface:UpdateByOperator
Apply a shift to the operation.- Specified by:
applyShift
in interfaceUpdateByOperator
- Parameters:
updateContext
- the context objectprevIndex
- the pre-shifted indexshifted
- the shifts being applied
-