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