Skip to content
This repository was archived by the owner on Mar 26, 2026. It is now read-only.

Commit 1ee4d0b

Browse files
fix: Fix Column Type Name for PostgreSQL ARRAY types
1 parent 14837f8 commit 1ee4d0b

2 files changed

Lines changed: 35 additions & 1 deletion

File tree

src/main/java/com/google/cloud/spanner/jdbc/JdbcResultSetMetaData.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@
1616

1717
package com.google.cloud.spanner.jdbc;
1818

19+
import com.google.cloud.spanner.Dialect;
1920
import com.google.cloud.spanner.ResultSet;
21+
import com.google.cloud.spanner.Type;
2022
import com.google.cloud.spanner.connection.ConnectionProperties;
2123
import com.google.common.base.Preconditions;
2224
import java.sql.Connection;
@@ -192,7 +194,14 @@ public int getColumnType(int column) {
192194

193195
@Override
194196
public String getColumnTypeName(int column) {
195-
return spannerResultSet.getColumnType(column - 1).getCode().name();
197+
Type columnType = spannerResultSet.getColumnType(column - 1);
198+
if (columnType.getCode() == Type.Code.ARRAY && statement instanceof JdbcStatement) {
199+
Dialect dialect = ((JdbcStatement) statement).getConnection().getDialect();
200+
if (dialect == Dialect.POSTGRESQL) {
201+
return "_" + columnType.getArrayElementType().getSpannerTypeName(dialect);
202+
}
203+
}
204+
return columnType.getCode().name();
196205
}
197206

198207
@Override

src/test/java/com/google/cloud/spanner/jdbc/JdbcResultSetMetaDataTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,13 @@
1818

1919
import static org.junit.Assert.assertEquals;
2020
import static org.junit.Assert.assertFalse;
21+
import static org.junit.Assert.assertNotNull;
2122
import static org.junit.Assert.assertTrue;
2223
import static org.mockito.Mockito.mock;
2324
import static org.mockito.Mockito.when;
2425

2526
import com.google.cloud.ByteArray;
27+
import com.google.cloud.spanner.Dialect;
2628
import com.google.cloud.spanner.ResultSet;
2729
import com.google.cloud.spanner.ResultSets;
2830
import com.google.cloud.spanner.Struct;
@@ -540,6 +542,29 @@ public void getColumnTypeName() {
540542
}
541543
}
542544

545+
@Test
546+
public void getColumnTypeNameForPostgreSQL() throws SQLException {
547+
JdbcConnection connection = mock(JdbcConnection.class);
548+
JdbcStatement statement = mock(JdbcStatement.class);
549+
JdbcResultSet resultSet = getFooTestResultSet(statement);
550+
when(connection.getSchema()).thenReturn("");
551+
when(connection.getCatalog()).thenReturn("test-database");
552+
when(statement.getConnection()).then(new Returns(connection));
553+
when(connection.getDialect()).thenReturn(Dialect.POSTGRESQL);
554+
555+
JdbcResultSetMetaData sub = resultSet.getMetaData();
556+
557+
int index = 1;
558+
for (TestColumn col : TEST_COLUMNS) {
559+
if (col.type.getCode() == Type.Code.ARRAY && col.type.getSpannerTypeName(Dialect.POSTGRESQL).contains("bool")) {
560+
assertEquals("_boolean", sub.getColumnTypeName(index));
561+
} else if (col.type.getCode() != Type.Code.ARRAY) {
562+
assertEquals(col.type.getCode().name(), sub.getColumnTypeName(index));
563+
}
564+
index++;
565+
}
566+
}
567+
543568
@Test
544569
public void testIsReadOnly() {
545570
for (int i = 0; i < TEST_COLUMNS.size(); i++) {

0 commit comments

Comments
 (0)