Class BaseDoubleUpdateByOperator
java.lang.Object
com.illumon.iris.db.v2.updateby.internal.BaseDoubleUpdateByOperator
- All Implemented Interfaces:
UpdateByOperator
- Direct Known Subclasses:
BasePrimitiveEMAOperator,DoubleCumMinMaxOperator,DoubleCumProdOperator,DoubleCumSumOperator,DoubleDeltaOperator,DoubleFillByOperator
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from interface com.illumon.iris.db.v2.updateby.UpdateByOperator
UpdateByOperator.UpdateContext -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected DoubleArraySourceprotected booleanprotected final booleanprotected final WritableSource<Double>protected final WritableSource<Double>protected longprotected doubleThese are only used in grouped operationsFields inherited from interface com.illumon.iris.db.v2.updateby.UpdateByOperator
ZERO_LENGTH_OP_ARRAY -
Constructor Summary
ConstructorsConstructorDescriptionBaseDoubleUpdateByOperator(MatchPair pair, String[] affectingColumns, RedirectionIndex redirectionIndex) Construct a base operator for operations that produce double outputs. -
Method Summary
Modifier and TypeMethodDescriptionvoidaddChunk(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 booleanCheck if the update has modified any rows for this operator.voidapplyOutputShift(UpdateByOperator.UpdateContext context, ReadOnlyIndex subIndexToShift, long delta) Apply a shift to the operation.final voidapplyShift(UpdateByOperator.UpdateContext updateContext, ReadOnlyIndex prevIndex, IndexShiftData shifted) Apply a shift to the operation.booleanQuery if this operator can process the update normally, or if it can only reprocess.protected abstract voiddoAddChunk(BaseDoubleUpdateByOperator.Context ctx, OrderedKeys inputKeys, Chunk<Attributes.Values> workingChunk, long groupPosition) voidfinishFor(UpdateByOperator.UpdateContext updateContext, UpdateBy.UpdateType type) Perform and bookkeeping required at the end of a single part of the update.final ReadOnlyIndexGet 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 outputColumnSourcefor this operation.voidinitializeFor(UpdateByOperator.UpdateContext updateContext, ReadOnlyIndex updateIndex, UpdateBy.UpdateType type) Initialize the context for the specified stage of the update process.voidinitializeForUpdate(UpdateByOperator.UpdateContext context, ShiftAwareListener.Update upstream, ReadOnlyIndex resultSourceIndex, boolean usingBuckets, boolean isUpstreamAppendOnly) Initialize the operator for an update cycle.makeUpdateContext(int chunkSize) Make anUpdateByOperator.UpdateContextsuitable for use with non-bucketed updates.final voidmodifyChunk(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.voidonBucketsRemoved(ReadOnlyIndex removedBuckets) Called when some buckets have been completely emptied.final voidremoveChunk(UpdateByOperator.UpdateContext updateContext, LongChunk<Attributes.OrderedKeyIndices> keyChunk, Chunk<Attributes.Values> prevValuesChunk, long bucketPosition) Remove a chunk of values from the operation.voidreprocessChunk(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.voidreprocessChunk(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.booleanQuery if the operator requires key values for the current stage.booleanQuery if the operator requires values for the current stage.voidresetForReprocess(UpdateByOperator.UpdateContext context, ReadOnlyIndex sourceIndex, ColumnSource<?> inputSource, long firstUnmodifiedKey) Reset the operator to the state at the `firstModifiedKey` for non-bucketed operation.voidresetForReprocess(UpdateByOperator.UpdateContext ctx, ReadOnlyIndex bucketIndex, ColumnSource<?> inputSource, long bucketPosition, long firstUnmodifiedKey) Reset the operator to the state at the `firstModifiedKey` for the specified bucket.voidsetBucketCapacity(int capacity) Notify the operator of the current maximum bucket.voidsetChunkSize(UpdateByOperator.UpdateContext context, int chunkSize) Set the chunk size to be used for operations.voidIndicate 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, waitMethods inherited from interface com.illumon.iris.db.v2.updateby.UpdateByOperator
addChunk
-
Field Details
-
outputSource
-
maybeInnerSource
-
isRedirected
protected final boolean isRedirected -
bucketLastVal
-
singletonVal
protected double singletonValThese are only used in grouped operations -
singletonGroup
protected long singletonGroup -
initialized
protected boolean initialized
-
-
Constructor Details
-
BaseDoubleUpdateByOperator
public BaseDoubleUpdateByOperator(@NotNull MatchPair pair, @NotNull String[] affectingColumns, @Nullable RedirectionIndex redirectionIndex) Construct a base operator for operations that produce double outputs.- Parameters:
pair- theMatchPairthat 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.
-
-
Method Details
-
setChunkSize
Description copied from interface:UpdateByOperatorSet the chunk size to be used for operations. This is used during theUpdateBy.UpdateType.Reprocessphase when the chunks allocated during the normal processing phase may not be large enough.- Specified by:
setChunkSizein interfaceUpdateByOperator- Parameters:
context- the context objectchunkSize- the new chunk size
-
setBucketCapacity
public void setBucketCapacity(int capacity) Description copied from interface:UpdateByOperatorNotify the operator of the current maximum bucket.- Specified by:
setBucketCapacityin interfaceUpdateByOperator- Parameters:
capacity- the capacity
-
getInputColumnName
Description copied from interface:UpdateByOperatorGet the name of the input column this operator depends on.- Specified by:
getInputColumnNamein interfaceUpdateByOperator- Returns:
- the name of the input column
-
getAffectingColumnNames
Description copied from interface:UpdateByOperatorGet an array of column names that, when modified, affect the result of this computation.- Specified by:
getAffectingColumnNamesin interfaceUpdateByOperator- Returns:
- an array of column names that affect this operator.
-
getOutputColumnNames
Description copied from interface:UpdateByOperatorGet an array of the output column names.- Specified by:
getOutputColumnNamesin interfaceUpdateByOperator- Returns:
- the output column names.
-
getOutputColumns
Description copied from interface:UpdateByOperatorGet a map of outputName to outputColumnSourcefor this operation.- Specified by:
getOutputColumnsin interfaceUpdateByOperator- Returns:
- a map of output column name to output column source
-
makeUpdateContext
Description copied from interface:UpdateByOperatorMake anUpdateByOperator.UpdateContextsuitable for use with non-bucketed updates.- Specified by:
makeUpdateContextin 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:UpdateByOperatorInitialize the operator for an update cycle. This is invoked before any other update processing occurs.- Specified by:
initializeForUpdatein 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:UpdateByOperatorInitialize 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:
initializeForin 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:UpdateByOperatorPerform 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:
finishForin interfaceUpdateByOperator- Parameters:
updateContext- the context objecttype- the type of update being applied
-
requiresKeys
public boolean requiresKeys()Description copied from interface:UpdateByOperatorQuery 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:
requiresKeysin interfaceUpdateByOperator- Returns:
- true if the operator requires keys for this operation
-
requiresValues
Description copied from interface:UpdateByOperatorQuery if the operator requires values for the current stage.- Specified by:
requiresValuesin interfaceUpdateByOperator- Parameters:
context- the context object- Returns:
- true if values are required for compuitation
-
startTrackingPrev
public void startTrackingPrev()Description copied from interface:UpdateByOperatorIndicate that the operation should start tracking previous values for ticking updates.- Specified by:
startTrackingPrevin interfaceUpdateByOperator
-
getAdditionalModifications
@NotNull public final ReadOnlyIndex getAdditionalModifications(@NotNull UpdateByOperator.UpdateContext ctx) Description copied from interface:UpdateByOperatorGet 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:
getAdditionalModificationsin interfaceUpdateByOperator- Parameters:
ctx- the context object- Returns:
- a
indexof additional rows that were modified
-
anyModified
Description copied from interface:UpdateByOperatorCheck 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:
anyModifiedin interfaceUpdateByOperator- Parameters:
ctx- the context object- Returns:
- true if the update modified any rows.
-
onBucketsRemoved
Description copied from interface:UpdateByOperatorCalled when some buckets have been completely emptied. Operators can use this to reset internal states.- Specified by:
onBucketsRemovedin interfaceUpdateByOperator- Parameters:
removedBuckets- an index of removed bucket positions.
-
canProcessNormalUpdate
Description copied from interface:UpdateByOperatorQuery 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:
canProcessNormalUpdatein 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:UpdateByOperatorAdd a chunk of non-bucketed items to the operation.- Specified by:
addChunkin interfaceUpdateByOperator- Parameters:
updateContext- the context objectkeyChunk- a chunk of keys for the rows being added. If the operator returnsfalseforUpdateByOperator.requiresKeys()this will be null.values- the chunk of values for the rows being addedbucketPosition- the group position
-
doAddChunk
protected abstract void doAddChunk(@NotNull BaseDoubleUpdateByOperator.Context ctx, @NotNull OrderedKeys inputKeys, @NotNull Chunk<Attributes.Values> workingChunk, long groupPosition) -
applyOutputShift
public void applyOutputShift(@NotNull UpdateByOperator.UpdateContext context, @NotNull ReadOnlyIndex subIndexToShift, long delta) Description copied from interface:UpdateByOperatorApply a shift to the operation.- Specified by:
applyOutputShiftin 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:UpdateByOperatorReset 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_KEYindicates that the entire table needs to be recomputed.- Specified by:
resetForReprocessin 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:UpdateByOperatorReset 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:
resetForReprocessin 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:UpdateByOperatorReprocess a chunk of data for a non-bucketed table.- Specified by:
reprocessChunkin interfaceUpdateByOperator- Parameters:
updateContext- the context objectinputKeys- the keys contained in the chunkkeyChunk- aLongChunkcontaining 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:UpdateByOperatorReprocess a chunk of data for a bucketed table.- Specified by:
reprocessChunkin interfaceUpdateByOperator- Parameters:
updateContext- the context objectchunkOk- the keys contained in the chunkvalues- the current chunk of working values.keyChunk- aLongChunkcontaining the keys.bucketPositions- aIntChunkcontaining 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:UpdateByOperatorModify a chunk of values with the operation.- Specified by:
modifyChunkin interfaceUpdateByOperator- Parameters:
updateContext- the context objectprevKeyChunk- a chunk of pre-shift keys. This will be equal tokeyChunkif 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:UpdateByOperatorRemove a chunk of values from the operation.- Specified by:
removeChunkin 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:UpdateByOperatorApply a shift to the operation.- Specified by:
applyShiftin interfaceUpdateByOperator- Parameters:
updateContext- the context objectprevIndex- the pre-shifted indexshifted- the shifts being applied
-