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));

Reply via email to