Skip to content

Commit d7cb90d

Browse files
authored
docs: add sample for using array of struct query param (#1871)
1 parent 91f575e commit d7cb90d

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

samples/snippets/src/main/java/com/example/spanner/jdbc/JdbcSample.java

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@
2222
import com.google.cloud.spanner.Mutation;
2323
import com.google.cloud.spanner.SpannerExceptionFactory;
2424
import com.google.cloud.spanner.SpannerOptions;
25+
import com.google.cloud.spanner.Struct;
26+
import com.google.cloud.spanner.Type;
27+
import com.google.cloud.spanner.Type.StructField;
28+
import com.google.cloud.spanner.Value;
2529
import com.google.cloud.spanner.admin.database.v1.DatabaseAdminClient;
2630
import com.google.cloud.spanner.admin.database.v1.DatabaseAdminSettings;
2731
import com.google.cloud.spanner.jdbc.CloudSpannerJdbcConnection;
@@ -1519,6 +1523,59 @@ static void partitionedDmlPostgreSQL(
15191523
}
15201524
// [END spanner_postgresql_partitioned_dml]
15211525

1526+
static void arrayOfStructAsQueryParameter(
1527+
final String project,
1528+
final String instance,
1529+
final String database,
1530+
final Properties properties) throws SQLException {
1531+
try (Connection connection =
1532+
DriverManager.getConnection(
1533+
String.format(
1534+
"jdbc:cloudspanner:/projects/%s/instances/%s/databases/%s",
1535+
project, instance, database),
1536+
properties)) {
1537+
try (Statement statement = connection.createStatement()) {
1538+
statement.execute(
1539+
"create table if not exists my_table "
1540+
+ "(col1 string(max), col2 int64) primary key (col1)");
1541+
statement.execute(
1542+
"insert or update into my_table (col1, col2) "
1543+
+ "values ('value1', 1), ('value2', 2), ('value3', 3)");
1544+
}
1545+
1546+
try (PreparedStatement statement = connection.prepareStatement(
1547+
"select * from my_table "
1548+
+ "where STRUCT<col1 STRING, col2 INT64>(col1, col2) "
1549+
+ "in unnest (?)")) {
1550+
statement.setObject(
1551+
1,
1552+
Value.structArray(
1553+
com.google.cloud.spanner.Type.struct(
1554+
StructField.of("col1", Type.string()),
1555+
StructField.of("col2", Type.int64())),
1556+
ImmutableList.of(
1557+
Struct.newBuilder()
1558+
.set("col1").to("value1")
1559+
.set("col2").to(1L)
1560+
.build(),
1561+
Struct.newBuilder()
1562+
.set("col1").to("value2")
1563+
.set("col2").to(2L)
1564+
.build())));
1565+
try (java.sql.ResultSet resultSet = statement.executeQuery()) {
1566+
while (resultSet.next()) {
1567+
for (int col = 1;
1568+
col <= resultSet.getMetaData().getColumnCount();
1569+
col++) {
1570+
System.out.printf("%s;", resultSet.getString(col));
1571+
}
1572+
System.out.println();
1573+
}
1574+
}
1575+
}
1576+
}
1577+
}
1578+
15221579
/** The expected number of command line arguments. */
15231580
private static final int NUM_EXPECTED_ARGS = 3;
15241581

@@ -1697,6 +1754,13 @@ static boolean runGoogleSQLSample(
16971754
database.getDatabase(),
16981755
createProperties());
16991756
return true;
1757+
case "arrayofstructparam":
1758+
arrayOfStructAsQueryParameter(
1759+
database.getInstanceId().getProject(),
1760+
database.getInstanceId().getInstance(),
1761+
database.getDatabase(),
1762+
createProperties());
1763+
return true;
17001764
default:
17011765
return false;
17021766
}

samples/snippets/src/test/java/com/example/spanner/jdbc/JdbcSampleTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import static com.example.spanner.jdbc.JdbcSample.addColumn;
2020
import static com.example.spanner.jdbc.JdbcSample.addColumnPostgreSQL;
21+
import static com.example.spanner.jdbc.JdbcSample.arrayOfStructAsQueryParameter;
2122
import static com.example.spanner.jdbc.JdbcSample.createConnection;
2223
import static com.example.spanner.jdbc.JdbcSample.createConnectionWithEmulator;
2324
import static com.example.spanner.jdbc.JdbcSample.createDatabase;
@@ -243,6 +244,10 @@ public void testGoogleSQLSamples() throws Exception {
243244

244245
result = runSample(() -> partitionedDml(PROJECT_ID, INSTANCE_ID, DATABASE_ID, properties));
245246
assertEquals("Updated at least 3 albums\n", result);
247+
248+
result = runSample(
249+
() -> arrayOfStructAsQueryParameter(PROJECT_ID, INSTANCE_ID, DATABASE_ID, properties));
250+
assertEquals("value1;1;\nvalue2;2;\n", result);
246251
}
247252

248253
@Test

0 commit comments

Comments
 (0)