[Moscow.pm] v2 просьба о ревью модуля DBIx::Struct
Ivan Petrov
i.petro.77.00 на gmail.com
Пт Янв 16 08:52:45 PST 2015
> Очень интересная идея, но вы не используете плейсхолдеры в этом случае?
> И если нет, то что с экранированием?
еще как используем.
<%= перл-код %> использует стандартный плейсхолдер DBI (знак
вопросика) и подставляет возвращенное значение в массив переменных в
это же место.
<%== перл-код %> непосредственная подстановка без экранирований.
все так же как в Mojo только с SQL спецификой.
> А если используете, то как потом собираете массив переменных для
> плейсхолдеров? Если так же как WHERE, то это становится огромным и
> нечитабельным, на мой вкус.
как раз получается очень читабельный шаблон.
есть случаи когда нельзя избежать например аггрегаторного запроса и вы
вынуждены по большой таблице пройти агрегатором.
в этом случае, например раз уж идем по большой таблице, то имеет смысл
накапливать максимум столбиков.
кодогенерация подобных запросов шаблоном - дело простое.
всеми другими способами нечитабельно.
> ps: сколько ни смотрел - не смог пока найти лучше варианта, чем писать
> функцию, как мне подсказали тут несколько месяцев назад, которая будет
> делать @where, @params, а потом собирает запрос целиком:
> do { push @where, 'p.status=?'; push @params, ... } if ...;
> ...
> $sql .= ' WHERE '. join ' AND ', @where if @where;
> $hashref_array = sql_select($sql, @params)
> pps: а у вас есть замеры профита от перевода процесса сборки sql запроса
> на XS? На сколько это имеет смысл?
значит так.
DBIx::DR написан за пол часа на коленке в том смысле - опробовать
парадигму написания SQL-запросов в виде темплейтов.
далее эта парадигма так понравилась что ее стали активно использовать,
а вот сам DBIx::DR не переписывался совсем. так и осталось то что
написано на скорую руку.
там соответственно довольно плохонький парсер темплейтов - раз
там итераторы для совместимости с DBIx::Class - два.
то есть если это развивать то надо приделывать
- кеширование считанных с диска SQL-запросов
- нормальный однопроходный парсер темплейта
- расширить минимальный набор хелперов из коробки (сейчас там толкьо
include, list, hlist: hlist как выяснилось никому не нужен)
- есть некоторые проблемы с вычислением стектрейса падения (если
падает в перловом коде в шаблоне). но эти проблемы и Mojo тоже
решить до конца не смогли, увы. это perl
ну вот однопроходный парсер embedded-perl (сишная часть) написан уже
(и используется в тарантуле в embedded-lua). он очень быстрый,
но оформить XS-модулем руки пока не дошли (с временем плоховато)
Подробная информация о списке рассылки Moscow-pm