diff --git a/clickhouse_driver/columns/mapcolumn.py b/clickhouse_driver/columns/mapcolumn.py index 30f69bdd..67536f4c 100644 --- a/clickhouse_driver/columns/mapcolumn.py +++ b/clickhouse_driver/columns/mapcolumn.py @@ -31,6 +31,9 @@ def write_state_prefix(self, buf): self.value_column.write_state_prefix(buf) def read_items(self, n_items, buf): + if not n_items: + return [{}] + offsets = list(self.offset_column.read_items(n_items, buf)) last_offset = offsets[-1] keys = self.key_column.read_data(last_offset, buf) diff --git a/tests/columns/test_map.py b/tests/columns/test_map.py index 504cc62e..f9eb9496 100644 --- a/tests/columns/test_map.py +++ b/tests/columns/test_map.py @@ -120,3 +120,16 @@ def test_decimal(self): ) inserted = self.client.execute(query) self.assertEqual(inserted, data) + + def test_only_empty_map(self): + columns = 'a Map(String, Map(String, Int32))' + with self.create_table(columns): + data = [ + ({}, ), + ] + self.client.execute('INSERT INTO test (a) VALUES', data) + query = 'SELECT * FROM test' + inserted = self.emit_cli(query) + self.assertEqual(inserted, '{}\n') + inserted = self.client.execute(query) + self.assertEqual(inserted, data)