View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  package org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar;
19  
20  import lombok.Getter;
21  import lombok.RequiredArgsConstructor;
22  import org.apache.shardingsphere.db.protocol.constant.DatabaseProtocolServerInfo;
23  import org.apache.shardingsphere.infra.exception.mysql.exception.ErrorGlobalVariableException;
24  import org.apache.shardingsphere.infra.exception.mysql.exception.ErrorLocalVariableException;
25  import org.apache.shardingsphere.infra.exception.mysql.exception.IncorrectGlobalLocalVariableException;
26  import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
27  import org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
28  import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
29  import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.provider.TransactionIsolationValueProvider;
30  import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.provider.TransactionReadOnlyValueProvider;
31  import org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor.sysvar.provider.VersionValueProvider;
32  import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
33  
34  import java.util.Arrays;
35  import java.util.Map;
36  import java.util.Optional;
37  import java.util.function.Function;
38  import java.util.stream.Collectors;
39  
40  /**
41   * MySQL system variable.
42   */
43  @RequiredArgsConstructor
44  public enum MySQLSystemVariable {
45      
46      ACTIVATE_ALL_ROLES_ON_LOGIN(Flag.GLOBAL, "0"),
47      
48      ADMIN_ADDRESS(Flag.GLOBAL | Flag.READONLY, ""),
49      
50      ADMIN_PORT(Flag.GLOBAL | Flag.READONLY, "33062"),
51      
52      ADMIN_SSL_CA(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
53      
54      ADMIN_SSL_CAPATH(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
55      
56      ADMIN_SSL_CERT(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
57      
58      ADMIN_SSL_CIPHER(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
59      
60      ADMIN_SSL_CRL(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
61      
62      ADMIN_SSL_CRLPATH(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
63      
64      ADMIN_SSL_KEY(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
65      
66      ADMIN_TLS_CIPHERSUITES(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
67      
68      ADMIN_TLS_VERSION(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "TLSv1.2,TLSv1.3"),
69      
70      AUTHENTICATION_POLICY(Flag.GLOBAL, "*,,"),
71      
72      AUTO_GENERATE_CERTS(Flag.GLOBAL | Flag.READONLY, "1"),
73      
74      AUTO_INCREMENT_INCREMENT(Flag.SESSION | Flag.HINT_UPDATEABLE, "1"),
75      
76      AUTO_INCREMENT_OFFSET(Flag.SESSION | Flag.HINT_UPDATEABLE, "1"),
77      
78      // TODO Get or set session value.
79      AUTOCOMMIT(Flag.SESSION, "1"),
80      
81      AUTOMATIC_SP_PRIVILEGES(Flag.GLOBAL, "1"),
82      
83      AVOID_TEMPORAL_UPGRADE(Flag.GLOBAL, "0"),
84      
85      BACK_LOG(Flag.GLOBAL | Flag.READONLY, "0"),
86      
87      BASEDIR(Flag.GLOBAL | Flag.READONLY, ""),
88      
89      BIG_TABLES(Flag.SESSION | Flag.HINT_UPDATEABLE, "0"),
90      
91      BIND_ADDRESS(Flag.GLOBAL | Flag.READONLY, "*"),
92      
93      BINLOG_CACHE_SIZE(Flag.GLOBAL, "32768"),
94      
95      BINLOG_CHECKSUM(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "CRC32"),
96      
97      BINLOG_DIRECT_NON_TRANSACTIONAL_UPDATES(Flag.SESSION, "0"),
98      
99      BINLOG_ENCRYPTION(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "0"),
100     
101     BINLOG_ERROR_ACTION(Flag.GLOBAL, "ABORT_SERVER"),
102     
103     BINLOG_EXPIRE_LOGS_AUTO_PURGE(Flag.GLOBAL, "1"),
104     
105     BINLOG_EXPIRE_LOGS_SECONDS(Flag.GLOBAL, "2592000"),
106     
107     BINLOG_FORMAT(Flag.SESSION, "ROW"),
108     
109     BINLOG_GROUP_COMMIT_SYNC_DELAY(Flag.GLOBAL, "0"),
110     
111     BINLOG_GROUP_COMMIT_SYNC_NO_DELAY_COUNT(Flag.GLOBAL, "0"),
112     
113     BINLOG_GTID_SIMPLE_RECOVERY(Flag.GLOBAL | Flag.READONLY, "1"),
114     
115     BINLOG_MAX_FLUSH_QUEUE_TIME(Flag.GLOBAL, "0"),
116     
117     BINLOG_ORDER_COMMITS(Flag.GLOBAL, "1"),
118     
119     BINLOG_ROTATE_ENCRYPTION_MASTER_KEY_AT_STARTUP(Flag.GLOBAL | Flag.READONLY, "0"),
120     
121     BINLOG_ROW_EVENT_MAX_SIZE(Flag.GLOBAL | Flag.READONLY, "8192"),
122     
123     BINLOG_ROW_IMAGE(Flag.SESSION, "FULL"),
124     
125     BINLOG_ROW_METADATA(Flag.GLOBAL, "MINIMAL"),
126     
127     BINLOG_ROW_VALUE_OPTIONS(Flag.SESSION, ""),
128     
129     BINLOG_ROWS_QUERY_LOG_EVENTS(Flag.SESSION, "0"),
130     
131     BINLOG_STMT_CACHE_SIZE(Flag.GLOBAL, "32768"),
132     
133     BINLOG_TRANSACTION_COMPRESSION(Flag.SESSION, "0"),
134     
135     BINLOG_TRANSACTION_COMPRESSION_LEVEL_ZSTD(Flag.SESSION, "3"),
136     
137     BINLOG_TRANSACTION_DEPENDENCY_HISTORY_SIZE(Flag.GLOBAL, "25000"),
138     
139     BINLOG_TRANSACTION_DEPENDENCY_TRACKING(Flag.GLOBAL, "COMMIT_ORDER"),
140     
141     BLOCK_ENCRYPTION_MODE(Flag.SESSION, "aes-128-ecb"),
142     
143     BUILD_ID(Flag.GLOBAL | Flag.READONLY, ""),
144     
145     BULK_INSERT_BUFFER_SIZE(Flag.SESSION | Flag.HINT_UPDATEABLE, "8388608"),
146     
147     // TODO Properly handling character set of session.
148     CHARACTER_SET_CLIENT(Flag.SESSION, "utf8mb4"),
149     
150     CHARACTER_SET_CONNECTION(Flag.SESSION, "utf8mb4"),
151     
152     CHARACTER_SET_DATABASE(Flag.SESSION, "utf8mb4"),
153     
154     CHARACTER_SET_FILESYSTEM(Flag.SESSION, "binary"),
155     
156     CHARACTER_SET_RESULTS(Flag.SESSION, "utf8mb4"),
157     
158     CHARACTER_SET_SERVER(Flag.SESSION, "utf8mb4"),
159     
160     CHARACTER_SET_SYSTEM(Flag.GLOBAL | Flag.READONLY, "utf8mb4"),
161     
162     CHARACTER_SETS_DIR(Flag.GLOBAL | Flag.READONLY, ""),
163     
164     CHECK_PROXY_USERS(Flag.GLOBAL, "0"),
165     
166     COLLATION_CONNECTION(Flag.SESSION, "utf8mb4_unicode_ci"),
167     
168     COLLATION_DATABASE(Flag.SESSION, "utf8mb4_unicode_ci"),
169     
170     COLLATION_SERVER(Flag.SESSION, "utf8mb4_unicode_ci"),
171     
172     COMPLETION_TYPE(Flag.SESSION, "NO_CHAIN"),
173     
174     CONCURRENT_INSERT(Flag.GLOBAL, "AUTO"),
175     
176     CONNECT_TIMEOUT(Flag.GLOBAL, "10"),
177     
178     CONNECTION_MEMORY_CHUNK_SIZE(Flag.SESSION, "8912"),
179     
180     CONNECTION_MEMORY_LIMIT(Flag.SESSION, "18446744073709551615"),
181     
182     CORE_FILE(Flag.GLOBAL | Flag.READONLY, "0"),
183     
184     CREATE_ADMIN_LISTENER_THREAD(Flag.GLOBAL | Flag.READONLY, "0"),
185     
186     CTE_MAX_RECURSION_DEPTH(Flag.SESSION | Flag.HINT_UPDATEABLE, "1000"),
187     
188     DATADIR(Flag.GLOBAL | Flag.READONLY, ""),
189     
190     // DEBUG(Flag.SESSION, "TODO"),
191     
192     DEBUG_SENSITIVE_SESSION_STRING(Flag.SESSION | Flag.SENSITIVE, ""),
193     
194     // DEBUG_SYNC(Flag.ONLY_SESSION, "TODO"),
195     
196     DEFAULT_AUTHENTICATION_PLUGIN(Flag.GLOBAL | Flag.READONLY, "caching_sha2_password"),
197     
198     DEFAULT_COLLATION_FOR_UTF8MB4(Flag.SESSION, "utf8mb4_unicode_ci"),
199     
200     DEFAULT_PASSWORD_LIFETIME(Flag.GLOBAL, "0"),
201     
202     DEFAULT_STORAGE_ENGINE(Flag.SESSION, ""),
203     
204     DEFAULT_TABLE_ENCRYPTION(Flag.SESSION | Flag.HINT_UPDATEABLE, "0"),
205     
206     DEFAULT_TMP_STORAGE_ENGINE(Flag.SESSION | Flag.HINT_UPDATEABLE, ""),
207     
208     DEFAULT_WEEK_FORMAT(Flag.SESSION, "0"),
209     
210     DELAY_KEY_WRITE(Flag.GLOBAL, "ON"),
211     
212     DELAYED_INSERT_LIMIT(Flag.GLOBAL, "100"),
213     
214     DELAYED_INSERT_TIMEOUT(Flag.GLOBAL, "300"),
215     
216     DELAYED_QUEUE_SIZE(Flag.GLOBAL, "1000"),
217     
218     DISABLED_STORAGE_ENGINES(Flag.GLOBAL | Flag.READONLY, ""),
219     
220     DISCONNECT_ON_EXPIRED_PASSWORD(Flag.GLOBAL | Flag.READONLY, "1"),
221     
222     DIV_PRECISION_INCREMENT(Flag.SESSION | Flag.HINT_UPDATEABLE, "4"),
223     
224     END_MARKERS_IN_JSON(Flag.SESSION | Flag.HINT_UPDATEABLE, "0"),
225     
226     ENFORCE_GTID_CONSISTENCY(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "FALSE"),
227     
228     EQ_RANGE_INDEX_DIVE_LIMIT(Flag.SESSION | Flag.HINT_UPDATEABLE, "200"),
229     
230     ERROR_COUNT(Flag.ONLY_SESSION | Flag.READONLY, "0"),
231     
232     EVENT_SCHEDULER(Flag.GLOBAL, "ON"),
233     
234     EXPIRE_LOGS_DAYS(Flag.GLOBAL, "0"),
235     
236     // EXPLAIN_FORMAT(Flag.SESSION, "TODO"),
237     
238     EXPLICIT_DEFAULTS_FOR_TIMESTAMP(Flag.SESSION, "1"),
239     
240     EXTERNAL_USER(Flag.ONLY_SESSION | Flag.READONLY, ""),
241     
242     FLUSH(Flag.GLOBAL, "0"),
243     
244     FLUSH_TIME(Flag.GLOBAL, "0"),
245     
246     FOREIGN_KEY_CHECKS(Flag.SESSION | Flag.HINT_UPDATEABLE, "1"),
247     
248     FT_BOOLEAN_SYNTAX(Flag.GLOBAL, "+ -><()~*:\"\"&|"),
249     
250     FT_MAX_WORD_LEN(Flag.GLOBAL | Flag.READONLY, "84"),
251     
252     FT_MIN_WORD_LEN(Flag.GLOBAL | Flag.READONLY, "4"),
253     
254     FT_QUERY_EXPANSION_LIMIT(Flag.GLOBAL | Flag.READONLY, "20"),
255     
256     FT_STOPWORD_FILE(Flag.GLOBAL | Flag.READONLY, ""),
257     
258     GENERAL_LOG(Flag.GLOBAL, "0"),
259     
260     GENERAL_LOG_FILE(Flag.GLOBAL, ""),
261     
262     GENERATED_RANDOM_PASSWORD_LENGTH(Flag.SESSION, "20"),
263     
264     GLOBAL_CONNECTION_MEMORY_LIMIT(Flag.GLOBAL, "18446744073709551615"),
265     
266     GLOBAL_CONNECTION_MEMORY_TRACKING(Flag.SESSION, "0"),
267     
268     GROUP_CONCAT_MAX_LEN(Flag.SESSION | Flag.HINT_UPDATEABLE, "1024"),
269     
270     // GROUP_REPLICATION_CONSISTENCY(Flag.SESSION, "TODO"),
271     
272     // GTID_EXECUTED(Flag.GLOBAL | Flag.READONLY, "TODO"),
273     
274     GTID_EXECUTED_COMPRESSION_PERIOD(Flag.GLOBAL, "0"),
275     
276     // GTID_MODE(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "TODO"),
277     
278     // GTID_NEXT(Flag.ONLY_SESSION, "TODO"),
279     
280     // GTID_OWNED(Flag.SESSION | Flag.READONLY, "TODO"),
281     
282     // GTID_PURGED(Flag.GLOBAL, "TODO"),
283     
284     // HAVE_COMPRESS(Flag.GLOBAL | Flag.READONLY, "TODO"),
285     
286     // HAVE_DYNAMIC_LOADING(Flag.GLOBAL | Flag.READONLY, "TODO"),
287     
288     // HAVE_GEOMETRY(Flag.GLOBAL | Flag.READONLY, "TODO"),
289     
290     // HAVE_OPENSSL(Flag.GLOBAL | Flag.READONLY, "TODO"),
291     
292     // HAVE_PROFILING(Flag.GLOBAL | Flag.READONLY, "TODO"),
293     
294     // HAVE_QUERY_CACHE(Flag.GLOBAL | Flag.READONLY, "TODO"),
295     
296     // HAVE_RTREE_KEYS(Flag.GLOBAL | Flag.READONLY, "TODO"),
297     
298     HAVE_SSL(Flag.GLOBAL | Flag.READONLY, "NO"),
299     
300     // HAVE_STATEMENT_TIMEOUT(Flag.GLOBAL | Flag.READONLY, "TODO"),
301     
302     // HAVE_SYMLINK(Flag.GLOBAL | Flag.READONLY, "TODO"),
303     
304     HISTOGRAM_GENERATION_MAX_MEM_SIZE(Flag.SESSION, "20000000"),
305     
306     HOST_CACHE_SIZE(Flag.GLOBAL, "128"),
307     
308     HOSTNAME(Flag.GLOBAL | Flag.READONLY, ""),
309     
310     IDENTITY(Flag.ONLY_SESSION, "0"),
311     
312     IMMEDIATE_SERVER_VERSION(Flag.ONLY_SESSION, "999999"),
313     
314     INFORMATION_SCHEMA_STATS_EXPIRY(Flag.SESSION, "86400"),
315     
316     INIT_CONNECT(Flag.GLOBAL, ""),
317     
318     INIT_FILE(Flag.GLOBAL | Flag.READONLY, ""),
319     
320     INIT_REPLICA(Flag.GLOBAL, ""),
321     
322     INIT_SLAVE(Flag.GLOBAL, ""),
323     
324     INSERT_ID(Flag.ONLY_SESSION | Flag.HINT_UPDATEABLE, "0"),
325     
326     INTERACTIVE_TIMEOUT(Flag.SESSION, "28800"),
327     
328     // INTERNAL_TMP_MEM_STORAGE_ENGINE(Flag.SESSION | Flag.HINT_UPDATEABLE, "TODO"),
329     
330     JOIN_BUFFER_SIZE(Flag.SESSION | Flag.HINT_UPDATEABLE, "262144"),
331     
332     KEEP_FILES_ON_CREATE(Flag.SESSION, "0"),
333     
334     // KEY_BUFFER_SIZE(Flag.GLOBAL, "TODO"),
335     
336     // KEY_CACHE_AGE_THRESHOLD(Flag.GLOBAL, "TODO"),
337     
338     // KEY_CACHE_BLOCK_SIZE(Flag.GLOBAL, "TODO"),
339     
340     // KEY_CACHE_DIVISION_LIMIT(Flag.GLOBAL, "TODO"),
341     
342     KEYRING_OPERATIONS(Flag.GLOBAL, "1"),
343     
344     LARGE_FILES_SUPPORT(Flag.GLOBAL | Flag.READONLY, "1"),
345     
346     LARGE_PAGE_SIZE(Flag.GLOBAL | Flag.READONLY, "0"),
347     
348     LARGE_PAGES(Flag.GLOBAL | Flag.READONLY, "0"),
349     
350     LAST_INSERT_ID(Flag.ONLY_SESSION, "0"),
351     
352     LC_MESSAGES(Flag.SESSION, ""),
353     
354     LC_MESSAGES_DIR(Flag.GLOBAL | Flag.READONLY, ""),
355     
356     LC_TIME_NAMES(Flag.SESSION, ""),
357     
358     LICENSE(Flag.GLOBAL | Flag.READONLY, "GPL"),
359     
360     LOCAL_INFILE(Flag.GLOBAL, "0"),
361     
362     LOCK_WAIT_TIMEOUT(Flag.SESSION | Flag.HINT_UPDATEABLE, "31536000"),
363     
364     LOCKED_IN_MEMORY(Flag.GLOBAL | Flag.READONLY, "0"),
365     
366     LOG_BIN(Flag.GLOBAL | Flag.READONLY, "1"),
367     
368     LOG_BIN_BASENAME(Flag.GLOBAL | Flag.READONLY, ""),
369     
370     LOG_BIN_INDEX(Flag.GLOBAL | Flag.READONLY, ""),
371     
372     LOG_BIN_TRUST_FUNCTION_CREATORS(Flag.GLOBAL, "0"),
373     
374     LOG_BIN_USE_V1_ROW_EVENTS(Flag.GLOBAL, "0"),
375     
376     LOG_ERROR(Flag.GLOBAL | Flag.READONLY, "0"),
377     
378     LOG_ERROR_SERVICES(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "log_filter_internal; log_sink_internal"),
379     
380     LOG_ERROR_SUPPRESSION_LIST(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
381     
382     LOG_ERROR_VERBOSITY(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "2"),
383     
384     // LOG_OUTPUT(Flag.GLOBAL, "TODO"),
385     
386     LOG_QUERIES_NOT_USING_INDEXES(Flag.GLOBAL, "0"),
387     
388     LOG_RAW(Flag.GLOBAL, "0"),
389     
390     LOG_REPLICA_UPDATES(Flag.GLOBAL | Flag.READONLY, "1"),
391     
392     LOG_SLAVE_UPDATES(Flag.GLOBAL | Flag.READONLY, "1"),
393     
394     LOG_SLOW_ADMIN_STATEMENTS(Flag.GLOBAL, "0"),
395     
396     LOG_SLOW_EXTRA(Flag.GLOBAL, "0"),
397     
398     LOG_SLOW_REPLICA_STATEMENTS(Flag.GLOBAL, "0"),
399     
400     LOG_SLOW_SLAVE_STATEMENTS(Flag.GLOBAL, "0"),
401     
402     LOG_STATEMENTS_UNSAFE_FOR_BINLOG(Flag.GLOBAL, "1"),
403     
404     LOG_THROTTLE_QUERIES_NOT_USING_INDEXES(Flag.GLOBAL, "0"),
405     
406     // LOG_TIMESTAMPS(Flag.GLOBAL, "TODO"),
407     
408     LONG_QUERY_TIME(Flag.SESSION, "4.62182e+18"),
409     
410     LOW_PRIORITY_UPDATES(Flag.SESSION, "0"),
411     
412     LOWER_CASE_FILE_SYSTEM(Flag.GLOBAL | Flag.READONLY, "0"),
413     
414     LOWER_CASE_TABLE_NAMES(Flag.GLOBAL | Flag.READONLY, "0"),
415     
416     MANDATORY_ROLES(Flag.GLOBAL, ""),
417     
418     // MASTER_INFO_REPOSITORY(Flag.GLOBAL, "TODO"),
419     
420     MASTER_VERIFY_CHECKSUM(Flag.GLOBAL, "0"),
421     
422     MAX_ALLOWED_PACKET(Flag.SESSION, "67108864"),
423     
424     MAX_BINLOG_CACHE_SIZE(Flag.GLOBAL, "18446744073709547520"),
425     
426     MAX_BINLOG_SIZE(Flag.GLOBAL, "1073741824"),
427     
428     MAX_BINLOG_STMT_CACHE_SIZE(Flag.GLOBAL, "18446744073709547520"),
429     
430     MAX_CONNECT_ERRORS(Flag.GLOBAL, "100"),
431     
432     MAX_CONNECTIONS(Flag.GLOBAL, "151"),
433     
434     MAX_DELAYED_THREADS(Flag.SESSION, "20"),
435     
436     MAX_DIGEST_LENGTH(Flag.GLOBAL | Flag.READONLY, "1024"),
437     
438     MAX_ERROR_COUNT(Flag.SESSION | Flag.HINT_UPDATEABLE, "1024"),
439     
440     MAX_EXECUTION_TIME(Flag.SESSION | Flag.HINT_UPDATEABLE, "0"),
441     
442     MAX_HEAP_TABLE_SIZE(Flag.SESSION | Flag.HINT_UPDATEABLE, "16777216"),
443     
444     MAX_INSERT_DELAYED_THREADS(Flag.SESSION, "20"),
445     
446     MAX_JOIN_SIZE(Flag.SESSION | Flag.HINT_UPDATEABLE, "18446744073709551615"),
447     
448     MAX_LENGTH_FOR_SORT_DATA(Flag.SESSION | Flag.HINT_UPDATEABLE, "4096"),
449     
450     MAX_POINTS_IN_GEOMETRY(Flag.SESSION | Flag.HINT_UPDATEABLE, "65536"),
451     
452     MAX_PREPARED_STMT_COUNT(Flag.GLOBAL, "16382"),
453     
454     MAX_RELAY_LOG_SIZE(Flag.GLOBAL, "0"),
455     
456     MAX_SEEKS_FOR_KEY(Flag.SESSION | Flag.HINT_UPDATEABLE, "18446744073709551615"),
457     
458     MAX_SORT_LENGTH(Flag.SESSION | Flag.HINT_UPDATEABLE, "1024"),
459     
460     MAX_SP_RECURSION_DEPTH(Flag.SESSION, "0"),
461     
462     MAX_USER_CONNECTIONS(Flag.SESSION, "0"),
463     
464     MAX_WRITE_LOCK_COUNT(Flag.GLOBAL, "18446744073709551615"),
465     
466     MIN_EXAMINED_ROW_LIMIT(Flag.SESSION, "0"),
467     
468     MYSQL_NATIVE_PASSWORD_PROXY_USERS(Flag.GLOBAL, "0"),
469     
470     NET_BUFFER_LENGTH(Flag.SESSION, "16384"),
471     
472     NET_READ_TIMEOUT(Flag.SESSION, "30"),
473     
474     NET_RETRY_COUNT(Flag.SESSION, "10"),
475     
476     NET_WRITE_TIMEOUT(Flag.SESSION, "60"),
477     
478     NEW(Flag.SESSION, "0"),
479     
480     OFFLINE_MODE(Flag.GLOBAL, "0"),
481     
482     OLD(Flag.GLOBAL | Flag.READONLY, "0"),
483     
484     OLD_ALTER_TABLE(Flag.SESSION, "0"),
485     
486     OPEN_FILES_LIMIT(Flag.GLOBAL | Flag.READONLY, "0"),
487     
488     OPTIMIZER_MAX_SUBGRAPH_PAIRS(Flag.SESSION | Flag.HINT_UPDATEABLE, "100000"),
489     
490     OPTIMIZER_PRUNE_LEVEL(Flag.SESSION | Flag.HINT_UPDATEABLE, "1"),
491     
492     OPTIMIZER_SEARCH_DEPTH(Flag.SESSION | Flag.HINT_UPDATEABLE, "62"),
493     
494     // OPTIMIZER_SWITCH(Flag.SESSION | Flag.HINT_UPDATEABLE, "TODO"),
495     
496     // OPTIMIZER_TRACE(Flag.SESSION, "TODO"),
497     
498     // OPTIMIZER_TRACE_FEATURES(Flag.SESSION, "TODO"),
499     
500     OPTIMIZER_TRACE_LIMIT(Flag.SESSION, "1"),
501     
502     OPTIMIZER_TRACE_MAX_MEM_SIZE(Flag.SESSION, "1048576"),
503     
504     OPTIMIZER_TRACE_OFFSET(Flag.SESSION, "-1"),
505     
506     ORIGINAL_COMMIT_TIMESTAMP(Flag.ONLY_SESSION, "36028797018963968"),
507     
508     ORIGINAL_SERVER_VERSION(Flag.ONLY_SESSION, "999999"),
509     
510     PARSER_MAX_MEM_SIZE(Flag.SESSION, "18446744073709551615"),
511     
512     PARTIAL_REVOKES(Flag.GLOBAL, "0"),
513     
514     PASSWORD_HISTORY(Flag.GLOBAL, "0"),
515     
516     PASSWORD_REQUIRE_CURRENT(Flag.GLOBAL, "0"),
517     
518     PASSWORD_REUSE_INTERVAL(Flag.GLOBAL, "0"),
519     
520     PERFORMANCE_SCHEMA(Flag.GLOBAL | Flag.READONLY, "1"),
521     
522     PERFORMANCE_SCHEMA_ACCOUNTS_SIZE(Flag.GLOBAL | Flag.READONLY, "-1"),
523     
524     PERFORMANCE_SCHEMA_CONSUMER_EVENTS_STAGES_CURRENT(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "0"),
525     
526     PERFORMANCE_SCHEMA_CONSUMER_EVENTS_STAGES_HISTORY(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "0"),
527     
528     PERFORMANCE_SCHEMA_CONSUMER_EVENTS_STAGES_HISTORY_LONG(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "0"),
529     
530     PERFORMANCE_SCHEMA_CONSUMER_EVENTS_STATEMENTS_CPU(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "0"),
531     
532     PERFORMANCE_SCHEMA_CONSUMER_EVENTS_STATEMENTS_CURRENT(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "1"),
533     
534     PERFORMANCE_SCHEMA_CONSUMER_EVENTS_STATEMENTS_HISTORY(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "1"),
535     
536     PERFORMANCE_SCHEMA_CONSUMER_EVENTS_STATEMENTS_HISTORY_LONG(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "0"),
537     
538     PERFORMANCE_SCHEMA_CONSUMER_EVENTS_TRANSACTIONS_CURRENT(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "1"),
539     
540     PERFORMANCE_SCHEMA_CONSUMER_EVENTS_TRANSACTIONS_HISTORY(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "1"),
541     
542     PERFORMANCE_SCHEMA_CONSUMER_EVENTS_TRANSACTIONS_HISTORY_LONG(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "0"),
543     
544     PERFORMANCE_SCHEMA_CONSUMER_EVENTS_WAITS_CURRENT(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "0"),
545     
546     PERFORMANCE_SCHEMA_CONSUMER_EVENTS_WAITS_HISTORY(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "0"),
547     
548     PERFORMANCE_SCHEMA_CONSUMER_EVENTS_WAITS_HISTORY_LONG(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "0"),
549     
550     PERFORMANCE_SCHEMA_CONSUMER_GLOBAL_INSTRUMENTATION(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "1"),
551     
552     PERFORMANCE_SCHEMA_CONSUMER_STATEMENTS_DIGEST(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "1"),
553     
554     PERFORMANCE_SCHEMA_CONSUMER_THREAD_INSTRUMENTATION(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "1"),
555     
556     PERFORMANCE_SCHEMA_DIGESTS_SIZE(Flag.GLOBAL | Flag.READONLY, "-1"),
557     
558     PERFORMANCE_SCHEMA_ERROR_SIZE(Flag.GLOBAL | Flag.READONLY, "5242"),
559     
560     PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_LONG_SIZE(Flag.GLOBAL | Flag.READONLY, "-1"),
561     
562     PERFORMANCE_SCHEMA_EVENTS_STAGES_HISTORY_SIZE(Flag.GLOBAL | Flag.READONLY, "-1"),
563     
564     PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_LONG_SIZE(Flag.GLOBAL | Flag.READONLY, "-1"),
565     
566     PERFORMANCE_SCHEMA_EVENTS_STATEMENTS_HISTORY_SIZE(Flag.GLOBAL | Flag.READONLY, "-1"),
567     
568     PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_LONG_SIZE(Flag.GLOBAL | Flag.READONLY, "-1"),
569     
570     PERFORMANCE_SCHEMA_EVENTS_TRANSACTIONS_HISTORY_SIZE(Flag.GLOBAL | Flag.READONLY, "-1"),
571     
572     PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_LONG_SIZE(Flag.GLOBAL | Flag.READONLY, "-1"),
573     
574     PERFORMANCE_SCHEMA_EVENTS_WAITS_HISTORY_SIZE(Flag.GLOBAL | Flag.READONLY, "-1"),
575     
576     PERFORMANCE_SCHEMA_HOSTS_SIZE(Flag.GLOBAL | Flag.READONLY, "-1"),
577     
578     PERFORMANCE_SCHEMA_INSTRUMENT(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, ""),
579     
580     PERFORMANCE_SCHEMA_MAX_COND_CLASSES(Flag.GLOBAL | Flag.READONLY, "150"),
581     
582     PERFORMANCE_SCHEMA_MAX_COND_INSTANCES(Flag.GLOBAL | Flag.READONLY, "-1"),
583     
584     PERFORMANCE_SCHEMA_MAX_DIGEST_LENGTH(Flag.GLOBAL | Flag.READONLY, "1024"),
585     
586     PERFORMANCE_SCHEMA_MAX_DIGEST_SAMPLE_AGE(Flag.GLOBAL, "60"),
587     
588     PERFORMANCE_SCHEMA_MAX_FILE_CLASSES(Flag.GLOBAL | Flag.READONLY, "80"),
589     
590     PERFORMANCE_SCHEMA_MAX_FILE_HANDLES(Flag.GLOBAL | Flag.READONLY, "32768"),
591     
592     PERFORMANCE_SCHEMA_MAX_FILE_INSTANCES(Flag.GLOBAL | Flag.READONLY, "-1"),
593     
594     PERFORMANCE_SCHEMA_MAX_INDEX_STAT(Flag.GLOBAL | Flag.READONLY, "-1"),
595     
596     PERFORMANCE_SCHEMA_MAX_MEMORY_CLASSES(Flag.GLOBAL | Flag.READONLY, "450"),
597     
598     PERFORMANCE_SCHEMA_MAX_METADATA_LOCKS(Flag.GLOBAL | Flag.READONLY, "-1"),
599     
600     PERFORMANCE_SCHEMA_MAX_MUTEX_CLASSES(Flag.GLOBAL | Flag.READONLY, "350"),
601     
602     PERFORMANCE_SCHEMA_MAX_MUTEX_INSTANCES(Flag.GLOBAL | Flag.READONLY, "-1"),
603     
604     PERFORMANCE_SCHEMA_MAX_PREPARED_STATEMENTS_INSTANCES(Flag.GLOBAL | Flag.READONLY, "-1"),
605     
606     PERFORMANCE_SCHEMA_MAX_PROGRAM_INSTANCES(Flag.GLOBAL | Flag.READONLY, "-1"),
607     
608     PERFORMANCE_SCHEMA_MAX_RWLOCK_CLASSES(Flag.GLOBAL | Flag.READONLY, "60"),
609     
610     PERFORMANCE_SCHEMA_MAX_RWLOCK_INSTANCES(Flag.GLOBAL | Flag.READONLY, "-1"),
611     
612     PERFORMANCE_SCHEMA_MAX_SOCKET_CLASSES(Flag.GLOBAL | Flag.READONLY, "10"),
613     
614     PERFORMANCE_SCHEMA_MAX_SOCKET_INSTANCES(Flag.GLOBAL | Flag.READONLY, "-1"),
615     
616     PERFORMANCE_SCHEMA_MAX_SQL_TEXT_LENGTH(Flag.GLOBAL | Flag.READONLY, "1024"),
617     
618     PERFORMANCE_SCHEMA_MAX_STAGE_CLASSES(Flag.GLOBAL | Flag.READONLY, "175"),
619     
620     PERFORMANCE_SCHEMA_MAX_STATEMENT_CLASSES(Flag.GLOBAL | Flag.READONLY, "219"),
621     
622     PERFORMANCE_SCHEMA_MAX_STATEMENT_STACK(Flag.GLOBAL | Flag.READONLY, "10"),
623     
624     PERFORMANCE_SCHEMA_MAX_TABLE_HANDLES(Flag.GLOBAL | Flag.READONLY, "-1"),
625     
626     PERFORMANCE_SCHEMA_MAX_TABLE_INSTANCES(Flag.GLOBAL | Flag.READONLY, "-1"),
627     
628     PERFORMANCE_SCHEMA_MAX_TABLE_LOCK_STAT(Flag.GLOBAL | Flag.READONLY, "-1"),
629     
630     PERFORMANCE_SCHEMA_MAX_THREAD_CLASSES(Flag.GLOBAL | Flag.READONLY, "100"),
631     
632     PERFORMANCE_SCHEMA_MAX_THREAD_INSTANCES(Flag.GLOBAL | Flag.READONLY, "-1"),
633     
634     PERFORMANCE_SCHEMA_SESSION_CONNECT_ATTRS_SIZE(Flag.GLOBAL | Flag.READONLY, "-1"),
635     
636     PERFORMANCE_SCHEMA_SETUP_ACTORS_SIZE(Flag.GLOBAL | Flag.READONLY, "-1"),
637     
638     PERFORMANCE_SCHEMA_SETUP_OBJECTS_SIZE(Flag.GLOBAL | Flag.READONLY, "-1"),
639     
640     PERFORMANCE_SCHEMA_SHOW_PROCESSLIST(Flag.GLOBAL, "0"),
641     
642     PERFORMANCE_SCHEMA_USERS_SIZE(Flag.GLOBAL | Flag.READONLY, "-1"),
643     
644     PERSIST_ONLY_ADMIN_X509_SUBJECT(Flag.GLOBAL | Flag.READONLY, ""),
645     
646     PERSIST_SENSITIVE_VARIABLES_IN_PLAINTEXT(Flag.GLOBAL | Flag.READONLY, "1"),
647     
648     PERSISTED_GLOBALS_LOAD(Flag.GLOBAL | Flag.READONLY, "1"),
649     
650     PID_FILE(Flag.GLOBAL | Flag.READONLY, ""),
651     
652     PLUGIN_DIR(Flag.GLOBAL | Flag.READONLY, ""),
653     
654     PORT(Flag.GLOBAL | Flag.READONLY, "0"),
655     
656     PRELOAD_BUFFER_SIZE(Flag.SESSION, "32768"),
657     
658     PRINT_IDENTIFIED_WITH_AS_HEX(Flag.SESSION, "0"),
659     
660     PROFILING(Flag.SESSION, "0"),
661     
662     PROFILING_HISTORY_SIZE(Flag.SESSION, "15"),
663     
664     PROTOCOL_COMPRESSION_ALGORITHMS(Flag.GLOBAL, "zlib,zstd,uncompressed"),
665     
666     PROTOCOL_VERSION(Flag.GLOBAL | Flag.READONLY, "10"),
667     
668     PROXY_USER(Flag.ONLY_SESSION | Flag.READONLY, ""),
669     
670     PSEUDO_REPLICA_MODE(Flag.ONLY_SESSION, "0"),
671     
672     PSEUDO_SLAVE_MODE(Flag.ONLY_SESSION, "0"),
673     
674     PSEUDO_THREAD_ID(Flag.ONLY_SESSION, "0"),
675     
676     QUERY_ALLOC_BLOCK_SIZE(Flag.SESSION, "8192"),
677     
678     QUERY_PREALLOC_SIZE(Flag.SESSION, "8192"),
679     
680     RAND_SEED1(Flag.ONLY_SESSION, "0"),
681     
682     RAND_SEED2(Flag.ONLY_SESSION, "0"),
683     
684     RANGE_ALLOC_BLOCK_SIZE(Flag.SESSION | Flag.HINT_UPDATEABLE, "4096"),
685     
686     RANGE_OPTIMIZER_MAX_MEM_SIZE(Flag.SESSION | Flag.HINT_UPDATEABLE, "8388608"),
687     
688     // RBR_EXEC_MODE(Flag.SESSION, "TODO"),
689     
690     READ_BUFFER_SIZE(Flag.SESSION | Flag.HINT_UPDATEABLE, "131072"),
691     
692     READ_ONLY(Flag.GLOBAL, "0"),
693     
694     READ_RND_BUFFER_SIZE(Flag.SESSION | Flag.HINT_UPDATEABLE, "262144"),
695     
696     REGEXP_STACK_LIMIT(Flag.GLOBAL, "8000000"),
697     
698     REGEXP_TIME_LIMIT(Flag.GLOBAL, "32"),
699     
700     RELAY_LOG(Flag.GLOBAL | Flag.READONLY, ""),
701     
702     RELAY_LOG_BASENAME(Flag.GLOBAL | Flag.READONLY, ""),
703     
704     RELAY_LOG_INDEX(Flag.GLOBAL | Flag.READONLY, ""),
705     
706     RELAY_LOG_INFO_FILE(Flag.GLOBAL | Flag.READONLY, ""),
707     
708     // RELAY_LOG_INFO_REPOSITORY(Flag.GLOBAL, "TODO"),
709     
710     RELAY_LOG_PURGE(Flag.GLOBAL, "1"),
711     
712     RELAY_LOG_RECOVERY(Flag.GLOBAL | Flag.READONLY, "0"),
713     
714     RELAY_LOG_SPACE_LIMIT(Flag.GLOBAL | Flag.READONLY, "0"),
715     
716     REPLICA_ALLOW_BATCHING(Flag.GLOBAL, "1"),
717     
718     REPLICA_CHECKPOINT_GROUP(Flag.GLOBAL, "512"),
719     
720     REPLICA_CHECKPOINT_PERIOD(Flag.GLOBAL, "300"),
721     
722     REPLICA_COMPRESSED_PROTOCOL(Flag.GLOBAL, "0"),
723     
724     // REPLICA_EXEC_MODE(Flag.GLOBAL, "TODO"),
725     
726     REPLICA_LOAD_TMPDIR(Flag.GLOBAL | Flag.READONLY, ""),
727     
728     REPLICA_MAX_ALLOWED_PACKET(Flag.GLOBAL, "1073741824"),
729     
730     REPLICA_NET_TIMEOUT(Flag.GLOBAL, "60"),
731     
732     // REPLICA_PARALLEL_TYPE(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "TODO"),
733     
734     REPLICA_PARALLEL_WORKERS(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "4"),
735     
736     REPLICA_PENDING_JOBS_SIZE_MAX(Flag.GLOBAL, "134217728"),
737     
738     REPLICA_PRESERVE_COMMIT_ORDER(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "1"),
739     
740     REPLICA_SKIP_ERRORS(Flag.GLOBAL | Flag.READONLY, ""),
741     
742     REPLICA_SQL_VERIFY_CHECKSUM(Flag.GLOBAL, "1"),
743     
744     REPLICA_TRANSACTION_RETRIES(Flag.GLOBAL, "10"),
745     
746     // REPLICA_TYPE_CONVERSIONS(Flag.GLOBAL, "TODO"),
747     
748     REPLICATION_OPTIMIZE_FOR_STATIC_PLUGIN_CONFIG(Flag.GLOBAL, "0"),
749     
750     REPLICATION_SENDER_OBSERVE_COMMIT_ONLY(Flag.GLOBAL, "0"),
751     
752     REPORT_HOST(Flag.GLOBAL | Flag.READONLY, ""),
753     
754     REPORT_PASSWORD(Flag.GLOBAL | Flag.READONLY, ""),
755     
756     REPORT_PORT(Flag.GLOBAL | Flag.READONLY, "0"),
757     
758     REPORT_USER(Flag.GLOBAL | Flag.READONLY, ""),
759     
760     REQUIRE_ROW_FORMAT(Flag.ONLY_SESSION, "0"),
761     
762     REQUIRE_SECURE_TRANSPORT(Flag.GLOBAL, "0"),
763     
764     // RESULTSET_METADATA(Flag.ONLY_SESSION, "TODO"),
765     
766     RPL_READ_SIZE(Flag.GLOBAL, "8192"),
767     
768     RPL_STOP_REPLICA_TIMEOUT(Flag.GLOBAL, "31536000"),
769     
770     RPL_STOP_SLAVE_TIMEOUT(Flag.GLOBAL, "31536000"),
771     
772     SCHEMA_DEFINITION_CACHE(Flag.GLOBAL, "256"),
773     
774     SECONDARY_ENGINE_COST_THRESHOLD(Flag.SESSION | Flag.HINT_UPDATEABLE, "4.68161e+18"),
775     
776     SECURE_FILE_PRIV(Flag.GLOBAL | Flag.READONLY, "NULL"),
777     
778     SELECT_INTO_BUFFER_SIZE(Flag.SESSION | Flag.HINT_UPDATEABLE, "131072"),
779     
780     SELECT_INTO_DISK_SYNC(Flag.SESSION | Flag.HINT_UPDATEABLE, "0"),
781     
782     SELECT_INTO_DISK_SYNC_DELAY(Flag.SESSION | Flag.HINT_UPDATEABLE, "0"),
783     
784     SERVER_ID(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "1"),
785     
786     SERVER_ID_BITS(Flag.GLOBAL, "32"),
787     
788     SERVER_UUID(Flag.GLOBAL | Flag.READONLY, ""),
789     
790     // SESSION_TRACK_GTIDS(Flag.SESSION, "TODO"),
791     
792     SESSION_TRACK_SCHEMA(Flag.SESSION, "1"),
793     
794     SESSION_TRACK_STATE_CHANGE(Flag.SESSION, "0"),
795     
796     SESSION_TRACK_SYSTEM_VARIABLES(Flag.SESSION, "time_zone,autocommit,character_set_client,character_set_results,character_set_connection"),
797     
798     // SESSION_TRACK_TRANSACTION_INFO(Flag.SESSION, "TODO"),
799     
800     SHA256_PASSWORD_PROXY_USERS(Flag.GLOBAL, "0"),
801     
802     SHOW_CREATE_TABLE_SKIP_SECONDARY_ENGINE(Flag.ONLY_SESSION, "0"),
803     
804     SHOW_CREATE_TABLE_VERBOSITY(Flag.SESSION, "0"),
805     
806     SHOW_GIPK_IN_CREATE_TABLE_AND_INFORMATION_SCHEMA(Flag.SESSION, "1"),
807     
808     SHOW_OLD_TEMPORALS(Flag.SESSION, "0"),
809     
810     SKIP_EXTERNAL_LOCKING(Flag.GLOBAL | Flag.READONLY, "1"),
811     
812     SKIP_NAME_RESOLVE(Flag.GLOBAL | Flag.READONLY, "0"),
813     
814     SKIP_NETWORKING(Flag.GLOBAL | Flag.READONLY, "0"),
815     
816     SKIP_REPLICA_START(Flag.GLOBAL | Flag.READONLY, "0"),
817     
818     SKIP_SHOW_DATABASE(Flag.GLOBAL | Flag.READONLY, "0"),
819     
820     SKIP_SLAVE_START(Flag.GLOBAL | Flag.READONLY, "0"),
821     
822     SLAVE_ALLOW_BATCHING(Flag.GLOBAL, "1"),
823     
824     SLAVE_CHECKPOINT_GROUP(Flag.GLOBAL, "512"),
825     
826     SLAVE_CHECKPOINT_PERIOD(Flag.GLOBAL, "300"),
827     
828     SLAVE_COMPRESSED_PROTOCOL(Flag.GLOBAL, "0"),
829     
830     SLAVE_EXEC_MODE(Flag.GLOBAL, "STRICT"),
831     
832     SLAVE_LOAD_TMPDIR(Flag.GLOBAL | Flag.READONLY, ""),
833     
834     SLAVE_MAX_ALLOWED_PACKET(Flag.GLOBAL, "1073741824"),
835     
836     SLAVE_NET_TIMEOUT(Flag.GLOBAL, "60"),
837     
838     SLAVE_PARALLEL_TYPE(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "LOGICAL_CLOCK"),
839     
840     SLAVE_PARALLEL_WORKERS(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "4"),
841     
842     SLAVE_PENDING_JOBS_SIZE_MAX(Flag.GLOBAL, "134217728"),
843     
844     SLAVE_PRESERVE_COMMIT_ORDER(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "1"),
845     
846     SLAVE_ROWS_SEARCH_ALGORITHMS(Flag.GLOBAL, "INDEX_SCAN,HASH_SCAN"),
847     
848     SLAVE_SKIP_ERRORS(Flag.GLOBAL | Flag.READONLY, ""),
849     
850     SLAVE_SQL_VERIFY_CHECKSUM(Flag.GLOBAL, "1"),
851     
852     SLAVE_TRANSACTION_RETRIES(Flag.GLOBAL, "10"),
853     
854     SLAVE_TYPE_CONVERSIONS(Flag.GLOBAL, ""),
855     
856     SLOW_LAUNCH_TIME(Flag.GLOBAL, "2"),
857     
858     SLOW_QUERY_LOG(Flag.GLOBAL, "0"),
859     
860     SLOW_QUERY_LOG_FILE(Flag.GLOBAL, ""),
861     
862     SOCKET(Flag.GLOBAL | Flag.READONLY, ""),
863     
864     SORT_BUFFER_SIZE(Flag.SESSION | Flag.HINT_UPDATEABLE, "262144"),
865     
866     SOURCE_VERIFY_CHECKSUM(Flag.GLOBAL, "0"),
867     
868     SQL_AUTO_IS_NULL(Flag.SESSION | Flag.HINT_UPDATEABLE, "0"),
869     
870     SQL_BIG_SELECTS(Flag.SESSION | Flag.HINT_UPDATEABLE, "0"),
871     
872     SQL_BUFFER_RESULT(Flag.SESSION | Flag.HINT_UPDATEABLE, "0"),
873     
874     SQL_GENERATE_INVISIBLE_PRIMARY_KEY(Flag.SESSION, "0"),
875     
876     SQL_LOG_BIN(Flag.ONLY_SESSION, "1"),
877     
878     SQL_LOG_OFF(Flag.SESSION, "0"),
879     
880     SQL_MODE(Flag.SESSION | Flag.HINT_UPDATEABLE, "ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"),
881     
882     SQL_NOTES(Flag.SESSION, "1"),
883     
884     SQL_QUOTE_SHOW_CREATE(Flag.SESSION, "1"),
885     
886     SQL_REPLICA_SKIP_COUNTER(Flag.GLOBAL, "0"),
887     
888     SQL_REQUIRE_PRIMARY_KEY(Flag.SESSION | Flag.HINT_UPDATEABLE, "0"),
889     
890     SQL_SAFE_UPDATES(Flag.SESSION | Flag.HINT_UPDATEABLE, "0"),
891     
892     SQL_SELECT_LIMIT(Flag.SESSION | Flag.HINT_UPDATEABLE, "18446744073709551615"),
893     
894     SQL_SLAVE_SKIP_COUNTER(Flag.GLOBAL, "0"),
895     
896     SQL_WARNINGS(Flag.SESSION, "0"),
897     
898     SSL_CA(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
899     
900     SSL_CAPATH(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
901     
902     SSL_CERT(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
903     
904     SSL_CIPHER(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
905     
906     SSL_CRL(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
907     
908     SSL_CRLPATH(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
909     
910     SSL_FIPS_MODE(Flag.GLOBAL, "OFF"),
911     
912     SSL_KEY(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
913     
914     SSL_SESSION_CACHE_MODE(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "1"),
915     
916     SSL_SESSION_CACHE_TIMEOUT(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "300"),
917     
918     STORED_PROGRAM_CACHE(Flag.GLOBAL, "256"),
919     
920     STORED_PROGRAM_DEFINITION_CACHE(Flag.GLOBAL, "256"),
921     
922     SUPER_READ_ONLY(Flag.GLOBAL, "0"),
923     
924     SYNC_BINLOG(Flag.GLOBAL, "1"),
925     
926     SYNC_MASTER_INFO(Flag.GLOBAL, "10000"),
927     
928     SYNC_RELAY_LOG(Flag.GLOBAL, "10000"),
929     
930     SYNC_RELAY_LOG_INFO(Flag.GLOBAL, "10000"),
931     
932     SYNC_SOURCE_INFO(Flag.GLOBAL, "10000"),
933     
934     // TODO Retrieve proper system time zone.
935     SYSTEM_TIME_ZONE(Flag.GLOBAL | Flag.READONLY, "UTC"),
936     
937     TABLE_DEFINITION_CACHE(Flag.GLOBAL, "400"),
938     
939     TABLE_ENCRYPTION_PRIVILEGE_CHECK(Flag.GLOBAL, "0"),
940     
941     TABLE_OPEN_CACHE(Flag.GLOBAL, "4000"),
942     
943     TABLE_OPEN_CACHE_INSTANCES(Flag.GLOBAL | Flag.READONLY, "16"),
944     
945     TABLESPACE_DEFINITION_CACHE(Flag.GLOBAL, "256"),
946     
947     TEMPTABLE_MAX_MMAP(Flag.GLOBAL, "1073741824"),
948     
949     TEMPTABLE_MAX_RAM(Flag.GLOBAL, "1073741824"),
950     
951     TEMPTABLE_USE_MMAP(Flag.GLOBAL, "1"),
952     
953     TERMINOLOGY_USE_PREVIOUS(Flag.SESSION, "NONE"),
954     
955     THREAD_CACHE_SIZE(Flag.GLOBAL, "0"),
956     
957     THREAD_HANDLING(Flag.GLOBAL | Flag.READONLY, "one-thread-per-connection"),
958     
959     THREAD_STACK(Flag.GLOBAL | Flag.READONLY, "1048576"),
960     
961     TIME_ZONE(Flag.SESSION | Flag.HINT_UPDATEABLE, "SYSTEM"),
962     
963     TIMESTAMP(Flag.ONLY_SESSION | Flag.HINT_UPDATEABLE, "0"),
964     
965     TLS_CIPHERSUITES(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, ""),
966     
967     TLS_VERSION(Flag.GLOBAL | Flag.PERSIST_AS_READ_ONLY, "TLSv1.2,TLSv1.3"),
968     
969     TMP_TABLE_SIZE(Flag.SESSION | Flag.HINT_UPDATEABLE, "16777216"),
970     
971     TMPDIR(Flag.GLOBAL | Flag.READONLY, ""),
972     
973     TRANSACTION_ALLOC_BLOCK_SIZE(Flag.SESSION, "8192"),
974     
975     TRANSACTION_ALLOW_BATCHING(Flag.ONLY_SESSION, "0"),
976     
977     TRANSACTION_ISOLATION(Flag.SESSION | Flag.TRI_LEVEL, "REPEATABLE-READ", new TransactionIsolationValueProvider()),
978     
979     TRANSACTION_PREALLOC_SIZE(Flag.SESSION, "4096"),
980     
981     TRANSACTION_READ_ONLY(Flag.SESSION | Flag.TRI_LEVEL, "0", new TransactionReadOnlyValueProvider()),
982     
983     TRANSACTION_WRITE_SET_EXTRACTION(Flag.SESSION, "XXHASH64"),
984     
985     UNIQUE_CHECKS(Flag.SESSION | Flag.HINT_UPDATEABLE, "1"),
986     
987     UPDATABLE_VIEWS_WITH_LIMIT(Flag.SESSION | Flag.HINT_UPDATEABLE, "YES"),
988     
989     USE_SECONDARY_ENGINE(Flag.ONLY_SESSION | Flag.HINT_UPDATEABLE, "ON"),
990     
991     VALIDATE_USER_PLUGINS(Flag.GLOBAL | Flag.READONLY | Flag.INVISIBLE, "1"),
992     
993     VERSION(Flag.GLOBAL | Flag.READONLY, DatabaseProtocolServerInfo.getDefaultProtocolVersion(TypedSPILoader.getService(DatabaseType.class, "MySQL")), new VersionValueProvider()),
994     
995     VERSION_COMMENT(Flag.GLOBAL | Flag.READONLY, "Source distribution"),
996     
997     VERSION_COMPILE_MACHINE(Flag.GLOBAL | Flag.READONLY, "x86_64"),
998     
999     VERSION_COMPILE_OS(Flag.GLOBAL | Flag.READONLY, "Linux"),
1000     
1001     VERSION_COMPILE_ZLIB(Flag.GLOBAL | Flag.READONLY, "1.2.13"),
1002     
1003     WAIT_TIMEOUT(Flag.SESSION, "28800"),
1004     
1005     WARNING_COUNT(Flag.ONLY_SESSION | Flag.READONLY, "0"),
1006     
1007     WINDOWING_USE_HIGH_PRECISION(Flag.SESSION | Flag.HINT_UPDATEABLE, "1"),
1008     
1009     // The following variables are from MySQL 5.7
1010     
1011     XA_DETACH_ON_PREPARE(Flag.SESSION | Flag.HINT_UPDATEABLE, "1"),
1012     
1013     DATE_FORMAT(Flag.GLOBAL | Flag.READONLY, "%Y-%m-%d"),
1014     
1015     DATETIME_FORMAT(Flag.GLOBAL | Flag.READONLY, "%Y-%m-%d %H:%i:%s"),
1016     
1017     HAVE_CRYPT(Flag.GLOBAL | Flag.READONLY, "NO"),
1018     
1019     IGNORE_BUILTIN_INNODB(Flag.GLOBAL | Flag.READONLY, "0"),
1020     
1021     IGNORE_DB_DIRS(Flag.GLOBAL | Flag.READONLY, ""),
1022     
1023     INTERNAL_TMP_DISK_STORAGE_ENGINE(Flag.GLOBAL, "InnoDB"),
1024     
1025     LOG_BUILTIN_AS_IDENTIFIED_BY_PASSWORD(Flag.GLOBAL, "0"),
1026     
1027     LOG_SYSLOG(Flag.GLOBAL, "0"),
1028     
1029     LOG_SYSLOG_FACILITY(Flag.GLOBAL, "daemon"),
1030     
1031     LOG_SYSLOG_INCLUDE_PID(Flag.GLOBAL, "1"),
1032     
1033     LOG_SYSLOG_TAG(Flag.GLOBAL, ""),
1034     
1035     LOG_WARNINGS(Flag.GLOBAL, "2"),
1036     
1037     MAX_TMP_TABLES(Flag.SESSION, "32"),
1038     
1039     METADATA_LOCKS_CACHE_SIZE(Flag.GLOBAL | Flag.READONLY, "1024"),
1040     
1041     METADATA_LOCKS_HASH_INSTANCES(Flag.GLOBAL | Flag.READONLY, "8"),
1042     
1043     MULTI_RANGE_COUNT(Flag.SESSION, "256"),
1044     
1045     OLD_PASSWORDS(Flag.SESSION, "0"),
1046     
1047     QUERY_CACHE_LIMIT(Flag.GLOBAL, "1048576"),
1048     
1049     QUERY_CACHE_MIN_RES_UNIT(Flag.GLOBAL, "4096"),
1050     
1051     QUERY_CACHE_SIZE(Flag.GLOBAL, "1048576"),
1052     
1053     QUERY_CACHE_TYPE(Flag.SESSION, "OFF"),
1054     
1055     QUERY_CACHE_WLOCK_INVALIDATE(Flag.SESSION, "0"),
1056     
1057     SECURE_AUTH(Flag.GLOBAL, "1"),
1058     
1059     SHOW_COMPATIBILITY_56(Flag.GLOBAL, "0"),
1060     
1061     SYNC_FRM(Flag.GLOBAL, "1"),
1062     
1063     TIME_FORMAT(Flag.GLOBAL | Flag.READONLY, "%H:%i:%s"),
1064     
1065     TX_ISOLATION(Flag.SESSION | Flag.TRI_LEVEL, "REPEATABLE-READ", new TransactionIsolationValueProvider()),
1066     
1067     TX_READ_ONLY(Flag.SESSION | Flag.TRI_LEVEL, "0", new TransactionReadOnlyValueProvider()),
1068     
1069     // The following variables are from MySQL 5.6
1070     
1071     BINLOGGING_IMPOSSIBLE_MODE(Flag.GLOBAL, "IGNORE_ERROR"),
1072     
1073     SIMPLIFIED_BINLOG_GTID_RECOVERY(Flag.READONLY, "0"),
1074     
1075     STORAGE_ENGINE(Flag.SESSION, ""),
1076     
1077     THREAD_CONCURRENCY(Flag.READONLY, "10"),
1078     
1079     TIMED_MUTEXES(Flag.GLOBAL, "0");
1080     
1081     private static final Map<String, MySQLSystemVariable> ALL_VARIABLES = Arrays.stream(values()).collect(Collectors.toMap(Enum::name, Function.identity()));
1082     
1083     private final int flag;
1084     
1085     @Getter
1086     private final String defaultValue;
1087     
1088     private final MySQLSystemVariableValueProvider variableValueProvider;
1089     
1090     MySQLSystemVariable(final int flag, final String defaultValue) {
1091         this(flag, defaultValue, MySQLSystemVariableValueProvider.DEFAULT_PROVIDER);
1092     }
1093     
1094     /**
1095      * Find system variable by name.
1096      *
1097      * @param name variable name
1098      * @return system variable
1099      */
1100     public static Optional<MySQLSystemVariable> findSystemVariable(final String name) {
1101         return Optional.ofNullable(ALL_VARIABLES.get(name.toUpperCase()));
1102     }
1103     
1104     /**
1105      * Get value of system variable.
1106      *
1107      * @param scope scope
1108      * @param connectionSession connection session
1109      * @return value
1110      */
1111     public String getValue(final Scope scope, final ConnectionSession connectionSession) {
1112         validateGetScope(scope);
1113         return variableValueProvider.get(scope, connectionSession, this);
1114     }
1115     
1116     private void validateGetScope(final Scope scope) {
1117         if (Scope.GLOBAL == scope) {
1118             ShardingSpherePreconditions.checkState(0 == (Flag.ONLY_SESSION & scope()), () -> new IncorrectGlobalLocalVariableException(name().toLowerCase(), Scope.SESSION.name()));
1119         }
1120         if (Scope.SESSION == scope) {
1121             ShardingSpherePreconditions.checkState(0 != ((Flag.SESSION | Flag.ONLY_SESSION) & scope()), () -> new IncorrectGlobalLocalVariableException(name().toLowerCase(), Scope.GLOBAL.name()));
1122         }
1123     }
1124     
1125     /**
1126      * Validate scope of set operation.
1127      * @param scope set scope
1128      */
1129     public void validateSetTargetScope(final Scope scope) {
1130         if (Scope.GLOBAL == scope) {
1131             ShardingSpherePreconditions.checkState(0 == (Flag.ONLY_SESSION & scope()), () -> new ErrorLocalVariableException(name().toLowerCase()));
1132         }
1133         if (Scope.SESSION == scope) {
1134             ShardingSpherePreconditions.checkState(0 != ((Flag.SESSION | Flag.ONLY_SESSION) & scope()), () -> new ErrorGlobalVariableException(name().toLowerCase()));
1135         }
1136     }
1137     
1138     private int scope() {
1139         return Flag.SCOPE_MASK & flag;
1140     }
1141 }