diff --git a/.github/workflows/unmanaged_dependency_check.yaml b/.github/workflows/unmanaged_dependency_check.yaml
index 2cf303dc3..c4ee2b91a 100644
--- a/.github/workflows/unmanaged_dependency_check.yaml
+++ b/.github/workflows/unmanaged_dependency_check.yaml
@@ -14,6 +14,6 @@ jobs:
shell: bash
run: .kokoro/build.sh
- name: Unmanaged dependency check
- uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.52.3
+ uses: googleapis/sdk-platform-java/java-shared-dependencies/unmanaged-dependency-check@google-cloud-shared-dependencies/v3.53.0
with:
bom-path: pom.xml
diff --git a/.kokoro/presubmit/graalvm-native-a.cfg b/.kokoro/presubmit/graalvm-native-a.cfg
index 85695810d..0cf782fcc 100644
--- a/.kokoro/presubmit/graalvm-native-a.cfg
+++ b/.kokoro/presubmit/graalvm-native-a.cfg
@@ -3,7 +3,7 @@
# Configure the docker image for kokoro-trampoline.
env_vars: {
key: "TRAMPOLINE_IMAGE"
- value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.52.3"
+ value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_a:3.53.0"
}
env_vars: {
diff --git a/.kokoro/presubmit/graalvm-native-b.cfg b/.kokoro/presubmit/graalvm-native-b.cfg
index c2efdcebf..15deac1d1 100644
--- a/.kokoro/presubmit/graalvm-native-b.cfg
+++ b/.kokoro/presubmit/graalvm-native-b.cfg
@@ -3,7 +3,7 @@
# Configure the docker image for kokoro-trampoline.
env_vars: {
key: "TRAMPOLINE_IMAGE"
- value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.52.3"
+ value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_b:3.53.0"
}
env_vars: {
diff --git a/.kokoro/presubmit/graalvm-native-c.cfg b/.kokoro/presubmit/graalvm-native-c.cfg
index 20946e7b0..928626c44 100644
--- a/.kokoro/presubmit/graalvm-native-c.cfg
+++ b/.kokoro/presubmit/graalvm-native-c.cfg
@@ -3,7 +3,7 @@
# Configure the docker image for kokoro-trampoline.
env_vars: {
key: "TRAMPOLINE_IMAGE"
- value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_c:3.52.3"
+ value: "gcr.io/cloud-devrel-public-resources/graalvm_sdk_platform_c:3.53.0"
}
env_vars: {
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d5fe61cbd..4129da1b0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,27 @@
# Changelog
+## [2.33.2](https://github.com/googleapis/java-spanner-jdbc/compare/v2.33.1...v2.33.2) (2025-10-24)
+
+
+### Bug Fixes
+
+* FindColumn is case-sensitive for unquoted identifier ([#2261](https://github.com/googleapis/java-spanner-jdbc/issues/2261)) ([71441f7](https://github.com/googleapis/java-spanner-jdbc/commit/71441f7e896d5a60c1e6bac9b9a991a9d18fbe3c))
+
+
+### Dependencies
+
+* Update dependency com.google.api.grpc:proto-google-cloud-trace-v1 to v2.78.0 ([#2252](https://github.com/googleapis/java-spanner-jdbc/issues/2252)) ([37ea3f0](https://github.com/googleapis/java-spanner-jdbc/commit/37ea3f0652462470b76a5d68f54b543b8afa8a97))
+* Update dependency com.google.cloud:google-cloud-spanner to v6.102.1 ([0d335a9](https://github.com/googleapis/java-spanner-jdbc/commit/0d335a932b8a035b90c866a8b3639d225fa329b0))
+* Update dependency com.google.cloud:google-cloud-trace to v2.78.0 ([#2253](https://github.com/googleapis/java-spanner-jdbc/issues/2253)) ([e51eaeb](https://github.com/googleapis/java-spanner-jdbc/commit/e51eaeb401a55161474c2848af51446e7669dca0))
+* Update dependency com.google.cloud:sdk-platform-java-config to v3.53.0 ([0d335a9](https://github.com/googleapis/java-spanner-jdbc/commit/0d335a932b8a035b90c866a8b3639d225fa329b0))
+* Update dependency io.opentelemetry:opentelemetry-bom to v1.55.0 ([#2251](https://github.com/googleapis/java-spanner-jdbc/issues/2251)) ([14e9ea6](https://github.com/googleapis/java-spanner-jdbc/commit/14e9ea6b9356eb59cd42a14bea4af3ca102a5cf1))
+* Update dependency org.springframework.boot:spring-boot to v3.5.7 ([#2263](https://github.com/googleapis/java-spanner-jdbc/issues/2263)) ([0a916b9](https://github.com/googleapis/java-spanner-jdbc/commit/0a916b97925b0651a8cbc69e546bf6539fc39b27))
+* Update dependency org.springframework.boot:spring-boot-starter-data-jdbc to v3.5.7 ([#2264](https://github.com/googleapis/java-spanner-jdbc/issues/2264)) ([3f8d0db](https://github.com/googleapis/java-spanner-jdbc/commit/3f8d0db636a6278a3eefd8de0835f776efcbb0e0))
+* Update dependency org.springframework.boot:spring-boot-starter-parent to v3.5.7 ([#2267](https://github.com/googleapis/java-spanner-jdbc/issues/2267)) ([1f79712](https://github.com/googleapis/java-spanner-jdbc/commit/1f79712792587b8827e5546064f61e8e7e0bec11))
+* Update dependency org.springframework.data:spring-data-bom to v2025.0.5 ([#2258](https://github.com/googleapis/java-spanner-jdbc/issues/2258)) ([1054cdd](https://github.com/googleapis/java-spanner-jdbc/commit/1054cddc60b811fe919a8313f433b3490e0f0cfb))
+* Update dependency org.testcontainers:testcontainers to v2 ([#2254](https://github.com/googleapis/java-spanner-jdbc/issues/2254)) ([4058ed5](https://github.com/googleapis/java-spanner-jdbc/commit/4058ed537b4c70d807d589d51410301ea73434be))
+* Update dependency org.testcontainers:testcontainers-bom to v2 ([#2255](https://github.com/googleapis/java-spanner-jdbc/issues/2255)) ([64faa98](https://github.com/googleapis/java-spanner-jdbc/commit/64faa9867b0a6d9535a03fecfcfada6d34687457))
+
## [2.33.1](https://github.com/googleapis/java-spanner-jdbc/compare/v2.33.0...v2.33.1) (2025-10-09)
diff --git a/README.md b/README.md
index 8fb6a054d..46c4e8d48 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ If you are using Maven, add this to your pom.xml file:
com.google.cloud
google-cloud-spanner-jdbc
- 2.33.1
+ 2.33.2
```
@@ -30,7 +30,7 @@ If you are using Gradle without BOM, add this to your dependencies
```Groovy
-implementation 'com.google.cloud:google-cloud-spanner-jdbc:2.33.1'
+implementation 'com.google.cloud:google-cloud-spanner-jdbc:2.33.2'
```
@@ -38,7 +38,7 @@ If you are using SBT, add this to your dependencies
```Scala
-libraryDependencies += "com.google.cloud" % "google-cloud-spanner-jdbc" % "2.33.1"
+libraryDependencies += "com.google.cloud" % "google-cloud-spanner-jdbc" % "2.33.2"
```
diff --git a/pom.xml b/pom.xml
index fcd478ebb..4fa663080 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
google-cloud-spanner-jdbc
- 2.33.1
+ 2.33.2
jar
Google Cloud Spanner JDBC
https://github.com/googleapis/java-spanner-jdbc
@@ -14,7 +14,7 @@
com.google.cloud
sdk-platform-java-config
- 3.52.3
+ 3.53.0
@@ -61,7 +61,7 @@
com.google.cloud
google-cloud-spanner-bom
- 6.102.0
+ 6.102.1
pom
import
@@ -166,7 +166,7 @@
org.testcontainers
testcontainers
- 1.21.3
+ 2.0.1
test
@@ -216,13 +216,13 @@
com.google.cloud
google-cloud-trace
- 2.76.0
+ 2.78.0
test
com.google.api.grpc
proto-google-cloud-trace-v1
- 2.76.0
+ 2.78.0
test
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index 041fab8ac..55f80e80a 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -29,7 +29,7 @@
com.google.cloud
google-cloud-spanner-jdbc
- 2.33.0
+ 2.33.1
diff --git a/samples/quickperf/pom.xml b/samples/quickperf/pom.xml
index ca7335c4f..8450000d9 100644
--- a/samples/quickperf/pom.xml
+++ b/samples/quickperf/pom.xml
@@ -12,7 +12,7 @@
com.google.cloud
sdk-platform-java-config
- 3.52.3
+ 3.53.0
@@ -27,7 +27,7 @@
com.google.cloud
libraries-bom
- 26.69.0
+ 26.70.0
pom
import
@@ -73,13 +73,13 @@
org.testcontainers
testcontainers
- 1.21.3
+ 2.0.1
test
org.springframework.boot
spring-boot
- 3.5.6
+ 3.5.7
test
@@ -95,7 +95,7 @@
org.codehaus.mojo
exec-maven-plugin
- 3.6.1
+ 3.6.2
com.google.cloud.jdbc.quickperf.QuickPerf
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 46627619c..55374ef43 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -29,7 +29,7 @@
com.google.cloud
google-cloud-spanner-jdbc
- 2.33.1
+ 2.33.2
diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml
index 07c7ab457..d936ece2e 100644
--- a/samples/snippets/pom.xml
+++ b/samples/snippets/pom.xml
@@ -9,7 +9,7 @@
com.google.cloud
sdk-platform-java-config
- 3.52.3
+ 3.53.0
@@ -26,7 +26,7 @@
com.google.cloud
libraries-bom
- 26.69.0
+ 26.70.0
pom
import
@@ -54,7 +54,7 @@
org.testcontainers
testcontainers
- 1.21.3
+ 2.0.1
test
diff --git a/samples/spring-data-jdbc/googlesql/pom.xml b/samples/spring-data-jdbc/googlesql/pom.xml
index be86aa508..c9b0390a1 100644
--- a/samples/spring-data-jdbc/googlesql/pom.xml
+++ b/samples/spring-data-jdbc/googlesql/pom.xml
@@ -23,28 +23,28 @@
org.springframework.data
spring-data-bom
- 2025.0.4
+ 2025.0.5
import
pom
com.google.cloud
google-cloud-spanner-bom
- 6.102.0
+ 6.102.1
import
pom
com.google.cloud
libraries-bom
- 26.69.0
+ 26.70.0
import
pom
io.opentelemetry
opentelemetry-bom
- 1.54.1
+ 1.55.0
pom
import
@@ -55,7 +55,7 @@
org.springframework.boot
spring-boot-starter-data-jdbc
- 3.5.6
+ 3.5.7
@@ -90,7 +90,7 @@
org.testcontainers
testcontainers
- 1.21.3
+ 2.0.1
diff --git a/samples/spring-data-jdbc/postgresql/pom.xml b/samples/spring-data-jdbc/postgresql/pom.xml
index b7305065b..581e89ec9 100644
--- a/samples/spring-data-jdbc/postgresql/pom.xml
+++ b/samples/spring-data-jdbc/postgresql/pom.xml
@@ -23,28 +23,28 @@
org.springframework.data
spring-data-bom
- 2025.0.4
+ 2025.0.5
import
pom
com.google.cloud
google-cloud-spanner-bom
- 6.102.0
+ 6.102.1
import
pom
com.google.cloud
libraries-bom
- 26.69.0
+ 26.70.0
import
pom
io.opentelemetry
opentelemetry-bom
- 1.54.1
+ 1.55.0
pom
import
@@ -55,7 +55,7 @@
org.springframework.boot
spring-boot-starter-data-jdbc
- 3.5.6
+ 3.5.7
@@ -132,7 +132,7 @@
org.testcontainers
testcontainers
- 1.21.3
+ 2.0.1
test
diff --git a/samples/spring-data-mybatis/googlesql/pom.xml b/samples/spring-data-mybatis/googlesql/pom.xml
index 0734042ae..1abc6dd0c 100644
--- a/samples/spring-data-mybatis/googlesql/pom.xml
+++ b/samples/spring-data-mybatis/googlesql/pom.xml
@@ -13,7 +13,7 @@
org.springframework.boot
spring-boot-starter-parent
- 3.5.6
+ 3.5.7
@@ -28,28 +28,28 @@
org.springframework.data
spring-data-bom
- 2025.0.4
+ 2025.0.5
import
pom
com.google.cloud
google-cloud-spanner-bom
- 6.102.0
+ 6.102.1
import
pom
com.google.cloud
libraries-bom
- 26.69.0
+ 26.70.0
import
pom
org.testcontainers
testcontainers-bom
- 1.21.3
+ 2.0.1
import
pom
@@ -94,7 +94,7 @@
com.google.cloud
google-cloud-spanner
- 6.102.0
+ 6.102.1
test-jar
test
diff --git a/samples/spring-data-mybatis/postgresql/pom.xml b/samples/spring-data-mybatis/postgresql/pom.xml
index 449634a8a..83ea8608b 100644
--- a/samples/spring-data-mybatis/postgresql/pom.xml
+++ b/samples/spring-data-mybatis/postgresql/pom.xml
@@ -13,7 +13,7 @@
org.springframework.boot
spring-boot-starter-parent
- 3.5.6
+ 3.5.7
@@ -28,21 +28,21 @@
org.springframework.data
spring-data-bom
- 2025.0.4
+ 2025.0.5
import
pom
com.google.cloud
libraries-bom
- 26.69.0
+ 26.70.0
import
pom
org.testcontainers
testcontainers-bom
- 1.21.3
+ 2.0.1
import
pom
diff --git a/src/main/java/com/google/cloud/spanner/jdbc/JdbcArray.java b/src/main/java/com/google/cloud/spanner/jdbc/JdbcArray.java
index 80bea84eb..1dd83f817 100644
--- a/src/main/java/com/google/cloud/spanner/jdbc/JdbcArray.java
+++ b/src/main/java/com/google/cloud/spanner/jdbc/JdbcArray.java
@@ -60,9 +60,11 @@ class JdbcArray implements Array {
* the elements array is not compatible with the base type of the array.
*/
static JdbcArray createArray(String typeName, Object[] elements) throws SQLException {
- for (JdbcDataType type : JdbcDataType.values()) {
- if (type.getTypeName().equalsIgnoreCase(typeName)) {
- return new JdbcArray(type, elements);
+ if (typeName != null) {
+ for (JdbcDataType type : JdbcDataType.values()) {
+ if (type.matches(typeName)) {
+ return new JdbcArray(type, elements);
+ }
}
}
throw JdbcSqlExceptionFactory.of(
diff --git a/src/main/java/com/google/cloud/spanner/jdbc/JdbcDataType.java b/src/main/java/com/google/cloud/spanner/jdbc/JdbcDataType.java
index 6a77cecc2..c80db5302 100644
--- a/src/main/java/com/google/cloud/spanner/jdbc/JdbcDataType.java
+++ b/src/main/java/com/google/cloud/spanner/jdbc/JdbcDataType.java
@@ -16,6 +16,7 @@
package com.google.cloud.spanner.jdbc;
+import com.google.cloud.spanner.Dialect;
import com.google.cloud.spanner.ResultSet;
import com.google.cloud.spanner.Struct;
import com.google.cloud.spanner.Type;
@@ -154,6 +155,7 @@ public Type getSpannerType() {
},
FLOAT64 {
private final Set> classes = new HashSet<>(Arrays.asList(Float.class, Double.class));
+ private final Set aliases = new HashSet<>(Collections.singletonList("float8"));
@Override
public int getSqlType() {
@@ -184,6 +186,11 @@ public List getArrayElements(ResultSet rs, int columnIndex) {
public Type getSpannerType() {
return Type.float64();
}
+
+ @Override
+ public Set getPostgreSQLAliases() {
+ return aliases;
+ }
},
INT64 {
private final Set> classes =
@@ -220,6 +227,9 @@ public Type getSpannerType() {
}
},
NUMERIC {
+
+ private final Set aliases = new HashSet<>(Collections.singletonList("decimal"));
+
@Override
public int getSqlType() {
return Types.NUMERIC;
@@ -244,6 +254,11 @@ public List getArrayElements(ResultSet rs, int columnIndex) {
public Type getSpannerType() {
return Type.numeric();
}
+
+ @Override
+ public Set getPostgreSQLAliases() {
+ return aliases;
+ }
},
PG_NUMERIC {
@Override
@@ -272,6 +287,8 @@ public Type getSpannerType() {
}
},
STRING {
+ private final Set aliases = new HashSet<>(Arrays.asList("varchar", "text"));
+
@Override
public int getSqlType() {
return Types.NVARCHAR;
@@ -296,6 +313,11 @@ public List getArrayElements(ResultSet rs, int columnIndex) {
public Type getSpannerType() {
return Type.string();
}
+
+ @Override
+ public Set getPostgreSQLAliases() {
+ return aliases;
+ }
},
JSON {
@Override
@@ -498,6 +520,21 @@ public Type getSpannerType() {
public abstract Type getSpannerType();
+ public Set getPostgreSQLAliases() {
+ return Collections.emptySet();
+ }
+
+ /***
+ * @param typeName type of the column
+ * @return true if type name matches current type name or matches with one of postgres aliases
+ * or if it matches equivalent postgres type.
+ */
+ boolean matches(String typeName) {
+ return getTypeName().equalsIgnoreCase(typeName)
+ || getPostgreSQLAliases().contains(typeName.toLowerCase())
+ || getSpannerType().getSpannerTypeName(Dialect.POSTGRESQL).equalsIgnoreCase(typeName);
+ }
+
// TODO: Implement and use this method for all types.
public int getPrecision() {
throw new UnsupportedOperationException();
diff --git a/src/main/java/com/google/cloud/spanner/jdbc/JdbcDatabaseMetaData.java b/src/main/java/com/google/cloud/spanner/jdbc/JdbcDatabaseMetaData.java
index 67c6976c7..98d23a226 100644
--- a/src/main/java/com/google/cloud/spanner/jdbc/JdbcDatabaseMetaData.java
+++ b/src/main/java/com/google/cloud/spanner/jdbc/JdbcDatabaseMetaData.java
@@ -187,7 +187,7 @@ public boolean storesUpperCaseIdentifiers() {
@Override
public boolean storesLowerCaseIdentifiers() {
- return false;
+ return connection.getDialect() == Dialect.POSTGRESQL;
}
@Override
diff --git a/src/main/resources/com/google/cloud/spanner/jdbc/postgresql/DatabaseMetaData_GetColumns.sql b/src/main/resources/com/google/cloud/spanner/jdbc/postgresql/DatabaseMetaData_GetColumns.sql
index a8260ff13..b0ca39944 100644
--- a/src/main/resources/com/google/cloud/spanner/jdbc/postgresql/DatabaseMetaData_GetColumns.sql
+++ b/src/main/resources/com/google/cloud/spanner/jdbc/postgresql/DatabaseMetaData_GetColumns.sql
@@ -28,7 +28,15 @@ SELECT TABLE_CATALOG AS "TABLE_CAT", TABLE_SCHEMA AS "TABLE_SCHEM", TABLE_NAME A
WHEN DATA_TYPE = 'jsonb' THEN -9
WHEN DATA_TYPE = 'timestamp with time zone' THEN 93
END AS "DATA_TYPE",
- DATA_TYPE AS "TYPE_NAME",
+ CASE
+ WHEN DATA_TYPE LIKE 'ARRAY' THEN
+ CASE
+ WHEN spanner_type LIKE '%[]' THEN
+ CONCAT('_', REPLACE(spanner_type, '[]', ''))
+ ELSE spanner_type
+ END
+ ELSE DATA_TYPE
+ END AS "TYPE_NAME",
CASE
WHEN DATA_TYPE LIKE 'ARRAY' THEN 0
WHEN DATA_TYPE = 'boolean' THEN NULL
diff --git a/src/test/java/com/google/cloud/spanner/jdbc/JdbcDatabaseMetaDataTest.java b/src/test/java/com/google/cloud/spanner/jdbc/JdbcDatabaseMetaDataTest.java
index d5a429078..4545bb56e 100644
--- a/src/test/java/com/google/cloud/spanner/jdbc/JdbcDatabaseMetaDataTest.java
+++ b/src/test/java/com/google/cloud/spanner/jdbc/JdbcDatabaseMetaDataTest.java
@@ -61,6 +61,7 @@ public static Object[] data() {
@Test
public void testTrivialMethods() throws SQLException {
JdbcConnection connection = mock(JdbcConnection.class);
+ when(connection.getDialect()).thenReturn(dialect);
DatabaseMetaData meta = new JdbcDatabaseMetaData(connection);
assertTrue(meta.allProceduresAreCallable());
assertTrue(meta.allTablesAreSelectable());
@@ -132,7 +133,11 @@ public void testTrivialMethods() throws SQLException {
assertTrue(meta.nullPlusNonNullIsNull());
assertFalse(meta.isCatalogAtStart());
assertEquals(connection.isReadOnly(), meta.isReadOnly());
- assertFalse(meta.storesLowerCaseIdentifiers());
+ if (dialect == Dialect.POSTGRESQL) {
+ assertTrue(meta.storesLowerCaseIdentifiers());
+ } else {
+ assertFalse(meta.storesLowerCaseIdentifiers());
+ }
assertFalse(meta.storesLowerCaseQuotedIdentifiers());
assertTrue(meta.storesMixedCaseIdentifiers());
assertTrue(meta.storesMixedCaseQuotedIdentifiers());
diff --git a/versions.txt b/versions.txt
index 515f0d555..09fcf19e3 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,4 +1,4 @@
# Format:
# module:released-version:current-version
-google-cloud-spanner-jdbc:2.33.1:2.33.1
+google-cloud-spanner-jdbc:2.33.2:2.33.2