Skip to content

Commit d49acf3

Browse files
authored
refactor(bigquery-jdbc): migrate write path and metadata to TypeRegistry (#14061)
b/538177258 This PR executes Part 1 of Phase 4 of the Type Registry consolidation. It migrates all parameter binding (Write Path) and metadata sizing away from the legacy \`BigQueryJdbcTypeMappings\` and onto the unified \`BigQueryTypeRegistry\`. ### Changes: - **Write Path**: Re-routed parameter SQL type binding in \`BigQueryParameterHandler\`, \`BigQueryPreparedStatement\`, and \`BigQueryCallableStatement\` to use the registry. - **Metadata Integration**: Migrated \`ColumnTypeInfo\` metadata map into \`BigQueryTypeRegistry\`. - **Metadata Classes**: Updated \`BigQueryResultSetMetadata\`, \`BigQueryParameterMetaData\`, and \`BigQueryDatabaseMetaData\` to extract sizes and types exclusively from the registry.
1 parent c6d54dd commit d49acf3

8 files changed

Lines changed: 255 additions & 99 deletions

File tree

‎java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryCallableStatement.java‎

Lines changed: 9 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ public void registerOutParameter(int parameterIndex, int sqlType) throws SQLExce
507507
this.parameterHandler.setParameter(
508508
parameterIndex,
509509
null,
510-
BigQueryJdbcTypeMappings.getJavaType(sqlType),
510+
BigQueryTypeRegistry.toJavaClass(sqlType),
511511
BigQueryParameterHandler.BigQueryStatementParameterType.OUT,
512512
-1);
513513
}
@@ -519,7 +519,7 @@ public void registerOutParameter(String parameterName, int sqlType) throws SQLEx
519519
this.parameterHandler.setParameter(
520520
parameterName,
521521
null,
522-
BigQueryJdbcTypeMappings.getJavaType(sqlType),
522+
BigQueryTypeRegistry.toJavaClass(sqlType),
523523
BigQueryParameterHandler.BigQueryStatementParameterType.OUT,
524524
-1);
525525
}
@@ -540,7 +540,7 @@ public void registerOutParameter(int parameterIndex, int sqlType, int scale) thr
540540
this.parameterHandler.setParameter(
541541
parameterIndex,
542542
null,
543-
BigQueryJdbcTypeMappings.getJavaType(sqlType),
543+
BigQueryTypeRegistry.toJavaClass(sqlType),
544544
BigQueryParameterHandler.BigQueryStatementParameterType.OUT,
545545
scale);
546546
}
@@ -572,7 +572,7 @@ public void registerOutParameter(String parameterName, int sqlType, int scale)
572572
this.parameterHandler.setParameter(
573573
parameterName,
574574
null,
575-
BigQueryJdbcTypeMappings.getJavaType(sqlType),
575+
BigQueryTypeRegistry.toJavaClass(sqlType),
576576
BigQueryParameterHandler.BigQueryStatementParameterType.OUT,
577577
scale);
578578
}
@@ -778,10 +778,7 @@ public void setNString(String parameterName, String value) throws SQLException {
778778
@Override
779779
public void setNull(String parameterName, int sqlType) throws SQLException {
780780
checkClosed();
781-
Class<?> javaType = BigQueryJdbcTypeMappings.getJavaType(sqlType);
782-
if (javaType == null) {
783-
javaType = String.class;
784-
}
781+
Class<?> javaType = BigQueryTypeRegistry.toJavaClass(sqlType);
785782
this.parameterHandler.setParameter(
786783
parameterName, null, javaType, BigQueryStatementParameterType.IN, 0);
787784
}
@@ -809,19 +806,9 @@ public void setObject(String parameterName, Object value, int targetSqlType) thr
809806
setNull(parameterName, targetSqlType);
810807
return;
811808
}
809+
Class<?> javaType = BigQueryTypeRegistry.toJavaClass(targetSqlType);
812810
this.parameterHandler.setParameter(
813-
parameterName, value, value.getClass(), BigQueryStatementParameterType.IN, 0);
814-
StandardSQLTypeName sqlType = this.parameterHandler.getSqlType(parameterName);
815-
if (BigQueryJdbcTypeMappings.standardSQLToJavaSqlTypesMapping.containsKey(sqlType)) {
816-
int javaSqlType = BigQueryJdbcTypeMappings.standardSQLToJavaSqlTypesMapping.get(sqlType);
817-
if (javaSqlType != targetSqlType) {
818-
throw new BigQueryJdbcSqlFeatureNotSupportedException(
819-
String.format("Unsupported sql type:%s ", targetSqlType));
820-
}
821-
} else {
822-
throw new BigQueryJdbcSqlFeatureNotSupportedException(
823-
String.format("parameter sql type not supported: %s", sqlType));
824-
}
811+
parameterName, value, javaType, BigQueryStatementParameterType.IN, 0);
825812
}
826813

827814
@Override
@@ -832,19 +819,9 @@ public void setObject(String parameterName, Object value, int targetSqlType, int
832819
setNull(parameterName, targetSqlType);
833820
return;
834821
}
822+
Class<?> javaType = BigQueryTypeRegistry.toJavaClass(targetSqlType);
835823
this.parameterHandler.setParameter(
836-
parameterName, value, value.getClass(), BigQueryStatementParameterType.IN, scaleOrLength);
837-
StandardSQLTypeName sqlType = this.parameterHandler.getSqlType(parameterName);
838-
if (BigQueryJdbcTypeMappings.standardSQLToJavaSqlTypesMapping.containsKey(sqlType)) {
839-
int javaSqlType = BigQueryJdbcTypeMappings.standardSQLToJavaSqlTypesMapping.get(sqlType);
840-
if (javaSqlType != targetSqlType) {
841-
throw new BigQueryJdbcSqlFeatureNotSupportedException(
842-
String.format("Unsupported sql type:%s ", targetSqlType));
843-
}
844-
} else {
845-
throw new BigQueryJdbcSqlFeatureNotSupportedException(
846-
String.format("parameter sql type not supported: %s", sqlType));
847-
}
824+
parameterName, value, javaType, BigQueryStatementParameterType.IN, scaleOrLength);
848825
}
849826

850827
@Override

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
import com.google.cloud.bigquery.TableDefinition;
4949
import com.google.cloud.bigquery.TableId;
5050
import com.google.cloud.bigquery.exception.BigQueryJdbcException;
51-
import com.google.cloud.bigquery.jdbc.BigQueryJdbcTypeMappings.ColumnTypeInfo;
51+
import com.google.cloud.bigquery.jdbc.BigQueryTypeRegistry.ColumnTypeInfo;
5252
import com.google.cloud.bigquery.jdbc.utils.BigQueryJdbcVersionUtility;
5353
import io.opentelemetry.context.Context;
5454
import java.io.ByteArrayOutputStream;
@@ -3976,7 +3976,7 @@ private ColumnTypeInfo getColumnTypeInfoForSqlType(StandardSQLTypeName bqType) {
39763976
LOG.warning("Null BigQuery type encountered. Mapping to STRING.");
39773977
return new ColumnTypeInfo(Types.NVARCHAR, "STRING", null, null, null);
39783978
}
3979-
ColumnTypeInfo info = BigQueryJdbcTypeMappings.STANDARD_TYPE_INFO.get(bqType);
3979+
ColumnTypeInfo info = BigQueryTypeRegistry.getColumnTypeInfo(bqType);
39803980
if (info == null) {
39813981
LOG.warning("Unknown BigQuery type encountered: " + bqType.name() + ". Mapping to STRING.");
39823982
return new ColumnTypeInfo(Types.NVARCHAR, "STRING", null, null, null);

‎java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryParameterHandler.java‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ void setParameter(int parameterIndex, Object value, Class type)
128128
parameter.setIndex(parameterIndex);
129129
parameter.setValue(value);
130130
parameter.setType(type);
131-
parameter.setSqlType(BigQueryJdbcTypeMappings.classToType(type));
131+
parameter.setSqlType(BigQueryTypeRegistry.toBigQueryType(type));
132132
parameter.setParamName("");
133133
parameter.setParamType(BigQueryStatementParameterType.UNSPECIFIED);
134134
parameter.setScale(-1);
@@ -208,7 +208,7 @@ void setParameter(
208208
}
209209
parameter.setValue(value);
210210
parameter.setType(type);
211-
parameter.setSqlType(BigQueryJdbcTypeMappings.classToType(type));
211+
parameter.setSqlType(BigQueryTypeRegistry.toBigQueryType(type));
212212
parameter.setParamName(paramName);
213213
parameter.setParamType(paramType);
214214
parameter.setScale(scale);
@@ -243,7 +243,7 @@ void setParameter(
243243
parameter.setIndex(parameterIndex);
244244
parameter.setValue(value);
245245
parameter.setType(type);
246-
parameter.setSqlType(BigQueryJdbcTypeMappings.classToType(type));
246+
parameter.setSqlType(BigQueryTypeRegistry.toBigQueryType(type));
247247
parameter.setParamName("");
248248
parameter.setParamType(paramType);
249249
parameter.setScale(scale);

‎java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryParameterMetaData.java‎

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,7 @@ public int getPrecision(int param) throws SQLException {
6969
if (sqlType == null) {
7070
return 0;
7171
}
72-
BigQueryJdbcTypeMappings.ColumnTypeInfo typeInfo =
73-
BigQueryJdbcTypeMappings.STANDARD_TYPE_INFO.get(sqlType);
72+
BigQueryTypeRegistry.ColumnTypeInfo typeInfo = BigQueryTypeRegistry.getColumnTypeInfo(sqlType);
7473
if (typeInfo != null && typeInfo.columnSize != null) {
7574
return typeInfo.columnSize;
7675
}
@@ -84,8 +83,7 @@ public int getScale(int param) throws SQLException {
8483
if (sqlType == null) {
8584
return 0;
8685
}
87-
BigQueryJdbcTypeMappings.ColumnTypeInfo typeInfo =
88-
BigQueryJdbcTypeMappings.STANDARD_TYPE_INFO.get(sqlType);
86+
BigQueryTypeRegistry.ColumnTypeInfo typeInfo = BigQueryTypeRegistry.getColumnTypeInfo(sqlType);
8987
if (typeInfo != null && typeInfo.decimalDigits != null) {
9088
return typeInfo.decimalDigits;
9189
}
@@ -99,11 +97,7 @@ public int getParameterType(int param) throws SQLException {
9997
if (sqlType == null) {
10098
return Types.OTHER;
10199
}
102-
Integer jdbcType = BigQueryJdbcTypeMappings.standardSQLToJavaSqlTypesMapping.get(sqlType);
103-
if (jdbcType != null) {
104-
return jdbcType;
105-
}
106-
return Types.OTHER;
100+
return BigQueryTypeRegistry.toJdbcType(sqlType);
107101
}
108102

109103
@Override
@@ -118,10 +112,8 @@ public String getParameterClassName(int param) throws SQLException {
118112
checkValidIndex(param);
119113
StandardSQLTypeName sqlType = getStandardSQLTypeName(param);
120114
if (sqlType != null) {
121-
Class<?> clazz = BigQueryJdbcTypeMappings.standardSQLToJavaTypeMapping.get(sqlType);
122-
if (clazz != null) {
123-
return clazz.getName();
124-
}
115+
Class<?> clazz = BigQueryTypeRegistry.toJavaClass(sqlType);
116+
return clazz.getName();
125117
}
126118
if (this.parameterHandler == null) {
127119
return Object.class.getName();
@@ -162,12 +154,7 @@ private StandardSQLTypeName getStandardSQLTypeName(int param) {
162154
if (javaType == null) {
163155
return null;
164156
}
165-
try {
166-
return BigQueryJdbcTypeMappings.classToType(javaType);
167-
} catch (SQLException ignored) {
168-
// fall back to default
169-
return null;
170-
}
157+
return BigQueryTypeRegistry.toBigQueryType(javaType);
171158
}
172159

173160
@Override

‎java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryPreparedStatement.java‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ public void clearParameters() {
136136
@Override
137137
public void setNull(int parameterIndex, int sqlType) throws SQLException {
138138
checkClosed();
139-
Class<?> javaType = BigQueryJdbcTypeMappings.getJavaType(sqlType);
139+
Class<?> javaType = BigQueryTypeRegistry.toJavaClass(sqlType);
140140
this.parameterHandler.setParameter(parameterIndex, null, javaType);
141141
}
142142

@@ -248,7 +248,7 @@ public void setObject(int parameterIndex, Object value, int targetSqlType) throw
248248
if (setTemporalObject(parameterIndex, value)) {
249249
return;
250250
}
251-
Class<?> javaType = BigQueryJdbcTypeMappings.getJavaType(targetSqlType);
251+
Class<?> javaType = BigQueryTypeRegistry.toJavaClass(targetSqlType);
252252
this.parameterHandler.setParameter(parameterIndex, value, javaType);
253253
}
254254

‎java-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryResultSetMetadata.java‎

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,7 @@ public int getPrecision(int column) {
139139
return precision.intValue();
140140
}
141141
StandardSQLTypeName type = getStandardSQLTypeName(column);
142-
BigQueryJdbcTypeMappings.ColumnTypeInfo typeInfo =
143-
BigQueryJdbcTypeMappings.STANDARD_TYPE_INFO.get(type);
142+
BigQueryTypeRegistry.ColumnTypeInfo typeInfo = BigQueryTypeRegistry.getColumnTypeInfo(type);
144143
if (typeInfo != null && typeInfo.columnSize != null) {
145144
return typeInfo.columnSize;
146145
}
@@ -154,8 +153,7 @@ public int getScale(int column) {
154153
return scale.intValue();
155154
}
156155
StandardSQLTypeName type = getStandardSQLTypeName(column);
157-
BigQueryJdbcTypeMappings.ColumnTypeInfo typeInfo =
158-
BigQueryJdbcTypeMappings.STANDARD_TYPE_INFO.get(type);
156+
BigQueryTypeRegistry.ColumnTypeInfo typeInfo = BigQueryTypeRegistry.getColumnTypeInfo(type);
159157
if (typeInfo != null && typeInfo.decimalDigits != null) {
160158
return typeInfo.decimalDigits;
161159
}
@@ -189,8 +187,7 @@ private StandardSQLTypeName getStandardSQLTypeName(int column) {
189187

190188
@Override
191189
public int getColumnType(int column) {
192-
return BigQueryJdbcTypeMappings.standardSQLToJavaSqlTypesMapping.get(
193-
getStandardSQLTypeName(column));
190+
return BigQueryTypeRegistry.toJdbcType(getStandardSQLTypeName(column));
194191
}
195192

196193
@Override
@@ -214,14 +211,12 @@ public boolean isDefinitelyWritable(int column) {
214211
}
215212

216213
@Override
217-
public String getColumnClassName(int column) {
214+
public String getColumnClassName(int column) throws SQLException {
218215
Field field = getField(column);
219216
if (field.getMode() == Mode.REPEATED) {
220217
return java.sql.Array.class.getName();
221218
}
222-
return BigQueryJdbcTypeMappings.standardSQLToJavaTypeMapping
223-
.get(field.getType().getStandardType())
224-
.getName();
219+
return BigQueryTypeRegistry.toJavaClass(getStandardSQLTypeName(column)).getName();
225220
}
226221

227222
// Wrapper methods:

0 commit comments

Comments
 (0)