Система работает в каждый момент времени над таким блоком данных:
Текущее множество записей (Имя БД+(необязательно)поисковый запрос)
Текущий mfn
Текущий номер поля
Название текущего поля
Номер повторения текущего поля
Текущее подполе (если пусто, то не используется, с 2008.1 если * то используется значение поля за вычетом подполей)
Название текущего подполя
Предыдущее значение подполя (если подполе не определено, то является значением поля)
Текущее значение подполя (если подполе не определено, то является значением поля)
Команда UNIQUE отслеживает уникальность в рамках такого набора:
[БД],[текущий номер поля],[текущее подполе]
в качестве проверки на уникальность используется текущее значение.
Т.е.,к примеру, если ее вызов происходит внутри конструкции
CHECKISIS("dbname","irbissearch")
{
CHECKFIELD(f,"desc")
{
UNIQUE();
}
}
то в этом случае проверяется уникальность поля f целиком в рамках множества записей, определяемых в конструкции CHECKISIS
Если внутри конструкции
CHECKISIS("dbname","irbissearch")
{
CHECKFIELD(f,"fdesc")
{
CHECKSUBFIELD(s,"sdesc")
{
UNIQUE();
}
}
}
то проверяется на уникальность значение подполя s поля f в рамках множества записей, определяемых в конструкции CHECKISIS.
Если поле повторяющееся (REPEATABLE()) то уникальность проверяется так же для каждого повторения поля (т.е. все повторения этого поля в рамках набора записей должны быть уникальны)
Мануал перечитаю :) заодно к 2008.1 туда добавлю информацию о новшествах.