<html><head><meta http-equiv="Content-Type" content="text/html charset=koi8-r"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><span class="p" style="font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; line-height: 16px; white-space: pre; background-color: rgb(255, 255, 255); ">(</span><span class="s" style="color: rgb(221, 17, 68); font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; line-height: 16px; white-space: pre; background-color: rgb(255, 255, 255); ">'?'</span><span class="p" style="font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; line-height: 16px; white-space: pre; background-color: rgb(255, 255, 255); ">)</span><span style="font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; line-height: 16px; white-space: pre; background-color: rgb(255, 255, 255); "> </span><span class="n" style="color: rgb(51, 51, 51); font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; line-height: 16px; white-space: pre; background-color: rgb(255, 255, 255); ">x</span><span style="font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; line-height: 16px; white-space: pre; background-color: rgb(255, 255, 255); "> </span><span class="o" style="font-weight: bold; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; line-height: 16px; white-space: pre; background-color: rgb(255, 255, 255); ">~~</span><span class="nv" style="color: teal; font-family: Consolas, 'Liberation Mono', Courier, monospace; font-size: 12px; line-height: 16px; white-space: pre; background-color: rgb(255, 255, 255); ">@$l - изврат, можно просто ('?') x @$l</span><div><font color="#008080" face="Consolas, Liberation Mono, Courier, monospace"><span style="line-height: 16px; white-space: pre;">x сам по себе кастит scalar</span></font></div><div><font color="#008080" face="Consolas, Liberation Mono, Courier, monospace"><span style="line-height: 16px; white-space: pre;"><br></span></font><div><div>On 18.12.2013, at 12:20, Анатолий Гришаев <0body0@<a href="http://rambler.ru">rambler.ru</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">++ за идею.<br>- за прочитать несколько раз, чтобы вьехать.<br>+ за ~~@$limit<br><br>18.12.2013 12:07, vividsnow пишет:<br><blockquote type="cite">как вариант что-то вроде:<br><a href="https://gist.github.com/vividsnow/8d294801959975730fc3">https://gist.github.com/vividsnow/8d294801959975730fc3</a><br>(возможно более специфичное к вашей задаче)<br><br>On 12/18/2013 03:44 AM, Nick Knutov wrote:<br><blockquote type="cite">Не вижу, чем мне это может помочь.<br><br>В данном примере posts_sql_view() возвращает нечто очень большое и<br>сложное, например селект с джойнами по куче таблиц из селекта с джойнами.<br><br>Как минимум, конструировать запрос мне надо начиная с того места, где<br>может быть WHERE. И, например, как тут - наличие LIMIT и его количество<br>зависит от других параметров.<br><br><br>18.12.2013 5:34, vividsnow пишет:<br><blockquote type="cite">https://metacpan.org/pod/SQL::Abstract<br><br><br>2013/12/18 Nick Knutov <mail@knutov.com <mailto:mail@knutov.com>><br><br> У меня в коде в некоторых функциях, в зависимости от входных параметров,<br> конструируются разные sql запросы. Пример:<br><br> my $sql = posts_sql_view();<br> $sql .= ' WHERE ' if $type or $id or $main;<br> do { $sql .= ' ty.id =? '; push @params, $type;} if $type;<br> do { $sql .= ' AND p.id =? LIMIT 1'; push @params, $id<br> } if $id;<br> $sql .= ' ORDER BY id DESC ' unless $id;<br> do { $sql .= ' LIMIT ? ' ; push @params, $limit } if $limit and not $id;<br><br> Мне не нравится как это визуально выглядит. Как бы вы это переписали,<br> чтобы было понятнее и читабельнее?<br><br> ps: в некоторых других случаях можно было бы использовать && вместо<br> do{}, но не тут.<br><br> pps: ORM предлагать и обсуждать не надо. Как минимум потому, что запросы<br> сложные и сложность/стоимость проверки того, что генерирует ORM<br> многократно выше любого профита от ORM в данной ситуации.<br><br> --<br> Best Regards,<br> Nick Knutov<br> http://knutov.com<br> ICQ: 272873706<br> Voice: +7-904-84-23-130 <tel:%2B7-904-84-23-130><br> --<br> Moscow.pm mailing list<br> moscow-pm@pm.org <mailto:moscow-pm@pm.org> | http://moscow.pm.org<br><br><br><br><br></blockquote></blockquote></blockquote><br>-- <br>Moscow.pm mailing list<br><a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org">http://moscow.pm.org</a><br></blockquote></div><br></div></body></html>