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