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 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196
|
--
-- Insert test
--
env = require('test_run')
test_run = env.new()
space = box.schema.space.create('tweedledum')
-- Multipart primary key (sender nickname, receiver nickname, message id)
i1 = space:create_index('primary', { type = 'tree', parts = {1, 'string', 2, 'string', 3, 'unsigned'}, unique = true })
space:insert{'Vincent', 'Jules', 0, 'Do you know what they call a - a - a Quarter Pounder with cheese in Paris?'}
space:insert{'Jules', 'Vincent', 0, 'They don`t call it a Quarter Pounder with cheese?'}
space:insert{'Vincent', 'Jules', 1, 'No man, they got the metric system. They wouldn`t know what the f--k a Quarter Pounder is.'}
space:insert{'Jules', 'Vincent', 1, 'Then what do they call it?'}
space:insert{'Vincent', 'Jules', 2, 'They call it a `Royale` with cheese.'}
space:insert{'Jules', 'Vincent', 2, 'A `Royale` with cheese!'}
space:insert{'Vincent', 'Jules', 3, 'That`s right.'}
space:insert{'Jules', 'Vincent', 3, 'What do they call a Big Mac?'}
space:insert{'Vincent', 'Jules', 4, 'A Big Mac`s a Big Mac, but they call it `Le Big Mac.`'}
space:insert{'Jules', 'Vincent', 4, '`Le Big Mac!`'}
space:insert{'Vincent', 'Jules', 5, 'Ha, ha, ha.'}
space:insert{'Jules', 'Vincent', 5, 'What do they call a `Whopper`?'}
space:insert{'Vincent', 'Jules', 6, 'I dunno, I didn`t go into Burger King.'}
space:insert{'The Wolf!', 'Vincent', 0, 'Jimmie, lead the way. Boys, get to work.'}
space:insert{'Vincent', 'The Wolf!', 0, 'A please would be nice.'}
space:insert{'The Wolf!', 'Vincent', 1, 'Come again?'}
space:insert{'Vincent', 'The Wolf!', 1, 'I said a please would be nice.'}
space:insert{'The Wolf!', 'Vincent', 2, 'Get it straight buster - I`m not here to say please, I`m here to tell you what to do and if self-preservation is an instinct you possess you`d better fucking do it and do it quick. I`m here to help - if my help`s not appreciated then lotsa luck, gentlemen.'}
space:insert{'The Wolf!', 'Vincent', 3, 'I don`t mean any disrespect, I just don`t like people barking orders at me.'}
space:insert{'Vincent', 'The Wolf!', 2, 'If I`m curt with you it`s because time is a factor. I think fast, I talk fast and I need you guys to act fast if you wanna get out of this. So, pretty please... with sugar on top. Clean the fucking car.'}
--
-- Select test
--
-- Select by one entry
space.index['primary']:get{'Vincent', 'Jules', 0}
space.index['primary']:get{'Jules', 'Vincent', 0}
space.index['primary']:get{'Vincent', 'Jules', 1}
space.index['primary']:get{'Jules', 'Vincent', 1}
space.index['primary']:get{'Vincent', 'Jules', 2}
space.index['primary']:get{'Jules', 'Vincent', 2}
space.index['primary']:get{'Vincent', 'Jules', 3}
space.index['primary']:get{'Jules', 'Vincent', 3}
space.index['primary']:get{'Vincent', 'Jules', 4}
space.index['primary']:get{'Jules', 'Vincent', 4}
space.index['primary']:get{'Vincent', 'Jules', 5}
space.index['primary']:get{'Jules', 'Vincent', 5}
space.index['primary']:get{'Vincent', 'Jules', 6}
space.index['primary']:get{'The Wolf!', 'Vincent', 0}
space.index['primary']:get{'Vincent', 'The Wolf!', 0}
space.index['primary']:get{'The Wolf!', 'Vincent', 1}
space.index['primary']:get{'Vincent', 'The Wolf!', 1}
space.index['primary']:get{'The Wolf!', 'Vincent', 2}
space.index['primary']:get{'The Wolf!', 'Vincent', 3}
space.index['primary']:get{'Vincent', 'The Wolf!', 2}
-- Select all messages from Vincent to Jules
space.index['primary']:select({'Vincent', 'Jules'})
-- Select all messages from Jules to Vincent
space.index['primary']:select({'Jules', 'Vincent'})
-- Select all messages from Vincent to The Wolf
space.index['primary']:select({'Vincent', 'The Wolf!'})
-- Select all messages from The Wolf to Vincent
space.index['primary']:select({'The Wolf!', 'Vincent'})
-- Select all Vincent messages
space.index['primary']:select({'Vincent'})
--
-- Delete test
--
-- Delete some messages from the The Wolf and Vincent dialog
space:delete{'The Wolf!', 'Vincent', 0}
space:delete{'The Wolf!', 'Vincent', 3}
space:delete{'Vincent', 'The Wolf!', 0}
space:update({'Vincent', 'The Wolf!', 1}, {{ '=', 1, 'Updated' }, {'=', 5, 'New'}})
space:update({'Updated', 'The Wolf!', 1}, {{ '=', 1, 'Vincent'}, { '#', 5, 1 }})
-- Checking Vincent's last messages
space.index['primary']:select({'Vincent', 'The Wolf!'})
-- Checking The Wolf's last messages
space.index['primary']:select({'The Wolf!', 'Vincent'})
-- try to delete nonexistent message
space:delete{'Vincent', 'The Wolf!', 3}
-- try to delete patrial defined key
space:delete{'Vincent', 'The Wolf!'}
-- try to delete by invalid key
space:delete{'The Wolf!', 'Vincent', 1, 'Come again?'}
--
-- Update test
--
space:update({'The Wolf!', 'Vincent', 1}, {{'=', 4, '<ooops>'}})
space:update({'Vincent', 'The Wolf!', 1}, {{'=', 4, '<ooops>'}})
-- Checking Vincent's last messages
space.index['primary']:select({'Vincent', 'The Wolf!'})
-- Checking The Wolf's last messages
space.index['primary']:select({'The Wolf!', 'Vincent'})
-- try to update a nonexistent message
space:update({'Vincent', 'The Wolf!', 4}, {{'=', 4, '<ooops>'}})
-- try to update patrial defined key
space:update({'Vincent', 'The Wolf!'}, {{'=', 4, '<ooops>'}})
-- try to update by invalid key
space:update({'The Wolf!', 'Vincent', 1, 'Come again?'}, {{'=', 4, '<ooops>'}})
space:len()
space:truncate()
space:len()
-- A test case for Bug#1051006 Tree iterators return garbage
--if an index is modified between calls
--
space.index['primary']:drop()
i1 = space:create_index('primary', { type = 'tree', parts = {1, 'string'}, unique = true })
i2 = space:create_index('second', { type = 'tree', parts = {2, 'string', 3, 'string'}, unique = true })
space:insert{'a', 'a', 'a'}
space:insert{'d', 'd', 'd'}
space:insert{'e', 'e', 'e'}
space:insert{'b', 'b', 'b'}
space:insert{'c', 'c', 'c'}
t = {}
gen, param, state = space.index['second']:pairs(nil, { iterator = box.index.GE })
test_run:cmd("setopt delimiter ';'")
for i = 1, 2 do
state, v = gen(param, state)
table.insert(t, v)
end;
test_run:cmd("setopt delimiter ''");
t
space:truncate()
v
collectgarbage('collect')
v
param, v = gen(param, state)
v
collectgarbage('collect')
v
t = {}
test_run:cmd("setopt delimiter ';'")
for i = 1, 3 do
param, v = gen(param, state)
table.insert(t, v)
end;
test_run:cmd("setopt delimiter ''");
t
space:drop()
space = nil
-- Bug #1082356
-- Space #19, https://bugs.launchpad.net/tarantool/+bug/1082356
space = box.schema.space.create('tweedledum')
-- Multipart primary key (sender nickname, receiver nickname, message id)
i1 = space:create_index('primary', { type = 'tree', parts = {1, 'unsigned', 3, 'unsigned'}, unique = true })
space:insert{1, 1}
space:replace{1, 1}
space:drop()
-- test deletion of data one by one
space = box.schema.space.create('test')
i1 = space:create_index('primary', { type = 'tree', parts = {1, 'string'}, unique = true })
i2 = space:create_index('second', { type = 'tree', parts = {2, 'string', 3, 'string'}, unique = true })
test_run:cmd("setopt delimiter ';'")
for i = 1, 100 do
v = tostring(i)
space:insert{v, string.rep(v, 2) , string.rep(v, 3)}
end;
local pk = space.index[0]
while pk:len() > 0 do
local state, t
for state, t in pk:pairs() do
local key = {}
for _k2, parts in ipairs(pk.parts) do
table.insert(key, t[parts.fieldno])
end
space:delete(key)
end
end;
test_run:cmd("setopt delimiter ''");
space:drop()
space = nil
|