Don't count specific Plan nodes/fields during pattern_id calculation
Сейчас под функцией pattern_id мы обходим всё дерево плана с помощью subtree_iter, собираем вершины в массив, сериализуем в bincode и считаем хэш. Есть вероятность того, что с таким подходом мы можем получить для двух разных планов, которые превращаются в один локальный SQL, разные хэши, которые используем как ключи в нашем самодельном LRU кэше. (см. комментарий)
Это плохо, потому что произойдёт расхождение двух кэшей: самодельного в сброде и тарантульного, который вычисляет statement_id на основании локального SQL.
В рамках этой задачи нужно понять, какие вершины/поля нам нужно не учитывать в процессе подсчёта хэша на стороне сброда. Первые кандидаты:
- Output в целом или определенённые поля вроде distribution
- Типы под Reference:
create table t(a int primary key) select a from t -- pattern_id_1 for type int drop table t create table t(a unsigned primary key) select a from t -- new pattern_id_2 for type unsigned -> statement already prepared error
См. так же ишью в тарантуле
Edited by Emir Vildanov