Версия:

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

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

Overview

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

Index

Ниже приведен перечень всех функций модуля box.error.

Name Use
box.error() Вызов ошибки
box.error.last() Получение описания последней ошибки
box.error.clear() Очистка записи об ошибках
box.error.new() Создание ошибки без выдачи
box.error{reason = string[, code = number]}

При вызове с аргументом из Lua-таблицы значения параметров code и reason будут любыми по желанию пользователя. Результатом будут эти значения.

Параметры:
  • reason (string) – description of an error, defined by user
  • code (integer) – numeric code for this error, defined by user
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) – часть сообщения, которое сопровождает ошибку

For example:

сообщение 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.

Example:

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() не сработают.

Example:

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) – часть сообщения, которое сопровождает ошибку

Example:

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