|
Russian page
|
Вашему вниманию предлагается набор компонент FibScript под FibPlus для создания и выполнения скриптов серверов Interbase / Firebird / Yaffil.
версия 1.9, последнее изменение 02.05.2007
Обеспечена максимальная совместимость по свойствам с аналогичными модулями из IBX, но при этом поддерживается выполнение в скриптах конструкций вида "execute procedure", "create or alter", " describe" и т.д., чего нет в IBX. Компонент успешно работает в нескольких коммерческих приложениях, например в "АТС Тарификатор", Blazetop
Распространение:
Набор компонент распространяется для xUSSR в исходный текстах бесплатно при
условии, что в одном проекте участвуют не более 2-х разработчиков. Я не делаю
никаких защит для xUSSR, все на Вашей совести. Скачать fibscript19.rar
(архиватор WinRar 3.0, пароль на архив два раза название первого месяца большими
русскими буквами без пробела).
Образец скрипта:
(обратите внимание, что в данном компоненте необязательно указывать команду SET TERM, ограничтесь указанием
символа ; после слова end в конце процедуры или триггера):
==========
DECLARE EXTERNAL FUNCTION TIMETOSECONDS
TIME
RETURNS INTEGER BY VALUE
ENTRY_POINT 'TimeToSeconds' MODULE_NAME 'nntudf';
update products set price = 0 where id_price>60;
ALTER PROCEDURE SP_GET_ROUNDMINUTES (
DURATION TIME)
RETURNS (
DURATION_ROUNDMINUTES INTEGER)
AS
declare variable duration_hour integer;
declare variable duration_minute integer;
declare variable duration_second integer;
declare variable dontusefirstseconds integer;
BEGIN
select Z(extract(hour from :duration)), Z(extract(minute from :duration)),
Z(extract(second from :duration))
from rdb$database
into :duration_hour, :duration_minute, :duration_second;
SUSPEND;
END ;
=========
Применение в Delphi:
Бросьте компонент на форму и заполните свойства DataBase и Transaction. Можете
также заполнить свойства LastDDLQueryLog и LastDMLQueryLog, например указать
в них путь к текстовым файлам, в которые будут записываться последние выполняемые
команды (сделано исключительно для удобства нахождения "какая же команда
в моем большом скрипте сбоит").
Для работоспособности модуля на FIBPlus версии ниже 5.0 необходимо перенести в FIBDatabase.pas процедуру RemoveDatabase из секции protected в секцию public и перекомпилировать FibPlus.
Пример вызова скрипта:
===
FIBScript1.Script.LoadFromFile('c:\test.sql');
FIBScript1.AutoDDL := False;
if FIBScript1.ValidateScript then FIBScript1.ExecuteScript;
if FIBScript1.Transaction.InTransaction then FIBScript1.Transaction.Commit;
===
Благодарности:
Serge Buzadzhy, Serg Vostrikov и компании Devrace
за отличную библиотеку.
Dmitriy Kovalenko (Devrace)
Pavel Shibanov (Devrace)
Nikolai Voynov
Vladimir A. Bakhvaloff (за скриптер yascript, откуда был взят образец работы
с BLOB)
Svetlana Bulanova
Mihail Veselov
Victor Ivanov (за идею и начатую работу с переработкой describe)
Valery SCH {за интеграцию в BCB6}
Известные проблемы текущей версии:
Были жалобы, что не обрабатывается конструкция SET STATISTICS INDEX USL_ZN_IDX1;
Надо ставить пробел между ACTIVE/INACTIVE и ; в конструкциях SET TRIGGER ...
ACTIVE ;
Что нового:
v1.9 от 02.05.2007
1. Добавлена поддержка EXECUTE BLOCK.
2. Добавлены иконки и интеграция в BCB6. (by SCH)
3. Небольшие некоторые ошибки и слегка почищен код.
v1.8b3 от 01.05.2006
1. Исправлены ошибки при обработке DESCRIBE. (by Шумко Дмитрий)
v1.8b2 от 24.01.2006
1. При выполнении скрипта возникала ошибка <Неверный текст запроса>.
(by Mihail Veselov)
2. Переработана работа с DESCRIBE, теперь полностью поддерживаются многострочные
описания. (ориг. идея by Victor Ivanov, адаптация и окончательная доработка
by автор)
v1.8b1 от 12.07.2005
1. Исправлены серьезные ошибки при выполнении запросов DML и соединения/создания
базы, если не заполнено свойство Database (т.е. если подключение к базе выполняется
командами скрипта CONNECT или CREATE DATABASE).
2. Теперь скриптер понимает, но пока игнорирует команду SET CLIENTLIB.
3. Если в скрипте в CONNECT не указан пароль, то автоматически используется
masterkey.
4. Исправлена ошибка в обработке синтаксиса команды IBExpert:
DESCRIBE EXCEPTION EXC_EDITDATA ...;
5. Иногда возникал AV на правильном скрипте. (by Svetlana Bulanova)
6. При Connect не верно задавался charset. (by Svetlana Bulanova)
7. Не чистились параметры на DoCreate. (by Svetlana Bulanova)
v1.7 от 23.03.2005
1. Добавлен dpk для Delphi7.
2. Исправлена ошибка в обработке синтаксиса команды IBExpert:
DESCRIBE DOMAIN T_DOCUM ...;
3. Исправлена ошибка в обработке GRANT ... PROCEDURE (by Kirov Ilya).
v1.7beta2 от 05.11.2004
1. public свойство IfDefine.
2. В скрипте поддерживаются директивы $IFDEF и $ENDIF:
{$IFDEF INS_VALUE}
insert into (...) values (...);
{$ENDIF}
При этом INS_VALUE должно быть указано в свойстве IfDefine. Например
я это делаю,
считывая из ini-файла в момент инициализации программы. Если ничего не указать,
то скрипт
выполняется как было раньше, а строки между IFDEF,ENDIF просто игнорируются.
3. Исправлена ошибка в обработке синтаксиса таких команд IBExpert:
DESCRIBE PARAMETER D PROCEDURE USZ_ZN_SDN ...;
DESCRIBE TRIGGER DOCUM_AU ...;
DESCRIBE VIEW VW_DOCUM ...;
v1.6 от 12.09.2004
1. Неправильно работал SET BLOBFILE.
2. В TMappedMemoryStream не закрывался fHandle.
3. public свойство BlobFileName.
v1.5 от 25.07.2004
1. public свойство SQLParser и везде по тексту переход на его использование.
2. Разделение на токены шло только по пробелу, добавлены #13,#9,#10,#0,'(',')'
3. Ошибка парсера при встрече сиквела DESCRIBE PROCEDURE PARAMETRE.
4. В TokenizeNextLine немного изменен момент с выходом из парсинга процедуры/триггера
со стандартным терминатором для получения корректного значения CurrentLine.
5. Процедура DoConnect - неправильно определяла пароль и чарсет.
6. Процедура DoCreate - убрано пересоздание БД при коннекте.
7. Изменен порядок вызова FOnParse в TpFIBScript.ParserParse.
8. Rollback при останове скриптера по ошибке.
9. Добавлена обработка блоб-файлов, которые поддерживает IBExpert. (идея взята
с модуля yascript by Vladimir A. Bakhvaloff).
10. Добавлен компонент pFIBExtract (с дополнительной настройкой опций, а также
поддержкой функции describe IBExpert).
v1.4 от 28.05.2004
1. Доработки парсера.
2. Убран из uses IB_Services за ненадобностью.
3. В TpFIBParseKind добавлен stmtALTER - для ALTER DATABASE ADD - пока необрабатывается.
4. Свойство property EndLine: Integer read FEndLine; - без него очень много
приходилось делать телодвижений для вычисления последней строки текущего стейтмента.
5. Немного изменена обработка для CurrentLine (ScriptIndex) - не корректно
устанавливалась строка начала стейтмента - захватывала лидирующие комментарии.
6. Поддержка смены терминатра (SET TERM).
7. Введена поддержка RECREATE для их распознавания как DDL стейтментов.
8. Введена обработка CREATE /* */ PROCEDURE ...
9. Правка бага при котором не корректно распознавалось EXECUTE PROCEDURE внутри
триггеров и процедур.
v1.3 от 20.05.2004
1. Были проблемы с выполнением команд ALTER TRIGGER ... INACTIVE/ACTIVE.
2. Не всегда логировались DML команды.
v1.2 от 28.04.2004
1. Добавлено выполнение команды DESCRIBE, синтаксис которой идентичен синтаксису
в модуле IBEScript из IBExpert. Теперь для того, чтобы сделать описание обьекта,
достаточно написать в скрипте для таблицы:
DESCRIBE TABLE DATASETS_INFO 'Информация об источниках данных';
и для поля:
DESCRIBE FIELD NAME TABLE PRODUCTS 'Наименование';
FibScript сам подменит эти команды на соответствующие запросы к системным
таблицам.
v1.1 от 21.02.2004
1. Исправлена ошибка с выполнением некоторых DML запросов.
Copyright (c) Nikolay Trifonov, 2003-2007
E-mail: t_nick@mail.ru