Skip to content

Fix type recalculation after params binding

Фоллоу-ап на !1598 (merged).

Сейчас после биндинга параметров мы неправильно обходим дерево для пересчёта типов. Если посмотреть на реализацию subtree_next для проекции и пары других узлов, видно, что мы сначала обрабатываем output, и только потом детей. Хотя для вывода типов должны делать наоборот: тип для output проекции, например, можно будет вывести, только если уже будут посчитаны типы для её ребёнка. Поэтому нужно поменять порядок обхода output/дети. НО если так сделать, поломается логика биндинга параметров: по порядку они сначала будут биндится в детях и только потом в output'е, что не соответствует направлению слева-направо, которое ожидает пользователь. В итератор можно добавить флаг вроде output_first, чтобы определять последовательность обхода

Нужно добавить больше тестов на то, что мы правильно высчитываем типы колонок после биндинга параметров

Целевой запрос select * from (select ?). Для верхней проекции мы вначале заходим в reference, а она ссылается на ребенка (подзапрос), которого мы еще не обошли.

Edited by Denis Smirnov
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information