Skip to content

Commit 70a1c63

Browse files
authoredDec 2, 2024
support types with comma inside map (#61)
1 parent 28ca4c9 commit 70a1c63

File tree

3 files changed

+42
-2
lines changed

3 files changed

+42
-2
lines changed
 

Diff for: ‎proton_driver/__init__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from .dbapi import connect
44

55

6-
VERSION = (0, 2, 12)
6+
VERSION = (0, 2, 13)
77
__version__ = '.'.join(str(x) for x in VERSION)
88

99
__all__ = ['Client', 'connect']

Diff for: ‎proton_driver/columns/mapcolumn.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from .base import Column
22
from .intcolumn import UInt64Column
33
from ..util.helpers import pairwise
4+
from .util import get_inner_columns
45

56

67
class MapColumn(Column):
@@ -51,7 +52,7 @@ def write_items(self, items, buf):
5152

5253

5354
def create_map_column(spec, column_by_spec_getter):
54-
key, value = spec[4:-1].split(',')
55+
key, value = get_inner_columns('map', spec)
5556
key_column = column_by_spec_getter(key.strip())
5657
value_column = column_by_spec_getter(value.strip())
5758

Diff for: ‎tests/columns/test_map.py

+39
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from tests.testcase import BaseTestCase
2+
from decimal import Decimal
23

34

45
class MapTestCase(BaseTestCase):
@@ -100,3 +101,41 @@ def test_array(self):
100101
)
101102
inserted = self.client.execute(query)
102103
self.assertEqual(inserted, data)
104+
105+
def test_decimal(self):
106+
with self.create_stream('a map(string, Decimal(9, 2))'):
107+
data = [
108+
({'key1': Decimal('123.45')}, ),
109+
({'key2': Decimal('234.56')}, ),
110+
({'key3': Decimal('345.67')}, )
111+
]
112+
self.client.execute('INSERT INTO test (a) VALUES', data)
113+
query = 'SELECT * FROM test'
114+
inserted = self.emit_cli(query)
115+
self.assertEqual(
116+
inserted,
117+
"{'key1':123.45}\n"
118+
"{'key2':234.56}\n"
119+
"{'key3':345.67}\n"
120+
)
121+
inserted = self.client.execute(query)
122+
self.assertEqual(inserted, data)
123+
124+
def test_nested_map(self):
125+
with self.create_stream('a map(string, map(string, map(string, int)))'): # noqa
126+
data = [
127+
({'key1': {'key2': {'key3': 1}}}, ),
128+
({'key1': {'key2': {'key3': 2}}}, ),
129+
({'key1': {'key2': {'key3': 3}}}, ),
130+
]
131+
self.client.execute('INSERT INTO test (a) VALUES', data)
132+
query = 'SELECT * FROM test'
133+
inserted = self.emit_cli(query)
134+
self.assertEqual(
135+
inserted,
136+
"{'key1':{'key2':{'key3':1}}}\n"
137+
"{'key1':{'key2':{'key3':2}}}\n"
138+
"{'key1':{'key2':{'key3':3}}}\n"
139+
)
140+
inserted = self.client.execute(query)
141+
self.assertEqual(inserted, data)

0 commit comments

Comments
 (0)