Вложенный модуль box.error
The box.error
function is for raising an error. The difference between this
function and Lua’s built-in error function
is that when the error reaches the client, its error code is preserved.
In contrast, a Lua error would always be presented to the client as
ER_PROC_LUA
.
Ниже приведен перечень всех функций модуля box.error
.
Имя | Назначение |
---|---|
box.error() | Вызов ошибки |
box.error.last() | Получение описания последней ошибки |
box.error.clear() | Очистка записи об ошибках |
box.error.new() | Создание ошибки без выдачи |
-
box.
error
{reason = string[, code = number]} При вызове с аргументом из Lua-таблицы значения параметров code и reason будут любыми по желанию пользователя. Результатом будут эти значения.
Параметры: - reason (string) – (строка) описание ошибки, задается пользователем
- code (integer) – (целое число) числовой код ошибки, задается пользователем
-
box.
error
() При вызове без аргументов
box.error()
повторно вызывает последнюю ошибку.
-
box.
error
(code, errtext[, errtext ...]) Моделирование ошибки запроса с текстом на основе одной из ошибок Tarantool’а, заданных в файле errcode.h в исходном дереве. Lua-постоянные, которые соответствуют этим ошибкам в Tarantool’е, определяются как элементы
box.error
, напримерbox.error.NO_SUCH_USER == 45
.Параметры: - code (number) – номер предварительно заданной ошибки
- errtext(s) (string) – часть сообщения, которое сопровождает ошибку
Пример:
сообщение
NO_SUCH_USER
= «User '%s' is not found
» (пользователь не найден) – оно включает в себя компонент «%s
», который будет заменен значением параметра errtext. Таким образом, вызовbox.error(box.error.NO_SUCH_USER, 'joe')
илиbox.error(45, 'joe')
приведет к ошибке с сообщением «User 'joe' is not found
» (пользователь „joe“ не найден).Исключение:: то, что указано в номере errcode. Пример:
tarantool> box.error{code = 555, reason = 'Arbitrary message'} --- - error: Arbitrary message ... tarantool> box.error() --- - error: Arbitrary message ... tarantool> box.error(box.error.FUNCTION_ACCESS_DENIED, 'A', 'B', 'C') --- - error: A access denied for user 'B' to function 'C' ...
-
box.error.
last
() Возвращает описание последней ошибки в виде Lua-таблицы с 5 элементами: «line» (число) – номер строки в исходном файле Tarantool’а, «code» (число) – номер ошибки, «type» (строка) – C++ класс ошибки, «message» (строка) – сообщение об ошибке, «file» (строка) – исходный файл Tarantool’а. Кроме того, если ошибка является системной (например, по причине ошибки в сокете или файловом вводы-выводе), может быть дополнительный шестой элемент: «errno» (число) стандартный номер ошибки на языке C.
Тип возвращаемого значения: таблица
-
box.error.
clear
() Очистка записи об ошибках, то есть функции box.error() или box.error.last() не сработают.
Пример:
tarantool> box.error{code = 555, reason = 'Arbitrary message'} --- - error: Arbitrary message ... tarantool> box.schema.space.create('#') --- - error: Invalid identifier '#' (expected letters, digits or an underscore) ... tarantool> box.error.last() --- - line: 278 code: 70 type: ClientError message: Invalid identifier '#' (expected letters, digits or an underscore) file: /tmp/buildd/tarantool-1.7.0.252.g1654e31~precise/src/box/key_def.cc ... tarantool> box.error.clear() --- ... tarantool> box.error.last() --- - null ...
-
box.error.
new
(code, errtext[, errtext ...]) Создание ошибки без выдачи. Используется, когда необходимо сохранить информацию об ошибке для последующей выборки. Используются такие же параметры, как в box.error(), см. описание по ссылке.
Параметры: - code (number) – номер предварительно заданной ошибки
- errtext(s) (string) – часть сообщения, которое сопровождает ошибку
Пример:
tarantool> e = box.error.new{code = 555, reason = 'Arbitrary message'} --- ... tarantool> e:unpack() --- - type: ClientError code: 555 message: Arbitrary message trace: - file: '[string "e = box.error.new{code = 555, reason = ''Arbit..."]' line: 1 ...