Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support float32 type #2894

Merged
merged 28 commits into from
Feb 28, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
1d64140
feat: float32 changes with unit and integration tests
arawind Dec 1, 2023
5a7fdc2
Merge branch 'main' into float32-v2
arawind Feb 15, 2024
1358bbb
Undo the changes to GceTestEnvConfig
arawind Feb 16, 2024
74b01e5
Update formatting and clirr
arawind Feb 16, 2024
6789155
Update the hashCode logic to account for NaN equality
arawind Feb 16, 2024
f1dbc8f
Prevent FLOAT32 integration tests from running on emulator and produc…
arawind Feb 19, 2024
5b493fa
Add a kokoro presubmit workflow to run on cloud-devel.
arawind Feb 20, 2024
80f80a9
Prevent FLOAT32 schema from being added if the env is not cloud-devel
arawind Feb 20, 2024
924ef75
Merge branch 'main' into float32-v2
arawind Feb 20, 2024
253c5f1
Merge branch 'main' into float32-v2
arawind Feb 22, 2024
fac44f0
Revert "Add a kokoro presubmit workflow to run on cloud-devel."
arawind Feb 22, 2024
391f735
Merge branch 'main' into float32-v2
arawind Feb 22, 2024
3e63abd
Fix integration tests for FLOAT32
arawind Feb 23, 2024
b64e627
Update float32UntypedParameters test to work with PG dialect too
arawind Feb 23, 2024
e18fd3f
Remove FLOAT32 changes in CreateMusicTables.sql as the type isn't ful…
arawind Feb 23, 2024
202b10c
🦉 Updates from OwlBot post-processor
gcf-owl-bot[bot] Feb 23, 2024
34a10e2
Merge branch 'float32-v2' of github.com:arawind/java-spanner into flo…
arawind Feb 23, 2024
fda3987
Split the parameters test in ITQueryTest into supported + currently-u…
arawind Feb 23, 2024
dbd12a9
Merge branch 'main' into float32-v2
arawind Feb 23, 2024
646e6eb
Minor changes in comments
arawind Feb 23, 2024
2988656
Split the Mutation.isNaN method to make it more readable
arawind Feb 23, 2024
738916c
Merge branch 'main' into float32-v2
arawind Feb 23, 2024
187182b
test: added some additional tests
olavloite Feb 23, 2024
7543083
Merge branch 'main' into float32-v2
arawind Feb 25, 2024
1057826
Update to resolve comments on PR#2894.
arawind Feb 25, 2024
dedf17e
Merge branch 'main' into float32-v2
arawind Feb 28, 2024
2dfe0df
Un-ignore the skipped FLOAT32 tests as the backend fixes have been de…
arawind Feb 28, 2024
8f6e21f
Un-ignore the float32 tests in ITQueryTest
arawind Feb 28, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Prev Previous commit
Next Next commit
Prevent FLOAT32 integration tests from running on emulator and produc…
…tion
  • Loading branch information
arawind committed Feb 19, 2024
commit f1dbc8fa53562636b5bf10f728582dff469cc612
Expand Up @@ -16,11 +16,14 @@

package com.google.cloud.spanner.it;

import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator;
import static com.google.common.base.Strings.isNullOrEmpty;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.Assume.assumeFalse;
import static org.junit.Assume.assumeTrue;

import com.google.cloud.Timestamp;
Expand Down Expand Up @@ -79,15 +82,15 @@ public static List<DialectTestParameter> data() {
+ " Key STRING(MAX) NOT NULL,"
+ " Float32Value FLOAT32,"
+ " Float32ArrayValue ARRAY<FLOAT32>,"
+ ") PRIMARY KEY (K)"
+ ") PRIMARY KEY (Key)"
};

private static final String[] POSTGRESQL_SCHEMA =
new String[] {
"CREATE TABLE T ("
+ " Key VARCHAR PRIMARY KEY,"
+ " Float32Value REAL,"
+ " Float32ArrayValue REAL[],"
+ " Float32ArrayValue REAL[]"
+ ")"
};

Expand All @@ -107,8 +110,18 @@ public static void setUpDatabase()
postgreSQLClient = env.getTestHelper().getDatabaseClient(postgreSQLDatabase);
}

private static boolean isUsingCloudDevel() {
String jobType = System.getenv("JOB_TYPE");

// Assumes that the jobType contains the string "cloud-devel" to signal that
// the environment is cloud-devel.
return !isNullOrEmpty(jobType) && jobType.contains("cloud-devel");
}

@Before
public void before() {
assumeFalse("Emulator does not support FLOAT32 yet", isUsingEmulator());

client =
dialect.dialect == Dialect.GOOGLE_STANDARD_SQL ? googleStandardSQLClient : postgreSQLClient;
}
Expand Down Expand Up @@ -147,6 +160,8 @@ private Struct readLastRow(String... columns) {

@Test
public void writeFloat32() {
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());

write(baseInsert().set("Float32Value").to(2.0f).build());
Struct row = readLastRow("Float32Value");
assertThat(row.isNull(0)).isFalse();
arawind marked this conversation as resolved.
Show resolved Hide resolved
Expand All @@ -155,6 +170,8 @@ public void writeFloat32() {

@Test
public void writeFloat32NonNumbers() {
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());
arawind marked this conversation as resolved.
Show resolved Hide resolved

write(baseInsert().set("Float32Value").to(Float.NEGATIVE_INFINITY).build());
Struct row = readLastRow("Float32Value");
assertThat(row.isNull(0)).isFalse();
Expand All @@ -173,20 +190,26 @@ public void writeFloat32NonNumbers() {

@Test
public void writeFloat32Null() {
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());

write(baseInsert().set("Float32Value").to((Float) null).build());
Struct row = readLastRow("Float32Value");
assertThat(row.isNull(0)).isTrue();
}

@Test
public void writeFloat32ArrayNull() {
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());

write(baseInsert().set("Float32ArrayValue").toFloat32Array((float[]) null).build());
Struct row = readLastRow("Float32ArrayValue");
assertThat(row.isNull(0)).isTrue();
}

@Test
public void writeFloat32ArrayEmpty() {
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());

write(baseInsert().set("Float32ArrayValue").toFloat32Array(new float[] {}).build());
Struct row = readLastRow("Float32ArrayValue");
assertThat(row.isNull(0)).isFalse();
Expand All @@ -195,6 +218,8 @@ public void writeFloat32ArrayEmpty() {

@Test
public void writeFloat32Array() {
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());

write(
baseInsert()
.set("Float32ArrayValue")
Expand All @@ -213,10 +238,12 @@ public void writeFloat32Array() {

@Test
public void writeFloat32ArrayNoNulls() {
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());

write(baseInsert().set("Float32ArrayValue").toFloat32Array(Arrays.asList(1.0f, 2.0f)).build());
Struct row = readLastRow("Float32ArrayValue");
assertThat(row.isNull(0)).isFalse();
assertThat(row.getFloatArray(0).length).isEqualTo(2f);
assertThat(row.getFloatArray(0).length).isEqualTo(2);
assertThat(row.getFloatArray(0)[0]).isWithin(0.0f).of(1.0f);
assertThat(row.getFloatArray(0)[1]).isWithin(0.0f).of(2.0f);
}
Expand Down Expand Up @@ -244,6 +271,8 @@ private String getInsertStatementWithLiterals() {

@Test
public void float32Literals() {
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());

client
.readWriteTransaction()
.run(
Expand All @@ -269,6 +298,8 @@ private String getInsertStatementWithParameters() {

@Test
public void float32Parameter() {
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());

client
.readWriteTransaction()
.run(
Expand Down Expand Up @@ -311,9 +342,12 @@ public void float32Parameter() {
@Ignore("This will be supported before submission")
@Test
public void float32UntypedParameter() {
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());

// TODO: Verify before submitting.
assumeTrue(
"This is only supported in GoogleSQL??", dialect.dialect == Dialect.GOOGLE_STANDARD_SQL);
"This is currently only supported in GoogleSQL??",
dialect.dialect == Dialect.GOOGLE_STANDARD_SQL);

client
.readWriteTransaction()
Expand Down Expand Up @@ -342,11 +376,13 @@ public void float32UntypedParameter() {
.build());
return null;
});

// TODO: add verifier.
}

private void verifyContents() {
try (ResultSet resultSet =
client.singleUse().executeQuery(Statement.of("SELECT * FROM T ORDER BY id"))) {
client.singleUse().executeQuery(Statement.of("SELECT * FROM T ORDER BY Key"))) {

assertTrue(resultSet.next());

Expand Down
Expand Up @@ -17,6 +17,7 @@
package com.google.cloud.spanner.it;

import static com.google.cloud.spanner.testing.EmulatorSpannerHelper.isUsingEmulator;
import static com.google.common.base.Strings.isNullOrEmpty;
import static com.google.common.truth.Truth.assertThat;
import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
Expand Down Expand Up @@ -254,8 +255,20 @@ public void bindInt64Null() {
assertThat(row.isNull(0)).isTrue();
}

// TODO: Remove once FLOAT32 is supported in production.
private static boolean isUsingCloudDevel() {
String jobType = System.getenv("JOB_TYPE");

// Assumes that the jobType contains the string "cloud-devel" to signal that
// the environment is cloud-devel.
return !isNullOrEmpty(jobType) && jobType.contains("cloud-devel");
}

@Test
public void bindFloat32() {
assumeFalse("Emulator does not support FLOAT32 yet", isUsingEmulator());
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());

Struct row =
execute(Statement.newBuilder(selectValueQuery).bind("p1").to(2.0f), Type.float32());
assertThat(row.isNull(0)).isFalse();
Expand All @@ -264,6 +277,9 @@ public void bindFloat32() {

@Test
public void bindFloat32Null() {
assumeFalse("Emulator does not support FLOAT32 yet", isUsingEmulator());
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());

Struct row =
execute(Statement.newBuilder(selectValueQuery).bind("p1").to((Float) null), Type.float32());
assertThat(row.isNull(0)).isTrue();
Expand Down Expand Up @@ -516,6 +532,9 @@ public void bindInt64ArrayNull() {
@Ignore
// Fails due to backend issues. Should be resolved soon.
public void bindFloat32Array() {
assumeFalse("Emulator does not support FLOAT32 yet", isUsingEmulator());
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());

Struct row =
execute(
Statement.newBuilder(selectValueQuery)
Expand All @@ -538,6 +557,9 @@ public void bindFloat32Array() {

@Test
public void bindFloat32ArrayEmpty() {
assumeFalse("Emulator does not support FLOAT32 yet", isUsingEmulator());
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());

Struct row =
execute(
Statement.newBuilder(selectValueQuery)
Expand All @@ -550,6 +572,9 @@ public void bindFloat32ArrayEmpty() {

@Test
public void bindFloat32ArrayNull() {
assumeFalse("Emulator does not support FLOAT32 yet", isUsingEmulator());
assumeTrue("FLOAT32 is currently only supported in cloud-devel", isUsingCloudDevel());

Struct row =
execute(
Statement.newBuilder(selectValueQuery).bind("p1").toFloat32Array((float[]) null),
Expand Down