def test__merge_chunk_array_of_array_of_string(self):
        from google.cloud.spanner_v1 import StructType
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        subarray_type = Type(code=TypeCode.ARRAY,
                             array_element_type=Type(code=TypeCode.STRING))
        array_type = Type(code=TypeCode.ARRAY,
                          array_element_type=subarray_type)
        iterator = _MockCancellableIterator()
        streamed = self._make_one(iterator)
        FIELDS = [StructType.Field(name="lolos", type_=array_type)]
        streamed._metadata = self._make_result_set_metadata(FIELDS)
        streamed._pending_chunk = [
            [u"A", u"B"],
            [u"C"],
        ]
        chunk = [
            [u"D"],
            [u"E", u"F"],
        ]

        merged = streamed._merge_chunk(chunk)

        expected = [
            [u"A", u"B"],
            [u"CD"],
            [u"E", u"F"],
        ]

        self.assertEqual(merged, expected)
        self.assertIsNone(streamed._pending_chunk)
Exemple #2
0
    def test_batch_update_error(self):
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        database = _Database()
        api = database.spanner_api = self._make_spanner_api()
        api.execute_batch_dml.side_effect = RuntimeError()
        session = _Session(database)
        transaction = self._make_one(session)
        transaction._transaction_id = self.TRANSACTION_ID

        insert_dml = "INSERT INTO table(pkey, desc) VALUES (%pkey, %desc)"
        insert_params = {"pkey": 12345, "desc": "DESCRIPTION"}
        insert_param_types = {
            "pkey": Type(code=TypeCode.INT64),
            "desc": Type(code=TypeCode.STRING),
        }
        update_dml = 'UPDATE table SET desc = desc + "-amended"'
        delete_dml = "DELETE FROM table WHERE desc IS NULL"

        dml_statements = [
            (insert_dml, insert_params, insert_param_types),
            update_dml,
            delete_dml,
        ]

        with self.assertRaises(RuntimeError):
            transaction.batch_update(dml_statements)

        self.assertEqual(transaction._execute_sql_count, 1)
    def test__merge_chunk_array_of_array_of_int(self):
        from google.cloud.spanner_v1 import StructType
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        subarray_type = Type(code=TypeCode.ARRAY,
                             array_element_type=Type(code=TypeCode.INT64))
        array_type = Type(code=TypeCode.ARRAY,
                          array_element_type=subarray_type)
        iterator = _MockCancellableIterator()
        streamed = self._make_one(iterator)
        FIELDS = [StructType.Field(name="loloi", type_=array_type)]
        streamed._metadata = self._make_result_set_metadata(FIELDS)
        streamed._pending_chunk = [[0, 1], [2]]
        chunk = [[3], [4, 5]]

        merged = streamed._merge_chunk(chunk)

        expected = [
            [0, 1],
            [23],
            [4, 5],
        ]

        self.assertEqual(merged, expected)
        self.assertIsNone(streamed._pending_chunk)
    def _make_array_field(name, element_type_code=None, element_type=None):
        from google.cloud.spanner_v1 import StructType
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        if element_type is None:
            element_type = Type(code=element_type_code)
        array_type = Type(code=TypeCode.ARRAY, array_element_type=element_type)
        return StructType.Field(name=name, type_=array_type)
Exemple #5
0
    def test_w_array_empty(self):
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        field_type = Type(code=TypeCode.ARRAY,
                          array_element_type=Type(code=TypeCode.INT64))
        value = []

        self.assertEqual(self._callFUT(value, field_type), [])
Exemple #6
0
    def test_w_array_empty(self):
        from google.protobuf.struct_pb2 import Value, ListValue
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        field_type = Type(code=TypeCode.ARRAY,
                          array_element_type=Type(code=TypeCode.INT64))
        value_pb = Value(list_value=ListValue(values=[]))

        self.assertEqual(self._callFUT(value_pb, field_type), [])
Exemple #7
0
    def test_w_array_non_empty(self):
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        field_type = Type(code=TypeCode.ARRAY,
                          array_element_type=Type(code=TypeCode.INT64))
        values = ["32", "19", "5"]
        expected_values = [32, 19, 5]

        self.assertEqual(self._callFUT(values, field_type), expected_values)
Exemple #8
0
    def test_empty(self):
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import StructType
        from google.cloud.spanner_v1 import TypeCode

        struct_type_pb = StructType(fields=[
            StructType.Field(name="name", type_=Type(code=TypeCode.STRING)),
            StructType.Field(name="age", type_=Type(code=TypeCode.INT64)),
        ])

        self.assertEqual(self._callFUT(rows=[], row_type=struct_type_pb), [])
    def _make_struct_type(struct_type_fields):
        from google.cloud.spanner_v1 import StructType
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        fields = [
            StructType.Field(name=key, type_=Type(code=value))
            for key, value in struct_type_fields
        ]
        struct_type = StructType(fields=fields)
        return Type(code=TypeCode.STRUCT, struct_type=struct_type)
Exemple #10
0
    def test_it(self):
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode
        from google.cloud.spanner_v1 import param_types

        expected = Type(code=TypeCode.ARRAY,
                        array_element_type=Type(code=TypeCode.INT64))

        found = param_types.Array(param_types.INT64)

        self.assertEqual(found, expected)
Exemple #11
0
    def test_w_array_non_empty(self):
        from google.protobuf.struct_pb2 import Value, ListValue
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        field_type = Type(code=TypeCode.ARRAY,
                          array_element_type=Type(code=TypeCode.INT64))
        VALUES = [32, 19, 5]
        values_pb = ListValue(
            values=[Value(string_value=str(value)) for value in VALUES])
        value_pb = Value(list_value=values_pb)

        self.assertEqual(self._callFUT(value_pb, field_type), VALUES)
Exemple #12
0
    def test_w_struct(self):
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import StructType
        from google.cloud.spanner_v1 import TypeCode

        struct_type_pb = StructType(fields=[
            StructType.Field(name="name", type_=Type(code=TypeCode.STRING)),
            StructType.Field(name="age", type_=Type(code=TypeCode.INT64)),
        ])
        field_type = Type(code=TypeCode.STRUCT, struct_type=struct_type_pb)
        values = [u"phred", "32"]
        expected_values = [u"phred", 32]

        self.assertEqual(self._callFUT(values, field_type), expected_values)
Exemple #13
0
    def test_non_empty(self):
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import StructType
        from google.cloud.spanner_v1 import TypeCode
        from google.cloud.spanner_v1._helpers import _make_list_value_pbs

        VALUES = [[u"phred", 32], [u"bharney", 31]]
        struct_type_pb = StructType(fields=[
            StructType.Field(name="name", type_=Type(code=TypeCode.STRING)),
            StructType.Field(name="age", type_=Type(code=TypeCode.INT64)),
        ])
        values_pbs = _make_list_value_pbs(VALUES)

        self.assertEqual(
            self._callFUT(rows=values_pbs, row_type=struct_type_pb), VALUES)
Exemple #14
0
    def test_w_struct(self):
        from google.protobuf.struct_pb2 import Value
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import StructType
        from google.cloud.spanner_v1 import TypeCode
        from google.cloud.spanner_v1._helpers import _make_list_value_pb

        VALUES = [u"phred", 32]
        struct_type_pb = StructType(fields=[
            StructType.Field(name="name", type_=Type(code=TypeCode.STRING)),
            StructType.Field(name="age", type_=Type(code=TypeCode.INT64)),
        ])
        field_type = Type(code=TypeCode.STRUCT, struct_type=struct_type_pb)
        value_pb = Value(list_value=_make_list_value_pb(VALUES))

        self.assertEqual(self._callFUT(value_pb, field_type), VALUES)
Exemple #15
0
    def test_w_string(self):
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        field_type = Type(code=TypeCode.STRING)
        value = expected_value = u"Value"

        self.assertEqual(self._callFUT(value, field_type), expected_value)
Exemple #16
0
    def test_w_bool(self):
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        field_type = Type(code=TypeCode.BOOL)
        value = expected_value = True

        self.assertEqual(self._callFUT(value, field_type), expected_value)
Exemple #17
0
    def test_w_null(self):
        from google.protobuf.struct_pb2 import Value, NULL_VALUE
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        field_type = Type(code=TypeCode.STRING)
        value_pb = Value(null_value=NULL_VALUE)

        self.assertEqual(self._callFUT(value_pb, field_type), None)
Exemple #18
0
    def test_w_unknown_type(self):
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        field_type = Type(code=TypeCode.TYPE_CODE_UNSPECIFIED)
        value_pb = object()

        with self.assertRaises(ValueError):
            self._callFUT(value_pb, field_type)
Exemple #19
0
    def test_w_float(self):
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        field_type = Type(code=TypeCode.FLOAT64)
        value = "3.14159"
        expected_value = 3.14159

        self.assertEqual(self._callFUT(value, field_type), expected_value)
Exemple #20
0
    def test_w_int(self):
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        field_type = Type(code=TypeCode.INT64)
        value = "12345"
        expected_value = 12345

        self.assertEqual(self._callFUT(value, field_type), expected_value)
Exemple #21
0
    def test_w_bytes(self):
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        field_type = Type(code=TypeCode.BYTES)
        value = "Value"
        expected_value = b"Value"

        self.assertEqual(self._callFUT(value, field_type), expected_value)
Exemple #22
0
    def test_it(self):
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode
        from google.cloud.spanner_v1 import StructType
        from google.cloud.spanner_v1 import param_types

        struct_type = StructType(fields=[
            StructType.Field(name="name", type_=Type(code=TypeCode.STRING)),
            StructType.Field(name="count", type_=Type(code=TypeCode.INT64)),
        ])
        expected = Type(code=TypeCode.STRUCT, struct_type=struct_type)

        found = param_types.Struct([
            param_types.StructField("name", param_types.STRING),
            param_types.StructField("count", param_types.INT64),
        ])

        self.assertEqual(found, expected)
Exemple #23
0
    def test_w_empty_value(self):
        from google.protobuf.struct_pb2 import Value
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        field_type = Type(code=TypeCode.STRING)
        value_pb = Value()

        with self.assertRaises(ValueError):
            self._callFUT(value_pb, field_type)
Exemple #24
0
    def test_w_unknown_type(self):
        from google.protobuf.struct_pb2 import Value
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        field_type = Type(code=TypeCode.TYPE_CODE_UNSPECIFIED)
        value_pb = Value(string_value="Borked")

        with self.assertRaises(ValueError):
            self._callFUT(value_pb, field_type)
Exemple #25
0
    def test_w_float(self):
        from google.protobuf.struct_pb2 import Value
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        VALUE = 3.14159
        field_type = Type(code=TypeCode.FLOAT64)
        value_pb = Value(number_value=VALUE)

        self.assertEqual(self._callFUT(value_pb, field_type), VALUE)
Exemple #26
0
    def test_w_int(self):
        from google.protobuf.struct_pb2 import Value
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        VALUE = 12345
        field_type = Type(code=TypeCode.INT64)
        value_pb = Value(string_value=str(VALUE))

        self.assertEqual(self._callFUT(value_pb, field_type), VALUE)
Exemple #27
0
    def test_w_bool(self):
        from google.protobuf.struct_pb2 import Value
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        VALUE = True
        field_type = Type(code=TypeCode.BOOL)
        value_pb = Value(bool_value=VALUE)

        self.assertEqual(self._callFUT(value_pb, field_type), VALUE)
Exemple #28
0
    def test_w_bytes(self):
        from google.protobuf.struct_pb2 import Value
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        VALUE = b"Value"
        field_type = Type(code=TypeCode.BYTES)
        value_pb = Value(string_value=VALUE)

        self.assertEqual(self._callFUT(value_pb, field_type), VALUE)
Exemple #29
0
    def test_w_numeric(self):
        import decimal
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        field_type = Type(code=TypeCode.NUMERIC)
        expected_value = decimal.Decimal("99999999999999999999999999999.999999999")
        value = "99999999999999999999999999999.999999999"

        self.assertEqual(self._callFUT(value, field_type), expected_value)
Exemple #30
0
    def test_w_date(self):
        import datetime
        from google.cloud.spanner_v1 import Type
        from google.cloud.spanner_v1 import TypeCode

        value = "2020-09-22"
        expected_value = datetime.date(2020, 9, 22)
        field_type = Type(code=TypeCode.DATE)

        self.assertEqual(self._callFUT(value, field_type), expected_value)