1. PHP / Говнокод #20491

    +5

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    $db=Yii::$app->db;
    
    if($db->driverName == 'pgsql') {
    $sql ="select a.* from report a inner join code_report b on a.id=b.report_id ";
    $sql.=" inner join code c on b.code_id=c.id  where cast (c.val as integer ) {$znaki[$sign]} $value group by a.id";//pgsql
    }
    if($db->driverName == 'mysql') {
    $sql ="select a.* from report a inner join code_report b on a.id=b.report_id ";
    $sql.=" inner join code c on b.code_id=c.id  where convert(c.val, signed) {$znaki[$sign]} $value group by a.id";//mysql
    }

    Кандидат прислал тестовое задание

    Запостил: heleg, 08 Августа 2016

    Комментарии (26) RSS

    • говно в том, что идет завязка на db, вместо использования ORM?
      Ответить
      • Говно во всем: начиная от SQL injection, заканчивая ифами для выбора БД
        Ответить
        • интересно что наниматель ожидал? на коленке-писаный 30 классов фреймворк?

          формулировка задания то же была бы интересна. если "в минимальное количество символов" и "минимальный оверхед", то тогда сложно кандидата винить.
          Ответить
          • Говно действительно во всём. Меня просто умиляет архинизкий уровень в AR. При чем, не было никаких особых требований по поводу постгрес или чего-то ещё специфического. Я вообще хз, зачем ему это проверять.
            Ответить
            • > AR

              ?

              > При чем, не было никаких особых требований по поводу постгрес или чего-то ещё специфического.

              может решил похвастаться широким спектром знаний.

              меня (как думаю и бормана) больше интересует на кой хер такая загадочная конструкция с `convert(c.val, signed) {$znaki[$sign]} $value`. такое люди от хорошей жизни не пишут.
              Ответить
              • > больше интересует на кой хер такая загадочная конструкция
                Угу.

                > {$znaki[$sign]}
                Это преобразование "less" в "<"? Или операторы тупо пронумерованы?

                > $value
                А вот за это кандидата можно дропать не глядя :) Отмазки в духе "да оно же заэкранировано/профильтровано" не принимаются.
                Ответить
                • > Отмазки в духе "да оно же заэкранировано/профильтровано" не принимаются.

                  но отмазка в духе "я еще не опытный" я надеюсь у тебя прокатит?

                  я всегда негативно относился к бурным наездам на синтакс/этц которое тривиально в код ревью находятся/фиксятся. а вот семантику и глубже критиковать, то что сложнее разглядеть, там все дружно скромно умолкают, потому что все боятся себя идиотами показать.
                  Ответить
                • весь метод (реформатнул)
                  http://paste.ee/p/8uDYY
                  Ответить
                  • $query = new Query;
                    ...
                    $query = Report::findBySql($sql);

                    Ээээ...
                    Ответить
                    • $sql = "select * from report";
                      ...
                      $sql = "select a.* from ... "

                      либо не внимательный кандидат, либо спешил.
                      Ответить
                      • Ну с $sql логика всё-таки прослеживается: если пришли кривые параметры - вываливаем весь список.
                        Ответить
                  • на первый взгляд код/стиль нормальный. наличие хотя бы какого-то стиля как по мне уже плюс.

                    я не знаю как оно на вебе/пыхе, но я часто новичков бью за отсутствие обработки ошибок. как по мне это самая большая проблема у этого кода. (или там какой blanket exception handling есть?)

                    вообщем, не тормози на одном месте: пытайся из всего кода вытянуть все какие возможно качества человека, негативные и позитивные. и смотри какие из негативных может будущий опыт скомпенсировать.
                    Ответить
                  • > $znaki = ['<', '=', '>'];
                    Ой, значочки какие-то интересные...
                    Ответить
              • > AR
                Да, дальше он кидает этот запрос в ar
                $query=Report::findBySql($sql);

                > меня (как думаю и бормана) больше интересует на кой хер такая загадочная конструкция с `convert(c.val, signed) {$znaki[$sign]} $value`.
                У меня к этому даже комментариев нет. Сам в замешательстве
                Ответить
                • Чё такое AR?
                  Ответить
                  • похоже на "Active Record" - http://www.yiiframework.com/doc/guide/1.1/en/database.ar
                    Ответить
                • > Сам в замешательстве

                  вот за это я идиотов и люблю: над ихними выхлопами часто приходится дольше думать чем над перлами гениев. ;-)
                  Ответить
          • а, так это весь проект в 10 строчек?
            тогда вопросов нет
            Ответить
    • > convert(c.val, signed)
      Мускуль не умеет в cast(c.val as integer)?
      Ответить
      • http://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_cast

        гугл говорит что те же яйца: дока на cast() тупо ссылается на доку на convert()
        Ответить
        • Ну автор же зачем-то накопипастил эту хуйню...
          Ответить
          • ... и более того в условии where. может это и оптимируется, но всякая фигня в условиях это потенциальная грабля производительности.
            Ответить
    • Какой багор )))
      Ответить

    Добавить комментарий