diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryCallableStatement.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryCallableStatement.java index 16fbfa55c390..e8667001e8fb 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryCallableStatement.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryCallableStatement.java @@ -507,7 +507,7 @@ public void registerOutParameter(int parameterIndex, int sqlType) throws SQLExce this.parameterHandler.setParameter( parameterIndex, null, - BigQueryJdbcTypeMappings.getJavaType(sqlType), + BigQueryTypeRegistry.toJavaClass(sqlType), BigQueryParameterHandler.BigQueryStatementParameterType.OUT, -1); } @@ -519,7 +519,7 @@ public void registerOutParameter(String parameterName, int sqlType) throws SQLEx this.parameterHandler.setParameter( parameterName, null, - BigQueryJdbcTypeMappings.getJavaType(sqlType), + BigQueryTypeRegistry.toJavaClass(sqlType), BigQueryParameterHandler.BigQueryStatementParameterType.OUT, -1); } @@ -540,7 +540,7 @@ public void registerOutParameter(int parameterIndex, int sqlType, int scale) thr this.parameterHandler.setParameter( parameterIndex, null, - BigQueryJdbcTypeMappings.getJavaType(sqlType), + BigQueryTypeRegistry.toJavaClass(sqlType), BigQueryParameterHandler.BigQueryStatementParameterType.OUT, scale); } @@ -572,7 +572,7 @@ public void registerOutParameter(String parameterName, int sqlType, int scale) this.parameterHandler.setParameter( parameterName, null, - BigQueryJdbcTypeMappings.getJavaType(sqlType), + BigQueryTypeRegistry.toJavaClass(sqlType), BigQueryParameterHandler.BigQueryStatementParameterType.OUT, scale); } @@ -778,10 +778,7 @@ public void setNString(String parameterName, String value) throws SQLException { @Override public void setNull(String parameterName, int sqlType) throws SQLException { checkClosed(); - Class javaType = BigQueryJdbcTypeMappings.getJavaType(sqlType); - if (javaType == null) { - javaType = String.class; - } + Class javaType = BigQueryTypeRegistry.toJavaClass(sqlType); this.parameterHandler.setParameter( parameterName, null, javaType, BigQueryStatementParameterType.IN, 0); } @@ -812,8 +809,8 @@ public void setObject(String parameterName, Object value, int targetSqlType) thr this.parameterHandler.setParameter( parameterName, value, value.getClass(), BigQueryStatementParameterType.IN, 0); StandardSQLTypeName sqlType = this.parameterHandler.getSqlType(parameterName); - if (BigQueryJdbcTypeMappings.standardSQLToJavaSqlTypesMapping.containsKey(sqlType)) { - int javaSqlType = BigQueryJdbcTypeMappings.standardSQLToJavaSqlTypesMapping.get(sqlType); + if (sqlType != null) { + int javaSqlType = BigQueryTypeRegistry.toJdbcType(sqlType); if (javaSqlType != targetSqlType) { throw new BigQueryJdbcSqlFeatureNotSupportedException( String.format("Unsupported sql type:%s ", targetSqlType)); @@ -835,8 +832,8 @@ public void setObject(String parameterName, Object value, int targetSqlType, int this.parameterHandler.setParameter( parameterName, value, value.getClass(), BigQueryStatementParameterType.IN, scaleOrLength); StandardSQLTypeName sqlType = this.parameterHandler.getSqlType(parameterName); - if (BigQueryJdbcTypeMappings.standardSQLToJavaSqlTypesMapping.containsKey(sqlType)) { - int javaSqlType = BigQueryJdbcTypeMappings.standardSQLToJavaSqlTypesMapping.get(sqlType); + if (sqlType != null) { + int javaSqlType = BigQueryTypeRegistry.toJdbcType(sqlType); if (javaSqlType != targetSqlType) { throw new BigQueryJdbcSqlFeatureNotSupportedException( String.format("Unsupported sql type:%s ", targetSqlType)); diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryDatabaseMetaData.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryDatabaseMetaData.java index 911e5cd8654d..fec91467c430 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryDatabaseMetaData.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryDatabaseMetaData.java @@ -48,7 +48,7 @@ import com.google.cloud.bigquery.TableDefinition; import com.google.cloud.bigquery.TableId; import com.google.cloud.bigquery.exception.BigQueryJdbcException; -import com.google.cloud.bigquery.jdbc.BigQueryJdbcTypeMappings.ColumnTypeInfo; +import com.google.cloud.bigquery.jdbc.BigQueryTypeRegistry.ColumnTypeInfo; import com.google.cloud.bigquery.jdbc.utils.BigQueryJdbcVersionUtility; import io.opentelemetry.context.Context; import java.io.ByteArrayOutputStream; @@ -3976,7 +3976,7 @@ private ColumnTypeInfo getColumnTypeInfoForSqlType(StandardSQLTypeName bqType) { LOG.warning("Null BigQuery type encountered. Mapping to STRING."); return new ColumnTypeInfo(Types.NVARCHAR, "STRING", null, null, null); } - ColumnTypeInfo info = BigQueryJdbcTypeMappings.STANDARD_TYPE_INFO.get(bqType); + ColumnTypeInfo info = BigQueryTypeRegistry.getColumnTypeInfo(bqType); if (info == null) { LOG.warning("Unknown BigQuery type encountered: " + bqType.name() + ". Mapping to STRING."); return new ColumnTypeInfo(Types.NVARCHAR, "STRING", null, null, null); diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryParameterHandler.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryParameterHandler.java index c95b90ae6c05..e40e3fcf28ef 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryParameterHandler.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryParameterHandler.java @@ -128,7 +128,7 @@ void setParameter(int parameterIndex, Object value, Class type) parameter.setIndex(parameterIndex); parameter.setValue(value); parameter.setType(type); - parameter.setSqlType(BigQueryJdbcTypeMappings.classToType(type)); + parameter.setSqlType(BigQueryTypeRegistry.toBigQueryType(type)); parameter.setParamName(""); parameter.setParamType(BigQueryStatementParameterType.UNSPECIFIED); parameter.setScale(-1); @@ -208,7 +208,7 @@ void setParameter( } parameter.setValue(value); parameter.setType(type); - parameter.setSqlType(BigQueryJdbcTypeMappings.classToType(type)); + parameter.setSqlType(BigQueryTypeRegistry.toBigQueryType(type)); parameter.setParamName(paramName); parameter.setParamType(paramType); parameter.setScale(scale); @@ -243,7 +243,7 @@ void setParameter( parameter.setIndex(parameterIndex); parameter.setValue(value); parameter.setType(type); - parameter.setSqlType(BigQueryJdbcTypeMappings.classToType(type)); + parameter.setSqlType(BigQueryTypeRegistry.toBigQueryType(type)); parameter.setParamName(""); parameter.setParamType(paramType); parameter.setScale(scale); diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryParameterMetaData.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryParameterMetaData.java index d2b5dd4edae9..5dcdf6f7469a 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryParameterMetaData.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryParameterMetaData.java @@ -69,8 +69,7 @@ public int getPrecision(int param) throws SQLException { if (sqlType == null) { return 0; } - BigQueryJdbcTypeMappings.ColumnTypeInfo typeInfo = - BigQueryJdbcTypeMappings.STANDARD_TYPE_INFO.get(sqlType); + BigQueryTypeRegistry.ColumnTypeInfo typeInfo = BigQueryTypeRegistry.getColumnTypeInfo(sqlType); if (typeInfo != null && typeInfo.columnSize != null) { return typeInfo.columnSize; } @@ -84,8 +83,7 @@ public int getScale(int param) throws SQLException { if (sqlType == null) { return 0; } - BigQueryJdbcTypeMappings.ColumnTypeInfo typeInfo = - BigQueryJdbcTypeMappings.STANDARD_TYPE_INFO.get(sqlType); + BigQueryTypeRegistry.ColumnTypeInfo typeInfo = BigQueryTypeRegistry.getColumnTypeInfo(sqlType); if (typeInfo != null && typeInfo.decimalDigits != null) { return typeInfo.decimalDigits; } @@ -99,11 +97,7 @@ public int getParameterType(int param) throws SQLException { if (sqlType == null) { return Types.OTHER; } - Integer jdbcType = BigQueryJdbcTypeMappings.standardSQLToJavaSqlTypesMapping.get(sqlType); - if (jdbcType != null) { - return jdbcType; - } - return Types.OTHER; + return BigQueryTypeRegistry.toJdbcType(sqlType); } @Override @@ -118,10 +112,8 @@ public String getParameterClassName(int param) throws SQLException { checkValidIndex(param); StandardSQLTypeName sqlType = getStandardSQLTypeName(param); if (sqlType != null) { - Class clazz = BigQueryJdbcTypeMappings.standardSQLToJavaTypeMapping.get(sqlType); - if (clazz != null) { - return clazz.getName(); - } + Class clazz = BigQueryTypeRegistry.toJavaClass(sqlType); + return clazz.getName(); } if (this.parameterHandler == null) { return Object.class.getName(); @@ -162,12 +154,7 @@ private StandardSQLTypeName getStandardSQLTypeName(int param) { if (javaType == null) { return null; } - try { - return BigQueryJdbcTypeMappings.classToType(javaType); - } catch (SQLException ignored) { - // fall back to default - return null; - } + return BigQueryTypeRegistry.toBigQueryType(javaType); } @Override diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java index 61faefb3fc5c..a5b40a8e2d34 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java @@ -136,7 +136,7 @@ public void clearParameters() { @Override public void setNull(int parameterIndex, int sqlType) throws SQLException { checkClosed(); - Class javaType = BigQueryJdbcTypeMappings.getJavaType(sqlType); + Class javaType = BigQueryTypeRegistry.toJavaClass(sqlType); this.parameterHandler.setParameter(parameterIndex, null, javaType); } @@ -248,7 +248,7 @@ public void setObject(int parameterIndex, Object value, int targetSqlType) throw if (setTemporalObject(parameterIndex, value)) { return; } - Class javaType = BigQueryJdbcTypeMappings.getJavaType(targetSqlType); + Class javaType = BigQueryTypeRegistry.toJavaClass(targetSqlType); this.parameterHandler.setParameter(parameterIndex, value, javaType); } diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryResultSetMetadata.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryResultSetMetadata.java index c3fd8151d52c..0a205a92fa2d 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryResultSetMetadata.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryResultSetMetadata.java @@ -139,8 +139,7 @@ public int getPrecision(int column) { return precision.intValue(); } StandardSQLTypeName type = getStandardSQLTypeName(column); - BigQueryJdbcTypeMappings.ColumnTypeInfo typeInfo = - BigQueryJdbcTypeMappings.STANDARD_TYPE_INFO.get(type); + BigQueryTypeRegistry.ColumnTypeInfo typeInfo = BigQueryTypeRegistry.getColumnTypeInfo(type); if (typeInfo != null && typeInfo.columnSize != null) { return typeInfo.columnSize; } @@ -154,8 +153,7 @@ public int getScale(int column) { return scale.intValue(); } StandardSQLTypeName type = getStandardSQLTypeName(column); - BigQueryJdbcTypeMappings.ColumnTypeInfo typeInfo = - BigQueryJdbcTypeMappings.STANDARD_TYPE_INFO.get(type); + BigQueryTypeRegistry.ColumnTypeInfo typeInfo = BigQueryTypeRegistry.getColumnTypeInfo(type); if (typeInfo != null && typeInfo.decimalDigits != null) { return typeInfo.decimalDigits; } @@ -189,8 +187,7 @@ private StandardSQLTypeName getStandardSQLTypeName(int column) { @Override public int getColumnType(int column) { - return BigQueryJdbcTypeMappings.standardSQLToJavaSqlTypesMapping.get( - getStandardSQLTypeName(column)); + return BigQueryTypeRegistry.toJdbcType(getStandardSQLTypeName(column)); } @Override @@ -214,14 +211,12 @@ public boolean isDefinitelyWritable(int column) { } @Override - public String getColumnClassName(int column) { + public String getColumnClassName(int column) throws SQLException { Field field = getField(column); if (field.getMode() == Mode.REPEATED) { return java.sql.Array.class.getName(); } - return BigQueryJdbcTypeMappings.standardSQLToJavaTypeMapping - .get(field.getType().getStandardType()) - .getName(); + return BigQueryTypeRegistry.toJavaClass(getStandardSQLTypeName(column)).getName(); } // Wrapper methods: diff --git a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryTypeRegistry.java b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryTypeRegistry.java index c2142072db5d..03cb49b9ecc7 100644 --- a/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryTypeRegistry.java +++ b/java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryTypeRegistry.java @@ -18,6 +18,8 @@ import com.google.cloud.bigquery.StandardSQLTypeName; import com.google.cloud.bigquery.exception.BigQueryJdbcException; +import com.google.cloud.bigquery.exception.BigQueryJdbcSqlFeatureNotSupportedException; +import com.google.common.collect.ImmutableMap; import java.math.BigDecimal; import java.sql.Array; import java.sql.Date; @@ -57,8 +59,8 @@ final class BigQueryTypeRegistry { register(createFloat64Descriptor()); register(createNumericDescriptor()); register(createDateDescriptor()); - register(createDatetimeDescriptor()); register(createTimestampDescriptor()); + register(createDatetimeDescriptor()); register(createTimeDescriptor()); register(createBytesDescriptor()); register(createArrayDescriptor()); @@ -361,12 +363,80 @@ public static StandardSQLTypeName toBigQueryType(Class clazz) { } /** Returns the default Java target class for a given JDBC type constant. */ - public static Class toJavaClass(int jdbcType) { - TypeDescriptor descriptor = DESCRIPTORS_BY_JDBC_TYPE.get(jdbcType); - if (descriptor != null) { - return descriptor.getDefaultJavaClass(); + /** Returns the JDBC Type constant for a given BigQuery type. */ + public static int toJdbcType(StandardSQLTypeName bqType) { + if (bqType == null) return java.sql.Types.OTHER; + int ordinal = bqType.ordinal(); + if (ordinal >= DESCRIPTORS_BY_ORDINAL.length || DESCRIPTORS_BY_ORDINAL[ordinal] == null) { + return java.sql.Types.OTHER; } - return String.class; // Legacy fallback + return DESCRIPTORS_BY_ORDINAL[ordinal].getJdbcType(); + } + + /** + * Explicit mapping to resolve lossy reverse-lookups. Since multiple JDBC types (e.g., TINYINT, + * INTEGER) map to a single BigQuery type (INT64), this map ensures strict JDBC compliance by + * returning the exact Java class (e.g., Integer.class) expected for PreparedStatement binding. + */ + private static final Map> JDBC_TO_JAVA_CLASS_MAP = + ImmutableMap.>builder() + .put(Types.BIGINT, Long.class) + .put(Types.INTEGER, Integer.class) + .put(Types.SMALLINT, Short.class) + .put(Types.TINYINT, Byte.class) + .put(Types.BOOLEAN, Boolean.class) + .put(Types.DOUBLE, Double.class) + .put(Types.FLOAT, Float.class) + .put(Types.NUMERIC, BigDecimal.class) + .put(Types.DECIMAL, BigDecimal.class) + .put(Types.VARCHAR, String.class) + .put(Types.CHAR, String.class) + .put(Types.LONGVARCHAR, String.class) + .put(Types.NVARCHAR, String.class) + .put(Types.NCHAR, String.class) + .put(Types.LONGNVARCHAR, String.class) + .put(Types.TIMESTAMP, Timestamp.class) + .put(Types.DATE, Date.class) + .put(Types.TIME, Time.class) + .put(Types.OTHER, String.class) + .put(Types.BINARY, byte[].class) + .put(Types.VARBINARY, byte[].class) + .put(Types.LONGVARBINARY, byte[].class) + .put(Types.STRUCT, Struct.class) + .put(Types.BIT, Boolean.class) + .put(Types.ARRAY, Array.class) + .put(Types.NULL, String.class) + .put(Types.REAL, Float.class) + .put(Types.CLOB, String.class) + .put(Types.NCLOB, String.class) + .put(Types.BLOB, byte[].class) + .build(); + + /** Returns the exact default Java Class for a given BigQuery type, avoiding lossy mappings. */ + public static Class toJavaClass(StandardSQLTypeName bqType) { + if (bqType == null) return String.class; + int ordinal = bqType.ordinal(); + if (ordinal >= DESCRIPTORS_BY_ORDINAL.length || DESCRIPTORS_BY_ORDINAL[ordinal] == null) { + return String.class; + } + return DESCRIPTORS_BY_ORDINAL[ordinal].getDefaultJavaClass(); + } + + /** + * Returns the standard Java Class equivalent for a given JDBC SQL type. + * + * @param jdbcType the generic JDBC SQL type (e.g., {@link Types#INTEGER}) + * @return the corresponding Java Class (e.g., {@link Integer}) + * @throws BigQueryJdbcSqlFeatureNotSupportedException if the given SQL type is not supported + */ + public static Class toJavaClass(int jdbcType) + throws BigQueryJdbcSqlFeatureNotSupportedException { + Class clazz = JDBC_TO_JAVA_CLASS_MAP.get(jdbcType); + if (clazz == null) { + throw new BigQueryJdbcSqlFeatureNotSupportedException( + "Unsupported Java type for SQL type: " + jdbcType); + } + return clazz; } /** @@ -381,7 +451,12 @@ public static T convert(Object input, Class targetClass) throws BigQueryJ if (descriptor == null) { throw new BigQueryJdbcException("Unsupported target class: " + targetClass.getName()); } - return (T) descriptor.convert(input, targetClass, null); + try { + return (T) descriptor.convert(input, targetClass, null); + } catch (Exception e) { + throw new BigQueryJdbcException( + String.format("Failed to coerce value '%s' to %s", input, targetClass.getName()), e); + } } /** @@ -396,7 +471,12 @@ public static Object convert(Object input, StandardSQLTypeName bqType, ZoneId zo throw new BigQueryJdbcException("No type descriptor registered for BigQuery type: " + bqType); } TypeDescriptor descriptor = DESCRIPTORS_BY_ORDINAL[ordinal]; - return descriptor.convert(input, descriptor.getDefaultJavaClass(), zoneId); + try { + return descriptor.convert(input, descriptor.getDefaultJavaClass(), zoneId); + } catch (Exception e) { + throw new BigQueryJdbcException( + String.format("Failed to coerce value '%s' from BigQuery %s", input, bqType), e); + } } /** @@ -412,7 +492,15 @@ public static T convert( if (ordinal >= DESCRIPTORS_BY_ORDINAL.length || DESCRIPTORS_BY_ORDINAL[ordinal] == null) { throw new BigQueryJdbcException("No type descriptor registered for BigQuery type: " + bqType); } - return (T) DESCRIPTORS_BY_ORDINAL[ordinal].convert(input, targetClass, zoneId); + try { + return (T) DESCRIPTORS_BY_ORDINAL[ordinal].convert(input, targetClass, zoneId); + } catch (Exception e) { + throw new BigQueryJdbcException( + String.format( + "Failed to coerce value '%s' from BigQuery %s to %s", + input, bqType, targetClass.getName()), + e); + } } private static TypeDescriptor getDescriptorForClass(Class clazz) { @@ -431,4 +519,68 @@ private static TypeDescriptor getDescriptorForClass(Class clazz) { } return null; } + + static class ColumnTypeInfo { + final int jdbcType; + final String typeName; + final Integer columnSize; + final Integer decimalDigits; + final Integer numPrecRadix; + + ColumnTypeInfo( + int jdbcType, + String typeName, + Integer columnSize, + Integer decimalDigits, + Integer numPrecRadix) { + this.jdbcType = jdbcType; + this.typeName = typeName; + this.columnSize = columnSize; + this.decimalDigits = decimalDigits; + this.numPrecRadix = numPrecRadix; + } + } + + private static final Map STANDARD_TYPE_INFO = + ImmutableMap.builder() + .put(StandardSQLTypeName.INT64, new ColumnTypeInfo(Types.BIGINT, "INT64", 19, 0, 10)) + .put(StandardSQLTypeName.BOOL, new ColumnTypeInfo(Types.BOOLEAN, "BOOL", 1, null, null)) + .put( + StandardSQLTypeName.FLOAT64, + new ColumnTypeInfo(Types.DOUBLE, "FLOAT64", 15, null, 10)) + .put(StandardSQLTypeName.NUMERIC, new ColumnTypeInfo(Types.NUMERIC, "NUMERIC", 38, 9, 10)) + .put( + StandardSQLTypeName.BIGNUMERIC, + new ColumnTypeInfo(Types.NUMERIC, "BIGNUMERIC", 77, 38, 10)) + .put( + StandardSQLTypeName.STRING, + new ColumnTypeInfo(Types.NVARCHAR, "STRING", null, null, null)) + .put( + StandardSQLTypeName.TIMESTAMP, + new ColumnTypeInfo(Types.TIMESTAMP, "TIMESTAMP", 26, 6, null)) + .put( + StandardSQLTypeName.DATETIME, + new ColumnTypeInfo(Types.TIMESTAMP, "DATETIME", 26, 6, null)) + .put(StandardSQLTypeName.DATE, new ColumnTypeInfo(Types.DATE, "DATE", 10, 0, null)) + .put(StandardSQLTypeName.TIME, new ColumnTypeInfo(Types.TIME, "TIME", 15, 6, null)) + .put( + StandardSQLTypeName.GEOGRAPHY, + new ColumnTypeInfo(Types.OTHER, "GEOGRAPHY", null, null, null)) + .put(StandardSQLTypeName.JSON, new ColumnTypeInfo(Types.OTHER, "JSON", null, null, null)) + .put( + StandardSQLTypeName.INTERVAL, + new ColumnTypeInfo(Types.OTHER, "INTERVAL", null, null, null)) + .put( + StandardSQLTypeName.RANGE, new ColumnTypeInfo(Types.OTHER, "RANGE", null, null, null)) + .put( + StandardSQLTypeName.BYTES, + new ColumnTypeInfo(Types.VARBINARY, "BYTES", null, null, null)) + .put( + StandardSQLTypeName.STRUCT, + new ColumnTypeInfo(Types.STRUCT, "STRUCT", null, null, null)) + .build(); + + public static ColumnTypeInfo getColumnTypeInfo(StandardSQLTypeName bqType) { + return STANDARD_TYPE_INFO.get(bqType); + } } diff --git a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryDatabaseMetaDataTest.java b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryDatabaseMetaDataTest.java index 6535fd20997c..77e3e08f1a70 100644 --- a/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryDatabaseMetaDataTest.java +++ b/java-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryDatabaseMetaDataTest.java @@ -32,7 +32,7 @@ import com.google.api.gax.paging.Page; import com.google.cloud.bigquery.*; import com.google.cloud.bigquery.exception.BigQueryJdbcException; -import com.google.cloud.bigquery.jdbc.BigQueryJdbcTypeMappings.ColumnTypeInfo; +import com.google.cloud.bigquery.jdbc.BigQueryTypeRegistry.ColumnTypeInfo; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.trace.StatusCode; import io.opentelemetry.context.Context;