2011-12-10 babolo Версия 2.44 Изменения в babolo-libmake - добавлен -lbabolo-libmake для сборки. Поправлены копилефты. Добавлены и поправлены заметки и комментарии. 2010-05-06 babolo Версия 2.43 Результат от pgsql select представлял NULL как ''. Тесты на это у всех 3х баз. Обработка ошибки от pgsql prepare() была неправильной. 2010-04-12 babolo Версия 2.42 В regexp() обоих sqlite была ошибка в размере выделяемой под preg памяти. В getcopy() обоих sqlite была ошибка в вычислении размера буфера под очередную строку COPY. Флаг DEBUG ни на что не влиял, теперь он убран из трансляции и под него помещена замена mallocов на memcheck (и dmalloc под комментарием). В putcopy() sqlite2 BLIN_STATEBODY() теперь отслеживается p. Теперь пропажа conn->vm в обоих sqlite сопровождается сообщением на уровне 5. В finish() sqlite3 в варианте PGOBLIN_PFormed добавлена диагностика на уровне 5. Переименован pgoblin_styles.free в pgoblin_styles.clear для исключения интерференции с dmalloc. В группе тестов 13 всех баз для исключения гонок на результат переставлены действия под /bin/sh -c. В sqlite3 были недостоверные тексты сообщений об ощибках в shurecon(). Форматирование. 2010-01-23 babolo Версия 2.41 Наконец отловлена ошибка в style_pgo0 - не проверялись границы массива оформлений. Проверка результата mular_getix() на NULL со слабым сообщением. Такого быть не может, если pgoblin без ошибок :-)) Но было. 2010-01-20 babolo Версия 2.40 Опция -b от прошлого релиза не работала. Опция -T0 в прошлом релизе не работала. Варнингом меньше. Мелкая опечатка в описании. 2010-01-19 babolo Версия 2.39 Новая команда #getcsv. В tools/regress тесты новой команды. Новый флаг PGOBLIN_COPEND_NOGEN и опция -b. Попытка уменьшить warningи в FreeBSD 8. В README описание ошибки в реализации DELETE ... RETURNING ... в PostgreSQL. Теперь diff из tools/regress не пропадает в /dev/null. 2009-11-17 babolo Версия 2.38 Несовместимость #echo с PGOBLIN_BINPARM в CTL оказалась сложнее, чем представлялось в прошлом релизе. Исправлено, добавлены тесты на это. Слегка сокращен макрос DUMPIOREGS. 2009-11-17 babolo Версия 2.37 У #echo была несовместимость с PGOBLIN_BINPARM в CTL. В cmd_select массовое уточнение сообщений об ошибках. Не собирался с PostgreSQL 7.4. Для сс 2.9X был неприемлемый синтаксис в execute. Ошибка из parser не распространялась. Исправлен комментарий к #clear. 2009-11-05 babolo Версия 2.36 Решение об использовании только первой строки параметров в #select было ошибочным. Исправлено, тесты исправлены и добавлены. В 20й секции тестов был лишний #select с #display - не давал он ничего. Автодокументатор не понимал варианты входного вида данных. Служебные процедуры pgoblin_verify() и pgoblin_htman() стали приватными. Тесты, где SELECT без ORDER BY, зачастую некорректны. В 20й секции тестов расставлены ORDER BY. 2009-11-04 babolo Версия 2.35 В descript поменялось только форматирование и комментарий к #perform. Форматирование поменялось из-за вариаций CTL в #perform. Поиск table() от style_0 стал проще. Теперь при установке флагов в IO, относящихся к Pq, сначала проверяется наличие ->pq, поскольку не все интерфейсы возвращают указатель на результат пустого #select, может, и в других ситуациях. Теперь get() от style_0 возвращает NULL вместо "". Если не удается открыть mife в coercion(), протираются соответствующие флаги. Уточнена диагностика по лишним флагам отсутствующих видов в IO регистрах. 2009-11-04 babolo Команда #perform - первая, воспользовавшаяся давно сделанным механизмом выбора цели в приведении вида данных, принимает Pt или Pq в CTL, если Pq, то исполняет построчно (вместо всего сразу, когда в Pt). Приведение вида Pq в Pt теперь делается процедурой table интерфейса style_0 вместо собственной копии в coercion(). Так же используется table в #perform. В style_0 процедура table приспособлена для приведения вида Pq в Pt в IO. Для одного из использований в #perform добавлена возможность построчного приведения. Изменились интерфейсы pgoblin_jobs и pgoblin_styles - добавлены флаги. Изменился интерфейс pgoblin_dbases - флаги переставлены в самое начало типа. На варианты исполнения #perform добавлены тесты. Комментарии, форматирование, описания, сообщения об ошибках. 2009-11-04 babolo Версия 2.34 Добавлены запросы PGOBLIN_ResMess, PGOBLIN_CleaRes, PGOBLIN_FrMess. PGOBLIN_ResMess используется в #perform. В интерфейсе db изменился первый параметр у notifies() и tarry(), теперь там регистр R_CONN целиком. В интерфейсе db_pgsql изменился тип res с PGconn* на специальный тип pgoblin_res*, там кроме PGconn* ссылка на R_CONN, имя PREPAREd оператора и флаги. При ENOMEM возвращается EX_OSERR вместо EX_UNAVAILABLE. Проверка, что db не NULL в db_pgsql интерфейсе. Форматирование, комментарии, описание в README. 2009-10-28 babolo Версия 2.33 #perform и #select с параметрами в Pq за параметрами лезли в базу из CONN вместо базы от Pq. Новые тесты на эту ситуацию. В #perform и #select не проверялись результаты mallocов val и len. Мелкие исправления в диагностике. 2009-10-27 babolo Версия 2.32 В execute Pq из CTL0 Pt строится теперь при помощи db_0 execute(), в связи с этим pgoblin_db_0_ctl(), делавшая это ранее, изничтожена. Более нет нужды светить pgoblin_db_0_data снаружи от db_0, спрятано. Ошибки в db_0 execute(): ссылка db0->llen занулялась после malloc() и и элементы массива считались с 1 вместо 0. 2009-10-27 babolo Добавлены README и TODO. Изменение интерфейса db: вместо многочисленных free* & clear работает finish() с переключателем. Все (cond, kind) переключатели интерфейса внесены в один enum pgoblin_cmdres. У getcopy() слегка поменялся интерфейс, теперь результат <0 всегда обозначает ошибку, в pgoblin_copyout теперь при ошибке выдается диагноз. Внутримодульные функции db_0 попереименованы покороче, что бы не перекрывались с внешними именами pgoblin_*. За счет приведения типа интерфейсных функций намного аккуратнее стали интерфейсные блоки db модулей. Аккуратнее сделано освобождение памяти в *->finish(). У db_0 появилась новая интерфейсная функция execute(), создает Pq с одной строкой из входных параметров, использована в coercion() для сокрытия внутренностей db_0. db_sqlite2 зацикливалась при execute #selectа с более, чем одной строкой параметров. В db_sqlite3 длинны параметров считаются по иному, чем в db_sqlite2. В db_sqlite2 и db_sqlite3 перенесен наверх finish() из-за использования функций из него выше. Тесты на исполнение с параметрами. Комментарии, форматирование, сообщения. 2009-10-26 babolo Изменение интерфейса db: exec() стал query(), добавлены prepare() и execute(), finish() стал с переключателем и флагами, туда вольются разные *free*() и подобное. Внутримодульные функции попереименованы покороче, что бы не перекрывались с внешними именами pgoblin_*. Теперь #perform и #select понимают Pq на IN, умеют и по отдельности готовить, а потом выполнять, или готовить при выполнении, в зависимости от наличия prepare() в интерфейсе. Отметки MARK_* теперь снабжены ;;, так же там, где по синтаксису не полагалось ;;, поставлены в комментариях. Сообщения, комментарии, форматирование. 2009-10-25 babolo Техническая, но очень массовая замена структурных комментариев, выделяющих операции изменения регистров, на макросы (пока пустые). В cmd_select текстовые константы для эмуляции #binselect вынесены в #define. В db_sqlite2 окончательно изничтожен вариант с использованием собственного оператора COPY. В pgoblin_keycodes() косметические изменения - номер регистра, на который извлекается список keywords, задан константой IOREGFOR вместо числа и отправляестя в команду методом из pgoblin.h вместо pgob.h. Комментарии, форматирование. 2009-10-24 babolo Версия 2.31 Изменился интерфейс db, вместо nfields(), ntuples(), getisnull(), getlength() и последующих всего 3 интерфейсных функции *info() с первым аргументом, выбирающим конкретную функцию. В db_pgsql запихнуто несколько функций через интерфейс с переключателем. Коредампил #job, если за именем job не следовали параметры. В pgoblin_syntax теперь включены массивы перекодировки символов для parser и строки с названиями классов символов (используется при отладке). В pgoblin_syntax теперь включены cmds.lexor и sqlkeywords.lexor. Теперь coercomp() не тормозит преобразование, если нет требования на приведение к виду (когда требование ch пусто). Теперь execute() пользуется pgm->flags вместо options->flags. Теперь требование Pq в 0м IO регистре игнорируется. Теперь execute() при выходе протирает регистры только при установленном в pgm->flags бите PGOBLIN_CLEAR_ONEXIT. Это вновь введенный бит. pgoblin_verify() и pgoblin_htman() перенесены в pgoblin.c, что бы не попали в библиотеку. Из публичных объявнений обе процедуры убраны. Почему то парсер не обнулял созданную pgm перед заполнением. Константа PGO_MAXR теперь определяется из PGOBLIN_SYMREGS. Новая процедура pgoblin_keycodes() вызывается по -T2, сверяет список зарезервированных слов с СУБД. Теперь процедуры, вызываемые по -T возвращают целое, 0 при успехе. В sqlkeywords отсутствовала буква _. Откорректирован список зарезервированных слов с PostgreSQL 8.4. Форматирование. 2009-10-23 babolo Версия 2.30 Определение pgoblin_db_0_data перенесено из db_0 в pgob.h. Появились преобразования ... -> Pt -> Pq в db_0 с 1x1 результатом Pq. Тесты на это. Константа Cc для PGOBLIN_MIFEDES стала Cm. pgoblin_db_0_ctl() умеет сам работать с NULL, потому эта проверка перед вызовом выброшена, теперь IO_CTL при приведении к Pq может быть с 0 колонок. Комментарии, форматирование, мелкое вылизывание. 2009-10-21 babolo Версия 2.29 В pgoblin_echo() была путаница в signedness. В db_sqlite2 и db_sqlite3 унифицированы флаги, управляюющие pgoblin_sqlite*_quote(). Добавлены функции quote_html() и gettimeofday() к sqlite2 и sqlite3. 2009-10-03 babolo Версия 2.28 Теперь #close может также закрывать стиль. Добавлены тесты на очистку стиля #close и #clear. В тесте tools/regress убрана лишняя пустая команда, поскольку в 2.24 была исправлена ошибка "конец текста до конца литерала". 2009-09-28 babolo Версия 2.27 Теперь в команде #clear можно указать OUT регистр, если не 0 и там нет Pm, то будет очищен. Рядом с номером команды на 3м уровне отладки показаны статический и динамический уровни вложенности. Не воспринимались команды в конце текста без разделителя. На это добавлены тесты. Для крайнего случая - команда без параметра впритык к концу в автомате Ci отдублировано в Cj, что бы они были по разную сторону от Cl. 2009-08-03 babolo Версия 2.26 В #copyin в обоих SQLite не вводился \N в последней колонке. Добавлены тесты на это. В SQLite3 не было отмечено действие Cu для отладочной печати. 2009-08-02 babolo Версия 2.25 Повышена толерантность pgoblin к реакции PostgreSQL на пустой запрос в #perform, #select, #copyin и #copyout. Проверка пустых #perform и #select на всех СУБД. #copyin и #copyout надо подумать, сейчас проверки нет. 2009-08-02 babolo Версия 2.24 Долго жившая проблема, когда встречался физический конец текста до логического конца литерала, решена созданием любого количества концов литерала на логическом конце текста - важно для вложенных литералов. Добавлены тесты на это. Время собирать камни - начата унификация тестов для разных СУБД. С этой целью определен макрос REGEX(), который порождает нужные конструкции для регулярных выражений, и макрос DBMS, который им управляет. В тестах для pgsql использовался тот факт, что в #copy{in|out} можно поместить команды, которые в SQLite надо помещать перед этой командой в #perform. В рамках унификации приведено в соответствие с SQLite, осталось по прежнему в тестах, которые только для pgsql. 2009-07-31 babolo Версия 2.23 У обоих SQLite преобразование COPY плохо проверяло входное выражение и не работало на имени таблицы в двойных кавычках. Добавлены тесты на это в интерфейсы всех баз. 2009-07-14 babolo Версия 2.22 Новый тест на pgo0: tools/regress. В pgoblin_echo() аккуратнее отмечен диапазон строк, меняющий регистры. Теперь db_0 создает Pq заданной размерности, в CTL количество строк и количество колонок. PGOBLIN_PROGSIZE увеличен вдвое. В style_pgo0 работают правильно флаги UU и DD. Комментарии и копилефты. 2009-07-11 babolo Теперь db_0 может в #select создавать полноценные Pq (полностью нулевые). При освобождении Pq в db_0 теперь все указатели после free() зануляются. У db_0 появилась процедура finish(). В style_pgo0 PGOBLIN_NTBSZMK теперь автоматически согласована с PGOBLIN_NTBSIZE. В style_pgo0:pgoblin_style_tbl() m == 0 заменен на 0. В db_0:pgoblin_shurecon() излишне велика была отметка об изменении R_CONN. Добавлена отладочная и диагностическая печать. В descript.c только поправлено форматирование без значимых изменений. Добавлены комментарии. 2009-07-09 babolo Версия 2.21 В db_sqlite2 и db_sqlite3 была ошибка в приеме \\ COPY in. В tools/regres* добавлена проверка на эту тему. Символы SYMREGS и BINREGS переименованы в PGOBLIN_SYMREGS и PGOBLIN_BINREGS. В pgoblin_syntax.p[] добавлено поле val. В pgoblin_VVdump() добавлена распечатка этого поля. descript.c наполнен комментариями для автоматической обработки. Новый файл tools/commands.pgoblin для сбора этих комментариев в страницу описания команд. pgoblin.c наполнен комментариями для автоматической обработки. Новый файл tools/invoking.pgoblin для сбора этих комментариев в страницу описания флагов. В tools/Makefile комментарием включено описание формата комментариев для автоматического сбора документации. Макросы DBASE(), JOBE() и STYLS() перенесены из pgoblin.h назад в pgob.h, в связи с чем pgoblin.c перестал быть чистым клиентом - включает pgob.h. Надо будет подумать, как спрятать внутренности. Новый флаг -T для выдачи внутренних структур для документации и процедура pgoblin_htman() для реализации этого. 2009-07-07 babolo Версия 2.20 Интерфейс с SQLite3 был неправильный, что проявилось с SQLite3.6. Ко всем init() и fini() добавлен параметр flags. В декодер ошибок добавлена ошибка SQLITE_LOCKED_SHAREDCACHE. Теперь при открытии SQLite3 базы включается выдача расширенных кодов ошибок. Не проверялись результаты init(), теперь при неудаче выдается сообщение и соответствующий модуль деинициализируется. Результаты fini() не проверяются, как и не проверялись. В FreeBSD 4 нет кода ошибки EDOOFUS, в качестве обхода используется EINVAL. tools/regres для 3х тестов использует режимы standard_conforming_strings=on и backslash_quote=off, с PostgreSQL 7.4 тест не проходит. 2009-07-07 babolo Версия 2.19 В db_sqlite2 добавлены функции quote_literal(), quote_ident(), quote_ident_always(), как и в db_sqlite3. В tools/regres4 тесты добавлены. В db_sqlite3 в строке 874 ex = sqlite3_step(conn->vm); ошибка, похже, в sqlite3 библиотеке. Происходит exit(1) вместо возврата на определенном задании. Надежно. В descript для "job" был помечен IN Pm, зачем, не помню. До выяснения убрал. В job_local:local_exec() были устаревшие следы в ex от бывшего форка там. parser теперь устанавливает errno, где раньше не устанавливал. 2009-05-07 babolo Версия 2.18 #exit не брал код возврата из литерала. Не транслировалось без какой либо из баз. Неправильный комментарий у макроса CATfl. В макрос ifTEST внесен последующий восклицательный знак. В тесты для PosgreSQL добавлена 19 секция по аналогии с тестами для SQLite3. нумерация остальных секций у теста для PosgreSQL сдвинулась и соответствует тестам для SQLite3. Во все тесты добавлена 21 секция с тестами на #exit с ненулевым кодом возврата. 2009-05-06 babolo Версия 2.17 Не вводился литерал пустая строка. Теперь синтаксически допустим литерал NULL. Все команды, кому неприемлемо, ругаются самостоятельно. Теперь #exit понимает код возврата из необязательного литерала, без литерала ведет себя по прежнему (EX_OK). Код команды поменялся. В интерфейс модулей добавлены init() и fini(). Старый init() из JOBS стал open(). В db_sqlite3 добавлены нововведения из 3.6 в случае наличия. Форматирование. 2009-01-09 babolo Версия 2.16 Возможность собирать без db_pgsql, db_sqlite2, db_sqlite3. Вместе с babolo-libmake-2.05 возможность транслировать на amd64. Приспособлена к трансляции в FreeBSD 7. Теперь pgoblin_strsel() и pgoblin_binsel() правильно себя идентифицируют при уровне отладки 4. Подробная диагностика в pgoblin_eval() о состоянии после pgoblin_execute() при ошибке. В pgoblin_eval() не освобождалась память из под программы для pgoblin_execute(). В db_0:pgoblin_shurecon() проверяется наличие ссылки на базу перед использованием. В db_0:pgoblin_query(), db_0:pgoblin_ntuples(), db_0:pgoblin_nfields() проверяется наличи ссылки на результат перед использованием. Для правильной сборки теперь _pgoblin_sqlite3_quote() и __pgoblin_sqlite3_regexp() теперь публичные. Используется инициализация от SQLite 3.6, если есть. В style_pgo0:pgoblin_style_parse() убрано внутреннее определение i, экранирующее внешнее, в обработке Cm в автомате. В style_pgo0 константой ENTITY_LETTERS заменено число, в pgoblin_style_parse(), pgoblin_style_dump() и pgoblin_style_tbl() исправленя связанная с этой константой ошибка off by one. В gcc 3.4.6 (FreeBSD 6, может, и другие) обнаружена ошибка, из-за которой в style_pgo0 в pgoblin_style_dump(), pgoblin_style_get() и dsig() пришлось делать обход. В тестах не хватало команды #wait, из-за чего были гонки и непредсказуемые результаты тестов. 2008-06-25 babolo Версия 2.15 Не использовался регистр базы у #exit и #return. Скорее всего потерялся при больбе с "unexpected EOF on client connection", сейчас это предупреждение опять есть. Скорее всего, полностью его извести, учитывая регистр базы, невозможно, но можно подумать над аккуратным уменьшением. В #begin и #end неправильно при отладке выводился код завершения. У pgsql.exec теперь более подробная диагностика при неработе PQexec(). У квотера sqlite3 добавлены новые возможности, пока не используемые. К диагностическому выводу регистров добавлены флаги, кроме регистров ввода- вывода, где они были и раньше. При установке нового коннекта к базе на него не распространялись отладочные флаги. Форматирование, комментарии. 2008-06-05 babolo Версия 2.14 Несоблюдение области значимости pgoblin_jobreg.host и pgoblin_conn.dbname. В рассчете на будущую библиотеку добавлено по одному подчеркиванию в начало названий к реализациям дополнительных функций SQLite*. Возврат значений флагов PGOBLIN_INT64TIME..PGOBLIN_CLOSECONN на прежнее (как в позапрошлом издании) место и выбор для PGOBLIN_ERROR_SENS* нового. Оформление и прочая вкусовщина. 2008-05-31 babolo Возможность распространения ошибок от детей (управляется PGOBLIN_ERROR_SENSOR) и немедленной реакции на обнаружение ошибки ребенка (управляется PGOBLIN_ERROR_SENSIB). Теперь управляющий текст команды #job после идентификатора модуля разбирается пословно (argc, argv) и обрабатываются аналогично getopt(). В интерфейс модуля работ добавлена процедура init(). Новый флаг PGOBLIN_INITED для отметки процедурой init() модуля работ. В cmds был ненужный инклуд. В интерфейсы sqlite2 и sqlite3 добавлена weak реализация SQL процедуры regexp(). В интерфейс sqlite3 добавлена weak процедура для реализации SQL процедур quote_literal(), quote_ident(), quote_ident_always(). quote_ident() сделана максимально точно по PostgreSQL (для чего из 8.3.1 извлечен полный список токенов, см. sqlkeywords), quote_literal() соответствует стандарту, потому отличается от вариантов PostgreSQL всех сейчас существующих версий, но соответствует sqlite3, в рамках которой и должна применяться. quote_ident_always() отличается от quote_ident() тем, что результат всегда в двойных кавычках, даже если quote_ident() не кавычит. Тесты на добавленное в двух предыдущих пунктах. pgoblin_init() избавился от одного параметра и не инициализирует IO_RG0.mife. Изменилась отладочная распечатка при подготовке номеров регистров команде. По опции -V теперь выдается расшифровка кодов заполнения регистров. Ошибка синтаксиса - если первая строка программы была пустая, то вторая отправлялась в мусор. Добавлены тесты на эту ошибку. Теперь пустая программа считается правильной и не вызывает ошибки. Предупреждение на уровне отладки 2 выдается, однако. Зарезервированы флаги -z и -Z для управления реакциями на ошибку. В запутанном порядке подготовки входных файлов была ошибка - не оформлялся конец списка. Значения флагов PGOBLIN_INT64TIME, PGOBLIN_FLOATTIME, PGOBLIN_NEEDINTIME и PGOBLIN_CLOSECONN променялись в пользу PGOBLIN_ERROR_SENSOR и PGOBLIN_ERROR_SENSIB, которые будут едины по всем видам регистров, как и BLINflagи. Названия видов регистров теперь одной длинны - короткие дополнены пробелами. Форматирование. 2008-05-28 babolo Версия 2.13 Удален за ненадобностью def.m4. Отлажен #getdir с заданием в Pm. Тип pgoblin_job стал pgoblin_jobl. Новая команда #job. Задействовано ограничение параллельности в регистре работ. Тесты на ограничение параллельности и на #getdir с заданием в Pm. Комментарии. Форматирование. 2008-05-26 babolo Из сборки убран флаг -pthread. Немного комментариев к структуре pgoblin_dir. Новые макросы DBASE(), JOBE() и STYLS(), за счет них ликвидированы макросы STYLESET, GLOBALDBSET, LOCALDBSET() и присвояния D(), S(), DBSET. Появился другой вариант #getdir с заданием файлов из IN->pq, не проверено. 2008-05-25 babolo Версия 2.12 Отлажено для FreeBSD 7. 2008-05-25 babolo wait4() менял содержимое status несмотря на то, что запрошенный процесс не имел что отдать в status (FreeBSD 7). Ликвидированы жалобы компилятора на разнознаковость. В первые тесты 13го раздела тестов введена небольшая задержка, что бы увеличить вероятность прохождения теста, рассчитывающего на то, что дети сделают execve() до опроса procfs. Начало 17й группы тестов перестроено таким образом, что бы формальное прохождение теста не зависело от размара каталога. Там же было неправильное имя у тестового каталога, совпадало с именем базы для sqlite*. 2008-05-24 babolo Замена getopt() на аналогичный комплект из babolo-parser. Добавлены флаги -r и -R для парсенья слов среди аргументов. Добавлен бит PGOBLIN_ARGVSTACK, управляющий совместимостью #getarg с предыдущей версией. В usage() теперь изображаются подключенные модули. Отсутсвие break в caseах switch откомментировано в дружественном lint стиле. Из pgoblin_init() удалены закоментаренные ранее куски (ненужние куски инициализации регистров ввода/вывода, работ, стиля. В тестах первым аргументом поставлен -r для парсенья недопарсенных ядром (изменения с FreeBSD 6) параметров. 2008-05-15 babolo Не транслировался на FreeBSD 4 из-за изменений в инклудах. 2008-05-14 babolo Согласована знаковость/беззнаковость у переменных и параметров. Поправлен порядок и состав инклудов. В style_pgo0 несколько левых частей присваивания не понравились GNU C 4. НЕ отработана подлянка по обработке первого параметра из #! скрипта. Уверенности в работоспособности всего вместе на FreeBSD 7 немного - тесты не проходят из-за изменения ожидаемых размеров каталогов и из-за подлянки. 2008-05-13 babolo Версия 2.11 Изменились идентификаторы модулей. Сейчас в id и name одинаковые версии, со временем во внешних модулях разойдутся. Запущена команда #getdir. В pgoblin_connect() изменился разбор строки параметра. В db_pgsql проверяется наличие параметров к pgoblin_connect() и если их нет, то используется PQsetdbLogin() вместо PQconnectdb(). В main() проверяется единственность и правильность параметра -B. Тесты #getdir в regres, regres4, regres8. 2008-05-11 babolo Подключена sqlite3. Сделана пустышка #getdir. В db_sqlite2 убран макрос ERRMSG() и упрощен ERRMSX(). В db_sqlite2 sqle[] был внешним. В db_sqlite2 добавлено множество недостающих проверок. В db_sqlite2 неправильно обрабатывалась conn->semi - мог нахватать мусора. Теперь pgoblin.h может использоваться в C++. Новый тест regres8 для sqlite3, почти полностью повторяет тест для sqlite2. В regres4 добавлено несколько #begin #end для ускорения. Небольшие изменения в сообщениях. Форматирование. 2008-04-26 babolo Версия 2,10 повторно. Была ссылка на удаленный файл README.ru 2008-04-26 babolo Версия 2,10 Просто издание, никаких изменений. 2008-04-21 babolo job_local неправомерно использовал флаг PGOBLIN_FORKED вместо PGOBLIN_TOFORK, они имеют одинаковое значение. Добавлен флаг PGOBLIN_TVFORK на будущее использование vfork(). В execute.c раздумья по поводу vfork(), существенных изменений пока нет. Теперь COPY out принимается и переписывается, используя инструментарий для переписи COPY in, соответственно, при выборе другого варианта COPY in инструменты переписи запроса не прячутся. В regres4 возвратились оригинальные COPY out. В regres убрано несколько пробелов в конце строк - наследие давних времен. 2008-04-21 babolo Танцы вокруг db_sqlite2. Сделаны варианты COPY in с переписыванием, с fork()ом и с rfork()ом. Переписывание рабоотает надежно (возможны ошибки в парсере), но медленно. С rfork()ом работает быстро, но ненадежно, полность разворачивать все thread хозяйство не хочется, а управления потреблением памяти с обоих концов нет, иногда оба процесса мешают друг другу. С fork() надежно, но не работает :-).Не видно содержимое заполненной таблицы там, откуда заполнение вызвано. Управляется трансляция флагами PGOBLIN_SQLITE2_COPYIN_REWRITE и PGOBLIN_SQLITE2_COPYIN_THREAD в начале db_sqlite2.c. Оставлено в состоянии "надежно работает, то есть с переписью. 2008-04-20 babolo Манипуляции с db_sqlite2 в попытках запустить COPY, замена полноценного форка на rfork_thread() для сохранения памяти. Неудачно. 2008-04-19 babolo Про ширину последней, пустофй записи я погорячился, есть она. Обход через pgoblin_db_conn.ncol ликвидировал. Эксперимент с _exit() вместо exit() в COPY шт, похоже, неудачный. 2008-04-19 babolo В cmd_select добавлен вывод возвращенного числа записей при отладке. В regres4 возвращены тесты на #strselect. Все остальные изменения только в db_sqlite2: В флагах pgoblin_db_conn поменялись названия битов, ранее определявших состояние при COPY out, сейчас онри так же управляют потоковым SELECT. В pgoblin_db_conn добавлен ncol для помнить ширину предыдущей записи, поскольку при получении последней пустой записи sqlite2 ширину не предоставляет. Но если ни одной записи в потоке получено не будет, то увы, ширина будет 0 - брать негде. Логика получения следующей записи вынесена из pgoblin_getcopy() в отдельную get() с тем, что бы ее же использовать в новой pgoblin_getstream(). Теперь флаги pgoblin_db_conn очищаются по окончании управляемых ими операций. pgoblin_ntuples(), pgoblin_nfields(), pgoblin_isnull() теперь правильно работают с NULLевым результатом, pgoblin_length() и pgoblin_value() правильны были и до того (но не работали из-за ошибки в pgoblin_isnull(). Исправлен объявленный тип параметра pgoblin_finish(), из-за чего избавились от приведений внутри. В результате db_sqlite2 ПОЧТИ работает. Почти - из-за дурацкого COPY. 2008-04-19 babolo #strselect и #binselect используют интерфейс потокового запроса. #strselect и #binselect стали одной процедурой в cmd_select. В db_pgsql интерфейс потокового запроса реализован. Теперь к pgoblin_dbases.exec можно обращаться с NULLевым res, реализовано в db_pgsql и db_sqlite2. В db_sqlite2 поменялась pgoblin_db_data, теперь там возможен как вариант с mular_descriptor, так и с простым массивом. Теперь все знания о том, где какой интерфейс СУБД, есть ли база по по умолчанию и распространение базы по всем регистрам делаются только в pgoblin.c, до некоторой степени библиотеке все равно, только pgoblin_init() должен знать про размещение интерфейса db_pgsql. Флаги СУБД теперь при очистре регистра базы не распространяются, за исключением выбора СУБД, если задано в флагах. По этому поводу новый флаг в pgoblin_main - PGOBLIN_DEFAULDB. Определения номеров интерфейсов СУБД перенесено из pgob.h в pgoblin.h из-за использования в pgoblin.c - там не должно быть внутренностей. 2008-04-18 babolo Регистрация транзакции в pgoblin_begin() и pgoblin_end() сделана точнее. pgoblin_strsel() и pgoblin_binsel() используют запуск и остановку потока от будущего потокового интерфейса. В db_pgsql реализована используемая часть потокового интерфейса. На прохождении тестов не отразилось. 2008-04-17 babolo В интерфейсе db_ перестановки и объединение outcopy() и endcopy() в общую процедуру endstream(). freewarn() ликвидирована за ненадобностью. Константы PGOBLIN_CR_SSEL и PGOBLIN_CR_BSEL к универсализации интерфейса. В db_pgsql pgoblin_query() была ошибка с использованием miss[][]. 2008-04-17 babolo Тесты sqlite2 в отдельном файле tools/regres4. Новый флаг -B, которым можно заменить СУБД по умолчанию. Из интерфейса db_ выброшена процедура warn. Из pgoblin_init() убрано присвоение нулей тому, что и так 0 после bzero(). pgoblin_init() теперь не определяет СУБД по умолчанию, она прописывается в main(). Завершен COPY интерфейс, db_pgsql и db_sqlite2 с ним работают. В db_sqlite2 поменялся тип pgoblin_db_data, теперь в нем для cell используется mular_descriptor вместо массива ссылок. pgoblin_shurecon() теперь открывает db :memory:, исли имя не задано. В процедуры db_sqlite2 добавлены проверки наличия оттранслированной виртуальной машины. В процедуры db_sqlite2 добавлены закрытия виртуальной машины при ошибках. sqlite_get_table() оказалась крайне неудобной в использовании, вместо нее цикл sqlite_compile()+sqlite_step()+sqlite_finalize() в pgoblin_query() при cond==PGOBLIN_CR_TUPL. Была ошибка в использовании pipe[] после форка в pgoblin_query() при cond==PGOBLIN_CR_IN. Была ошибка в продвижении по запросу в pgoblin_query() при cond==PGOBLIN_CR_IN. Единая точка выхода у форкнутого в pgoblin_query() при cond==PGOBLIN_CR_IN процесса. pgoblin_query() при cond==PGOBLIN_CR_IN ставил неправильный флаг в conn. В pgoblin_getcopy() проверяются условия досрочного окончания COPY. В выводе COPY значений не было замены NULL на \N. Завершена pgoblin_putcopy() в db_sqlite2. pgoblin_endcopy() начата и окончена. Тесты с pgsql проходят, с sqlite2 еще не все. 2008-04-16 babolo Поменялись типы первых параметров putcopy() и endcopy() DB интерфейса, вместо pgoblin_conn.conn теперь pgoblin_conn. В cmd_copy.c форматирование и визуальная оптимизация pgoblin_copyin(). В db_0.c вместо нереализованных функций стоит процедура, выдающая ошибку. В db_pgsql.c в связи со сменой интерфейса новая процедура pgoblin_putcopy(). В db_sqlite2.c форматирование и визуальная оптимизация, новые макросы ERRMSG() и ERRMSX(). В db_sqlite2.c в pgoblin_query() дописана, но не проверена веточка PGOBLIN_CR_IN. Ошибка вида !X&Y -> !(X&Y). В db_sqlite2.c в pgoblin_getcopy() появилась проверка флага PGOBLIN_COPYOUT. Начата pgoblin_putcopy() в db_sqlite2.c. Форматирование. 2008-04-16 babolo COPY out в sqlite2 выглядит работающим. Форматирование. 2008-04-16 babolo Добавлены тесты на !PGOBLIN_OLDSTYLE. Убраны варианты из определения pgoblin_io.pq. В pgoblin_dbases добавлен outcopy и изменен тип первого параметра getcopy, вместо pgoblin_conn.conn теперь pgoblin_conn. В pgoblin.c возвращено обнуление pgm. В pgoblin.c теперь инициализируются BLIN флаги регистров согласно флагам pgoblin_main.flags. Из pgoblin_init() инициализация предварительным значением BLIN флагов убрана. pgoblin_copyout() возможно стал базонезависимым, пока проверена работа только с pgsql. В db_pgsql.c pgoblin_query() стал правильнее реагировать на грубые ошибки в PQexec(). В db_pgsql.c добавлена процедура pgoblin_outcopy() для реализации независимого COPY интерфейса. В db_sqlite2.c добавлены перекодировки ошибок SQLITE_* в errno.h ошибки. В db_sqlite2.c добавлена процедура перекодировки SQLITE_* ошибок в текст. Продолжена, но не окончена реализация COPY машины sqlite2. 2008-04-15 babolo В shurecon() и exec() вместо первых двух параметров - один регистр базы. Отмечены пропущенные ранее изменения регистров базы. Для реализации COPY изменен pgoblin_conn.conn - теперь он содержит не sqlite*, а pgoblin_db_conn*, в котором есть sqlite* и еще информация для связи отдельных вызовов виртуальной машины. В sqlite2 переделана pgoblin_query() так, что в зависимости от cond исполняются разные ветви. В sqlite2 не используется таблица miss[][]. Начата реализация pgoblin_getcopy() в sqlite2. 2008-04-15 babolo Подключена библиотека sqlite2, некоторые команды выглядят работающими, #copyin и #copyout не реализованы. Реализована нулевая DBMS. Хак в #exec с Pq в CTL убран, теперь Pq из CTL системно конвертируется в нулевую DBMS. Отмаркированы изменения регистров job и style. Долгожданная команда #connect. Макрос PQEXEC перенесен из pgob.h в db_pgsql.c, поскольку нигде более он не нужен. В db_pgsql.c переименование pgsql_* в pgoblin_* для унификации. Теперь для PostgreSQL соединений, определенных в #connect, используется PQconnectdb(). Теперь BLIN флаги распространяются по всем производным флагам. Изменен макрос DUMPIOREGS, теперь он не повторяет регистры и немножко выдает про R_CONN. Немного оптимизирован основной цикл интерпретатора, теперь он не интерпретирует то, что отправлено в Pq из CTL. Теперь pgoblin_conn.conn void* без вариантов. Из интерфейса с DBMS убраны qexec(), mess(), freemess() за ненадобностью. Форматирование и прочие мелочи. 2008-04-08 babolo Формально зависимость всего, кроме модуля db_pgsql, от PostgreSQL устранена. фактически надо будет еще удалить макрос PQEXEC и текущая реализация #copyin и #copyout не полезет в другие СУБД. Под изоляцию от PostgreSQL существенно расширен состав интерфейсных функций. Введены собственные коды результатов. В execute теперь не переключается макрос DBSET, а используется LOCALDBSET в дополнение. Вместо макроса PQEXEC везде, кроме модуля db_pgsql, используется интерфейсная функция. В db_pgsql tarry() переименована в pgsql_tarry(), а pgoblin_shurecon() в pgsql_shurecon(). Стала аккуратнее обработка SQL ошибок, теперь каждая ошибка должна быть заметной (кроме пока #copy*). В cmd_trans теперь не переключается макрос DBSET, а используется LOCALDBSET в дополнение. 2008-04-08 babolo В тесте #listen были гонки, из-за чего мог теряться NOTIFY. Дополнен интерфейс job, бинарная несовместимость. Теперь необходимость форкаться отдается интерфейсом по запросу, появилась возможность реализации #fork модулем, в интерфейсе появилась процедура close. Дополнен интерфейс db, бинарная несовместимость. Туда унесено ожидание события на соединении с базой и notify. Теперь pgoblin_shurecon() не используется иначе, чем через интерфейс с модулем, для чего теперь при очистке регистров баз туда вносится принудительно тип модуля интерфейса pgsql. pgoblin_listen() реализован базонезависимо, используя измение в интерфейсе базы. Форкнутые ветви неаккуратно обращались со своим каналом к базе, не не закрывали его перед завершением. Заполнение регистров баз стилистически выделено. В pgoblin_listen() добавлены недостающие сообщения об ошибках. В pgoblin_listen() перед ожиданием notify теперь вначале проверяется, нет ли готового сообщения, побогает при небольших нарушениях в порядке следования операций с базой по отсылке и проверке сообщений. 2008-04-06 babolo Начато введение нового вида плагина и начат job_local. Логика управления процессами и трубами из реализаторов команд #exec и #fork убрана и теперь делается в общем цикле execute. Флаг PGOBLIN_FORKED теперь применяется и для описания команд в pgoblin_syntax.a[].flags. Бинарная несовместимость (а никто и не обещал пока) - некоторые флаги в pgoblin_conn.flags смещены влево. Есть и д ругие бинарные несовместимости (ниже). В связи с тем, что регистр работ теперь - это не только mular_descriptor, введен отдельный тип для регистров работ - pgoblin_jobreg. В pgoblin_exenv добавлен sequen, который считает проходы по пока единственной мультилицируемой команды #exec. Удален PGO_CCPY и уменьшен PGO_MAXR. Поскольку сильная связь исполнителей команд #exec и #fork с общим циклом execute утеряна, процедуры вынесены в cmd_trans. Из pgoblin_wait() и pgoblin_exec() начат вынос модулезависимого содержимого в модуль job_local. Процедура internal_fork() более не нужна. Теперь заполняются все регистры, если в команде не указан явно, то ставится 0й регистр. Что бы обойти факт одновременного использования командой #getjob двух регистров работ, регистр, откуда происходит вывод, в descript отмечен в pgoblin_syntax.a[].flags, но не отмечен в pgoblin_syntax.a[].ch. Регистры теперь заполняются так: ссылки в соответствии с описанием, а номера регистров в соответствии с командой, если соответствующий регистр разрешен в pgoblin_syntax.a[].flags. Тесты не менялись, pgoblin тестам соответствует. 2008-03-30 babolo Версия 2.09 Команда #style могла найти стиль с коротким именем, если оно совпадало с началом заданного в команде имени стиля. В tools/regres тест на этот случай. 2008-03-30 babolo Версия 2.08 При употреблении последовательностей констант на один текстовый литерал в стиле pgo0 парсер укладывал результат куда ни попадя. В парсере pgo0 добавлена отладочная печать на детали операций Cr, Cm, Ck. Операция Ck переписана для лучше выглядеть. 2008-03-30 babolo Версия 2.07 Стиль pgo0 неправильно обрабатывал таблицы из-под #strselect и #binselect. В частности, пытался обратиться за пределы предоставленного pq и не обрабатывал -H0. Поправлены мелкие ошибки парсера стиля pgo0, поведение стало много более устойчивым и предсказуемым. В выводе таблиц flow теперь собирается сразу сдвинутым вместо сдвига собранного. В выводе таблиц на 3ем уровне отладки добавился вывод параметров каждого захода на вывод таблицы или поданной части ее. В tools/regres масса новых скучных тестов на обнаруженные несоответствия. 2008-03-29 babolo Версия 2.06 Забыл номер версии поменять в Makefile. 2008-03-29 babolo Версия 2.06 Была потеряна нулевая (пустая) команда. Восстановлена, добавлены тесты на эту тему. Нумерация строк изменилась, поскольку ошибка обнаруживается на следующей строке. 2008-03-29 babolo Версия 2.05 В стиле pgo0 отлажены свободные константы - ввод, выдача, дамп. В дампе стиля pgo0 добавлен multilar дамп компонентов стиля. Команды #echo, #file и #cat теперь могут пользоваться идентификаторами констант через стиль. Добавлен тест для #echo, #file и #cat со стилем. В тест добавлен copyleft. 2008-03-28 babolo Версия 2.04 В позапредыдущем логе ошибочно указано, что static int sout() удалена. На самом деле она осталась с некоторым упрощением, но без изменения функционирования. Не все проверено, но тут уже много проверенного нужного, потому издается. Стили без флагов работают, из флагов проверены U и D, но не UU или DD. Реализацию флагов конечным автоматом делать не стал. Выделены варианты с 0ым количеством строк и колонок и выписаны отдельно от случая с непустой таблицей. Вариант количеством колонок 0 не проверен. Тесты на флаги U и D. 2008-03-28 babolo Теперь процедуре вывода таблицы стиля на вход подается регистр ввода целиком вместо pq и флагов базы в розницу. 2008-03-27 babolo Вспомнить бы... Желание ликвидировать #cat отпало. Далее все по pgo0 стилю. Автомат вводит флаги стиля - Cf. Теперь правильно обрабатывается пустой литерал - важно при наложении стилей. В связи с уточнением сообщения "Repeat ... in line ..." вся логика спрятана под условие отладки. Система флагов стала изощреннее. Стала ненужной static int sout(). dsig() теперь учитывает флаги P_T и P_C. Готовимся к реализации оформления нулевых таблиц конечным автоматом из-за его сложности. Тест на вышеперечисленное - нулевое оформление еще не работает правильно! 2008-02-17 babolo Команда #style дополняет стиль, а не заменяет. Новая команда #clear для обнуления регистров работ и стиля. Описания команд, работающих с регистрами работ и стиля, поменялись вместе с изменением семантики описания относительно этих регистров. Номер команды #untrap изменился, что бы освободить номер для #clear. В execute использован макрос ERROUT(). Теперь не рассчитываем, что в wri IO регистра будет что-то типа mife_writ(), считающего длинну самостоятельно, когда задан 0 и в стиле 0 (предыдущее такое изменение относилось только к стилю pgo0). Проверки функциями стиля подаваемого на вход стиля. Парсер pgo0 теперь обрабатывает и устанавливает флаги стиля. 2008-02-17 babolo Теперь U и D выводятся только при наличии хоть чего либо ненулевого в строке. Теперь не рассчитываем, что в wri IO регистра будет что-то типа mife_writ(), считающего длинну самостоятельно, когда задан 0. 2008-02-17 babolo Все то же самое, но style_pgo0 pgoblin_style_tbl() слегка раскрыты макросы с тем, что бы внедрить очередное изменение следующим коммитом. 2008-02-16 babolo Поменялся приоритет записей литералов в стиле - из нескольких с одинаковыми именами теперь приоритетнее последний литерал. Литералы L и R теперь выводятся только если содержимое ячейки, оформленной этими литералами , не NULL. 2008-02-16 babolo Продолжение изоляции СУБД. Интерфейс с СУБД модулями расширен на функции shurecon, exec, finish, freemem. pgoblin_shurecon() перенесен целиком в СУБД модуль pgsql. Для обращения к СУБД интерфейсу используется макрос DBSET, в разных контекстах разный. Есть нерешенные проблемы, но тест, как обычно, проходит. 2008-02-14 babolo Теперь #eval берет программу из CTL. На эту возможность - новые тесты. Недоделанное выделение изменений IO регистров. 2008-02-14 babolo Выделены все места изменений IO регистров для удобства контроля за правильностью ведения регистров. В процессе поправлены мелкие ошибки. Принято четкое решение о ведении text и binary text, описание на сайте. Для pgoblin_parser() входом теперь текст вместо mife. pgoblin_style() теперь отмечает для себя неудаляемость текста, из которого парстися стиль. Место корявое, утечки памяти. pgoblin_eval() теперь берет Pt вместо Pm, это позволит его перенести в CTL. В dump_ioreg() сделана менее экономичная, но более безошибочнаяя печать флагов регистра. В dump_ioreg() исправлен формат вывода бинарного текста. В propush() исправлен вывод наличия path на входе. В coercion() преобразование pq в текст сделано через подключаемый интерфейс. В coercion() преобразование Pt в Pm сделано понятнее. В pgoblin_parser() на входной проверке исправлена кучка взаимно маскирующих ошибок. В pgoblin.c popin() сделан прозрачнее для проверок. 2008-02-13 babolo Стиль таблиц тест прошел. Парсер pgo0 не принимал последнюю область перед следующим стилем. В pgoblin_style_dump() добавлена распечатка отметок об используемых областях - по 76 первых. В pgoblin_style_tbl() добавлена отладочная печать, детализирующая выбор литерала для области. Установлен признак комментария -- для m4 в тесте. В тесте исправлено название области +l1 -> +L1. В тесте пришлось аккуратно подобрать расстановку кавычек. 2008-02-13 babolo В style_pgo0 изменения косм етические - убрал лишние скобки. Тест стиля, пока не удовлетворяет. 2008-02-13 babolo Стиль готов к тестированию. Только форматирование поменялось в cmd_select. Сразу забыл добавить style в cmds.lexor. Теперь интерфейсные функции стилей принимают стиль, упакованный в pgoblin_styreg * вместо собственной структуры (была описана void *). В интерфейс со стилями добавлена функция dump. В интерфейсе со стилями у функции table выброшен параметр options. Заполняется NULLями dbasetable и styletable. В execute: - распространяются BLIN флаги на 0й регистр стиля - закрывается стиль, если он был на выходном регистре стиля - в разгрузке pq самописные циклы заменены на обращение к 0му стилю - была ошибка в освобождении регистра стиля на выходе из execute. В parser ошибка при сдвиге с расширением с 32 до 64 битов в сборке регистров команды и косметическая замена идентификатора r_pp на rs. В pgoblin_style() - косметическая замена идентификатора ilen на rs - неправильный список состояний для отладчика - вспомогательная переменная d (используется в сравнении имени стиля) была ссылкой, стала индексом. - запрещено менять 0й регистр стиля - чуть информативнее отладчик - было неаккуратное сравнение строк при поиске интерпретатора стиля по имени - оканчивался с ошибкой "неправильное имя интерпретатора" даже когда имя находилось - поиск по имени стиля всегда оканчивался неуспехом В стиле pgo0 отлажен парсер табличных оформлений. В стиле pgo0 затычка интерфейсной функции free дописана. В стиле pgo0 отлажена функция table. 2008-02-12 babolo Переопределена структура pgo0_style таким образом, что бы H, U, ... были не отдельными сущностями, а элементами массива, для удобства передачи. В dsig была ошибка - не применялся вариант по умолчанию. 2008-02-12 babolo Полуфабрикат нового, но все старые тесты проходит. Добавлена новая команда #style, не отлажена. Название структуры pgoblin_style заменено на pgoblin_styreg из-за пересечения имен с реализующей #style В struct pgoblin_styles поменялся тип функции parser. Заготовка для этой функции в стиле pgo0, трансляции не мешает. В parser символ Lp заменен на Ls - украшательств (унификация?). Там же применен макрос ERROUT и выравнены комментарии. Замена литерала 0 на константу L0 в классивикаторе parser. Значимых изменений в parser нет. 2008-02-11 babolo Переведены на использование стилей #strselect и #binselect. В #display, #strselect и #binselect используется ex вместо e для результата функции (унификация). В #strselect и #binselect используется макрос ERROUT вместо выхода в середине функции по ошибке. Дополнена еще одной функцией pgoblin_styles. Регистр стиля 0 инициализируется 0ым стилем - для общности подхода. Обработка flagc в io регистре. Новый макрос R_STY0. В style_pgo0 введены флаги HFIRST .. VLAST для управления обработкой нулевых размеров таблиц. Команды #strselect и #binselect стали в результате похожими до смешения, возможно, к объединению. Форматирование и комментарии. 2008-02-11 babolo Для удобства навигации по pgoblin.h расставил комментарии. 2008-02-11 babolo Сделан нулевой стиль, он используется при выдаче с нулевым регистром стиля вместо отдельной логики на этот случай. В io регистр добавлен flagc - копия flags от conn регистра. Ошибка в описании типа pgoblin_styles.parser. Ошибка в определении R_STYLE. Определен фиксированный номер типа DB для PostgreSQL, может, только на время перехода. Теперь pgoblin_styles.table возвращает размер выданного текста при успехе и отрицательное число при ошибке. Теперь #display берет тип базы из io регистра из flagc. 2008-02-10 babolo Начата поддержка стилей и множественности баз, инфраструктура стилей более-менее сформирована, базы придется еще переделывать из единственной. Поддержка престилей отовсюду ликвидирована, поддержка стилей есть пока только в #display. Новые макросы R_STYLE и STYLESET. В pgoblin.h теперь введена блокировка повторного включения. 2008-02-10 babolo Модифицирован pgoblin.h таким образом, что бы для более-менее корректной работы multilar.h и libpq-fe.h включать перед ним было необязательно. Эти инклуды убраны из тех файлов, где они не необходимы. Перенесена pgoblin_getjob() из cmd_file в cmd_trans для оптимизации инклудов. В структуру pgoblin_syntax сключены указатели на массивы методов доступа к базам и стилей. Константы SYMREGS, BINREGS и PGOBLIN_max заменены на обращения к описанию синтаксиса, где уместно. 2008-02-09 babolo Неправильный тип у pgoblin_io.offset. Вместо эвфемизмов напрямую используются mife_descriptor и смещение из регистров, где разумно. 2008-02-09 babolo Теперь #eval берет программу из входного регистра. Из регистра управления Pm брать так, что бы можно было задавать программу для #eval в тексте программы, сложно очень и запутанно получается, поскольку в 0 IO регистре Pm уже присутствует независимо. Добавлен дамп по -V программы, странслированной #eval. Тесты на #eval. 2008-02-09 babolo В связи с тем, что состояний больше, чем классов символов, таблица автомата парсера перевернута. Была ошибка парсера - не хватало состояний из-за ввода ##. Добавлен тест на обнаруженную ошибку. Добавлено сообщений и комментариев на нехватку сообщений. Есть еще неработающий pgoblin_eval(). 2008-02-09 babolo Команда #include признана неперспективной, вместо нее будет #eval. Программы, реализующие #return и #exit, из-за предыдущих преобразований потеряли связь с внутренней кухней pgoblin_execute() и вынесены в cmd_trans. 2008-02-09 babolo Новая команда #untrap. Возможность распечатки по флагу -VV структуры pgoblin, описывающей команды. Уточнена диагностика в парсере. Ликвидированы ставшие ненужными после предыдущего коммита флаг PGOBLIN_INTRAP и поле rtrap в struct pgoblin_exenv. 2008-02-09 babolo Теперь trap делается через новую среду исполнения, в связи с чем команда pgoblin_return() отдала очистку в непосредственно pgoblin_execute(). Для аккуратного отслеживания вложенных трапов кроме динамической цепочки вызовов отслеживается цепочка поиска трапов (названа "статической", что не совсем точно). В парсере ошибочно инициализировалась программа, если была передана. В pgoblin_prog добавлена ссылка на отладочную информации, пока не используется, для будущих расширений с сохранением бинарной совместимости. 2008-02-09 babolo В связи с отсутствием бинарной совместимости shared библиотека лишняя. Разделена среда исполнения и среда интерпретатора :-), последствия будут позже в виде произвольной глубины вложения программ. Пока только предварительные преобразования. Исправлены комментарии по поводу битов exeflags. 2008-02-08 babolo Удален каталог doc за ненадобностью. Устарел очень и есть http://www.babolo.ru/pgoblin/ Уточнена идентификация версии программы. 2008-02-08 babolo Теперь ## в начале строки не оканчивает литерал. Из литерала в таких строках отрезается первый # в строке - это способ помещать в литерал # в первой позиции строки. Теперь пустые команды после игнорируемых тоже игнорируются. Счет строк для сообщений об ошибках был с 0, сейчас с 1. Команда в парсере проверялась на соответствие диапазону команд после использования ее в качестве индекса к описанию команд. Новый тест на синтаксический разбор. 2008-01-22 babolo Версия 2.03 У #close добавлена возможность закрывать соединение с базой на ненулевом соединении с базой, при этом сбрасывается флаг "не закрывать при выходе", что дает возможность выбирать регистры у детей, которые будут закрываться при выходе автоматом. Команды #return и #exit имеют новый параметр - регистр соединения с базой, Если не 0, то закрывается только указанное соединение, а не все. Добавлен новый флаг -w для указания паузы ребенку перед началом выполнения, сделано для удобства отладки. При ошибке открытия выходного файла в propush теперь сообщается ошибка. Не соблюдена бинарная совместимость (она пока и не объявлялась) в struct pgoblin_main.flags. Форматирование, чуть добавлено сообщений. 2007-12-14 babolo Версия 2.02 Таблица score[][] теперь учитывает mife, поскольку его надо иногда закрывать, когда появляется другой пероисточник. Остальное - мелкие вылизывания. cleareg() теперь допускает пустое обращение, используется в propush(), что бы убрать логику из вызова cleareg(). Таблица score[][] пересортирована соответственно порядку битов, обозначающих соответствующие сущности в регистре ввода-вывода. Может, со временем использую для упрощения procomp(). Диагностика в propush() называла text path. Диагностика в propush() отправляла в coercion(). В propush() при Cf в r->flags ставился PGOBLIN_OUTSET. Явно специально, но зачем? Убрал. В 0й регистр ввода вывода иногда ставится text из литерала, который не удаляется в конце цикла интерпретатора. Несущественно, но некрасиво. Поставил уборку. 2007-12-11 babolo Версия 2.01 Предыдущий коммит сегодня сорвался без комментариев, потому здесь описаны оба коммита. У команды getstr отмечено использование управляющего регистра ввода-вывода, пока не используется, на будущее. dump_ioreg() теперь пытается показать text, помеченный binary. Теперь ошибка в основном цикле интерпретатора не только завершает интерпретацию, но и отмечается в результате у pgoblin_execute(). В pgoblin_parser() добавлена еще одна ошибка - "неизвестная команда". В pgoblin_parser() некоторые ошибки вызывали досрочное завершение процесса вместо return() с ошибкой. 2007-12-05 babolo Версия 2.00 Некоторые #get* необоснованно оканчивались exit() вместо return(). Введен новый флаг PGOBLIN_CLOSECONN для pgoblin_conn.flags. Процесс, получивший открытые соединения к базе по наследству, очищает у всех полученных PGOBLIN_CLOSECONN, и устанавливает этот флаг только у самостоятельно установленных соединений. При exit соединения с этим флагом прекращаются. Дети, если пользуются, должны ко времени окончания предка окончить использование унаследованных соединений. В dump_ioreg() не изображался последний флаг. Слегка поменялся порядок вывода флагов. iorassert() теперь на первом уровне отладки не сообщает о неотмеченных сущностях в регистрах ввода/вывода, поскольку появление их там нормально. Теперь основной цикл интерпретатора всегда, в том числе по ошибкам, освобождает по окончанию регистры. На втором уровне отладки появилось предупреждение об использовании одного регистра для ввода и вывода в одной команде. Изменилось условие включения образца в макрорасширение SELECTEST(). Добавлены тесты на #file вывод, #cat вывод и несколько комплексных тестов. Совместимость с pgoblin 0 лучше, чем была у pgoblin 1 (#select без #display), совместимость с pgoblin 1 должна быть практически полная (на текстах для pgoblin 1), разница в #fork возникает только от другого использования, не существующего в pgoblin 1. Впрочем, тестов для pgoblin 1 нет, совместимость предположительная. 2007-12-04 babolo В dump_ioreg() усовершенствована выдача флагов регистра. В iorassert() вывод итогов по регистрам стал устойчивее при параллельном выполнении нескольких процессов. pgoblin_inx() теперь выдает только отрицательные коды ошибки. pgoblin_outx() теперь готов выдавать коды ошибок. internal_fork() теперь выдает результат форка или отрицательный код ошибки. Обработка execve() из него вынесена в pgoblin_exec(), так как теперь он может отличить экземпляры себя форкнутый и форкнувший. Реакция на ошибки в pgoblin_fork() изменилась с учетом того, что internal_fork() выдает кроме ошибок результат форка. Новые тесты на #fork с нулевыми и не нулевыми регистрами, #listen, #pipe, #close. Мелкое вылизывание. 2007-12-03 babolo Не обрабатывался exec из нулевого регистра из-за того, что в схеме приведения типов параметров пропущен этот вариант и из-за того, что интерпретатор не пропускал параметры свлед за #exec. Новые тесты на #exec из нулевого регистра, #wait и #getjob из нулевого регистра и на #display (из ненулевого :-). 2007-12-02 babolo Все таки #include будет обязательным перед pgoblin.h при использовании библиотеки pgoblin - так надежнее, меньше ошибок согласования типов. В pgoblin_r теперь вместо ссылки на mular_descriptor, который содержится в регистре job, и ссылки на pgoblin_style, который содержится в регистре style содержатся ссылки на сами регистры со ссылками на соответствующие типы. pgoblin_pipe(), pgoblin_fork(), pgoblin_exec() вместе с соответствующей internal_fork() перенесены в файл execute.c из cmd_trans.c. По менялаяь концепция #fork, точнее, унифицировалась с неявным форком и #pipe. Или, может быть, унификация с #exec стала пониматься несколько иначе. Теперь связь ребенка с родителем происходит ровно через те регистры, которые указаны при вызове, без копирования их ребенку в 0й регистр ффода/вывода. Новые небольшие процедуры pgoblin_inx() и pgoblin_outx() для обработки потоков, в основном после форка, для унификации и сокращения. Из-за них были перенесены использующие их команды в execute.c. Из internal_fork() была убрана обработка pgoblin_inx() и pgoblin_outx(), для #exec множества (более 1) программ это была ошибка. Так же и lexlevel, но это не ошибка, только оптимизация. В pgoblin_copyin() приподнят уровень отладочного копирования потока. В pgoblin_getjob() для вывода открывался неправильный регистр вывода. В pgoblin_getjob() были несогласованы уровни, на которых открывался и закрывался выходной файл, из-за чего он мог остаться незакрытым. В pgoblin_getjob() прощаются некоторые ошибки waitpid(). pgoblin_wait() теперь не ждет процессы, не порожденные интерпретатором, например, процессы интерпретатора и его родителя. Теперь номера процессов интерпретатора и его родителя помещаются в 0й регистр job при инициализации. Несколько компактнее записан cleareg(), добавлены недостающие сообщения об ошибках. В main() теперь проверяется отсутствие входного файла. Изменилась команда #listen, теперь IN ей нужен Pt (но все так же бинарный, строго то же самое, что было в Pq. pgoblin_listen() стала компактнее. В тестах появились #exit, #getjob, #wait, #exec из ненулевого регистра, передачи через один и тот же регистр ввода/вывода и через разные регистры через несколько команд. 2007-11-30 babolo В составе пакета добавлены тесты для #trap, #return, #getstri, #binpresel и на использование регистров ввода/вывода для обмена. В pgoblin_verify() добавлена проверка соответствия имен и номеров регистров. Сделана команда #getstr (раньше была затычка). Теперь подготовка к тестам (DROP TABLE ... в начале) делается молча. В pgoblin_select() был неправильный возврат по ошибке без передачи ошибки. Добавлено правильное оформление потоков в регистрах ввода/вывода при неявном форке. Разрешена (не проверена) команда #close. Дополнена и слегка поправлена iorassert(). Новый макрос DUMPIOREGS для выдачи информации об используемых регистрах в основном цикле интерпретатора. Дополнена и переименована dump_reg() в dump_ioreg(). Исправлена работа пары #trap и #return. Добавлено правильное оформление потоков в регистрах ввода/вывода при явном форке. Разгрузка IO_OUT регистра портила невыгружаемое содержимое регистра. 2007-11-29 babolo В общую кучу мегафлагоопределений добавлены еще и флаги для pgoblin_main.exeflags. Имя скопища флагов PGOBLIN_ANYIOVL стало PGOBLIN_ANYIVL, возможно, когда нибудь будет PGOBLIN_ANYOVL. Имена регистров вынесены во внешнюю строку pgoblin_regn[], подумаю, может обойдусь еще без. Новый макрос ERROUT для выхода с ошибкой. Новый регистр IO - PGO_CCPY для копии, пока не используется. Макросы PROCDIR, CMDLINE, PIDLENG, TOTALEN тут не используются, удалил. Подстройка уровня отладки у pgoblin_Vdump(). Остальные изменения в execute.c, но очень много. readyreg() переименован в cleareg(), у него отобраны излишки интеллекта. Теперь аккуратно прочищает строго то, что задано, в том числе и вывод из IO регистра. Новая процедура propush(), аналог coercion(), но для выходного регистра. Макросы CICLEWARN() и CICLEERR() для поднобного сообщения об ошибке в основном цикле интерпретатора. В options->exeflags выделен 1 байт для флагов, сохраняющихся между циклами, остальные флаги протираются в начале каждого цикла интерпретатора. Переделана обработка выходного регистра ввода/вывода, теперь она вполне основательная и универсальная. Добавлены сообщения об ошибках в основном цикле интерпретатора. Теперь автоматически разгружаются все регистры вывода, если к тому есть условия, а именно добавленное содержимое не является прямым следствием из первоисточника и уже есть первоисточник, который может служить транспортом. Немного форматирование. В принципе это уже похоже на pgoblin-2. 2007-11-28 babolo Перестроена отладочная печать. Сделана команда #getjob (была заглушка). Переход от передачи процедурам номеров регистров к передаче ссылок на регистры. Сделаны команды #trap и #return (были заглушки). Возвращена pgoblin_fork() и pgoblin_exit(), теперь основной цикл автомата их вызывает вместо самостоятельного выполнения. Коды pgoblin_fork() и pgoblin_exec() по большей части объединены в процедуре internal_fork(). В pgoblin_syntax.p[] добавлено поле name для хранения имен регистров. Идентификационная строка программы на pgoblin стала длинной 16 вместо 8. Из coercion() и readyreg() убраны лишние варианты, соответствующие решения теперь надо принимать снаружи. Процедура pgoblin_exit() использует большую часть от pgoblin_return(). Не сохранялись биты состояния options->exeflags между циклами. Что бы не таскать пары труб для форка параметрами, они стали частью структуры pgoblin_main. Структура pgoblin_p переименована в pgoblin_prog, pgoblin_t в pgoblin_tuple. Исправлены коды команд #pipe и #close. В связи с выносом констант PG_* во внешний интерфейс они переименованы в PGOBLIN_*. Было ошибкой pgoblin_main.job описывать как pgoblin_job*, поскольку это mular_descriptor *. Форматирование, немножко комментарии. 2007-11-27 babolo Перетасовка файлов. Содержимое cmd_perform было влито в cmd_select, cmd_get - в cmd_file, отдельная команда pgoblin_fork() ликвидирована, т.к. исполняется непосредственно автоматом. Поскольку тип pgoblin_job стал публичным, именно он и поставлен вместо void* в pgoblin_main. Теперь в стек файлов не помещаются аргументы, кроме первого. 2007-11-27 babolo Полностью пересортирован список флагов для pgoblin_io.flags, pgoblin_c.ch[], pgoblin_c.a[].flags, многие флаги поменяли имена и/или значения. Сделана попытка вынести флаги для mife в отдельный макрос. Добавлены и перенумерованы команды. pgoblin_style унесен в приватный .h Тип pgoblin_con стал pgoblin_main. Флаг PGOBLIN_DUMP_PARSED расширил свое значение и стал именоваться PGOBLIN_VERIFY. Переменные lexlevel и exeflags теперь в pgoblin_main. Структура pgoblin_job стала публичной. Новая структура pgoblin_r для регистров команды, их значений и флагов. Тип pgoblin_c стал pgoblin_syntax. В pgoblin_syntax sym и mask стали беззнаковыми. Исправлена длинна массива pgoblin_syntax.a Шире применяются константы BINREGS и Новая процедура pgoblin_verify() для верификации семантического анализатора. pgoblin_init() теперь может принимать потоки для установки in/out программе. Вместо 4х регистров упакованных в исполняющем автомате используются 6 распакованных регистров в pgoblin_r. Интерфейс исполняющих программ поменялся на использование pgoblin_r вместо a[4] (или a[5] позднее). pgoblin_echo() теперь правильно отрабатывает флаги при копировании и не копирует при совпадении регистров. Сделана попытка отрабатывать флаги и совпадения в pgoblin_file() и pgoblin_cat(), еще есть работа. В макрос PQEXEC добавлен параметр - используемое соединение с СУБД. Сделана (была только заготовка) команда pgoblin_wait(). Сделана новая команда pgoblin_pipe(). pgoblin_fork() пока осталась, но не используется, как как fork() теперь реализован в самом исполняющем автомате. Массив аргументов в pgoblin_exec() теперь не ограничен, а выделяется по потребности. Теперь pgoblin_exec() аккуратно отмечается в регистре JOB. Новые заготовки для команд pipe, close и getstr. Тесты на тесктах pgoblin-0 проходит, для pgoblin-1 тестов нет и не прошел бы, т.к. поменялась семантика команды #fork. Впрочем, новая семантика еще не реализована. 2007-11-21 babolo Реорганизованы коды команд, выделены расширенные коды. Поменялась структура pgoblin_c. Замены чисел на символьные константы или обращения в pgoblin_c. Команды #cat и #file разделены, #file пока не готова. Теперь в 0й регистр работ помещается собственный PID. 2007-11-21 babolo Содержимое файла shurecon.c практически целиком перенесено в execute.c, shurecon.c удален. Из execute.c выделено заполнение pgoblin_c pgoblin в отдельный файл descript.c. В pgoblin_c добавлен еще и размер массива команд. extern pgoblin перенесен из pgob.h в pgoblin.h. 2007-11-20 babolo Смена мажора из-за серьезных ошибок: формат времени для #listen зафиксирован, управление процессами надо делать, надо уметь назначать выходные файлы. Команда #cat стала #file, #cat пока сохраняется как синоним. Добавлены недостающие (пока пустые) команды. Для #listen теперь нужно UNIX время в микросекундах. Создан отдельный набор (пока не задействован) набор регистров для управления процессами. Описание команд (для трансляции и исполнения) собрано в отдельную структуру. Изменился состав параметров для pgoblin_parser() и pgoblin_init(). В связи с увеличением количества регистров в записи команды увеличена назрадность сборщика регистров r_parm в parser. Из pgob.h удалены неиспользуемые PGO_C*. В оттранслированную программу добавлен идентификатор. Теперь формат времени DB по умолчанию не определяется, но это определение можно затребовать, если выставить одновременно флаги -F и -I. pgoblin_init() теперь может принимать готовую программу, но не может принимать готовую структуру pgoblin_con, всегда создает ее сам. 2007-11-11 babolo Версия 1.01 Не был продуман вариант, когда у exec параметром pq с несколькими выражениями. Теперь запускаются, но потеря PIDов еще больше стала. 2007-11-11 babolo Версия 1.00 Добавлено слово флагов в транслированную программу, пока не используется. В будущем для возможности незапроса формата датывремени. В флаги регистра ввода/вывода добавлен бит PGOBLIN_FILENAME, возможности пока не реализованы. Во внутренних инклудах PGO_PSTY возвращено его первоначальное значение, cmd_select исправлен соответственно. Массив pgoblin_a стал const. pgoblin_exec() теперь закрывает дубли дескрипторов входного и выходного потоков. pgoblin_shurecon() тот же, но более компактными макросами. pgoblin_Vdump() выделяет свой вывод и вывод номера оператора более от уровня отладки не зависит. Радикальные изменения в execute. Вывод трассировки freereg() и pgoblin_io_c() теперь на более высоком уровне отладки. С нуля написана coercion(), которая занимается приведением типов регистров ввода/вывода на IN и CTL каналах. Из pgoblin_execute() убран мусор, занимавший место приведения типов. Правильно отрабатывается (молча пропускается) команда продолжения. Непосредственно перед запуском команд (или fork()) на 4м уровне отладки выводятся подробности о команде к запуску. На выводе появилась 3я ветка - для обработки #exec на нулевой регистр вывода. Условие выбора выходной ветки переписано. Не сделано использование очереди входных файлов в нулевом регистре ввода/вывода. Нет стилей, и следы интерфейса к ним не должны использоваться, поскольку поменяется полностью. Нет тестов, а очень не помешали бы. Нет отслеживания pidов на ненулевом регистре ввода/вывода. Не выверена вся цепочка распространения и использования errno. Не выверена установка флагов присутствия данных в регистрах ввода/вывода, что может привести к лишним операциям и утечке памяти. Другие пути утечки памяти не вылизаны. Точность диагностики ниже плинтуса. Но в основном работает, как ожидается. 2007-11-10 babolo Массовая замена интерфейсов исполняющих процедур. Макросы для доступа к регистрам. 2007-11-09 babolo Образован файл с приватными определениями pgob.h, туда перенесены некоторые неинтерфейсные определения. Новые команды: продолжение (cont), listen, fork, exec, binpresel. Определения битов в флагах перенесены поближе к определениям своих флагов. Программа и указатель команды теперь стали частью pgoblin_con. Новые флаги -I и -F для целого и плавающего времени в базе, -t для максимального (в мс) таймаута у listen. Новые макросы PGO_P* и PGO_C* для определения регистров. В execute новая процедура freereg() постепенно заменит pgoblin_io_c(). Новые макросы {CH,IO}_* для упрощения обращения к регистрам и описаниям регистров, заодно найдено несколько ошибок в обращениях. За счет предперекодировки символов для лексора запись токенов стала много компактнее. В pgoblin_shurecon() теперь определение, в каком формате даты в СУБД. В pgoblin_select() ошибочно использовался reg_out вместо reg_ctl. Имеющиеся и несколько тестов вручную проходит, ошибок еще много. Нужно писать детальные тесты на новые возможности. Должно быть много утечек памяти, не занимался еще. 2007-11-07 babolo Замена идентификаторов в структуре pgoblin_io и перестановка элементов в структурах pgoblin_io и pgoblin_con. 2007-11-07 babolo Можно рассматривать как заявку о намерениях, но, однако, тест проходит. В Makefile добавлен текст о копирайте и указана зависимость от babolo-parser. Унифицирован интерфейс процедур, выполняющих команды. Централизован pgoblin_shurecon(). Стали едиными регистрами ввода/вывода бывшие раздельными pgoblin_conn.{in,out}. Почти косметические правки структуры транслированной программы. Заметно поменялась основная структура - pgoblin_con. Новая интерфейсная процедура pgoblin_init() в shurecon.c. Усовершенствован pgoblin_Vdump(). Теперь все виды выводов в 0 регистр вывода автоматом перенаправляются в mife, из-за этого #select в 0 регистр вывода не должен сопровождаться соответствующим оператором #display. Ликвидирован давно неиспользуемый флаг -B. В тесте многие команды #get* не были снабжены номером регистра вывода. Начата организация стека входных файлов. Новые флаги -N/-O для управления совместимостью с предыдущей версией. Практически полностью переписан парсер. Практически полностью переписан интерпретатор, сейчас он основывается на универсальном формате команд и общем описании команд. Многие команды существенно переписаны. Из всех команд fork() вынесен в центральный цикл интерпретатора. Много-много чего только слегка намечено и сильно не дописано. 2007-11-06 babolo Замена flag -> flags. 2007-11-04 babolo Удален cmd_fetselect, его содержимое перелито практически без изменений в cmd_select. 2007-11-04 babolo Готовимся к смене мажора. Появились регистры in, out, conn, res. Интерфейс к библиотеке поменялся и еще будет меняться. Программа изменилась только в части #select, который раньше использовать не рекомендовалось - теперь #select выводит готовый результат, полученный #prepare. Параметр интерфейсных библиотек - дескриптор выходного файла заменен на номер out регистра. Процедуры, которые могут работать с коннектом к БД, теперь получили параметр conn регистр. Компактнее записан вывод оформления таблиц. Новая команда #getproc. Добавлено освобождение регистров в конце pgoblin_execute(). Стиль вывода таблицы теперь целиком в pgoblin_con вместо ссылки. Большинство интерфейсных символов теперь начинается с PGOBLIN_ или pgoblin_. Поменялся порядок в enum pgoblin_cmd. Теперь к многим typedef зразу определяется struct. Для проверки #getproc изменен макрос SELECTEST() так, что бы можно было использовать средства исполняющего тест шелла для подстановки внутри тестов. 2007-07-16 gd Версия: 0.18 Собирается под FreeBSD6 2007-05-24 babolo Версия 0.17 Реакция на смену мажора у mife. В cmd_copy убраны неиспользуемые переменные. Явно инициализирована q в cmd_copy, транслятор успокоился. Подчищены варнинги на тему несовместимости типов указателей. Описания функций в pgoblin.h дополнены названиями параметров. 2006-11-18 babolo Версия 0.16 Мелкое, но важное изменение - используется getCGIparm-3.00. Добавлен CVS Id в regres. 2006-11-09 babolo Версия 0.15 В copyin исправлена ошибка при вводе нулевого файла. В copyout и copyin используются более современные процедуры libpq: PQgetCopyData() вместо PQgetline(), PQputCopyData() вместо PQputnbytes(), PQputCopyEnd() вместо PQendcopy(). В copyout и copyin теперь используется PQclear() на всех путях, где определен результат запроса. Из copyout и copyin теперь единые выходы. Флаг DUMP_PARSED переименован в PGOBLIN_DUMP_PARSED. В pgoblin добавлены флаги -a и -A для новых флагов PGOBLIN_COPEND_PASS и PGOBLIN_COPEND_APND. Дополнена подсказка. В shurecon добавлена обширная отладочная печать на уровне 4. Номер теста теперь в regres не считается sh, а уже задан в нем, считается m4, облегчает поиск и рассмотрение нужного теста. Тесты дополнены вариантами исполнения программ через -e. Среди тестов появились проверки COPY FROM при пустом входном файле. Комментарии чуть подправлены. 2006-07-20 babolo Версия 0.14 Правки в документации. Теперь в #strselect и #binselect курсор после вывода закрывается. 2006-02-21 babolo Версия 0.13 Добавлены операторы #begin и #end, проверка их. В README.ru поправлены планы. 2005-10-24 babolo Версия 0.12 - переиздание При составлении теста не учел, что меняется CVS Id внутри теста, потому использую теперь для проверки cat новый файл LISENCE. 2005-10-24 babolo Версия 0.12 Определение MAX_PACKT заменено на RAWIOBUFL. В cmd_file буфер для копирование файла определяется через RAWIOBUFL. Переменная ex в pgoblin_cat не нужна. Цикл копирования файла теперь проверяет конец файла. При mife_read() теперь обрабатываются ошибки. Убрана ошибка из tools/regres, внесенная в предыдущей версии. Добавлено тестирование команды #cat Добавлены комментарии для разметки групп тестов. В tools/def.m4 добавлено краткое описание по использованию. Не было конца строки в конце файла tools/regres.m4. 2005-10-24 gd С тестами не разобрался Как разберусь - нужно включить в тесты cat 2005-10-24 gd Версия: 0.11 Добавлена команда cat - аналог "include virtual" из Apache SSI 2005-03-15 babolo Версия 0.10 Интерфейс библиотеки еще не готов. Срочное издание из-за несогласованного использования pgoblinом интерфейса mife: mife_close нельзя давать пока NULL параметр. Появилась документация. Новый отладочный флаг -V - распечатка разобранной программы. pgoblin_strsel неправильно настраивался на оптимальную длинну FETCH. Переименование внешних для возможности выставить интерфейсом библиотеки. 2004-11-29 babolo Исключен старый файл tools/test.sh. 2004-11-29 babolo Версия 0.09 Все еще нет стабильной библиотеки. Типы и внешние имена приведены к виду pgoblin_* Теперь pgoblin аккуратно возвращает код возврата. Учтены приемник и процессор ошибок из libpq. Еще есть там работа. В strsel используются tdl, как и в select. Количество tdlей увеличилось. Формализован перебор входных источников. Предусмотрено косвенное задание аргументов через переменные окружения. Остался один executor, одиночные команды выполняются через тот же, что и программы. Существенно поменялось тестовое хозяйство. 2004-11-21 babolo Версия 0.08 execute при ошибке пытается дать значащий код возврата вместо -1. Новые команды get*, echo, strselect. Роль старой strselect стала выполнять команда select. Парсер терпимо относится к наличию/отсутствию символов после команды. Команды для парсера собраны в структуры. Уменьшился объем распечатываемой отладки в парсере. Расширился тест. 2004-11-07 babolo Версия 0.07 Тотальная BLINизация. Разрешен неожиданный PGRES_TUPLES_OK вместо PGRES_COMMAND_OK. Добавлен README.ru 2004-11-05 babolo Версия 0.06 Использует libmife 1. Уточнена проверка правильности соединения с базой. В uuencode какие-то изменения выходного текста, не вызванные изменениями во входном бинарнике. 2003-11-26 babolo Версия 0.05 Смена интерфейса pgoblin Использована babolo-libmake Использована библиотека mife Преобразовано в библиотеку, поменялись внешние имена. И вообще, полная реорганизация 2002-12-23 babolo test.sh добавлен в дистрибутив test.sh расширен программный тест copyin делается из stdin 2002-12-23 babolo Версия 0.04 Зачатки программирования Унифицирован интерфейс cmd_* Вообще, переработка кардинальная 2002-12-17 babolo Версия 0.03 Теперь выполняются текстовый SELECT, COPY out, команды без вывода. pgobin -> pgoblin в идентификаторах В реализаторах предусмотрена подмена команды по умолчанию на явно заданную. Предусмотрены строки для оформления текстовых таблиц 2002-12-17 babolo Переименован в pgoblin Версия 0.02 Существенно изменена структура - разбит на файлы по функциям, подготовка к преобразованию в язык программирования. В cmd_binselect размер FETCH подстраивается по размеру буфера. 2002-12-10 babolo Версия 0.01 - после переноса, работает