/COMPATIBILITY=<опция>[,<опция> [, …]]
<опция>::=STANDARD |CASTNOLENCHECK |CASTNOLTRM |GEOPREFIX |RESIGNAL_ALL |ORACLE |BROWSE_BLOB |NOREC_EXCEPTION
STANDARD
При запуске с опцией STANDARD ядро СУБД ЛИНТЕР начинает жёстко придерживаться стандарта SQL92. Поведение ядра, запущенного без ключа с данной опцией, в некоторых случаях не совпадает со стандартом.
Отличия в работе ядра, запущенного с ключом
/COMPATIBILITY=STANDARD
:
позиционные DML-операции и работа транзакций.
При запуске с опцией
STANDARD
команды
UPDATE CURRENT
и
DELETE CURRENT
могут выполняться по собственному каналу, а не по тому каналу,
по которому был подан SELECT-запрос. Это важно для
согласованной работы транзакций.
При запуске без опции
STANDARD
команды
UPDATE CURRENT
и
DELETE CURRENT
выполняются по тому каналу, по которому был подан
соответствующий
SELECT
;
очистка канала после завершения транзакции.
При запуске с опцией
STANDARD
очистка канала по командам
COMT/RBAC
(завершение транзакции) закрывает выборку. Исключение
составляет выполнение команды
PUTM
(в СУБД ЛИНТЕР можно подавать команду
COMT
внутри потока команд пакетного добавления без завершения
транзакции), в этом случае выборка не будет закрыта.
При запуске без опции
STANDARD
после команд
COMT/ROLB
выборка не будет закрыта, следовательно, можно подавать команды
GET* по тому же каналу;
код завершения в случае обработки 0 записей.
При запуске с опцией STANDARD
всеми DML-операциями (SELECT, DELETE, UPDATE, INSERT FROM SELECT
) в случае обработки 0 записей возвращается код завершения «Нет данных» (код 2).
При запуске без опции STANDARD
в случае обработки 0 записей операциями DELETE, UPDATE, INSERT FROM SELECT
возвращается код успешного завершения (код 0), а код завершения «Нет данных» возвращается только операцией SELECT
;
выполнение операций
'CAST <выражение> AS CHAR'
в том случае, когда
<выражение>
имеет тип
REAL
или
DOUBLE
.
При запуске с опцией
STANDARD
результат выполнения описанной операции выводится в
экспоненциальной форме с усеченными нулями и без знака '+'.
При запуске без опции
STANDARD
результат выполнения описанной операции всегда выводится в
форме с десятичной точкой и без экспоненты (так же, как для
значений
DECIMAL
);
выполнение операций
'CAST <выражение> AS CHAR'
, где
<выражение>
имеет тип
DECIMAL
.
При запуске с опцией
STANDARD
при преобразовании выражения типа
DECIMAL
с указанием точности в
CHAR
выводится столько символов после запятой, сколько указано
точностью.
Без опции
STANDARD
при преобразовании
DECIMAL
в
CHAR
концевые нули всегда усекаются;
привилегии для выполнения операций
DELETE/UPDATE
.
При запуске с опцией
STANDARD
для выполнения операции
DELETE/UPDATE
над некоторой таблицей с отбором записей по
WHERE
необходима не только привилегия
DELETE/UPDATE
на эту таблицу, но и привилегия
SELECT
на нее.
При запуске без опции
STANDARD
для выполнения операции достаточно привилегии
DELETE/UPDATE
;
усечение лишних концевых пробелов в константах.
При запуске с опцией
STANDARD
перед проверкой совместимости типов происходит усечение лишних
концевых пробелов в текстовых константах.
При запуске без опции
STANDARD
перед проверкой совместимости типов усечение лишних концевых
пробелов не происходит, например, не удастся занести в CHAR(5)
константу "A " ("буква и 5 пробелов");
обязательность условия для
JOIN
.
При запуске с опцией
STANDARD
, если не задано условие соединения (ON
или
USING
) для конструкции
JOIN
без конструкций
NATURAL
и
UNION
, выдается ошибка.
При запуске без опции
STANDARD
условие соединения воспринимается, как если бы соединяемые по
JOIN
таблицы были перечислены во
FROM
через запятую;
ESC-символ по умолчанию.
При запуске с опцией
STANDARD
ESC-символа по умолчанию нет.
При запуске без опции
STANDARD
ESC-символом по умолчанию является символ '\'.
CASTNOLENCHECK
Задаёт подавление вывода кода завершения 1063
«Попытка усечения непустых символов»
при преобразовании числового значения в строковое с явным
указанием длины результата в конструкции выполнении
CAST
.
По умолчанию данный код завершения выдается.
CASTNOLTRM
Запрещает усечение ведущих пробелов при преобразовании чисел с
фиксированной точкой в строковое значение в конструкции
CAST
.
При задании ключа с данной опцией ведущие пробелы в 32-символьном представлении DECIMAL-значения не усекаются, по умолчанию – усекаются.
GEOPREFIX
Задаёт распознавание ключевых слов подсистемы геометрических данных только при наличии префикса LIN_ (например, LIN_ASTEXT вместо ASTEXT). По умолчанию воспринимаются ключевые слова без префикса LIN_, хотя некоторые из них распознаются только в определенном контексте (например, ASTEXT, если дальше следует признак функции (открывающая скобка "(")).
RESIGNAL_ALL
Заставляет некритичные исключения обрабатывать как критичные (т.е. при таком запуске ядра СУБД нет
необходимости в каждом вложенном блоке явно выполнять оператор RESIGNAL
).
Если опция RESIGNAL_ALL
задана,
то обработка некритичных исключения сразу
передается в текущий <блок обработки исключений>, при его отсутствии
– исключение будет передано на верхний уровень по иерархии.
Подробнее см. документ «СУБД ЛИНТЕР. Процедурный язык».
ORACLE
Заставляет обеспечивать идентичность обработки данных СУБД ЛИНТЕР и ORACLE по умолчанию в случаях, когда их обработка различается.
При указании данной опции:
разность дат возвращается в виде значения типа NUMERIC (в днях), а не значения типа DATE;
выдается информация о том, что в SELECT-запросе делается
попытка вызова
хранимой процедуры, содержащей вызовы запросов, отличных от SELECT
(выполнение
которых может выдавать различные результаты при последовательных
вызовах с
одними и теми же аргументами). На консоль ядра СУБД и в файл
linter.out
будут
выдаваться сообщения типа
WARNING: user function "имя_процедуры" (#ROWID) possibly contains non-SELECT query calls
результатом конкатенации символьных значений с NULL-значением будет исходная символьная строка (а не NULL-значение).
BROWSE_BLOB
Блокирует текущую запись, если в ней есть BLOB-значение по умолчанию так, как если бы был задан модификатор for browse, т.е. изменяет поведение при обнаружении конфликта доступа к BLOB-значению. В случае отсутствия ключа будет выдано диагностическое сообщение «Строка при работе с BLOB не заблокирована», а в случае его наличия будет выполнена блокировка записи.
NOREC_EXCEPTION
При выполнении оператора FETCH процедурного языка при отсутствии обработанных строк в курсоре будет сгенерировано исключение 2 (NOREC).