This is an automated email from the ASF dual-hosted git repository.

yhu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git


The following commit(s) were added to refs/heads/master by this push:
     new 7af4bc129b0 correcting array truncation logic (resolves #34276) 
(#34421)
7af4bc129b0 is described below

commit 7af4bc129b03800f1ea320d62ca3771df4d3db5f
Author: TanuSharma2511 <[email protected]>
AuthorDate: Thu Mar 27 18:33:41 2025 +0530

    correcting array truncation logic (resolves #34276) (#34421)
---
 .../apache/beam/sdk/io/gcp/spanner/SpannerSchema.java   | 17 +++++++++++++----
 .../beam/sdk/io/gcp/spanner/SpannerSchemaTest.java      |  6 +++++-
 2 files changed, 18 insertions(+), 5 deletions(-)

diff --git 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchema.java
 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchema.java
index 666cde876ee..ebe5815d568 100644
--- 
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchema.java
+++ 
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchema.java
@@ -23,6 +23,8 @@ import com.google.cloud.spanner.Type;
 import java.io.Serializable;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import 
org.apache.beam.vendor.guava.v32_1_2_jre.com.google.common.annotations.VisibleForTesting;
 import 
org.apache.beam.vendor.guava.v32_1_2_jre.com.google.common.collect.ImmutableList;
 import 
org.apache.beam.vendor.guava.v32_1_2_jre.com.google.common.collect.ImmutableListMultimap;
@@ -207,10 +209,17 @@ public abstract class SpannerSchema implements 
Serializable {
           }
           if (spannerType.startsWith("ARRAY")) {
             // Substring "ARRAY<xxx>"
-            String spannerArrayType =
-                originalSpannerType.substring(6, originalSpannerType.length() 
- 1);
-            Type itemType = parseSpannerType(spannerArrayType, dialect);
-            return Type.array(itemType);
+            Pattern pattern = Pattern.compile("ARRAY<([^>(]+)>");
+            Matcher matcher = pattern.matcher(originalSpannerType);
+
+            if (matcher.find()) {
+              String spannerArrayType = matcher.group(1).trim();
+              Type itemType = parseSpannerType(spannerArrayType, dialect);
+              return Type.array(itemType);
+            } else {
+              // Handle the case where the regex doesn't match (invalid ARRAY 
type)
+              throw new IllegalArgumentException("Invalid ARRAY type: " + 
originalSpannerType);
+            }
           }
           if (spannerType.startsWith("PROTO")) {
             // Substring "PROTO<xxx>"
diff --git 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchemaTest.java
 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchemaTest.java
index b82a1d4fbdd..14f3dbdd4ed 100644
--- 
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchemaTest.java
+++ 
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/SpannerSchemaTest.java
@@ -42,10 +42,12 @@ public class SpannerSchemaTest {
             .addColumn("test", "enumVal", "ENUM<customer.app.TestEnum>")
             .addColumn("test", "tokens", "TOKENLIST")
             .addColumn("test", "uuidCol", "UUID")
+            .addColumn("test", "arrayVal", 
"ARRAY<FLOAT32>(vector_length=>256)")
+            .addColumn("test", "arrayValue", "ARRAY<FLOAT32>")
             .build();
 
     assertEquals(1, schema.getTables().size());
-    assertEquals(8, schema.getColumns("test").size());
+    assertEquals(10, schema.getColumns("test").size());
     assertEquals(1, schema.getKeyParts("test").size());
     assertEquals(Type.json(), schema.getColumns("test").get(3).getType());
     assertEquals(
@@ -54,6 +56,8 @@ public class SpannerSchemaTest {
         Type.protoEnum("customer.app.TestEnum"), 
schema.getColumns("test").get(5).getType());
     assertEquals(Type.bytes(), schema.getColumns("test").get(6).getType());
     assertEquals(Type.string(), schema.getColumns("test").get(7).getType());
+    assertEquals(Type.array(Type.float32()), 
schema.getColumns("test").get(8).getType());
+    assertEquals(Type.array(Type.float32()), 
schema.getColumns("test").get(9).getType());
   }
 
   @Test

Reply via email to