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 5fbd079168 Fix literal type handling in LiteralValueExtractor (#13715)
5fbd079168 is described below
commit 5fbd07916897b5d45bb644c890ff7a1aeda409f9
Author: Yash Mayya <[email protected]>
AuthorDate: Wed Aug 14 10:11:22 2024 +0530
Fix literal type handling in LiteralValueExtractor (#13715)
---
.../pinot/core/query/reduce/GapfillFilterHandler.java | 2 +-
.../core/query/reduce/PostAggregationHandler.java | 2 +-
.../query/reduce/filter/LiteralValueExtractor.java | 13 ++++++++-----
.../core/query/reduce/PostAggregationHandlerTest.java | 18 ++++++++++++++++++
4 files changed, 28 insertions(+), 7 deletions(-)
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/GapfillFilterHandler.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/GapfillFilterHandler.java
index 6f694cc04e..8ec110a0cf 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/GapfillFilterHandler.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/GapfillFilterHandler.java
@@ -67,7 +67,7 @@ public class GapfillFilterHandler implements
ValueExtractorFactory {
expression = GapfillUtils.stripGapfill(expression);
if (expression.getType() == ExpressionContext.Type.LITERAL) {
// Literal
- return new
LiteralValueExtractor(expression.getLiteral().getStringValue());
+ return new LiteralValueExtractor(expression.getLiteral());
}
if (expression.getType() == ExpressionContext.Type.IDENTIFIER) {
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/PostAggregationHandler.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/PostAggregationHandler.java
index efa4445872..4c4bcaf03c 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/PostAggregationHandler.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/PostAggregationHandler.java
@@ -108,7 +108,7 @@ public class PostAggregationHandler implements
ValueExtractorFactory {
public ValueExtractor getValueExtractor(ExpressionContext expression) {
if (expression.getType() == ExpressionContext.Type.LITERAL) {
// Literal
- return new
LiteralValueExtractor(expression.getLiteral().getStringValue());
+ return new LiteralValueExtractor(expression.getLiteral());
}
if (_numGroupByExpressions > 0) {
Integer groupByExpressionIndex =
_groupByExpressionIndexMap.get(expression);
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/filter/LiteralValueExtractor.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/filter/LiteralValueExtractor.java
index 82f06bdf18..3622cba5ee 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/filter/LiteralValueExtractor.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/reduce/filter/LiteralValueExtractor.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.reduce.filter;
+import org.apache.pinot.common.request.context.LiteralContext;
import org.apache.pinot.common.utils.DataSchema.ColumnDataType;
@@ -25,24 +26,26 @@ import
org.apache.pinot.common.utils.DataSchema.ColumnDataType;
* Value extractor for a literal.
*/
public class LiteralValueExtractor implements ValueExtractor {
- private final String _literal;
+ private final LiteralContext _literal;
- public LiteralValueExtractor(String literal) {
+ public LiteralValueExtractor(LiteralContext literal) {
_literal = literal;
}
@Override
public String getColumnName() {
- return '\'' + _literal + '\'';
+ return _literal.toString();
}
@Override
public ColumnDataType getColumnDataType() {
- return ColumnDataType.STRING;
+ ColumnDataType columnDataType =
ColumnDataType.fromDataType(_literal.getType(), _literal.isSingleValue());
+ // Handle unrecognized result class with STRING
+ return columnDataType == ColumnDataType.UNKNOWN ? ColumnDataType.STRING :
columnDataType;
}
@Override
public Object extract(Object[] row) {
- return _literal;
+ return _literal.getValue();
}
}
diff --git
a/pinot-core/src/test/java/org/apache/pinot/core/query/reduce/PostAggregationHandlerTest.java
b/pinot-core/src/test/java/org/apache/pinot/core/query/reduce/PostAggregationHandlerTest.java
index f07f19eca7..f824d9a417 100644
---
a/pinot-core/src/test/java/org/apache/pinot/core/query/reduce/PostAggregationHandlerTest.java
+++
b/pinot-core/src/test/java/org/apache/pinot/core/query/reduce/PostAggregationHandlerTest.java
@@ -120,4 +120,22 @@ public class PostAggregationHandlerTest {
assertEquals(handler.getResult(new Object[]{6, 7L, 8.0, 9.0, 10.0}), new
Object[]{5.5, 7L});
}
}
+
+ @Test
+ public void testLiteralTypeHandling() {
+ QueryContext queryContext = QueryContextConverterUtils
+ .getQueryContext("SELECT COUNT(*), 1 FROM testTable GROUP BY d1");
+ DataSchema dataSchema =
+ new DataSchema(new String[]{"d1", "count(*)"}, new
ColumnDataType[]{ColumnDataType.INT, ColumnDataType.LONG});
+ PostAggregationHandler postAggregationHandler = new
PostAggregationHandler(queryContext, dataSchema);
+
+
assertEquals(postAggregationHandler.getResultDataSchema().getColumnDataTypes(),
+ new ColumnDataType[]{ColumnDataType.LONG, ColumnDataType.INT});
+
+ queryContext = QueryContextConverterUtils
+ .getQueryContext("SELECT COUNT(*), '1' FROM testTable GROUP BY d1");
+ postAggregationHandler = new PostAggregationHandler(queryContext,
dataSchema);
+
assertEquals(postAggregationHandler.getResultDataSchema().getColumnDataTypes(),
+ new ColumnDataType[]{ColumnDataType.LONG, ColumnDataType.STRING});
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]