File: session_settings.test.lua

package info (click to toggle)
tarantool 2.6.0-1.4
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 85,412 kB
  • sloc: ansic: 513,775; cpp: 69,493; sh: 25,650; python: 19,190; perl: 14,973; makefile: 4,178; yacc: 1,329; sql: 1,074; pascal: 620; ruby: 190; awk: 18; lisp: 7
file content (141 lines) | stat: -rw-r--r-- 4,893 bytes parent folder | download | duplicates (3)
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']])