[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