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

Nick Knutov mail на knutov.com
Вт Дек 17 19:38:23 PST 2013


Лучше, но плохо спасает от случая селекта из селекта, будет @WHERE2 и
много плохочитаемого кода.


18.12.2013 9:21, ksvs пишет:
> Сделал бы вот так:
> 
> 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 <http://knutov.com/>
> ICQ: 272873706
> Voice: +7-904-84-23-130
> -- 
> Moscow.pm mailing list
> moscow-pm на pm.org <mailto:moscow-pm на pm.org> | http://moscow.pm.org
> <http://moscow.pm.org/>
> 
> 
> 
> 

-- 
Best Regards,
Nick Knutov
http://knutov.com
ICQ: 272873706
Voice: +7-904-84-23-130


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