Skip to content

Commit 1feacf4

Browse files
authored
fix!: DH-18471 update_by min/max functions to return original-typed output columns (#6629)
Add'l work performed: - Added `char` support to `CumMin`/`CumMax` and expanded tests - Added PartionedTable proxy tests
1 parent 3f9f781 commit 1feacf4

File tree

20 files changed

+410
-38
lines changed

20 files changed

+410
-38
lines changed

engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/UpdateByOperatorFactory.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -856,6 +856,8 @@ private UpdateByOperator makeCumMinMaxOperator(MatchPair pair, TableDefinition t
856856

857857
if (csType == byte.class || csType == Byte.class) {
858858
return new ByteCumMinMaxOperator(pair, isMax, NULL_BYTE);
859+
} else if (csType == char.class || csType == Character.class) {
860+
return new CharCumMinMaxOperator(pair, isMax);
859861
} else if (csType == short.class || csType == Short.class) {
860862
return new ShortCumMinMaxOperator(pair, isMax);
861863
} else if (csType == int.class || csType == Integer.class) {
@@ -1033,7 +1035,7 @@ private UpdateByOperator makeRollingGroupOperator(@NotNull final MatchPair[] pai
10331035

10341036
return new RollingGroupOperator(pairs, affectingColumns,
10351037
rg.revWindowScale().timestampCol(),
1036-
prevWindowScaleUnits, fwdWindowScaleUnits, tableDef);
1038+
prevWindowScaleUnits, fwdWindowScaleUnits);
10371039
}
10381040

10391041
private UpdateByOperator makeRollingAvgOperator(@NotNull final MatchPair pair,
@@ -1132,7 +1134,7 @@ private UpdateByOperator makeRollingMinMaxOperator(@NotNull MatchPair pair,
11321134
} else if (csType == long.class || csType == Long.class || isTimeType(csType)) {
11331135
return new LongRollingMinMaxOperator(pair, affectingColumns,
11341136
rmm.revWindowScale().timestampCol(),
1135-
prevWindowScaleUnits, fwdWindowScaleUnits, rmm.isMax());
1137+
prevWindowScaleUnits, fwdWindowScaleUnits, rmm.isMax(), csType);
11361138
} else if (csType == float.class || csType == Float.class) {
11371139
return new FloatRollingMinMaxOperator(pair, affectingColumns,
11381140
rmm.revWindowScale().timestampCol(),

engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/ByteCumMinMaxOperator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Copyright (c) 2016-2025 Deephaven Data Labs and Patent Pending
33
//
44
// ****** AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY
5-
// ****** Edit ShortCumMinMaxOperator and run "./gradlew replicateUpdateBy" to regenerate
5+
// ****** Edit CharCumMinMaxOperator and run "./gradlew replicateUpdateBy" to regenerate
66
//
77
// @formatter:off
88
package io.deephaven.engine.table.impl.updateby.minmax;
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
//
2+
// Copyright (c) 2016-2025 Deephaven Data Labs and Patent Pending
3+
//
4+
package io.deephaven.engine.table.impl.updateby.minmax;
5+
6+
import io.deephaven.base.verify.Assert;
7+
import io.deephaven.chunk.Chunk;
8+
import io.deephaven.chunk.CharChunk;
9+
import io.deephaven.chunk.attributes.Values;
10+
import io.deephaven.engine.table.impl.MatchPair;
11+
import io.deephaven.engine.table.impl.updateby.UpdateByOperator;
12+
import io.deephaven.engine.table.impl.updateby.internal.BaseCharUpdateByOperator;
13+
import org.jetbrains.annotations.NotNull;
14+
15+
import static io.deephaven.util.QueryConstants.*;
16+
17+
public class CharCumMinMaxOperator extends BaseCharUpdateByOperator {
18+
private final boolean isMax;
19+
20+
// region extra-fields
21+
// endregion extra-fields
22+
23+
protected class Context extends BaseCharUpdateByOperator.Context {
24+
public CharChunk<? extends Values> charValueChunk;
25+
26+
protected Context(final int chunkSize) {
27+
super(chunkSize);
28+
}
29+
30+
@Override
31+
public void setValueChunks(@NotNull final Chunk<? extends Values>[] valueChunks) {
32+
charValueChunk = valueChunks[0].asCharChunk();
33+
}
34+
35+
@Override
36+
public void push(int pos, int count) {
37+
Assert.eq(count, "push count", 1);
38+
39+
final char val = charValueChunk.get(pos);
40+
41+
if (curVal == NULL_CHAR) {
42+
curVal = val;
43+
} else if (val != NULL_CHAR) {
44+
if ((isMax && val > curVal) ||
45+
(!isMax && val < curVal)) {
46+
curVal = val;
47+
}
48+
}
49+
}
50+
}
51+
52+
public CharCumMinMaxOperator(
53+
@NotNull final MatchPair pair,
54+
final boolean isMax
55+
// region extra-constructor-args
56+
// endregion extra-constructor-args
57+
) {
58+
super(pair, new String[] {pair.rightColumn});
59+
this.isMax = isMax;
60+
// region constructor
61+
// endregion constructor
62+
}
63+
64+
@Override
65+
public UpdateByOperator copy() {
66+
return new CharCumMinMaxOperator(
67+
pair,
68+
isMax
69+
// region extra-copy-args
70+
// endregion extra-copy-args
71+
);
72+
}
73+
74+
@NotNull
75+
@Override
76+
public UpdateByOperator.Context makeUpdateContext(final int affectedChunkSize, final int influencerChunkSize) {
77+
return new Context(affectedChunkSize);
78+
}
79+
80+
// region extra-methods
81+
// endregion extra-methods
82+
}

engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/DoubleCumMinMaxOperator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Copyright (c) 2016-2025 Deephaven Data Labs and Patent Pending
33
//
44
// ****** AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY
5-
// ****** Edit ShortCumMinMaxOperator and run "./gradlew replicateUpdateBy" to regenerate
5+
// ****** Edit CharCumMinMaxOperator and run "./gradlew replicateUpdateBy" to regenerate
66
//
77
// @formatter:off
88
package io.deephaven.engine.table.impl.updateby.minmax;

engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/FloatCumMinMaxOperator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Copyright (c) 2016-2025 Deephaven Data Labs and Patent Pending
33
//
44
// ****** AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY
5-
// ****** Edit ShortCumMinMaxOperator and run "./gradlew replicateUpdateBy" to regenerate
5+
// ****** Edit CharCumMinMaxOperator and run "./gradlew replicateUpdateBy" to regenerate
66
//
77
// @formatter:off
88
package io.deephaven.engine.table.impl.updateby.minmax;

engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/IntCumMinMaxOperator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Copyright (c) 2016-2025 Deephaven Data Labs and Patent Pending
33
//
44
// ****** AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY
5-
// ****** Edit ShortCumMinMaxOperator and run "./gradlew replicateUpdateBy" to regenerate
5+
// ****** Edit CharCumMinMaxOperator and run "./gradlew replicateUpdateBy" to regenerate
66
//
77
// @formatter:off
88
package io.deephaven.engine.table.impl.updateby.minmax;

engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/LongCumMinMaxOperator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Copyright (c) 2016-2025 Deephaven Data Labs and Patent Pending
33
//
44
// ****** AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY
5-
// ****** Edit ShortCumMinMaxOperator and run "./gradlew replicateUpdateBy" to regenerate
5+
// ****** Edit CharCumMinMaxOperator and run "./gradlew replicateUpdateBy" to regenerate
66
//
77
// @formatter:off
88
package io.deephaven.engine.table.impl.updateby.minmax;

engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/minmax/ShortCumMinMaxOperator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
//
22
// Copyright (c) 2016-2025 Deephaven Data Labs and Patent Pending
33
//
4+
// ****** AUTO-GENERATED CLASS - DO NOT EDIT MANUALLY
5+
// ****** Edit CharCumMinMaxOperator and run "./gradlew replicateUpdateBy" to regenerate
6+
//
7+
// @formatter:off
48
package io.deephaven.engine.table.impl.updateby.minmax;
59

610
import io.deephaven.base.verify.Assert;

engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollinggroup/RollingGroupOperator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,8 +234,7 @@ public RollingGroupOperator(
234234
@NotNull final String[] affectingColumns,
235235
@Nullable final String timestampColumnName,
236236
final long reverseWindowScaleUnits,
237-
final long forwardWindowScaleUnits,
238-
@NotNull final TableDefinition tableDef) {
237+
final long forwardWindowScaleUnits) {
239238
super(pairs[0], affectingColumns, timestampColumnName, reverseWindowScaleUnits, forwardWindowScaleUnits, true);
240239

241240
this.pairs = pairs;

engine/table/src/main/java/io/deephaven/engine/table/impl/updateby/rollingminmax/ByteRollingMinMaxOperator.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,4 +168,7 @@ public UpdateByOperator copy() {
168168
// endregion extra-copy-args
169169
);
170170
}
171+
172+
// region extra-methods
173+
// endregion extra-methods
171174
}

0 commit comments

Comments
 (0)