From 0d772633c92d59bf3fbf31aaa3aa6a93512e6821 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?= Date: Fri, 14 Nov 2025 11:55:03 +0100 Subject: [PATCH 1/2] chore: add unknownLength connection property Add an unknownLength connection property that can be used to determine what length should be returned by a driver when it is requested to return the length of a data type without a known length. This is similar to the unknownLength connection parameter implemented by the PostgreSQL JDBC driver: https://jdbc.postgresql.org/documentation/use/#connection-parameters --- google-cloud-spanner/clirr-ignored-differences.xml | 5 +++++ .../google/cloud/spanner/connection/Connection.java | 4 ++++ .../cloud/spanner/connection/ConnectionImpl.java | 3 ++- .../spanner/connection/ConnectionProperties.java | 12 ++++++++++++ .../connection/ConnectionStateMockServerTest.java | 9 +++++++++ 5 files changed, 32 insertions(+), 1 deletion(-) diff --git a/google-cloud-spanner/clirr-ignored-differences.xml b/google-cloud-spanner/clirr-ignored-differences.xml index d0763c8918e..fd420f42457 100644 --- a/google-cloud-spanner/clirr-ignored-differences.xml +++ b/google-cloud-spanner/clirr-ignored-differences.xml @@ -1057,4 +1057,9 @@ 8001 com/google/cloud/spanner/LatencyTest + + 7012 + com/google/cloud/spanner/connection/Connection + java.lang.Object getConnectionPropertyValue(com.google.cloud.spanner.connection.ConnectionProperty) + diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java index 1d3b6152066..533be8a047f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/Connection.java @@ -189,6 +189,10 @@ public interface Connection extends AutoCloseable { */ void reset(); + /** Returns the current value of the given connection property. */ + T getConnectionPropertyValue( + com.google.cloud.spanner.connection.ConnectionProperty property); + /** * Sets autocommit on/off for this {@link Connection}. Connections in autocommit mode will apply * any changes to the database directly without waiting for an explicit commit. DDL- and DML diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java index ac3341e8f38..cfd63c89d49 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java @@ -574,7 +574,8 @@ public boolean isClosed() { return closed; } - private T getConnectionPropertyValue( + @Override + public T getConnectionPropertyValue( com.google.cloud.spanner.connection.ConnectionProperty property) { return this.connectionState.getValue(property).getValue(); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java index b9f495cc321..13d469415ef 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java @@ -766,6 +766,18 @@ public class ConnectionProperties { DEFAULT_BATCH_DML_UPDATE_COUNT, LongConverter.INSTANCE, Context.USER); + public static final ConnectionProperty UNKNOWN_LENGTH = + create( + "unknownLength", + "Spanner does not return the length of the selected columns in query results. " + + "When returning meta-data about these columns through functions like " + + "ResultSetMetaData.getColumnDisplaySize and ResultSetMetaData.getPrecision, we must " + + "provide a value. Various client tools and applications have different ideas about " + + "what they would like to see. This property specifies the length to return for types " + + "of unknown length.", + /* defaultValue= */ 50, + NonNegativeIntegerConverter.INSTANCE, + Context.USER); static final ImmutableMap> CONNECTION_PROPERTIES = CONNECTION_PROPERTIES_BUILDER.build(); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStateMockServerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStateMockServerTest.java index 8b78fe4d14b..2b48c64d2e0 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStateMockServerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionStateMockServerTest.java @@ -291,4 +291,13 @@ public void testSetLocalInvalidValue() { assertTrue(connection.isRetryAbortsInternally()); } } + + @Test + public void testGetConnectionProperty() { + try (Connection connection = createConnection()) { + ConnectionProperty unknownLength = ConnectionProperties.UNKNOWN_LENGTH; + assertEquals( + unknownLength.getDefaultValue(), connection.getConnectionPropertyValue(unknownLength)); + } + } } From a40eacf19d656e1e74c5f07553f9cade1daa9289 Mon Sep 17 00:00:00 2001 From: cloud-java-bot Date: Fri, 14 Nov 2025 10:59:34 +0000 Subject: [PATCH 2/2] chore: generate libraries at Fri Nov 14 10:56:58 UTC 2025 --- .../spanner/connection/ConnectionProperties.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java index 13d469415ef..629fe7c69da 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionProperties.java @@ -769,12 +769,12 @@ public class ConnectionProperties { public static final ConnectionProperty UNKNOWN_LENGTH = create( "unknownLength", - "Spanner does not return the length of the selected columns in query results. " - + "When returning meta-data about these columns through functions like " - + "ResultSetMetaData.getColumnDisplaySize and ResultSetMetaData.getPrecision, we must " - + "provide a value. Various client tools and applications have different ideas about " - + "what they would like to see. This property specifies the length to return for types " - + "of unknown length.", + "Spanner does not return the length of the selected columns in query results. When" + + " returning meta-data about these columns through functions like" + + " ResultSetMetaData.getColumnDisplaySize and ResultSetMetaData.getPrecision, we" + + " must provide a value. Various client tools and applications have different ideas" + + " about what they would like to see. This property specifies the length to return" + + " for types of unknown length.", /* defaultValue= */ 50, NonNegativeIntegerConverter.INSTANCE, Context.USER);