def test_array_to_query_parameter_honors_given_type_errors_on_invalid(): with pytest.raises( google.cloud.bigquery.dbapi.exceptions.ProgrammingError, match= "The given parameter type, INT, for foo is not a valid BigQuery scalar type.", ): _helpers.array_to_query_parameter((), "foo", "INT")
def test_array_to_query_parameter_honors_given_type(alias, type_): from google.cloud import bigquery assert _helpers.array_to_query_parameter( [1.23], None, alias) == (bigquery.ArrayQueryParameter(None, type_, [1.23])) assert _helpers.array_to_query_parameter( (), "foo", alias) == (bigquery.ArrayQueryParameter("foo", type_, ()))
def test_array_to_query_parameter_valid_argument(self): expected_types = [ ([True, False], "BOOL"), ([123, -456, 0], "INT64"), ([1.25, 2.50], "FLOAT64"), ([decimal.Decimal("1.25")], "NUMERIC"), ([b"foo", b"bar"], "BYTES"), ([u"foo", u"bar"], "STRING"), ([datetime.date(2017, 4, 1), datetime.date(2018, 4, 1)], "DATE"), ([datetime.time(12, 34, 56), datetime.time(10, 20, 30)], "TIME"), ( [ datetime.datetime(2012, 3, 4, 5, 6, 7), datetime.datetime(2013, 1, 1, 10, 20, 30), ], "DATETIME", ), ( [ datetime.datetime(2012, 3, 4, 5, 6, 7, tzinfo=google.cloud._helpers.UTC), datetime.datetime(2013, 1, 1, 10, 20, 30, tzinfo=google.cloud._helpers.UTC), ], "TIMESTAMP", ), ] if _BIGNUMERIC_SUPPORT: expected_types.append( ([decimal.Decimal("{d38}.{d38}".format(d38="9" * 38))], "BIGNUMERIC")) for values, expected_type in expected_types: msg = "value: {} expected_type: {}".format(values, expected_type) parameter = _helpers.array_to_query_parameter(values) self.assertIsNone(parameter.name, msg=msg) self.assertEqual(parameter.array_type, expected_type, msg=msg) self.assertEqual(parameter.values, values, msg=msg) named_param = _helpers.array_to_query_parameter(values, name="my_param") self.assertEqual(named_param.name, "my_param", msg=msg) self.assertEqual(named_param.array_type, expected_type, msg=msg) self.assertEqual(named_param.values, values, msg=msg)
def test_array_to_query_parameter_sequence_w_invalid_elements(self): with self.assertRaises(exceptions.ProgrammingError): _helpers.array_to_query_parameter([object(), 2, 7])
def test_array_to_query_parameter_unsupported_sequence(self): unsupported_iterables = [{10, 20, 30}, u"foo", b"bar", bytearray([65, 75, 85])] for iterable in unsupported_iterables: with self.assertRaises(exceptions.ProgrammingError): _helpers.array_to_query_parameter(iterable)
def test_array_to_query_parameter_empty_argument(self): with self.assertRaises(exceptions.ProgrammingError): _helpers.array_to_query_parameter([])