|
42 | 42 | import com.google.cloud.bigquery.TableDefinition; |
43 | 43 | import com.google.cloud.bigquery.TableId; |
44 | 44 | import com.google.cloud.bigquery.exception.BigQueryJdbcException; |
45 | | -import com.google.common.collect.ImmutableMap; |
| 45 | +import com.google.cloud.bigquery.jdbc.BigQueryJdbcTypeMappings.ColumnTypeInfo; |
46 | 46 | import java.io.BufferedReader; |
47 | 47 | import java.io.IOException; |
48 | 48 | import java.io.InputStream; |
|
60 | 60 | import java.util.Comparator; |
61 | 61 | import java.util.HashSet; |
62 | 62 | import java.util.List; |
63 | | -import java.util.Map; |
64 | 63 | import java.util.Properties; |
65 | 64 | import java.util.Scanner; |
66 | 65 | import java.util.Set; |
@@ -2436,27 +2435,6 @@ List<FieldValue> createColumnRow( |
2436 | 2435 | return values; |
2437 | 2436 | } |
2438 | 2437 |
|
2439 | | - static class ColumnTypeInfo { |
2440 | | - final int jdbcType; |
2441 | | - final String typeName; |
2442 | | - final Integer columnSize; |
2443 | | - final Integer decimalDigits; |
2444 | | - final Integer numPrecRadix; |
2445 | | - |
2446 | | - ColumnTypeInfo( |
2447 | | - int jdbcType, |
2448 | | - String typeName, |
2449 | | - Integer columnSize, |
2450 | | - Integer decimalDigits, |
2451 | | - Integer numPrecRadix) { |
2452 | | - this.jdbcType = jdbcType; |
2453 | | - this.typeName = typeName; |
2454 | | - this.columnSize = columnSize; |
2455 | | - this.decimalDigits = decimalDigits; |
2456 | | - this.numPrecRadix = numPrecRadix; |
2457 | | - } |
2458 | | - } |
2459 | | - |
2460 | 2438 | ColumnTypeInfo mapBigQueryTypeToJdbc(Field field) { |
2461 | 2439 | Mode mode = (field.getMode() == null) ? Mode.NULLABLE : field.getMode(); |
2462 | 2440 | if (mode == Mode.REPEATED) { |
@@ -4833,55 +4811,12 @@ private Tuple<String, String> determineEffectiveCatalogAndSchema( |
4833 | 4811 | return Tuple.of(effectiveCatalog, effectiveSchemaPattern); |
4834 | 4812 | } |
4835 | 4813 |
|
4836 | | - // BigQuery STRING represents Unicode character strings (UTF-8). |
4837 | | - // 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. |
4840 | | - private static final Map<StandardSQLTypeName, ColumnTypeInfo> STANDARD_TYPE_INFO = |
4841 | | - ImmutableMap.<StandardSQLTypeName, ColumnTypeInfo>builder() |
4842 | | - .put(StandardSQLTypeName.INT64, new ColumnTypeInfo(Types.BIGINT, "INT64", 19, 0, 10)) |
4843 | | - .put(StandardSQLTypeName.BOOL, new ColumnTypeInfo(Types.BOOLEAN, "BOOL", 1, null, null)) |
4844 | | - .put( |
4845 | | - StandardSQLTypeName.FLOAT64, |
4846 | | - new ColumnTypeInfo(Types.DOUBLE, "FLOAT64", 15, null, 10)) |
4847 | | - .put(StandardSQLTypeName.NUMERIC, new ColumnTypeInfo(Types.NUMERIC, "NUMERIC", 38, 9, 10)) |
4848 | | - .put( |
4849 | | - StandardSQLTypeName.BIGNUMERIC, |
4850 | | - new ColumnTypeInfo(Types.NUMERIC, "BIGNUMERIC", 77, 38, 10)) |
4851 | | - .put( |
4852 | | - StandardSQLTypeName.STRING, |
4853 | | - new ColumnTypeInfo(Types.NVARCHAR, "STRING", null, null, null)) |
4854 | | - .put( |
4855 | | - StandardSQLTypeName.TIMESTAMP, |
4856 | | - new ColumnTypeInfo(Types.TIMESTAMP, "TIMESTAMP", 26, 6, null)) |
4857 | | - .put( |
4858 | | - StandardSQLTypeName.DATETIME, |
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)) |
4862 | | - .put( |
4863 | | - StandardSQLTypeName.GEOGRAPHY, |
4864 | | - new ColumnTypeInfo(Types.OTHER, "GEOGRAPHY", null, null, null)) |
4865 | | - .put(StandardSQLTypeName.JSON, new ColumnTypeInfo(Types.OTHER, "JSON", null, null, null)) |
4866 | | - .put( |
4867 | | - StandardSQLTypeName.INTERVAL, |
4868 | | - new ColumnTypeInfo(Types.OTHER, "INTERVAL", null, null, null)) |
4869 | | - .put( |
4870 | | - StandardSQLTypeName.RANGE, new ColumnTypeInfo(Types.OTHER, "RANGE", null, null, null)) |
4871 | | - .put( |
4872 | | - StandardSQLTypeName.BYTES, |
4873 | | - new ColumnTypeInfo(Types.VARBINARY, "BYTES", null, null, null)) |
4874 | | - .put( |
4875 | | - StandardSQLTypeName.STRUCT, |
4876 | | - new ColumnTypeInfo(Types.STRUCT, "STRUCT", null, null, null)) |
4877 | | - .build(); |
4878 | | - |
4879 | 4814 | private ColumnTypeInfo getColumnTypeInfoForSqlType(StandardSQLTypeName bqType) { |
4880 | 4815 | if (bqType == null) { |
4881 | 4816 | LOG.warning("Null BigQuery type encountered. Mapping to STRING."); |
4882 | 4817 | return new ColumnTypeInfo(Types.NVARCHAR, "STRING", null, null, null); |
4883 | 4818 | } |
4884 | | - ColumnTypeInfo info = STANDARD_TYPE_INFO.get(bqType); |
| 4819 | + ColumnTypeInfo info = BigQueryJdbcTypeMappings.STANDARD_TYPE_INFO.get(bqType); |
4885 | 4820 | if (info == null) { |
4886 | 4821 | LOG.warning("Unknown BigQuery type encountered: " + bqType.name() + ". Mapping to STRING."); |
4887 | 4822 | return new ColumnTypeInfo(Types.NVARCHAR, "STRING", null, null, null); |
|
0 commit comments