Skip to content

Commit 3d638e9

Browse files
committed
update database metadata
1 parent 99f769c commit 3d638e9

2 files changed

Lines changed: 15 additions & 9 deletions

File tree

java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryDatabaseMetaData.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4835,6 +4835,8 @@ private Tuple<String, String> determineEffectiveCatalogAndSchema(
48354835

48364836
// BigQuery STRING represents Unicode character strings (UTF-8).
48374837
// Standard JDBC maps UTF-8/Unicode data to Types.NVARCHAR rather than Types.VARCHAR.
4838+
// Precision and scale values for temporal types (TIMESTAMP, DATETIME, DATE, TIME) are
4839+
// aligned with BigQueryResultSetMetadata to ensure consistent metadata behavior.
48384840
private static final Map<StandardSQLTypeName, ColumnTypeInfo> STANDARD_TYPE_INFO =
48394841
ImmutableMap.<StandardSQLTypeName, ColumnTypeInfo>builder()
48404842
.put(StandardSQLTypeName.INT64, new ColumnTypeInfo(Types.BIGINT, "INT64", 19, 0, 10))
@@ -4851,12 +4853,12 @@ private Tuple<String, String> determineEffectiveCatalogAndSchema(
48514853
new ColumnTypeInfo(Types.NVARCHAR, "STRING", null, null, null))
48524854
.put(
48534855
StandardSQLTypeName.TIMESTAMP,
4854-
new ColumnTypeInfo(Types.TIMESTAMP, "TIMESTAMP", 29, null, null))
4856+
new ColumnTypeInfo(Types.TIMESTAMP, "TIMESTAMP", 26, 6, null))
48554857
.put(
48564858
StandardSQLTypeName.DATETIME,
4857-
new ColumnTypeInfo(Types.TIMESTAMP, "DATETIME", 29, null, null))
4858-
.put(StandardSQLTypeName.DATE, new ColumnTypeInfo(Types.DATE, "DATE", 10, null, null))
4859-
.put(StandardSQLTypeName.TIME, new ColumnTypeInfo(Types.TIME, "TIME", 15, null, null))
4859+
new ColumnTypeInfo(Types.TIMESTAMP, "DATETIME", 26, 6, null))
4860+
.put(StandardSQLTypeName.DATE, new ColumnTypeInfo(Types.DATE, "DATE", 10, 0, null))
4861+
.put(StandardSQLTypeName.TIME, new ColumnTypeInfo(Types.TIME, "TIME", 15, 6, null))
48604862
.put(
48614863
StandardSQLTypeName.GEOGRAPHY,
48624864
new ColumnTypeInfo(Types.OTHER, "GEOGRAPHY", null, null, null))

java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryDatabaseMetaDataTest.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -320,8 +320,8 @@ public void testMapBigQueryTypeToJdbc_ScalarTypes() {
320320
dbMetadata.mapBigQueryTypeToJdbc(fieldTimestamp);
321321
assertEquals(Types.TIMESTAMP, infoTimestamp.jdbcType);
322322
assertEquals("TIMESTAMP", infoTimestamp.typeName);
323-
assertEquals(Integer.valueOf(29), infoTimestamp.columnSize);
324-
assertNull(infoTimestamp.decimalDigits);
323+
assertEquals(Integer.valueOf(26), infoTimestamp.columnSize);
324+
assertEquals(Integer.valueOf(6), infoTimestamp.decimalDigits);
325325
assertNull(infoTimestamp.numPrecRadix);
326326

327327
// DATETIME -> TIMESTAMP
@@ -333,8 +333,8 @@ public void testMapBigQueryTypeToJdbc_ScalarTypes() {
333333
dbMetadata.mapBigQueryTypeToJdbc(fieldDateTime);
334334
assertEquals(Types.TIMESTAMP, infoDateTime.jdbcType);
335335
assertEquals("DATETIME", infoDateTime.typeName);
336-
assertEquals(Integer.valueOf(29), infoDateTime.columnSize);
337-
assertNull(infoDateTime.decimalDigits);
336+
assertEquals(Integer.valueOf(26), infoDateTime.columnSize);
337+
assertEquals(Integer.valueOf(6), infoDateTime.decimalDigits);
338338
assertNull(infoDateTime.numPrecRadix);
339339

340340
// NUMERIC -> NUMERIC
@@ -402,6 +402,8 @@ public void testMapBigQueryTypeToJdbc_ScalarTypes() {
402402
BigQueryDatabaseMetaData.ColumnTypeInfo infoDate = dbMetadata.mapBigQueryTypeToJdbc(fieldDate);
403403
assertEquals(Types.DATE, infoDate.jdbcType);
404404
assertEquals("DATE", infoDate.typeName);
405+
assertEquals(Integer.valueOf(10), infoDate.columnSize);
406+
assertEquals(Integer.valueOf(0), infoDate.decimalDigits);
405407

406408
// TIME
407409
Field fieldTime =
@@ -411,6 +413,8 @@ public void testMapBigQueryTypeToJdbc_ScalarTypes() {
411413
BigQueryDatabaseMetaData.ColumnTypeInfo infoTime = dbMetadata.mapBigQueryTypeToJdbc(fieldTime);
412414
assertEquals(Types.TIME, infoTime.jdbcType);
413415
assertEquals("TIME", infoTime.typeName);
416+
assertEquals(Integer.valueOf(15), infoTime.columnSize);
417+
assertEquals(Integer.valueOf(6), infoTime.decimalDigits);
414418

415419
// STRUCT
416420
Field fieldStruct =
@@ -1295,7 +1299,7 @@ public void testCreateProcedureColumnRow_InOutTimestampParam() {
12951299
String.valueOf(DatabaseMetaData.procedureColumnInOut), row.get(4).getStringValue());
12961300
assertEquals(String.valueOf(Types.TIMESTAMP), row.get(5).getStringValue());
12971301
assertEquals("TIMESTAMP", row.get(6).getStringValue());
1298-
assertEquals("29", row.get(7).getStringValue()); // PRECISION for TIMESTAMP
1302+
assertEquals("26", row.get(7).getStringValue()); // PRECISION for TIMESTAMP
12991303
}
13001304

13011305
@Test

0 commit comments

Comments
 (0)