Skip to content

Commit 252e0ff

Browse files
authored
chore: Support FLOAT32 in Cloud Client Executor (#3056)
1. Add support for FLOAT32 in cloud client executor 2. Also allow integration tests to run FLOAT32 type against prod
1 parent eb62572 commit 252e0ff

File tree

2 files changed

+42
-11
lines changed

2 files changed

+42
-11
lines changed

google-cloud-spanner-executor/src/main/java/com/google/cloud/executor/spanner/CloudClientExecutor.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2719,6 +2719,9 @@ private com.google.spanner.executor.v1.ValueList buildRow(
27192719
case BOOL:
27202720
value.setBoolValue(result.getBoolean(i));
27212721
break;
2722+
case FLOAT32:
2723+
value.setDoubleValue((double) result.getFloat(i));
2724+
break;
27222725
case FLOAT64:
27232726
value.setDoubleValue(result.getDouble(i));
27242727
break;
@@ -2765,6 +2768,25 @@ private com.google.spanner.executor.v1.ValueList buildRow(
27652768
com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.BOOL).build());
27662769
}
27672770
break;
2771+
case FLOAT32:
2772+
{
2773+
com.google.spanner.executor.v1.ValueList.Builder builder =
2774+
com.google.spanner.executor.v1.ValueList.newBuilder();
2775+
List<Float> values = result.getFloatList(i);
2776+
for (Float floatValue : values) {
2777+
com.google.spanner.executor.v1.Value.Builder valueProto =
2778+
com.google.spanner.executor.v1.Value.newBuilder();
2779+
if (floatValue == null) {
2780+
builder.addValue(valueProto.setIsNull(true).build());
2781+
} else {
2782+
builder.addValue(valueProto.setDoubleValue((double) floatValue).build());
2783+
}
2784+
}
2785+
value.setArrayValue(builder.build());
2786+
value.setArrayType(
2787+
com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.FLOAT32).build());
2788+
}
2789+
break;
27682790
case FLOAT64:
27692791
{
27702792
com.google.spanner.executor.v1.ValueList.Builder builder =
@@ -3086,6 +3108,9 @@ private static com.google.cloud.spanner.Value valueProtoToCloudValue(
30863108
switch (type.getCode()) {
30873109
case INT64:
30883110
return com.google.cloud.spanner.Value.int64(value.hasIsNull() ? null : value.getIntValue());
3111+
case FLOAT32:
3112+
return com.google.cloud.spanner.Value.float32(
3113+
value.hasIsNull() ? null : (float) value.getDoubleValue());
30893114
case FLOAT64:
30903115
return com.google.cloud.spanner.Value.float64(
30913116
value.hasIsNull() ? null : value.getDoubleValue());
@@ -3142,6 +3167,19 @@ private static com.google.cloud.spanner.Value valueProtoToCloudValue(
31423167
.map(com.google.spanner.executor.v1.Value::getIntValue)
31433168
.collect(Collectors.toList())));
31443169
}
3170+
case FLOAT32:
3171+
if (value.hasIsNull()) {
3172+
return com.google.cloud.spanner.Value.float32Array((Iterable<Float>) null);
3173+
} else {
3174+
return com.google.cloud.spanner.Value.float32Array(
3175+
unmarshallValueList(
3176+
value.getArrayValue().getValueList().stream()
3177+
.map(com.google.spanner.executor.v1.Value::getIsNull)
3178+
.collect(Collectors.toList()),
3179+
value.getArrayValue().getValueList().stream()
3180+
.map(v -> (float) v.getDoubleValue())
3181+
.collect(Collectors.toList())));
3182+
}
31453183
case FLOAT64:
31463184
if (value.hasIsNull()) {
31473185
return com.google.cloud.spanner.Value.float64Array((Iterable<Double>) null);
@@ -3382,6 +3420,8 @@ private static com.google.cloud.spanner.Type typeProtoToCloudType(
33823420
return com.google.cloud.spanner.Type.string();
33833421
case BYTES:
33843422
return com.google.cloud.spanner.Type.bytes();
3423+
case FLOAT32:
3424+
return com.google.cloud.spanner.Type.float32();
33853425
case FLOAT64:
33863426
return com.google.cloud.spanner.Type.float64();
33873427
case DATE:
@@ -3430,6 +3470,8 @@ private static com.google.spanner.v1.Type cloudTypeToTypeProto(@Nonnull Type clo
34303470
return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.BOOL).build();
34313471
case INT64:
34323472
return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.INT64).build();
3473+
case FLOAT32:
3474+
return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.FLOAT32).build();
34333475
case FLOAT64:
34343476
return com.google.spanner.v1.Type.newBuilder().setCode(TypeCode.FLOAT64).build();
34353477
case STRING:

google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITFloat32Test.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,12 @@
1717
package com.google.cloud.spanner.it;
1818

1919
import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator;
20-
import static com.google.common.base.Strings.isNullOrEmpty;
2120
import static org.junit.Assert.assertArrayEquals;
2221
import static org.junit.Assert.assertEquals;
2322
import static org.junit.Assert.assertFalse;
2423
import static org.junit.Assert.assertThrows;
2524
import static org.junit.Assert.assertTrue;
2625
import static org.junit.Assume.assumeFalse;
27-
import static org.junit.Assume.assumeTrue;
2826

2927
import com.google.cloud.Timestamp;
3028
import com.google.cloud.spanner.Database;
@@ -92,18 +90,9 @@ public static List<DialectTestParameter> data() {
9290

9391
private static DatabaseClient client;
9492

95-
private static boolean isUsingCloudDevel() {
96-
String jobType = System.getenv("JOB_TYPE");
97-
98-
// Assumes that the jobType contains the string "cloud-devel" to signal that
99-
// the environment is cloud-devel.
100-
return !isNullOrEmpty(jobType) && jobType.contains("cloud-devel");
101-
}
102-
10393
@BeforeClass
10494
public static void setUpDatabase()
10595
throws ExecutionException, InterruptedException, TimeoutException {
106-
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());
10796
assumeFalse("Emulator does not support FLOAT32 yet", isUsingEmulator());
10897

10998
Database googleStandardSQLDatabase =

0 commit comments

Comments
 (0)