Replace tarantool's plan cache with our rust impl
Текущая реализация работы с кэшом байткода через прокси файбер не идеальна.
- Прокси корректно работает только при условии, что если два поддерева IR отличаются, то и байткод sqlite у них тоже будет отличаться. Чаще всего это так, но учитывая особенности выведения типов в тарантуле, у нас возможны коллизии. Эту проблему коллизий можно было бы решить, если дать коду в пикодате доступ к счетчику ссылок кэша байткода (сейчас это скрыто в глубине тарантула).
- Переключение на прокси файбер при каждом добавлении или удалении байткода из кэша увеличивает время выполнения запроса (приходится ждать, пока планировщик переключится с одного файбера на другой и обратно).
- Отсутствие прямого доступа к кэшу байткода мешает нам построить LRU с политикой вытеснения, основанной на оставшемся свободном месте в памяти кэша (нужны размеры откомпилированных выражений, количество ссылок на каждое из них и прямые доступы к statement, чтобы избежать двойной компиляции - см. #1246).
- Опкоды для транзакций не генерируются сейчас через локальный SQL и не понятно как помещать сгененрированный для них байткод в кэш тарантула (текущее C API позволяет взаимодействовать с кэшом только через локальный SQL или statement id). TODO: cc @funbringer - проверь, что я корректно описал проблему.
Edited by Denis Smirnov