|
25 | 25 |
|
26 | 26 | import google.cloud._helpers
|
27 | 27 | from google.cloud.bigquery import table
|
28 |
| -from google.cloud.bigquery._pandas_helpers import _BIGNUMERIC_SUPPORT |
29 | 28 | from google.cloud.bigquery.dbapi import _helpers
|
30 | 29 | from google.cloud.bigquery.dbapi import exceptions
|
31 | 30 | from tests.unit.helpers import _to_pyarrow
|
@@ -39,9 +38,8 @@ def test_scalar_to_query_parameter(self):
|
39 | 38 | (123, "INT64"),
|
40 | 39 | (-123456789, "INT64"),
|
41 | 40 | (1.25, "FLOAT64"),
|
42 |
| -(decimal.Decimal("1.25"), "NUMERIC"), |
43 | 41 | (b"I am some bytes", "BYTES"),
|
44 |
| -(u"I am a string", "STRING"), |
| 42 | +("I am a string", "STRING"), |
45 | 43 | (datetime.date(2017, 4, 1), "DATE"),
|
46 | 44 | (datetime.time(12, 34, 56), "TIME"),
|
47 | 45 | (datetime.datetime(2012, 3, 4, 5, 6, 7), "DATETIME"),
|
@@ -51,14 +49,17 @@ def test_scalar_to_query_parameter(self):
|
51 | 49 | ),
|
52 | 50 | "TIMESTAMP",
|
53 | 51 | ),
|
| 52 | +(decimal.Decimal("1.25"), "NUMERIC"), |
| 53 | +(decimal.Decimal("9.9999999999999999999999999999999999999E+28"), "NUMERIC"), |
| 54 | +(decimal.Decimal("1.0E+29"), "BIGNUMERIC"), # more than max NUMERIC value |
| 55 | +(decimal.Decimal("1.123456789"), "NUMERIC"), |
| 56 | +(decimal.Decimal("1.1234567891"), "BIGNUMERIC"), # scale > 9 |
| 57 | +(decimal.Decimal("12345678901234567890123456789.012345678"), "NUMERIC"), |
| 58 | +( |
| 59 | +decimal.Decimal("12345678901234567890123456789012345678"), |
| 60 | +"BIGNUMERIC", # larger than max NUMERIC value, despite precision <=38 |
| 61 | +), |
54 | 62 | ]
|
55 |
| -if _BIGNUMERIC_SUPPORT: |
56 |
| -expected_types.append( |
57 |
| -( |
58 |
| -decimal.Decimal("1.1234567890123456789012345678901234567890"), |
59 |
| -"BIGNUMERIC", |
60 |
| -) |
61 |
| -) |
62 | 63 |
|
63 | 64 | for value, expected_type in expected_types:
|
64 | 65 | msg = "value: {} expected_type: {}".format(value, expected_type)
|
@@ -71,6 +72,33 @@ def test_scalar_to_query_parameter(self):
|
71 | 72 | self.assertEqual(named_parameter.type_, expected_type, msg=msg)
|
72 | 73 | self.assertEqual(named_parameter.value, value, msg=msg)
|
73 | 74 |
|
| 75 | +def test_decimal_to_query_parameter(self): # TODO: merge with previous test |
| 76 | + |
| 77 | +expected_types = [ |
| 78 | +(decimal.Decimal("9.9999999999999999999999999999999999999E+28"), "NUMERIC"), |
| 79 | +(decimal.Decimal("1.0E+29"), "BIGNUMERIC"), # more than max value |
| 80 | +(decimal.Decimal("1.123456789"), "NUMERIC"), |
| 81 | +(decimal.Decimal("1.1234567891"), "BIGNUMERIC"), # scale > 9 |
| 82 | +(decimal.Decimal("12345678901234567890123456789.012345678"), "NUMERIC"), |
| 83 | +( |
| 84 | +decimal.Decimal("12345678901234567890123456789012345678"), |
| 85 | +"BIGNUMERIC", # larger than max size, even if precision <=38 |
| 86 | +), |
| 87 | +] |
| 88 | + |
| 89 | +for value, expected_type in expected_types: |
| 90 | +msg = f"value: {value} expected_type: {expected_type}" |
| 91 | + |
| 92 | +parameter = _helpers.scalar_to_query_parameter(value) |
| 93 | +self.assertIsNone(parameter.name, msg=msg) |
| 94 | +self.assertEqual(parameter.type_, expected_type, msg=msg) |
| 95 | +self.assertEqual(parameter.value, value, msg=msg) |
| 96 | + |
| 97 | +named_parameter = _helpers.scalar_to_query_parameter(value, name="myvar") |
| 98 | +self.assertEqual(named_parameter.name, "myvar", msg=msg) |
| 99 | +self.assertEqual(named_parameter.type_, expected_type, msg=msg) |
| 100 | +self.assertEqual(named_parameter.value, value, msg=msg) |
| 101 | + |
74 | 102 | def test_scalar_to_query_parameter_w_unexpected_type(self):
|
75 | 103 | with self.assertRaises(exceptions.ProgrammingError):
|
76 | 104 | _helpers.scalar_to_query_parameter(value={"a": "dictionary"})
|
@@ -89,8 +117,9 @@ def test_array_to_query_parameter_valid_argument(self):
|
89 | 117 | ([123, -456, 0], "INT64"),
|
90 | 118 | ([1.25, 2.50], "FLOAT64"),
|
91 | 119 | ([decimal.Decimal("1.25")], "NUMERIC"),
|
| 120 | +([decimal.Decimal("{d38}.{d38}".format(d38="9" * 38))], "BIGNUMERIC"), |
92 | 121 | ([b"foo", b"bar"], "BYTES"),
|
93 |
| -([u"foo", u"bar"], "STRING"), |
| 122 | +(["foo", "bar"], "STRING"), |
94 | 123 | ([datetime.date(2017, 4, 1), datetime.date(2018, 4, 1)], "DATE"),
|
95 | 124 | ([datetime.time(12, 34, 56), datetime.time(10, 20, 30)], "TIME"),
|
96 | 125 | (
|
@@ -113,11 +142,6 @@ def test_array_to_query_parameter_valid_argument(self):
|
113 | 142 | ),
|
114 | 143 | ]
|
115 | 144 |
|
116 |
| -if _BIGNUMERIC_SUPPORT: |
117 |
| -expected_types.append( |
118 |
| -([decimal.Decimal("{d38}.{d38}".format(d38="9" * 38))], "BIGNUMERIC") |
119 |
| -) |
120 |
| - |
121 | 145 | for values, expected_type in expected_types:
|
122 | 146 | msg = "value: {} expected_type: {}".format(values, expected_type)
|
123 | 147 | parameter = _helpers.array_to_query_parameter(values)
|
@@ -134,7 +158,7 @@ def test_array_to_query_parameter_empty_argument(self):
|
134 | 158 | _helpers.array_to_query_parameter([])
|
135 | 159 |
|
136 | 160 | def test_array_to_query_parameter_unsupported_sequence(self):
|
137 |
| -unsupported_iterables = [{10, 20, 30}, u"foo", b"bar", bytearray([65, 75, 85])] |
| 161 | +unsupported_iterables = [{10, 20, 30}, "foo", b"bar", bytearray([65, 75, 85])] |
138 | 162 | for iterable in unsupported_iterables:
|
139 | 163 | with self.assertRaises(exceptions.ProgrammingError):
|
140 | 164 | _helpers.array_to_query_parameter(iterable)
|
@@ -144,7 +168,7 @@ def test_array_to_query_parameter_sequence_w_invalid_elements(self):
|
144 | 168 | _helpers.array_to_query_parameter([object(), 2, 7])
|
145 | 169 |
|
146 | 170 | def test_to_query_parameters_w_dict(self):
|
147 |
| -parameters = {"somebool": True, "somestring": u"a-string-value"} |
| 171 | +parameters = {"somebool": True, "somestring": "a-string-value"} |
148 | 172 | query_parameters = _helpers.to_query_parameters(parameters)
|
149 | 173 | query_parameter_tuples = []
|
150 | 174 | for param in query_parameters:
|
@@ -154,7 +178,7 @@ def test_to_query_parameters_w_dict(self):
|
154 | 178 | sorted(
|
155 | 179 | [
|
156 | 180 | ("somebool", "BOOL", True),
|
157 |
| -("somestring", "STRING", u"a-string-value"), |
| 181 | +("somestring", "STRING", "a-string-value"), |
158 | 182 | ]
|
159 | 183 | ),
|
160 | 184 | )
|
@@ -177,14 +201,14 @@ def test_to_query_parameters_w_dict_dict_param(self):
|
177 | 201 | _helpers.to_query_parameters(parameters)
|
178 | 202 |
|
179 | 203 | def test_to_query_parameters_w_list(self):
|
180 |
| -parameters = [True, u"a-string-value"] |
| 204 | +parameters = [True, "a-string-value"] |
181 | 205 | query_parameters = _helpers.to_query_parameters(parameters)
|
182 | 206 | query_parameter_tuples = []
|
183 | 207 | for param in query_parameters:
|
184 | 208 | query_parameter_tuples.append((param.name, param.type_, param.value))
|
185 | 209 | self.assertSequenceEqual(
|
186 | 210 | sorted(query_parameter_tuples),
|
187 |
| -sorted([(None, "BOOL", True), (None, "STRING", u"a-string-value")]), |
| 211 | +sorted([(None, "BOOL", True), (None, "STRING", "a-string-value")]), |
188 | 212 | )
|
189 | 213 |
|
190 | 214 | def test_to_query_parameters_w_list_array_param(self):
|
|
0 commit comments