Инструмент синхронизации отражения объектов СУБД PostgreSQL на файловую систему с БД

Develar

Новичок
Инструмент синхронизации отражения объектов СУБД PostgreSQL на файловую систему с БД

Как результат http://phpclub.ru/talk/showthread.php?s=&threadid=98915&rand=3

Инструмент решает задачи:
1) внесения кода под контроль системы управления версиями
2) мультиязычности (недостаток execute для этого понятен)
3) возможность забыть о недостатках or replace, зависимостях и прочем помогающем сохранять целостность, но мешающем при невинном желании нажатием одной кнопки сохранить изменения в коде одного объекта СУБД.

sqlbuilder учитывает следующее: представления, функции, триггеры, типы, правила.
Домены, агрегатные функции, операторы и базовые типы (они могут быть также удалены - не протестировано) пока что не поддерживаются, так как с postgresql я работаю всего месяц и необходимости в этом не возникло - надо - пишите fr с прикрепленным кодом.
Схемы и таблицы (и все с ними связанное - индексы, ключи, последовательности, проверки) не поддерживаются, потому что с этим прекрасно справляется ems sql manager и with template в create database.

В настройках вы указываете массив имен каталогов в которых размещен код. На первом уровне схемы. На втором каталоги одноименные типу объекта СУБД - functions, triggers и т. д. На третьем уровне файлы.

Для решения проблемы зависимостей используйте порядковые номера в начале имени файла (например, 2-contents и 4-contents). Побочный эффект - изменение имени файла, можно использовать для решения конфликта имен в файловой системе при перегрузке. Для каждого объекта СУБД свой файл, одноименный объекту, (код естественного языка (ISO 639-1) в название, разумеется, не входит), исключение правила и триггеры - они размещаются в файле с названием таблицы, к которой они относятся. Если объект СУБД зависит от языка, размещайте его в каталог dependent_language (который на этом же, третьем уровне).

Код объектов представляет собой шаблон Blitz.
В коде доступны переменные: name - имя объекта СУБД, для правил и триггеров table - имя таблицы. Все имена полностью квалифицированны. Для зависимых от языка доступна переменная language - код текущего языка. Для всех - и зависимых, и не зависимых от языка доступен контекст languages - контекст получит переменную language и будет проитерирован столько раз, сколько у вас языков (смотрите 2-contents/triggers/tree.sql).

Введено следующие упрощение: для объекта СУБД не надо писать create и т. д., то есть для функции сразу пишите список параметров, для представлений сразу пишите select.
Тех, кто знает Blitz, успокаиваю - вы можете задавать поворение в регулярном выражении даже при blitz.tag_open = "{" и blitz.tag_close = "}".

При запуске sqlbuilder удаляет все объекты учитываемых им типов из всех схем в БД (кроме information_schema и pg_*). А потом итерирует указанный массив каталогов. Все происходит в рамках одной транзакции.

sqlbuilder входит как инструмент в мой каркас, поэтому в поставке немного лишнего. Предполагается, что каркас у вас в /usr/local/develar_framework/trunk (настраивается в project.php). Настройка подключения к БД в /configuration/core.conf.php (указывайте для сервера разработки). Список языков для мультиязычности в конфигурации каркаса в core.conf. Настройка path - массив имен каталогов - в конфигурации каркаса в sql_builder.conf.php. Инструмент запускается пока что из браузера, из консоли тоже наверное можно (путь до каркаса/loaders/tool.php sql_builder), но не тестировал. Для запуска из браузера сделайте loaders/tool.php доступным - типа "Alias /sql_builder /usr/local/develar_framework/trunk/loaders/tool.php" и запросите адрес http://sqlbuilder/sql_builder?tool=sql_builder. Скрипт тестовой базы в auxiliary/db.sql, пример в auxiliary/sql

http://neocms.ru/sqlbuilder.tgz

баги и пожелания пишите на http://bugs.neocms.ru/

ПО: PHP 5.2.1, blitz 0.4.14, pdo и pdo_pgsql, тестировалось с postgresql 8.2.4 - начал работать с этой версии, будет ли работать на ранних - не могу сказать.

Предупреждаю о 2 потенциальных проблемах:
1) SPL под linux (под win работает) в 5.2.2 иногда глючит, отдавая из одного итератора getFilename и getPathname абсолютно разных файлов, данный момент решен извратом - конкатенация getPath и getFilename.
2) Вызов процедуры core.clear очень редко, но может привести к зависанию сервера под win, на linux никогда не падало. Так как это очень и очень редко и только под win, разбираться пока не собираюсь.
 
Сверху