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

Вложенный модуль 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 throws an object that has the cdata type and contain the following fields:

  • «type» (string) error’s C++ class,
  • «code» (number) error’s number,
  • «message» (string) error’s message,
  • «file» (string) Tarantool source file,
  • «line» (number) line number in the Tarantool source file,
  • «errno» (number) C standard error number; this field is added only if the error is a system error (for example, due to a failure in a socket or file i/o).
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()

Show the last error object.

Example

You can reach the last error object’s fields like this:

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
...
возвращает:the last error object
тип возвращаемого значения:
 cdata.
box.error.clear()

Clear the record of errors, so functions like box.error() or box.error.last() will have no effect.

Пример:

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
...