создаём индекс на нём (кстати, попробуйте заметить, где ошибка):
tarantool> sp = box.schema.create_space('some_space', {if_not_exists = true})
---
...
tarantool> sp:create_index('ci', {parts = {2, 'string', collation='unicode_ci'}, if_not_exists = true})
---
- unique: true
parts:
- type: string
is_nullable: false
fieldno: 2
id: 0
space_id: 529
name: ci
type: TREE
...
Заносим в спейс какие-то данные, потом выбираем их. Вроде работает:
tarantool> sp.index.ci:select({'kaboom'})
---
- - [1, 'kaboom']
...
Но не совсем так, как хотелось:
tarantool> sp.index.ci:select({'KAbOoM'})
---
- []
...
Исправляем ошибку, теперь работает:
tarantool> sp.index.ci:alter({parts={{2, 'string', collation='unicode_ci'}}})
---
...
tarantool> sp.index.ci:select({'kAbOoM'})
---
- - [1, 'kaboom']
...
Вопрос: почему create_index позволяет вызвать себя с параметром, не соответствующим формату и при этом не ругается и игнорит collation? Это бага или так специально сделано? В аналогичной ситуации space:update({1},{'=',2,'kaboom!'}) например говорит error: Illegal parameters, update operation must be an array {op,..}.
Совметимость со старым форматом аргумента: {num, type, num, type, ...}. Но на нечисловые ключи можно было б проверить, я считаю. Достойно тикета.
Обсуждают сегодня