Версия:

Вложенный модуль box.error

Вложенный модуль box.error

Общие сведения

Функция box.error предназначена для вызова ошибки. Разница между этой функцией и встроенной Lua-функцией error в том, что когда клиент получает ошибку, код ошибки сохраняется. В отличие от этого, ошибки в Lua всегда передаются на клиент в виде 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 будут любыми по желанию пользователя. Результатом будут эти значения.

Параметры:
  • code (integer) –
  • reason (string) –
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
...