Индекс модулей
Итератор спейса
Определяет способ итерации по кортежам в индексе. Разные типы индексов поддерживают разные типы итераторов. Например, можно начать итерацию с определённого значения (ключа запроса), а затем получить все кортежи, ключи которых больше или равны (= GE) этому ключу.
Если тип итератора не поддерживается выбранным типом индекса, конструктор итератора должен завершаться ошибкой ER_UNSUPPORTED. Чтобы индекс можно было выбрать для первичного ключа, он должен поддерживать как минимум типы ITER_EQ и ITER_GE.
Значение NULL для ключа запроса соответствует первому или последнему ключу в индексе в зависимости от направления итерации (первому ключу для типов GE и GT и последнему ключу для LE и LT). Поэтому для итерации по всем кортежам индекса можно использовать типы итерации ITER_GE или ITER_LE с начальным ключом, равным NULL. Для ITER_EQ ключ не должен быть равен NULL.
ключ == x, порядок ASC
ключ == x, порядок DESC
все кортежи
ключ < x
ключ <= x
ключ >= x
ключ > x
все биты из x установлены в ключе
установлен хотя бы один бит x
все биты не установлены
ключ пересекается с x
кортежи в порядке возрастания расстояния от указанной точки
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
Получить следующий элемент из iterator.
Параметры:
-
iterator(box_iterator_t*) — итератор, возвращённый box_index_iterator -
result(box_tuple_t**) — выходной аргумент. Результат — кортеж или NULL, если данных больше нет.
Возвращает
-1 в случае ошибки (проверить box_error_last)
Возвращает
0 в случае успеха. Конец данных не является ошибкой.
Уничтожить итератор и освободить память.
Параметры:
iterator(box_iterator_t*) — итератор, возвращённый box_index_iterator
Определить направление заданного типа итератора: -1 для REQ, LT, LE и +1 для всех остальных.
Вернуть число элементов в индексе.
Параметры:
-
space_id(uint32_t) — идентификатор спейса -
index_id(uint32_t) — идентификатор индекса
Возвращает
-1 в случае ошибки (проверить box_error_last)
Возвращает
= 0 в противном случае
Вернуть объём памяти в байтах, занимаемый индексом.
Параметры:
-
space_id(uint32_t) — идентификатор спейса -
index_id(uint32_t) — идентификатор индекса
Возвращает
-1 в случае ошибки (проверить box_error_last)
Возвращает
= 0 в противном случае
Вернуть случайный кортеж из индекса (полезно для статистического анализа).
Параметры:
-
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()
Вернуть определение ключа для индекса
Возвращённый объект действителен до следующей передачи управления.
Параметры:
-
space_id(uint32_t) — идентификатор спейса -
index_id(uint32_t) — идентификатор индекса
Возвращает
определение ключа в случае успеха
Возвращает
NULL в случае ошибки
См. также: box_tuple_compare(), box_tuple_format_new()