```
SELECT *
FROM system.dictionaries
WHERE name LIKE 'XXXX%'

Row 1:
──────
database:                    default
name:                        XXXX_dict
uuid:                        00000000-0000-0000-0000-000000000000
status:                      LOADED
origin:                      default.XXXX_dict
type:                        Polygon
key:                         (Array(Array(Array(Array(Float64)))))
attribute.names:             ['name','id']
attribute.types:             ['String','String']
bytes_allocated:             0
query_count:                 0
hit_rate:                    1
element_count:               433731
load_factor:                 1
source:                      ClickHouse: default.XXXX
lifetime_min:                60
lifetime_max:                1800
loading_start_time:          2021-03-11 00:07:52
last_successful_update_time: 2021-03-11 00:08:24
loading_duration:            31.595
last_exception:
```
covered = 1;
        }
#endif
        size_t intersections = possible_ids.size() - covered;
        if (intersections <= kMinIntersections || depth++ == kMaxDepth)
            return std::make_unique<ReturnCell>(possible_ids, polygons, current_box, covered);
        auto x_shift = (current_max_x - current_min_x) / DividedCell<ReturnCell>::kSplit;
        auto y_shift = (current_max_y - current_min_y) / DividedCell<ReturnCell>::kSplit;
        std::vector<std::unique_ptr<ICell<ReturnCell>>> children;
        children.resize(DividedCell<ReturnCell>::kSplit * DividedCell<ReturnCell>::kSplit);
        std::vector<ThreadFromGlobalPool> threads{};
        for (size_t i = 0; i < DividedCell<ReturnCell>::kSplit; current_min_x += x_shift, ++i)
        {
            auto handle_row = [this, &children, &y_shift, &x_shift, &possible_ids, &depth, i](Coord x, Coord y)
            {
                for (size_t j = 0; j < DividedCell<ReturnCell>::kSplit; y += y_shift, ++j)
                {
                    children[i * DividedCell<ReturnCell>::kSplit + j] = makeCell(x, y, x + x_shift, y + y_shift, possible_ids, depth);
                }
            };
            if (depth <= kMultiProcessingDepth)
                threads.emplace_back(handle_row, current_min_x, current_min_y);
            else
                handle_row(current_min_x, current_min_y);
        }
        for (auto & thread : threads)
            thread.join();
        return std::make_unique<DividedCell<ReturnCell>>(std::move(children));
    }
    void setBoundingBox()