File: assertions_for_sysvar_value.inc

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (224 lines) | stat: -rw-r--r-- 8,366 bytes parent folder | download
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
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
# ==== Purpose ====
#
# 1. Verify that a system variable has the expected value when
#    reading the @@variable.
# 2. Verify that a system variable has the expected value when
#    reading it from the performance_schema table.
# 3. Verify that a system variable has the expected VARIABLE_SOURCE
#    in performance_schema.variables.info.
# 4. Verify that a system variable has the expected value in
#     performance_schema.persisted_variables.
# 5. Verify that a system variable has the expected value in the
#    persisted variables file.
#
# ==== Usage ====
#
# --let $variable = NAME
# --let $scope = {global|session}
# --let $expect_value = VARIABLE_VALUE
# [--let $value_map = JSON_OBJECT]
# [--let $ps_value_map = JSON_OBJECT]
# [--let $mask_value = 1]
# [--let $expect_persisted_ps = {exists|noexists}]
# [--let $expect_persisted_json = {exists|noexists}]
# [--let $persisted_json = JSON_OBJECT | LOAD]
# [--let $expect_source = SOURCE]
# [--let $expect_persisted_value = {VALUE|SAME_AS_VALUE}]
# [--let $rpl_debug = 1]
# --source assertions_for_sysvar_value.inc
#
# Parameters:
#   $variable
#     The name of the variable.
#
#   $scope
#     The scope where the variable should be checked.
#     See also scenarios_for_dynamic_sysvar.inc.
#
#   $value_map, $ps_value_map, $mask_value
#     See json_sysvar_spec.inc
#
#   $expect_value
#     The value that was set for the variable.
#
#   $expect_persisted_ps
#     If set to 'exists', assert that the variable exists in
#     performance_schema.persisted_variables. If set to 'noexists',
#     assert that the variable does not exist in
#     performance_schema.persisted_variables. If not set, perform no
#     such check.
#
#   $expect_persisted_json
#     If set to 'exists', assert that the variable exists in
#     $persisted_json (see below). If set to 'noexists', assert that
#     the variable does not exist in $persisted_json. If not set,
#     perform no such check.
#
#   $persisted_json
#     If $expect_persisted_json is set, this should be set to the full
#     file contents of the persisted variables file, with single
#     quotes and backslashes escaped. Use load_persisted_json.inc. Or
#     set it to LOAD to automatically load the file.
#
#   $expect_source
#     If this is not empty, check that the VARIABLE_SOURCE field in
#     performance_schema.variables_info has this value.
#
#   $expect_persisted_value
#     Expect that the persisted value is this. Use SAME_AS_VALUE if it
#     is expected to be the same as $expect_value.  This will be
#     passed through $value_map and $ps_value_map just like
#     $expect_value.
#
#   $rpl_debug
#     Print extra debug info.

--let $assert_escape = 1

# 1. @@GLOBAL.NAME

# Get "actual" expected value from map.
#
# $expect_value should be the value that was previously set with a SET
# statement.  Usually, you see the same value in SELECT, but not
# always: e.g., after "SET variable = TRUE", "SELECT variable" will
# return 1.  And after "SET variable = 'x'" with quotes around x,
# "SELECT variable" will return x without quotes.  For such cases, the
# caller should include the transformation as an entry in $value_map,
# where the key is the value that was used in SET and the value is
# what you expect to see in SELECT.
--let $json_key = $expect_value
--let $json_object = $value_map
--let $json_lookup_output_single_quote_escaped = 1
--source include/json_lookup.inc
--let $_csv_expect_value = $json_value

# Get value from @@variable
--let $_csv_value = `SELECT @@$scope.$variable`
--let $_csv_value = escape(\',$_csv_value)

# Verify that value is expected
--let $assert_cond = '$_csv_value' = '$_csv_expect_value'
if ($mask_value) {
  --let $assert_text = @@$scope.$variable should have the expected value
}
if (!$mask_value) {
  --let $assert_text = @@$scope.$variable should be $_csv_expect_value
}
--source include/assert.inc

# 2. PERFORMANCE_SCHEMA.GLOBAL_VARIABLES

# Get "actual" expected value from map.
--let $json_key = $_csv_expect_value
--let $json_object = $ps_value_map
--source include/json_lookup.inc
--let $_csv_expect_value_ps = $json_value

# Get value from performance_schema
--let $_csv_table = _variables
--let $_csv_table = $scope$_csv_table
--let $_csv_value_ps = `SELECT VARIABLE_VALUE FROM performance_schema.$_csv_table WHERE VARIABLE_NAME = '$variable'`
--let $_csv_value_ps = escape(\',$_csv_value_ps)

# Verify that value is expected
--let $assert_cond = '$_csv_value_ps' = '$_csv_expect_value_ps'
if ($mask_value) {
  --let $assert_text = $variable should have the expected value in P_S.$_csv_table
}
if (!$mask_value) {
  --let $assert_text = $variable should be $_csv_expect_value in P_S.$_csv_table
}
--source include/assert.inc

# 3. PERFORMANCE_SCHEMA.VARIABLES_INFO/SOURCE

if ($expect_source) {
  --let $assert_cond = '[SELECT VARIABLE_SOURCE FROM performance_schema.variables_info WHERE VARIABLE_NAME = '$variable']' = '$expect_source'
  --let $assert_text = $variable should have source $expect_source in P_S.variables_info
  --source include/assert.inc
}

# 4. PERFORMANCE_SCHEMA.PERSISTED_VARIABLES

# Get expected persisted value (may be different from expected global
# value in case of set persist_only or set global).
--let $_csv_expect_persisted_value = $_csv_expect_value_ps
if ($rpl_debug) {
  --echo DEBUG: assertions_for_sysvar_value: expect_persisted_value=<$expect_persisted_value>
}
if ($expect_persisted_value != SAME_AS_VALUE) {
  --let $json_key = $expect_persisted_value
  --let $json_object = $value_map
  --let $json_lookup_output_single_quote_escaped = 0
  --source include/json_lookup.inc
  --let $json_key = $json_value
  --let $json_object = $ps_value_map
  --let $json_lookup_output_single_quote_escaped = 1
  --source include/json_lookup.inc
  --let $_csv_expect_persisted_value = $json_value
}
if ($rpl_debug) {
  --echo DEBUG: assertions_for_sysvar_value: _csv_expect_persisted_value=<$_csv_expect_persisted_value>
}

if ($expect_persisted_ps == exists) {
  # Get value from performance_schema
  --let $_csv_value_ps = `SELECT VARIABLE_VALUE FROM performance_schema.persisted_variables WHERE VARIABLE_NAME = '$variable'`
  --let $_csv_value_ps = escape(\',$_csv_value_ps)
  --let $assert_cond = '$_csv_value_ps' = '$_csv_expect_persisted_value'
  if ($mask_value) {
    --let $assert_text = $variable should have the expected value in P_S.persisted_variables
  }
  if (!$mask_value) {
    --let $assert_text = $variable should be $_csv_expect_persisted_value in P_S.persisted_variables
  }
  --source include/assert.inc
}
if ($expect_persisted_ps == noexists) {
  # Get count from performance_schema
  --let $_csv_count = `SELECT COUNT(*) FROM performance_schema.persisted_variables WHERE VARIABLE_NAME = '$variable'`
  --let $assert_cond = '$_csv_count' = '0'
  --let $assert_text = $variable should not exist in P_S.persisted_variables
  --source include/assert.inc
}

# 5. PERSISTED VARIABLES FILE

if ($expect_persisted_json != '') {
  # Read JSON from file, if required
  --let $_csv_persisted_json = $persisted_json
  if ($persisted_json == LOAD) {
    --source load_persisted_json.inc
    --let $_csv_persisted_json = $persisted_json
    --let $persisted_json = LOAD
  }
  # Verify that value exists.
  if ($expect_persisted_json == exists) {
    if ($mask_value) {
      --let $assert_text = $variable should have the expected value in the persist file
    }
    if (!$mask_value) {
      --let $assert_text = $variable should have value $_csv_expect_persisted_value in the persist file
    }

    # Variables tagged as "PERSIST_AS_READONLY" are stored in a
    # sub-document.
    if ($persist_as_readonly) {
      --let $subsection = mysql_static_variables
    }
    if (!$persist_as_readonly) {
      --let $subsection = mysql_dynamic_variables
    }
    --let $actual_value = `SELECT JSON_UNQUOTE(JSON_EXTRACT('$_csv_persisted_json', '$.$subsection.$variable.Value'))`
    --let $actual_value = escape(\',$actual_value)
    --let $assert_cond = '$actual_value' = '$_csv_expect_persisted_value'
    --source include/assert.inc
  }
  # Verify that value does not exist.
  if ($expect_persisted_json == noexists) {
    --let $assert_text = $variable should not exist in the persist file
    --let $assert_cond = JSON_CONTAINS_PATH('$_csv_persisted_json', 'one', '$.mysql_dynamic_variables.$variable') = 0
    --source include/assert.inc
  }
}