File: test_geo.py

package info (click to toggle)
python-clickhouse-driver 0.2.5-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,516 kB
  • sloc: python: 10,950; pascal: 42; makefile: 29; sh: 3
file content (99 lines) | stat: -rw-r--r-- 2,830 bytes parent folder | download | duplicates (3)
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
96
97
98
99
from tests.testcase import BaseTestCase


class GeoTypesTestCase(BaseTestCase):
    required_server_version = (20, 5, 1)

    def client_kwargs(self, version):
        return {'settings': {'allow_experimental_geo_types': True}}

    def cli_client_kwargs(self):
        return {'allow_experimental_geo_types': 1}

    def entuple(self, lst):
        return tuple(
            self.entuple(x) if isinstance(x, list) else x for x in lst
        )

    def test_point(self):
        columns = 'a Point'
        data = [
            ((1.5, 2), ),
            ((3, 4), )
        ]

        with self.create_table(columns):
            self.client.execute('INSERT INTO test (a) VALUES', data)

            query = 'SELECT * FROM test'
            inserted = self.emit_cli(query)
            self.assertEqual(inserted, '(1.5,2)\n(3,4)\n')

            inserted = self.client.execute(query)
            self.assertEqual(inserted, data)

    def test_ring(self):
        columns = 'a Ring'
        data = [
            ([(1.5, 2), (3, 4)], )
        ]

        with self.create_table(columns):
            self.client.execute('INSERT INTO test (a) VALUES', data)

            query = 'SELECT * FROM test'
            inserted = self.emit_cli(query)
            self.assertEqual(inserted, '[(1.5,2),(3,4)]\n')

            inserted = self.client.execute(query)
            self.assertEqual(inserted, data)

    def test_polygon(self):
        columns = 'a Polygon'
        data = [
            ([
                [(1.5, 2), (3, 4)],
                [(5.5, 6), (7, 8)],
             ], )
        ]

        with self.create_table(columns):
            self.client.execute('INSERT INTO test (a) VALUES', data)

            query = 'SELECT * FROM test'
            inserted = self.emit_cli(query)
            self.assertEqual(inserted, '[[(1.5,2),(3,4)],[(5.5,6),(7,8)]]\n')

            inserted = self.client.execute(query)
            self.assertEqual(inserted, data)

    def test_multipolygon(self):
        columns = 'a MultiPolygon'
        data = [
            ([
                [
                    [(1.5, 2), (3, 4)],
                    [(5.5, 6), (7, 8)],
                ],
                [
                    [(2.5, 3), (4, 5)],
                    [(6.5, 7), (8, 9)],
                ]
             ], )
        ]

        with self.create_table(columns):
            self.client.execute('INSERT INTO test (a) VALUES', data)

            query = 'SELECT * FROM test'
            inserted = self.emit_cli(query)
            self.assertEqual(
                inserted,
                '['
                '[[(1.5,2),(3,4)],[(5.5,6),(7,8)]],'
                '[[(2.5,3),(4,5)],[(6.5,7),(8,9)]]'
                ']\n'
            )

            inserted = self.client.execute(query)
            self.assertEqual(inserted, data)