Кресты / Говнокод #19555 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
std::string sql = "INSERT INTO digest_test_record (set_id, ref_digest, cand_digest, vdt_cfg_warn, digest_cfg_warn, "
    "ref_duration, ref_cardinality, ref_dispersion, "
    "cand_duration, cand_cardinality, cand_dispersion, "
    "cardinality, difference, red_difference, ext_difference, "
    "inv_cardinality, inv_difference, inv_red_difference, inv_ext_difference,
    "timing, lib_version) SELECT 0, "
    "ROW($1, $2, $3, $4, $5, $6, $7, $8)::digest_info, "
    "ROW($9, $10, $11, $12, $13, $14, $15, $16)::digest_info,"
    "$17, $18, ",
    "$19, $20, $21, "
    "$22, $23, $24, "
    "$25, $26, $27, $28, "
    "$29, $30, $31, $32, "
    "$33, ROW($34, $35, $36, make_date($37, $38, $39), $40)::lib_version_info";

    cn.prepare("insert", sql);

    xact.prepared("insert")
    (ref_digest_info.src_width)(ref_digest_info.src_height)(ref_digest_info.src_fps)(ref_digest_info.src_duration)
        (ref_digest_info.vdt_duration)(ref_digest_info.cardinality)(ref_digest_info.has_flags)(ref_digest_info.src_filename)
    (cand_digest_info.src_width)(cand_digest_info.src_height)(cand_digest_info.src_fps)(cand_digest_info.src_duration)
        (cand_digest_info.vdt_duration)(cand_digest_info.cardinality)(cand_digest_info.has_flags)(cand_digest_info.src_filename)
    (results.vdt_cfg_warn)(results.digest_cfg_warn)
    (results.ref_duration)(results.ref_cardinality)(results.ref_dispersion)
    (results.cand_duration)(results.cand_cardinality)(results.cand_dispersion)
    (results.cardinality)(results.difference)(results.red_difference)(results.ext_difference)
    (results.inv_cardinality)(results.inv_difference)(results.inv_red_difference)(results.inv_ext_difference)
    ((double)timing / CLOCKS_PER_SEC)(li.main_ver)(li.sub_ver)(li.revision)(li.year)(li.month)(li.day)(li.platform).exec();

Мои глаза.... Яркий пример использования нативного pqxx

Запостил: leon_mz leon_mz, (Updated )

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

  • я может чего не понимаю, но они там конкатенацию не забыли?
    Ответить
      • Смежные константные литералы строк. Со всякими std::string уже не поклеит 🙂
        Ответить
        • >константные литералы
          Тавтология.

          Откуда эта говнофича пошла?
          Ответить
            • FOO и BAR нихуя не литералы же. Алсо
              >Откуда эта говнофича пошла?
              Ответить
              • >FOO и BAR нихуя не литералы же.

                Уже сколько сюда не заходил, тыкнул в первый тред и оп... Очередная тупость от сёмы-анонимба.
                Вот поясни, ты специально дебилом прикидываешься, чтоб у всех была myötähäpeä. Или это врождённое?
                Ответить
                • > myötähäpeä
                  Говнокод образовательный. Спасибо.

                  >>FOO и BAR нихуя не литералы же.
                  > Очередная тупость от сёмы-анонимба.
                  Мне кажется, myötähäpeä у посетителей ГК недостаточная какая-то вышла, я бы хотел добавить немного от себя, если позволите.
                  Почему отрицание принадлежности FOO и BAR к классу литералов - проявление тупости? "foo", "bar" - литералы; FOO, BAR - псевдонимы для этих литералов, но после посещения программы препроцессором таковыми становятся, но это уже вроде как не важно, иначе можно было бы сказать, что x в программе int x = 3+2; printf("%d", x); - литерал, т.к. в режиме оптимизации копмилятор преобразует его в число, которое свежей костью положат на стек в миску принтэфу.
                  Ответить
                  • Компилятор вообще этого FOO не увидит, т.е оно не является частью программы на языке C, а x исчезнет только после оптимизации (распространения константы)

                    хз зачем я это сказал
                    Ответить
                    • > Компилятор вообще этого FOO не увидит, т.е оно не является частью программы на языке C
                      Т.е. выходит, что это переменная на другом языке, и вообще никак литералом быть не может, т.е. 3.14дар абсолютно прав.
                      В случае, если это часть языка си, можно было ещё поболтать о преобразованиях в литерал и т.п.
                      Ответить
                      • Я вообще могу грубо заблуждаться, но мне кажется что препроцессинг не входит в компиляцию.
                        Тогда FOO - это переменная на языке препроцессора СИ.
                        И после обработки каждая FOO заменится литералом.

                        хм

                        поэтому FOO является переменной с точки зрения препроцессора, но константой времен компиляции с точки зрения компилятора си. То есть одновременно и тем и тем. Таким образом FOO - квантовая переменная
                        Ответить
                      • > выходит, что это переменная на другом языке, и вообще никак литералом быть не может

                        Никто и не утверждал, что это литералы.

                        Дефекейт привёл пример, когда это действительно нужно - когда нужно склеить строки, поступающие на этапе компиляции (или препроцессинга) из разных источников.

                        Ещё один типичный пример -
                        uintmax_t n = get_size();
                        // PRIxMAX is a macro
                        printf("Size: " PRIxMAX "\n", n);
                        Ответить
                        • Расширяем printf для печати GUID'ов:
                          #define PGUID "{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}"
                          #define EGUID(x) (x).data1, (x).data2, (x).data3, (x).data4[0], (x).data4[1], \
                              (x).data4[2], (x).data4[3], (x).data4[4], (x).data4[5], (x).data4[6], (x).data4[7]
                          printf("GUID is " PGUID "\n", EGUID(guid));
                          Ответить
              • Учил си семен
                Увидел шаблон
                Осилит не смог
                ведь он - пидарок

                тара тара пам! пиу! хх!
                Ответить
              • Повторю вопрос - откуда пошла говнофича неявного склеивания строк "фыв" "ячс"
                и какой петух притащил ее в питон?
                Ответить
                    • Там это вызывает странные баги? (например, что-то вроде жсовской автоматической точки с запятой после return)
                      Ответить
                      • Забытая запятая в списке/кортеже дает слияние строк, притом, что + делает то же самое с точностью до байткода.
                        Ответить
                • > откуда пошла говнофича неявного склеивания строк
                  Тебе же уже столько примеров показали...

                  Ради сишных макросов она запилена в хуй знает какие годы... Препроцессор в конкатенацию литералов не умеет. А иногда нужно (к примеру, вывести имя файла __FILE__, номер строки __LINE__ и твой текст как одну const char *: DEBUG("my text") -> debug_log("test.c" ":" "200" " " "my text"). Поэтому всё что ты можешь сделать из макроса - приставить литералы друг к другу, а конпелятор их потом склеит сам.
                  Ответить
                  • Примеров и откуда пошла
                    это разные вещи, включи моск.
                    Ответить
                • >> и какой петух притащил ее в питон?

                  Принц Гвидон же
                  Ответить
                  • И нахуя? Потому что оно есть в си? Нахуй это не выпилили в тройке? Ок, обратная совместимость, но почему нету статических тестеров, которые на них матерятся?
                    Ответить
                      • Пытались не считается. Где правило для pylint, я спрашиваю?
                        Ответить
                        • > Где правило для pylint
                          Добавь...

                          Любители многострочных регулярок и SQL запросов, видимо, уговорили оставить эту говнофичу и не делать проверок на неё...
                          Ответить
                          • Может, лучше ты?

                            В чем проблема дописать +? но ее блядь даже в качестве опции нету.
                            Ответить
      • > ORM

        Радикальненько. А если используются фишки, специфичные для Pg? Наследования таблиц для шардирования, hstore, индексы по json и прочая радость? Как улучшить код, не переписывая его целиком в XML под ORM с сомнительной выгодой?
        Ответить
        • Тут основная проблема, имхо - хер поймёшь, какое выражение для какого параметра. Может быть попробовать совместить параметр и значение?

          query() + "where foo = " + arg(x.foo)

          Очевидный минус - потеряем подготовленные запросы.
          Ответить
          • > подготовленные запросы
            не знаю как постгрес, надо почитать, но оракл давно уже подобные аргументы сам заменяет на плейсхолдеры под биндящиеся значения
            даже до маразма доходит, когда он переделывает select 1 from ... в select :SYS_B0 from ...

            но да, хорошая либа должна позволять задать аргументы биндов не только тупо по порядку, но и по имени
            Ответить
        • Или, раз уж баксы начали нумеровать, довести идею до конца и доьавить параметр с циферкой в оператор (). И видно, что куда пойдёт и программно сверить можно.
          Ответить
          • Да, с циферкой, как в жабьем jdbc, было бы лучше, с именами - ещё лучше.

            Если принять, что pqxx такой возможности пока нет (http://pqxx.org/devprojects/libpqxx/doc/3.1/html/Reference/a00047.html) мы править не собираемся, то код в топике особо и не улучшишь.

            P.S. Больше всего в pqxx меня колбасит то, что prepare не возвращает объект, а назначает prepared statement-ам строковые имена, которые нужно потом использовать для создания invocation.
            Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8