Top.Mail.Ru
space_object:select() | Tarantool
 

space_object:select()

space_object:select()

object space_object
space_object:select([key[, options]])

Поиск кортежа или набора кортежей в заданном спейсе. Этот метод не передает управление (детали можно найти в разделе Кооперативная многозадачность).

Параметры:
  • space_object (space_object) – ссылка на объект
  • key (scalar/table) – значение должно совпасть с индексным ключом, который может быть составным.
  • options (table/nil) –

    ни один, любой или все параметры, которые допускает index_object:select():

    • options.iterator (тип итератора)
    • options.limit (максимальное количество кортежей)
    • options.offset (количество пропускаемых кортежей)
возвращает:

кортежи, поля первичного ключа в которых равны полям переданного ключа. Если количество переданных полей меньшей количества полей первичного ключа, сопоставляются только переданные поля, то есть для select{1,2} совпадением будет кортеж с первичным ключом {1,2,3}.

тип возвращаемого значения:
 

массив кортежей

Запрос выборки select также можно выполнить со специальными параметрами индекса, которые указаны в index_object:select().

Возможные ошибки:

  • нет такого спейса;
  • неверный тип.

Факторы сложности: Размер индекса, тип индекса

Пример:

tarantool> s = box.schema.space.create('tmp', {temporary=true})
---
...
tarantool> s:create_index('primary',{parts = { {field = 1, type = 'unsigned'}, {field = 2, type = 'string'}} })
---
...
tarantool> s:insert{1,'A'}
---
- [1, 'A']
...
tarantool> s:insert{1,'B'}
---
- [1, 'B']
...
tarantool> s:insert{1,'C'}
---
- [1, 'C']
...
tarantool> s:insert{2,'D'}
---
- [2, 'D']
...
tarantool> -- необходимо совпадение с двумя полями первичного ключа
tarantool> s:select{1,'B'}
---
- - [1, 'B']
...
tarantool> -- необходимо совпадение только одного поля первичного ключа
tarantool> s:select{1}
---
- - [1, 'A']
  - [1, 'B']
  - [1, 'C']
...
tarantool> -- необходимо совпадение с 0 полей, поэтому возвращает все кортежи
tarantool> s:select{}
---
- - [1, 'A']
  - [1, 'B']
  - [1, 'C']
  - [2, 'D']
...
tarantool> -- первое поле должно быть больше 0,
tarantool> -- пропуск первого кортежа и возврат до
tarantool> -- 2 кортежей. Все параметры в данном примере
tarantool> -- зависят от характеристик индекса, поэтому см.
tarantool> -- более подробное описание в index_object:select().
tarantool> s:select({0},{iterator='GT',offset=1,limit=2})
---
- - [1, 'B']
  - [1, 'C']
...

Как показано в последнем запросе вышеприведенного примера, чтобы выполнять сложные запросы выборки select, где можно указать, в каком индексе производится поиск и с какими условиями (например, «больше, чем» вместо «равный»), а также необходимое количество возвращаемых кортежей, необходимо ознакомиться с index_object:select().

Помните, что из кортежа можно получить поле как по номеру поля, так и по имени поля, что более удобно. См. пример: использование имен вместо номеров полей.

Для получения дополнительной информации о сценариях использования и типичных ошибках, см. Пример: использование операций с данными далее в разделе.