diff --git a/core/trino-main/src/main/java/io/trino/operator/aggregation/DecimalAverageAggregation.java b/core/trino-main/src/main/java/io/trino/operator/aggregation/DecimalAverageAggregation.java index c8dc95dcdbe6..cf8ef849a062 100644 --- a/core/trino-main/src/main/java/io/trino/operator/aggregation/DecimalAverageAggregation.java +++ b/core/trino-main/src/main/java/io/trino/operator/aggregation/DecimalAverageAggregation.java @@ -56,15 +56,13 @@ private DecimalAverageAggregation() {} @LiteralParameters({"p", "s"}) public static void inputShortDecimal( @AggregationState LongDecimalWithOverflowAndLongState state, - @BlockPosition @SqlType(value = "decimal(p, s)", nativeContainerType = long.class) Block block, - @BlockIndex int position) + @SqlType("decimal(p,s)") long rightLow) { state.addLong(1); // row counter long[] decimal = state.getDecimalArray(); int offset = state.getDecimalArrayOffset(); - long rightLow = block.getLong(position, 0); long rightHigh = rightLow >> 63; long overflow = addWithOverflow( diff --git a/core/trino-main/src/main/java/io/trino/operator/aggregation/state/LongDecimalWithOverflowAndLongStateFactory.java b/core/trino-main/src/main/java/io/trino/operator/aggregation/state/LongDecimalWithOverflowAndLongStateFactory.java index 6084ac031b66..ba59e22c72e5 100644 --- a/core/trino-main/src/main/java/io/trino/operator/aggregation/state/LongDecimalWithOverflowAndLongStateFactory.java +++ b/core/trino-main/src/main/java/io/trino/operator/aggregation/state/LongDecimalWithOverflowAndLongStateFactory.java @@ -19,6 +19,7 @@ import javax.annotation.Nullable; +import static io.airlift.slice.SizeOf.SIZE_OF_LONG; import static io.airlift.slice.SizeOf.instanceSize; import static io.airlift.slice.SizeOf.sizeOf; import static java.lang.System.arraycopy; @@ -38,7 +39,7 @@ public LongDecimalWithOverflowAndLongState createGroupedState() return new GroupedLongDecimalWithOverflowAndLongState(); } - public static class GroupedLongDecimalWithOverflowAndLongState + private static final class GroupedLongDecimalWithOverflowAndLongState extends AbstractGroupedAccumulatorState implements LongDecimalWithOverflowAndLongState { @@ -135,11 +136,11 @@ public long getEstimatedSize() } } - public static class SingleLongDecimalWithOverflowAndLongState + private static final class SingleLongDecimalWithOverflowAndLongState implements LongDecimalWithOverflowAndLongState { private static final int INSTANCE_SIZE = instanceSize(SingleLongDecimalWithOverflowAndLongState.class); - private static final int SIZE = (int) sizeOf(new long[2]); + private static final int SIZE = (int) sizeOf(new long[2]) + SIZE_OF_LONG + SIZE_OF_LONG; private final long[] unscaledDecimal = new long[2]; private long longValue; diff --git a/core/trino-main/src/main/java/io/trino/operator/aggregation/state/LongDecimalWithOverflowStateFactory.java b/core/trino-main/src/main/java/io/trino/operator/aggregation/state/LongDecimalWithOverflowStateFactory.java index 9bc449cec9f0..69b59e00caff 100644 --- a/core/trino-main/src/main/java/io/trino/operator/aggregation/state/LongDecimalWithOverflowStateFactory.java +++ b/core/trino-main/src/main/java/io/trino/operator/aggregation/state/LongDecimalWithOverflowStateFactory.java @@ -20,6 +20,8 @@ import javax.annotation.Nullable; +import static io.airlift.slice.SizeOf.SIZE_OF_BYTE; +import static io.airlift.slice.SizeOf.SIZE_OF_LONG; import static io.airlift.slice.SizeOf.instanceSize; import static io.airlift.slice.SizeOf.sizeOf; import static java.lang.System.arraycopy; @@ -134,7 +136,7 @@ public static class SingleLongDecimalWithOverflowState implements LongDecimalWithOverflowState { private static final int INSTANCE_SIZE = instanceSize(SingleLongDecimalWithOverflowState.class); - private static final int SIZE = (int) sizeOf(new long[2]); + private static final int SIZE = (int) sizeOf(new long[2]) + SIZE_OF_BYTE + SIZE_OF_LONG; private final long[] unscaledDecimal = new long[2]; private boolean isNotNull; diff --git a/core/trino-main/src/main/java/io/trino/operator/aggregation/state/NullableBooleanState.java b/core/trino-main/src/main/java/io/trino/operator/aggregation/state/NullableBooleanState.java deleted file mode 100644 index 82b5b5bef2f7..000000000000 --- a/core/trino-main/src/main/java/io/trino/operator/aggregation/state/NullableBooleanState.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.trino.operator.aggregation.state; - -import io.trino.spi.block.BlockBuilder; -import io.trino.spi.function.AccumulatorState; -import io.trino.spi.function.AccumulatorStateMetadata; -import io.trino.spi.type.Type; - -@AccumulatorStateMetadata(stateSerializerClass = NullableBooleanStateSerializer.class) -public interface NullableBooleanState - extends AccumulatorState, NullableState -{ - boolean getValue(); - - void setValue(boolean value); - - @Override - @InitialBooleanValue(true) - boolean isNull(); - - void setNull(boolean value); - - default void set(NullableBooleanState state) - { - setValue(state.getValue()); - setNull(state.isNull()); - } - - static void write(Type type, NullableBooleanState state, BlockBuilder out) - { - if (state.isNull()) { - out.appendNull(); - } - else { - type.writeBoolean(out, state.getValue()); - } - } -} diff --git a/core/trino-main/src/main/java/io/trino/operator/aggregation/state/NullableBooleanStateSerializer.java b/core/trino-main/src/main/java/io/trino/operator/aggregation/state/NullableBooleanStateSerializer.java deleted file mode 100644 index 70f655673a47..000000000000 --- a/core/trino-main/src/main/java/io/trino/operator/aggregation/state/NullableBooleanStateSerializer.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package io.trino.operator.aggregation.state; - -import io.trino.spi.block.Block; -import io.trino.spi.block.BlockBuilder; -import io.trino.spi.function.AccumulatorStateSerializer; -import io.trino.spi.type.Type; - -import static io.trino.spi.type.BooleanType.BOOLEAN; - -public class NullableBooleanStateSerializer - implements AccumulatorStateSerializer -{ - @Override - public Type getSerializedType() - { - return BOOLEAN; - } - - @Override - public void serialize(NullableBooleanState state, BlockBuilder out) - { - if (state.isNull()) { - out.appendNull(); - } - else { - BOOLEAN.writeBoolean(out, state.getValue()); - } - } - - @Override - public void deserialize(Block block, int index, NullableBooleanState state) - { - if (block.isNull(index)) { - state.setNull(true); - } - else { - state.setNull(false); - state.setValue(BOOLEAN.getBoolean(block, index)); - } - } -} diff --git a/core/trino-main/src/test/java/io/trino/operator/aggregation/TestDecimalAverageAggregation.java b/core/trino-main/src/test/java/io/trino/operator/aggregation/TestDecimalAverageAggregation.java index d43607064b08..c960a3c3462e 100644 --- a/core/trino-main/src/test/java/io/trino/operator/aggregation/TestDecimalAverageAggregation.java +++ b/core/trino-main/src/test/java/io/trino/operator/aggregation/TestDecimalAverageAggregation.java @@ -227,12 +227,12 @@ private static void addToState(LongDecimalWithOverflowAndLongState state, BigInt private static void addToState(DecimalType type, LongDecimalWithOverflowAndLongState state, BigInteger value) { - BlockBuilder blockBuilder = type.createFixedSizeBlockBuilder(1); - type.writeObject(blockBuilder, Int128.valueOf(value)); if (type.isShort()) { - DecimalAverageAggregation.inputShortDecimal(state, blockBuilder.build(), 0); + DecimalAverageAggregation.inputShortDecimal(state, Int128.valueOf(value).toLongExact()); } else { + BlockBuilder blockBuilder = type.createFixedSizeBlockBuilder(1); + type.writeObject(blockBuilder, Int128.valueOf(value)); DecimalAverageAggregation.inputLongDecimal(state, blockBuilder.build(), 0); } }