[Moscow.pm] конструкторе sql запросов

ksvs ksvs1996 на ymail.com
Вт Дек 17 19:21:35 PST 2013


Сделал бы вот так:

my $sql = posts_sql_view();

my @where = ();

do { push @where, 'ty.id=?'; push @params, $type }           if $type;
do { push @where, 'p.id=?';  push @params, $id; $limit = 0 } if $id;

$sql .= join ' AND ', @where if @where;

$sql .= ' ORDER BY id DESC' unless $id;
$sql .= " LIMIT $limit" if $limit;



On Wednesday, 18 December 2013, 1:14, Nick Knutov <mail на knutov.com> wrote:
 
У меня в коде в некоторых функциях, в зависимости от входных параметров,
конструируются разные sql запросы. Пример:

my $sql = posts_sql_view();
$sql .= ' WHERE ' if $type or $id or $main;
do { $sql .= ' ty.id=? '; push @params, $type;} if $type;
do { $sql .= ' AND p.id=? LIMIT 1'; push @params, $id } if $id;
$sql .= ' ORDER BY id DESC ' unless $id;
do { $sql .= ' LIMIT ? ' ; push @params, $limit } if $limit and not $id;

Мне не нравится как это визуально выглядит. Как бы вы это переписали,
чтобы было понятнее и читабельнее?

ps: в некоторых других случаях можно было бы использовать && вместо
do{}, но не тут.

pps: ORM предлагать и обсуждать не надо. Как минимум потому, что запросы
сложные и сложность/стоимость проверки того, что генерирует ORM
многократно выше любого профита от ORM в данной ситуации.

-- 
Best Regards,
Nick Knutov
http://knutov.com
ICQ: 272873706
Voice: +7-904-84-23-130
-- 
Moscow.pm mailing list
moscow-pm на pm.org | http://moscow.pm.org
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20131218/2e58ba1f/attachment-0001.html>


Подробная информация о списке рассылки Moscow-pm