From 9ca477ef55b694c38fa578a853317fae82a74d27 Mon Sep 17 00:00:00 2001 From: Jim Fulton Date: Wed, 28 Apr 2021 13:28:59 -0600 Subject: [PATCH 1/4] Added decimal types to SqlTypeNames and SqlParameterScalarTypes --- google/cloud/bigquery/enums.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/google/cloud/bigquery/enums.py b/google/cloud/bigquery/enums.py index b378f091b..af090e8b5 100644 --- a/google/cloud/bigquery/enums.py +++ b/google/cloud/bigquery/enums.py @@ -205,6 +205,8 @@ class SqlTypeNames(str, enum.Enum): FLOAT64 = "FLOAT" NUMERIC = "NUMERIC" BIGNUMERIC = "BIGNUMERIC" + DECIMAL = "DECIMAL" + BIGDECIMAL = "BIGDECIMAL" BOOLEAN = "BOOLEAN" BOOL = "BOOLEAN" GEOGRAPHY = "GEOGRAPHY" # NOTE: not available in legacy types @@ -227,6 +229,8 @@ class SqlParameterScalarTypes: FLOAT64 = ScalarQueryParameterType("FLOAT64") NUMERIC = ScalarQueryParameterType("NUMERIC") BIGNUMERIC = ScalarQueryParameterType("BIGNUMERIC") + DECIMAL = ScalarQueryParameterType("DECIMAL") + BIGDECIMAL = ScalarQueryParameterType("BIGDECIMAL") BOOLEAN = ScalarQueryParameterType("BOOL") BOOL = ScalarQueryParameterType("BOOL") GEOGRAPHY = ScalarQueryParameterType("GEOGRAPHY") From 8e8ac829c0808845cd9acca0e23a47b0294baf75 Mon Sep 17 00:00:00 2001 From: Jim Fulton Date: Thu, 29 Apr 2021 07:27:52 -0600 Subject: [PATCH 2/4] Go ahead and alias on the client To convey to the observant that these are aliases, even though they could be used (more or less) directly. --- google/cloud/bigquery/enums.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/google/cloud/bigquery/enums.py b/google/cloud/bigquery/enums.py index af090e8b5..787c2449d 100644 --- a/google/cloud/bigquery/enums.py +++ b/google/cloud/bigquery/enums.py @@ -203,10 +203,8 @@ class SqlTypeNames(str, enum.Enum): INT64 = "INTEGER" FLOAT = "FLOAT" FLOAT64 = "FLOAT" - NUMERIC = "NUMERIC" - BIGNUMERIC = "BIGNUMERIC" - DECIMAL = "DECIMAL" - BIGDECIMAL = "BIGDECIMAL" + DECIMAL = NUMERIC = "NUMERIC" + BIGDECIMAL = BIGNUMERIC = "BIGNUMERIC" BOOLEAN = "BOOLEAN" BOOL = "BOOLEAN" GEOGRAPHY = "GEOGRAPHY" # NOTE: not available in legacy types @@ -229,8 +227,8 @@ class SqlParameterScalarTypes: FLOAT64 = ScalarQueryParameterType("FLOAT64") NUMERIC = ScalarQueryParameterType("NUMERIC") BIGNUMERIC = ScalarQueryParameterType("BIGNUMERIC") - DECIMAL = ScalarQueryParameterType("DECIMAL") - BIGDECIMAL = ScalarQueryParameterType("BIGDECIMAL") + DECIMAL = ScalarQueryParameterType("NUMERIC") + BIGDECIMAL = ScalarQueryParameterType("BIGNUMERIC") BOOLEAN = ScalarQueryParameterType("BOOL") BOOL = ScalarQueryParameterType("BOOL") GEOGRAPHY = ScalarQueryParameterType("GEOGRAPHY") From 65bd47b30efdca4da0cda493bcfa960fdba1f474 Mon Sep 17 00:00:00 2001 From: Jim Fulton Date: Thu, 29 Apr 2021 08:31:20 -0600 Subject: [PATCH 3/4] Make sure that DECIMAL data are converted when making API calls. This is mainly as a backstop -- DECIMAL requests should be converted to NUMERIC. --- google/cloud/bigquery/_helpers.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/google/cloud/bigquery/_helpers.py b/google/cloud/bigquery/_helpers.py index ad8e3f003..171e526dd 100644 --- a/google/cloud/bigquery/_helpers.py +++ b/google/cloud/bigquery/_helpers.py @@ -363,6 +363,12 @@ def _time_to_json(value): "DATETIME": _datetime_to_json, "DATE": _date_to_json, "TIME": _time_to_json, + + # Make sure DECIMAL and BIGDECIMAL are handled, even though + # requests for them should be converted to NUMERIC. Better safe + # than sorry. + "DECIMAL": _decimal_to_json, + "BIGDECIMAL": _decimal_to_json, } From 1497c97d8fb465b3328def99a25fe5e5db4c3358 Mon Sep 17 00:00:00 2001 From: Jim Fulton Date: Thu, 29 Apr 2021 08:53:43 -0600 Subject: [PATCH 4/4] blacken --- google/cloud/bigquery/_helpers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/google/cloud/bigquery/_helpers.py b/google/cloud/bigquery/_helpers.py index 171e526dd..4fe29291d 100644 --- a/google/cloud/bigquery/_helpers.py +++ b/google/cloud/bigquery/_helpers.py @@ -363,7 +363,6 @@ def _time_to_json(value): "DATETIME": _datetime_to_json, "DATE": _date_to_json, "TIME": _time_to_json, - # Make sure DECIMAL and BIGDECIMAL are handled, even though # requests for them should be converted to NUMERIC. Better safe # than sorry.