File: test_int.py

package info (click to toggle)
python-clickhouse-driver 0.2.5-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,516 kB
  • sloc: python: 10,950; pascal: 42; makefile: 31; sh: 3
file content (95 lines) | stat: -rw-r--r-- 2,914 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
try:
    import numpy as np
except ImportError:
    np = None

from tests.numpy.testcase import NumpyBaseTestCase


class IntTestCase(NumpyBaseTestCase):
    n = 10

    def check_result(self, rv, col_type):
        self.assertArraysEqual(rv[0], np.array(range(self.n)))
        self.assertEqual(rv[0].dtype, col_type)

    def get_query(self, ch_type):
        with self.create_table('a {}'.format(ch_type)):
            data = [np.array(range(self.n))]
            self.client.execute(
                'INSERT INTO test (a) VALUES', data, columnar=True
            )

            query = 'SELECT * FROM test'
            inserted = self.emit_cli(query)
            self.assertEqual(
                inserted, '\n'.join(str(x) for x in data[0]) + '\n'
            )
            return self.client.execute(query, columnar=True)

    def test_int8(self):
        rv = self.get_query('Int8')
        self.check_result(rv, np.int8)

    def test_int16(self):
        rv = self.get_query('Int16')
        self.check_result(rv, np.int16)

    def test_int32(self):
        rv = self.get_query('Int32')
        self.check_result(rv, np.int32)

    def test_int64(self):
        rv = self.get_query('Int64')
        self.check_result(rv, np.int64)

    def test_uint8(self):
        rv = self.get_query('UInt8')
        self.check_result(rv, np.uint8)

    def test_uint16(self):
        rv = self.get_query('UInt16')
        self.check_result(rv, np.uint16)

    def test_uint32(self):
        rv = self.get_query('UInt32')
        self.check_result(rv, np.uint32)

    def test_uint64(self):
        rv = self.get_query('UInt64')
        self.check_result(rv, np.uint64)

    def test_insert_nan_into_non_nullable(self):
        with self.create_table('a Int32'):
            data = [
                np.array([123, np.nan], dtype=object)
            ]
            self.client.execute(
                'INSERT INTO test (a) VALUES', data, columnar=True
            )

            query = 'SELECT * FROM test'
            inserted = self.emit_cli(query)
            self.assertEqual(
                inserted,
                '123\n0\n'
            )

            inserted = self.client.execute(query, columnar=True)
            self.assertArraysEqual(inserted[0], np.array([123, 0]))
            self.assertEqual(inserted[0].dtype, np.int32)

    def test_nullable(self):
        with self.create_table('a Nullable(Int32)'):
            data = [np.array([2, None, 4, None, 8])]
            self.client.execute(
                'INSERT INTO test (a) VALUES', data, columnar=True
            )

            query = 'SELECT * FROM test'
            inserted = self.emit_cli(query)
            self.assertEqual(inserted, '2\n\\N\n4\n\\N\n8\n')

            inserted = self.client.execute(query, columnar=True)
            self.assertArraysEqual(inserted[0], data[0])
            self.assertEqual(inserted[0].dtype, object)