Глобальная корректировка
Глобальная корректировка (ГК) позволяет применить изменения сразу к нескольким записям в базе данных (даже ко всей базе в целом). Это очень мощный инструмент, который следует использовать с осторожностью.
Документация по глобальной корректировке доступна на сайте http://sntnarciss.ru/irbis/spravka/pril00701000000.htm
Операторы ГК
Глобальная корректировка состоит из отдельных операторов. Каждый оператор выполняет одно действие, например, добавляет в запись поле или подполе, заменяет одну строку на другое и т. д. Также существуют составные операторы, которые включают в себя несколько операторов (например, условный оператор, который в зависимости от выполнения определённых условий исполняет или нет группу операторов).
Оператор ГК в PhpIrbis
воплощён в классе GblStatement
, включающем в себя следующие поля:
Поле |
Тип |
Назначение |
---|---|---|
command |
string |
Команда, выполняемая оператором. Например, |
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
.