Версия:

Справочники / Tips on Lua syntax
Справочники / Tips on Lua syntax

Tips on Lua syntax

Tips on Lua syntax

Lua-синтаксис в функциях управления данными может различаться. Далее приводятся варианты таких различий на примере запросов select(). Аналогичные правила существуют и для остальных функций.

В каждом из приведенных примеров выполняются следующие действия: производится выборка по набору кортежей из спейса с именем „tester“, где значение поля, которое соответствует ключу в первичном индексе, равно 1. Также во всех примерах мы принимаем, что числовой идентификатор спейса „tester“ равен 512, но это верно только для нашей тестовой базы.

Способы ссылки на объект

Во-первых, есть пять способов ссылки на объект:

-- #1 модуль.подмодуль.имя
        tarantool> box.space.tester:select{1}
        -- #2 заменить имя буквенной константой в квадратных скобках
        tarantool> box.space['tester']:select{1}
        -- #3 использовать переменную для всей ссылки на объект
        tarantool> s = box.space.tester
        tarantool> s:select{1}

Для примеров в документации, как правило, используется вариант синтаксиса №1, например «box.space.tester:». Но вы можете с тем же успехом пользоваться любым из пяти описанных выше вариантов.

Также описания в руководстве используют синтаксис типа «space_object:» для ссылки на спейсы и «index_object:» для ссылки на индексы (например, box.space.tester.index.primary:).

Способы задания параметров

Затем есть семь способов задания параметров:

-- #1
        tarantool> box.space.tester:select{1}
        -- #2
        tarantool> box.space.tester:select({1})
        -- #3
        tarantool> box.space.tester:select(1)
        -- #4
        tarantool> box.space.tester.select(box.space.tester,1)
        -- #5
        tarantool> box.space.tester:select({1},{iterator='EQ'})
        -- #6
        tarantool> variable = 1
        tarantool> box.space.tester:select{variable}
        -- #7
        tarantool> variable = {1}
        tarantool> box.space.tester:select(variable)

Lua allows to omit parentheses () when invoking a function if its only argument is a Lua table, and we use it sometimes in our examples. This is why select{1} is equivalent to select({1}). Literal values such as 1 (a scalar value) or {1} (a Lua table value) may be replaced by variable names, as in examples #6 and #7.

Although there are special cases where braces can be omitted, they are preferable because they signal «Lua table». Examples and descriptions in this manual have the {1} form. However, this too is a matter of user preference and all the variations exist in the wild.

Rules for object names

Database objects have loose rules for names: the maximum length is 65000 bytes (not characters), and almost any legal Unicode character is allowed, including spaces, ideograms and punctuation.

In those cases, to prevent confusion with Lua operators and separators, object references should have the literal-in-square-brackets form (#2), or the variable form (#3). For example:

tarantool> box.space['1*A']:select{1}
tarantool> s = box.space['1*A !@$%^&*()_+12345678901234567890']
tarantool> s:select{1}

Disallowed:

  • characters which are unassigned code points,
  • line and paragraph separators,
  • control characters,
  • the replacement character (U+FFFD).

Not recommended: characters which cannot be displayed.

Names are «case sensitive», so „A“ and „a“ are not the same.