Версия:

Модуль index

Модуль index

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 в порядке возрастания

enumerator ITER_REQ

ключ == x в порядке убывания

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
  • char* key (const) – кодировка ключа в формате MsgPack-массива ([part1, part2, …])
  • char* key_end (const) – часть закодированного ключа 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)

Удаление и освобождение итератора.

Параметры:
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) – идентификатор индекса
  • char* key (const) – кодировка ключа в формате MsgPack-массива ([part1, part2, …])
  • char* key_end (const) – часть закодированного ключа 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) – идентификатор индекса
  • char* key (const) – кодировка ключа в формате MsgPack-массива ([part1, part2, …])
  • char* key_end (const) – часть закодированного ключа 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) – идентификатор индекса
  • char* key (const) – кодировка ключа в формате MsgPack-массива ([part1, part2, …])
  • char* key_end (const) – часть закодированного ключа 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
  • char* key (const) – кодировка ключа в формате MsgPack-массива ([part1, part2, …])
  • char* key_end (const) – часть закодированного ключа 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()