From c9a8dfdcc0d16f71248e2c961cb201323cbbd6df Mon Sep 17 00:00:00 2001 From: Sri Harsha CH <57220027+harshachinta@users.noreply.github.com> Date: Tue, 6 Feb 2024 19:29:17 +0530 Subject: [PATCH 1/5] fix: cast for Proto type --- .../main/java/com/google/cloud/spanner/AbstractResultSet.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java index c18e64165bc..8283acdae38 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java @@ -485,7 +485,7 @@ private Object writeReplace() { case PROTO: builder .set(fieldName) - .to(Value.protoMessage((ByteArray) value, fieldType.getProtoTypeFqn())); + .to(Value.protoMessage(((LazyByteArray) value).getByteArray(), fieldType.getProtoTypeFqn())); break; case ENUM: builder.set(fieldName).to(Value.protoEnum((Long) value, fieldType.getProtoTypeFqn())); From 35dc65c0c651227b172eaeaf06ee7e530f39be1e Mon Sep 17 00:00:00 2001 From: Sri Harsha CH <57220027+harshachinta@users.noreply.github.com> Date: Tue, 6 Feb 2024 20:33:47 +0530 Subject: [PATCH 2/5] fix: add null check --- .../java/com/google/cloud/spanner/AbstractResultSet.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java index 8283acdae38..5bbc0527c83 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java @@ -485,7 +485,10 @@ private Object writeReplace() { case PROTO: builder .set(fieldName) - .to(Value.protoMessage(((LazyByteArray) value).getByteArray(), fieldType.getProtoTypeFqn())); + .to( + Value.protoMessage( + value == null ? null : ((LazyByteArray) value).getByteArray(), + fieldType.getProtoTypeFqn())); break; case ENUM: builder.set(fieldName).to(Value.protoEnum((Long) value, fieldType.getProtoTypeFqn())); From be0737918c70d88cd24e8682f7396007059990ce Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Thu, 8 Feb 2024 11:15:14 +0530 Subject: [PATCH 3/5] feat(spanner): add ENUM compatibility with getLongArray --- .../java/com/google/cloud/spanner/AbstractStructReader.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractStructReader.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractStructReader.java index 53c49a5a54b..3a8cf63f84f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractStructReader.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractStructReader.java @@ -340,14 +340,16 @@ public List getBooleanList(String columnName) { @Override public long[] getLongArray(int columnIndex) { - checkNonNullOfType(columnIndex, Type.array(Type.int64()), columnIndex); + checkNonNullOfCodes(columnIndex, Collections.singletonList(Code.ARRAY), columnIndex); + checkArrayElementType(columnIndex, Arrays.asList(Code.ENUM, Code.INT64), columnIndex); return getLongArrayInternal(columnIndex); } @Override public long[] getLongArray(String columnName) { int columnIndex = getColumnIndex(columnName); - checkNonNullOfType(columnIndex, Type.array(Type.int64()), columnName); + checkNonNullOfCodes(columnIndex, Collections.singletonList(Code.ARRAY), columnIndex); + checkArrayElementType(columnIndex, Arrays.asList(Code.ENUM, Code.INT64), columnIndex); return getLongArrayInternal(columnIndex); } From 5cbdf1b54737b6d6bcc4b0145ced4e0c550fdd58 Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Thu, 8 Feb 2024 15:47:33 +0530 Subject: [PATCH 4/5] feat: fix argument --- .../java/com/google/cloud/spanner/AbstractStructReader.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractStructReader.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractStructReader.java index 3a8cf63f84f..ef6f63d52ea 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractStructReader.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractStructReader.java @@ -348,8 +348,8 @@ public long[] getLongArray(int columnIndex) { @Override public long[] getLongArray(String columnName) { int columnIndex = getColumnIndex(columnName); - checkNonNullOfCodes(columnIndex, Collections.singletonList(Code.ARRAY), columnIndex); - checkArrayElementType(columnIndex, Arrays.asList(Code.ENUM, Code.INT64), columnIndex); + checkNonNullOfCodes(columnIndex, Collections.singletonList(Code.ARRAY), columnName); + checkArrayElementType(columnIndex, Arrays.asList(Code.ENUM, Code.INT64), columnName); return getLongArrayInternal(columnIndex); } From a67dee77eb757bae3eb117a92c424ce3e7b98c84 Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Thu, 8 Feb 2024 19:21:03 +0530 Subject: [PATCH 5/5] feat: fix bug --- .../java/com/google/cloud/spanner/AbstractResultSet.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java index 5bbc0527c83..878ccc868ee 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java @@ -820,7 +820,8 @@ protected Value getValueInternal(int columnIndex) { case INT64: return Value.int64(isNull ? null : getLongInternal(columnIndex)); case ENUM: - return Value.protoEnum(getLongInternal(columnIndex), columnType.getProtoTypeFqn()); + return Value.protoEnum( + isNull ? null : getLongInternal(columnIndex), columnType.getProtoTypeFqn()); case NUMERIC: return Value.numeric(isNull ? null : getBigDecimalInternal(columnIndex)); case PG_NUMERIC: @@ -836,7 +837,8 @@ protected Value getValueInternal(int columnIndex) { case BYTES: return Value.internalBytes(isNull ? null : getLazyBytesInternal(columnIndex)); case PROTO: - return Value.protoMessage(getBytesInternal(columnIndex), columnType.getProtoTypeFqn()); + return Value.protoMessage( + isNull ? null : getBytesInternal(columnIndex), columnType.getProtoTypeFqn()); case TIMESTAMP: return Value.timestamp(isNull ? null : getTimestampInternal(columnIndex)); case DATE: