Track parameters up to the sharded columns
Problem Description
На данный момент, в структуре Plan, есть метод collect_parameter_types и поле relations.
Метод позволяет узнать типы переданных параметров в рамках extended query запроса,
а в relations хранится информация о целевых таблицах из запроса.
Для корректного расчета bucket_id, нам нужна информация о параметрах,
являющихся distributed by ключами в колонках целевых таблиц.
Согласно этому ADR, мы хотим перенести логику вычисления bucket_id на сторону клиента.
Для этого, необходимо отправлять ему информацию о параметрах запроса, а именно
о distributed by параметрах в запросе. Причем, если параметров недостаточно для
вычисления bucket_id, то отправляется пустой массив, чтобы клиент отправил запрос
на рандомный инстанс.
В идеальном мире, если бы метод collect_parameter_types возвращал массив структур
struct Param{
param_col_name: String, //a=$1 and b=$2...
param_type: Enum<Type>,
}
то мы могли бы соотнести имена и типы параметров с видом и схемой соответствующей таблицы.
Если колонка distributed by и типы соответствуют, то этот ключ добавляется в результируюший массив.
Если несколько таблиц распределены по одной колонке, то параметр будет транслирован как distributed by
ключ в каждую из таблиц. Данный случай тоже необходимо обработать корректно.
Proposal Description
Для достижения цели необходимо:
- соотнести параметры с колонками, к которым они относятся
- проверить достаточность для вычисления bucket_id для запроса
- собрать результирующий массив с параметрами
Feature Checklist
-
Introduces breaking changes? -
Needs documentation updates? -
Test coverage required?