2024-07-14 babolo Уменьшение варнингов на i386. 2024-05-01 babolo Исправлен выход за границу массива. 2024-04-20 babolo Даты в копилефтах. 2024-04-20 babolo Порядок инклудов для неиспользования системных .h файлов при общей трансляции. 2024-03-31 babolo Изоляция общего теста от установленного в системе pgoblin. 2024-03-31 babolo Не работает __weak_reference со static. Отладка. 2024-03-31 babolo Варнинги. 2024-03-24 babolo Варнинги. 2024-01-08 babolo Реорганизация make файлов. 2023-10-29 babolo Удаление варнингов. 2023-08-25 babolo Стиль. 2023-07-30 babolo Использование #file IN прекращено в пользу #cat. 2023-07-29 babolo Замена OUT #cat на #out в тестах. Замена OUT #file на #out в тестах. 2023-07-22 babolo Отлажен и описан #out. Изменились прототипы pgoblin_ios.iprep и pgoblin_ios.oprep. В тестах в список каталогов для поиска плагинов добавлен pgoblin/. Пополнен и поправлен отладочный вывод. Колмментарии. Стиль. 2023-07-09 babolo Ликвидирована зависимость от getCGIparm. Убран вариант #getdir с именем файла в CTL. Комментарии. Стиль. 2023-06-18 babolo Переписан #getproc, тепрь не использует getCGIparm, источником служит sysctl(), к каждому процессу добавлена строка с exec()нутым именем. Исправлены описания #getproc и #getdir. В pgoblin_rio добавлено поле funout для файла из funopen(). В pgoblin_io_close() добавлено закрытие funout. В io убрана wr() и добавлена clo(). 2023-06-18 babolo Из всех регистров исключено поле exenv. Параметр pgoblin_fini() теперь exenv вместо options. В pgoblin_db0_create() добавлен параметр exenv. В ->init() и ->fini() всех плагинов замена параметра options на exenv. Большое удаление отладки в pgoblin5pgeo. Включены в дистрибутив pgoblin5pgeo тесты c и d. Стиль. Даты в копилефтах. 2023-06-11 babolo Инкапсуляция .h в __BEGIN_DECLS/__END_DECLS и защита от повторного включения. 2023-06-04 babolo Исправлены концы файлов. 2023-06-04 babolo Переход PGOBLIN_COMPAT на 5. 2023-06-03 babolo Изменение прототипа pgoblin_db_finish() и интерфейса DB. 2023-06-03 babolo Прототип pgoblin_db_denote(). 2023-06-03 babolo Массовая замена интерфейсов и прототипов. 2023-04-09 babolo Изменение интерфейсов ->resinfo, ->subinfo, ->erinfo, ->valinfo, ->getvalue. 2023-04-09 babolo В трассировку подается ссылка на регистр вместо номера. В регистры встроены номера и глубина. Абстракция регистра pgoblin_rall. Недоработка в db_pgsql:getstream(). В pgoblin_wait() замена идентификатора j на стандартноый rjb. 2023-03-12 babolo Исправлен выбор зависимости от мажора. 2023-03-08 babolo Перевод на версию 5. 2023-03-08 babolo Убраны -q из тестов. 2023-02-26 babolo Мелкие зачистки. 2023-02-18 babolo Изменение прототипа pgoblin_dbases->erconn() и pgoblin_dbases->denote(). Исправлен идентификатор параметра у pgoblin_db_clear(). 2023-02-18 babolo Изменение прототипа pgoblin_dbases->tarry(), pgoblin_dbases->notifies(), pgoblin_dbases->finish(). 2023-02-18 babolo Изменение прототипа pgoblin_dbases->getstream(), pgoblin_dbases->getcopy(), pgoblin_dbases->putcopy(), pgoblin_dbases->endstream(), pgoblin_dbases->prepare(), pgoblin_dbases->shurecon(). 2023-02-18 babolo Изменение прототипа pgoblin_dbases->query(). 2023-02-18 babolo Изменение прототипа pgoblin_dbases->execute() и pgoblin_dbases->prexec(). Даты в копилефтах. 2023-01-01 babolo Тесты с пустыми входными регистрами. 2022-12-18 babolo Версия 4.09 Еще ошибки regexp_replace() и тесты. Распространиение BLIN_flag. 2022-12-18 babolo Версия 4.08 Исправлен regexp_replace(). Тесты regexp_replace(), koilower(), koiupper(). 2022-12-17 babolo Версия 4.07 Исправлено поведение по GLOB в regexrepl(). 2022-11-19 babolo Версия 4.06 Ошибка в weak_reference. 2022-11-16 babolo Версия 4.05 Исправлена функция regexp(). Стиль. 2022-11-16 babolo Добавлены фунуции koilower(), koiupper(). 2022-11-13 babolo Добавлены функции regexp_replace(). Заготовки для koilower(), koiupper(). 2022-09-17 babolo Тесты на множественный #fork при нулевом CTL. 2022-08-28 babolo Исправлены *_COMPAT макросы. Даты в копилефтах. 2022-08-18 babolo Тест на #fork с CTL. 2022-08-17 babolo Версия 4.04 2022-08-16 babolo Версия 4.03 повторно Исправлена зависимость. 2022-08-16 babolo Версия 4.03 Проверка результата трансляции команды перед использованием. Тесты новых возможностей pgoblin. 2022-08-14 babolo Команда #eval использует IN Pq. Тесты на это. Подготовка к использованию rio->stymd и для транслированной программы. 2022-05-01 babolo Тест на пустой ответ при CTL Pq и IN Pq. 2022-02-09 cuhegh Версия 4.02 Критически важные зависимости. 2022-01-30 babolo Обход неспособности последних версий clang к --oformat=binary. 2022-01-29 babolo Дата копилефта. 2022-01-16 babolo Тест на #perform CTL под #begin #end. 2022-01-15 babolo Версия 4.01 Зависимости меняются по условиям трансляции. 2022-01-09 babolo Версия 4.00 Возможность ограниченного сосуществования разных мажоров. Осовременено REQUIRED. 2022-01-09 babolo Замена типов *_style на pgoblin_realsty. Изменение интерфейса pgoblin_db0_create(). Замена макроса IND() на INDX() с удалением предыдущего значения INDX(). Тип pgoblin_mode стал pgoblin_realpq. Зачистка переменных rsv в модулях БД. Зачистка переменных st в модулях стией. 2022-01-08 babolo Перестановка процедур в CONN интерфейсах согласно месту в структуре. 2022-01-08 babolo Изменение интерфейса CONN erinfo(). 2022-01-08 babolo Изменение интерфейса CONN subinfo() и valinfo(). Изменение интерфейса STY table(). Комментарии. Стиль. 2022-01-08 babolo Изменение интерфейса CONN resinfo(). 2022-01-08 babolo Изменение интерфейса CONN getvalue(). 2022-01-07 babolo Изменился интерфейс CONN finish() и из него выделен denote(). 2022-01-07 babolo В интерфейсе CONN ликвидирован finish(, PGOBLIN_FrCOPY, ). 2022-01-07 babolo Изменение интерфейсов CONN getstream() и clear(). Изменился интерфейс cleareg(). Определение blin_internal_flags через exenv->options. 2022-01-07 babolo Даты в копилефтах. 2022-01-07 babolo Изменение интерфейсов CONN prepare(), execute() и выделение из execute() prexec(). Улучшен отладочный вывод. Из интерфейса удален бит PGOBLIN_ALTERQ, используется внутри плагинов. Комментарий. 2022-01-06 babolo Стиль. 2022-01-03 babolo Изменение интерфейса CONN query(). 2022-01-02 babolo Переименование вида pgoblin_io в pgoblin_rio. 2022-01-02 babolo Переименование вида pgoblin_conn в pgoblin_rdb. 2022-01-02 babolo Изменение интерфейса get() в стилях. Первая часть стандартизующих переименований. 2022-01-02 babolo Все MARK_* теперь с номерами регистров. 2022-01-02 babolo Перевод интерфейса БД с указателей на номера регистров. 2021-12-26 babolo Изменился интерфейс init() и fini() плагинов. 2021-12-19 babolo Отладочная выдача. 2021-12-18 babolo Немного отладки. 2021-11-27 babolo Изменение прототипа execute(). 2021-11-21 babolo Перенос определений в .h. Пополнение отладки. Перенос subinfo(). 2021-11-21 babolo Изменение работы #getopt. 2021-11-20 babolo Ошибка при выводе ошибки. 2021-11-14 babolo Полнее отладочный вывод. 2021-10-31 babolo Исправление тестов. 2021-10-24 babolo Исправление *_COMPAT. 2021-10-23 babolo Исправление тестов. 2021-10-23 babolo Исправление тестов. Зависимость от babolo-libmake:4.16. 2021-10-23 babolo Исправление тестов. Возможность трансляции с локальными .h файлами. 2021-10-23 babolo Унификация тестов. 2021-10-17 babolo Тесты 3sqlite2 перенесены сюда. 2021-10-10 babolo Дата в копилефтах. 2021-10-09 babolo Версия 0.09 Стал длиннее и полнее resinfo(). Не отмечалось создание db0. Описания собраны в .h. Стиль. 2021-09-18 babolo Версия 0.08 Улучшен вывод ошибок. Разрешено несоответствие размера массива параметров. 2020-10-11 babolo Версия 0.07 Зависимость от pgoblin-3.12. 2020-09-09 babolo Версия 0.06 Добавлена процедура instr. 2020-05-08 babolo Версия 0.05 Использование pgoblin_onecopy(). 2020-03-24 babolo Исключение из сборки неиспользуемой getCGIparm библиотеки. 2020-02-23 babolo Версия 0.04 повторно Даты в копилефтах. 2020-02-23 babolo Версия 0.04 Была возможность нарушения границ массива. Текст разбит на отдельные файлы. Стиль. 2018-09-19 babolo Версия 0.03 Неправильное место зачистки res. В COPY out буфере можно без strlen(). 2018-09-19 babolo Версия 0.02 Убраны следы getCGIparm. 2018-09-19 babolo Убран getCGIparm. Стиль. 2018-09-17 babolo Проверка malloc(). Стиль. 2018-09-15 babolo Прекращено разделение на clear() и clean(). 2018-09-13 babolo В clean() не зачищался serv. Замена return из начала процедуры на goto на конец. 2018-09-12 babolo Мелкие пометки к проверке. 2018-09-10 babolo Версия 0.01 Модуль отделен. 2018-08-29 babolo Модули будут транслироваться только после установки следующей версии pgoblin. 2018-08-29 babolo Синхронизация модулей. 2018-08-24 babolo Загрузка модулей есть, работать они не очень. Зачистка зависимостей. Исправление TODO. Трансляция устойчива к исключению pgsql. Неудачная загрузка трактовалась как удачная. 2018-08-22 babolo Синхронизация внешних модулей с внутренними. 2018-08-22 babolo Исправлена сборка модулей. 2018-08-21 babolo Начало выделения модулей из pgoblin. 2018-08-13 babolo Выравнивание структур. Стиль. 2018-07-23 babolo Ошибка в pgoblin_getdir(). Сообщение об ошибке в pgoblin_getdir(). В db_0 добавлена возможность именования колонок. В db_0:execute() в результат теперь отправляется копия строки. Стиль, комментарии. 2018-07-17 babolo В db_sqlite2 не было проверки результата malloc(). В db_sqlite3 добавлены имена полей, но проверку не проходит. 2018-07-17 babolo Оформление приватных и публичных процедур. 2018-07-10 babolo Частичное приведение db_sqlite3 к db_sqlite2. 2018-07-09 babolo Тип collect() стал static int. В collect() отрабатывается ситуация с именем == NULL. В collect() проверяется неизменность количества полей в пределах одного результата запроса, перенесено из мест после вызова collect(). Вызов collect() перенесен в get() из getstream(), параметры get() из-за переноса несколько поменялись. Стиль. 2018-07-07 babolo Сохранение pgoblin_mode между проходами. Зачиска хвостов от сохранения pgoblin_mode. Теперь db_sqlite2:get() создает serv (но е работает правильно с ex, потому collect() не работает и имена колонок не соханяются. Добавлены проверки входных указателей. Включена проверка перенумерации в db_sqlite2 #strsel, пока fail. Стиль. 2018-07-06 babolo Стиль. 2018-07-06 babolo Небольшая оптимизация db_sqlite2. 2018-07-06 babolo В db_sqlite2:get() замена идентификатора n на ncol. 2018-07-05 babolo Имена и типы результата пришлось запоминать. Стиль. 2018-07-03 babolo Стиль. 2018-07-01 babolo В pgoblin_mode изменение имени поля с m на md. 2018-06-30 babolo Замена subinfo(PGOBLIN_ResMess, ...) на erinfo(...). В непотоковых select в db_sqlite2 работает перенумерация по именам. Исправлен конечный автомат в style_pgo0 и обозначения в нём. Тесты на перестановку в db_pgsql, тесты и заготовки тестов на перестановку в db_sqlite2 и db_sqlite3. 2018-06-28 babolo В db_sqlite* замена n на ncol. В db_sqlite* замены u_char на char. В db_sqlite* resv() второй параметр не нужен и там напрасно расходовалась память. Любопытный способ гасить варнинги по const**. Стиль. 2018-06-28 babolo В db_sqlite* query() замена переменной n на ncol и idx. # db_sqlite* query() переменные p и q стали char вместо u_char. Комментарии. Стиль. 2018-06-27 babolo Уточнены места для имен колонок. 2018-06-24 babolo Выравнивание db_sqlite2 и db_sqlite3. Замена if(!ex){} на ERROUT() в предыдущем блоке в db_sqlite2. Стиль. 2018-06-24 babolo Осовременен TODO. Отметки в процедурах для имен колонок. Стиль. 2018-06-12 babolo Замена static const char copyright[] и static const char rcsid[] на #ident. 2018-06-11 babolo В db_0 вместо приводимой на всё p_no() сделаны отдельные процедуры. Используемая затычкой к notifies процедура db_0:p_none() переименована в notifies(). Типы pgoblin_dbases, pgoblin_jobs и pgoblin_styles расширены на 2 ссылки на будущее. В тип pgoblin_styles добавлены процедуры load и store, пока не реализованные. Разрешен описатель S в style_pgo0, пока не реализован. В парсере style_pgo0 действие Cl слито с Cb из-за полного совпадения условий выполнения. В парсере style_pgo0 устранен один вариант core dump. В regress помещен вариант распознавания описателей. Комментарии, стиль. 2018-06-08 babolo Предупреждение об отсутствии PGOBLIN_COMPAT. Переменный размер в pgoblin_prog теперь 0. 2018-06-05 babolo Стиль. Комментарии. 2018-06-03 babolo Удален pgob.h, его содержимое в pgoblin.h под PGOBLIN_INTERNAL. Комментарии. 2018-05-20 babolo В Makefile добавлена цель test. Введены в работу макросы MARK_*_GO (и добавлены MARK_IO_*_NGO и MARK_*_NWENT()). Разрежены ;; в for(), что бы не путались с MARK_*. Введен файл трейса по опции -X. В tools/regres, tools/regres4, tools/regres8 добавлен exit 1 при ненулевом количестве ошибок. Стиль. 2017-07-05 babolo Поправлено README. Изменены интерфейсные имена процедур в модуле job. В db_pgsql, db_sqlite2 и db_sqlite3 убраны комментарии к интерфейсным именам процедур. Во всех модулях fini() стал без параметра. В db_sqlite2 и db_sqlite3 отсутствие tarry() и notifies() нтерфейсных процедур опеделяется в db.c диспетчере. Сокращение локальных имен в модулях job_local, style_0 и style_pgo0. 2017-07-02 babolo Удаление поля errmsg из pgoblin_db_conn и pgoblin_mode в db_sqlite2.c. 2017-07-02 babolo В db_sqlite2.c вынесена в отдельную процедуру reset() обращения к sqlite_reset() со всеми проверками и диагностикой. Удален макрос ERRMSX() как неточный. Оформление ошибок sqlite_bind(). 2017-07-02 babolo Убраны const из параметров qry в *query() и *prepare() dbms модулей. В диспетчере db введена проверка параметров rsv. В db_sqlite2.c вынесены в отдельные процедуры finalize() и compile() обращения к sqlite_finalize() и sqlite_compile() со всеми проверками и диагностикой. Оформление ошибок sqlite_bind() и sqlite_reset(). В макросе ERROUT() был неправильный порядок присвоения. Оформление программы. 2017-06-28 babolo Поскольку макросы PGOBLIN_SQLITE_* локальны в db_sqlite2, заменены на SQLITE_*. Порядок полей в pgoblin_db_conn и pgoblin_mode в db_sqlite2 выровнен до errmsg включительно. Включение поля errmsg в pgoblin_db_conn и pgoblin_mode в db_sqlite2. Правильная обработка ошибок от sqlite_create_function(). 2017-06-25 babolo Выверены ошибки и сообщения. В db_sqlite3 из типа pgoblin_mode удалено поле a. 2017-06-24 babolo В subinfo() BLIN_flag берется из 2го параметра вместо 3го. Если не нужен pq результат, то у execute() в качестве параметра res ставится NULL. Продолжена замена u_int32_t на BLIN_flag где соответствует. 2017-06-24 babolo Проведена инициализация flags у всех модулей базы. У всех баз можно execute() давать параметр rsv==NULL. В db_pgsql pgoblin_mode содержал лишнее поле db, удалено. Офрмление. 2017-06-22 babolo Процедуры диспетчера выписаны аккуратнее. Замена u_int32_t flags на BLIN_flag flags. Аккуратно выписаны ошибки в db_0. Выписаны, но не сверены ошибки в db_sqlite2. В db_sqlite2 pgoblin_mode ликвидировано поле a[]. Все значения теперь однозначно в mular. 2017-06-21 babolo Обращения к query() и prepare() из pgoblin_dbases сделаны через db.c диспетчер. Интерфейс shurecon() из pgoblin_dbases возвращен взад. Переименование нескольких параметров pgoblin_mode* из res в rsv. В db_pgsql флаг PGOBLIN_DB_PREPARE мог быть установлен незаконно. 2017-06-20 babolo Форматирование. 2017-06-19 babolo Замена finish(..., PGOBLIN_CleaRes, ...) и finish(..., PGOBLIN_PFormed, ...) на clear(...). Вместо void* введен тип pgoblin_mode*, который есть void* в общем контексте и обозначает конкретный вид результата в модулях базы. Управляет контекстом макрос PGOBLIN_MODULE. Раньше эту роль пытался выполнять pgoblin_moded. Флаги PGOBLIN_STREAM* в db_sqlite2.c и db_sqlite3.c сдвинуты, что бы освободить место для становяимися стандартом флагов BLIN_MASK и PGOBLIN_DB_TYPE. В pgoblin_db_data типе в db_sqlite2.c и db_sqlite3.c убрано имя поля cell и в union добавлен sqlite_vm и sqlite3_stmt соответственно. Для обозначения наличия vm добавлен флаг PGOBLIN_VM. В db_sqlite2.c и db_sqlite3.c новая процедура resv() для создания объектов типа pgoblin_mode. Замена нескольких malloc();bzero() на calloc(). Пополнена отладочная выдача в style_0.c. 2017-06-15 babolo Замена в conn void* на pgoblin_moded, где оно указывало на типозависимый Pq. Во всех типозависимых структурах flags поставлен в начало. Биты в этих флагах переставлены, что бы освободить младшие 16 битов. Ликвидирован тип pgoblin_r. Форматирование. 2017-06-14 babolo Форматирование и переименование. 2017-06-12 babolo Изменение интерфейса (*shurecon)(). Ликвидированы макросы CC и RC, возврат к R_CONN и DBASE(). Ликвидирован неиспользющийся макрос OFFSETOF(). Описание struct pgoblin_jobs перемещено в pgoblin_job.h. Исправлены типы в printf() в pgoblin_VVdump(). 2017-06-12 babolo Во всех файлах, кроме style_0.c, выставлены возможно правильные параметры у макросов MARK_*. У команды #binselect помечено неявное использование Ij. Интерфейс coercion() поменялся - замена pgoblin_io* на pgoblin_nr. Интерфейс waitjob() поменялся - замена pgoblin_jobreg* на pgoblin_main и pgoblin_nr. Добавлены dump_ioreg(options, 0) где 0й регистр используется неявно. Замена в pgoblin_execute() rn[] на макросы RNOUT, RNCTL, RNIN, RNCON, RNJOB, RNSTY, которые проверяют неявное использование регистров. Сообщение об ошибке, если fork() происходит для команды, не заказавшей Ij. Форматирование. 2017-06-10 babolo Начат файл func.c для вспомогательных функций. Туда перенесены pgoblin_breg(), pgoblin_cmdexe(). Из структуры pgoblin_syntax исключены поля clasnames и class, для использования за пределами определения новая процедура pgoblin_ctonr(), соответствующие clasnames и class перенесены в parser.c, исключен макрос _PGOBLIN_CHAR_CLASSES_. Перенос pgoblin_verify() в vdump.c. Новые битовые маски demask* в составе структуры pgoblin_main для отметки трейсинга регистров, и отметка. Изменение тип pgoblin_r со struct на union. Поправлены даты копилефтов. 2017-06-01 babolo Передача в shurecon() options и номера регистра. Частичная замена доступа через pgoblin_r на доступ по номеру регистра. 2017-06-01 babolo Все init() и fini() збавились от второго параметра. Специальный тип для номера регистра. 2017-05-27 babolo Исправлены неопределенные MARK_R_CONN_*. Часть функционала перенесена из -T в новый флаг -=. В том же флаге -= намечен будущий способ отладки. Пополнен и исправлен sqlkeywords в соответствии с PostgreSQL 9.6. 2016-06-13 babolo Неправильно вводилась единственная колонка NULL в #copyin SQLite*. Тесты на ошибку выше. Комменты. 2014-09-08 babolo Версия 2.53 Перекомпонован Makefile. Обновлены зависимости. В pgoblin_getarg() было лишнее разыменование. Удален лишний конец строки в дебаге. 2014-09-07 babolo На некоторых путях были неинициализированные переменные. 2014-09-03 babolo Переход на babolo-parser:3.03. Пополнен TODO. Согласование типов. Исправлен текст к манам. Форматирование. 2014-09-03 babolo Переход на babolo-libmake:3.09, mife:4.05. Старые правки на тему getopt в pgoblin.c. Правка текстов. Немного форматирования. 2013-10-16 babolo Версия 2.52 Замечания перенесены из Makefile в TODO. Поправлены зависимости. Убраны дублирующие babolo-libmake команды из Makefile. Замена идентификаторов flag на flags. Переход на mife.4 без совместимости с mife.3. 2013-02-05 babolo Порядок инклудов в тексте согласован с семантическим порядком. 2011-12-10 babolo Версия 2.44 Изменения в babolo-libmake - добавлен -lbabolo-libmake для сборки. Поправлены копилефты. Добавлены и поправлены заметки и комментарии. 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-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-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-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-21 babolo Версия 2.29 В pgoblin_echo() была путаница в signedness. В db_sqlite2 и db_sqlite3 унифицированы флаги, управляюющие pgoblin_sqlite*_quote(). Добавлены функции quote_html() и gettimeofday() к sqlite2 и sqlite3. 2009-08-03 babolo Версия 2.26 В #copyin в обоих SQLite не вводился \N в последней колонке. Добавлены тесты на это. В SQLite3 не было отмечено действие Cu для отладочной печати. 2009-07-31 babolo Версия 2.23 У обоих SQLite преобразование COPY плохо проверяло входное выражение и не работало на имени таблицы в двойных кавычках. Добавлены тесты на это в интерфейсы всех баз. 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-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-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-24 babolo Замена getopt() на аналогичный комплект из babolo-parser. Добавлены флаги -r и -R для парсенья слов среди аргументов. Добавлен бит PGOBLIN_ARGVSTACK, управляющий совместимостью #getarg с предыдущей версией. В usage() теперь изображаются подключенные модули. Отсутсвие break в caseах switch откомментировано в дружественном lint стиле. Из pgoblin_init() удалены закоментаренные ранее куски (ненужние куски инициализации регистров ввода/вывода, работ, стиля. В тестах первым аргументом поставлен -r для парсенья недопарсенных ядром (изменения с FreeBSD 6) параметров. 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-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-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() за ненадобностью. Форматирование и прочие мелочи.