From afb32605e6e73ba138c7fe857618814a68177a6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?= Date: Sun, 4 Dec 2022 12:24:57 +0100 Subject: [PATCH] test: mock Spanner did not create jsonb parameters The mock Spanner server that is used for testing did not create statements with PG JSONB typed parameters. Instead, all parameters with TypeCode JSON would create statements with parameters of type JSON, regardless of any TypeAnnotationCode. --- .../cloud/spanner/MockSpannerServiceImpl.java | 39 ++++++++++++++----- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java index 340f999d8ee..29ab79450b5 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/MockSpannerServiceImpl.java @@ -1289,7 +1289,11 @@ private Statement buildStatement( builder.bind(fieldName).toTimestampArray(null); break; case JSON: - builder.bind(fieldName).toJsonArray(null); + if (elementType.getTypeAnnotation() == TypeAnnotationCode.PG_JSONB) { + builder.bind(fieldName).toPgJsonbArray(null); + } else { + builder.bind(fieldName).toJsonArray(null); + } break; case STRUCT: case TYPE_CODE_UNSPECIFIED: @@ -1331,7 +1335,11 @@ private Statement buildStatement( builder.bind(fieldName).to((com.google.cloud.Timestamp) null); break; case JSON: - builder.bind(fieldName).to(Value.json(null)); + if (fieldType.getTypeAnnotation() == TypeAnnotationCode.PG_JSONB) { + builder.bind(fieldName).to(Value.pgJsonb(null)); + } else { + builder.bind(fieldName).to(Value.json(null)); + } break; case TYPE_CODE_UNSPECIFIED: case UNRECOGNIZED: @@ -1416,12 +1424,21 @@ private Statement buildStatement( com.google.cloud.spanner.Type.timestamp(), value.getListValue())); break; case JSON: - builder - .bind(fieldName) - .toJsonArray( - (Iterable) - GrpcStruct.decodeArrayValue( - com.google.cloud.spanner.Type.json(), value.getListValue())); + if (elementType.getTypeAnnotation() == TypeAnnotationCode.PG_JSONB) { + builder + .bind(fieldName) + .toPgJsonbArray( + (Iterable) + GrpcStruct.decodeArrayValue( + com.google.cloud.spanner.Type.pgJsonb(), value.getListValue())); + } else { + builder + .bind(fieldName) + .toJsonArray( + (Iterable) + GrpcStruct.decodeArrayValue( + com.google.cloud.spanner.Type.json(), value.getListValue())); + } break; case STRUCT: case TYPE_CODE_UNSPECIFIED: @@ -1464,7 +1481,11 @@ private Statement buildStatement( .to(com.google.cloud.Timestamp.parseTimestamp(value.getStringValue())); break; case JSON: - builder.bind(fieldName).to(Value.json(value.getStringValue())); + if (fieldType.getTypeAnnotation() == TypeAnnotationCode.PG_JSONB) { + builder.bind(fieldName).to(Value.pgJsonb(value.getStringValue())); + } else { + builder.bind(fieldName).to(Value.json(value.getStringValue())); + } break; case TYPE_CODE_UNSPECIFIED: case UNRECOGNIZED: