1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
|
utils = dofile('utils.lua')
---
...
hash = box.schema.space.create('tweedledum')
---
...
tmp = hash:create_index('primary', { type = 'hash', parts = {1, 'unsigned', 2, 'string', 3, 'unsigned'}, unique = true })
---
...
tmp = hash:create_index('unique', { type = 'hash', parts = {3, 'unsigned', 5, 'unsigned'}, unique = true })
---
...
-- insert rows
hash:insert{0, 'foo', 0, '', 1}
---
- [0, 'foo', 0, '', 1]
...
hash:insert{0, 'foo', 1, '', 1}
---
- [0, 'foo', 1, '', 1]
...
hash:insert{1, 'foo', 0, '', 2}
---
- [1, 'foo', 0, '', 2]
...
hash:insert{1, 'foo', 1, '', 2}
---
- [1, 'foo', 1, '', 2]
...
hash:insert{0, 'bar', 0, '', 3}
---
- [0, 'bar', 0, '', 3]
...
hash:insert{0, 'bar', 1, '', 3}
---
- [0, 'bar', 1, '', 3]
...
hash:insert{1, 'bar', 0, '', 4}
---
- [1, 'bar', 0, '', 4]
...
hash:insert{1, 'bar', 1, '', 4}
---
- [1, 'bar', 1, '', 4]
...
-- try to insert a row with a duplicate key
hash:insert{1, 'bar', 1, '', 5}
---
- error: Duplicate key exists in unique index 'primary' in space 'tweedledum'
...
-- output all rows
env = require('test_run')
---
...
test_run = env.new()
---
...
test_run:cmd("setopt delimiter ';'")
---
- true
...
function select_all()
local result = {}
local tuple, v
for tuple, v in hash:pairs() do
table.insert(result, v)
end
return result
end;
---
...
test_run:cmd("setopt delimiter ''");
---
- true
...
utils.sort(select_all())
---
- - [0, 'bar', 0, '', 3]
- [0, 'bar', 1, '', 3]
- [0, 'foo', 0, '', 1]
- [0, 'foo', 1, '', 1]
- [1, 'bar', 0, '', 4]
- [1, 'bar', 1, '', 4]
- [1, 'foo', 0, '', 2]
- [1, 'foo', 1, '', 2]
...
select_all = nil
---
...
-- primary index select
hash.index['primary']:get{1, 'foo', 0}
---
- [1, 'foo', 0, '', 2]
...
hash.index['primary']:get{1, 'bar', 0}
---
- [1, 'bar', 0, '', 4]
...
-- primary index select with missing part
hash.index['primary']:get{1, 'foo'}
---
- error: Invalid key part count in an exact match (expected 3, got 2)
...
-- primary index select with extra part
hash.index['primary']:get{1, 'foo', 0, 0}
---
- error: Invalid key part count in an exact match (expected 3, got 4)
...
-- primary index select with wrong type
hash.index['primary']:get{1, 'foo', 'baz'}
---
- error: 'Supplied key type of part 2 does not match index part type: expected unsigned'
...
-- secondary index select
hash.index['unique']:get{1, 4}
---
- [1, 'bar', 1, '', 4]
...
-- secondary index select with no such key
hash.index['unique']:get{1, 5}
---
...
-- secondary index select with missing part
hash.index['unique']:get{1}
---
- error: Invalid key part count in an exact match (expected 2, got 1)
...
-- secondary index select with wrong type
hash.index['unique']:select{1, 'baz'}
---
- error: 'Supplied key type of part 1 does not match index part type: expected unsigned'
...
-- cleanup
hash:truncate()
---
...
hash:len()
---
- 0
...
hash:drop()
---
...
|