From 9f3a5c943fe86a49d8c143ba6267a9b8b7221b28 Mon Sep 17 00:00:00 2001 From: Karol Sobczak Date: Fri, 8 Dec 2023 18:30:08 +0100 Subject: [PATCH] Support for 0 length copyRegion of dictionary last position checkValidRegion already validates that region is correct. Therefore copyRegion for position 42 and length 0 shoudn't fail for dictionary with 42 positions. --- .../src/main/java/io/trino/spi/block/DictionaryBlock.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/trino-spi/src/main/java/io/trino/spi/block/DictionaryBlock.java b/core/trino-spi/src/main/java/io/trino/spi/block/DictionaryBlock.java index 69c3902fd5e4..611eb63d5f89 100644 --- a/core/trino-spi/src/main/java/io/trino/spi/block/DictionaryBlock.java +++ b/core/trino-spi/src/main/java/io/trino/spi/block/DictionaryBlock.java @@ -420,6 +420,9 @@ public Block getRegion(int positionOffset, int length) public Block copyRegion(int position, int length) { checkValidRegion(positionCount, position, length); + if (length == 0) { + return dictionary.copyRegion(0, 0); + } // Avoid repeated volatile reads to the uniqueIds field int uniqueIds = this.uniqueIds; if (length <= 1 || (uniqueIds == dictionary.getPositionCount() && isSequentialIds)) {