This is an automated email from the ASF dual-hosted git repository.
xiangfu0 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 3f7a922c287 Support UUID literals in request context (#19155)
3f7a922c287 is described below
commit 3f7a922c2877421075ef5ef3609233d426af653e
Author: Xiang Fu <[email protected]>
AuthorDate: Tue Aug 4 16:40:13 2026 -0700
Support UUID literals in request context (#19155)
---
.../common/request/context/LiteralContext.java | 4 ++++
.../pinot/common/utils/request/RequestUtils.java | 5 +++++
.../common/request/context/LiteralContextTest.java | 11 +++++++++++
.../common/utils/request/RequestUtilsTest.java | 22 ++++++++++++++++++++++
4 files changed, 42 insertions(+)
diff --git
a/pinot-common/src/main/java/org/apache/pinot/common/request/context/LiteralContext.java
b/pinot-common/src/main/java/org/apache/pinot/common/request/context/LiteralContext.java
index 744cdca228f..15c56cffddc 100644
---
a/pinot-common/src/main/java/org/apache/pinot/common/request/context/LiteralContext.java
+++
b/pinot-common/src/main/java/org/apache/pinot/common/request/context/LiteralContext.java
@@ -147,6 +147,7 @@ public class LiteralContext {
_pinotDataType = getPinotDataType(type, value);
}
+ // TODO: Revisit MV support for BOOLEAN, BIG_DECIMAL, BYTES and UUID.
@Nullable
private static PinotDataType getPinotDataType(DataType type, @Nullable
Object value) {
if (value == null) {
@@ -174,6 +175,9 @@ public class LiteralContext {
return PinotDataType.BIG_DECIMAL;
case STRING:
return singleValue ? PinotDataType.STRING : PinotDataType.STRING_ARRAY;
+ case UUID:
+ Preconditions.checkState(singleValue, "UUID array is not supported");
+ return PinotDataType.UUID;
default:
throw new IllegalStateException("Unsupported DataType: " + type);
}
diff --git
a/pinot-common/src/main/java/org/apache/pinot/common/utils/request/RequestUtils.java
b/pinot-common/src/main/java/org/apache/pinot/common/utils/request/RequestUtils.java
index 9545275d820..20e1765d0f1 100644
---
a/pinot-common/src/main/java/org/apache/pinot/common/utils/request/RequestUtils.java
+++
b/pinot-common/src/main/java/org/apache/pinot/common/utils/request/RequestUtils.java
@@ -36,6 +36,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.UUID;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
import org.apache.calcite.sql.SqlKind;
@@ -58,6 +59,7 @@ import org.apache.pinot.spi.utils.BytesUtils;
import org.apache.pinot.spi.utils.CommonConstants;
import org.apache.pinot.spi.utils.CommonConstants.Broker.Request;
import org.apache.pinot.spi.utils.TimestampIndexUtils;
+import org.apache.pinot.spi.utils.UuidUtils;
import org.apache.pinot.sql.FilterKind;
import org.apache.pinot.sql.parsers.CalciteSqlParser;
import org.apache.pinot.sql.parsers.SqlCompilationException;
@@ -208,6 +210,9 @@ public class RequestUtils {
if (object instanceof byte[]) {
return getLiteral((byte[]) object);
}
+ if (object instanceof UUID) {
+ return getLiteral(UuidUtils.toBytes((UUID) object));
+ }
if (object instanceof int[]) {
return getLiteral((int[]) object);
}
diff --git
a/pinot-common/src/test/java/org/apache/pinot/common/request/context/LiteralContextTest.java
b/pinot-common/src/test/java/org/apache/pinot/common/request/context/LiteralContextTest.java
index 9a1b9bf7fea..e1ac283c440 100644
---
a/pinot-common/src/test/java/org/apache/pinot/common/request/context/LiteralContextTest.java
+++
b/pinot-common/src/test/java/org/apache/pinot/common/request/context/LiteralContextTest.java
@@ -20,11 +20,13 @@ package org.apache.pinot.common.request.context;
import java.math.BigDecimal;
import java.sql.Timestamp;
+import java.util.UUID;
import org.apache.pinot.common.request.Literal;
import org.apache.pinot.spi.data.FieldSpec.DataType;
import org.apache.pinot.spi.utils.BigDecimalUtils;
import org.apache.pinot.spi.utils.BytesUtils;
import org.apache.pinot.spi.utils.CommonConstants.NullValuePlaceHolder;
+import org.apache.pinot.spi.utils.UuidUtils;
import org.testng.annotations.Test;
import static org.testng.Assert.*;
@@ -222,4 +224,13 @@ public class LiteralContextTest {
assertFalse(literalContext.isNull());
assertEquals(literalContext.toString(), "'deadbeef'");
}
+
+ @Test
+ public void testUuidLiteral() {
+ UUID uuid = UUID.fromString("550e8400-e29b-41d4-a716-446655440000");
+ LiteralContext literalContext = new LiteralContext(DataType.UUID, uuid);
+
+ assertEquals(literalContext.getStringValue(), uuid.toString());
+ assertEquals(literalContext.getBytesValue(), UuidUtils.toBytes(uuid));
+ }
}
diff --git
a/pinot-common/src/test/java/org/apache/pinot/common/utils/request/RequestUtilsTest.java
b/pinot-common/src/test/java/org/apache/pinot/common/utils/request/RequestUtilsTest.java
index 2ab30c9603a..c489740fb07 100644
---
a/pinot-common/src/test/java/org/apache/pinot/common/utils/request/RequestUtilsTest.java
+++
b/pinot-common/src/test/java/org/apache/pinot/common/utils/request/RequestUtilsTest.java
@@ -20,6 +20,7 @@ package org.apache.pinot.common.utils.request;
import java.util.List;
import java.util.Set;
+import java.util.UUID;
import org.apache.calcite.sql.SqlDialect;
import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.SqlLiteral;
@@ -28,6 +29,8 @@ import org.apache.pinot.common.request.Expression;
import org.apache.pinot.common.request.ExpressionType;
import org.apache.pinot.common.request.Function;
import org.apache.pinot.common.request.Identifier;
+import org.apache.pinot.common.request.Literal;
+import org.apache.pinot.spi.utils.UuidUtils;
import org.apache.pinot.sql.parsers.CalciteSqlParser;
import org.apache.pinot.sql.parsers.PinotSqlType;
import org.apache.pinot.sql.parsers.SqlNodeAndOptions;
@@ -88,6 +91,25 @@ public class RequestUtilsTest {
assertEquals(literalExpression.getLiteral().getLongValue(), 4500L);
}
+ @Test
+ public void testGetLiteralForUuid() {
+ UUID uuid = UUID.fromString("550e8400-e29b-41d4-a716-446655440000");
+ Literal literal = RequestUtils.getLiteral(uuid);
+
+ assertTrue(literal.isSetBinaryValue());
+ assertEquals(literal.getBinaryValue(), UuidUtils.toBytes(uuid));
+ }
+
+ @Test
+ public void testUuidCastFoldsToBinaryLiteral() {
+ UUID uuid = UUID.fromString("550e8400-e29b-41d4-a716-446655440000");
+ Expression expression = CalciteSqlParser.compileToPinotQuery(
+ "SELECT CAST('" + uuid + "' AS UUID) FROM
myTable").getSelectList().get(0);
+
+ assertTrue(expression.isSetLiteral());
+ assertEquals(expression.getLiteral().getBinaryValue(),
UuidUtils.toBytes(uuid));
+ }
+
@Test
public void testParseQuery() {
SqlNodeAndOptions result = RequestUtils.parseQuery("select foo from
countries where bar > 1");
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]