\332A\006parent\202\323\344\223\002/\022-"
+ + "/v1/{parent=projects/*/instances/*}/data"
+ + "bases\022\244\002\n\016CreateDatabase\0227.google.spanne"
+ + "r.admin.database.v1.CreateDatabaseReques"
+ + "t\032\035.google.longrunning.Operation\"\271\001\312Ad\n)"
+ + "google.spanner.admin.database.v1.Databas"
+ + "e\0227google.spanner.admin.database.v1.Crea"
+ + "teDatabaseMetadata\332A\027parent,create_state"
+ + "ment\202\323\344\223\0022\"-/v1/{parent=projects/*/insta"
+ + "nces/*}/databases:\001*\022\255\001\n\013GetDatabase\0224.g"
+ + "oogle.spanner.admin.database.v1.GetDatab"
+ + "aseRequest\032*.google.spanner.admin.databa"
+ + "se.v1.Database\"<\332A\004name\202\323\344\223\002/\022-/v1/{name"
+ + "=projects/*/instances/*/databases/*}\022\357\001\n"
+ + "\016UpdateDatabase\0227.google.spanner.admin.d"
+ + "atabase.v1.UpdateDatabaseRequest\032\035.googl"
+ + "e.longrunning.Operation\"\204\001\312A\"\n\010Database\022"
+ + "\026UpdateDatabaseMetadata\332A\024database,updat"
+ + "e_mask\202\323\344\223\002B26/v1/{database.name=project"
+ + "s/*/instances/*/databases/*}:\010database\022\235"
+ + "\002\n\021UpdateDatabaseDdl\022:.google.spanner.ad"
+ + "min.database.v1.UpdateDatabaseDdlRequest"
+ + "\032\035.google.longrunning.Operation\"\254\001\312AS\n\025g"
+ + "oogle.protobuf.Empty\022:google.spanner.adm"
+ + "in.database.v1.UpdateDatabaseDdlMetadata"
+ + "\332A\023database,statements\202\323\344\223\002:25/v1/{datab"
+ + "ase=projects/*/instances/*/databases/*}/"
+ + "ddl:\001*\022\243\001\n\014DropDatabase\0225.google.spanner"
+ + ".admin.database.v1.DropDatabaseRequest\032\026"
+ + ".google.protobuf.Empty\"D\332A\010database\202\323\344\223\002"
+ + "3*1/v1/{database=projects/*/instances/*/"
+ + "databases/*}\022\315\001\n\016GetDatabaseDdl\0227.google"
+ + ".spanner.admin.database.v1.GetDatabaseDd"
+ + "lRequest\0328.google.spanner.admin.database"
+ + ".v1.GetDatabaseDdlResponse\"H\332A\010database\202"
+ + "\323\344\223\0027\0225/v1/{database=projects/*/instance"
+ + "s/*/databases/*}/ddl\022\302\002\n\014SetIamPolicy\022\"."
+ + "google.iam.v1.SetIamPolicyRequest\032\025.goog"
+ + "le.iam.v1.Policy\"\366\001\332A\017resource,policy\202\323\344"
+ + "\223\002\335\001\">/v1/{resource=projects/*/instances"
+ + "/*/databases/*}:setIamPolicy:\001*ZA\"/v1/{resource=projects/*/instances/*"
+ + "/databases/*}:getIamPolicy:\001*ZA\".google.sp"
+ + "anner.admin.database.v1.ListBackupOperat"
+ + "ionsResponse\"E\332A\006parent\202\323\344\223\0026\0224/v1/{pare"
+ + "nt=projects/*/instances/*}/backupOperati"
+ + "ons\022\334\001\n\021ListDatabaseRoles\022:.google.spann"
+ + "er.admin.database.v1.ListDatabaseRolesRe"
+ + "quest\032;.google.spanner.admin.database.v1"
+ + ".ListDatabaseRolesResponse\"N\332A\006parent\202\323\344"
+ + "\223\002?\022=/v1/{parent=projects/*/instances/*/"
+ + "databases/*}/databaseRoles\022\350\001\n\016AddSplitP"
+ + "oints\0227.google.spanner.admin.database.v1"
+ + ".AddSplitPointsRequest\0328.google.spanner."
+ + "admin.database.v1.AddSplitPointsResponse"
+ + "\"c\332A\025database,split_points\202\323\344\223\002E\"@/v1/{d"
+ + "atabase=projects/*/instances/*/databases"
+ + "/*}:addSplitPoints:\001*\022\216\002\n\024CreateBackupSc"
+ + "hedule\022=.google.spanner.admin.database.v"
+ + "1.CreateBackupScheduleRequest\0320.google.s"
+ + "panner.admin.database.v1.BackupSchedule\""
+ + "\204\001\332A)parent,backup_schedule,backup_sched"
+ + "ule_id\202\323\344\223\002R\"?/v1/{parent=projects/*/ins"
+ + "tances/*/databases/*}/backupSchedules:\017b"
+ + "ackup_schedule\022\321\001\n\021GetBackupSchedule\022:.g"
+ + "oogle.spanner.admin.database.v1.GetBacku"
+ + "pScheduleRequest\0320.google.spanner.admin."
+ + "database.v1.BackupSchedule\"N\332A\004name\202\323\344\223\002"
+ + "A\022?/v1/{name=projects/*/instances/*/data"
+ + "bases/*/backupSchedules/*}\022\220\002\n\024UpdateBac"
+ + "kupSchedule\022=.google.spanner.admin.datab"
+ + "ase.v1.UpdateBackupScheduleRequest\0320.goo"
+ + "gle.spanner.admin.database.v1.BackupSche"
+ + "dule\"\206\001\332A\033backup_schedule,update_mask\202\323\344"
+ + "\223\002b2O/v1/{backup_schedule.name=projects/"
+ + "*/instances/*/databases/*/backupSchedule"
+ + "s/*}:\017backup_schedule\022\275\001\n\024DeleteBackupSc"
+ + "hedule\022=.google.spanner.admin.database.v"
+ + "1.DeleteBackupScheduleRequest\032\026.google.p"
+ + "rotobuf.Empty\"N\332A\004name\202\323\344\223\002A*?/v1/{name="
+ + "projects/*/instances/*/databases/*/backu"
+ + "pSchedules/*}\022\344\001\n\023ListBackupSchedules\022<."
+ + "google.spanner.admin.database.v1.ListBac"
+ + "kupSchedulesRequest\032=.google.spanner.adm"
+ + "in.database.v1.ListBackupSchedulesRespon"
+ + "se\"P\332A\006parent\202\323\344\223\002A\022?/v1/{parent=project"
+ + "s/*/instances/*/databases/*}/backupSched"
+ + "ules\032x\312A\026spanner.googleapis.com\322A\\https:"
+ + "//www.googleapis.com/auth/cloud-platform"
+ + ",https://www.googleapis.com/auth/spanner"
+ + ".adminB\326\003\n$com.google.spanner.admin.data"
+ + "base.v1B\031SpannerDatabaseAdminProtoP\001ZFcl"
+ + "oud.google.com/go/spanner/admin/database"
+ + "/apiv1/databasepb;databasepb\252\002&Google.Cl"
+ + "oud.Spanner.Admin.Database.V1\312\002&Google\\C"
+ + "loud\\Spanner\\Admin\\Database\\V1\352\002+Google:"
+ + ":Cloud::Spanner::Admin::Database::V1\352AJ\n"
+ + "\037spanner.googleapis.com/Instance\022\'projec"
+ + "ts/{project}/instances/{instance}\352A{\n(sp"
+ + "anner.googleapis.com/InstancePartition\022O"
+ + "projects/{project}/instances/{instance}/"
+ + "instancePartitions/{instance_partition}b"
+ + "\006proto3"
};
descriptor =
com.google.protobuf.Descriptors.FileDescriptor.internalBuildGeneratedFileFrom(
@@ -582,7 +589,7 @@ public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() {
new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
internal_static_google_spanner_admin_database_v1_UpdateDatabaseDdlRequest_descriptor,
new java.lang.String[] {
- "Database", "Statements", "OperationId", "ProtoDescriptors",
+ "Database", "Statements", "OperationId", "ProtoDescriptors", "ThroughputMode",
});
internal_static_google_spanner_admin_database_v1_DdlStatementActionInfo_descriptor =
getDescriptor().getMessageTypes().get(10);
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java
index b8ff463ee20..55dc816476c 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequest.java
@@ -332,6 +332,27 @@ public com.google.protobuf.ByteString getProtoDescriptors() {
return protoDescriptors_;
}
+ public static final int THROUGHPUT_MODE_FIELD_NUMBER = 5;
+ private boolean throughputMode_ = false;
+
+ /**
+ *
+ *
+ *
+ * Optional. This field is exposed to be used by the Spanner Migration Tool.
+ * For more details, see
+ * [SMT](https://github.com/GoogleCloudPlatform/spanner-migration-tool).
+ *
+ *
+ * bool throughput_mode = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ * @return The throughputMode.
+ */
+ @java.lang.Override
+ public boolean getThroughputMode() {
+ return throughputMode_;
+ }
+
private byte memoizedIsInitialized = -1;
@java.lang.Override
@@ -358,6 +379,9 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io
if (!protoDescriptors_.isEmpty()) {
output.writeBytes(4, protoDescriptors_);
}
+ if (throughputMode_ != false) {
+ output.writeBool(5, throughputMode_);
+ }
getUnknownFields().writeTo(output);
}
@@ -384,6 +408,9 @@ public int getSerializedSize() {
if (!protoDescriptors_.isEmpty()) {
size += com.google.protobuf.CodedOutputStream.computeBytesSize(4, protoDescriptors_);
}
+ if (throughputMode_ != false) {
+ size += com.google.protobuf.CodedOutputStream.computeBoolSize(5, throughputMode_);
+ }
size += getUnknownFields().getSerializedSize();
memoizedSize = size;
return size;
@@ -404,6 +431,7 @@ public boolean equals(final java.lang.Object obj) {
if (!getStatementsList().equals(other.getStatementsList())) return false;
if (!getOperationId().equals(other.getOperationId())) return false;
if (!getProtoDescriptors().equals(other.getProtoDescriptors())) return false;
+ if (getThroughputMode() != other.getThroughputMode()) return false;
if (!getUnknownFields().equals(other.getUnknownFields())) return false;
return true;
}
@@ -425,6 +453,8 @@ public int hashCode() {
hash = (53 * hash) + getOperationId().hashCode();
hash = (37 * hash) + PROTO_DESCRIPTORS_FIELD_NUMBER;
hash = (53 * hash) + getProtoDescriptors().hashCode();
+ hash = (37 * hash) + THROUGHPUT_MODE_FIELD_NUMBER;
+ hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(getThroughputMode());
hash = (29 * hash) + getUnknownFields().hashCode();
memoizedHashCode = hash;
return hash;
@@ -585,6 +615,7 @@ public Builder clear() {
statements_ = com.google.protobuf.LazyStringArrayList.emptyList();
operationId_ = "";
protoDescriptors_ = com.google.protobuf.ByteString.EMPTY;
+ throughputMode_ = false;
return this;
}
@@ -636,6 +667,9 @@ private void buildPartial0(
if (((from_bitField0_ & 0x00000008) != 0)) {
result.protoDescriptors_ = protoDescriptors_;
}
+ if (((from_bitField0_ & 0x00000010) != 0)) {
+ result.throughputMode_ = throughputMode_;
+ }
}
@java.lang.Override
@@ -708,6 +742,9 @@ public Builder mergeFrom(com.google.spanner.admin.database.v1.UpdateDatabaseDdlR
if (other.getProtoDescriptors() != com.google.protobuf.ByteString.EMPTY) {
setProtoDescriptors(other.getProtoDescriptors());
}
+ if (other.getThroughputMode() != false) {
+ setThroughputMode(other.getThroughputMode());
+ }
this.mergeUnknownFields(other.getUnknownFields());
onChanged();
return this;
@@ -759,6 +796,12 @@ public Builder mergeFrom(
bitField0_ |= 0x00000008;
break;
} // case 34
+ case 40:
+ {
+ throughputMode_ = input.readBool();
+ bitField0_ |= 0x00000010;
+ break;
+ } // case 40
default:
{
if (!super.parseUnknownField(input, extensionRegistry, tag)) {
@@ -1390,6 +1433,68 @@ public Builder clearProtoDescriptors() {
return this;
}
+ private boolean throughputMode_;
+
+ /**
+ *
+ *
+ *
+ * Optional. This field is exposed to be used by the Spanner Migration Tool.
+ * For more details, see
+ * [SMT](https://github.com/GoogleCloudPlatform/spanner-migration-tool).
+ *
+ *
+ * bool throughput_mode = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ * @return The throughputMode.
+ */
+ @java.lang.Override
+ public boolean getThroughputMode() {
+ return throughputMode_;
+ }
+
+ /**
+ *
+ *
+ *
+ * Optional. This field is exposed to be used by the Spanner Migration Tool.
+ * For more details, see
+ * [SMT](https://github.com/GoogleCloudPlatform/spanner-migration-tool).
+ *
+ *
+ * bool throughput_mode = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ * @param value The throughputMode to set.
+ * @return This builder for chaining.
+ */
+ public Builder setThroughputMode(boolean value) {
+
+ throughputMode_ = value;
+ bitField0_ |= 0x00000010;
+ onChanged();
+ return this;
+ }
+
+ /**
+ *
+ *
+ *
+ * Optional. This field is exposed to be used by the Spanner Migration Tool.
+ * For more details, see
+ * [SMT](https://github.com/GoogleCloudPlatform/spanner-migration-tool).
+ *
+ *
+ * bool throughput_mode = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ * @return This builder for chaining.
+ */
+ public Builder clearThroughputMode() {
+ bitField0_ = (bitField0_ & ~0x00000010);
+ throughputMode_ = false;
+ onChanged();
+ return this;
+ }
+
@java.lang.Override
public final Builder setUnknownFields(final com.google.protobuf.UnknownFieldSet unknownFields) {
return super.setUnknownFields(unknownFields);
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java
index 755576518a9..cfa0c4d916d 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/java/com/google/spanner/admin/database/v1/UpdateDatabaseDdlRequestOrBuilder.java
@@ -199,4 +199,19 @@ public interface UpdateDatabaseDdlRequestOrBuilder
* @return The protoDescriptors.
*/
com.google.protobuf.ByteString getProtoDescriptors();
+
+ /**
+ *
+ *
+ *
+ * Optional. This field is exposed to be used by the Spanner Migration Tool.
+ * For more details, see
+ * [SMT](https://github.com/GoogleCloudPlatform/spanner-migration-tool).
+ *
+ *
+ * bool throughput_mode = 5 [(.google.api.field_behavior) = OPTIONAL];
+ *
+ * @return The throughputMode.
+ */
+ boolean getThroughputMode();
}
diff --git a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto
index 084f98c68b8..36e06f1e1f0 100644
--- a/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto
+++ b/proto-google-cloud-spanner-admin-database-v1/src/main/proto/google/spanner/admin/database/v1/spanner_database_admin.proto
@@ -813,6 +813,11 @@ message UpdateDatabaseDdlRequest {
// For more details, see protobuffer [self
// description](https://developers.google.com/protocol-buffers/docs/techniques#self-description).
bytes proto_descriptors = 4 [(google.api.field_behavior) = OPTIONAL];
+
+ // Optional. This field is exposed to be used by the Spanner Migration Tool.
+ // For more details, see
+ // [SMT](https://github.com/GoogleCloudPlatform/spanner-migration-tool).
+ bool throughput_mode = 5 [(google.api.field_behavior) = OPTIONAL];
}
// Action information extracted from a DDL statement. This proto is used to
diff --git a/proto-google-cloud-spanner-admin-instance-v1/pom.xml b/proto-google-cloud-spanner-admin-instance-v1/pom.xml
index bf9c63ccd25..6db2494d4d7 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/pom.xml
+++ b/proto-google-cloud-spanner-admin-instance-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.93.0
+ 6.94.0
proto-google-cloud-spanner-admin-instance-v1
PROTO library for proto-google-cloud-spanner-admin-instance-v1
com.google.cloud
google-cloud-spanner-parent
- 6.93.0
+ 6.94.0
diff --git a/proto-google-cloud-spanner-executor-v1/pom.xml b/proto-google-cloud-spanner-executor-v1/pom.xml
index 1cf10ea4ff5..5f52c82f5a2 100644
--- a/proto-google-cloud-spanner-executor-v1/pom.xml
+++ b/proto-google-cloud-spanner-executor-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-executor-v1
- 6.93.0
+ 6.94.0
proto-google-cloud-spanner-executor-v1
Proto library for google-cloud-spanner
com.google.cloud
google-cloud-spanner-parent
- 6.93.0
+ 6.94.0
diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml
index ff578e86537..3467a0b42cb 100644
--- a/proto-google-cloud-spanner-v1/pom.xml
+++ b/proto-google-cloud-spanner-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.93.0
+ 6.94.0
proto-google-cloud-spanner-v1
PROTO library for proto-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.93.0
+ 6.94.0
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index 10457c70ef6..51fed236a68 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -33,7 +33,7 @@
com.google.cloud
google-cloud-spanner
- 6.89.0
+ 6.93.0
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 5fb9361d004..6362fc44af7 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -32,7 +32,7 @@
com.google.cloud
google-cloud-spanner
- 6.93.0
+ 6.94.0
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index fa7df05da05..2769859850f 100644
--- a/samples/snippets/pom.xml
+++ b/samples/snippets/pom.xml
@@ -34,7 +34,7 @@
com.google.cloud
libraries-bom
- 26.57.0
+ 26.60.0
pom
import
diff --git a/samples/snippets/src/main/java/com/example/spanner/DatabaseAddSplitPointsSample.java b/samples/snippets/src/main/java/com/example/spanner/DatabaseAddSplitPointsSample.java
index 05c650dbfb7..390ac6c3b21 100644
--- a/samples/snippets/src/main/java/com/example/spanner/DatabaseAddSplitPointsSample.java
+++ b/samples/snippets/src/main/java/com/example/spanner/DatabaseAddSplitPointsSample.java
@@ -66,8 +66,7 @@ static void addSplitPoints(String projectId, String instanceId, String databaseI
com.google.spanner.admin.database.v1.SplitPoints splitPointForTable =
SplitPoints.newBuilder()
.setTable("Singers")
- .setKeys(
- 0,
+ .addKeys(
com.google.spanner.admin.database.v1.SplitPoints.Key.newBuilder()
.setKeyParts(
ListValue.newBuilder()
@@ -79,8 +78,7 @@ static void addSplitPoints(String projectId, String instanceId, String databaseI
com.google.spanner.admin.database.v1.SplitPoints splitPointForIndex =
SplitPoints.newBuilder()
.setIndex("SingersByFirstLastName")
- .setKeys(
- 0,
+ .addKeys(
com.google.spanner.admin.database.v1.SplitPoints.Key.newBuilder()
.setKeyParts(
ListValue.newBuilder()
@@ -93,16 +91,14 @@ static void addSplitPoints(String projectId, String instanceId, String databaseI
com.google.spanner.admin.database.v1.SplitPoints splitPointForIndexWitTableKey =
SplitPoints.newBuilder()
.setIndex("SingersByFirstLastName")
- .setKeys(
- 0,
+ .addKeys(
com.google.spanner.admin.database.v1.SplitPoints.Key.newBuilder()
.setKeyParts(
ListValue.newBuilder()
.addValues(Value.newBuilder().setStringValue("Jane").build())
.addValues(Value.newBuilder().setStringValue("Doe").build())
.build()))
- .setKeys(
- 1,
+ .addKeys(
com.google.spanner.admin.database.v1.SplitPoints.Key.newBuilder()
.setKeyParts(
ListValue.newBuilder()
diff --git a/samples/snippets/src/main/java/com/example/spanner/UnnamedParametersExample.java b/samples/snippets/src/main/java/com/example/spanner/UnnamedParametersExample.java
new file mode 100644
index 00000000000..3c73a7591d1
--- /dev/null
+++ b/samples/snippets/src/main/java/com/example/spanner/UnnamedParametersExample.java
@@ -0,0 +1,84 @@
+/*
+ * 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.Timestamp;
+import com.google.cloud.spanner.DatabaseClient;
+import com.google.cloud.spanner.DatabaseId;
+import com.google.cloud.spanner.ResultSet;
+import com.google.cloud.spanner.Spanner;
+import com.google.cloud.spanner.SpannerOptions;
+import com.google.cloud.spanner.Statement;
+import com.google.cloud.spanner.Statement.StatementFactory;
+import java.time.LocalDate;
+
+public class UnnamedParametersExample {
+
+ static void executeQueryWithUnnamedParameters() {
+ // TODO(developer): Replace these variables before running the sample.
+ String projectId = "my-project";
+ String instanceId = "my-instance";
+ String databaseId = "my-database";
+
+ executeQueryWithUnnamedParameters(projectId, instanceId, databaseId);
+ }
+
+ static void executeQueryWithUnnamedParameters(
+ String projectId, String instanceId, String databaseId) {
+ try (Spanner spanner =
+ SpannerOptions.newBuilder().setProjectId(projectId).build().getService()) {
+
+ DatabaseClient client =
+ spanner.getDatabaseClient(DatabaseId.of(projectId, instanceId, databaseId));
+ StatementFactory statementFactory = client.getStatementFactory();
+
+ // Insert a row with unnamed parameters
+ client
+ .readWriteTransaction()
+ .run(
+ transaction -> {
+ Statement statement = statementFactory
+ .withUnnamedParameters("INSERT INTO Students(StudentId, Name, IsNRI, AvgMarks, "
+ + "JoinedAt, PinCode, CreatedAt) VALUES(?, ?, ?, ?, ?, ?, ?)",
+ 1000001,
+ "Google",
+ false,
+ (float) 34.5,
+ LocalDate.of(2024, 3, 31),
+ "123456",
+ Timestamp.now());
+ transaction.executeUpdate(statement);
+
+ return null;
+ });
+ System.out.println("Row is inserted.");
+
+ // Query the table with unnamed parameters
+ try (ResultSet resultSet =
+ client
+ .singleUse()
+ .executeQuery(
+ statementFactory.withUnnamedParameters(
+ "SELECT * FROM Students WHERE StudentId = ?", 1000001))) {
+ while (resultSet.next()) {
+ System.out.println(resultSet.getString("Name"));
+ }
+ }
+ System.out.println("Row is fetched.");
+ }
+ }
+}
diff --git a/samples/snippets/src/test/java/com/example/spanner/DatabaseAddSplitPointsIT.java b/samples/snippets/src/test/java/com/example/spanner/DatabaseAddSplitPointsIT.java
index 7b2be314250..c9215b78cdc 100644
--- a/samples/snippets/src/test/java/com/example/spanner/DatabaseAddSplitPointsIT.java
+++ b/samples/snippets/src/test/java/com/example/spanner/DatabaseAddSplitPointsIT.java
@@ -46,7 +46,8 @@ public void setup() throws ExecutionException, InterruptedException {
.get();
}
- @Test
+ // TODO: Enable the test once the issue with split points is resolved
+ // @Test
public void testAddSplits() throws Exception {
final String out =
SampleRunner.runSample(
diff --git a/samples/snippets/src/test/java/com/example/spanner/UnnamedParametersIT.java b/samples/snippets/src/test/java/com/example/spanner/UnnamedParametersIT.java
new file mode 100644
index 00000000000..d6c900dd60e
--- /dev/null
+++ b/samples/snippets/src/test/java/com/example/spanner/UnnamedParametersIT.java
@@ -0,0 +1,61 @@
+/*
+ * 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 org.junit.Assert.assertTrue;
+
+import com.google.cloud.spanner.DatabaseId;
+import com.google.common.collect.ImmutableList;
+import java.util.concurrent.ExecutionException;
+import org.junit.Before;
+import org.junit.Test;
+
+public class UnnamedParametersIT extends SampleTestBase {
+ private static String databaseId;
+
+ @Before
+ public void setup() throws ExecutionException, InterruptedException {
+ databaseId = idGenerator.generateDatabaseId();
+ databaseAdminClient
+ .createDatabase(
+ databaseAdminClient
+ .newDatabaseBuilder(DatabaseId.of(projectId, instanceId, databaseId))
+ .build(),
+ ImmutableList.of(
+ "CREATE TABLE Students ("
+ + " StudentId INT64 NOT NULL PRIMARY KEY,"
+ + " Name STRING(1024) NOT NULL,"
+ + " IsNRI BOOL NOT NULL,"
+ + " AvgMarks FLOAT32 NOT NULL,"
+ + " JoinedAt DATE NOT NULL,"
+ + " PinCode INT64 NOT NULL,"
+ + " CreatedAt TIMESTAMP NOT NULL"
+ + ")"))
+ .get();
+ }
+
+ @Test
+ public void testUnnamedParameters() throws Exception {
+ final String out =
+ SampleRunner.runSample(
+ () -> UnnamedParametersExample.executeQueryWithUnnamedParameters(projectId, instanceId,
+ databaseId));
+ assertTrue(out.contains("Row is inserted."));
+ assertTrue(out.contains("Google"));
+ assertTrue(out.contains("Row is fetched."));
+ }
+}
diff --git a/versions.txt b/versions.txt
index 41c52cc2547..067002c8e01 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,13 +1,13 @@
# Format:
# module:released-version:current-version
-proto-google-cloud-spanner-admin-instance-v1:6.93.0:6.93.0
-proto-google-cloud-spanner-v1:6.93.0:6.93.0
-proto-google-cloud-spanner-admin-database-v1:6.93.0:6.93.0
-grpc-google-cloud-spanner-v1:6.93.0:6.93.0
-grpc-google-cloud-spanner-admin-instance-v1:6.93.0:6.93.0
-grpc-google-cloud-spanner-admin-database-v1:6.93.0:6.93.0
-google-cloud-spanner:6.93.0:6.93.0
-google-cloud-spanner-executor:6.93.0:6.93.0
-proto-google-cloud-spanner-executor-v1:6.93.0:6.93.0
-grpc-google-cloud-spanner-executor-v1:6.93.0:6.93.0
+proto-google-cloud-spanner-admin-instance-v1:6.94.0:6.94.0
+proto-google-cloud-spanner-v1:6.94.0:6.94.0
+proto-google-cloud-spanner-admin-database-v1:6.94.0:6.94.0
+grpc-google-cloud-spanner-v1:6.94.0:6.94.0
+grpc-google-cloud-spanner-admin-instance-v1:6.94.0:6.94.0
+grpc-google-cloud-spanner-admin-database-v1:6.94.0:6.94.0
+google-cloud-spanner:6.94.0:6.94.0
+google-cloud-spanner-executor:6.94.0:6.94.0
+proto-google-cloud-spanner-executor-v1:6.94.0:6.94.0
+grpc-google-cloud-spanner-executor-v1:6.94.0:6.94.0