This is an automated email from the ASF dual-hosted git repository. jackie pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push: new f903314645 Support NULL literal selection. (#10962) f903314645 is described below commit f90331464549e85da8c9c76e5ad8cb92f9cbd2aa Author: Shen Yu <s...@startree.ai> AuthorDate: Thu Jun 22 23:44:38 2023 -0700 Support NULL literal selection. (#10962) --- .../apache/pinot/core/common/RowBasedBlockValueFetcher.java | 11 +++++++++++ .../pinot/core/query/selection/SelectionOperatorUtils.java | 6 ++++++ .../pinot/integration/tests/NullHandlingIntegrationTest.java | 12 ++++++++++++ 3 files changed, 29 insertions(+) diff --git a/pinot-core/src/main/java/org/apache/pinot/core/common/RowBasedBlockValueFetcher.java b/pinot-core/src/main/java/org/apache/pinot/core/common/RowBasedBlockValueFetcher.java index 64a3f6a788..21c6d34f04 100644 --- a/pinot-core/src/main/java/org/apache/pinot/core/common/RowBasedBlockValueFetcher.java +++ b/pinot-core/src/main/java/org/apache/pinot/core/common/RowBasedBlockValueFetcher.java @@ -67,6 +67,8 @@ public class RowBasedBlockValueFetcher { return new StringSingleValueFetcher(blockValSet.getStringValuesSV()); case BYTES: return new BytesValueFetcher(blockValSet.getBytesValuesSV()); + case UNKNOWN: + return new UnknownValueFetcher(); default: throw new IllegalStateException("Unsupported value type: " + storedType + " for single-value column"); } @@ -235,4 +237,13 @@ public class RowBasedBlockValueFetcher { return _values[docId]; } } + + private static class UnknownValueFetcher implements ValueFetcher { + UnknownValueFetcher() { + } + + public Object getValue(int docId) { + return null; + } + } } diff --git a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorUtils.java b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorUtils.java index 5dc0bb5fbc..66bbefb3d1 100644 --- a/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorUtils.java +++ b/pinot-core/src/main/java/org/apache/pinot/core/query/selection/SelectionOperatorUtils.java @@ -315,6 +315,9 @@ public class SelectionOperatorUtils { case BYTES: dataTableBuilder.setColumn(i, (ByteArray) columnValue); break; + case UNKNOWN: + dataTableBuilder.setColumn(i, (Object) null); + break; // Multi-value column case INT_ARRAY: @@ -387,6 +390,9 @@ public class SelectionOperatorUtils { case BYTES: row[i] = dataTable.getBytes(rowId, i); break; + case UNKNOWN: + row[i] = null; + break; // Multi-value column case INT_ARRAY: diff --git a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/NullHandlingIntegrationTest.java b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/NullHandlingIntegrationTest.java index 5d8be32726..f1a66d7135 100644 --- a/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/NullHandlingIntegrationTest.java +++ b/pinot-integration-tests/src/test/java/org/apache/pinot/integration/tests/NullHandlingIntegrationTest.java @@ -326,4 +326,16 @@ public class NullHandlingIntegrationTest extends BaseClusterIntegrationTestSet { testQuery(pinotQuery, h2Query); } + + @Test + public void testSelectNullLiteral() throws Exception { + // Need to also select an identifier column to skip the all literal query optimization which returns without + // querying the segment. + String sqlQuery = "SELECT NULL, salary FROM mytable OPTION(enableNullHandling=true)"; + + JsonNode response = postQuery(sqlQuery, _brokerBaseApiUrl); + + JsonNode rows = response.get("resultTable").get("rows"); + assertEquals(rows.get(0).get(0).asText(), "null"); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org