- 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 - 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
        
        
Тавтология.
Откуда эта говнофича пошла?
>Откуда эта говнофича пошла?
Уже сколько сюда не заходил, тыкнул в первый тред и оп... Очередная тупость от сёмы-анонимба.
Вот поясни, ты специально дебилом прикидываешься, чтоб у всех была myötähäpeä. Или это врождённое?
Говнокод образовательный. Спасибо.
>>FOO и BAR нихуя не литералы же.
> Очередная тупость от сёмы-анонимба.
Мне кажется, myötähäpeä у посетителей ГК недостаточная какая-то вышла, я бы хотел добавить немного от себя, если позволите.
Почему отрицание принадлежности FOO и BAR к классу литералов - проявление тупости? "foo", "bar" - литералы; FOO, BAR - псевдонимы для этих литералов, но после посещения программы препроцессором таковыми становятся, но это уже вроде как не важно, иначе можно было бы сказать, что x в программе int x = 3+2; printf("%d", x); - литерал, т.к. в режиме оптимизации копмилятор преобразует его в число, которое свежей костью положат на стек в миску принтэфу.
хз зачем я это сказал
Т.е. выходит, что это переменная на другом языке, и вообще никак литералом быть не может, т.е. 3.14дар абсолютно прав.
В случае, если это часть языка си, можно было ещё поболтать о преобразованиях в литерал и т.п.
Тогда FOO - это переменная на языке препроцессора СИ.
И после обработки каждая FOO заменится литералом.
хм
поэтому FOO является переменной с точки зрения препроцессора, но константой времен компиляции с точки зрения компилятора си. То есть одновременно и тем и тем. Таким образом FOO - квантовая переменная
Никто и не утверждал, что это литералы.
Дефекейт привёл пример, когда это действительно нужно - когда нужно склеить строки, поступающие на этапе компиляции (или препроцессинга) из разных источников.
Ещё один типичный пример -
Увидел шаблон
Осилит не смог
ведь он - пидарок
тара тара пам! пиу! хх!
и какой петух притащил ее в питон?
Да ну, полезное свойство.
Тебе же уже столько примеров показали...
Ради сишных макросов она запилена в хуй знает какие годы... Препроцессор в конкатенацию литералов не умеет. А иногда нужно (к примеру, вывести имя файла __FILE__, номер строки __LINE__ и твой текст как одну const char *: DEBUG("my text") -> debug_log("test.c" ":" "200" " " "my text"). Поэтому всё что ты можешь сделать из макроса - приставить литералы друг к другу, а конпелятор их потом склеит сам.
это разные вещи, включи моск.
Принц Гвидон же
Да кто ж его знает. Макросов в питоне нет, поэтому смысла в этой фиче ну абсолютно никакого.
З.Ы. Пытались выпилить таки: http://legacy.python.org/dev/peps/pep-3126/
Добавь...
Любители многострочных регулярок и SQL запросов, видимо, уговорили оставить эту говнофичу и не делать проверок на неё...
В чем проблема дописать +? но ее блядь даже в качестве опции нету.
В линте
Радикальненько. А если используются фишки, специфичные для Pg? Наследования таблиц для шардирования, hstore, индексы по json и прочая радость? Как улучшить код, не переписывая его целиком в XML под ORM с сомнительной выгодой?
query() + "where foo = " + arg(x.foo)
Очевидный минус - потеряем подготовленные запросы.
не знаю как постгрес, надо почитать, но оракл давно уже подобные аргументы сам заменяет на плейсхолдеры под биндящиеся значения
даже до маразма доходит, когда он переделывает select 1 from ... в select :SYS_B0 from ...
но да, хорошая либа должна позволять задать аргументы биндов не только тупо по порядку, но и по имени
Если принять, что pqxx такой возможности пока нет (http://pqxx.org/devprojects/libpqxx/doc/3.1/html/Reference/a00047.html) мы править не собираемся, то код в топике особо и не улучшишь.
P.S. Больше всего в pqxx меня колбасит то, что prepare не возвращает объект, а назначает prepared statement-ам строковые имена, которые нужно потом использовать для создания invocation.