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
|
test_run = require('test_run').new()
-- User cannot create spaces with this engine.
s = box.schema.space.create('test', {engine = 'service'})
-- Check _session_settings space.
s = box.space._session_settings
s:format()
-- Make sure that we cannot drop space.
s:drop()
--
-- Make sure, that session_settings space doesn't support
-- create_index(), insert(), replace() and delete() methods.
--
s:create_index('a')
s:insert({'a', 1})
s:delete({'b'})
s:replace({'sql_defer_foreign_keys', true})
--
-- Check select() method of session_settings space. Should work
-- the same way as an ordinary space with an index of the type
-- "TREE".
--
s:select()
t = box.schema.space.create('settings', {format = s:format()})
_ = t:create_index('primary')
for _,value in s:pairs() do t:insert(value) end
test_run:cmd('setopt delimiter ";"')
function check_sorting(ss, ts, key)
local iterators_list = {'ALL', 'REQ', 'EQ', 'GE', 'GT', 'LE', 'LT'}
for _, it in pairs(iterators_list) do
local view_space = ss:select({key}, {iterator = it})
local test_space = ts:select({key}, {iterator = it})
for key, value in pairs(view_space) do
if test_space[key].name ~= value.name then
return {
err = 'bad sorting', type = it,
exp = test_space[key].name, got = value.name
}
end
end
end
end;
test_run:cmd('setopt delimiter ""');
check_sorting(s, t)
check_sorting(s, t, 'abcde')
check_sorting(s, t, 'sql_d')
check_sorting(s, t, 'sql_v')
check_sorting(s, t, 'sql_defer_foreign_keys')
t:drop()
-- Check get() method of session_settings space.
s:get({'sql_defer_foreign_keys'})
s:get({'sql_recursive_triggers'})
s:get({'sql_reverse_unordered_selects'})
s:get({'sql_default_engine'})
s:get({'abcd'})
-- Check pairs() method of session_settings space.
t = {}
for key, value in s:pairs() do table.insert(t, {key, value}) end
#t == s:count()
-- Check update() method of session_settings space.
-- Correct updates.
s:update('sql_defer_foreign_keys', {{'=', 'value', true}})
s:update({'sql_defer_foreign_keys'}, {{'=', 2, false}})
s:update('sql_default_engine', {{'=', 2, 'vinyl'}})
s:update('sql_default_engine', {{':', 'value', 1, 5, 'memtx'}})
s:update('a', {{'=', 2, 1}})
-- Inorrect updates.
s:update({{'sql_defer_foreign_keys'}}, {{'=', 'value', true}})
s:update('sql_defer_foreign_keys', {'=', 'value', true})
s:update('sql_defer_foreign_keys', {{'=', 'value', true}, {'=', 2, true}})
s:update('sql_defer_foreign_keys', {{}})
s:update('sql_defer_foreign_keys', {{'='}})
s:update('sql_defer_foreign_keys', {{'=', 'value'}})
s:update('sql_defer_foreign_keys', {{'=', 'value', true, 1}})
s:update('sql_defer_foreign_keys', {{'+', 'value', 2}})
s:update('sql_defer_foreign_keys', {{'-', 'value', 2}})
s:update('sql_defer_foreign_keys', {{'&', 'value', 2}})
s:update('sql_defer_foreign_keys', {{'|', 'value', 2}})
s:update('sql_defer_foreign_keys', {{'^', 'value', 2}})
s:update('sql_defer_foreign_keys', {{'!', 'value', 2}})
s:update('sql_defer_foreign_keys', {{'#', 'value', 2}})
s:update('sql_defer_foreign_keys', {{1, 'value', true}})
s:update('sql_defer_foreign_keys', {{{1}, 'value', true}})
s:update('sql_defer_foreign_keys', {{'=', {'value'}, true}})
s:update('sql_defer_foreign_keys', {{'=', 1, 'new_key'}})
s:update('sql_defer_foreign_keys', {{'=', 'name', 'new_key'}})
s:update('sql_defer_foreign_keys', {{'=', 3, true}})
s:update('sql_defer_foreign_keys', {{'=', 'some text', true}})
s:update('sql_defer_foreign_keys', {{'=', 'value', 1}})
s:update('sql_defer_foreign_keys', {{'=', 'value', {1}}})
s:update('sql_defer_foreign_keys', {{'=', 'value', '1'}})
-- gh-4711: Provide a user-friendly frontend for accessing session settings.
settings = box.session.settings
assert(settings ~= nil)
s:update('sql_default_engine', {{'=', 2, 'vinyl'}})
settings.sql_default_engine
settings.sql_default_engine = 'memtx'
s:get('sql_default_engine').value
settings.sql_defer_foreign_keys = true
s:get('sql_defer_foreign_keys').value
s:update('sql_defer_foreign_keys', {{'=', 2, false}})
settings.sql_defer_foreign_keys
box.execute([[set session "sql_default_engine" = 'vinyl']])
s:get('sql_default_engine').value
box.execute([[set session "sql_default_engine" = 'memtx']])
s:get('sql_default_engine').value
box.execute([[set session "sql_defer_foreign_keys" = true]])
s:get('sql_defer_foreign_keys').value
box.execute([[set session "sql_defer_foreign_keys" = false]])
s:get('sql_defer_foreign_keys').value
settings.sql_default_engine = true
settings.sql_defer_foreign_keys = 'false'
settings.sql_parser_debug = 'string'
str = string.rep('a', 20 * 1024)
box.session.settings.sql_default_engine = str
box.execute([[set session "sql_def_engine" = true]])
box.execute([[set session "sql_default_engine" = true]])
box.execute([[set session "sql_defer_foreign_keys" = 'true']])
|