Closed LyricalToxic closed 2 months ago
c POSTCOMPILE выражением в целом понятно, с этим изменением согласен. что касается
Параметры postcompile объектов нарушают порядок всех параметров, поэтому требуется позиционная сортировка
то здесь непонятно. твой пример не демонстрирует как нарушен порядок и на практике я не помню такого поведения. нужен или рефренс почему так происходит и почему именно так решается или более развернутый пример, который покажет именно это поведение.
@vulreid Пример с изменением порядка параметров довольно громоздкий, поэтому не указал его изначально.
Необходимо посмотреть непосредственно на подставляемые аргуементы.
Ссылка на доку. Там в блоке есть сортировка
params = (repr(compiled.params[name]) for name in compiled.positiontup)
@LyricalToxic потестил локально пример, различия в поведении теперь понятны. есть вопрос: по сравнению с примером из документации ты добавил проверку на наличие атрибута, а разбирался ли ты откуда в экземпляре expression_compiled = expression.compile()
этот атрибут появляется (в какой момент, за счет какой иерархии наследования\инициализации)?
@vulreid Нет, не разбирался, не исследовал. Стоит этим заняться?
нет, если нет готовой информации, то сейчас не надо искать, само поведение уже подтверждено.
Bug description
SQLAlchemy во время компайлинга выражений оставляет по умолчанию неотрендеренными postcompile объекты. Для того чтобы их отрендерить необходимо указать явно параметр. doc
Сравнение текущей реализации и фикса.
По комментариям видно, что текущая версия оставляет POSTCOMPILE_id_1 объект неотрендаренным, а вторая версия рендорит и правильно подставляет значения.
Параметры postcompile объектов нарушают порядок всех параметров, поэтому требуется позиционная сортировка