Top.Mail.Ru
Вложенный модуль box.error | Tarantool
 

Вложенный модуль 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 выдает объект, который относится к типу cdata и содержит следующие поля:

  • «type» (строка) класс ошибки C++,
  • «code» (число) номер ошибки,
  • «message» (строка) сообщение ошибки,
  • «file» (строка) исходный файл Tarantool’а,
  • «line» (число) номер строки в исходном файле Tarantool’а,
  • «errno» (число) стандартный номер ошибки в C; это поле добавляется только в случае системной ошибки (например, по причине ошибки сокета или файлового ввода-вывода).
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()

Отображение объекта последней ошибки.

Пример

К полям объекта последней ошибки можно получить доступ следующим образом:

tarantool> box.schema.space.create('')
---
- error: Invalid identifier '' (expected printable symbols only or it is too long)
...
tarantool> box.error.last()
---
- Invalid identifier '' (expected printable symbols only or it is too long)
...
tarantool> box.error.last().code
---
- 70
...
tarantool> box.error.last().type
---
- ClientError
...
возвращает:объект последней ошибки
тип возвращаемого значения:
 cdata.
box.error.clear()

Очистка записи об ошибках, то есть функции box.error() или box.error.last() не сработают.

Пример:

tarantool> box.schema.space.create('')
---
- error: Invalid identifier '' (expected printable symbols only or it is too long)
...
tarantool> box.error.last()
---
- Invalid identifier '' (expected printable symbols only or it is too long)
...
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
...