From 2498da01c127aab696344f31f9b4325fdce3911c Mon Sep 17 00:00:00 2001 From: Baodi Shi Date: Thu, 12 Sep 2024 20:30:24 +0800 Subject: [PATCH] [fix][sql][branch-3.0] Fix UUID convert failed for JSON schema (#23292) (cherry picked from commit 4d6310cd5828245bb9fe9429f837e11aa8bad565) --- .../sql/presto/decoder/json/PulsarJsonFieldDecoder.java | 5 +++++ .../pulsar/sql/presto/decoder/json/TestJsonDecoder.java | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/pulsar-sql/presto-pulsar/src/main/java/org/apache/pulsar/sql/presto/decoder/json/PulsarJsonFieldDecoder.java b/pulsar-sql/presto-pulsar/src/main/java/org/apache/pulsar/sql/presto/decoder/json/PulsarJsonFieldDecoder.java index 8e744e3b1229c..c396fbb85e24e 100644 --- a/pulsar-sql/presto-pulsar/src/main/java/org/apache/pulsar/sql/presto/decoder/json/PulsarJsonFieldDecoder.java +++ b/pulsar-sql/presto-pulsar/src/main/java/org/apache/pulsar/sql/presto/decoder/json/PulsarJsonFieldDecoder.java @@ -64,6 +64,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.UUID; import org.apache.commons.lang3.tuple.Pair; /** @@ -276,6 +277,10 @@ public static double getDouble(JsonNode value, Type type, String columnName) { private static Slice getSlice(JsonNode value, Type type, String columnName) { String textValue = value.isValueNode() ? value.asText() : value.toString(); + if (type instanceof UuidType) { + return UuidType.javaUuidToTrinoUuid(UUID.fromString(textValue)); + } + Slice slice = utf8Slice(textValue); if (type instanceof VarcharType) { slice = truncateToLength(slice, type); diff --git a/pulsar-sql/presto-pulsar/src/test/java/org/apache/pulsar/sql/presto/decoder/json/TestJsonDecoder.java b/pulsar-sql/presto-pulsar/src/test/java/org/apache/pulsar/sql/presto/decoder/json/TestJsonDecoder.java index 32e71a53444cf..a5207d0012457 100644 --- a/pulsar-sql/presto-pulsar/src/test/java/org/apache/pulsar/sql/presto/decoder/json/TestJsonDecoder.java +++ b/pulsar-sql/presto-pulsar/src/test/java/org/apache/pulsar/sql/presto/decoder/json/TestJsonDecoder.java @@ -144,7 +144,7 @@ public void testPrimitiveType() { PulsarColumnHandle uuidHandle = new PulsarColumnHandle(getPulsarConnectorId().toString(), "uuidField", UuidType.UUID, false, false, "uuidField", null, null, PulsarColumnHandle.HandleKeyValueType.NONE); - checkValue(decodedRow, uuidHandle, message.uuidField.toString()); + checkValue(decodedRow, uuidHandle, UuidType.javaUuidToTrinoUuid(message.uuidField)); } @Test