Fix type recalculation after params binding
Фоллоу-ап на !1598 (merged).
Сейчас после биндинга параметров мы неправильно обходим дерево для пересчёта типов. Если посмотреть на реализацию subtree_next
для проекции и пары других узлов, видно, что мы сначала обрабатываем output, и только потом детей. Хотя для вывода типов должны делать наоборот: тип для output проекции, например, можно будет вывести, только если уже будут посчитаны типы для её ребёнка. Поэтому нужно поменять порядок обхода output/дети. НО если так сделать, поломается логика биндинга параметров: по порядку они сначала будут биндится в детях и только потом в output'е, что не соответствует направлению слева-направо, которое ожидает пользователь. В итератор можно добавить флаг вроде output_first
, чтобы определять последовательность обхода
Нужно добавить больше тестов на то, что мы правильно высчитываем типы колонок после биндинга параметров