This is an automated email from the ASF dual-hosted git repository.
yhu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/beam.git
The following commit(s) were added to refs/heads/master by this push:
new d70f516ce20 fix: Spanner PostgreSQL should filter on 'public' schema
(#29984)
d70f516ce20 is described below
commit d70f516ce20ceefb2e0a80e8d1c7fdd34ffc6e61
Author: Knut Olav Løite <[email protected]>
AuthorDate: Fri Jan 12 16:18:33 2024 +0100
fix: Spanner PostgreSQL should filter on 'public' schema (#29984)
* fix: filter on 'public' schema
Cloud Spanner PostgreSQL databases should only return tables in the
'public' schema. Filtering on all schemas that are not one of the system
schemas will fail in any of the following cases:
1. Cloud Spanner introduces a new system schema
2. Cloud Spanner introduces support for named user schemas
* fix: change mocked test query
* chore: run code formatter
* chore: re-run tests
---
.../org/apache/beam/sdk/io/gcp/spanner/ReadSpannerSchema.java | 8 +++-----
.../org/apache/beam/sdk/io/gcp/spanner/SpannerIOWriteTest.java | 3 +--
2 files changed, 4 insertions(+), 7 deletions(-)
diff --git
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/ReadSpannerSchema.java
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/ReadSpannerSchema.java
index 9c82701e5a4..11220b69b7b 100644
---
a/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/ReadSpannerSchema.java
+++
b/sdks/java/io/google-cloud-platform/src/main/java/org/apache/beam/sdk/io/gcp/spanner/ReadSpannerSchema.java
@@ -154,14 +154,12 @@ public class ReadSpannerSchema extends DoFn<Void,
SpannerSchema> {
+ " FROM ("
+ " SELECT c.table_name, c.column_name, c.spanner_type,
c.ordinal_position"
+ " FROM information_schema.columns as c"
- + " WHERE c.table_schema NOT IN"
- + " ('information_schema', 'spanner_sys', 'pg_catalog'))
AS c"
+ + " WHERE c.table_schema='public') AS c"
+ " LEFT OUTER JOIN ("
+ " SELECT t.table_name, t.column_name, COUNT(*) AS indices"
+ " FROM information_schema.index_columns AS t "
+ " WHERE t.index_name != 'PRIMARY_KEY'"
- + " AND t.table_schema NOT IN"
- + " ('information_schema', 'spanner_sys', 'pg_catalog')"
+ + " AND t.table_schema='public'"
+ " GROUP BY t.table_name, t.column_name) AS t"
+ " USING (table_name, column_name)"
+ " ORDER BY c.table_name, c.ordinal_position";
@@ -188,7 +186,7 @@ public class ReadSpannerSchema extends DoFn<Void,
SpannerSchema> {
"SELECT t.table_name, t.column_name, t.column_ordering"
+ " FROM information_schema.index_columns AS t "
+ " WHERE t.index_name = 'PRIMARY_KEY'"
- + " AND t.table_schema NOT IN ('information_schema',
'spanner_sys', 'pg_catalog')"
+ + " AND t.table_schema='public'"
+ " ORDER BY t.table_name, t.ordinal_position";
break;
default:
diff --git
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/SpannerIOWriteTest.java
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/SpannerIOWriteTest.java
index 9cd6008a946..8b1680a6730 100644
---
a/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/SpannerIOWriteTest.java
+++
b/sdks/java/io/google-cloud-platform/src/test/java/org/apache/beam/sdk/io/gcp/spanner/SpannerIOWriteTest.java
@@ -227,8 +227,7 @@ public class SpannerIOWriteTest implements Serializable {
}
Statement st = (Statement) argument;
return st.getSql().contains("information_schema.columns")
- && st.getSql()
- .contains("('information_schema', 'spanner_sys',
'pg_catalog')");
+ && st.getSql().contains("'public'");
}
})))
.thenReturn(ResultSets.forRows(type, rows));