diff --git a/google-cloud-spanner/clirr-ignored-differences.xml b/google-cloud-spanner/clirr-ignored-differences.xml
index d0763c8918..fd420f4245 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 1d3b615206..533be8a047 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 ac3341e8f3..cfd63c89d4 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 b9f495cc32..629fe7c69d 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 8b78fe4d14..2b48c64d2e 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));
+ }
+ }
}