Tarantool CE/EE Documentation portal logo
Помощь
Обновлена 15 сентября 2026 г. в 08:55

Индекс модулей

type box_iterator_t

Итератор спейса

enum iterator_type

Определяет способ итерации по кортежам в индексе. Разные типы индексов поддерживают разные типы итераторов. Например, можно начать итерацию с определённого значения (ключа запроса), а затем получить все кортежи, ключи которых больше или равны (= GE) этому ключу.

Если тип итератора не поддерживается выбранным типом индекса, конструктор итератора должен завершаться ошибкой ER_UNSUPPORTED. Чтобы индекс можно было выбрать для первичного ключа, он должен поддерживать как минимум типы ITER_EQ и ITER_GE.

Значение NULL для ключа запроса соответствует первому или последнему ключу в индексе в зависимости от направления итерации (первому ключу для типов GE и GT и последнему ключу для LE и LT). Поэтому для итерации по всем кортежам индекса можно использовать типы итерации ITER_GE или ITER_LE с начальным ключом, равным NULL. Для ITER_EQ ключ не должен быть равен NULL.

enumerator ITER_EQ

ключ == x, порядок ASC

enumerator ITER_REQ

ключ == x, порядок DESC

enumerator ITER_ALL

все кортежи

enumerator ITER_LT

ключ < x

enumerator ITER_LE

ключ <= x

enumerator ITER_GE

ключ >= x

enumerator ITER_GT

ключ > x

enumerator ITER_BITS_ALL_SET

все биты из x установлены в ключе

enumerator ITER_BITS_ANY_SET

установлен хотя бы один бит x

enumerator ITER_BITS_ALL_NOT_SET

все биты не установлены

enumerator ITER_OVERLAPS

ключ пересекается с x

enumerator ITER_NEIGHBOR

кортежи в порядке возрастания расстояния от указанной точки

box_iterator_t *box_index_iterator(uint32_t space_id, uint32_t index_id, int type, const char *key, const char *key_end)

Выделить память и инициализировать итератор для space_id, index_id.

Возвращённый итератор необходимо уничтожить с помощью box_iterator_free.

Параметры:

  • space_id (uint32_t) — идентификатор спейса

  • index_id (uint32_t) — идентификатор индекса

  • type (int) — iterator_type

  • key (const char*) — ключ, закодированный в формате MsgPack Array ([part1, part2, ...])

  • key_end (const char*) — конец закодированного key

Возвращает

NULL в случае ошибки (проверить box_error_last)

Возвращает

итератор в противном случае

См. также box_iterator_next, box_iterator_free

int box_iterator_next(box_iterator_t *iterator, box_tuple_t **result)

Получить следующий элемент из iterator.

Параметры:

  • iterator (box_iterator_t*) — итератор, возвращённый box_index_iterator

  • result (box_tuple_t**) — выходной аргумент. Результат — кортеж или NULL, если данных больше нет.

Возвращает

-1 в случае ошибки (проверить box_error_last)

Возвращает

0 в случае успеха. Конец данных не является ошибкой.

void box_iterator_free(box_iterator_t *iterator)

Уничтожить итератор и освободить память.

Параметры:

  • iterator (box_iterator_t*) — итератор, возвращённый box_index_iterator

int iterator_direction(enum iterator_type type)

Определить направление заданного типа итератора: -1 для REQ, LT, LE и +1 для всех остальных.

ssize_t box_index_len(uint32_t space_id, uint32_t index_id)

Вернуть число элементов в индексе.

Параметры:

  • space_id (uint32_t) — идентификатор спейса

  • index_id (uint32_t) — идентификатор индекса

Возвращает

-1 в случае ошибки (проверить box_error_last)

Возвращает

= 0 в противном случае

ssize_t box_index_bsize(uint32_t space_id, uint32_t index_id)

Вернуть объём памяти в байтах, занимаемый индексом.

Параметры:

  • space_id (uint32_t) — идентификатор спейса

  • index_id (uint32_t) — идентификатор индекса

Возвращает

-1 в случае ошибки (проверить box_error_last)

Возвращает

= 0 в противном случае

int box_index_random(uint32_t space_id, uint32_t index_id, uint32_t rnd, box_tuple_t **result)

Вернуть случайный кортеж из индекса (полезно для статистического анализа).

Параметры:

  • space_id (uint32_t) — идентификатор спейса

  • index_id (uint32_t) — идентификатор индекса

  • rnd (uint32_t) — начальное значение для генератора случайных чисел

  • result (box_tuple_t**) — выходной аргумент. Результат — кортеж или NULL, если в спейсе нет кортежей

См. также: index_object:random()

int box_index_get(uint32_t space_id, uint32_t index_id, const char *key, const char *key_end, box_tuple_t **result)

Получить кортеж из индекса по ключу.

Обратите внимание, что эта функция работает значительно быстрее, чем index_object:select() или box_index_iterator + box_iterator_next.

Параметры:

  • space_id (uint32_t) — идентификатор спейса

  • index_id (uint32_t) — идентификатор индекса

  • key (const char*) — ключ, закодированный в формате MsgPack Array ([part1, part2, ...])

  • key_end (const char*) — конец закодированного key

  • result (box_tuple_t**) — выходной аргумент. Результат — кортеж или NULL, если в спейсе нет кортежей

Возвращает

-1 в случае ошибки (проверить box_error_last)

Возвращает

0 в случае успеха

См. также: index_object.get()

int box_index_min(uint32_t space_id, uint32_t index_id, const char *key, const char *key_end, box_tuple_t **result)

Вернуть первый (минимальный) кортеж, соответствующий заданному ключу.

Параметры:

  • space_id (uint32_t) — идентификатор спейса

  • index_id (uint32_t) — идентификатор индекса

  • key (const char*) — ключ, закодированный в формате MsgPack Array ([part1, part2, ...])

  • key_end (const char*) — конец закодированного key

  • result (box_tuple_t**) — выходной аргумент. Результат — кортеж или NULL, если в спейсе нет кортежей

Возвращает

-1 в случае ошибки (проверить box_error_last())

Возвращает

0 в случае успеха

См. также: index_object:min()

int box_index_max(uint32_t space_id, uint32_t index_id, const char *key, const char *key_end, box_tuple_t **result)

Вернуть последний (максимальный) кортеж, соответствующий заданному ключу.

Параметры:

  • space_id (uint32_t) — идентификатор спейса

  • index_id (uint32_t) — идентификатор индекса

  • key (const char*) — ключ, закодированный в формате MsgPack Array ([part1, part2, ...])

  • key_end (const char*) — конец закодированного key

  • result (box_tuple_t**) — выходной аргумент. Результат — кортеж или NULL, если в спейсе нет кортежей

Возвращает

-1 в случае ошибки (проверить box_error_last())

Возвращает

0 в случае успеха

См. также: index_object:max()

ssize_t box_index_count(uint32_t space_id, uint32_t index_id, int type, const char *key, const char *key_end)

Подсчитать число кортежей, соответствующих заданному ключу.

Параметры:

  • space_id (uint32_t) — идентификатор спейса

  • index_id (uint32_t) — идентификатор индекса

  • type (int) — iterator_type

  • key (const char*) — ключ, закодированный в формате MsgPack Array ([part1, part2, ...])

  • key_end (const char*) — конец закодированного key

Возвращает

-1 в случае ошибки (проверить box_error_last())

Возвращает

=0 в противном случае

См. также: index_object.count()

const box_key_def_t *box_index_key_def(uint32_t space_id, uint32_t index_id)

Вернуть определение ключа для индекса

Возвращённый объект действителен до следующей передачи управления.

Параметры:

  • space_id (uint32_t) — идентификатор спейса

  • index_id (uint32_t) — идентификатор индекса

Возвращает

определение ключа в случае успеха

Возвращает

NULL в случае ошибки

См. также: box_tuple_compare(), box_tuple_format_new()