From 5b9e4f8ec6f7f372b6cca8359153b0aa9538e48d Mon Sep 17 00:00:00 2001 From: Shirdon Gorse Date: Mon, 21 Apr 2025 15:44:30 +0000 Subject: [PATCH 01/11] Add last statement option sample --- .../src/main/java/com/example/spanner/LastStatementSample.java | 0 .../src/test/java/com/example/spanner/LastStatementSampleIT.java | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java create mode 100644 samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java diff --git a/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java b/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java new file mode 100644 index 00000000000..e69de29bb2d diff --git a/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java new file mode 100644 index 00000000000..e69de29bb2d From fe18c6149e230a9c9512a01580aae19c2c3df040 Mon Sep 17 00:00:00 2001 From: Shirdon Gorse Date: Mon, 21 Apr 2025 15:46:16 +0000 Subject: [PATCH 02/11] Adds last statement sample --- .../example/spanner/LastStatementSample.java | 71 +++++++++++++++++++ .../spanner/LastStatementSampleIT.java | 69 ++++++++++++++++++ 2 files changed, 140 insertions(+) diff --git a/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java b/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java index e69de29bb2d..2b355d34f9c 100644 --- a/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java @@ -0,0 +1,71 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.spanner; + +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.Options; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.Statement; + +/** + * Sample showing how to set the last statement option when a DML statement is the last statement in a transaction. + */ +public class LastStatementSample { + + static void insertAndUpdateUsingLastStatement() { + // TODO(developer): Replace these variables before running the sample. +// final String projectId = "my-project"; +// final String instanceId = "my-instance"; +// final String databaseId = "my-database"; + final String projectId = "data-placement-test"; + final String instanceId = "shirdon-instance"; + final String databaseId = "db"; + + try (Spanner spanner = + SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { + final DatabaseClient databaseClient = + spanner.getDatabaseClient(DatabaseId.of(projectId, instanceId, databaseId)); + insertAndUpdateUsingLastStatement(databaseClient); + } + } + + // [START spanner_last_statement] + static void insertAndUpdateUsingLastStatement(DatabaseClient client) { + client + .readWriteTransaction() + .run( + transaction -> { + transaction.executeUpdate( + Statement.of( + "INSERT Singers (SingerId, FirstName, LastName)\n" + + "VALUES (54213, 'John', 'Do')")); + System.out.println("New singer inserted."); + + // Pass in the `lastStatement` option to the last DML statement of the transaction. + transaction.executeUpdate( + Statement.of( + "UPDATE Singers SET Singers.LastName = 'Doe' WHERE SingerId = 54213\n"), Options.lastStatement()); + System.out.println("Singer last name updated."); + + return null; + }); + } + // [END spanner_last_statement] + +} diff --git a/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java index e69de29bb2d..4a1623ec712 100644 --- a/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java @@ -0,0 +1,69 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.spanner; + +import static com.example.spanner.SampleRunner.runSample; +import static com.google.common.truth.Truth.assertThat; + +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.KeySet; +import com.google.cloud.spanner.Mutation; +import com.google.common.collect.ImmutableList; +import java.util.Arrays; +import java.util.Collections; +import org.junit.After; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Integration tests for {@link LastStatementSample} */ +@RunWith(JUnit4.class) +public class LastStatementSampleIT extends SampleTestBase { + + private static DatabaseId databaseId; + + @BeforeClass + public static void createTestDatabase() throws Exception { + final String database = idGenerator.generateDatabaseId(); + databaseAdminClient + .createDatabase( + instanceId, + database, + ImmutableList.of( + "CREATE TABLE Singers (" + + " SingerId INT64 NOT NULL," + + " FirstName STRING(1024)," + + " LastName STRING(1024)," + + " SingerInfo BYTES(MAX)" + + ") PRIMARY KEY (SingerId)")) + .get(); + databaseId = DatabaseId.of(projectId, instanceId, database); + } + + @Test + public void testSetLastStatementOptionSample() throws Exception { + final DatabaseClient client = spanner.getDatabaseClient(databaseId); + String out = + runSample( + () -> LastStatementSample.insertAndUpdateUsingLastStatement(client)); + assertThat(out).contains("New singer inserted."); + assertThat(out).contains("Singer last name updated."); + } +} \ No newline at end of file From 1fafe27e29a35e5bc5c8afe42456c66dafd69cb1 Mon Sep 17 00:00:00 2001 From: Shirdon Gorse Date: Mon, 21 Apr 2025 15:55:04 +0000 Subject: [PATCH 03/11] Remove local overrides --- .../java/com/example/spanner/LastStatementSample.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java b/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java index 2b355d34f9c..60e16be49de 100644 --- a/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java @@ -30,12 +30,9 @@ public class LastStatementSample { static void insertAndUpdateUsingLastStatement() { // TODO(developer): Replace these variables before running the sample. -// final String projectId = "my-project"; -// final String instanceId = "my-instance"; -// final String databaseId = "my-database"; - final String projectId = "data-placement-test"; - final String instanceId = "shirdon-instance"; - final String databaseId = "db"; + final String projectId = "my-project"; + final String instanceId = "my-instance"; + final String databaseId = "my-database"; try (Spanner spanner = SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { From 6fcb5feca69eb0800588ea6344fb71e6304e7a26 Mon Sep 17 00:00:00 2001 From: Shirdon Gorse Date: Mon, 21 Apr 2025 15:57:29 +0000 Subject: [PATCH 04/11] fix formatting --- .../src/main/java/com/example/spanner/LastStatementSample.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java b/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java index 60e16be49de..1b39baff361 100644 --- a/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java @@ -57,7 +57,8 @@ static void insertAndUpdateUsingLastStatement(DatabaseClient client) { // Pass in the `lastStatement` option to the last DML statement of the transaction. transaction.executeUpdate( Statement.of( - "UPDATE Singers SET Singers.LastName = 'Doe' WHERE SingerId = 54213\n"), Options.lastStatement()); + "UPDATE Singers SET Singers.LastName = 'Doe' WHERE SingerId = 54213\n"), + Options.lastStatement()); System.out.println("Singer last name updated."); return null; From 5bb406d078413a790f8225827e38407c500e3bf0 Mon Sep 17 00:00:00 2001 From: Shirdon Gorse Date: Mon, 21 Apr 2025 16:01:41 +0000 Subject: [PATCH 05/11] fix formatting 2 --- .../test/java/com/example/spanner/LastStatementSampleIT.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java index 4a1623ec712..1ab235080f1 100644 --- a/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java @@ -66,4 +66,4 @@ public void testSetLastStatementOptionSample() throws Exception { assertThat(out).contains("New singer inserted."); assertThat(out).contains("Singer last name updated."); } -} \ No newline at end of file +} From 870f2cf1137b82eca036c4e07d30b18cba40c66f Mon Sep 17 00:00:00 2001 From: Shirdon Gorse Date: Mon, 21 Apr 2025 17:02:30 +0000 Subject: [PATCH 06/11] Add PG last statement samples --- .../spanner/PgLastStatementSample.java | 69 ++++++++++++++++ .../spanner/PgLastStatementSampleIT.java | 80 +++++++++++++++++++ 2 files changed, 149 insertions(+) create mode 100644 samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java create mode 100644 samples/snippets/src/test/java/com/example/spanner/PgLastStatementSampleIT.java diff --git a/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java b/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java new file mode 100644 index 00000000000..4010065e949 --- /dev/null +++ b/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java @@ -0,0 +1,69 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.spanner; + +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.Options; +import com.google.cloud.spanner.Spanner; +import com.google.cloud.spanner.SpannerOptions; +import com.google.cloud.spanner.Statement; + +/** + * Sample showing how to set the last statement option when a DML statement is the last statement in a transaction. + */ +public class PgLastStatementSample { + + static void insertAndUpdateUsingLastStatement() { + // TODO(developer): Replace these variables before running the sample. + final String projectId = "my-project"; + final String instanceId = "my-instance"; + final String databaseId = "my-database"; + + try (Spanner spanner = + SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { + final DatabaseClient databaseClient = + spanner.getDatabaseClient(DatabaseId.of(projectId, instanceId, databaseId)); + insertAndUpdateUsingLastStatement(databaseClient); + } + } + + // [START spanner_last_statement] + static void insertAndUpdateUsingLastStatement(DatabaseClient client) { + client + .readWriteTransaction() + .run( + transaction -> { + transaction.executeUpdate( + Statement.of( + "INSERT INTO Singers (SingerId, FirstName, LastName) " + + "VALUES (54214, 'John', 'Do')")); + System.out.println("New singer inserted."); + + // Pass in the `lastStatement` option to the last DML statement of the transaction. + transaction.executeUpdate( + Statement.of( + "UPDATE Singers SET LastName = 'Doe' WHERE SingerId = 54213\n"), + Options.lastStatement()); + System.out.println("Singer last name updated."); + + return null; + }); + } + // [END spanner_last_statement] + +} \ No newline at end of file diff --git a/samples/snippets/src/test/java/com/example/spanner/PgLastStatementSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/PgLastStatementSampleIT.java new file mode 100644 index 00000000000..ab7ccde9c09 --- /dev/null +++ b/samples/snippets/src/test/java/com/example/spanner/PgLastStatementSampleIT.java @@ -0,0 +1,80 @@ +/* + * Copyright 2025 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.spanner; + +import static com.example.spanner.SampleRunner.runSample; +import static com.google.common.truth.Truth.assertThat; + +import com.google.api.gax.longrunning.OperationFuture; +import com.google.cloud.spanner.DatabaseClient; +import com.google.cloud.spanner.DatabaseId; +import com.google.cloud.spanner.Dialect; +import com.google.cloud.spanner.KeySet; +import com.google.cloud.spanner.Mutation; +import com.google.common.collect.ImmutableList; +import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; +import java.util.Arrays; +import java.util.Collections; +import java.util.concurrent.TimeUnit; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** Integration tests for {@link PgLastStatementSample} */ +@RunWith(JUnit4.class) +public class PgLastStatementSampleIT extends SampleTestBase { + + private static DatabaseId databaseId; + + @BeforeClass + public static void createTestDatabase() throws Exception { + final String database = idGenerator.generateDatabaseId(); + databaseAdminClient + .createDatabase( + databaseAdminClient + .newDatabaseBuilder(DatabaseId.of(projectId, instanceId, database)) + .setDialect(Dialect.POSTGRESQL) + .build(), + Collections.emptyList()) + .get(10, TimeUnit.MINUTES); + final OperationFuture updateOperation = + databaseAdminClient.updateDatabaseDdl( + instanceId, + database, + ImmutableList.of( + "CREATE TABLE Singers (" + + " SingerId bigint NOT NULL," + + " FirstName character varying(1024)," + + " LastName character varying(1024)," + + " PRIMARY KEY (SingerId)" + + ")"), + null); + updateOperation.get(10, TimeUnit.MINUTES); + databaseId = DatabaseId.of(projectId, instanceId, database); + } + + @Test + public void testSetLastStatementOptionSample() throws Exception { + final DatabaseClient client = spanner.getDatabaseClient(databaseId); + String out = + runSample( + () -> PgLastStatementSample.insertAndUpdateUsingLastStatement(client)); + assertThat(out).contains("New singer inserted."); + assertThat(out).contains("Singer last name updated."); + } +} From a2b5f0e19aae2f915f5d748bdbcb935be309d6d7 Mon Sep 17 00:00:00 2001 From: sgorse123 <72293954+sgorse123@users.noreply.github.com> Date: Mon, 21 Apr 2025 12:04:35 -0700 Subject: [PATCH 07/11] Update PgLastStatementSample.java --- .../java/com/example/spanner/PgLastStatementSample.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java b/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java index 4010065e949..2a5bf5e0de0 100644 --- a/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java @@ -42,7 +42,7 @@ static void insertAndUpdateUsingLastStatement() { } } - // [START spanner_last_statement] + // [START pg_spanner_last_statement] static void insertAndUpdateUsingLastStatement(DatabaseClient client) { client .readWriteTransaction() @@ -57,13 +57,13 @@ static void insertAndUpdateUsingLastStatement(DatabaseClient client) { // Pass in the `lastStatement` option to the last DML statement of the transaction. transaction.executeUpdate( Statement.of( - "UPDATE Singers SET LastName = 'Doe' WHERE SingerId = 54213\n"), + "UPDATE Singers SET LastName = 'Doe' WHERE SingerId = 54214\n"), Options.lastStatement()); System.out.println("Singer last name updated."); return null; }); } - // [END spanner_last_statement] + // [END pg_spanner_last_statement] -} \ No newline at end of file +} From a08ebaf65121b5c557fb85a6b63f781c627edaf3 Mon Sep 17 00:00:00 2001 From: sgorse123 <72293954+sgorse123@users.noreply.github.com> Date: Wed, 23 Apr 2025 12:49:12 -0700 Subject: [PATCH 08/11] Update PgLastStatementSample.java with fixed regions --- .../main/java/com/example/spanner/PgLastStatementSample.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java b/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java index 2a5bf5e0de0..84e04dcbbf3 100644 --- a/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java @@ -42,7 +42,7 @@ static void insertAndUpdateUsingLastStatement() { } } - // [START pg_spanner_last_statement] + // [START spanner_postgresql_last_statement] static void insertAndUpdateUsingLastStatement(DatabaseClient client) { client .readWriteTransaction() @@ -64,6 +64,6 @@ static void insertAndUpdateUsingLastStatement(DatabaseClient client) { return null; }); } - // [END pg_spanner_last_statement] + // [END spanner_postgresql_last_statement] } From 76e3b405042114dcc89602b764139055463b6338 Mon Sep 17 00:00:00 2001 From: Shirdon Gorse Date: Mon, 5 May 2025 16:21:12 +0000 Subject: [PATCH 09/11] Formatted last statement sample files --- .../example/spanner/LastStatementSample.java | 67 ++++++++--------- .../spanner/PgLastStatementSample.java | 66 ++++++++--------- .../spanner/LastStatementSampleIT.java | 58 +++++++-------- .../spanner/PgLastStatementSampleIT.java | 73 +++++++++---------- 4 files changed, 126 insertions(+), 138 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java b/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java index 1b39baff361..a550693129f 100644 --- a/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java @@ -24,46 +24,47 @@ import com.google.cloud.spanner.Statement; /** - * Sample showing how to set the last statement option when a DML statement is the last statement in a transaction. + * Sample showing how to set the last statement option when a DML statement is the last statement in + * a transaction. */ public class LastStatementSample { - static void insertAndUpdateUsingLastStatement() { - // TODO(developer): Replace these variables before running the sample. - final String projectId = "my-project"; - final String instanceId = "my-instance"; - final String databaseId = "my-database"; + static void insertAndUpdateUsingLastStatement() { + // TODO(developer): Replace these variables before running the sample. + final String projectId = "my-project"; + final String instanceId = "my-instance"; + final String databaseId = "my-database"; - try (Spanner spanner = - SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { - final DatabaseClient databaseClient = - spanner.getDatabaseClient(DatabaseId.of(projectId, instanceId, databaseId)); - insertAndUpdateUsingLastStatement(databaseClient); - } + try (Spanner spanner = + SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { + final DatabaseClient databaseClient = + spanner.getDatabaseClient(DatabaseId.of(projectId, instanceId, databaseId)); + insertAndUpdateUsingLastStatement(databaseClient); } + } - // [START spanner_last_statement] - static void insertAndUpdateUsingLastStatement(DatabaseClient client) { - client - .readWriteTransaction() - .run( - transaction -> { - transaction.executeUpdate( - Statement.of( - "INSERT Singers (SingerId, FirstName, LastName)\n" - + "VALUES (54213, 'John', 'Do')")); - System.out.println("New singer inserted."); + // [START spanner_last_statement] + static void insertAndUpdateUsingLastStatement(DatabaseClient client) { + client + .readWriteTransaction() + .run( + transaction -> { + transaction.executeUpdate( + Statement.of( + "INSERT Singers (SingerId, FirstName, LastName)\n" + + "VALUES (54213, 'John', 'Do')")); + System.out.println("New singer inserted."); - // Pass in the `lastStatement` option to the last DML statement of the transaction. - transaction.executeUpdate( - Statement.of( - "UPDATE Singers SET Singers.LastName = 'Doe' WHERE SingerId = 54213\n"), - Options.lastStatement()); - System.out.println("Singer last name updated."); + // Pass in the `lastStatement` option to the last DML statement of the transaction. + transaction.executeUpdate( + Statement.of( + "UPDATE Singers SET Singers.LastName = 'Doe' WHERE SingerId = 54213\n"), + Options.lastStatement()); + System.out.println("Singer last name updated."); - return null; - }); - } - // [END spanner_last_statement] + return null; + }); + } + // [END spanner_last_statement] } diff --git a/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java b/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java index 84e04dcbbf3..e77decc935d 100644 --- a/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java @@ -24,46 +24,46 @@ import com.google.cloud.spanner.Statement; /** - * Sample showing how to set the last statement option when a DML statement is the last statement in a transaction. + * Sample showing how to set the last statement option when a DML statement is the last statement in + * a transaction. */ public class PgLastStatementSample { - static void insertAndUpdateUsingLastStatement() { - // TODO(developer): Replace these variables before running the sample. - final String projectId = "my-project"; - final String instanceId = "my-instance"; - final String databaseId = "my-database"; + static void insertAndUpdateUsingLastStatement() { + // TODO(developer): Replace these variables before running the sample. + final String projectId = "my-project"; + final String instanceId = "my-instance"; + final String databaseId = "my-database"; - try (Spanner spanner = - SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { - final DatabaseClient databaseClient = - spanner.getDatabaseClient(DatabaseId.of(projectId, instanceId, databaseId)); - insertAndUpdateUsingLastStatement(databaseClient); - } + try (Spanner spanner = + SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) { + final DatabaseClient databaseClient = + spanner.getDatabaseClient(DatabaseId.of(projectId, instanceId, databaseId)); + insertAndUpdateUsingLastStatement(databaseClient); } + } - // [START spanner_postgresql_last_statement] - static void insertAndUpdateUsingLastStatement(DatabaseClient client) { - client - .readWriteTransaction() - .run( - transaction -> { - transaction.executeUpdate( - Statement.of( - "INSERT INTO Singers (SingerId, FirstName, LastName) " - + "VALUES (54214, 'John', 'Do')")); - System.out.println("New singer inserted."); + // [START spanner_postgresql_last_statement] + static void insertAndUpdateUsingLastStatement(DatabaseClient client) { + client + .readWriteTransaction() + .run( + transaction -> { + transaction.executeUpdate( + Statement.of( + "INSERT INTO Singers (SingerId, FirstName, LastName) " + + "VALUES (54214, 'John', 'Do')")); + System.out.println("New singer inserted."); - // Pass in the `lastStatement` option to the last DML statement of the transaction. - transaction.executeUpdate( - Statement.of( - "UPDATE Singers SET LastName = 'Doe' WHERE SingerId = 54214\n"), - Options.lastStatement()); - System.out.println("Singer last name updated."); + // Pass in the `lastStatement` option to the last DML statement of the transaction. + transaction.executeUpdate( + Statement.of("UPDATE Singers SET LastName = 'Doe' WHERE SingerId = 54214\n"), + Options.lastStatement()); + System.out.println("Singer last name updated."); - return null; - }); - } - // [END spanner_postgresql_last_statement] + return null; + }); + } + // [END spanner_postgresql_last_statement] } diff --git a/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java index 1ab235080f1..89026b5f92b 100644 --- a/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/LastStatementSampleIT.java @@ -21,13 +21,7 @@ import com.google.cloud.spanner.DatabaseClient; import com.google.cloud.spanner.DatabaseId; -import com.google.cloud.spanner.KeySet; -import com.google.cloud.spanner.Mutation; import com.google.common.collect.ImmutableList; -import java.util.Arrays; -import java.util.Collections; -import org.junit.After; -import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; @@ -37,33 +31,31 @@ @RunWith(JUnit4.class) public class LastStatementSampleIT extends SampleTestBase { - private static DatabaseId databaseId; + private static DatabaseId databaseId; - @BeforeClass - public static void createTestDatabase() throws Exception { - final String database = idGenerator.generateDatabaseId(); - databaseAdminClient - .createDatabase( - instanceId, - database, - ImmutableList.of( - "CREATE TABLE Singers (" - + " SingerId INT64 NOT NULL," - + " FirstName STRING(1024)," - + " LastName STRING(1024)," - + " SingerInfo BYTES(MAX)" - + ") PRIMARY KEY (SingerId)")) - .get(); - databaseId = DatabaseId.of(projectId, instanceId, database); - } + @BeforeClass + public static void createTestDatabase() throws Exception { + final String database = idGenerator.generateDatabaseId(); + databaseAdminClient + .createDatabase( + instanceId, + database, + ImmutableList.of( + "CREATE TABLE Singers (" + + " SingerId INT64 NOT NULL," + + " FirstName STRING(1024)," + + " LastName STRING(1024)," + + " SingerInfo BYTES(MAX)" + + ") PRIMARY KEY (SingerId)")) + .get(); + databaseId = DatabaseId.of(projectId, instanceId, database); + } - @Test - public void testSetLastStatementOptionSample() throws Exception { - final DatabaseClient client = spanner.getDatabaseClient(databaseId); - String out = - runSample( - () -> LastStatementSample.insertAndUpdateUsingLastStatement(client)); - assertThat(out).contains("New singer inserted."); - assertThat(out).contains("Singer last name updated."); - } + @Test + public void testSetLastStatementOptionSample() throws Exception { + final DatabaseClient client = spanner.getDatabaseClient(databaseId); + String out = runSample(() -> LastStatementSample.insertAndUpdateUsingLastStatement(client)); + assertThat(out).contains("New singer inserted."); + assertThat(out).contains("Singer last name updated."); + } } diff --git a/samples/snippets/src/test/java/com/example/spanner/PgLastStatementSampleIT.java b/samples/snippets/src/test/java/com/example/spanner/PgLastStatementSampleIT.java index ab7ccde9c09..d6d8d43f6a0 100644 --- a/samples/snippets/src/test/java/com/example/spanner/PgLastStatementSampleIT.java +++ b/samples/snippets/src/test/java/com/example/spanner/PgLastStatementSampleIT.java @@ -23,11 +23,8 @@ import com.google.cloud.spanner.DatabaseClient; import com.google.cloud.spanner.DatabaseId; import com.google.cloud.spanner.Dialect; -import com.google.cloud.spanner.KeySet; -import com.google.cloud.spanner.Mutation; import com.google.common.collect.ImmutableList; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; -import java.util.Arrays; import java.util.Collections; import java.util.concurrent.TimeUnit; import org.junit.BeforeClass; @@ -39,42 +36,40 @@ @RunWith(JUnit4.class) public class PgLastStatementSampleIT extends SampleTestBase { - private static DatabaseId databaseId; + private static DatabaseId databaseId; - @BeforeClass - public static void createTestDatabase() throws Exception { - final String database = idGenerator.generateDatabaseId(); - databaseAdminClient - .createDatabase( - databaseAdminClient - .newDatabaseBuilder(DatabaseId.of(projectId, instanceId, database)) - .setDialect(Dialect.POSTGRESQL) - .build(), - Collections.emptyList()) - .get(10, TimeUnit.MINUTES); - final OperationFuture updateOperation = - databaseAdminClient.updateDatabaseDdl( - instanceId, - database, - ImmutableList.of( - "CREATE TABLE Singers (" - + " SingerId bigint NOT NULL," - + " FirstName character varying(1024)," - + " LastName character varying(1024)," - + " PRIMARY KEY (SingerId)" - + ")"), - null); - updateOperation.get(10, TimeUnit.MINUTES); - databaseId = DatabaseId.of(projectId, instanceId, database); - } + @BeforeClass + public static void createTestDatabase() throws Exception { + final String database = idGenerator.generateDatabaseId(); + databaseAdminClient + .createDatabase( + databaseAdminClient + .newDatabaseBuilder(DatabaseId.of(projectId, instanceId, database)) + .setDialect(Dialect.POSTGRESQL) + .build(), + Collections.emptyList()) + .get(10, TimeUnit.MINUTES); + final OperationFuture updateOperation = + databaseAdminClient.updateDatabaseDdl( + instanceId, + database, + ImmutableList.of( + "CREATE TABLE Singers (" + + " SingerId bigint NOT NULL," + + " FirstName character varying(1024)," + + " LastName character varying(1024)," + + " PRIMARY KEY (SingerId)" + + ")"), + null); + updateOperation.get(10, TimeUnit.MINUTES); + databaseId = DatabaseId.of(projectId, instanceId, database); + } - @Test - public void testSetLastStatementOptionSample() throws Exception { - final DatabaseClient client = spanner.getDatabaseClient(databaseId); - String out = - runSample( - () -> PgLastStatementSample.insertAndUpdateUsingLastStatement(client)); - assertThat(out).contains("New singer inserted."); - assertThat(out).contains("Singer last name updated."); - } + @Test + public void testSetLastStatementOptionSample() throws Exception { + final DatabaseClient client = spanner.getDatabaseClient(databaseId); + String out = runSample(() -> PgLastStatementSample.insertAndUpdateUsingLastStatement(client)); + assertThat(out).contains("New singer inserted."); + assertThat(out).contains("Singer last name updated."); + } } From 8b1aa0f6123c5d24820b0247cb2ca80ffa9b3215 Mon Sep 17 00:00:00 2001 From: sgorse123 <72293954+sgorse123@users.noreply.github.com> Date: Mon, 5 May 2025 10:09:34 -0700 Subject: [PATCH 10/11] Update LastStatementSample.java with correct tag --- .../main/java/com/example/spanner/LastStatementSample.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java b/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java index a550693129f..ef03ed7d88a 100644 --- a/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/LastStatementSample.java @@ -43,7 +43,7 @@ static void insertAndUpdateUsingLastStatement() { } } - // [START spanner_last_statement] + // [START spanner_dml_last_statement] static void insertAndUpdateUsingLastStatement(DatabaseClient client) { client .readWriteTransaction() @@ -65,6 +65,6 @@ static void insertAndUpdateUsingLastStatement(DatabaseClient client) { return null; }); } - // [END spanner_last_statement] + // [END spanner_dml_last_statement] } From 04496b2adb7323c40f1eb2193b1131900645d36d Mon Sep 17 00:00:00 2001 From: sgorse123 <72293954+sgorse123@users.noreply.github.com> Date: Mon, 5 May 2025 10:11:18 -0700 Subject: [PATCH 11/11] Update PgLastStatementSample.java with correct tag --- .../main/java/com/example/spanner/PgLastStatementSample.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java b/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java index e77decc935d..1c583a71b39 100644 --- a/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java +++ b/samples/snippets/src/main/java/com/example/spanner/PgLastStatementSample.java @@ -43,7 +43,7 @@ static void insertAndUpdateUsingLastStatement() { } } - // [START spanner_postgresql_last_statement] + // [START spanner_postgresql_dml_last_statement] static void insertAndUpdateUsingLastStatement(DatabaseClient client) { client .readWriteTransaction() @@ -64,6 +64,6 @@ static void insertAndUpdateUsingLastStatement(DatabaseClient client) { return null; }); } - // [END spanner_postgresql_last_statement] + // [END spanner_postgresql_dml_last_statement] }