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]

Reply via email to