Skip to content

Latest commit

 

History

History
154 lines (121 loc) · 10.1 KB

chapter6.rst

File metadata and controls

154 lines (121 loc) · 10.1 KB

Глобальная корректировка

Глобальная корректировка (ГК) позволяет применить изменения сразу к нескольким записям в базе данных (даже ко всей базе в целом). Это очень мощный инструмент, который следует использовать с осторожностью.

Документация по глобальной корректировке доступна на сайте http://sntnarciss.ru/irbis/spravka/pril00701000000.htm

Операторы ГК

Глобальная корректировка состоит из отдельных операторов. Каждый оператор выполняет одно действие, например, добавляет в запись поле или подполе, заменяет одну строку на другое и т. д. Также существуют составные операторы, которые включают в себя несколько операторов (например, условный оператор, который в зависимости от выполнения определённых условий исполняет или нет группу операторов).

Оператор ГК в PhpIrbis воплощён в классе GblStatement, включающем в себя следующие поля:

Поле Тип Назначение
command string Команда, выполняемая оператором. Например, ADD или DEL.
parameter1 string Первый параметр, как правило, спецификация поля/подполя.
parameter2 string Второй параметр, как правило, спецификация повторения.
format1 string Первый формат, например, выражение для замены.
format2 string Второй формат, например, заменяющее выражение.

Класс GblStatement снабжен конструктором:

/**
 * GblStatement constructor.
 *
 * @param string $command Команда.
 * @param string $parameter1 Параметр 1.
 * @param string $parameter2 Параметр 2.
 * @param string $format1 Формат 1.
 * @param string $format2 Формат 2.
 */
 public function __construct($command,
   $parameter1 = 'XXXXXXXXX',
   $parameter2 = 'XXXXXXXXX',
   $format1 = 'XXXXXXXXX',
   $format2 = 'XXXXXXXXX')

Лишние (не нужные для данной команды) параметры можно не задавать, они автоматически будут заполнены символом X.

Пример инициализации операторов ГК (формат немного сокращен для читаемости):

$statements = array (
  new GblStatement ('ADD', '920', 'XXXX', 'ATHRA'),
  new GblStatement ('DEL', '1007', '1'),
  new GblStatement ('REP', '330^f', 'F', "(if p(v330) then if p(v330^f) then ... fi/)")
);

Настройки ГК

Настроек для ГК довольно много, поэтому они собраны в класс GblSettings, предоставляющий следующий поля:

Поле Тип Назначение
actualize bool Актуализировать записи?
autoin bool Запускать autoin.gbl?
database string Имя базы данных, на которой будет выполняться ГК.
filename string Имя файла на сервере, хранящего сценарий ГК.
formalControl string Применять формальный контроль?
lowerBound int Нижняя граница MFN для поиска обрабатываемых записей.
maxMfn int Максимальный MFN.
mfnList array Массив явно заданных MFN, на которых будет выполняться ГК.
minMfn int Минимальный MFN. 0 означает "все записи в базе".
parameters array (Опциональные) параметры ГК.
searchExpression string Поисковое выражение отбора записей по словарю.
sequentialExpression string Выражение для отбора записей последовательным поиском (опциональное).
statements array Массив операторов.
upperBound int Верхняя граница MFN для поиска обрабатываемых записей.

Если какая-либо из настроек не задана, она принимает (разумное) значение по умолчанию. Абсолютно необходимым является задание массива операторов, т. к. иначе ГК не имеет смысла.

Простой пример выполнения ГК

$settings = new Irbis\GblSettings();
$settings->database = 'IBIS';
$settings->mfnList = array(1, 2, 3);
$settings->statements = array (
  new Irbis\GblStatement(ADD_FIELD, '3000', 'XXXXXXXXX', "'Hello'")
);
$result = $connection->globalCorrection($settings);
foreach($result as $line) {
    echo "<br/>$line";
}

Построитель ГК

Для более удобного формирования массива операторов ГК можно применять класс Gbl, вынесенный в файл Gbl.php. В частности, с его помощью довольно наглядно (за счёт отступов) формируются вложенные группы операторов.

Предоставляются следующие методы:

Метод Назначение
add Добавление нового повторения поля в заданное (существующее или нет) поле.
all Дополняет записи всеми полями текущей записи.
build Выдача настроек ГК по заданным значениям.
change Замена данных в поле или в подполе.
changeWithCase Замена данных в поле или в подполе с учётом регистра символов.
comment Комментарий. Может находиться между другими операторами и содержать любой текст.
correct Из текущей записи вызывает на корректировку другие записи, отобранные по поисковым терминам из текущей или другой базы данных.
delete Удаляет поле или подполе.
deleteRecord Удаляет записи, поданные на корректировку. Не требует никаких дополнительных данных.
empty_ Очищает (опустошает) текущую запись.
if_ Определяет условие выполнения операторов, следующих за ним.
newMfn Создаёт новую запись в текущей или другой базе данных.
parameter Задание параметра ГК.
putlog Формирование пользовательского протокола.
repeat Организует цикл выполнения группы операторов.
replace Замена целиком поля или подполя на новое значение.
statement Добавление произвольного оператора к ГК.
undelete Восстанавливает удалённые записи.
undo Переход к одной из предыдущих копий записи.

Пример применения построителя.

$gbl = new \Irbis\Gbl();
$gbl->parameter('mhr.mnu', 'Укажите место хранения')
    ->comment('Это комментарий в начале')
    ->newMfn("'TEST'",
        (new \Irbis\Gbl())->add(700, "'^AἈριστοτέλης'")
            ->add(200, "'^Aアリストテレス'")
            ->add(300, "'Пробная запись'")
            ->add(920, "'PAZK'")
        )
    ->comment('Это комментарий в конце');

$settings = $gbl->build();
$settings->database = 'IBIS';
$result = $connection->globalCorrection($settings);

Сформированные настройки выдаются методом build.