From 01eade8bb6a59d169cb06e945dcf2c20be8a0c82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?= Date: Thu, 12 Sep 2024 10:46:16 +0200 Subject: [PATCH] docs: simplify dialect detection for MyBatis sample (#1739) --- .../spanner/sample/JdbcConfiguration.java | 51 ++++--------------- .../cloud/spanner/sample/ApplicationTest.java | 2 +- 2 files changed, 10 insertions(+), 43 deletions(-) diff --git a/samples/spring-data-mybatis/src/main/java/com/google/cloud/spanner/sample/JdbcConfiguration.java b/samples/spring-data-mybatis/src/main/java/com/google/cloud/spanner/sample/JdbcConfiguration.java index 2398add31..7480d80c0 100644 --- a/samples/spring-data-mybatis/src/main/java/com/google/cloud/spanner/sample/JdbcConfiguration.java +++ b/samples/spring-data-mybatis/src/main/java/com/google/cloud/spanner/sample/JdbcConfiguration.java @@ -16,12 +16,9 @@ package com.google.cloud.spanner.sample; -import com.google.cloud.spanner.jdbc.JdbcSqlException; -import com.google.rpc.Code; -import java.util.Objects; +import com.google.cloud.spanner.jdbc.CloudSpannerJdbcConnection; import org.springframework.context.annotation.Configuration; -import org.springframework.dao.DataAccessException; -import org.springframework.dao.IncorrectResultSizeDataAccessException; +import org.springframework.jdbc.core.ConnectionCallback; import org.springframework.jdbc.core.JdbcOperations; @Configuration @@ -29,42 +26,12 @@ public class JdbcConfiguration { /** Returns true if the current database is a Cloud Spanner PostgreSQL database. */ public static boolean isCloudSpannerPG(JdbcOperations operations) { - try { - Long value = - operations.queryForObject( - "select 1 " - + "from information_schema.database_options " - + "where schema_name='public' " - + "and option_name='database_dialect' " - + "and option_value='POSTGRESQL'", - Long.class); - // Shouldn't really be anything else than 1 if the query succeeded, but this avoids complaints - // from the compiler. - if (Objects.equals(1L, value)) { - return true; - } - } catch (IncorrectResultSizeDataAccessException exception) { - // This indicates that it is a valid Cloud Spanner database, but not one that uses the - // PostgreSQL dialect. - throw new RuntimeException( - "The selected Cloud Spanner database does not use the PostgreSQL dialect"); - } catch (DataAccessException exception) { - if (exception.getCause() instanceof JdbcSqlException) { - JdbcSqlException jdbcSqlException = (JdbcSqlException) exception.getCause(); - if (jdbcSqlException.getCode() == Code.PERMISSION_DENIED - || jdbcSqlException.getCode() == Code.NOT_FOUND) { - throw new RuntimeException( - "Failed to get the dialect of the Cloud Spanner database. " - + "Please check that the selected database exists and that you have permission to access it. " - + "Cause: " - + exception.getCause().getMessage(), - exception.getCause()); - } - } - // ignore and fall through - } catch (Throwable exception) { - // ignore and fall through - } - return false; + return Boolean.TRUE.equals( + operations.execute( + (ConnectionCallback) + connection -> + connection.isWrapperFor(CloudSpannerJdbcConnection.class) + && com.google.cloud.spanner.Dialect.POSTGRESQL.equals( + connection.unwrap(CloudSpannerJdbcConnection.class).getDialect()))); } } diff --git a/samples/spring-data-mybatis/src/test/java/com/google/cloud/spanner/sample/ApplicationTest.java b/samples/spring-data-mybatis/src/test/java/com/google/cloud/spanner/sample/ApplicationTest.java index 4a60d9339..f0cc17f2f 100644 --- a/samples/spring-data-mybatis/src/test/java/com/google/cloud/spanner/sample/ApplicationTest.java +++ b/samples/spring-data-mybatis/src/test/java/com/google/cloud/spanner/sample/ApplicationTest.java @@ -876,7 +876,7 @@ public void testRunApplication() { Application.main(new String[] {}); assertEquals( - 40, + 39, mockSpanner.getRequestsOfType(ExecuteSqlRequest.class).stream() .filter( request ->