mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
4dabfa5de7
into mysql.com:/home/kent/bk/main/mysql-5.1 BUILD/Makefile.am: Auto merged BitKeeper/deleted/.del-ArrayFifoList.hpp~7036ae04dd7e7bd2: Auto merged BitKeeper/deleted/.del-ArrayList.hpp~44695d09b1a02179: Auto merged BitKeeper/deleted/.del-DbtupLCP.cpp~855b1ed3fbc86a42: Auto merged BitKeeper/deleted/.del-DbtupSystemRestart.cpp~15b54d7e4e75d2d: Auto merged BitKeeper/deleted/.del-DbtupUndoLog.cpp~5a2ef6e86b1404e9: Auto merged Makefile.am: Auto merged BitKeeper/deleted/.del-Makefile.am~2: Auto merged BitKeeper/deleted/.del-Makefile.am~ab5c84d46412dc2e: Auto merged BitKeeper/deleted/.del-Makefile.am~abb265028eb9b6a7: Auto merged BitKeeper/deleted/.del-Makefile.am~de166d6fcac3b9b6: Auto merged BitKeeper/deleted/.del-Makefile.am~e5b911533dad2713: Auto merged BitKeeper/deleted/.del-Makefile.am~ead19441cc5ff35c: Auto merged BitKeeper/deleted/.del-Makefile.am~f87185e232d7c4f: Auto merged BitKeeper/deleted/.del-Makefile.in: Auto merged BitKeeper/deleted/.del-MemoryChannelOSE.hpp: Auto merged BitKeeper/deleted/.del-MetaData.cpp~146ae9865dd35829: Auto merged BitKeeper/deleted/.del-MetaData.hpp~538342afcd8ac53c: Auto merged BitKeeper/deleted/.del-NdbCondition.c~ad83464328ab37af: Auto merged BitKeeper/deleted/.del-NdbCondition.c~ee56562abdd718cf: Auto merged BitKeeper/deleted/.del-NdbConditionOSE.h~455dd2c29c2e6344: Auto merged BitKeeper/deleted/.del-NdbDaemon.c~3b8101f376b28df: Auto merged BitKeeper/deleted/.del-NdbEnv.c~207f9ce9754c9e8a: Auto merged BitKeeper/deleted/.del-NdbEnv.c~bb6fe7572d45288a: Auto merged BitKeeper/deleted/.del-NdbErrHnd.cpp: Auto merged BitKeeper/deleted/.del-NdbHost.c~2c29816c77396d7b: Auto merged BitKeeper/deleted/.del-NdbHost.c~cf18d6b3c825180c: Auto merged BitKeeper/deleted/.del-NdbMem.c~6285b159985d46da: Auto merged BitKeeper/deleted/.del-NdbMem.c~6c2b317c1ce230ab: Auto merged BitKeeper/deleted/.del-NdbMem_SoftOse.cpp~9c61e311ec168d44: Auto merged BitKeeper/deleted/.del-NdbMutex.c~768131269bccca10: Auto merged BitKeeper/deleted/.del-NdbMutex.c~f4bdd19be08b84ab: Auto merged BitKeeper/deleted/.del-NdbOut.cpp~8caa99a0d729540c: Auto merged BitKeeper/deleted/.del-NdbSleep.c~b643ea3e7103eb62: Auto merged BitKeeper/deleted/.del-NdbSleep.c~b88fbc5b140de10d: Auto merged BitKeeper/deleted/.del-NdbTCP.c~1e9f416992352f6d: Auto merged BitKeeper/deleted/.del-NdbTCP.c~b09cdcbef3ea2c57: Auto merged BitKeeper/deleted/.del-NdbThread.c~2fe1fa5f47801772: Auto merged BitKeeper/deleted/.del-NdbThread.c~fe71a67b5c3a4724: Auto merged BitKeeper/deleted/.del-NdbTick.c~aa6385567216509d: Auto merged BitKeeper/deleted/.del-NdbTick.c~b76feba2cf1493d1: Auto merged BitKeeper/deleted/.del-OSE_Receiver.cpp: Auto merged BitKeeper/deleted/.del-OSE_Receiver.hpp: Auto merged BitKeeper/deleted/.del-OSE_Signals.hpp: Auto merged BitKeeper/deleted/.del-OSE_Transporter.cpp: Auto merged BitKeeper/deleted/.del-OSE_Transporter.hpp: Auto merged BitKeeper/deleted/.del-TraceNdbApi.hpp~7a7f0ae5b70358bc: Auto merged BitKeeper/deleted/.del-VerifyNdbApi.hpp~f417f78f7cd05935: Auto merged BitKeeper/deleted/.del-bcd.h~81fbfcc1530534da: Auto merged BitKeeper/deleted/.del-config-os2.h~a16b51851ddd317b: Auto merged BitKeeper/deleted/.del-dbGenerator.c~7509c19f70cad0bf: Auto merged BitKeeper/deleted/.del-dbGenerator.h~63f1aeb98260bcb7: Auto merged BitKeeper/deleted/.del-dbGenerator.h~e1aaa6725999d458: Auto merged BitKeeper/deleted/.del-dbPopulate.c~5dcff1c99783d83b: Auto merged BitKeeper/deleted/.del-dbPopulate.h~229a894b59d4da73: Auto merged BitKeeper/deleted/.del-ha_berkeley.cc: Auto merged BitKeeper/deleted/.del-ha_berkeley.h: Auto merged BitKeeper/deleted/.del-localDbPrepare.c~33a2c46afc8fac9a: Auto merged BitKeeper/deleted/.del-macros.h~58097d584e29b5df: Auto merged BitKeeper/deleted/.del-macros.h~742871fab0681964: Auto merged BitKeeper/deleted/.del-mainGenerator.c~2d1c8016f72b2517: Auto merged BitKeeper/deleted/.del-mainPopulate.c~37def9a44980b8ec: Auto merged BitKeeper/deleted/.del-mgmapi_logevent.cpp~f1e7cf3e70edc4: Auto merged BitKeeper/deleted/.del-mmslist.cpp: Auto merged BitKeeper/deleted/.del-my_lread.c: Auto merged BitKeeper/deleted/.del-my_lwrite.c: Auto merged BitKeeper/deleted/.del-my_os2cond.c~e3b520af1c371bb5: Auto merged BitKeeper/deleted/.del-my_os2dirsrch.c~4e2479b2abb2eb5a: Auto merged BitKeeper/deleted/.del-my_os2dirsrch.h~5011cbc657537d0: Auto merged BitKeeper/deleted/.del-my_os2dlfcn.c~6d94b488717683dd: Auto merged BitKeeper/deleted/.del-my_os2dlfcn.h0~eae8edb8555eff87: Auto merged BitKeeper/deleted/.del-my_os2file64.c~251fb8a1e950c31b: Auto merged BitKeeper/deleted/.del-my_os2thread.c~65dca991548cec2a: Auto merged BitKeeper/deleted/.del-my_os2tls.c~58ade7a0f70ad5ea: Auto merged BitKeeper/deleted/.del-mysqlmanager-pwgen.c~d8f5f91ec54432b9: Auto merged BitKeeper/deleted/.del-mysqlmanager.c~e97636d71145a0b: Auto merged BitKeeper/deleted/.del-mysqlmanagerc.c~4f6e3499e68508f6: Auto merged BitKeeper/deleted/.del-ndb_error.hpp~24468bb7f20a0b41: Auto merged BitKeeper/deleted/.del-ndb_error.hpp~45a2fef922beae3: Auto merged BitKeeper/deleted/.del-ndb_schema.hpp~de9c21185d6bfe4e: Auto merged BitKeeper/deleted/.del-ndbapi_async.cpp~319189569fb659ec: Auto merged BitKeeper/deleted/.del-ndbapi_async1.cpp~2995dac9b963a0d: Auto merged BitKeeper/deleted/.del-ndbapi_event.cpp~c5d949802966180: Auto merged BitKeeper/deleted/.del-ndbapi_retries.cpp~7301496d8c1c310a: Auto merged BitKeeper/deleted/.del-ndbapi_scan.cpp~14ed2aa9a5d9e597: Auto merged BitKeeper/deleted/.del-ndbapi_simple.cpp~80962179f3c2f5b8: Auto merged BitKeeper/deleted/.del-ndbapi_simple_index.cpp~4b95a4d71808b5b6: Auto merged BitKeeper/deleted/.del-print-limit-table~b8e808031daa3758: Auto merged BitKeeper/deleted/.del-raid.cc~488f5fa6538394e1: Auto merged BitKeeper/deleted/.del-raid.h~2d2503a66b128ac6: Auto merged BitKeeper/deleted/.del-raid2.c~fe7aea5fb4b9748c: Auto merged BitKeeper/deleted/.del-sql_manager.h: Auto merged BitKeeper/deleted/.del-testData.h~696038ea2623a90b: Auto merged BitKeeper/deleted/.del-testData.h~898b71d7c639319e: Auto merged BitKeeper/deleted/.del-testDefinitions.h~f18a4553579a3725: Auto merged BitKeeper/deleted/.del-userHandle.h~3275bb415e1ca2c2: Auto merged BitKeeper/deleted/.del-userHandle.h~ec22dc7a7ed2f81b: Auto merged BitKeeper/deleted/.del-userInterface.cpp~82ee612ab14b3d48: Auto merged BitKeeper/deleted/.del-userInterface.c~92a20032f7d1e91: Auto merged BitKeeper/deleted/.del-userInterface.h~1f76ad2f28b283fd: Auto merged BitKeeper/deleted/.del-userInterface.h~49139f029bbdaabc: Auto merged BitKeeper/deleted/.del-userTransaction.c~438012ecc761b776: Auto merged BitKeeper/deleted/.del-userTransaction.c~f50661b4f54b0bdd: Auto merged BitKeeper/deleted/.del-utv.h~f64af026b9705ebb: Auto merged BitKeeper/deleted/.del-vcdrfunc.h~85803875180684cd: Auto merged BitKeeper/deleted/.del-waiter.cpp~b188e4bfddf2cf98: Auto merged Docs/Makefile.am: Auto merged client/Makefile.am: Auto merged client/client_priv.h: Auto merged client/get_password.c: Auto merged client/mysql.cc: Auto merged client/mysql_upgrade.c: Auto merged client/mysqladmin.cc: Auto merged client/mysqlbinlog.cc: Auto merged client/mysqlcheck.c: Auto merged client/mysqldump.c: Auto merged client/mysqlimport.c: Auto merged client/mysqlshow.c: Auto merged client/mysqltest.c: Auto merged dbug/Makefile.am: Auto merged extra/Makefile.am: Auto merged extra/comp_err.c: Auto merged extra/perror.c: Auto merged extra/replace.c: Auto merged extra/resolveip.c: Auto merged include/Makefile.am: Auto merged include/base64.h: Auto merged include/config-netware.h: Auto merged include/config-win.h: Auto merged include/decimal.h: Auto merged include/errmsg.h: Auto merged include/ft_global.h: Auto merged include/heap.h: Auto merged include/m_ctype.h: Auto merged include/m_string.h: Auto merged include/my_base.h: Auto merged include/my_bitmap.h: Auto merged include/my_dbug.h: Auto merged include/my_global.h: Auto merged include/my_net.h: Auto merged include/my_no_pthread.h: Auto merged include/my_nosys.h: Auto merged include/my_pthread.h: Auto merged include/my_sys.h: Auto merged include/my_time.h: Auto merged include/my_tree.h: Auto merged include/my_xml.h: Auto merged include/myisam.h: Auto merged include/myisammrg.h: Auto merged include/mysql.h: Auto merged include/mysql_com.h: Auto merged include/mysys_err.h: Auto merged include/queues.h: Auto merged include/thr_alarm.h: Auto merged include/thr_lock.h: Auto merged include/violite.h: Auto merged libmysqld/Makefile.am: Auto merged libmysqld/emb_qcache.cc: Auto merged libmysqld/embedded_priv.h: Auto merged libmysqld/examples/Makefile.am: Auto merged libmysqld/libmysqld.c: Auto merged mysql-test/Makefile.am: Auto merged mysys/Makefile.am: Auto merged mysys/array.c: Auto merged mysys/base64.c: Auto merged mysys/charset-def.c: Auto merged mysys/default.c: Auto merged mysys/default_modify.c: Auto merged mysys/errors.c: Auto merged mysys/hash.c: Auto merged mysys/mf_dirname.c: Auto merged mysys/mf_format.c: Auto merged mysys/mf_iocache.c: Auto merged mysys/mf_iocache2.c: Auto merged mysys/mf_keycache.c: Auto merged mysys/mf_pack.c: Auto merged mysys/mf_path.c: Auto merged mysys/mf_tempdir.c: Auto merged mysys/mf_tempfile.c: Auto merged mysys/my_access.c: Auto merged mysys/my_alloc.c: Auto merged mysys/my_append.c: Auto merged mysys/my_bit.c: Auto merged mysys/my_bitmap.c: Auto merged mysys/my_clock.c: Auto merged mysys/my_compress.c: Auto merged mysys/my_copy.c: Auto merged mysys/my_create.c: Auto merged mysys/my_dup.c: Auto merged mysys/my_error.c: Auto merged mysys/my_file.c: Auto merged mysys/my_gethostbyname.c: Auto merged mysys/my_getopt.c: Auto merged mysys/my_getwd.c: Auto merged mysys/my_handler.c: Auto merged mysys/my_init.c: Auto merged mysys/my_lib.c: Auto merged mysys/my_lock.c: Auto merged mysys/my_malloc.c: Auto merged mysys/my_mkdir.c: Auto merged mysys/my_mmap.c: Auto merged mysys/my_net.c: Auto merged mysys/my_once.c: Auto merged mysys/my_open.c: Auto merged mysys/my_pread.c: Auto merged mysys/my_pthread.c: Auto merged mysys/my_redel.c: Auto merged mysys/my_rename.c: Auto merged mysys/my_seek.c: Auto merged mysys/my_sleep.c: Auto merged mysys/my_static.c: Auto merged mysys/my_symlink2.c: Auto merged mysys/my_thr_init.c: Auto merged mysys/mysys_priv.h: Auto merged mysys/ptr_cmp.c: Auto merged mysys/queues.c: Auto merged mysys/safemalloc.c: Auto merged mysys/string.c: Auto merged mysys/test_dir.c: Auto merged mysys/testhash.c: Auto merged mysys/thr_alarm.c: Auto merged mysys/thr_lock.c: Auto merged mysys/thr_mutex.c: Auto merged regex/Makefile.am: Auto merged scripts/Makefile.am: Auto merged server-tools/instance-manager/Makefile.am: Auto merged server-tools/instance-manager/buffer.cc: Auto merged server-tools/instance-manager/command.cc: Auto merged server-tools/instance-manager/command.h: Auto merged server-tools/instance-manager/commands.cc: Auto merged server-tools/instance-manager/commands.h: Auto merged server-tools/instance-manager/guardian.cc: Auto merged server-tools/instance-manager/guardian.h: Auto merged server-tools/instance-manager/instance.cc: Auto merged server-tools/instance-manager/instance.h: Auto merged server-tools/instance-manager/instance_map.cc: Auto merged server-tools/instance-manager/instance_map.h: Auto merged server-tools/instance-manager/instance_options.cc: Auto merged server-tools/instance-manager/instance_options.h: Auto merged server-tools/instance-manager/listener.cc: Auto merged server-tools/instance-manager/listener.h: Auto merged server-tools/instance-manager/log.cc: Auto merged server-tools/instance-manager/log.h: Auto merged server-tools/instance-manager/manager.cc: Auto merged server-tools/instance-manager/manager.h: Auto merged server-tools/instance-manager/messages.cc: Auto merged server-tools/instance-manager/mysql_connection.cc: Auto merged server-tools/instance-manager/mysql_connection.h: Auto merged server-tools/instance-manager/mysql_manager_error.h: Auto merged server-tools/instance-manager/mysqlmanager.cc: Auto merged server-tools/instance-manager/options.cc: Auto merged server-tools/instance-manager/options.h: Auto merged server-tools/instance-manager/parse.cc: Auto merged server-tools/instance-manager/parse.h: Auto merged server-tools/instance-manager/parse_output.cc: Auto merged server-tools/instance-manager/parse_output.h: Auto merged server-tools/instance-manager/priv.cc: Auto merged server-tools/instance-manager/priv.h: Auto merged server-tools/instance-manager/protocol.cc: Auto merged server-tools/instance-manager/protocol.h: Auto merged server-tools/instance-manager/thread_registry.cc: Auto merged server-tools/instance-manager/thread_registry.h: Auto merged server-tools/instance-manager/user_map.cc: Auto merged server-tools/instance-manager/user_map.h: Auto merged sql/Makefile.am: Auto merged sql/discover.cc: Auto merged sql/field.cc: Auto merged sql/field.h: Auto merged sql/field_conv.cc: Auto merged sql/filesort.cc: Auto merged sql/gen_lex_hash.cc: Auto merged sql/ha_ndbcluster.cc: Auto merged sql/ha_ndbcluster.h: Auto merged sql/handler.cc: Auto merged sql/handler.h: Auto merged sql/hostname.cc: Auto merged sql/init.cc: Auto merged sql/item.cc: Auto merged sql/item.h: Auto merged sql/item_cmpfunc.cc: Auto merged sql/item_cmpfunc.h: Auto merged sql/item_create.cc: Auto merged sql/item_create.h: Auto merged sql/item_func.cc: Auto merged sql/item_func.h: Auto merged sql/item_geofunc.cc: Auto merged sql/item_geofunc.h: Auto merged sql/item_row.cc: Auto merged sql/item_row.h: Auto merged sql/item_strfunc.cc: Auto merged sql/item_strfunc.h: Auto merged sql/item_subselect.cc: Auto merged sql/item_subselect.h: Auto merged sql/item_sum.cc: Auto merged sql/item_sum.h: Auto merged sql/item_timefunc.cc: Auto merged sql/item_timefunc.h: Auto merged sql/item_uniq.cc: Auto merged sql/key.cc: Auto merged sql/lex.h: Auto merged sql/lex_symbol.h: Auto merged sql/lock.cc: Auto merged sql/log.cc: Auto merged sql/log_event.cc: Auto merged sql/log_event.h: Auto merged sql/my_decimal.cc: Auto merged sql/my_decimal.h: Auto merged sql/my_lock.c: Auto merged sql/mysql_priv.h: Auto merged sql/mysqld.cc: Auto merged sql/net_serv.cc: Auto merged sql/opt_range.cc: Auto merged sql/opt_range.h: Auto merged sql/opt_sum.cc: Auto merged sql/parse_file.cc: Auto merged sql/parse_file.h: Auto merged sql/password.c: Auto merged sql/procedure.h: Auto merged sql/protocol.cc: Auto merged sql/protocol.h: Auto merged sql/records.cc: Auto merged sql/repl_failsafe.cc: Auto merged sql/set_var.cc: Auto merged sql/set_var.h: Auto merged sql/slave.cc: Auto merged sql/slave.h: Auto merged sql/sp.cc: Auto merged sql/sp.h: Auto merged sql/sp_cache.cc: Auto merged sql/sp_head.cc: Auto merged sql/sp_head.h: Auto merged sql/spatial.cc: Auto merged sql/spatial.h: Auto merged sql/sql_acl.cc: Auto merged sql/sql_acl.h: Auto merged sql/sql_analyse.cc: Auto merged sql/sql_analyse.h: Auto merged sql/sql_base.cc: Auto merged sql/sql_bitmap.h: Auto merged sql/sql_cache.cc: Auto merged sql/sql_cache.h: Auto merged sql/sql_class.cc: Auto merged sql/sql_class.h: Auto merged sql/sql_crypt.cc: Auto merged sql/sql_cursor.cc: Auto merged sql/sql_db.cc: Auto merged sql/sql_delete.cc: Auto merged sql/sql_derived.cc: Auto merged sql/sql_do.cc: Auto merged sql/sql_error.cc: Auto merged sql/sql_error.h: Auto merged sql/sql_handler.cc: Auto merged sql/sql_help.cc: Auto merged sql/sql_insert.cc: Auto merged sql/sql_lex.cc: Auto merged sql/sql_lex.h: Auto merged sql/sql_list.h: Auto merged sql/sql_load.cc: Auto merged sql/sql_manager.cc: Auto merged sql/sql_map.cc: Auto merged sql/sql_olap.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_prepare.cc: Auto merged sql/sql_rename.cc: Auto merged sql/sql_repl.cc: Auto merged sql/sql_repl.h: Auto merged sql/sql_select.cc: Auto merged sql/sql_select.h: Auto merged sql/sql_show.cc: Auto merged sql/sql_string.cc: Auto merged sql/sql_string.h: Auto merged sql/sql_table.cc: Auto merged sql/sql_test.cc: Auto merged sql/sql_trigger.cc: Auto merged sql/sql_trigger.h: Auto merged sql/sql_udf.cc: Auto merged sql/sql_union.cc: Auto merged sql/sql_update.cc: Auto merged sql/sql_view.cc: Auto merged sql-bench/Makefile.am: Auto merged sql-bench/as3ap.sh: Auto merged sql-bench/bench-count-distinct.sh: Auto merged sql-bench/bench-init.pl.sh: Auto merged sql-bench/compare-results.sh: Auto merged sql-bench/copy-db.sh: Auto merged sql/share/charsets/Index.xml: Auto merged sql/share/charsets/cp1250.xml: Auto merged sql/sql_view.h: Auto merged sql/sql_yacc.yy: Auto merged sql/stacktrace.c: Auto merged sql/stacktrace.h: Auto merged sql/strfunc.cc: Auto merged sql/structs.h: Auto merged sql/table.cc: Auto merged sql/table.h: Auto merged sql/time.cc: Auto merged sql/tztime.cc: Auto merged sql/tztime.h: Auto merged sql/udf_example.c: Auto merged sql/unireg.cc: Auto merged sql/unireg.h: Auto merged sql-bench/crash-me.sh: Auto merged sql-bench/run-all-tests.sh: Auto merged sql-bench/server-cfg.sh: Auto merged sql-bench/test-ATIS.sh: Auto merged sql-bench/test-alter-table.sh: Auto merged sql-bench/test-big-tables.sh: Auto merged sql-bench/test-connect.sh: Auto merged sql-bench/test-create.sh: Auto merged sql-bench/test-insert.sh: Auto merged sql-bench/test-select.sh: Auto merged sql-bench/test-transactions.sh: Auto merged sql-bench/test-wisconsin.sh: Auto merged sql-common/client.c: Auto merged sql-common/my_time.c: Auto merged storage/archive/ha_archive.cc: Auto merged storage/archive/ha_archive.h: Auto merged storage/blackhole/ha_blackhole.cc: Auto merged storage/blackhole/ha_blackhole.h: Auto merged storage/csv/ha_tina.cc: Auto merged storage/csv/ha_tina.h: Auto merged storage/example/ha_example.cc: Auto merged storage/example/ha_example.h: Auto merged storage/federated/ha_federated.cc: Auto merged storage/federated/ha_federated.h: Auto merged storage/heap/Makefile.am: Auto merged storage/heap/_check.c: Auto merged storage/heap/_rectest.c: Auto merged storage/heap/ha_heap.cc: Auto merged storage/heap/ha_heap.h: Auto merged storage/heap/heapdef.h: Auto merged storage/heap/hp_block.c: Auto merged storage/heap/hp_clear.c: Auto merged storage/heap/hp_close.c: Auto merged storage/heap/hp_create.c: Auto merged storage/heap/hp_delete.c: Auto merged storage/heap/hp_extra.c: Auto merged storage/heap/hp_hash.c: Auto merged storage/heap/hp_info.c: Auto merged storage/heap/hp_open.c: Auto merged storage/heap/hp_panic.c: Auto merged storage/heap/hp_rename.c: Auto merged storage/heap/hp_rfirst.c: Auto merged storage/heap/hp_rkey.c: Auto merged storage/heap/hp_rlast.c: Auto merged storage/heap/hp_rnext.c: Auto merged storage/heap/hp_rprev.c: Auto merged storage/heap/hp_rrnd.c: Auto merged storage/heap/hp_rsame.c: Auto merged storage/heap/hp_scan.c: Auto merged storage/heap/hp_static.c: Auto merged storage/heap/hp_test1.c: Auto merged storage/heap/hp_test2.c: Auto merged storage/heap/hp_update.c: Auto merged storage/heap/hp_write.c: Auto merged storage/innobase/Makefile.am: Auto merged storage/innobase/btr/Makefile.am: Auto merged storage/innobase/buf/Makefile.am: Auto merged storage/innobase/data/Makefile.am: Auto merged storage/innobase/dict/Makefile.am: Auto merged storage/innobase/dyn/Makefile.am: Auto merged storage/innobase/eval/Makefile.am: Auto merged storage/innobase/fil/Makefile.am: Auto merged storage/innobase/fsp/Makefile.am: Auto merged storage/innobase/fut/Makefile.am: Auto merged storage/innobase/ha/Makefile.am: Auto merged storage/innobase/handler/ha_innodb.cc: Auto merged storage/innobase/handler/ha_innodb.h: Auto merged storage/innobase/ibuf/Makefile.am: Auto merged storage/innobase/lock/Makefile.am: Auto merged storage/innobase/log/Makefile.am: Auto merged storage/innobase/mach/Makefile.am: Auto merged storage/innobase/mem/Makefile.am: Auto merged storage/innobase/mtr/Makefile.am: Auto merged storage/innobase/os/Makefile.am: Auto merged storage/innobase/page/Makefile.am: Auto merged storage/innobase/pars/Makefile.am: Auto merged storage/innobase/que/Makefile.am: Auto merged storage/innobase/read/Makefile.am: Auto merged storage/innobase/rem/Makefile.am: Auto merged storage/innobase/row/Makefile.am: Auto merged storage/innobase/srv/Makefile.am: Auto merged storage/innobase/sync/Makefile.am: Auto merged storage/innobase/thr/Makefile.am: Auto merged storage/innobase/trx/Makefile.am: Auto merged storage/innobase/usr/Makefile.am: Auto merged storage/innobase/ut/Makefile.am: Auto merged storage/myisam/Makefile.am: Auto merged storage/myisam/ft_boolean_search.c: Auto merged storage/myisam/ft_eval.c: Auto merged storage/myisam/ft_eval.h: Auto merged storage/myisam/ft_nlq_search.c: Auto merged storage/myisam/ft_parser.c: Auto merged storage/myisam/ft_static.c: Auto merged storage/myisam/ft_stem.c: Auto merged storage/myisam/ft_stopwords.c: Auto merged storage/myisam/ft_test1.c: Auto merged storage/myisam/ft_test1.h: Auto merged storage/myisam/ft_update.c: Auto merged storage/myisam/ftdefs.h: Auto merged storage/myisam/fulltext.h: Auto merged storage/myisam/ha_myisam.cc: Auto merged storage/myisam/ha_myisam.h: Auto merged storage/myisam/mi_cache.c: Auto merged storage/myisam/mi_changed.c: Auto merged storage/myisam/mi_check.c: Auto merged storage/myisam/mi_checksum.c: Auto merged storage/myisam/mi_close.c: Auto merged storage/myisam/mi_create.c: Auto merged storage/myisam/mi_dbug.c: Auto merged storage/myisam/mi_delete.c: Auto merged storage/myisam/mi_delete_all.c: Auto merged storage/myisam/mi_delete_table.c: Auto merged storage/myisam/mi_dynrec.c: Auto merged storage/myisam/mi_extra.c: Auto merged storage/myisam/mi_info.c: Auto merged storage/myisam/mi_key.c: Auto merged storage/myisam/mi_keycache.c: Auto merged storage/myisam/mi_locking.c: Auto merged storage/myisam/mi_log.c: Auto merged storage/myisam/mi_open.c: Auto merged storage/myisam/mi_packrec.c: Auto merged storage/myisam/mi_page.c: Auto merged storage/myisam/mi_panic.c: Auto merged storage/myisam/mi_preload.c: Auto merged storage/myisam/mi_range.c: Auto merged storage/myisam/mi_rename.c: Auto merged storage/myisam/mi_rfirst.c: Auto merged storage/myisam/mi_rkey.c: Auto merged storage/myisam/mi_rlast.c: Auto merged storage/myisam/mi_rnext.c: Auto merged storage/myisam/mi_rnext_same.c: Auto merged storage/myisam/mi_rprev.c: Auto merged storage/myisam/mi_rrnd.c: Auto merged storage/myisam/mi_rsame.c: Auto merged storage/myisam/mi_rsamepos.c: Auto merged storage/myisam/mi_scan.c: Auto merged storage/myisam/mi_search.c: Auto merged storage/myisam/mi_static.c: Auto merged storage/myisam/mi_statrec.c: Auto merged storage/myisam/mi_test1.c: Auto merged storage/myisam/mi_test2.c: Auto merged storage/myisam/mi_test3.c: Auto merged storage/myisam/mi_unique.c: Auto merged storage/myisam/mi_update.c: Auto merged storage/myisam/mi_write.c: Auto merged storage/myisam/myisam_ftdump.c: Auto merged storage/myisam/myisamchk.c: Auto merged storage/myisam/myisamdef.h: Auto merged storage/myisam/myisamlog.c: Auto merged storage/myisam/myisampack.c: Auto merged storage/myisam/rt_index.c: Auto merged storage/myisam/rt_index.h: Auto merged storage/myisam/rt_key.c: Auto merged storage/myisam/rt_key.h: Auto merged storage/myisam/rt_mbr.c: Auto merged storage/myisam/rt_mbr.h: Auto merged storage/myisam/rt_split.c: Auto merged storage/myisam/rt_test.c: Auto merged storage/myisam/sort.c: Auto merged storage/myisam/sp_defs.h: Auto merged storage/myisam/sp_key.c: Auto merged storage/myisam/sp_test.c: Auto merged storage/myisammrg/Makefile.am: Auto merged storage/myisammrg/ha_myisammrg.cc: Auto merged storage/myisammrg/ha_myisammrg.h: Auto merged storage/myisammrg/myrg_close.c: Auto merged storage/myisammrg/myrg_create.c: Auto merged storage/myisammrg/myrg_def.h: Auto merged storage/myisammrg/myrg_delete.c: Auto merged storage/myisammrg/myrg_extra.c: Auto merged storage/myisammrg/myrg_info.c: Auto merged storage/myisammrg/myrg_locking.c: Auto merged storage/myisammrg/myrg_open.c: Auto merged storage/myisammrg/myrg_panic.c: Auto merged storage/myisammrg/myrg_queue.c: Auto merged storage/myisammrg/myrg_range.c: Auto merged storage/myisammrg/myrg_rfirst.c: Auto merged storage/myisammrg/myrg_rkey.c: Auto merged storage/myisammrg/myrg_rlast.c: Auto merged storage/myisammrg/myrg_rnext.c: Auto merged storage/myisammrg/myrg_rnext_same.c: Auto merged storage/myisammrg/myrg_rprev.c: Auto merged storage/myisammrg/myrg_rrnd.c: Auto merged storage/myisammrg/myrg_rsame.c: Auto merged storage/myisammrg/myrg_static.c: Auto merged storage/myisammrg/myrg_update.c: Auto merged storage/myisammrg/myrg_write.c: Auto merged storage/ndb/include/debugger/DebuggerNames.hpp: Auto merged storage/ndb/include/debugger/EventLogger.hpp: Auto merged storage/ndb/include/debugger/GrepError.hpp: Auto merged storage/ndb/include/debugger/SignalLoggerManager.hpp: Auto merged storage/ndb/include/ndb_constants.h: Auto merged storage/ndb/include/ndb_global.h.in: Auto merged storage/ndb/include/ndb_init.h: Auto merged storage/ndb/include/ndb_types.h.in: Auto merged storage/ndb/include/ndb_version.h.in: Auto merged storage/ndb/include/editline/editline.h: Auto merged storage/ndb/include/kernel/AttributeDescriptor.hpp: Auto merged storage/ndb/include/kernel/AttributeHeader.hpp: Auto merged storage/ndb/include/kernel/AttributeList.hpp: Auto merged storage/ndb/include/kernel/BlockNumbers.h: Auto merged storage/ndb/include/kernel/GlobalSignalNumbers.h: Auto merged storage/ndb/include/kernel/GrepEvent.hpp: Auto merged storage/ndb/include/kernel/Interpreter.hpp: Auto merged storage/ndb/include/kernel/LogLevel.hpp: Auto merged storage/ndb/include/kernel/NodeBitmask.hpp: Auto merged storage/ndb/include/kernel/NodeInfo.hpp: Auto merged storage/ndb/include/kernel/NodeState.hpp: Auto merged storage/ndb/include/kernel/RefConvert.hpp: Auto merged storage/ndb/include/kernel/kernel_types.h: Auto merged storage/ndb/include/kernel/ndb_limits.h: Auto merged storage/ndb/include/kernel/signaldata/AbortAll.hpp: Auto merged storage/ndb/include/kernel/signaldata/AccFrag.hpp: Auto merged storage/ndb/include/kernel/signaldata/AccLock.hpp: Auto merged storage/ndb/include/kernel/signaldata/AccScan.hpp: Auto merged storage/ndb/include/kernel/signaldata/AccSizeAltReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/AlterIndx.hpp: Auto merged storage/ndb/include/kernel/signaldata/AlterTab.hpp: Auto merged storage/ndb/include/kernel/signaldata/AlterTable.hpp: Auto merged storage/ndb/include/kernel/signaldata/AlterTrig.hpp: Auto merged storage/ndb/include/kernel/signaldata/ApiBroadcast.hpp: Auto merged storage/ndb/include/kernel/signaldata/ApiRegSignalData.hpp: Auto merged storage/ndb/include/kernel/signaldata/ApiVersion.hpp: Auto merged storage/ndb/include/kernel/signaldata/ArbitSignalData.hpp: Auto merged storage/ndb/include/kernel/signaldata/AttrInfo.hpp: Auto merged storage/ndb/include/kernel/signaldata/BackupContinueB.hpp: Auto merged storage/ndb/include/kernel/signaldata/BackupImpl.hpp: Auto merged storage/ndb/include/kernel/signaldata/BackupSignalData.hpp: Auto merged storage/ndb/include/kernel/signaldata/BlockCommitOrd.hpp: Auto merged storage/ndb/include/kernel/signaldata/BuildIndx.hpp: Auto merged storage/ndb/include/kernel/signaldata/CheckNodeGroups.hpp: Auto merged storage/ndb/include/kernel/signaldata/CloseComReqConf.hpp: Auto merged storage/ndb/include/kernel/signaldata/CmInit.hpp: Auto merged storage/ndb/include/kernel/trigger_definitions.h: Auto merged storage/ndb/include/kernel/signaldata/CmRegSignalData.hpp: Auto merged storage/ndb/include/kernel/signaldata/CmvmiCfgConf.hpp: Auto merged storage/ndb/include/kernel/signaldata/CntrMasterConf.hpp: Auto merged storage/ndb/include/kernel/signaldata/CntrMasterReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/ConfigParamId.hpp: Auto merged storage/ndb/include/kernel/signaldata/ContinueFragmented.hpp: Auto merged storage/ndb/include/kernel/signaldata/CopyActive.hpp: Auto merged storage/ndb/include/kernel/signaldata/CopyFrag.hpp: Auto merged storage/ndb/include/kernel/signaldata/CopyGCIReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/CreateEvnt.hpp: Auto merged storage/ndb/include/kernel/signaldata/CreateFrag.hpp: Auto merged storage/ndb/include/kernel/signaldata/CreateFragmentation.hpp: Auto merged storage/ndb/include/kernel/signaldata/CreateIndx.hpp: Auto merged storage/ndb/include/kernel/signaldata/CreateTab.hpp: Auto merged storage/ndb/include/kernel/signaldata/CreateTable.hpp: Auto merged storage/ndb/include/kernel/signaldata/CreateTrig.hpp: Auto merged storage/ndb/include/kernel/signaldata/DiAddTab.hpp: Auto merged storage/ndb/include/kernel/signaldata/DiGetNodes.hpp: Auto merged storage/ndb/include/kernel/signaldata/DictLock.hpp: Auto merged storage/ndb/include/kernel/signaldata/DictSchemaInfo.hpp: Auto merged storage/ndb/include/kernel/signaldata/DictSizeAltReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/DictStart.hpp: Auto merged storage/ndb/include/kernel/signaldata/DictTabInfo.hpp: Auto merged storage/ndb/include/kernel/signaldata/DihAddFrag.hpp: Auto merged storage/ndb/include/kernel/signaldata/DihContinueB.hpp: Auto merged storage/ndb/include/kernel/signaldata/DihSizeAltReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/DihStartTab.hpp: Auto merged storage/ndb/include/kernel/signaldata/DihSwitchReplica.hpp: Auto merged storage/ndb/include/kernel/signaldata/DisconnectRep.hpp: Auto merged storage/ndb/include/kernel/signaldata/DropIndx.hpp: Auto merged storage/ndb/include/kernel/signaldata/DropTab.hpp: Auto merged storage/ndb/include/kernel/signaldata/DropTabFile.hpp: Auto merged storage/ndb/include/kernel/signaldata/DropTable.hpp: Auto merged storage/ndb/include/kernel/signaldata/DropTrig.hpp: Auto merged storage/ndb/include/kernel/signaldata/DumpStateOrd.hpp: Auto merged storage/ndb/include/kernel/signaldata/EmptyLcp.hpp: Auto merged storage/ndb/include/kernel/signaldata/EndTo.hpp: Auto merged storage/ndb/include/kernel/signaldata/EventReport.hpp: Auto merged storage/ndb/include/kernel/signaldata/EventSubscribeReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/ExecFragReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/FailRep.hpp: Auto merged storage/ndb/include/kernel/signaldata/FireTrigOrd.hpp: Auto merged storage/ndb/include/kernel/signaldata/FsAppendReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/FsCloseReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/FsConf.hpp: Auto merged storage/ndb/include/kernel/signaldata/FsOpenReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/FsReadWriteReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/FsRef.hpp: Auto merged storage/ndb/include/kernel/signaldata/FsRemoveReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/GCPSave.hpp: Auto merged storage/ndb/include/kernel/signaldata/GetTabInfo.hpp: Auto merged storage/ndb/include/kernel/signaldata/GetTableId.hpp: Auto merged storage/ndb/include/kernel/signaldata/GrepImpl.hpp: Auto merged storage/ndb/include/kernel/signaldata/HotSpareRep.hpp: Auto merged storage/ndb/include/kernel/signaldata/IndxAttrInfo.hpp: Auto merged storage/ndb/include/kernel/signaldata/IndxKeyInfo.hpp: Auto merged storage/ndb/include/kernel/signaldata/InvalidateNodeLCPConf.hpp: Auto merged storage/ndb/include/kernel/signaldata/InvalidateNodeLCPReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/KeyInfo.hpp: Auto merged storage/ndb/include/kernel/signaldata/LCP.hpp: Auto merged storage/ndb/include/kernel/signaldata/ListTables.hpp: Auto merged storage/ndb/include/kernel/signaldata/LqhFrag.hpp: Auto merged storage/ndb/include/kernel/signaldata/LqhKey.hpp: Auto merged storage/ndb/include/kernel/signaldata/LqhSizeAltReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/LqhTransConf.hpp: Auto merged storage/ndb/include/kernel/signaldata/ManagementServer.hpp: Auto merged storage/ndb/include/kernel/signaldata/MasterGCP.hpp: Auto merged storage/ndb/include/kernel/signaldata/MasterLCP.hpp: Auto merged storage/ndb/include/kernel/signaldata/NFCompleteRep.hpp: Auto merged storage/ndb/include/kernel/signaldata/NdbSttor.hpp: Auto merged storage/ndb/include/kernel/signaldata/NdbfsContinueB.hpp: Auto merged storage/ndb/include/kernel/signaldata/NextScan.hpp: Auto merged storage/ndb/include/kernel/signaldata/NodeFailRep.hpp: Auto merged storage/ndb/include/kernel/signaldata/NodeStateSignalData.hpp: Auto merged storage/ndb/include/kernel/signaldata/PackedSignal.hpp: Auto merged storage/ndb/include/kernel/signaldata/PrepDropTab.hpp: Auto merged storage/ndb/include/kernel/signaldata/PrepFailReqRef.hpp: Auto merged storage/ndb/include/kernel/signaldata/ReadNodesConf.hpp: Auto merged storage/ndb/include/kernel/signaldata/RelTabMem.hpp: Auto merged storage/ndb/include/kernel/signaldata/RepImpl.hpp: Auto merged storage/ndb/include/kernel/signaldata/ResumeReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/ScanFrag.hpp: Auto merged storage/ndb/include/kernel/signaldata/ScanTab.hpp: Auto merged storage/ndb/include/kernel/signaldata/SetLogLevelOrd.hpp: Auto merged storage/ndb/include/kernel/signaldata/SetVarReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/SignalData.hpp: Auto merged storage/ndb/include/kernel/signaldata/SignalDataPrint.hpp: Auto merged storage/ndb/include/kernel/signaldata/SignalDroppedRep.hpp: Auto merged storage/ndb/include/kernel/signaldata/SrFragidConf.hpp: Auto merged storage/ndb/include/kernel/signaldata/StartFragReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/StartInfo.hpp: Auto merged storage/ndb/include/kernel/signaldata/StartMe.hpp: Auto merged storage/ndb/include/kernel/signaldata/StartOrd.hpp: Auto merged storage/ndb/include/kernel/signaldata/StartPerm.hpp: Auto merged storage/ndb/include/kernel/signaldata/StartRec.hpp: Auto merged storage/ndb/include/kernel/signaldata/StartTo.hpp: Auto merged storage/ndb/include/kernel/signaldata/StopMe.hpp: Auto merged storage/ndb/include/kernel/signaldata/StopPerm.hpp: Auto merged storage/ndb/include/kernel/signaldata/StopReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/SumaImpl.hpp: Auto merged storage/ndb/include/kernel/signaldata/SystemError.hpp: Auto merged storage/ndb/include/kernel/signaldata/TamperOrd.hpp: Auto merged storage/ndb/include/kernel/signaldata/TcCommit.hpp: Auto merged storage/ndb/include/kernel/signaldata/TcContinueB.hpp: Auto merged storage/ndb/include/kernel/signaldata/TcHbRep.hpp: Auto merged storage/ndb/include/kernel/signaldata/TcIndx.hpp: Auto merged storage/ndb/include/kernel/signaldata/TcKeyConf.hpp: Auto merged storage/ndb/include/kernel/signaldata/TcKeyFailConf.hpp: Auto merged storage/ndb/include/kernel/signaldata/TcKeyRef.hpp: Auto merged storage/ndb/include/kernel/signaldata/TcKeyReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/TcRollbackRep.hpp: Auto merged storage/ndb/include/kernel/signaldata/TcSizeAltReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/TestOrd.hpp: Auto merged storage/ndb/include/kernel/signaldata/TransIdAI.hpp: Auto merged storage/ndb/include/kernel/signaldata/TrigAttrInfo.hpp: Auto merged storage/ndb/include/kernel/signaldata/TupCommit.hpp: Auto merged storage/ndb/include/kernel/signaldata/TupFrag.hpp: Auto merged storage/ndb/include/kernel/signaldata/TupKey.hpp: Auto merged storage/ndb/include/kernel/signaldata/TupSizeAltReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/TuxBound.hpp: Auto merged storage/ndb/include/kernel/signaldata/TuxContinueB.hpp: Auto merged storage/ndb/include/kernel/signaldata/TuxMaint.hpp: Auto merged storage/ndb/include/kernel/signaldata/TuxSizeAltReq.hpp: Auto merged storage/ndb/include/kernel/signaldata/UpdateTo.hpp: Auto merged storage/ndb/include/kernel/signaldata/UtilDelete.hpp: Auto merged storage/ndb/include/kernel/signaldata/UtilExecute.hpp: Auto merged storage/ndb/include/kernel/signaldata/UtilLock.hpp: Auto merged storage/ndb/include/kernel/signaldata/UtilPrepare.hpp: Auto merged storage/ndb/include/kernel/signaldata/UtilRelease.hpp: Auto merged storage/ndb/include/kernel/signaldata/UtilSequence.hpp: Auto merged storage/ndb/include/kernel/signaldata/WaitGCP.hpp: Auto merged storage/ndb/include/logger/ConsoleLogHandler.hpp: Auto merged storage/ndb/include/logger/FileLogHandler.hpp: Auto merged storage/ndb/include/logger/LogHandler.hpp: Auto merged storage/ndb/include/logger/Logger.hpp: Auto merged storage/ndb/include/logger/SysLogHandler.hpp: Auto merged storage/ndb/include/mgmapi/mgmapi.h: Auto merged storage/ndb/include/mgmapi/mgmapi_debug.h: Auto merged storage/ndb/include/mgmapi/ndb_logevent.h: Auto merged storage/ndb/include/mgmapi/ndbd_exit_codes.h: Auto merged storage/ndb/include/mgmcommon/ConfigRetriever.hpp: Auto merged storage/ndb/include/mgmcommon/IPCConfig.hpp: Auto merged storage/ndb/include/mgmcommon/MgmtErrorReporter.hpp: Auto merged storage/ndb/include/ndbapi/Ndb.hpp: Auto merged storage/ndb/include/ndbapi/NdbApi.hpp: Auto merged storage/ndb/include/ndbapi/NdbBlob.hpp: Auto merged storage/ndb/include/ndbapi/NdbDictionary.hpp: Auto merged storage/ndb/include/ndbapi/NdbError.hpp: Auto merged storage/ndb/include/ndbapi/NdbEventOperation.hpp: Auto merged storage/ndb/include/ndbapi/NdbIndexOperation.hpp: Auto merged storage/ndb/include/ndbapi/NdbIndexScanOperation.hpp: Auto merged storage/ndb/include/ndbapi/NdbOperation.hpp: Auto merged storage/ndb/include/ndbapi/NdbPool.hpp: Auto merged storage/ndb/include/ndbapi/NdbRecAttr.hpp: Auto merged storage/ndb/include/ndbapi/NdbReceiver.hpp: Auto merged storage/ndb/include/ndbapi/NdbScanFilter.hpp: Auto merged storage/ndb/include/ndbapi/NdbScanOperation.hpp: Auto merged storage/ndb/include/ndbapi/NdbTransaction.hpp: Auto merged storage/ndb/include/ndbapi/ndb_cluster_connection.hpp: Auto merged storage/ndb/include/ndbapi/ndb_opt_defaults.h: Auto merged storage/ndb/include/ndbapi/ndbapi_limits.h: Auto merged storage/ndb/include/ndbapi/ndberror.h: Auto merged storage/ndb/include/newtonapi/dba.h: Auto merged storage/ndb/include/newtonapi/defs/pcn_types.h: Auto merged storage/ndb/include/portlib/NdbCondition.h: Auto merged storage/ndb/include/portlib/NdbConfig.h: Auto merged storage/ndb/include/portlib/NdbDaemon.h: Auto merged storage/ndb/include/portlib/NdbEnv.h: Auto merged storage/ndb/include/portlib/NdbHost.h: Auto merged storage/ndb/include/portlib/NdbMain.h: Auto merged storage/ndb/include/portlib/NdbMem.h: Auto merged storage/ndb/include/portlib/NdbMutex.h: Auto merged storage/ndb/include/portlib/NdbSleep.h: Auto merged storage/ndb/include/portlib/NdbTCP.h: Auto merged storage/ndb/include/portlib/NdbThread.h: Auto merged storage/ndb/include/portlib/NdbTick.h: Auto merged storage/ndb/include/portlib/PortDefs.h: Auto merged storage/ndb/include/portlib/prefetch.h: Auto merged storage/ndb/include/transporter/TransporterCallback.hpp: Auto merged storage/ndb/include/transporter/TransporterDefinitions.hpp: Auto merged storage/ndb/include/transporter/TransporterRegistry.hpp: Auto merged storage/ndb/include/util/BaseString.hpp: Auto merged storage/ndb/include/util/Bitmask.hpp: Auto merged storage/ndb/include/util/File.hpp: Auto merged storage/ndb/include/util/InputStream.hpp: Auto merged storage/ndb/include/util/NdbAutoPtr.hpp: Auto merged storage/ndb/include/util/NdbOut.hpp: Auto merged storage/ndb/include/util/NdbSqlUtil.hpp: Auto merged storage/ndb/include/util/OutputStream.hpp: Auto merged storage/ndb/include/util/Parser.hpp: Auto merged storage/ndb/include/util/Properties.hpp: Auto merged storage/ndb/include/util/SimpleProperties.hpp: Auto merged storage/ndb/include/util/SocketAuthenticator.hpp: Auto merged storage/ndb/include/util/SocketClient.hpp: Auto merged storage/ndb/include/util/SocketServer.hpp: Auto merged storage/ndb/include/util/UtilBuffer.hpp: Auto merged storage/ndb/include/util/Vector.hpp: Auto merged storage/ndb/include/util/basestring_vsnprintf.h: Auto merged storage/ndb/include/util/md5_hash.hpp: Auto merged storage/ndb/include/util/ndb_opts.h: Auto merged storage/ndb/include/util/random.h: Auto merged storage/ndb/include/util/socket_io.h: Auto merged storage/ndb/include/util/uucode.h: Auto merged storage/ndb/include/util/version.h: Auto merged storage/ndb/src/common/debugger/BlockNames.cpp: Auto merged storage/ndb/src/common/debugger/DebuggerNames.cpp: Auto merged storage/ndb/src/common/debugger/EventLogger.cpp: Auto merged storage/ndb/src/common/debugger/GrepError.cpp: Auto merged storage/ndb/src/common/debugger/SignalLoggerManager.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/AccLock.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/AlterIndx.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/AlterTab.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/AlterTable.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/AlterTrig.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/BackupImpl.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/BackupSignalData.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/CloseComReqConf.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/ContinueB.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/CopyGCI.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/CreateEvnt.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/CreateFragmentation.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/CreateIndx.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/CreateTrig.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/DictTabInfo.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/DihContinueB.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/DihSwitchReplicaReq.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/DisconnectRep.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/DropIndx.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/DropTab.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/DropTrig.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/FailRep.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/FireTrigOrd.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/FsAppendReq.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/FsCloseReq.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/FsConf.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/FsOpenReq.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/FsReadWriteReq.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/FsRef.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/GCPSave.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/IndxAttrInfo.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/IndxKeyInfo.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/LCP.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/LqhFrag.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/LqhKey.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/LqhTrans.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/MasterLCP.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/NFCompleteRep.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/NdbSttor.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/NdbfsContinueB.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/PackedSignal.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/PrepDropTab.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/PrepFailReqRef.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/ScanFrag.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/ScanTab.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/SignalDataPrint.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/SignalDroppedRep.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/SignalNames.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/StartRec.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/SumaImpl.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/SystemError.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/TcIndx.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/TcKeyConf.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/TcKeyRef.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/TcKeyReq.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/TcRollbackRep.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/TrigAttrInfo.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/TupCommit.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/TupKey.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/TuxMaint.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/UtilDelete.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/UtilExecute.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/UtilLock.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/UtilPrepare.cpp: Auto merged storage/ndb/src/common/debugger/signaldata/UtilSequence.cpp: Auto merged storage/ndb/src/common/logger/ConsoleLogHandler.cpp: Auto merged storage/ndb/src/common/logger/FileLogHandler.cpp: Auto merged storage/ndb/src/common/logger/LogHandler.cpp: Auto merged storage/ndb/src/common/logger/LogHandlerList.cpp: Auto merged storage/ndb/src/common/logger/LogHandlerList.hpp: Auto merged storage/ndb/src/common/logger/Logger.cpp: Auto merged storage/ndb/src/common/logger/SysLogHandler.cpp: Auto merged storage/ndb/src/common/logger/listtest/LogHandlerListUnitTest.cpp: Auto merged storage/ndb/src/common/logger/listtest/LogHandlerListUnitTest.hpp: Auto merged storage/ndb/src/common/logger/loggertest/LoggerUnitTest.cpp: Auto merged storage/ndb/src/common/logger/loggertest/LoggerUnitTest.hpp: Auto merged storage/ndb/src/common/mgmcommon/ConfigRetriever.cpp: Auto merged storage/ndb/src/common/mgmcommon/IPCConfig.cpp: Auto merged storage/ndb/src/common/mgmcommon/printConfig/printConfig.cpp: Auto merged storage/ndb/src/common/portlib/NdbCondition.c: Auto merged storage/ndb/src/common/portlib/NdbConfig.c: Auto merged storage/ndb/src/common/portlib/NdbDaemon.c: Auto merged storage/ndb/src/common/portlib/NdbEnv.c: Auto merged storage/ndb/src/common/portlib/NdbHost.c: Auto merged storage/ndb/src/common/portlib/NdbMem.c: Auto merged storage/ndb/src/common/portlib/NdbMutex.c: Auto merged storage/ndb/src/common/portlib/NdbPortLibTest.cpp: Auto merged storage/ndb/src/common/portlib/NdbSleep.c: Auto merged storage/ndb/src/common/portlib/NdbTCP.cpp: Auto merged storage/ndb/src/common/portlib/NdbThread.c: Auto merged storage/ndb/src/common/portlib/NdbTick.c: Auto merged storage/ndb/src/common/portlib/memtest.c: Auto merged storage/ndb/src/common/portlib/mmstest.cpp: Auto merged storage/ndb/src/common/portlib/munmaptest.cpp: Auto merged storage/ndb/src/common/portlib/win32/NdbCondition.c: Auto merged storage/ndb/src/common/portlib/win32/NdbDaemon.c: Auto merged storage/ndb/src/common/portlib/win32/NdbEnv.c: Auto merged storage/ndb/src/common/portlib/win32/NdbHost.c: Auto merged storage/ndb/src/common/portlib/win32/NdbMem.c: Auto merged storage/ndb/src/common/portlib/win32/NdbMutex.c: Auto merged storage/ndb/src/common/portlib/win32/NdbSleep.c: Auto merged storage/ndb/src/common/portlib/win32/NdbTCP.c: Auto merged storage/ndb/src/common/portlib/win32/NdbThread.c: Auto merged storage/ndb/src/common/portlib/win32/NdbTick.c: Auto merged storage/ndb/src/common/transporter/Packer.cpp: Auto merged storage/ndb/src/common/transporter/Packer.hpp: Auto merged storage/ndb/src/common/transporter/SCI_Transporter.cpp: Auto merged storage/ndb/src/common/transporter/SCI_Transporter.hpp: Auto merged storage/ndb/src/common/transporter/SHM_Buffer.hpp: Auto merged storage/ndb/src/common/transporter/SHM_Transporter.cpp: Auto merged storage/ndb/src/common/transporter/SHM_Transporter.hpp: Auto merged storage/ndb/src/common/transporter/SHM_Transporter.unix.cpp: Auto merged storage/ndb/src/common/transporter/SHM_Transporter.win32.cpp: Auto merged storage/ndb/src/common/transporter/SendBuffer.cpp: Auto merged storage/ndb/src/common/transporter/SendBuffer.hpp: Auto merged storage/ndb/src/common/transporter/TCP_Transporter.cpp: Auto merged storage/ndb/src/common/transporter/TCP_Transporter.hpp: Auto merged storage/ndb/src/common/transporter/Transporter.cpp: Auto merged storage/ndb/src/common/transporter/Transporter.hpp: Auto merged storage/ndb/src/common/transporter/TransporterInternalDefinitions.hpp: Auto merged storage/ndb/src/common/transporter/TransporterRegistry.cpp: Auto merged storage/ndb/src/common/transporter/basictest/basicTransporterTest.cpp: Auto merged storage/ndb/src/common/transporter/buddy.cpp: Auto merged storage/ndb/src/common/transporter/buddy.hpp: Auto merged storage/ndb/src/common/transporter/failoverSCI/failoverSCI.cpp: Auto merged storage/ndb/src/common/transporter/perftest/perfTransporterTest.cpp: Auto merged storage/ndb/src/common/transporter/priotest/prioSCI/prioSCI.cpp: Auto merged storage/ndb/src/common/transporter/priotest/prioSHM/prioSHM.cpp: Auto merged storage/ndb/src/common/transporter/priotest/prioTCP/prioTCP.cpp: Auto merged storage/ndb/src/common/transporter/priotest/prioTransporterTest.cpp: Auto merged storage/ndb/src/common/transporter/priotest/prioTransporterTest.hpp: Auto merged storage/ndb/src/common/util/BaseString.cpp: Auto merged storage/ndb/src/common/util/File.cpp: Auto merged storage/ndb/src/common/util/InputStream.cpp: Auto merged storage/ndb/src/common/util/NdbOut.cpp: Auto merged storage/ndb/src/common/util/NdbSqlUtil.cpp: Auto merged storage/ndb/src/common/util/OutputStream.cpp: Auto merged storage/ndb/src/common/util/Parser.cpp: Auto merged storage/ndb/src/common/util/Properties.cpp: Auto merged storage/ndb/src/common/util/SimpleProperties.cpp: Auto merged storage/ndb/src/common/util/SocketAuthenticator.cpp: Auto merged storage/ndb/src/common/util/SocketClient.cpp: Auto merged storage/ndb/src/common/util/SocketServer.cpp: Auto merged storage/ndb/src/common/util/basestring_vsnprintf.c: Auto merged storage/ndb/src/common/util/md5_hash.cpp: Auto merged storage/ndb/src/common/util/ndb_init.c: Auto merged storage/ndb/src/common/util/random.c: Auto merged storage/ndb/src/common/util/socket_io.cpp: Auto merged storage/ndb/src/common/util/strdup.c: Auto merged storage/ndb/src/common/util/filetest/FileUnitTest.cpp: Auto merged storage/ndb/src/common/util/filetest/FileUnitTest.hpp: Auto merged storage/ndb/src/common/util/testProperties/testProperties.cpp: Auto merged storage/ndb/src/common/util/testSimpleProperties/sp_test.cpp: Auto merged storage/ndb/src/common/util/uucode.c: Auto merged storage/ndb/src/common/util/version.c: Auto merged storage/ndb/src/cw/cpcc-win32/C++/CPC_GUI.cpp: Auto merged storage/ndb/src/cw/cpcc-win32/C++/CPC_GUI.h: Auto merged storage/ndb/src/cw/cpcc-win32/C++/NdbControls.cpp: Auto merged storage/ndb/src/cw/cpcc-win32/C++/StdAfx.cpp: Auto merged storage/ndb/src/cw/cpcc-win32/C++/StdAfx.h: Auto merged storage/ndb/src/cw/cpcc-win32/C++/TreeView.cpp: Auto merged storage/ndb/src/cw/cpcc-win32/C++/TreeView.h: Auto merged storage/ndb/src/cw/cpcc-win32/C++/resource.h: Auto merged storage/ndb/src/cw/cpcd/APIService.cpp: Auto merged storage/ndb/src/cw/cpcd/APIService.hpp: Auto merged storage/ndb/src/cw/cpcd/CPCD.cpp: Auto merged storage/ndb/src/cw/cpcd/CPCD.hpp: Auto merged storage/ndb/src/cw/cpcd/Monitor.cpp: Auto merged storage/ndb/src/cw/cpcd/Process.cpp: Auto merged storage/ndb/src/cw/cpcd/common.cpp: Auto merged storage/ndb/src/cw/cpcd/common.hpp: Auto merged storage/ndb/src/cw/cpcd/main.cpp: Auto merged storage/ndb/src/cw/test/socketclient/socketClientTest.cpp: Auto merged storage/ndb/src/cw/util/ClientInterface.cpp: Auto merged storage/ndb/src/cw/util/ClientInterface.hpp: Auto merged storage/ndb/src/cw/util/SocketRegistry.cpp: Auto merged storage/ndb/src/cw/util/SocketRegistry.hpp: Auto merged storage/ndb/src/cw/util/SocketService.cpp: Auto merged storage/ndb/src/cw/util/SocketService.hpp: Auto merged storage/ndb/src/kernel/SimBlockList.cpp: Auto merged storage/ndb/src/kernel/blocks/mutexes.hpp: Auto merged storage/ndb/src/kernel/main.cpp: Auto merged storage/ndb/src/kernel/blocks/backup/Backup.cpp: Auto merged storage/ndb/src/kernel/blocks/backup/Backup.hpp: Auto merged storage/ndb/src/kernel/blocks/backup/BackupFormat.hpp: Auto merged storage/ndb/src/kernel/blocks/backup/BackupInit.cpp: Auto merged storage/ndb/src/kernel/blocks/backup/FsBuffer.hpp: Auto merged storage/ndb/src/kernel/blocks/backup/read.cpp: Auto merged storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.cpp: Auto merged storage/ndb/src/kernel/blocks/cmvmi/Cmvmi.hpp: Auto merged storage/ndb/src/kernel/blocks/dbacc/Dbacc.hpp: Auto merged storage/ndb/src/kernel/blocks/dbacc/DbaccInit.cpp: Auto merged storage/ndb/src/kernel/blocks/dbacc/DbaccMain.cpp: Auto merged storage/ndb/src/kernel/blocks/dbdict/Dbdict.cpp: Auto merged storage/ndb/src/kernel/blocks/dbdict/Dbdict.hpp: Auto merged storage/ndb/src/kernel/blocks/dbdict/SchemaFile.hpp: Auto merged storage/ndb/src/kernel/blocks/dbdict/printSchemaFile.cpp: Auto merged storage/ndb/src/kernel/blocks/dbdih/Dbdih.hpp: Auto merged storage/ndb/src/kernel/blocks/dbdih/DbdihInit.cpp: Auto merged storage/ndb/src/kernel/blocks/dbdih/DbdihMain.cpp: Auto merged storage/ndb/src/kernel/blocks/dbdih/Sysfile.hpp: Auto merged storage/ndb/src/kernel/blocks/dbdih/printSysfile/printSysfile.cpp: Auto merged storage/ndb/src/kernel/blocks/dblqh/Dblqh.hpp: Auto merged storage/ndb/src/kernel/blocks/dblqh/DblqhInit.cpp: Auto merged storage/ndb/src/kernel/blocks/dblqh/DblqhMain.cpp: Auto merged storage/ndb/src/kernel/blocks/dblqh/redoLogReader/records.cpp: Auto merged storage/ndb/src/kernel/blocks/dblqh/redoLogReader/records.hpp: Auto merged storage/ndb/src/kernel/blocks/dblqh/redoLogReader/redoLogFileReader.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtc/Dbtc.hpp: Auto merged storage/ndb/src/kernel/blocks/dbtc/DbtcInit.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtc/DbtcMain.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/AttributeOffset.hpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/Dbtup.hpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupAbort.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupBuffer.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupCommit.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupDebug.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupExecQuery.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupFixAlloc.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupGen.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupIndex.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupMeta.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupPagMan.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupPageMap.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupScan.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupStoredProcDef.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupTabDesMan.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtup/DbtupTrigger.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtux/Dbtux.hpp: Auto merged storage/ndb/src/kernel/blocks/dbtux/DbtuxCmp.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtux/DbtuxDebug.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtux/DbtuxGen.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtux/DbtuxMaint.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtux/DbtuxMeta.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtux/DbtuxNode.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtux/DbtuxScan.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtux/DbtuxSearch.cpp: Auto merged storage/ndb/src/kernel/blocks/dbtux/DbtuxTree.cpp: Auto merged storage/ndb/src/kernel/blocks/dbutil/DbUtil.cpp: Auto merged storage/ndb/src/kernel/blocks/dbutil/DbUtil.hpp: Auto merged storage/ndb/src/kernel/blocks/ndbcntr/Ndbcntr.hpp: Auto merged storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrInit.cpp: Auto merged storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrMain.cpp: Auto merged storage/ndb/src/kernel/blocks/ndbcntr/NdbcntrSysTable.cpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.cpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/AsyncFile.hpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/AsyncFileTest/AsyncFileTest.cpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/CircularIndex.cpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/CircularIndex.hpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/Filename.cpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/Filename.hpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/MemoryChannel.cpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/MemoryChannel.hpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/MemoryChannelTest/MemoryChannelTest.cpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.cpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/Ndbfs.hpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/OpenFiles.hpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/Pool.hpp: Auto merged storage/ndb/src/kernel/blocks/ndbfs/VoidFs.cpp: Auto merged storage/ndb/src/kernel/blocks/qmgr/Qmgr.hpp: Auto merged storage/ndb/src/kernel/blocks/qmgr/QmgrInit.cpp: Auto merged storage/ndb/src/kernel/blocks/qmgr/QmgrMain.cpp: Auto merged storage/ndb/src/kernel/blocks/qmgr/timer.hpp: Auto merged storage/ndb/src/kernel/blocks/suma/Suma.cpp: Auto merged storage/ndb/src/kernel/blocks/suma/Suma.hpp: Auto merged storage/ndb/src/kernel/blocks/suma/SumaInit.cpp: Auto merged storage/ndb/src/kernel/blocks/trix/Trix.cpp: Auto merged storage/ndb/src/kernel/blocks/trix/Trix.hpp: Auto merged storage/ndb/src/kernel/error/ErrorHandlingMacros.hpp: Auto merged storage/ndb/src/kernel/error/ErrorReporter.cpp: Auto merged storage/ndb/src/kernel/error/ErrorReporter.hpp: Auto merged storage/ndb/src/kernel/error/TimeModule.cpp: Auto merged storage/ndb/src/kernel/error/TimeModule.hpp: Auto merged storage/ndb/src/kernel/error/ndbd_exit_codes.c: Auto merged storage/ndb/src/kernel/vm/Array.hpp: Auto merged storage/ndb/src/kernel/vm/ArrayPool.hpp: Auto merged storage/ndb/src/kernel/vm/CArray.hpp: Auto merged storage/ndb/src/kernel/vm/Callback.hpp: Auto merged storage/ndb/src/kernel/vm/ClusterConfiguration.cpp: Auto merged storage/ndb/src/kernel/vm/ClusterConfiguration.hpp: Auto merged storage/ndb/src/kernel/vm/Configuration.cpp: Auto merged storage/ndb/src/kernel/vm/Configuration.hpp: Auto merged storage/ndb/src/kernel/vm/DLFifoList.hpp: Auto merged storage/ndb/src/kernel/vm/DLHashTable.hpp: Auto merged storage/ndb/src/kernel/vm/DLHashTable2.hpp: Auto merged storage/ndb/src/kernel/vm/DLList.hpp: Auto merged storage/ndb/src/kernel/vm/DataBuffer.hpp: Auto merged storage/ndb/src/kernel/vm/Emulator.cpp: Auto merged storage/ndb/src/kernel/vm/Emulator.hpp: Auto merged storage/ndb/src/kernel/vm/FastScheduler.cpp: Auto merged storage/ndb/src/kernel/vm/FastScheduler.hpp: Auto merged storage/ndb/src/kernel/vm/GlobalData.hpp: Auto merged storage/ndb/src/kernel/vm/KeyDescriptor.hpp: Auto merged storage/ndb/src/kernel/vm/KeyTable.hpp: Auto merged storage/ndb/src/kernel/vm/KeyTable2.hpp: Auto merged storage/ndb/src/kernel/vm/LongSignal.hpp: Auto merged storage/ndb/src/kernel/vm/Mutex.cpp: Auto merged storage/ndb/src/kernel/vm/Mutex.hpp: Auto merged storage/ndb/src/kernel/vm/Prio.hpp: Auto merged storage/ndb/src/kernel/vm/RequestTracker.hpp: Auto merged storage/ndb/src/kernel/vm/SLList.hpp: Auto merged storage/ndb/src/kernel/vm/SafeCounter.cpp: Auto merged storage/ndb/src/kernel/vm/SafeCounter.hpp: Auto merged storage/ndb/src/kernel/vm/SectionReader.cpp: Auto merged storage/ndb/src/kernel/vm/SectionReader.hpp: Auto merged storage/ndb/src/kernel/vm/SignalCounter.hpp: Auto merged storage/ndb/src/kernel/vm/SimBlockList.hpp: Auto merged storage/ndb/src/kernel/vm/SimplePropertiesSection.cpp: Auto merged storage/ndb/src/kernel/vm/SimulatedBlock.cpp: Auto merged storage/ndb/src/kernel/vm/SimulatedBlock.hpp: Auto merged storage/ndb/src/kernel/vm/SuperPool.cpp: Auto merged storage/ndb/src/kernel/vm/SuperPool.hpp: Auto merged storage/ndb/src/kernel/vm/ThreadConfig.cpp: Auto merged storage/ndb/src/kernel/vm/ThreadConfig.hpp: Auto merged storage/ndb/src/kernel/vm/TimeQueue.cpp: Auto merged storage/ndb/src/kernel/vm/TimeQueue.hpp: Auto merged storage/ndb/src/kernel/vm/TransporterCallback.cpp: Auto merged storage/ndb/src/kernel/vm/VMSignal.cpp: Auto merged storage/ndb/src/kernel/vm/VMSignal.hpp: Auto merged storage/ndb/src/kernel/vm/WaitQueue.hpp: Auto merged storage/ndb/src/kernel/vm/WatchDog.cpp: Auto merged storage/ndb/src/kernel/vm/WatchDog.hpp: Auto merged storage/ndb/src/kernel/vm/al_test/arrayListTest.cpp: Auto merged storage/ndb/src/kernel/vm/al_test/arrayPoolTest.cpp: Auto merged storage/ndb/src/kernel/vm/al_test/main.cpp: Auto merged storage/ndb/src/kernel/vm/ndbd_malloc.cpp: Auto merged storage/ndb/src/kernel/vm/ndbd_malloc.hpp: Auto merged storage/ndb/src/kernel/vm/pc.hpp: Auto merged storage/ndb/src/kernel/vm/testCopy/rr.cpp: Auto merged storage/ndb/src/kernel/vm/testCopy/testCopy.cpp: Auto merged storage/ndb/src/kernel/vm/testDataBuffer/testDataBuffer.cpp: Auto merged storage/ndb/src/kernel/vm/testLongSig/testLongSig.cpp: Auto merged storage/ndb/src/kernel/vm/testSimplePropertiesSection/test.cpp: Auto merged storage/ndb/src/kernel/vm/testSuperPool.cpp: Auto merged storage/ndb/src/mgmapi/LocalConfig.cpp: Auto merged storage/ndb/src/mgmapi/LocalConfig.hpp: Auto merged storage/ndb/src/mgmapi/mgmapi.cpp: Auto merged storage/ndb/src/mgmapi/mgmapi_configuration.hpp: Auto merged storage/ndb/src/mgmapi/mgmapi_internal.h: Auto merged storage/ndb/src/mgmapi/ndb_logevent.cpp: Auto merged storage/ndb/src/mgmapi/ndb_logevent.hpp: Auto merged storage/ndb/src/mgmapi/test/keso.c: Auto merged storage/ndb/src/mgmapi/test/mgmSrvApi.cpp: Auto merged storage/ndb/src/mgmclient/CommandInterpreter.cpp: Auto merged storage/ndb/src/mgmclient/main.cpp: Auto merged storage/ndb/src/mgmclient/ndb_mgmclient.hpp: Auto merged storage/ndb/src/mgmclient/ndb_mgmclient.h: Auto merged storage/ndb/src/mgmclient/test_cpcd/test_cpcd.cpp: Auto merged storage/ndb/src/mgmsrv/Config.cpp: Auto merged storage/ndb/src/mgmsrv/Config.hpp: Auto merged storage/ndb/src/mgmsrv/ConfigInfo.cpp: Auto merged storage/ndb/src/mgmsrv/ConfigInfo.hpp: Auto merged storage/ndb/src/mgmsrv/InitConfigFileParser.cpp: Auto merged storage/ndb/src/mgmsrv/InitConfigFileParser.hpp: Auto merged storage/ndb/src/mgmsrv/MgmtSrvr.cpp: Auto merged storage/ndb/src/mgmsrv/MgmtSrvr.hpp: Auto merged storage/ndb/src/mgmsrv/MgmtSrvrConfig.cpp: Auto merged storage/ndb/src/mgmsrv/MgmtSrvrGeneralSignalHandling.cpp: Auto merged storage/ndb/src/mgmsrv/Services.cpp: Auto merged storage/ndb/src/mgmsrv/Services.hpp: Auto merged storage/ndb/src/mgmsrv/SignalQueue.cpp: Auto merged storage/ndb/src/mgmsrv/SignalQueue.hpp: Auto merged storage/ndb/src/mgmsrv/convertStrToInt.cpp: Auto merged storage/ndb/src/mgmsrv/convertStrToInt.hpp: Auto merged storage/ndb/src/mgmsrv/main.cpp: Auto merged storage/ndb/src/mgmsrv/mkconfig/mkconfig.cpp: Auto merged storage/ndb/src/ndbapi/API.hpp: Auto merged storage/ndb/src/ndbapi/ClusterMgr.cpp: Auto merged storage/ndb/src/ndbapi/ClusterMgr.hpp: Auto merged storage/ndb/src/ndbapi/DictCache.cpp: Auto merged storage/ndb/src/ndbapi/DictCache.hpp: Auto merged storage/ndb/src/ndbapi/Ndb.cpp: Auto merged storage/ndb/src/ndbapi/NdbApiSignal.cpp: Auto merged storage/ndb/src/ndbapi/NdbApiSignal.hpp: Auto merged storage/ndb/src/ndbapi/NdbBlob.cpp: Auto merged storage/ndb/src/ndbapi/NdbBlobImpl.hpp: Auto merged storage/ndb/src/ndbapi/NdbDictionary.cpp: Auto merged storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp: Auto merged storage/ndb/src/ndbapi/NdbDictionaryImpl.hpp: Auto merged storage/ndb/src/ndbapi/NdbErrorOut.cpp: Auto merged storage/ndb/src/ndbapi/NdbEventOperation.cpp: Auto merged storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp: Auto merged storage/ndb/src/ndbapi/NdbEventOperationImpl.hpp: Auto merged storage/ndb/src/ndbapi/NdbImpl.hpp: Auto merged storage/ndb/src/ndbapi/NdbIndexOperation.cpp: Auto merged storage/ndb/src/ndbapi/NdbLinHash.hpp: Auto merged storage/ndb/src/ndbapi/NdbOperation.cpp: Auto merged storage/ndb/src/ndbapi/NdbOperationDefine.cpp: Auto merged storage/ndb/src/ndbapi/NdbOperationExec.cpp: Auto merged storage/ndb/src/ndbapi/NdbOperationInt.cpp: Auto merged storage/ndb/src/ndbapi/NdbOperationScan.cpp: Auto merged storage/ndb/src/ndbapi/NdbOperationSearch.cpp: Auto merged storage/ndb/src/ndbapi/NdbPool.cpp: Auto merged storage/ndb/src/ndbapi/NdbPoolImpl.cpp: Auto merged storage/ndb/src/ndbapi/NdbPoolImpl.hpp: Auto merged storage/ndb/src/ndbapi/NdbRecAttr.cpp: Auto merged storage/ndb/src/ndbapi/NdbReceiver.cpp: Auto merged storage/ndb/src/ndbapi/NdbScanFilter.cpp: Auto merged storage/ndb/src/ndbapi/NdbScanOperation.cpp: Auto merged storage/ndb/src/ndbapi/NdbTransaction.cpp: Auto merged storage/ndb/src/ndbapi/NdbTransactionScan.cpp: Auto merged storage/ndb/src/ndbapi/NdbUtil.cpp: Auto merged storage/ndb/src/ndbapi/NdbUtil.hpp: Auto merged storage/ndb/src/ndbapi/NdbWaiter.hpp: Auto merged storage/ndb/src/ndbapi/Ndberr.cpp: Auto merged storage/ndb/src/ndbapi/Ndbif.cpp: Auto merged storage/ndb/src/ndbapi/Ndbinit.cpp: Auto merged storage/ndb/src/ndbapi/Ndblist.cpp: Auto merged storage/ndb/src/ndbapi/ObjectMap.hpp: Auto merged storage/ndb/src/ndbapi/SignalSender.cpp: Auto merged storage/ndb/src/ndbapi/SignalSender.hpp: Auto merged storage/ndb/src/ndbapi/TransporterFacade.cpp: Auto merged storage/ndb/src/ndbapi/TransporterFacade.hpp: Auto merged storage/ndb/src/ndbapi/ndb_cluster_connection.cpp: Auto merged storage/ndb/src/ndbapi/ndb_cluster_connection_impl.hpp: Auto merged storage/ndb/src/ndbapi/ndberror.c: Auto merged storage/ndb/src/ndbapi/signal-sender/SignalSender.cpp: Auto merged storage/ndb/src/ndbapi/signal-sender/SignalSender.hpp: Auto merged storage/ndb/test/include/CpcClient.hpp: Auto merged storage/ndb/test/include/HugoAsynchTransactions.hpp: Auto merged storage/ndb/test/include/HugoCalculator.hpp: Auto merged storage/ndb/test/include/HugoOperations.hpp: Auto merged storage/ndb/test/include/HugoTransactions.hpp: Auto merged storage/ndb/test/include/NDBT.hpp: Auto merged storage/ndb/test/include/NDBT_DataSet.hpp: Auto merged storage/ndb/test/include/NDBT_DataSetTransaction.hpp: Auto merged storage/ndb/test/include/NDBT_Error.hpp: Auto merged storage/ndb/test/include/NDBT_Output.hpp: Auto merged storage/ndb/test/include/NDBT_ResultRow.hpp: Auto merged storage/ndb/test/include/NDBT_ReturnCodes.h: Auto merged storage/ndb/test/include/NDBT_Stats.hpp: Auto merged storage/ndb/test/include/NDBT_Table.hpp: Auto merged storage/ndb/test/include/NDBT_Tables.hpp: Auto merged storage/ndb/test/include/NDBT_Test.hpp: Auto merged storage/ndb/test/include/NdbBackup.hpp: Auto merged storage/ndb/test/include/NdbConfig.hpp: Auto merged storage/ndb/test/include/NdbGrep.hpp: Auto merged storage/ndb/test/include/NdbRestarter.hpp: Auto merged storage/ndb/test/include/NdbRestarts.hpp: Auto merged storage/ndb/test/include/NdbSchemaCon.hpp: Auto merged storage/ndb/test/include/NdbSchemaOp.hpp: Auto merged storage/ndb/test/include/NdbTest.hpp: Auto merged storage/ndb/test/include/NdbTimer.hpp: Auto merged storage/ndb/test/include/TestNdbEventOperation.hpp: Auto merged storage/ndb/test/include/UtilTransactions.hpp: Auto merged storage/ndb/test/include/getarg.h: Auto merged storage/ndb/test/ndbapi/InsertRecs.cpp: Auto merged storage/ndb/test/ndbapi/ScanFilter.hpp: Auto merged storage/ndb/test/ndbapi/ScanFunctions.hpp: Auto merged storage/ndb/test/ndbapi/ScanInterpretTest.hpp: Auto merged storage/ndb/test/ndbapi/TraceNdbApi.cpp: Auto merged storage/ndb/test/ndbapi/VerifyNdbApi.cpp: Auto merged storage/ndb/test/ndbapi/acid.cpp: Auto merged storage/ndb/test/ndbapi/acid2.cpp: Auto merged storage/ndb/test/ndbapi/adoInsertRecs.cpp: Auto merged storage/ndb/test/ndbapi/asyncGenerator.cpp: Auto merged storage/ndb/test/ndbapi/benchronja.cpp: Auto merged storage/ndb/test/ndbapi/bulk_copy.cpp: Auto merged storage/ndb/test/ndbapi/cdrserver.cpp: Auto merged storage/ndb/test/ndbapi/celloDb.cpp: Auto merged storage/ndb/test/ndbapi/create_all_tabs.cpp: Auto merged storage/ndb/test/ndbapi/create_tab.cpp: Auto merged storage/ndb/test/ndbapi/drop_all_tabs.cpp: Auto merged storage/ndb/test/ndbapi/flexAsynch.cpp: Auto merged storage/ndb/test/ndbapi/flexBench.cpp: Auto merged storage/ndb/test/ndbapi/flexHammer.cpp: Auto merged storage/ndb/test/ndbapi/flexScan.cpp: Auto merged storage/ndb/test/ndbapi/flexTT.cpp: Auto merged storage/ndb/test/ndbapi/flexTimedAsynch.cpp: Auto merged storage/ndb/test/ndbapi/flex_bench_mysql.cpp: Auto merged storage/ndb/test/ndbapi/index.cpp: Auto merged storage/ndb/test/ndbapi/index2.cpp: Auto merged storage/ndb/test/ndbapi/initronja.cpp: Auto merged storage/ndb/test/ndbapi/interpreterInTup.cpp: Auto merged storage/ndb/test/ndbapi/mainAsyncGenerator.cpp: Auto merged storage/ndb/test/ndbapi/msa.cpp: Auto merged storage/ndb/test/ndbapi/ndb_async1.cpp: Auto merged storage/ndb/test/ndbapi/ndb_async2.cpp: Auto merged storage/ndb/test/ndbapi/ndb_user_populate.cpp: Auto merged storage/ndb/test/ndbapi/ndb_user_transaction.cpp: Auto merged storage/ndb/test/ndbapi/ndb_user_transaction2.cpp: Auto merged storage/ndb/test/ndbapi/ndb_user_transaction3.cpp: Auto merged storage/ndb/test/ndbapi/ndb_user_transaction4.cpp: Auto merged storage/ndb/test/ndbapi/ndb_user_transaction5.cpp: Auto merged storage/ndb/test/ndbapi/ndb_user_transaction6.cpp: Auto merged storage/ndb/test/ndbapi/restarter.cpp: Auto merged storage/ndb/test/ndbapi/restarter2.cpp: Auto merged storage/ndb/test/ndbapi/restarts.cpp: Auto merged storage/ndb/test/ndbapi/size.cpp: Auto merged storage/ndb/test/ndbapi/testBackup.cpp: Auto merged storage/ndb/test/ndbapi/testBasic.cpp: Auto merged storage/ndb/test/ndbapi/testBasicAsynch.cpp: Auto merged storage/ndb/test/ndbapi/testBlobs.cpp: Auto merged storage/ndb/test/ndbapi/testDataBuffers.cpp: Auto merged storage/ndb/test/ndbapi/testDeadlock.cpp: Auto merged storage/ndb/test/ndbapi/testDict.cpp: Auto merged storage/ndb/test/ndbapi/testGrepVerify.cpp: Auto merged storage/ndb/test/ndbapi/testIndex.cpp: Auto merged storage/ndb/test/ndbapi/testInterpreter.cpp: Auto merged storage/ndb/test/ndbapi/testMgm.cpp: Auto merged storage/ndb/test/ndbapi/testNdbApi.cpp: Auto merged storage/ndb/test/ndbapi/testNodeRestart.cpp: Auto merged storage/ndb/test/ndbapi/testOIBasic.cpp: Auto merged storage/ndb/test/ndbapi/testOperations.cpp: Auto merged storage/ndb/test/ndbapi/testOrderedIndex.cpp: Auto merged storage/ndb/test/ndbapi/testPartitioning.cpp: Auto merged storage/ndb/test/ndbapi/testReadPerf.cpp: Auto merged storage/ndb/test/ndbapi/bank/Bank.cpp: Auto merged storage/ndb/test/ndbapi/bank/Bank.hpp: Auto merged storage/ndb/test/ndbapi/bank/BankLoad.cpp: Auto merged storage/ndb/test/ndbapi/bank/bankCreator.cpp: Auto merged storage/ndb/test/ndbapi/bank/bankMakeGL.cpp: Auto merged storage/ndb/test/ndbapi/bank/bankSumAccounts.cpp: Auto merged storage/ndb/test/ndbapi/bank/bankTimer.cpp: Auto merged storage/ndb/test/ndbapi/bank/bankTransactionMaker.cpp: Auto merged storage/ndb/test/ndbapi/bank/bankValidateAllGLs.cpp: Auto merged storage/ndb/test/ndbapi/bank/testBank.cpp: Auto merged storage/ndb/test/ndbapi/bench/asyncGenerator.cpp: Auto merged storage/ndb/test/ndbapi/bench/dbGenerator.h: Auto merged storage/ndb/test/ndbapi/bench/dbPopulate.cpp: Auto merged storage/ndb/test/ndbapi/bench/dbPopulate.h: Auto merged storage/ndb/test/ndbapi/bench/macros.h: Auto merged storage/ndb/test/ndbapi/bench/mainAsyncGenerator.cpp: Auto merged storage/ndb/test/ndbapi/bench/mainPopulate.cpp: Auto merged storage/ndb/test/ndbapi/bench/ndb_async1.cpp: Auto merged storage/ndb/test/ndbapi/bench/ndb_async2.cpp: Auto merged storage/ndb/test/ndbapi/testRestartGci.cpp: Auto merged storage/ndb/test/ndbapi/testSRBank.cpp: Auto merged storage/ndb/test/ndbapi/testScan.cpp: Auto merged storage/ndb/test/ndbapi/testScanInterpreter.cpp: Auto merged storage/ndb/test/ndbapi/testScanPerf.cpp: Auto merged storage/ndb/test/ndbapi/testSystemRestart.cpp: Auto merged storage/ndb/test/ndbapi/testTimeout.cpp: Auto merged storage/ndb/test/ndbapi/testTransactions.cpp: Auto merged storage/ndb/test/ndbapi/test_event.cpp: Auto merged storage/ndb/test/ndbapi/test_event_merge.cpp: Auto merged storage/ndb/test/ndbapi/test_event_multi_table.cpp: Auto merged storage/ndb/test/ndbapi/userInterface.cpp: Auto merged storage/ndb/test/ndbapi/bench/ndb_error.hpp: Auto merged storage/ndb/test/ndbapi/bench/ndb_schema.hpp: Auto merged storage/ndb/test/ndbapi/bench/ndb_user_transaction.cpp: Auto merged storage/ndb/test/ndbapi/bench/ndb_user_transaction2.cpp: Auto merged storage/ndb/test/ndbapi/bench/ndb_user_transaction3.cpp: Auto merged storage/ndb/test/ndbapi/bench/ndb_user_transaction4.cpp: Auto merged storage/ndb/test/ndbapi/bench/ndb_user_transaction5.cpp: Auto merged storage/ndb/test/ndbapi/bench/ndb_user_transaction6.cpp: Auto merged storage/ndb/test/ndbapi/bench/testData.h: Auto merged storage/ndb/test/ndbapi/bench/testDefinitions.h: Auto merged storage/ndb/test/ndbapi/bench/userInterface.cpp: Auto merged storage/ndb/test/ndbapi/bench/userInterface.h: Auto merged storage/ndb/test/newtonapi/basic_test/basic/basic.cpp: Auto merged storage/ndb/test/newtonapi/basic_test/bulk_read/br_test.cpp: Auto merged storage/ndb/test/newtonapi/basic_test/common.cpp: Auto merged storage/ndb/test/newtonapi/basic_test/common.hpp: Auto merged storage/ndb/test/newtonapi/basic_test/ptr_binding/ptr_binding_test.cpp: Auto merged storage/ndb/test/newtonapi/basic_test/too_basic.cpp: Auto merged storage/ndb/test/newtonapi/perf_test/perf.cpp: Auto merged storage/ndb/test/odbc/SQL99_test/SQL99_test.cpp: Auto merged storage/ndb/test/odbc/SQL99_test/SQL99_test.h: Auto merged storage/ndb/test/odbc/client/NDBT_ALLOCHANDLE.cpp: Auto merged storage/ndb/test/odbc/client/NDBT_ALLOCHANDLE_HDBC.cpp: Auto merged storage/ndb/test/odbc/client/NDBT_SQLConnect.cpp: Auto merged storage/ndb/test/odbc/client/NDBT_SQLPrepare.cpp: Auto merged storage/ndb/test/odbc/client/SQLAllocEnvTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLAllocHandleTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLAllocHandleTest_bf.cpp: Auto merged storage/ndb/test/odbc/client/SQLBindColTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLBindParameterTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLCancelTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLCloseCursorTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLColAttributeTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLColAttributeTest1.cpp: Auto merged storage/ndb/test/odbc/client/SQLColAttributeTest2.cpp: Auto merged storage/ndb/test/odbc/client/SQLColAttributeTest3.cpp: Auto merged storage/ndb/test/odbc/client/SQLConnectTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLCopyDescTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLDescribeColTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLDisconnectTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLDriverConnectTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLEndTranTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLErrorTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLExecDirectTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLExecuteTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLFetchScrollTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLFetchTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLFreeHandleTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLFreeStmtTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLGetConnectAttrTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLGetCursorNameTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLGetDataTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLGetDescFieldTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLGetDescRecTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLGetDiagFieldTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLGetDiagRecSimpleTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLGetDiagRecTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLGetEnvAttrTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLGetFunctionsTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLGetInfoTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLGetStmtAttrTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLGetTypeInfoTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLMoreResultsTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLNumResultColsTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLParamDataTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLPrepareTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLPutDataTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLRowCountTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLSetConnectAttrTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLSetCursorNameTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLSetDescFieldTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLSetDescRecTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLSetEnvAttrTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLSetStmtAttrTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLTablesTest.cpp: Auto merged storage/ndb/test/odbc/client/SQLTransactTest.cpp: Auto merged storage/ndb/test/odbc/client/common.hpp: Auto merged storage/ndb/test/odbc/client/main.cpp: Auto merged storage/ndb/test/odbc/driver/testOdbcDriver.cpp: Auto merged storage/ndb/test/odbc/test_compiler/test_compiler.cpp: Auto merged storage/ndb/test/run-test/main.cpp: Auto merged storage/ndb/test/run-test/run-test.hpp: Auto merged storage/ndb/test/src/CpcClient.cpp: Auto merged storage/ndb/test/src/HugoAsynchTransactions.cpp: Auto merged storage/ndb/test/src/HugoCalculator.cpp: Auto merged storage/ndb/test/src/HugoOperations.cpp: Auto merged storage/ndb/test/src/HugoTransactions.cpp: Auto merged storage/ndb/test/src/NDBT_Error.cpp: Auto merged storage/ndb/test/src/NDBT_Output.cpp: Auto merged storage/ndb/test/src/NDBT_ResultRow.cpp: Auto merged storage/ndb/test/src/NDBT_ReturnCodes.cpp: Auto merged storage/ndb/test/src/NDBT_Table.cpp: Auto merged storage/ndb/test/src/NDBT_Tables.cpp: Auto merged storage/ndb/test/src/NDBT_Test.cpp: Auto merged storage/ndb/test/src/NdbBackup.cpp: Auto merged storage/ndb/test/src/NdbConfig.cpp: Auto merged storage/ndb/test/src/NdbGrep.cpp: Auto merged storage/ndb/test/src/NdbRestarter.cpp: Auto merged storage/ndb/test/src/NdbRestarts.cpp: Auto merged storage/ndb/test/src/NdbSchemaCon.cpp: Auto merged storage/ndb/test/src/NdbSchemaOp.cpp: Auto merged storage/ndb/test/src/UtilTransactions.cpp: Auto merged storage/ndb/test/tools/copy_tab.cpp: Auto merged storage/ndb/test/tools/cpcc.cpp: Auto merged storage/ndb/test/tools/create_index.cpp: Auto merged storage/ndb/test/tools/hugoCalculator.cpp: Auto merged storage/ndb/test/tools/hugoFill.cpp: Auto merged storage/ndb/test/tools/hugoLoad.cpp: Auto merged storage/ndb/test/tools/hugoLockRecords.cpp: Auto merged storage/ndb/test/tools/hugoPkDelete.cpp: Auto merged storage/ndb/test/tools/hugoPkRead.cpp: Auto merged storage/ndb/test/tools/hugoPkReadRecord.cpp: Auto merged storage/ndb/test/tools/hugoPkUpdate.cpp: Auto merged storage/ndb/test/tools/hugoScanRead.cpp: Auto merged storage/ndb/test/tools/hugoScanUpdate.cpp: Auto merged storage/ndb/test/tools/restart.cpp: Auto merged storage/ndb/test/tools/transproxy.cpp: Auto merged storage/ndb/test/tools/verify_index.cpp: Auto merged storage/ndb/tools/delete_all.cpp: Auto merged storage/ndb/tools/desc.cpp: Auto merged storage/ndb/tools/drop_index.cpp: Auto merged storage/ndb/tools/drop_tab.cpp: Auto merged storage/ndb/tools/listTables.cpp: Auto merged storage/ndb/tools/ndb_condig.cpp: Auto merged storage/ndb/tools/ndb_test_platform.cpp: Auto merged storage/ndb/tools/ndbsql.cpp: Auto merged storage/ndb/tools/restore/Restore.cpp: Auto merged storage/ndb/tools/restore/Restore.hpp: Auto merged storage/ndb/tools/restore/consumer.cpp: Auto merged storage/ndb/tools/restore/consumer.hpp: Auto merged storage/ndb/tools/restore/consumer_printer.cpp: Auto merged storage/ndb/tools/restore/consumer_printer.hpp: Auto merged storage/ndb/tools/restore/consumer_restore.cpp: Auto merged storage/ndb/tools/restore/consumer_restore.hpp: Auto merged storage/ndb/tools/restore/consumer_restorem.cpp: Auto merged storage/ndb/tools/restore/restore_main.cpp: Auto merged storage/ndb/tools/select_all.cpp: Auto merged storage/ndb/tools/select_count.cpp: Auto merged storage/ndb/tools/waiter.cpp: Auto merged strings/Makefile.am: Auto merged strings/ctype-big5.c: Auto merged strings/ctype-bin.c: Auto merged strings/ctype-cp932.c: Auto merged strings/ctype-euc_kr.c: Auto merged strings/ctype-eucjpms.c: Auto merged strings/ctype-gb2312.c: Auto merged strings/ctype-gbk.c: Auto merged strings/ctype-latin1.c: Auto merged strings/ctype-mb.c: Auto merged strings/ctype-simple.c: Auto merged strings/ctype-sjis.c: Auto merged strings/ctype-tis620.c: Auto merged strings/ctype-ucs2.c: Auto merged strings/ctype-ujis.c: Auto merged strings/ctype-utf8.c: Auto merged strings/ctype-win1250ch.c: Auto merged strings/ctype.c: Auto merged strings/decimal.c: Auto merged strings/strxnmov.c: Auto merged strings/xml.c: Auto merged tests/Makefile.am: Auto merged tests/mysql_client_test.c: Auto merged vio/Makefile.am: Auto merged vio/vio.c: Auto merged vio/viosocket.c: Auto merged vio/viossl.c: Auto merged vio/viosslfactories.c: Auto merged zlib/Makefile.am: Auto merged
3965 lines
126 KiB
C++
3965 lines
126 KiB
C++
/* Copyright (C) 2000-2003 MySQL AB
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
|
|
|
|
/*
|
|
Handling of MySQL SQL variables
|
|
|
|
To add a new variable, one has to do the following:
|
|
|
|
- Use one of the 'sys_var... classes from set_var.h or write a specific
|
|
one for the variable type.
|
|
- Define it in the 'variable definition list' in this file.
|
|
- If the variable is thread specific, add it to 'system_variables' struct.
|
|
If not, add it to mysqld.cc and an declaration in 'mysql_priv.h'
|
|
- If the variable should be changed from the command line, add a definition
|
|
of it in the my_option structure list in mysqld.cc
|
|
- Don't forget to initialize new fields in global_system_variables and
|
|
max_system_variables!
|
|
- If the variable should show up in 'show variables' add it to the
|
|
init_vars[] struct in this file
|
|
|
|
NOTES:
|
|
- Be careful with var->save_result: sys_var::check() only updates
|
|
ulonglong_value; so other members of the union are garbage then; to use
|
|
them you must first assign a value to them (in specific ::check() for
|
|
example).
|
|
|
|
TODO:
|
|
- Add full support for the variable character_set (for 4.1)
|
|
|
|
- When updating myisam_delay_key_write, we should do a 'flush tables'
|
|
of all MyISAM tables to ensure that they are reopen with the
|
|
new attribute.
|
|
*/
|
|
|
|
#ifdef USE_PRAGMA_IMPLEMENTATION
|
|
#pragma implementation // gcc: Class implementation
|
|
#endif
|
|
|
|
#include "mysql_priv.h"
|
|
#include <mysql.h>
|
|
#include "slave.h"
|
|
#include <my_getopt.h>
|
|
#include <thr_alarm.h>
|
|
#include <myisam.h>
|
|
#include <my_dir.h>
|
|
|
|
#include "events.h"
|
|
|
|
/* WITH_INNOBASE_STORAGE_ENGINE */
|
|
extern uint innobase_flush_log_at_trx_commit;
|
|
extern ulong innobase_fast_shutdown;
|
|
extern long innobase_mirrored_log_groups, innobase_log_files_in_group;
|
|
extern longlong innobase_log_file_size;
|
|
extern long innobase_log_buffer_size;
|
|
extern longlong innobase_buffer_pool_size;
|
|
extern long innobase_additional_mem_pool_size;
|
|
extern long innobase_file_io_threads, innobase_lock_wait_timeout;
|
|
extern long innobase_force_recovery;
|
|
extern long innobase_open_files;
|
|
extern char *innobase_data_home_dir, *innobase_data_file_path;
|
|
extern char *innobase_log_group_home_dir, *innobase_log_arch_dir;
|
|
extern char *innobase_unix_file_flush_method;
|
|
/* The following variables have to be my_bool for SHOW VARIABLES to work */
|
|
extern my_bool innobase_log_archive,
|
|
innobase_use_doublewrite,
|
|
innobase_use_checksums,
|
|
innobase_file_per_table,
|
|
innobase_locks_unsafe_for_binlog,
|
|
innobase_rollback_on_timeout;
|
|
|
|
extern "C" {
|
|
extern ulong srv_max_buf_pool_modified_pct;
|
|
extern ulong srv_max_purge_lag;
|
|
extern ulong srv_auto_extend_increment;
|
|
extern ulong srv_n_spin_wait_rounds;
|
|
extern ulong srv_n_free_tickets_to_enter;
|
|
extern ulong srv_thread_sleep_delay;
|
|
extern ulong srv_thread_concurrency;
|
|
extern ulong srv_commit_concurrency;
|
|
extern ulong srv_flush_log_at_trx_commit;
|
|
}
|
|
|
|
/* WITH_NDBCLUSTER_STORAGE_ENGINE */
|
|
extern ulong ndb_cache_check_time;
|
|
extern ulong ndb_extra_logging;
|
|
#ifdef HAVE_NDB_BINLOG
|
|
extern ulong ndb_report_thresh_binlog_epoch_slip;
|
|
extern ulong ndb_report_thresh_binlog_mem_usage;
|
|
#endif
|
|
|
|
|
|
|
|
static HASH system_variable_hash;
|
|
const char *bool_type_names[]= { "OFF", "ON", NullS };
|
|
TYPELIB bool_typelib=
|
|
{
|
|
array_elements(bool_type_names)-1, "", bool_type_names, NULL
|
|
};
|
|
|
|
const char *delay_key_write_type_names[]= { "OFF", "ON", "ALL", NullS };
|
|
TYPELIB delay_key_write_typelib=
|
|
{
|
|
array_elements(delay_key_write_type_names)-1, "",
|
|
delay_key_write_type_names, NULL
|
|
};
|
|
|
|
static int sys_check_charset(THD *thd, set_var *var);
|
|
static bool sys_update_charset(THD *thd, set_var *var);
|
|
static void sys_set_default_charset(THD *thd, enum_var_type type);
|
|
static int sys_check_ftb_syntax(THD *thd, set_var *var);
|
|
static bool sys_update_ftb_syntax(THD *thd, set_var * var);
|
|
static void sys_default_ftb_syntax(THD *thd, enum_var_type type);
|
|
static bool sys_update_init_connect(THD*, set_var*);
|
|
static void sys_default_init_connect(THD*, enum_var_type type);
|
|
static bool sys_update_init_slave(THD*, set_var*);
|
|
static void sys_default_init_slave(THD*, enum_var_type type);
|
|
static bool set_option_bit(THD *thd, set_var *var);
|
|
static bool set_option_autocommit(THD *thd, set_var *var);
|
|
static int check_log_update(THD *thd, set_var *var);
|
|
static bool set_log_update(THD *thd, set_var *var);
|
|
static int check_pseudo_thread_id(THD *thd, set_var *var);
|
|
void fix_binlog_format_after_update(THD *thd, enum_var_type type);
|
|
static void fix_low_priority_updates(THD *thd, enum_var_type type);
|
|
static int check_tx_isolation(THD *thd, set_var *var);
|
|
static void fix_tx_isolation(THD *thd, enum_var_type type);
|
|
static int check_completion_type(THD *thd, set_var *var);
|
|
static void fix_completion_type(THD *thd, enum_var_type type);
|
|
static void fix_net_read_timeout(THD *thd, enum_var_type type);
|
|
static void fix_net_write_timeout(THD *thd, enum_var_type type);
|
|
static void fix_net_retry_count(THD *thd, enum_var_type type);
|
|
static void fix_max_join_size(THD *thd, enum_var_type type);
|
|
static void fix_query_cache_size(THD *thd, enum_var_type type);
|
|
static void fix_query_cache_min_res_unit(THD *thd, enum_var_type type);
|
|
static void fix_myisam_max_sort_file_size(THD *thd, enum_var_type type);
|
|
static void fix_max_binlog_size(THD *thd, enum_var_type type);
|
|
static void fix_max_relay_log_size(THD *thd, enum_var_type type);
|
|
static void fix_max_connections(THD *thd, enum_var_type type);
|
|
static int check_max_delayed_threads(THD *thd, set_var *var);
|
|
static void fix_thd_mem_root(THD *thd, enum_var_type type);
|
|
static void fix_trans_mem_root(THD *thd, enum_var_type type);
|
|
static void fix_server_id(THD *thd, enum_var_type type);
|
|
static KEY_CACHE *create_key_cache(const char *name, uint length);
|
|
void fix_sql_mode_var(THD *thd, enum_var_type type);
|
|
static byte *get_error_count(THD *thd);
|
|
static byte *get_warning_count(THD *thd);
|
|
static byte *get_tmpdir(THD *thd);
|
|
static int sys_check_log_path(THD *thd, set_var *var);
|
|
static bool sys_update_general_log_path(THD *thd, set_var * var);
|
|
static void sys_default_general_log_path(THD *thd, enum_var_type type);
|
|
static bool sys_update_slow_log_path(THD *thd, set_var * var);
|
|
static void sys_default_slow_log_path(THD *thd, enum_var_type type);
|
|
|
|
/*
|
|
Variable definition list
|
|
|
|
These are variables that can be set from the command line, in
|
|
alphabetic order.
|
|
|
|
The variables are linked into the list. A variable is added to
|
|
it in the constructor (see sys_var class for details).
|
|
*/
|
|
|
|
sys_var *sys_var::first= NULL;
|
|
uint sys_var::sys_vars= 0;
|
|
|
|
sys_var_thd_ulong sys_auto_increment_increment("auto_increment_increment",
|
|
&SV::auto_increment_increment);
|
|
sys_var_thd_ulong sys_auto_increment_offset("auto_increment_offset",
|
|
&SV::auto_increment_offset);
|
|
|
|
sys_var_bool_ptr sys_automatic_sp_privileges("automatic_sp_privileges",
|
|
&sp_automatic_privileges);
|
|
|
|
sys_var_const_str sys_basedir("basedir", mysql_home);
|
|
sys_var_long_ptr sys_binlog_cache_size("binlog_cache_size",
|
|
&binlog_cache_size);
|
|
sys_var_thd_binlog_format sys_binlog_format("binlog_format",
|
|
&SV::binlog_format);
|
|
sys_var_thd_ulong sys_bulk_insert_buff_size("bulk_insert_buffer_size",
|
|
&SV::bulk_insert_buff_size);
|
|
sys_var_character_set_server sys_character_set_server("character_set_server");
|
|
sys_var_const_str sys_charset_system("character_set_system",
|
|
(char *)my_charset_utf8_general_ci.name);
|
|
sys_var_character_set_database sys_character_set_database("character_set_database");
|
|
sys_var_character_set_client sys_character_set_client("character_set_client");
|
|
sys_var_character_set_connection sys_character_set_connection("character_set_connection");
|
|
sys_var_character_set_results sys_character_set_results("character_set_results");
|
|
sys_var_character_set_filesystem sys_character_set_filesystem("character_set_filesystem");
|
|
sys_var_thd_ulong sys_completion_type("completion_type",
|
|
&SV::completion_type,
|
|
check_completion_type,
|
|
fix_completion_type);
|
|
sys_var_collation_connection sys_collation_connection("collation_connection");
|
|
sys_var_collation_database sys_collation_database("collation_database");
|
|
sys_var_collation_server sys_collation_server("collation_server");
|
|
sys_var_long_ptr sys_concurrent_insert("concurrent_insert",
|
|
&myisam_concurrent_insert);
|
|
sys_var_long_ptr sys_connect_timeout("connect_timeout",
|
|
&connect_timeout);
|
|
sys_var_const_str sys_datadir("datadir", mysql_real_data_home);
|
|
#ifndef DBUG_OFF
|
|
sys_var_thd_dbug sys_dbug("debug");
|
|
#endif
|
|
sys_var_enum sys_delay_key_write("delay_key_write",
|
|
&delay_key_write_options,
|
|
&delay_key_write_typelib,
|
|
fix_delay_key_write);
|
|
sys_var_long_ptr sys_delayed_insert_limit("delayed_insert_limit",
|
|
&delayed_insert_limit);
|
|
sys_var_long_ptr sys_delayed_insert_timeout("delayed_insert_timeout",
|
|
&delayed_insert_timeout);
|
|
sys_var_long_ptr sys_delayed_queue_size("delayed_queue_size",
|
|
&delayed_queue_size);
|
|
|
|
sys_var_event_scheduler sys_event_scheduler("event_scheduler");
|
|
sys_var_long_ptr sys_expire_logs_days("expire_logs_days",
|
|
&expire_logs_days);
|
|
sys_var_bool_ptr sys_flush("flush", &myisam_flush);
|
|
sys_var_long_ptr sys_flush_time("flush_time", &flush_time);
|
|
sys_var_str sys_ft_boolean_syntax("ft_boolean_syntax",
|
|
sys_check_ftb_syntax,
|
|
sys_update_ftb_syntax,
|
|
sys_default_ftb_syntax,
|
|
ft_boolean_syntax);
|
|
sys_var_str sys_init_connect("init_connect", 0,
|
|
sys_update_init_connect,
|
|
sys_default_init_connect,0);
|
|
sys_var_str sys_init_slave("init_slave", 0,
|
|
sys_update_init_slave,
|
|
sys_default_init_slave,0);
|
|
sys_var_thd_ulong sys_interactive_timeout("interactive_timeout",
|
|
&SV::net_interactive_timeout);
|
|
sys_var_thd_ulong sys_join_buffer_size("join_buffer_size",
|
|
&SV::join_buff_size);
|
|
sys_var_key_buffer_size sys_key_buffer_size("key_buffer_size");
|
|
sys_var_key_cache_long sys_key_cache_block_size("key_cache_block_size",
|
|
offsetof(KEY_CACHE,
|
|
param_block_size));
|
|
sys_var_key_cache_long sys_key_cache_division_limit("key_cache_division_limit",
|
|
offsetof(KEY_CACHE,
|
|
param_division_limit));
|
|
sys_var_key_cache_long sys_key_cache_age_threshold("key_cache_age_threshold",
|
|
offsetof(KEY_CACHE,
|
|
param_age_threshold));
|
|
sys_var_bool_ptr sys_local_infile("local_infile",
|
|
&opt_local_infile);
|
|
sys_var_trust_routine_creators
|
|
sys_trust_routine_creators("log_bin_trust_routine_creators",
|
|
&trust_function_creators);
|
|
sys_var_bool_ptr
|
|
sys_trust_function_creators("log_bin_trust_function_creators",
|
|
&trust_function_creators);
|
|
sys_var_bool_ptr
|
|
sys_log_queries_not_using_indexes("log_queries_not_using_indexes",
|
|
&opt_log_queries_not_using_indexes);
|
|
sys_var_thd_ulong sys_log_warnings("log_warnings", &SV::log_warnings);
|
|
sys_var_thd_ulong sys_long_query_time("long_query_time",
|
|
&SV::long_query_time);
|
|
sys_var_thd_bool sys_low_priority_updates("low_priority_updates",
|
|
&SV::low_priority_updates,
|
|
fix_low_priority_updates);
|
|
#ifndef TO_BE_DELETED /* Alias for the low_priority_updates */
|
|
sys_var_thd_bool sys_sql_low_priority_updates("sql_low_priority_updates",
|
|
&SV::low_priority_updates,
|
|
fix_low_priority_updates);
|
|
#endif
|
|
sys_var_thd_ulong sys_max_allowed_packet("max_allowed_packet",
|
|
&SV::max_allowed_packet);
|
|
sys_var_long_ptr sys_max_binlog_cache_size("max_binlog_cache_size",
|
|
&max_binlog_cache_size);
|
|
sys_var_long_ptr sys_max_binlog_size("max_binlog_size",
|
|
&max_binlog_size,
|
|
fix_max_binlog_size);
|
|
sys_var_long_ptr sys_max_connections("max_connections",
|
|
&max_connections,
|
|
fix_max_connections);
|
|
sys_var_long_ptr sys_max_connect_errors("max_connect_errors",
|
|
&max_connect_errors);
|
|
sys_var_thd_ulong sys_max_insert_delayed_threads("max_insert_delayed_threads",
|
|
&SV::max_insert_delayed_threads,
|
|
check_max_delayed_threads,
|
|
fix_max_connections);
|
|
sys_var_thd_ulong sys_max_delayed_threads("max_delayed_threads",
|
|
&SV::max_insert_delayed_threads,
|
|
check_max_delayed_threads,
|
|
fix_max_connections);
|
|
sys_var_thd_ulong sys_max_error_count("max_error_count",
|
|
&SV::max_error_count);
|
|
sys_var_thd_ulonglong sys_max_heap_table_size("max_heap_table_size",
|
|
&SV::max_heap_table_size);
|
|
sys_var_thd_ulong sys_pseudo_thread_id("pseudo_thread_id",
|
|
&SV::pseudo_thread_id,
|
|
check_pseudo_thread_id, 0);
|
|
sys_var_thd_ha_rows sys_max_join_size("max_join_size",
|
|
&SV::max_join_size,
|
|
fix_max_join_size);
|
|
sys_var_thd_ulong sys_max_seeks_for_key("max_seeks_for_key",
|
|
&SV::max_seeks_for_key);
|
|
sys_var_thd_ulong sys_max_length_for_sort_data("max_length_for_sort_data",
|
|
&SV::max_length_for_sort_data);
|
|
#ifndef TO_BE_DELETED /* Alias for max_join_size */
|
|
sys_var_thd_ha_rows sys_sql_max_join_size("sql_max_join_size",
|
|
&SV::max_join_size,
|
|
fix_max_join_size);
|
|
#endif
|
|
static sys_var_long_ptr_global
|
|
sys_max_prepared_stmt_count("max_prepared_stmt_count",
|
|
&max_prepared_stmt_count,
|
|
&LOCK_prepared_stmt_count);
|
|
sys_var_long_ptr sys_max_relay_log_size("max_relay_log_size",
|
|
&max_relay_log_size,
|
|
fix_max_relay_log_size);
|
|
sys_var_thd_ulong sys_max_sort_length("max_sort_length",
|
|
&SV::max_sort_length);
|
|
sys_var_thd_ulong sys_max_sp_recursion_depth("max_sp_recursion_depth",
|
|
&SV::max_sp_recursion_depth);
|
|
sys_var_max_user_conn sys_max_user_connections("max_user_connections");
|
|
sys_var_thd_ulong sys_max_tmp_tables("max_tmp_tables",
|
|
&SV::max_tmp_tables);
|
|
sys_var_long_ptr sys_max_write_lock_count("max_write_lock_count",
|
|
&max_write_lock_count);
|
|
sys_var_thd_ulong sys_multi_range_count("multi_range_count",
|
|
&SV::multi_range_count);
|
|
sys_var_long_ptr sys_myisam_data_pointer_size("myisam_data_pointer_size",
|
|
&myisam_data_pointer_size);
|
|
sys_var_thd_ulonglong sys_myisam_max_sort_file_size("myisam_max_sort_file_size", &SV::myisam_max_sort_file_size, fix_myisam_max_sort_file_size, 1);
|
|
sys_var_thd_ulong sys_myisam_repair_threads("myisam_repair_threads", &SV::myisam_repair_threads);
|
|
sys_var_thd_ulong sys_myisam_sort_buffer_size("myisam_sort_buffer_size", &SV::myisam_sort_buff_size);
|
|
sys_var_bool_ptr sys_myisam_use_mmap("myisam_use_mmap",
|
|
&opt_myisam_use_mmap);
|
|
|
|
sys_var_thd_enum sys_myisam_stats_method("myisam_stats_method",
|
|
&SV::myisam_stats_method,
|
|
&myisam_stats_method_typelib,
|
|
NULL);
|
|
|
|
sys_var_thd_ulong sys_net_buffer_length("net_buffer_length",
|
|
&SV::net_buffer_length);
|
|
sys_var_thd_ulong sys_net_read_timeout("net_read_timeout",
|
|
&SV::net_read_timeout,
|
|
0, fix_net_read_timeout);
|
|
sys_var_thd_ulong sys_net_write_timeout("net_write_timeout",
|
|
&SV::net_write_timeout,
|
|
0, fix_net_write_timeout);
|
|
sys_var_thd_ulong sys_net_retry_count("net_retry_count",
|
|
&SV::net_retry_count,
|
|
0, fix_net_retry_count);
|
|
sys_var_thd_bool sys_new_mode("new", &SV::new_mode);
|
|
sys_var_thd_bool sys_old_alter_table("old_alter_table",
|
|
&SV::old_alter_table);
|
|
sys_var_thd_bool sys_old_passwords("old_passwords", &SV::old_passwords);
|
|
sys_var_thd_ulong sys_optimizer_prune_level("optimizer_prune_level",
|
|
&SV::optimizer_prune_level);
|
|
sys_var_thd_ulong sys_optimizer_search_depth("optimizer_search_depth",
|
|
&SV::optimizer_search_depth);
|
|
sys_var_thd_ulong sys_preload_buff_size("preload_buffer_size",
|
|
&SV::preload_buff_size);
|
|
sys_var_thd_ulong sys_read_buff_size("read_buffer_size",
|
|
&SV::read_buff_size);
|
|
sys_var_bool_ptr sys_readonly("read_only", &opt_readonly);
|
|
sys_var_thd_ulong sys_read_rnd_buff_size("read_rnd_buffer_size",
|
|
&SV::read_rnd_buff_size);
|
|
sys_var_thd_ulong sys_div_precincrement("div_precision_increment",
|
|
&SV::div_precincrement);
|
|
#ifdef HAVE_REPLICATION
|
|
sys_var_bool_ptr sys_relay_log_purge("relay_log_purge",
|
|
&relay_log_purge);
|
|
#endif
|
|
sys_var_long_ptr sys_rpl_recovery_rank("rpl_recovery_rank",
|
|
&rpl_recovery_rank);
|
|
sys_var_long_ptr sys_query_cache_size("query_cache_size",
|
|
&query_cache_size,
|
|
fix_query_cache_size);
|
|
|
|
sys_var_thd_ulong sys_range_alloc_block_size("range_alloc_block_size",
|
|
&SV::range_alloc_block_size);
|
|
sys_var_thd_ulong sys_query_alloc_block_size("query_alloc_block_size",
|
|
&SV::query_alloc_block_size,
|
|
0, fix_thd_mem_root);
|
|
sys_var_thd_ulong sys_query_prealloc_size("query_prealloc_size",
|
|
&SV::query_prealloc_size,
|
|
0, fix_thd_mem_root);
|
|
sys_var_readonly sys_tmpdir("tmpdir", OPT_GLOBAL, SHOW_CHAR, get_tmpdir);
|
|
sys_var_thd_ulong sys_trans_alloc_block_size("transaction_alloc_block_size",
|
|
&SV::trans_alloc_block_size,
|
|
0, fix_trans_mem_root);
|
|
sys_var_thd_ulong sys_trans_prealloc_size("transaction_prealloc_size",
|
|
&SV::trans_prealloc_size,
|
|
0, fix_trans_mem_root);
|
|
|
|
#ifdef HAVE_QUERY_CACHE
|
|
sys_var_long_ptr sys_query_cache_limit("query_cache_limit",
|
|
&query_cache.query_cache_limit);
|
|
sys_var_long_ptr sys_query_cache_min_res_unit("query_cache_min_res_unit",
|
|
&query_cache_min_res_unit,
|
|
fix_query_cache_min_res_unit);
|
|
sys_var_thd_enum sys_query_cache_type("query_cache_type",
|
|
&SV::query_cache_type,
|
|
&query_cache_type_typelib);
|
|
sys_var_thd_bool
|
|
sys_query_cache_wlock_invalidate("query_cache_wlock_invalidate",
|
|
&SV::query_cache_wlock_invalidate);
|
|
#endif /* HAVE_QUERY_CACHE */
|
|
sys_var_bool_ptr sys_secure_auth("secure_auth", &opt_secure_auth);
|
|
sys_var_long_ptr sys_server_id("server_id", &server_id, fix_server_id);
|
|
sys_var_bool_ptr sys_slave_compressed_protocol("slave_compressed_protocol",
|
|
&opt_slave_compressed_protocol);
|
|
#ifdef HAVE_REPLICATION
|
|
sys_var_long_ptr sys_slave_net_timeout("slave_net_timeout",
|
|
&slave_net_timeout);
|
|
sys_var_long_ptr sys_slave_trans_retries("slave_transaction_retries",
|
|
&slave_trans_retries);
|
|
#endif
|
|
sys_var_long_ptr sys_slow_launch_time("slow_launch_time",
|
|
&slow_launch_time);
|
|
sys_var_thd_ulong sys_sort_buffer("sort_buffer_size",
|
|
&SV::sortbuff_size);
|
|
sys_var_thd_sql_mode sys_sql_mode("sql_mode",
|
|
&SV::sql_mode);
|
|
#ifdef HAVE_OPENSSL
|
|
extern char *opt_ssl_ca, *opt_ssl_capath, *opt_ssl_cert, *opt_ssl_cipher,
|
|
*opt_ssl_key;
|
|
sys_var_const_str_ptr sys_ssl_ca("ssl_ca", &opt_ssl_ca);
|
|
sys_var_const_str_ptr sys_ssl_capath("ssl_capath", &opt_ssl_capath);
|
|
sys_var_const_str_ptr sys_ssl_cert("ssl_cert", &opt_ssl_cert);
|
|
sys_var_const_str_ptr sys_ssl_cipher("ssl_cipher", &opt_ssl_cipher);
|
|
sys_var_const_str_ptr sys_ssl_key("ssl_key", &opt_ssl_key);
|
|
#else
|
|
sys_var_const_str sys_ssl_ca("ssl_ca", NULL);
|
|
sys_var_const_str sys_ssl_capath("ssl_capath", NULL);
|
|
sys_var_const_str sys_ssl_cert("ssl_cert", NULL);
|
|
sys_var_const_str sys_ssl_cipher("ssl_cipher", NULL);
|
|
sys_var_const_str sys_ssl_key("ssl_key", NULL);
|
|
#endif
|
|
sys_var_thd_enum
|
|
sys_updatable_views_with_limit("updatable_views_with_limit",
|
|
&SV::updatable_views_with_limit,
|
|
&updatable_views_with_limit_typelib);
|
|
|
|
sys_var_thd_table_type sys_table_type("table_type",
|
|
&SV::table_type);
|
|
sys_var_thd_storage_engine sys_storage_engine("storage_engine",
|
|
&SV::table_type);
|
|
#ifdef HAVE_REPLICATION
|
|
sys_var_sync_binlog_period sys_sync_binlog_period("sync_binlog", &sync_binlog_period);
|
|
#endif
|
|
sys_var_bool_ptr sys_sync_frm("sync_frm", &opt_sync_frm);
|
|
sys_var_const_str sys_system_time_zone("system_time_zone",
|
|
system_time_zone);
|
|
sys_var_long_ptr sys_table_def_size("table_definition_cache",
|
|
&table_def_size);
|
|
sys_var_long_ptr sys_table_cache_size("table_open_cache",
|
|
&table_cache_size);
|
|
sys_var_long_ptr sys_table_lock_wait_timeout("table_lock_wait_timeout",
|
|
&table_lock_wait_timeout);
|
|
sys_var_long_ptr sys_thread_cache_size("thread_cache_size",
|
|
&thread_cache_size);
|
|
sys_var_thd_enum sys_tx_isolation("tx_isolation",
|
|
&SV::tx_isolation,
|
|
&tx_isolation_typelib,
|
|
fix_tx_isolation,
|
|
check_tx_isolation);
|
|
sys_var_thd_ulonglong sys_tmp_table_size("tmp_table_size",
|
|
&SV::tmp_table_size);
|
|
sys_var_bool_ptr sys_timed_mutexes("timed_mutexes",
|
|
&timed_mutexes);
|
|
sys_var_const_str sys_version("version", server_version);
|
|
sys_var_const_str sys_version_comment("version_comment",
|
|
MYSQL_COMPILATION_COMMENT);
|
|
sys_var_const_str sys_version_compile_machine("version_compile_machine",
|
|
MACHINE_TYPE);
|
|
sys_var_const_str sys_version_compile_os("version_compile_os",
|
|
SYSTEM_TYPE);
|
|
sys_var_thd_ulong sys_net_wait_timeout("wait_timeout",
|
|
&SV::net_wait_timeout);
|
|
#ifdef WITH_INNOBASE_STORAGE_ENGINE
|
|
sys_var_long_ptr sys_innodb_fast_shutdown("innodb_fast_shutdown",
|
|
&innobase_fast_shutdown);
|
|
sys_var_long_ptr sys_innodb_max_dirty_pages_pct("innodb_max_dirty_pages_pct",
|
|
&srv_max_buf_pool_modified_pct);
|
|
sys_var_long_ptr sys_innodb_max_purge_lag("innodb_max_purge_lag",
|
|
&srv_max_purge_lag);
|
|
sys_var_thd_bool sys_innodb_table_locks("innodb_table_locks",
|
|
&SV::innodb_table_locks);
|
|
sys_var_thd_bool sys_innodb_support_xa("innodb_support_xa",
|
|
&SV::innodb_support_xa);
|
|
sys_var_long_ptr sys_innodb_autoextend_increment("innodb_autoextend_increment",
|
|
&srv_auto_extend_increment);
|
|
sys_var_long_ptr sys_innodb_sync_spin_loops("innodb_sync_spin_loops",
|
|
&srv_n_spin_wait_rounds);
|
|
sys_var_long_ptr sys_innodb_concurrency_tickets("innodb_concurrency_tickets",
|
|
&srv_n_free_tickets_to_enter);
|
|
sys_var_long_ptr sys_innodb_thread_sleep_delay("innodb_thread_sleep_delay",
|
|
&srv_thread_sleep_delay);
|
|
sys_var_long_ptr sys_innodb_thread_concurrency("innodb_thread_concurrency",
|
|
&srv_thread_concurrency);
|
|
sys_var_long_ptr sys_innodb_commit_concurrency("innodb_commit_concurrency",
|
|
&srv_commit_concurrency);
|
|
sys_var_long_ptr sys_innodb_flush_log_at_trx_commit(
|
|
"innodb_flush_log_at_trx_commit",
|
|
&srv_flush_log_at_trx_commit);
|
|
#endif
|
|
/* Condition pushdown to storage engine */
|
|
sys_var_thd_bool
|
|
sys_engine_condition_pushdown("engine_condition_pushdown",
|
|
&SV::engine_condition_pushdown);
|
|
|
|
/* ndb thread specific variable settings */
|
|
sys_var_thd_ulong
|
|
sys_ndb_autoincrement_prefetch_sz("ndb_autoincrement_prefetch_sz",
|
|
&SV::ndb_autoincrement_prefetch_sz);
|
|
sys_var_thd_bool
|
|
sys_ndb_force_send("ndb_force_send", &SV::ndb_force_send);
|
|
#ifdef HAVE_NDB_BINLOG
|
|
sys_var_long_ptr
|
|
sys_ndb_report_thresh_binlog_epoch_slip("ndb_report_thresh_binlog_epoch_slip",
|
|
&ndb_report_thresh_binlog_epoch_slip);
|
|
sys_var_long_ptr
|
|
sys_ndb_report_thresh_binlog_mem_usage("ndb_report_thresh_binlog_mem_usage",
|
|
&ndb_report_thresh_binlog_mem_usage);
|
|
#endif
|
|
sys_var_thd_bool
|
|
sys_ndb_use_exact_count("ndb_use_exact_count", &SV::ndb_use_exact_count);
|
|
sys_var_thd_bool
|
|
sys_ndb_use_transactions("ndb_use_transactions", &SV::ndb_use_transactions);
|
|
sys_var_long_ptr
|
|
sys_ndb_cache_check_time("ndb_cache_check_time", &ndb_cache_check_time);
|
|
sys_var_thd_bool
|
|
sys_ndb_index_stat_enable("ndb_index_stat_enable",
|
|
&SV::ndb_index_stat_enable);
|
|
sys_var_thd_ulong
|
|
sys_ndb_index_stat_cache_entries("ndb_index_stat_cache_entries",
|
|
&SV::ndb_index_stat_cache_entries);
|
|
sys_var_thd_ulong
|
|
sys_ndb_index_stat_update_freq("ndb_index_stat_update_freq",
|
|
&SV::ndb_index_stat_update_freq);
|
|
sys_var_long_ptr
|
|
sys_ndb_extra_logging("ndb_extra_logging", &ndb_extra_logging);
|
|
sys_var_thd_bool
|
|
sys_ndb_use_copying_alter_table("ndb_use_copying_alter_table", &SV::ndb_use_copying_alter_table);
|
|
|
|
/* Time/date/datetime formats */
|
|
|
|
sys_var_thd_date_time_format sys_time_format("time_format",
|
|
&SV::time_format,
|
|
MYSQL_TIMESTAMP_TIME);
|
|
sys_var_thd_date_time_format sys_date_format("date_format",
|
|
&SV::date_format,
|
|
MYSQL_TIMESTAMP_DATE);
|
|
sys_var_thd_date_time_format sys_datetime_format("datetime_format",
|
|
&SV::datetime_format,
|
|
MYSQL_TIMESTAMP_DATETIME);
|
|
|
|
/* Variables that are bits in THD */
|
|
|
|
sys_var_thd_bit sys_autocommit("autocommit", 0,
|
|
set_option_autocommit,
|
|
OPTION_NOT_AUTOCOMMIT,
|
|
1);
|
|
static sys_var_thd_bit sys_big_tables("big_tables", 0,
|
|
set_option_bit,
|
|
OPTION_BIG_TABLES);
|
|
#ifndef TO_BE_DELETED /* Alias for big_tables */
|
|
static sys_var_thd_bit sys_sql_big_tables("sql_big_tables", 0,
|
|
set_option_bit,
|
|
OPTION_BIG_TABLES);
|
|
#endif
|
|
static sys_var_thd_bit sys_big_selects("sql_big_selects", 0,
|
|
set_option_bit,
|
|
OPTION_BIG_SELECTS);
|
|
static sys_var_thd_bit sys_log_off("sql_log_off",
|
|
check_log_update,
|
|
set_option_bit,
|
|
OPTION_LOG_OFF);
|
|
static sys_var_thd_bit sys_log_update("sql_log_update",
|
|
check_log_update,
|
|
set_log_update,
|
|
OPTION_BIN_LOG);
|
|
static sys_var_thd_bit sys_log_binlog("sql_log_bin",
|
|
check_log_update,
|
|
set_option_bit,
|
|
OPTION_BIN_LOG);
|
|
static sys_var_thd_bit sys_sql_warnings("sql_warnings", 0,
|
|
set_option_bit,
|
|
OPTION_WARNINGS);
|
|
static sys_var_thd_bit sys_sql_notes("sql_notes", 0,
|
|
set_option_bit,
|
|
OPTION_SQL_NOTES);
|
|
static sys_var_thd_bit sys_auto_is_null("sql_auto_is_null", 0,
|
|
set_option_bit,
|
|
OPTION_AUTO_IS_NULL);
|
|
static sys_var_thd_bit sys_safe_updates("sql_safe_updates", 0,
|
|
set_option_bit,
|
|
OPTION_SAFE_UPDATES);
|
|
static sys_var_thd_bit sys_buffer_results("sql_buffer_result", 0,
|
|
set_option_bit,
|
|
OPTION_BUFFER_RESULT);
|
|
static sys_var_thd_bit sys_quote_show_create("sql_quote_show_create", 0,
|
|
set_option_bit,
|
|
OPTION_QUOTE_SHOW_CREATE);
|
|
static sys_var_thd_bit sys_foreign_key_checks("foreign_key_checks", 0,
|
|
set_option_bit,
|
|
OPTION_NO_FOREIGN_KEY_CHECKS,
|
|
1);
|
|
static sys_var_thd_bit sys_unique_checks("unique_checks", 0,
|
|
set_option_bit,
|
|
OPTION_RELAXED_UNIQUE_CHECKS,
|
|
1);
|
|
|
|
/* Local state variables */
|
|
|
|
static sys_var_thd_ha_rows sys_select_limit("sql_select_limit",
|
|
&SV::select_limit);
|
|
static sys_var_timestamp sys_timestamp("timestamp");
|
|
static sys_var_last_insert_id sys_last_insert_id("last_insert_id");
|
|
static sys_var_last_insert_id sys_identity("identity");
|
|
|
|
static sys_var_thd_lc_time_names sys_lc_time_names("lc_time_names");
|
|
|
|
static sys_var_insert_id sys_insert_id("insert_id");
|
|
static sys_var_readonly sys_error_count("error_count",
|
|
OPT_SESSION,
|
|
SHOW_LONG,
|
|
get_error_count);
|
|
static sys_var_readonly sys_warning_count("warning_count",
|
|
OPT_SESSION,
|
|
SHOW_LONG,
|
|
get_warning_count);
|
|
|
|
/* alias for last_insert_id() to be compatible with Sybase */
|
|
#ifdef HAVE_REPLICATION
|
|
static sys_var_slave_skip_counter sys_slave_skip_counter("sql_slave_skip_counter");
|
|
#endif
|
|
static sys_var_rand_seed1 sys_rand_seed1("rand_seed1");
|
|
static sys_var_rand_seed2 sys_rand_seed2("rand_seed2");
|
|
|
|
static sys_var_thd_ulong sys_default_week_format("default_week_format",
|
|
&SV::default_week_format);
|
|
|
|
sys_var_thd_ulong sys_group_concat_max_len("group_concat_max_len",
|
|
&SV::group_concat_max_len);
|
|
|
|
sys_var_thd_time_zone sys_time_zone("time_zone");
|
|
|
|
/* Read only variables */
|
|
|
|
sys_var_have_variable sys_have_compress("have_compress", &have_compress);
|
|
sys_var_have_variable sys_have_crypt("have_crypt", &have_crypt);
|
|
sys_var_have_variable sys_have_csv_db("have_csv", &have_csv_db);
|
|
sys_var_have_variable sys_have_dlopen("have_dynamic_loading", &have_dlopen);
|
|
sys_var_have_variable sys_have_geometry("have_geometry", &have_geometry);
|
|
sys_var_have_variable sys_have_innodb("have_innodb", &have_innodb);
|
|
sys_var_have_variable sys_have_ndbcluster("have_ndbcluster", &have_ndbcluster);
|
|
sys_var_have_variable sys_have_openssl("have_openssl", &have_openssl);
|
|
sys_var_have_variable sys_have_partition_db("have_partitioning",
|
|
&have_partition_db);
|
|
sys_var_have_variable sys_have_query_cache("have_query_cache",
|
|
&have_query_cache);
|
|
sys_var_have_variable sys_have_rtree_keys("have_rtree_keys", &have_rtree_keys);
|
|
sys_var_have_variable sys_have_symlink("have_symlink", &have_symlink);
|
|
sys_var_have_variable sys_have_row_based_replication("have_row_based_replication",&have_row_based_replication);
|
|
/* Global read-only variable describing server license */
|
|
sys_var_const_str sys_license("license", STRINGIFY_ARG(LICENSE));
|
|
|
|
/* Global variables which enable|disable logging */
|
|
sys_var_log_state sys_var_general_log("general_log", &opt_log,
|
|
QUERY_LOG_GENERAL);
|
|
sys_var_log_state sys_var_slow_query_log("slow_query_log", &opt_slow_log,
|
|
QUERY_LOG_SLOW);
|
|
sys_var_str sys_var_general_log_path("general_log_file", sys_check_log_path,
|
|
sys_update_general_log_path,
|
|
sys_default_general_log_path,
|
|
opt_logname);
|
|
sys_var_str sys_var_slow_log_path("slow_query_log_file", sys_check_log_path,
|
|
sys_update_slow_log_path,
|
|
sys_default_slow_log_path,
|
|
opt_slow_logname);
|
|
sys_var_log_output sys_var_log_output_state("log_output", &log_output_options,
|
|
&log_output_typelib, 0);
|
|
|
|
#ifdef HAVE_REPLICATION
|
|
static int show_slave_skip_errors(THD *thd, SHOW_VAR *var, char *buff)
|
|
{
|
|
var->type=SHOW_CHAR;
|
|
var->value= buff;
|
|
if (!use_slave_mask || bitmap_is_clear_all(&slave_error_mask))
|
|
{
|
|
var->value= const_cast<char *>("OFF");
|
|
}
|
|
else if (bitmap_is_set_all(&slave_error_mask))
|
|
{
|
|
var->value= const_cast<char *>("ALL");
|
|
}
|
|
else
|
|
{
|
|
/* 10 is enough assuming errors are max 4 digits */
|
|
int i;
|
|
var->value= buff;
|
|
for (i= 1;
|
|
i < MAX_SLAVE_ERROR &&
|
|
(buff - var->value) < SHOW_VAR_FUNC_BUFF_SIZE;
|
|
i++)
|
|
{
|
|
if (bitmap_is_set(&slave_error_mask, i))
|
|
{
|
|
buff= int10_to_str(i, buff, 10);
|
|
*buff++= ',';
|
|
}
|
|
}
|
|
if (var->value != buff)
|
|
buff--; // Remove last ','
|
|
if (i < MAX_SLAVE_ERROR)
|
|
buff= strmov(buff, "..."); // Couldn't show all errors
|
|
*buff=0;
|
|
}
|
|
return 0;
|
|
}
|
|
#endif /* HAVE_REPLICATION */
|
|
|
|
/*
|
|
Variables shown by SHOW VARIABLES in alphabetical order
|
|
*/
|
|
|
|
SHOW_VAR init_vars[]= {
|
|
{"auto_increment_increment", (char*) &sys_auto_increment_increment, SHOW_SYS},
|
|
{"auto_increment_offset", (char*) &sys_auto_increment_offset, SHOW_SYS},
|
|
{sys_automatic_sp_privileges.name,(char*) &sys_automatic_sp_privileges, SHOW_SYS},
|
|
{"back_log", (char*) &back_log, SHOW_LONG},
|
|
{sys_basedir.name, (char*) &sys_basedir, SHOW_SYS},
|
|
{sys_binlog_cache_size.name,(char*) &sys_binlog_cache_size, SHOW_SYS},
|
|
{sys_binlog_format.name, (char*) &sys_binlog_format, SHOW_SYS},
|
|
{sys_bulk_insert_buff_size.name,(char*) &sys_bulk_insert_buff_size,SHOW_SYS},
|
|
{sys_character_set_client.name,(char*) &sys_character_set_client, SHOW_SYS},
|
|
{sys_character_set_connection.name,(char*) &sys_character_set_connection,SHOW_SYS},
|
|
{sys_character_set_database.name, (char*) &sys_character_set_database,SHOW_SYS},
|
|
{sys_character_set_filesystem.name,(char*) &sys_character_set_filesystem, SHOW_SYS},
|
|
{sys_character_set_results.name,(char*) &sys_character_set_results, SHOW_SYS},
|
|
{sys_character_set_server.name, (char*) &sys_character_set_server,SHOW_SYS},
|
|
{sys_charset_system.name, (char*) &sys_charset_system, SHOW_SYS},
|
|
{"character_sets_dir", mysql_charsets_dir, SHOW_CHAR},
|
|
{sys_collation_connection.name,(char*) &sys_collation_connection, SHOW_SYS},
|
|
{sys_collation_database.name,(char*) &sys_collation_database, SHOW_SYS},
|
|
{sys_collation_server.name,(char*) &sys_collation_server, SHOW_SYS},
|
|
{sys_completion_type.name, (char*) &sys_completion_type, SHOW_SYS},
|
|
{sys_concurrent_insert.name,(char*) &sys_concurrent_insert, SHOW_SYS},
|
|
{sys_connect_timeout.name, (char*) &sys_connect_timeout, SHOW_SYS},
|
|
{sys_datadir.name, (char*) &sys_datadir, SHOW_SYS},
|
|
{sys_date_format.name, (char*) &sys_date_format, SHOW_SYS},
|
|
{sys_datetime_format.name, (char*) &sys_datetime_format, SHOW_SYS},
|
|
#ifndef DBUG_OFF
|
|
{sys_dbug.name, (char*) &sys_dbug, SHOW_SYS},
|
|
#endif
|
|
{sys_default_week_format.name, (char*) &sys_default_week_format, SHOW_SYS},
|
|
{sys_delay_key_write.name, (char*) &sys_delay_key_write, SHOW_SYS},
|
|
{sys_delayed_insert_limit.name, (char*) &sys_delayed_insert_limit,SHOW_SYS},
|
|
{sys_delayed_insert_timeout.name, (char*) &sys_delayed_insert_timeout, SHOW_SYS},
|
|
{sys_delayed_queue_size.name,(char*) &sys_delayed_queue_size, SHOW_SYS},
|
|
{sys_div_precincrement.name,(char*) &sys_div_precincrement,SHOW_SYS},
|
|
{sys_engine_condition_pushdown.name,
|
|
(char*) &sys_engine_condition_pushdown, SHOW_SYS},
|
|
{sys_event_scheduler.name, (char*) &sys_event_scheduler, SHOW_SYS},
|
|
{sys_expire_logs_days.name, (char*) &sys_expire_logs_days, SHOW_SYS},
|
|
{sys_flush.name, (char*) &sys_flush, SHOW_SYS},
|
|
{sys_flush_time.name, (char*) &sys_flush_time, SHOW_SYS},
|
|
{sys_ft_boolean_syntax.name,(char*) &ft_boolean_syntax, SHOW_CHAR},
|
|
{"ft_max_word_len", (char*) &ft_max_word_len, SHOW_LONG},
|
|
{"ft_min_word_len", (char*) &ft_min_word_len, SHOW_LONG},
|
|
{"ft_query_expansion_limit",(char*) &ft_query_expansion_limit, SHOW_LONG},
|
|
{"ft_stopword_file", (char*) &ft_stopword_file, SHOW_CHAR_PTR},
|
|
{sys_var_general_log.name, (char*) &opt_log, SHOW_MY_BOOL},
|
|
{sys_var_general_log_path.name, (char*) &sys_var_general_log_path, SHOW_SYS},
|
|
{sys_group_concat_max_len.name, (char*) &sys_group_concat_max_len, SHOW_SYS},
|
|
{sys_have_compress.name, (char*) &have_compress, SHOW_HAVE},
|
|
{sys_have_crypt.name, (char*) &have_crypt, SHOW_HAVE},
|
|
{sys_have_csv_db.name, (char*) &have_csv_db, SHOW_HAVE},
|
|
{sys_have_dlopen.name, (char*) &have_dlopen, SHOW_HAVE},
|
|
{sys_have_geometry.name, (char*) &have_geometry, SHOW_HAVE},
|
|
{sys_have_innodb.name, (char*) &have_innodb, SHOW_HAVE},
|
|
{sys_have_ndbcluster.name, (char*) &have_ndbcluster, SHOW_HAVE},
|
|
{sys_have_openssl.name, (char*) &have_openssl, SHOW_HAVE},
|
|
{sys_have_partition_db.name,(char*) &have_partition_db, SHOW_HAVE},
|
|
{sys_have_query_cache.name, (char*) &have_query_cache, SHOW_HAVE},
|
|
{sys_have_row_based_replication.name, (char*) &have_row_based_replication, SHOW_HAVE},
|
|
{sys_have_rtree_keys.name, (char*) &have_rtree_keys, SHOW_HAVE},
|
|
{sys_have_symlink.name, (char*) &have_symlink, SHOW_HAVE},
|
|
{"init_connect", (char*) &sys_init_connect, SHOW_SYS},
|
|
{"init_file", (char*) &opt_init_file, SHOW_CHAR_PTR},
|
|
{"init_slave", (char*) &sys_init_slave, SHOW_SYS},
|
|
#ifdef WITH_INNOBASE_STORAGE_ENGINE
|
|
{"innodb_additional_mem_pool_size", (char*) &innobase_additional_mem_pool_size, SHOW_LONG },
|
|
{sys_innodb_autoextend_increment.name, (char*) &sys_innodb_autoextend_increment, SHOW_SYS},
|
|
{"innodb_buffer_pool_size", (char*) &innobase_buffer_pool_size, SHOW_LONGLONG },
|
|
{"innodb_checksums", (char*) &innobase_use_checksums, SHOW_MY_BOOL},
|
|
{sys_innodb_commit_concurrency.name, (char*) &sys_innodb_commit_concurrency, SHOW_SYS},
|
|
{sys_innodb_concurrency_tickets.name, (char*) &sys_innodb_concurrency_tickets, SHOW_SYS},
|
|
{"innodb_data_file_path", (char*) &innobase_data_file_path, SHOW_CHAR_PTR},
|
|
{"innodb_data_home_dir", (char*) &innobase_data_home_dir, SHOW_CHAR_PTR},
|
|
{"innodb_doublewrite", (char*) &innobase_use_doublewrite, SHOW_MY_BOOL},
|
|
{sys_innodb_fast_shutdown.name,(char*) &sys_innodb_fast_shutdown, SHOW_SYS},
|
|
{"innodb_file_io_threads", (char*) &innobase_file_io_threads, SHOW_LONG },
|
|
{"innodb_file_per_table", (char*) &innobase_file_per_table, SHOW_MY_BOOL},
|
|
{"innodb_flush_method", (char*) &innobase_unix_file_flush_method, SHOW_CHAR_PTR},
|
|
{"innodb_force_recovery", (char*) &innobase_force_recovery, SHOW_LONG },
|
|
{"innodb_lock_wait_timeout", (char*) &innobase_lock_wait_timeout, SHOW_LONG },
|
|
{"innodb_locks_unsafe_for_binlog", (char*) &innobase_locks_unsafe_for_binlog, SHOW_MY_BOOL},
|
|
{"innodb_log_arch_dir", (char*) &innobase_log_arch_dir, SHOW_CHAR_PTR},
|
|
{"innodb_log_archive", (char*) &innobase_log_archive, SHOW_MY_BOOL},
|
|
{"innodb_log_buffer_size", (char*) &innobase_log_buffer_size, SHOW_LONG },
|
|
{"innodb_log_file_size", (char*) &innobase_log_file_size, SHOW_LONGLONG},
|
|
{"innodb_log_files_in_group", (char*) &innobase_log_files_in_group, SHOW_LONG},
|
|
{"innodb_log_group_home_dir", (char*) &innobase_log_group_home_dir, SHOW_CHAR_PTR},
|
|
{sys_innodb_max_dirty_pages_pct.name, (char*) &sys_innodb_max_dirty_pages_pct, SHOW_SYS},
|
|
{sys_innodb_max_purge_lag.name, (char*) &sys_innodb_max_purge_lag, SHOW_SYS},
|
|
{"innodb_mirrored_log_groups", (char*) &innobase_mirrored_log_groups, SHOW_LONG},
|
|
{"innodb_open_files", (char*) &innobase_open_files, SHOW_LONG },
|
|
{"innodb_rollback_on_timeout", (char*) &innobase_rollback_on_timeout, SHOW_MY_BOOL},
|
|
{sys_innodb_support_xa.name, (char*) &sys_innodb_support_xa, SHOW_SYS},
|
|
{sys_innodb_sync_spin_loops.name, (char*) &sys_innodb_sync_spin_loops, SHOW_SYS},
|
|
{sys_innodb_table_locks.name, (char*) &sys_innodb_table_locks, SHOW_SYS},
|
|
{sys_innodb_thread_concurrency.name, (char*) &sys_innodb_thread_concurrency, SHOW_SYS},
|
|
{sys_innodb_thread_sleep_delay.name, (char*) &sys_innodb_thread_sleep_delay, SHOW_SYS},
|
|
{sys_innodb_flush_log_at_trx_commit.name, (char*) &sys_innodb_flush_log_at_trx_commit, SHOW_SYS},
|
|
#endif
|
|
{sys_interactive_timeout.name,(char*) &sys_interactive_timeout, SHOW_SYS},
|
|
{sys_join_buffer_size.name, (char*) &sys_join_buffer_size, SHOW_SYS},
|
|
{sys_key_buffer_size.name, (char*) &sys_key_buffer_size, SHOW_SYS},
|
|
{sys_key_cache_age_threshold.name, (char*) &sys_key_cache_age_threshold,
|
|
SHOW_SYS},
|
|
{sys_key_cache_block_size.name, (char*) &sys_key_cache_block_size,
|
|
SHOW_SYS},
|
|
{sys_key_cache_division_limit.name, (char*) &sys_key_cache_division_limit,
|
|
SHOW_SYS},
|
|
{"language", language, SHOW_CHAR},
|
|
{"large_files_support", (char*) &opt_large_files, SHOW_BOOL},
|
|
{"large_page_size", (char*) &opt_large_page_size, SHOW_INT},
|
|
{"large_pages", (char*) &opt_large_pages, SHOW_MY_BOOL},
|
|
{sys_lc_time_names.name, (char*) &sys_lc_time_names, SHOW_SYS},
|
|
{sys_license.name, (char*) &sys_license, SHOW_SYS},
|
|
{sys_local_infile.name, (char*) &sys_local_infile, SHOW_SYS},
|
|
#ifdef HAVE_MLOCKALL
|
|
{"locked_in_memory", (char*) &locked_in_memory, SHOW_BOOL},
|
|
#endif
|
|
{"log", (char*) &opt_log, SHOW_BOOL},
|
|
{"log_bin", (char*) &opt_bin_log, SHOW_BOOL},
|
|
{sys_trust_function_creators.name,(char*) &sys_trust_function_creators, SHOW_SYS},
|
|
{"log_error", (char*) log_error_file, SHOW_CHAR},
|
|
{sys_var_log_output_state.name, (char*) &sys_var_log_output_state, SHOW_SYS},
|
|
{sys_log_queries_not_using_indexes.name,
|
|
(char*) &sys_log_queries_not_using_indexes, SHOW_SYS},
|
|
#ifdef HAVE_REPLICATION
|
|
{"log_slave_updates", (char*) &opt_log_slave_updates, SHOW_MY_BOOL},
|
|
#endif
|
|
{"log_slow_queries", (char*) &opt_slow_log, SHOW_BOOL},
|
|
{sys_log_warnings.name, (char*) &sys_log_warnings, SHOW_SYS},
|
|
{sys_long_query_time.name, (char*) &sys_long_query_time, SHOW_SYS},
|
|
{sys_low_priority_updates.name, (char*) &sys_low_priority_updates, SHOW_SYS},
|
|
{"lower_case_file_system", (char*) &lower_case_file_system, SHOW_MY_BOOL},
|
|
{"lower_case_table_names", (char*) &lower_case_table_names, SHOW_INT},
|
|
{sys_max_allowed_packet.name,(char*) &sys_max_allowed_packet, SHOW_SYS},
|
|
{sys_max_binlog_cache_size.name,(char*) &sys_max_binlog_cache_size, SHOW_SYS},
|
|
{sys_max_binlog_size.name, (char*) &sys_max_binlog_size, SHOW_SYS},
|
|
{sys_max_connect_errors.name, (char*) &sys_max_connect_errors, SHOW_SYS},
|
|
{sys_max_connections.name, (char*) &sys_max_connections, SHOW_SYS},
|
|
{sys_max_delayed_threads.name,(char*) &sys_max_delayed_threads, SHOW_SYS},
|
|
{sys_max_error_count.name, (char*) &sys_max_error_count, SHOW_SYS},
|
|
{sys_max_heap_table_size.name,(char*) &sys_max_heap_table_size, SHOW_SYS},
|
|
{sys_max_insert_delayed_threads.name,
|
|
(char*) &sys_max_insert_delayed_threads, SHOW_SYS},
|
|
{sys_max_join_size.name, (char*) &sys_max_join_size, SHOW_SYS},
|
|
{sys_max_length_for_sort_data.name, (char*) &sys_max_length_for_sort_data,
|
|
SHOW_SYS},
|
|
{sys_max_prepared_stmt_count.name, (char*) &sys_max_prepared_stmt_count,
|
|
SHOW_SYS},
|
|
{sys_max_relay_log_size.name, (char*) &sys_max_relay_log_size, SHOW_SYS},
|
|
{sys_max_seeks_for_key.name, (char*) &sys_max_seeks_for_key, SHOW_SYS},
|
|
{sys_max_sort_length.name, (char*) &sys_max_sort_length, SHOW_SYS},
|
|
{sys_max_sp_recursion_depth.name,
|
|
(char*) &sys_max_sp_recursion_depth, SHOW_SYS},
|
|
{sys_max_tmp_tables.name, (char*) &sys_max_tmp_tables, SHOW_SYS},
|
|
{sys_max_user_connections.name,(char*) &sys_max_user_connections, SHOW_SYS},
|
|
{sys_max_write_lock_count.name, (char*) &sys_max_write_lock_count,SHOW_SYS},
|
|
{sys_multi_range_count.name, (char*) &sys_multi_range_count, SHOW_SYS},
|
|
{sys_myisam_data_pointer_size.name, (char*) &sys_myisam_data_pointer_size, SHOW_SYS},
|
|
{sys_myisam_max_sort_file_size.name, (char*) &sys_myisam_max_sort_file_size,
|
|
SHOW_SYS},
|
|
{"myisam_recover_options", (char*) &myisam_recover_options_str, SHOW_CHAR_PTR},
|
|
{sys_myisam_repair_threads.name, (char*) &sys_myisam_repair_threads,
|
|
SHOW_SYS},
|
|
{sys_myisam_sort_buffer_size.name, (char*) &sys_myisam_sort_buffer_size, SHOW_SYS},
|
|
|
|
{sys_myisam_stats_method.name, (char*) &sys_myisam_stats_method, SHOW_SYS},
|
|
{sys_myisam_use_mmap.name, (char*) &sys_myisam_use_mmap, SHOW_SYS},
|
|
|
|
#ifdef __NT__
|
|
{"named_pipe", (char*) &opt_enable_named_pipe, SHOW_MY_BOOL},
|
|
#endif
|
|
{sys_ndb_autoincrement_prefetch_sz.name,
|
|
(char*) &sys_ndb_autoincrement_prefetch_sz, SHOW_SYS},
|
|
{sys_ndb_cache_check_time.name,(char*) &sys_ndb_cache_check_time, SHOW_SYS},
|
|
{sys_ndb_extra_logging.name,(char*) &sys_ndb_extra_logging, SHOW_SYS},
|
|
{sys_ndb_force_send.name, (char*) &sys_ndb_force_send, SHOW_SYS},
|
|
{sys_ndb_index_stat_cache_entries.name, (char*) &sys_ndb_index_stat_cache_entries, SHOW_SYS},
|
|
{sys_ndb_index_stat_enable.name, (char*) &sys_ndb_index_stat_enable, SHOW_SYS},
|
|
{sys_ndb_index_stat_update_freq.name, (char*) &sys_ndb_index_stat_update_freq, SHOW_SYS},
|
|
#ifdef HAVE_NDB_BINLOG
|
|
{sys_ndb_report_thresh_binlog_epoch_slip.name,
|
|
(char*) &sys_ndb_report_thresh_binlog_epoch_slip, SHOW_SYS},
|
|
{sys_ndb_report_thresh_binlog_mem_usage.name,
|
|
(char*) &sys_ndb_report_thresh_binlog_mem_usage, SHOW_SYS},
|
|
#endif
|
|
{sys_ndb_use_copying_alter_table.name,
|
|
(char*) &sys_ndb_use_copying_alter_table, SHOW_SYS},
|
|
{sys_ndb_use_exact_count.name,(char*) &sys_ndb_use_exact_count, SHOW_SYS},
|
|
{sys_ndb_use_transactions.name,(char*) &sys_ndb_use_transactions, SHOW_SYS},
|
|
{sys_net_buffer_length.name,(char*) &sys_net_buffer_length, SHOW_SYS},
|
|
{sys_net_read_timeout.name, (char*) &sys_net_read_timeout, SHOW_SYS},
|
|
{sys_net_retry_count.name, (char*) &sys_net_retry_count, SHOW_SYS},
|
|
{sys_net_write_timeout.name,(char*) &sys_net_write_timeout, SHOW_SYS},
|
|
{sys_new_mode.name, (char*) &sys_new_mode, SHOW_SYS},
|
|
{sys_old_alter_table.name, (char*) &sys_old_alter_table, SHOW_SYS},
|
|
{sys_old_passwords.name, (char*) &sys_old_passwords, SHOW_SYS},
|
|
{"open_files_limit", (char*) &open_files_limit, SHOW_LONG},
|
|
{sys_optimizer_prune_level.name, (char*) &sys_optimizer_prune_level,
|
|
SHOW_SYS},
|
|
{sys_optimizer_search_depth.name,(char*) &sys_optimizer_search_depth,
|
|
SHOW_SYS},
|
|
{"pid_file", (char*) pidfile_name, SHOW_CHAR},
|
|
{"plugin_dir", (char*) opt_plugin_dir, SHOW_CHAR},
|
|
{"port", (char*) &mysqld_port, SHOW_INT},
|
|
{sys_preload_buff_size.name, (char*) &sys_preload_buff_size, SHOW_SYS},
|
|
{"protocol_version", (char*) &protocol_version, SHOW_INT},
|
|
{sys_query_alloc_block_size.name, (char*) &sys_query_alloc_block_size,
|
|
SHOW_SYS},
|
|
#ifdef HAVE_QUERY_CACHE
|
|
{sys_query_cache_limit.name,(char*) &sys_query_cache_limit, SHOW_SYS},
|
|
{sys_query_cache_min_res_unit.name, (char*) &sys_query_cache_min_res_unit,
|
|
SHOW_SYS},
|
|
{sys_query_cache_size.name, (char*) &sys_query_cache_size, SHOW_SYS},
|
|
{sys_query_cache_type.name, (char*) &sys_query_cache_type, SHOW_SYS},
|
|
{sys_query_cache_wlock_invalidate.name,
|
|
(char *) &sys_query_cache_wlock_invalidate, SHOW_SYS},
|
|
#endif /* HAVE_QUERY_CACHE */
|
|
{sys_query_prealloc_size.name, (char*) &sys_query_prealloc_size, SHOW_SYS},
|
|
{sys_range_alloc_block_size.name, (char*) &sys_range_alloc_block_size,
|
|
SHOW_SYS},
|
|
{sys_read_buff_size.name, (char*) &sys_read_buff_size, SHOW_SYS},
|
|
{sys_readonly.name, (char*) &sys_readonly, SHOW_SYS},
|
|
{sys_read_rnd_buff_size.name,(char*) &sys_read_rnd_buff_size, SHOW_SYS},
|
|
#ifdef HAVE_REPLICATION
|
|
{sys_relay_log_purge.name, (char*) &sys_relay_log_purge, SHOW_SYS},
|
|
{"relay_log_space_limit", (char*) &relay_log_space_limit, SHOW_LONGLONG},
|
|
#endif
|
|
{sys_rpl_recovery_rank.name,(char*) &sys_rpl_recovery_rank, SHOW_SYS},
|
|
{"secure_auth", (char*) &sys_secure_auth, SHOW_SYS},
|
|
#ifdef HAVE_SMEM
|
|
{"shared_memory", (char*) &opt_enable_shared_memory, SHOW_MY_BOOL},
|
|
{"shared_memory_base_name", (char*) &shared_memory_base_name, SHOW_CHAR_PTR},
|
|
#endif
|
|
{sys_server_id.name, (char*) &sys_server_id, SHOW_SYS},
|
|
{"skip_external_locking", (char*) &my_disable_locking, SHOW_MY_BOOL},
|
|
{"skip_networking", (char*) &opt_disable_networking, SHOW_BOOL},
|
|
{"skip_show_database", (char*) &opt_skip_show_db, SHOW_BOOL},
|
|
#ifdef HAVE_REPLICATION
|
|
{sys_slave_compressed_protocol.name,
|
|
(char*) &sys_slave_compressed_protocol, SHOW_SYS},
|
|
{"slave_load_tmpdir", (char*) &slave_load_tmpdir, SHOW_CHAR_PTR},
|
|
{sys_slave_net_timeout.name,(char*) &sys_slave_net_timeout, SHOW_SYS},
|
|
{"slave_skip_errors", (char*) &show_slave_skip_errors, SHOW_FUNC},
|
|
{sys_slave_trans_retries.name,(char*) &sys_slave_trans_retries, SHOW_SYS},
|
|
#endif
|
|
{sys_slow_launch_time.name, (char*) &sys_slow_launch_time, SHOW_SYS},
|
|
{sys_var_slow_query_log.name, (char*) &opt_slow_log, SHOW_MY_BOOL},
|
|
{sys_var_slow_log_path.name, (char*) &sys_var_slow_log_path, SHOW_SYS},
|
|
#ifdef HAVE_SYS_UN_H
|
|
{"socket", (char*) &mysqld_unix_port, SHOW_CHAR_PTR},
|
|
#endif
|
|
{sys_sort_buffer.name, (char*) &sys_sort_buffer, SHOW_SYS},
|
|
{sys_big_selects.name, (char*) &sys_big_selects, SHOW_SYS},
|
|
{sys_sql_mode.name, (char*) &sys_sql_mode, SHOW_SYS},
|
|
{"sql_notes", (char*) &sys_sql_notes, SHOW_SYS},
|
|
{"sql_warnings", (char*) &sys_sql_warnings, SHOW_SYS},
|
|
{sys_ssl_ca.name, (char*) &sys_ssl_ca, SHOW_SYS},
|
|
{sys_ssl_capath.name, (char*) &sys_ssl_capath, SHOW_SYS},
|
|
{sys_ssl_cert.name, (char*) &sys_ssl_cert, SHOW_SYS},
|
|
{sys_ssl_cipher.name, (char*) &sys_ssl_cipher, SHOW_SYS},
|
|
{sys_ssl_key.name, (char*) &sys_ssl_key, SHOW_SYS},
|
|
{sys_storage_engine.name, (char*) &sys_storage_engine, SHOW_SYS},
|
|
#ifdef HAVE_REPLICATION
|
|
{sys_sync_binlog_period.name,(char*) &sys_sync_binlog_period, SHOW_SYS},
|
|
#endif
|
|
{sys_sync_frm.name, (char*) &sys_sync_frm, SHOW_SYS},
|
|
#ifdef HAVE_TZNAME
|
|
{"system_time_zone", system_time_zone, SHOW_CHAR},
|
|
#endif
|
|
{"table_definition_cache", (char*) &table_def_size, SHOW_LONG},
|
|
{"table_lock_wait_timeout", (char*) &table_lock_wait_timeout, SHOW_LONG },
|
|
{"table_open_cache", (char*) &table_cache_size, SHOW_LONG},
|
|
{sys_table_type.name, (char*) &sys_table_type, SHOW_SYS},
|
|
{sys_thread_cache_size.name,(char*) &sys_thread_cache_size, SHOW_SYS},
|
|
#ifdef HAVE_THR_SETCONCURRENCY
|
|
{"thread_concurrency", (char*) &concurrency, SHOW_LONG},
|
|
#endif
|
|
{"thread_stack", (char*) &thread_stack, SHOW_LONG},
|
|
{sys_time_format.name, (char*) &sys_time_format, SHOW_SYS},
|
|
{"time_zone", (char*) &sys_time_zone, SHOW_SYS},
|
|
{sys_timed_mutexes.name, (char*) &sys_timed_mutexes, SHOW_SYS},
|
|
{sys_tmp_table_size.name, (char*) &sys_tmp_table_size, SHOW_SYS},
|
|
{sys_tmpdir.name, (char*) &sys_tmpdir, SHOW_SYS},
|
|
{sys_trans_alloc_block_size.name, (char*) &sys_trans_alloc_block_size,
|
|
SHOW_SYS},
|
|
{sys_trans_prealloc_size.name, (char*) &sys_trans_prealloc_size, SHOW_SYS},
|
|
{sys_tx_isolation.name, (char*) &sys_tx_isolation, SHOW_SYS},
|
|
{sys_updatable_views_with_limit.name,
|
|
(char*) &sys_updatable_views_with_limit,SHOW_SYS},
|
|
{sys_version.name, (char*) &sys_version, SHOW_SYS},
|
|
{sys_version_comment.name, (char*) &sys_version_comment, SHOW_SYS},
|
|
{sys_version_compile_machine.name, (char*) &sys_version_compile_machine,
|
|
SHOW_SYS},
|
|
{sys_version_compile_os.name, (char*) &sys_version_compile_os, SHOW_SYS},
|
|
{sys_net_wait_timeout.name, (char*) &sys_net_wait_timeout, SHOW_SYS},
|
|
{NullS, NullS, SHOW_LONG}
|
|
};
|
|
|
|
|
|
bool sys_var::check(THD *thd, set_var *var)
|
|
{
|
|
var->save_result.ulonglong_value= var->value->val_int();
|
|
return 0;
|
|
}
|
|
|
|
bool sys_var_str::check(THD *thd, set_var *var)
|
|
{
|
|
int res;
|
|
if (!check_func)
|
|
return 0;
|
|
|
|
if ((res=(*check_func)(thd, var)) < 0)
|
|
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0),
|
|
name, var->value->str_value.ptr());
|
|
return res;
|
|
}
|
|
|
|
/*
|
|
Functions to check and update variables
|
|
*/
|
|
|
|
|
|
/*
|
|
Update variables 'init_connect, init_slave'.
|
|
|
|
In case of 'DEFAULT' value
|
|
(for example: 'set GLOBAL init_connect=DEFAULT')
|
|
'var' parameter is NULL pointer.
|
|
*/
|
|
|
|
bool update_sys_var_str(sys_var_str *var_str, rw_lock_t *var_mutex,
|
|
set_var *var)
|
|
{
|
|
char *res= 0, *old_value=(char *)(var ? var->value->str_value.ptr() : 0);
|
|
uint new_length= (var ? var->value->str_value.length() : 0);
|
|
if (!old_value)
|
|
old_value= (char*) "";
|
|
if (!(res= my_strndup(old_value, new_length, MYF(0))))
|
|
return 1;
|
|
/*
|
|
Replace the old value in such a way that the any thread using
|
|
the value will work.
|
|
*/
|
|
rw_wrlock(var_mutex);
|
|
old_value= var_str->value;
|
|
var_str->value= res;
|
|
var_str->value_length= new_length;
|
|
rw_unlock(var_mutex);
|
|
my_free(old_value, MYF(MY_ALLOW_ZERO_PTR));
|
|
return 0;
|
|
}
|
|
|
|
|
|
static bool sys_update_init_connect(THD *thd, set_var *var)
|
|
{
|
|
return update_sys_var_str(&sys_init_connect, &LOCK_sys_init_connect, var);
|
|
}
|
|
|
|
|
|
static void sys_default_init_connect(THD* thd, enum_var_type type)
|
|
{
|
|
update_sys_var_str(&sys_init_connect, &LOCK_sys_init_connect, 0);
|
|
}
|
|
|
|
|
|
static bool sys_update_init_slave(THD *thd, set_var *var)
|
|
{
|
|
return update_sys_var_str(&sys_init_slave, &LOCK_sys_init_slave, var);
|
|
}
|
|
|
|
|
|
static void sys_default_init_slave(THD* thd, enum_var_type type)
|
|
{
|
|
update_sys_var_str(&sys_init_slave, &LOCK_sys_init_slave, 0);
|
|
}
|
|
|
|
static int sys_check_ftb_syntax(THD *thd, set_var *var)
|
|
{
|
|
if (thd->security_ctx->master_access & SUPER_ACL)
|
|
return (ft_boolean_check_syntax_string((byte*)
|
|
var->value->str_value.c_ptr()) ?
|
|
-1 : 0);
|
|
else
|
|
{
|
|
my_error(ER_SPECIFIC_ACCESS_DENIED_ERROR, MYF(0), "SUPER");
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
static bool sys_update_ftb_syntax(THD *thd, set_var * var)
|
|
{
|
|
strmake(ft_boolean_syntax, var->value->str_value.c_ptr(),
|
|
sizeof(ft_boolean_syntax)-1);
|
|
return 0;
|
|
}
|
|
|
|
static void sys_default_ftb_syntax(THD *thd, enum_var_type type)
|
|
{
|
|
strmake(ft_boolean_syntax, def_ft_boolean_syntax,
|
|
sizeof(ft_boolean_syntax)-1);
|
|
}
|
|
|
|
|
|
/*
|
|
If one sets the LOW_PRIORIY UPDATES flag, we also must change the
|
|
used lock type
|
|
*/
|
|
|
|
static void fix_low_priority_updates(THD *thd, enum_var_type type)
|
|
{
|
|
if (type != OPT_GLOBAL)
|
|
thd->update_lock_default= (thd->variables.low_priority_updates ?
|
|
TL_WRITE_LOW_PRIORITY : TL_WRITE);
|
|
}
|
|
|
|
|
|
static void
|
|
fix_myisam_max_sort_file_size(THD *thd, enum_var_type type)
|
|
{
|
|
myisam_max_temp_length=
|
|
(my_off_t) global_system_variables.myisam_max_sort_file_size;
|
|
}
|
|
|
|
/*
|
|
Set the OPTION_BIG_SELECTS flag if max_join_size == HA_POS_ERROR
|
|
*/
|
|
|
|
static void fix_max_join_size(THD *thd, enum_var_type type)
|
|
{
|
|
if (type != OPT_GLOBAL)
|
|
{
|
|
if (thd->variables.max_join_size == HA_POS_ERROR)
|
|
thd->options|= OPTION_BIG_SELECTS;
|
|
else
|
|
thd->options&= ~OPTION_BIG_SELECTS;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
Can't change the 'next' tx_isolation while we are already in
|
|
a transaction
|
|
*/
|
|
static int check_tx_isolation(THD *thd, set_var *var)
|
|
{
|
|
if (var->type == OPT_DEFAULT && (thd->server_status & SERVER_STATUS_IN_TRANS))
|
|
{
|
|
my_error(ER_CANT_CHANGE_TX_ISOLATION, MYF(0));
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/*
|
|
If one doesn't use the SESSION modifier, the isolation level
|
|
is only active for the next command
|
|
*/
|
|
static void fix_tx_isolation(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_SESSION)
|
|
thd->session_tx_isolation= ((enum_tx_isolation)
|
|
thd->variables.tx_isolation);
|
|
}
|
|
|
|
static void fix_completion_type(THD *thd __attribute__((unused)),
|
|
enum_var_type type __attribute__((unused))) {}
|
|
|
|
static int check_completion_type(THD *thd, set_var *var)
|
|
{
|
|
longlong val= var->value->val_int();
|
|
if (val < 0 || val > 2)
|
|
{
|
|
char buf[64];
|
|
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), var->var->name, llstr(val, buf));
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*
|
|
If we are changing the thread variable, we have to copy it to NET too
|
|
*/
|
|
|
|
#ifdef HAVE_REPLICATION
|
|
static void fix_net_read_timeout(THD *thd, enum_var_type type)
|
|
{
|
|
if (type != OPT_GLOBAL)
|
|
thd->net.read_timeout=thd->variables.net_read_timeout;
|
|
}
|
|
|
|
|
|
static void fix_net_write_timeout(THD *thd, enum_var_type type)
|
|
{
|
|
if (type != OPT_GLOBAL)
|
|
thd->net.write_timeout=thd->variables.net_write_timeout;
|
|
}
|
|
|
|
static void fix_net_retry_count(THD *thd, enum_var_type type)
|
|
{
|
|
if (type != OPT_GLOBAL)
|
|
thd->net.retry_count=thd->variables.net_retry_count;
|
|
}
|
|
#else /* HAVE_REPLICATION */
|
|
static void fix_net_read_timeout(THD *thd __attribute__((unused)),
|
|
enum_var_type type __attribute__((unused)))
|
|
{}
|
|
static void fix_net_write_timeout(THD *thd __attribute__((unused)),
|
|
enum_var_type type __attribute__((unused)))
|
|
{}
|
|
static void fix_net_retry_count(THD *thd __attribute__((unused)),
|
|
enum_var_type type __attribute__((unused)))
|
|
{}
|
|
#endif /* HAVE_REPLICATION */
|
|
|
|
|
|
static void fix_query_cache_size(THD *thd, enum_var_type type)
|
|
{
|
|
#ifdef HAVE_QUERY_CACHE
|
|
ulong requested= query_cache_size;
|
|
query_cache.resize(query_cache_size);
|
|
if (requested != query_cache_size)
|
|
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
|
ER_WARN_QC_RESIZE, ER(ER_WARN_QC_RESIZE),
|
|
requested, query_cache_size);
|
|
#endif
|
|
}
|
|
|
|
|
|
#ifdef HAVE_QUERY_CACHE
|
|
static void fix_query_cache_min_res_unit(THD *thd, enum_var_type type)
|
|
{
|
|
query_cache_min_res_unit=
|
|
query_cache.set_min_res_unit(query_cache_min_res_unit);
|
|
}
|
|
#endif
|
|
|
|
|
|
extern void fix_delay_key_write(THD *thd, enum_var_type type)
|
|
{
|
|
switch ((enum_delay_key_write) delay_key_write_options) {
|
|
case DELAY_KEY_WRITE_NONE:
|
|
myisam_delay_key_write=0;
|
|
break;
|
|
case DELAY_KEY_WRITE_ON:
|
|
myisam_delay_key_write=1;
|
|
break;
|
|
case DELAY_KEY_WRITE_ALL:
|
|
myisam_delay_key_write=1;
|
|
ha_open_options|= HA_OPEN_DELAY_KEY_WRITE;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
bool sys_var_thd_binlog_format::is_readonly() const
|
|
{
|
|
/*
|
|
Under certain circumstances, the variable is read-only (unchangeable):
|
|
*/
|
|
THD *thd= current_thd;
|
|
/*
|
|
If RBR and open temporary tables, their CREATE TABLE may not be in the
|
|
binlog, so we can't toggle to SBR in this connection.
|
|
The test below will also prevent SET GLOBAL, well it was not easy to test
|
|
if global or not here.
|
|
And this test will also prevent switching from RBR to RBR (a no-op which
|
|
should not happen too often).
|
|
|
|
If we don't have row-based replication compiled in, the variable
|
|
is always read-only.
|
|
*/
|
|
#ifndef HAVE_ROW_BASED_REPLICATION
|
|
my_error(ER_RBR_NOT_AVAILABLE, MYF(0));
|
|
return 1;
|
|
#else
|
|
if ((thd->variables.binlog_format == BINLOG_FORMAT_ROW) &&
|
|
thd->temporary_tables)
|
|
{
|
|
my_error(ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR, MYF(0));
|
|
return 1;
|
|
}
|
|
/*
|
|
if in a stored function/trigger, it's too late to change mode
|
|
*/
|
|
if (thd->in_sub_stmt)
|
|
{
|
|
my_error(ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT, MYF(0));
|
|
return 1;
|
|
}
|
|
#ifdef HAVE_NDB_BINLOG
|
|
/*
|
|
Cluster does not support changing the binlog format on the fly yet.
|
|
*/
|
|
if (opt_bin_log && (have_ndbcluster == SHOW_OPTION_YES))
|
|
{
|
|
my_error(ER_NDB_CANT_SWITCH_BINLOG_FORMAT, MYF(0));
|
|
return 1;
|
|
}
|
|
#endif /* HAVE_NDB_BINLOG */
|
|
#endif /* HAVE_ROW_BASED_REPLICATION */
|
|
return sys_var_thd_enum::is_readonly();
|
|
}
|
|
|
|
|
|
void fix_binlog_format_after_update(THD *thd, enum_var_type type)
|
|
{
|
|
#ifdef HAVE_ROW_BASED_REPLICATION
|
|
thd->reset_current_stmt_binlog_row_based();
|
|
#endif /*HAVE_ROW_BASED_REPLICATION*/
|
|
}
|
|
|
|
|
|
static void fix_max_binlog_size(THD *thd, enum_var_type type)
|
|
{
|
|
DBUG_ENTER("fix_max_binlog_size");
|
|
DBUG_PRINT("info",("max_binlog_size=%lu max_relay_log_size=%lu",
|
|
max_binlog_size, max_relay_log_size));
|
|
mysql_bin_log.set_max_size(max_binlog_size);
|
|
#ifdef HAVE_REPLICATION
|
|
if (!max_relay_log_size)
|
|
active_mi->rli.relay_log.set_max_size(max_binlog_size);
|
|
#endif
|
|
DBUG_VOID_RETURN;
|
|
}
|
|
|
|
static void fix_max_relay_log_size(THD *thd, enum_var_type type)
|
|
{
|
|
DBUG_ENTER("fix_max_relay_log_size");
|
|
DBUG_PRINT("info",("max_binlog_size=%lu max_relay_log_size=%lu",
|
|
max_binlog_size, max_relay_log_size));
|
|
#ifdef HAVE_REPLICATION
|
|
active_mi->rli.relay_log.set_max_size(max_relay_log_size ?
|
|
max_relay_log_size: max_binlog_size);
|
|
#endif
|
|
DBUG_VOID_RETURN;
|
|
}
|
|
|
|
|
|
static int check_max_delayed_threads(THD *thd, set_var *var)
|
|
{
|
|
longlong val= var->value->val_int();
|
|
if (var->type != OPT_GLOBAL && val != 0 &&
|
|
val != (longlong) global_system_variables.max_insert_delayed_threads)
|
|
{
|
|
char buf[64];
|
|
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), var->var->name, llstr(val, buf));
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static void fix_max_connections(THD *thd, enum_var_type type)
|
|
{
|
|
#ifndef EMBEDDED_LIBRARY
|
|
resize_thr_alarm(max_connections +
|
|
global_system_variables.max_insert_delayed_threads + 10);
|
|
#endif
|
|
}
|
|
|
|
|
|
static void fix_thd_mem_root(THD *thd, enum_var_type type)
|
|
{
|
|
if (type != OPT_GLOBAL)
|
|
reset_root_defaults(thd->mem_root,
|
|
thd->variables.query_alloc_block_size,
|
|
thd->variables.query_prealloc_size);
|
|
}
|
|
|
|
|
|
static void fix_trans_mem_root(THD *thd, enum_var_type type)
|
|
{
|
|
#ifdef USING_TRANSACTIONS
|
|
if (type != OPT_GLOBAL)
|
|
reset_root_defaults(&thd->transaction.mem_root,
|
|
thd->variables.trans_alloc_block_size,
|
|
thd->variables.trans_prealloc_size);
|
|
#endif
|
|
}
|
|
|
|
|
|
static void fix_server_id(THD *thd, enum_var_type type)
|
|
{
|
|
server_id_supplied = 1;
|
|
}
|
|
|
|
|
|
sys_var_long_ptr::
|
|
sys_var_long_ptr(const char *name_arg, ulong *value_ptr,
|
|
sys_after_update_func after_update_arg)
|
|
:sys_var_long_ptr_global(name_arg, value_ptr,
|
|
&LOCK_global_system_variables, after_update_arg)
|
|
{}
|
|
|
|
|
|
bool sys_var_long_ptr_global::check(THD *thd, set_var *var)
|
|
{
|
|
longlong v= var->value->val_int();
|
|
var->save_result.ulonglong_value= v < 0 ? 0 : v;
|
|
return 0;
|
|
}
|
|
|
|
bool sys_var_long_ptr_global::update(THD *thd, set_var *var)
|
|
{
|
|
ulonglong tmp= var->save_result.ulonglong_value;
|
|
pthread_mutex_lock(guard);
|
|
if (option_limits)
|
|
*value= (ulong) getopt_ull_limit_value(tmp, option_limits);
|
|
else
|
|
*value= (ulong) tmp;
|
|
pthread_mutex_unlock(guard);
|
|
return 0;
|
|
}
|
|
|
|
|
|
void sys_var_long_ptr_global::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
pthread_mutex_lock(guard);
|
|
*value= (ulong) option_limits->def_value;
|
|
pthread_mutex_unlock(guard);
|
|
}
|
|
|
|
|
|
bool sys_var_ulonglong_ptr::update(THD *thd, set_var *var)
|
|
{
|
|
ulonglong tmp= var->save_result.ulonglong_value;
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
if (option_limits)
|
|
*value= (ulonglong) getopt_ull_limit_value(tmp, option_limits);
|
|
else
|
|
*value= (ulonglong) tmp;
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
return 0;
|
|
}
|
|
|
|
|
|
void sys_var_ulonglong_ptr::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
*value= (ulonglong) option_limits->def_value;
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
}
|
|
|
|
|
|
bool sys_var_bool_ptr::update(THD *thd, set_var *var)
|
|
{
|
|
*value= (my_bool) var->save_result.ulong_value;
|
|
return 0;
|
|
}
|
|
|
|
|
|
void sys_var_bool_ptr::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
*value= (my_bool) option_limits->def_value;
|
|
}
|
|
|
|
|
|
bool sys_var_enum::update(THD *thd, set_var *var)
|
|
{
|
|
*value= (uint) var->save_result.ulong_value;
|
|
return 0;
|
|
}
|
|
|
|
|
|
byte *sys_var_enum::value_ptr(THD *thd, enum_var_type type, LEX_STRING *base)
|
|
{
|
|
return (byte*) enum_names->type_names[*value];
|
|
}
|
|
|
|
bool sys_var_thd_ulong::check(THD *thd, set_var *var)
|
|
{
|
|
return (sys_var_thd::check(thd, var) ||
|
|
(check_func && (*check_func)(thd, var)));
|
|
}
|
|
|
|
bool sys_var_thd_ulong::update(THD *thd, set_var *var)
|
|
{
|
|
ulonglong tmp= var->save_result.ulonglong_value;
|
|
|
|
/* Don't use bigger value than given with --maximum-variable-name=.. */
|
|
if ((ulong) tmp > max_system_variables.*offset)
|
|
tmp= max_system_variables.*offset;
|
|
|
|
#if SIZEOF_LONG == 4
|
|
/* Avoid overflows on 32 bit systems */
|
|
if (tmp > (ulonglong) ~(ulong) 0)
|
|
tmp= ((ulonglong) ~(ulong) 0);
|
|
#endif
|
|
|
|
if (option_limits)
|
|
tmp= (ulong) getopt_ull_limit_value(tmp, option_limits);
|
|
if (var->type == OPT_GLOBAL)
|
|
global_system_variables.*offset= (ulong) tmp;
|
|
else
|
|
thd->variables.*offset= (ulong) tmp;
|
|
return 0;
|
|
}
|
|
|
|
|
|
void sys_var_thd_ulong::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
{
|
|
/* We will not come here if option_limits is not set */
|
|
global_system_variables.*offset= (ulong) option_limits->def_value;
|
|
}
|
|
else
|
|
thd->variables.*offset= global_system_variables.*offset;
|
|
}
|
|
|
|
|
|
byte *sys_var_thd_ulong::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
return (byte*) &(global_system_variables.*offset);
|
|
return (byte*) &(thd->variables.*offset);
|
|
}
|
|
|
|
|
|
bool sys_var_thd_ha_rows::update(THD *thd, set_var *var)
|
|
{
|
|
ulonglong tmp= var->save_result.ulonglong_value;
|
|
|
|
/* Don't use bigger value than given with --maximum-variable-name=.. */
|
|
if ((ha_rows) tmp > max_system_variables.*offset)
|
|
tmp= max_system_variables.*offset;
|
|
|
|
if (option_limits)
|
|
tmp= (ha_rows) getopt_ull_limit_value(tmp, option_limits);
|
|
if (var->type == OPT_GLOBAL)
|
|
{
|
|
/* Lock is needed to make things safe on 32 bit systems */
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
global_system_variables.*offset= (ha_rows) tmp;
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
}
|
|
else
|
|
thd->variables.*offset= (ha_rows) tmp;
|
|
return 0;
|
|
}
|
|
|
|
|
|
void sys_var_thd_ha_rows::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
{
|
|
/* We will not come here if option_limits is not set */
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
global_system_variables.*offset= (ha_rows) option_limits->def_value;
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
}
|
|
else
|
|
thd->variables.*offset= global_system_variables.*offset;
|
|
}
|
|
|
|
|
|
byte *sys_var_thd_ha_rows::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
return (byte*) &(global_system_variables.*offset);
|
|
return (byte*) &(thd->variables.*offset);
|
|
}
|
|
|
|
bool sys_var_thd_ulonglong::update(THD *thd, set_var *var)
|
|
{
|
|
ulonglong tmp= var->save_result.ulonglong_value;
|
|
|
|
if (tmp > max_system_variables.*offset)
|
|
tmp= max_system_variables.*offset;
|
|
|
|
if (option_limits)
|
|
tmp= getopt_ull_limit_value(tmp, option_limits);
|
|
if (var->type == OPT_GLOBAL)
|
|
{
|
|
/* Lock is needed to make things safe on 32 bit systems */
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
global_system_variables.*offset= (ulonglong) tmp;
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
}
|
|
else
|
|
thd->variables.*offset= (ulonglong) tmp;
|
|
return 0;
|
|
}
|
|
|
|
|
|
void sys_var_thd_ulonglong::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
{
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
global_system_variables.*offset= (ulonglong) option_limits->def_value;
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
}
|
|
else
|
|
thd->variables.*offset= global_system_variables.*offset;
|
|
}
|
|
|
|
|
|
byte *sys_var_thd_ulonglong::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
return (byte*) &(global_system_variables.*offset);
|
|
return (byte*) &(thd->variables.*offset);
|
|
}
|
|
|
|
|
|
bool sys_var_thd_bool::update(THD *thd, set_var *var)
|
|
{
|
|
if (var->type == OPT_GLOBAL)
|
|
global_system_variables.*offset= (my_bool) var->save_result.ulong_value;
|
|
else
|
|
thd->variables.*offset= (my_bool) var->save_result.ulong_value;
|
|
return 0;
|
|
}
|
|
|
|
|
|
void sys_var_thd_bool::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
global_system_variables.*offset= (my_bool) option_limits->def_value;
|
|
else
|
|
thd->variables.*offset= global_system_variables.*offset;
|
|
}
|
|
|
|
|
|
byte *sys_var_thd_bool::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
return (byte*) &(global_system_variables.*offset);
|
|
return (byte*) &(thd->variables.*offset);
|
|
}
|
|
|
|
|
|
bool sys_var::check_enum(THD *thd, set_var *var, TYPELIB *enum_names)
|
|
{
|
|
char buff[STRING_BUFFER_USUAL_SIZE];
|
|
const char *value;
|
|
String str(buff, sizeof(buff), system_charset_info), *res;
|
|
|
|
if (var->value->result_type() == STRING_RESULT)
|
|
{
|
|
if (!(res=var->value->val_str(&str)) ||
|
|
((long) (var->save_result.ulong_value=
|
|
(ulong) find_type(enum_names, res->ptr(),
|
|
res->length(),1)-1)) < 0)
|
|
{
|
|
value= res ? res->c_ptr() : "NULL";
|
|
goto err;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ulonglong tmp=var->value->val_int();
|
|
if (tmp >= enum_names->count)
|
|
{
|
|
llstr(tmp,buff);
|
|
value=buff; // Wrong value is here
|
|
goto err;
|
|
}
|
|
var->save_result.ulong_value= (ulong) tmp; // Save for update
|
|
}
|
|
return 0;
|
|
|
|
err:
|
|
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), name, value);
|
|
return 1;
|
|
}
|
|
|
|
|
|
bool sys_var::check_set(THD *thd, set_var *var, TYPELIB *enum_names)
|
|
{
|
|
bool not_used;
|
|
char buff[STRING_BUFFER_USUAL_SIZE], *error= 0;
|
|
uint error_len= 0;
|
|
String str(buff, sizeof(buff), system_charset_info), *res;
|
|
|
|
if (var->value->result_type() == STRING_RESULT)
|
|
{
|
|
if (!(res= var->value->val_str(&str)))
|
|
{
|
|
strmov(buff, "NULL");
|
|
goto err;
|
|
}
|
|
var->save_result.ulong_value= ((ulong)
|
|
find_set(enum_names, res->c_ptr(),
|
|
res->length(),
|
|
NULL,
|
|
&error, &error_len,
|
|
¬_used));
|
|
if (error_len)
|
|
{
|
|
strmake(buff, error, min(sizeof(buff), error_len));
|
|
goto err;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ulonglong tmp= var->value->val_int();
|
|
/*
|
|
For when the enum is made to contain 64 elements, as 1ULL<<64 is
|
|
undefined, we guard with a "count<64" test.
|
|
*/
|
|
if (unlikely((tmp >= ((ULL(1)) << enum_names->count)) &&
|
|
(enum_names->count < 64)))
|
|
{
|
|
llstr(tmp, buff);
|
|
goto err;
|
|
}
|
|
var->save_result.ulong_value= (ulong) tmp; // Save for update
|
|
}
|
|
return 0;
|
|
|
|
err:
|
|
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), name, buff);
|
|
return 1;
|
|
}
|
|
|
|
|
|
/*
|
|
Return an Item for a variable. Used with @@[global.]variable_name
|
|
If type is not given, return local value if exists, else global
|
|
*/
|
|
|
|
Item *sys_var::item(THD *thd, enum_var_type var_type, LEX_STRING *base)
|
|
{
|
|
if (check_type(var_type))
|
|
{
|
|
if (var_type != OPT_DEFAULT)
|
|
{
|
|
my_error(ER_INCORRECT_GLOBAL_LOCAL_VAR, MYF(0),
|
|
name, var_type == OPT_GLOBAL ? "SESSION" : "GLOBAL");
|
|
return 0;
|
|
}
|
|
/* As there was no local variable, return the global value */
|
|
var_type= OPT_GLOBAL;
|
|
}
|
|
switch (type()) {
|
|
case SHOW_INT:
|
|
{
|
|
uint value;
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
value= *(uint*) value_ptr(thd, var_type, base);
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
return new Item_uint((ulonglong) value);
|
|
}
|
|
case SHOW_LONG:
|
|
{
|
|
ulong value;
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
value= *(ulong*) value_ptr(thd, var_type, base);
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
return new Item_uint((ulonglong) value);
|
|
}
|
|
case SHOW_LONGLONG:
|
|
{
|
|
longlong value;
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
value= *(longlong*) value_ptr(thd, var_type, base);
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
return new Item_int(value);
|
|
}
|
|
case SHOW_HA_ROWS:
|
|
{
|
|
ha_rows value;
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
value= *(ha_rows*) value_ptr(thd, var_type, base);
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
return new Item_int((longlong) value);
|
|
}
|
|
case SHOW_MY_BOOL:
|
|
return new Item_int((int32) *(my_bool*) value_ptr(thd, var_type, base),1);
|
|
case SHOW_CHAR:
|
|
{
|
|
Item *tmp;
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
char *str= (char*) value_ptr(thd, var_type, base);
|
|
if (str)
|
|
tmp= new Item_string(str, strlen(str),
|
|
system_charset_info, DERIVATION_SYSCONST);
|
|
else
|
|
{
|
|
tmp= new Item_null();
|
|
tmp->collation.set(system_charset_info, DERIVATION_SYSCONST);
|
|
}
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
return tmp;
|
|
}
|
|
default:
|
|
my_error(ER_VAR_CANT_BE_READ, MYF(0), name);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
bool sys_var_thd_enum::update(THD *thd, set_var *var)
|
|
{
|
|
if (var->type == OPT_GLOBAL)
|
|
global_system_variables.*offset= var->save_result.ulong_value;
|
|
else
|
|
thd->variables.*offset= var->save_result.ulong_value;
|
|
return 0;
|
|
}
|
|
|
|
|
|
void sys_var_thd_enum::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
global_system_variables.*offset= (ulong) option_limits->def_value;
|
|
else
|
|
thd->variables.*offset= global_system_variables.*offset;
|
|
}
|
|
|
|
|
|
byte *sys_var_thd_enum::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
ulong tmp= ((type == OPT_GLOBAL) ?
|
|
global_system_variables.*offset :
|
|
thd->variables.*offset);
|
|
return (byte*) enum_names->type_names[tmp];
|
|
}
|
|
|
|
bool sys_var_thd_bit::check(THD *thd, set_var *var)
|
|
{
|
|
return (check_enum(thd, var, &bool_typelib) ||
|
|
(check_func && (*check_func)(thd, var)));
|
|
}
|
|
|
|
bool sys_var_thd_bit::update(THD *thd, set_var *var)
|
|
{
|
|
int res= (*update_func)(thd, var);
|
|
return res;
|
|
}
|
|
|
|
|
|
byte *sys_var_thd_bit::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
/*
|
|
If reverse is 0 (default) return 1 if bit is set.
|
|
If reverse is 1, return 0 if bit is set
|
|
*/
|
|
thd->sys_var_tmp.my_bool_value= ((thd->options & bit_flag) ?
|
|
!reverse : reverse);
|
|
return (byte*) &thd->sys_var_tmp.my_bool_value;
|
|
}
|
|
|
|
|
|
/* Update a date_time format variable based on given value */
|
|
|
|
void sys_var_thd_date_time_format::update2(THD *thd, enum_var_type type,
|
|
DATE_TIME_FORMAT *new_value)
|
|
{
|
|
DATE_TIME_FORMAT *old;
|
|
DBUG_ENTER("sys_var_date_time_format::update2");
|
|
DBUG_DUMP("positions",(char*) new_value->positions,
|
|
sizeof(new_value->positions));
|
|
|
|
if (type == OPT_GLOBAL)
|
|
{
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
old= (global_system_variables.*offset);
|
|
(global_system_variables.*offset)= new_value;
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
}
|
|
else
|
|
{
|
|
old= (thd->variables.*offset);
|
|
(thd->variables.*offset)= new_value;
|
|
}
|
|
my_free((char*) old, MYF(MY_ALLOW_ZERO_PTR));
|
|
DBUG_VOID_RETURN;
|
|
}
|
|
|
|
|
|
bool sys_var_thd_date_time_format::update(THD *thd, set_var *var)
|
|
{
|
|
DATE_TIME_FORMAT *new_value;
|
|
/* We must make a copy of the last value to get it into normal memory */
|
|
new_value= date_time_format_copy((THD*) 0,
|
|
var->save_result.date_time_format);
|
|
if (!new_value)
|
|
return 1; // Out of memory
|
|
update2(thd, var->type, new_value); // Can't fail
|
|
return 0;
|
|
}
|
|
|
|
|
|
bool sys_var_thd_date_time_format::check(THD *thd, set_var *var)
|
|
{
|
|
char buff[STRING_BUFFER_USUAL_SIZE];
|
|
String str(buff,sizeof(buff), system_charset_info), *res;
|
|
DATE_TIME_FORMAT *format;
|
|
|
|
if (!(res=var->value->val_str(&str)))
|
|
res= &my_empty_string;
|
|
|
|
if (!(format= date_time_format_make(date_time_type,
|
|
res->ptr(), res->length())))
|
|
{
|
|
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), name, res->c_ptr());
|
|
return 1;
|
|
}
|
|
|
|
/*
|
|
We must copy result to thread space to not get a memory leak if
|
|
update is aborted
|
|
*/
|
|
var->save_result.date_time_format= date_time_format_copy(thd, format);
|
|
my_free((char*) format, MYF(0));
|
|
return var->save_result.date_time_format == 0;
|
|
}
|
|
|
|
|
|
void sys_var_thd_date_time_format::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
DATE_TIME_FORMAT *res= 0;
|
|
|
|
if (type == OPT_GLOBAL)
|
|
{
|
|
const char *format;
|
|
if ((format= opt_date_time_formats[date_time_type]))
|
|
res= date_time_format_make(date_time_type, format, strlen(format));
|
|
}
|
|
else
|
|
{
|
|
/* Make copy with malloc */
|
|
res= date_time_format_copy((THD *) 0, global_system_variables.*offset);
|
|
}
|
|
|
|
if (res) // Should always be true
|
|
update2(thd, type, res);
|
|
}
|
|
|
|
|
|
byte *sys_var_thd_date_time_format::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
{
|
|
char *res;
|
|
/*
|
|
We do a copy here just to be sure things will work even if someone
|
|
is modifying the original string while the copy is accessed
|
|
(Can't happen now in SQL SHOW, but this is a good safety for the future)
|
|
*/
|
|
res= thd->strmake((global_system_variables.*offset)->format.str,
|
|
(global_system_variables.*offset)->format.length);
|
|
return (byte*) res;
|
|
}
|
|
return (byte*) (thd->variables.*offset)->format.str;
|
|
}
|
|
|
|
|
|
typedef struct old_names_map_st
|
|
{
|
|
const char *old_name;
|
|
const char *new_name;
|
|
} my_old_conv;
|
|
|
|
static my_old_conv old_conv[]=
|
|
{
|
|
{ "cp1251_koi8" , "cp1251" },
|
|
{ "cp1250_latin2" , "cp1250" },
|
|
{ "kam_latin2" , "keybcs2" },
|
|
{ "mac_latin2" , "MacRoman" },
|
|
{ "macce_latin2" , "MacCE" },
|
|
{ "pc2_latin2" , "pclatin2" },
|
|
{ "vga_latin2" , "pclatin1" },
|
|
{ "koi8_cp1251" , "koi8r" },
|
|
{ "win1251ukr_koi8_ukr" , "win1251ukr" },
|
|
{ "koi8_ukr_win1251ukr" , "koi8u" },
|
|
{ NULL , NULL }
|
|
};
|
|
|
|
CHARSET_INFO *get_old_charset_by_name(const char *name)
|
|
{
|
|
my_old_conv *conv;
|
|
|
|
for (conv= old_conv; conv->old_name; conv++)
|
|
{
|
|
if (!my_strcasecmp(&my_charset_latin1, name, conv->old_name))
|
|
return get_charset_by_csname(conv->new_name, MY_CS_PRIMARY, MYF(0));
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
|
|
bool sys_var_collation::check(THD *thd, set_var *var)
|
|
{
|
|
CHARSET_INFO *tmp;
|
|
LINT_INIT(tmp);
|
|
|
|
if (var->value->result_type() == STRING_RESULT)
|
|
{
|
|
char buff[STRING_BUFFER_USUAL_SIZE];
|
|
String str(buff,sizeof(buff), system_charset_info), *res;
|
|
if (!(res=var->value->val_str(&str)))
|
|
{
|
|
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), name, "NULL");
|
|
return 1;
|
|
}
|
|
if (!(tmp=get_charset_by_name(res->c_ptr(),MYF(0))))
|
|
{
|
|
my_error(ER_UNKNOWN_COLLATION, MYF(0), res->c_ptr());
|
|
return 1;
|
|
}
|
|
}
|
|
else // INT_RESULT
|
|
{
|
|
if (!(tmp=get_charset((int) var->value->val_int(),MYF(0))))
|
|
{
|
|
char buf[20];
|
|
int10_to_str((int) var->value->val_int(), buf, -10);
|
|
my_error(ER_UNKNOWN_COLLATION, MYF(0), buf);
|
|
return 1;
|
|
}
|
|
}
|
|
var->save_result.charset= tmp; // Save for update
|
|
return 0;
|
|
}
|
|
|
|
|
|
bool sys_var_character_set::check(THD *thd, set_var *var)
|
|
{
|
|
CHARSET_INFO *tmp;
|
|
LINT_INIT(tmp);
|
|
|
|
if (var->value->result_type() == STRING_RESULT)
|
|
{
|
|
char buff[STRING_BUFFER_USUAL_SIZE];
|
|
String str(buff,sizeof(buff), system_charset_info), *res;
|
|
if (!(res=var->value->val_str(&str)))
|
|
{
|
|
if (!nullable)
|
|
{
|
|
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), name, "NULL");
|
|
return 1;
|
|
}
|
|
tmp= NULL;
|
|
}
|
|
else if (!(tmp=get_charset_by_csname(res->c_ptr(),MY_CS_PRIMARY,MYF(0))) &&
|
|
!(tmp=get_old_charset_by_name(res->c_ptr())))
|
|
{
|
|
my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), res->c_ptr());
|
|
return 1;
|
|
}
|
|
}
|
|
else // INT_RESULT
|
|
{
|
|
if (!(tmp=get_charset((int) var->value->val_int(),MYF(0))))
|
|
{
|
|
char buf[20];
|
|
int10_to_str((int) var->value->val_int(), buf, -10);
|
|
my_error(ER_UNKNOWN_CHARACTER_SET, MYF(0), buf);
|
|
return 1;
|
|
}
|
|
}
|
|
var->save_result.charset= tmp; // Save for update
|
|
return 0;
|
|
}
|
|
|
|
|
|
bool sys_var_character_set::update(THD *thd, set_var *var)
|
|
{
|
|
ci_ptr(thd,var->type)[0]= var->save_result.charset;
|
|
thd->update_charset();
|
|
return 0;
|
|
}
|
|
|
|
|
|
byte *sys_var_character_set::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
CHARSET_INFO *cs= ci_ptr(thd,type)[0];
|
|
return cs ? (byte*) cs->csname : (byte*) NULL;
|
|
}
|
|
|
|
|
|
CHARSET_INFO ** sys_var_character_set_connection::ci_ptr(THD *thd,
|
|
enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
return &global_system_variables.collation_connection;
|
|
else
|
|
return &thd->variables.collation_connection;
|
|
}
|
|
|
|
|
|
void sys_var_character_set_connection::set_default(THD *thd,
|
|
enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
global_system_variables.collation_connection= default_charset_info;
|
|
else
|
|
{
|
|
thd->variables.collation_connection= global_system_variables.collation_connection;
|
|
thd->update_charset();
|
|
}
|
|
}
|
|
|
|
|
|
CHARSET_INFO ** sys_var_character_set_client::ci_ptr(THD *thd,
|
|
enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
return &global_system_variables.character_set_client;
|
|
else
|
|
return &thd->variables.character_set_client;
|
|
}
|
|
|
|
|
|
void sys_var_character_set_client::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
global_system_variables.character_set_client= default_charset_info;
|
|
else
|
|
{
|
|
thd->variables.character_set_client= (global_system_variables.
|
|
character_set_client);
|
|
thd->update_charset();
|
|
}
|
|
}
|
|
|
|
|
|
CHARSET_INFO **
|
|
sys_var_character_set_filesystem::ci_ptr(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
return &global_system_variables.character_set_filesystem;
|
|
else
|
|
return &thd->variables.character_set_filesystem;
|
|
}
|
|
|
|
|
|
extern CHARSET_INFO *character_set_filesystem;
|
|
|
|
void
|
|
sys_var_character_set_filesystem::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
global_system_variables.character_set_filesystem= character_set_filesystem;
|
|
else
|
|
{
|
|
thd->variables.character_set_filesystem= (global_system_variables.
|
|
character_set_filesystem);
|
|
thd->update_charset();
|
|
}
|
|
}
|
|
|
|
|
|
CHARSET_INFO **
|
|
sys_var_character_set_results::ci_ptr(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
return &global_system_variables.character_set_results;
|
|
else
|
|
return &thd->variables.character_set_results;
|
|
}
|
|
|
|
|
|
void sys_var_character_set_results::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
global_system_variables.character_set_results= default_charset_info;
|
|
else
|
|
{
|
|
thd->variables.character_set_results= (global_system_variables.
|
|
character_set_results);
|
|
thd->update_charset();
|
|
}
|
|
}
|
|
|
|
|
|
CHARSET_INFO **
|
|
sys_var_character_set_server::ci_ptr(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
return &global_system_variables.collation_server;
|
|
else
|
|
return &thd->variables.collation_server;
|
|
}
|
|
|
|
|
|
void sys_var_character_set_server::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
global_system_variables.collation_server= default_charset_info;
|
|
else
|
|
{
|
|
thd->variables.collation_server= global_system_variables.collation_server;
|
|
thd->update_charset();
|
|
}
|
|
}
|
|
|
|
CHARSET_INFO ** sys_var_character_set_database::ci_ptr(THD *thd,
|
|
enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
return &global_system_variables.collation_database;
|
|
else
|
|
return &thd->variables.collation_database;
|
|
}
|
|
|
|
|
|
void sys_var_character_set_database::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
global_system_variables.collation_database= default_charset_info;
|
|
else
|
|
{
|
|
thd->variables.collation_database= thd->db_charset;
|
|
thd->update_charset();
|
|
}
|
|
}
|
|
|
|
|
|
bool sys_var_collation_connection::update(THD *thd, set_var *var)
|
|
{
|
|
if (var->type == OPT_GLOBAL)
|
|
global_system_variables.collation_connection= var->save_result.charset;
|
|
else
|
|
{
|
|
thd->variables.collation_connection= var->save_result.charset;
|
|
thd->update_charset();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
byte *sys_var_collation_connection::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
CHARSET_INFO *cs= ((type == OPT_GLOBAL) ?
|
|
global_system_variables.collation_connection :
|
|
thd->variables.collation_connection);
|
|
return cs ? (byte*) cs->name : (byte*) "NULL";
|
|
}
|
|
|
|
|
|
void sys_var_collation_connection::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
global_system_variables.collation_connection= default_charset_info;
|
|
else
|
|
{
|
|
thd->variables.collation_connection= (global_system_variables.
|
|
collation_connection);
|
|
thd->update_charset();
|
|
}
|
|
}
|
|
|
|
bool sys_var_collation_database::update(THD *thd, set_var *var)
|
|
{
|
|
if (var->type == OPT_GLOBAL)
|
|
global_system_variables.collation_database= var->save_result.charset;
|
|
else
|
|
{
|
|
thd->variables.collation_database= var->save_result.charset;
|
|
thd->update_charset();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
byte *sys_var_collation_database::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
CHARSET_INFO *cs= ((type == OPT_GLOBAL) ?
|
|
global_system_variables.collation_database :
|
|
thd->variables.collation_database);
|
|
return cs ? (byte*) cs->name : (byte*) "NULL";
|
|
}
|
|
|
|
|
|
void sys_var_collation_database::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
global_system_variables.collation_database= default_charset_info;
|
|
else
|
|
{
|
|
thd->variables.collation_database= (global_system_variables.
|
|
collation_database);
|
|
thd->update_charset();
|
|
}
|
|
}
|
|
|
|
|
|
bool sys_var_collation_server::update(THD *thd, set_var *var)
|
|
{
|
|
if (var->type == OPT_GLOBAL)
|
|
global_system_variables.collation_server= var->save_result.charset;
|
|
else
|
|
{
|
|
thd->variables.collation_server= var->save_result.charset;
|
|
thd->update_charset();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
byte *sys_var_collation_server::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
CHARSET_INFO *cs= ((type == OPT_GLOBAL) ?
|
|
global_system_variables.collation_server :
|
|
thd->variables.collation_server);
|
|
return cs ? (byte*) cs->name : (byte*) "NULL";
|
|
}
|
|
|
|
|
|
void sys_var_collation_server::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
global_system_variables.collation_server= default_charset_info;
|
|
else
|
|
{
|
|
thd->variables.collation_server= (global_system_variables.
|
|
collation_server);
|
|
thd->update_charset();
|
|
}
|
|
}
|
|
|
|
|
|
LEX_STRING default_key_cache_base= {(char *) "default", 7 };
|
|
|
|
static KEY_CACHE zero_key_cache;
|
|
|
|
KEY_CACHE *get_key_cache(LEX_STRING *cache_name)
|
|
{
|
|
safe_mutex_assert_owner(&LOCK_global_system_variables);
|
|
if (!cache_name || ! cache_name->length)
|
|
cache_name= &default_key_cache_base;
|
|
return ((KEY_CACHE*) find_named(&key_caches,
|
|
cache_name->str, cache_name->length, 0));
|
|
}
|
|
|
|
|
|
byte *sys_var_key_cache_param::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
KEY_CACHE *key_cache= get_key_cache(base);
|
|
if (!key_cache)
|
|
key_cache= &zero_key_cache;
|
|
return (byte*) key_cache + offset ;
|
|
}
|
|
|
|
|
|
bool sys_var_key_buffer_size::update(THD *thd, set_var *var)
|
|
{
|
|
ulonglong tmp= var->save_result.ulonglong_value;
|
|
LEX_STRING *base_name= &var->base;
|
|
KEY_CACHE *key_cache;
|
|
bool error= 0;
|
|
|
|
/* If no basename, assume it's for the key cache named 'default' */
|
|
if (!base_name->length)
|
|
base_name= &default_key_cache_base;
|
|
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
key_cache= get_key_cache(base_name);
|
|
|
|
if (!key_cache)
|
|
{
|
|
/* Key cache didn't exists */
|
|
if (!tmp) // Tried to delete cache
|
|
goto end; // Ok, nothing to do
|
|
if (!(key_cache= create_key_cache(base_name->str, base_name->length)))
|
|
{
|
|
error= 1;
|
|
goto end;
|
|
}
|
|
}
|
|
|
|
/*
|
|
Abort if some other thread is changing the key cache
|
|
TODO: This should be changed so that we wait until the previous
|
|
assignment is done and then do the new assign
|
|
*/
|
|
if (key_cache->in_init)
|
|
goto end;
|
|
|
|
if (!tmp) // Zero size means delete
|
|
{
|
|
if (key_cache == dflt_key_cache)
|
|
{
|
|
push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
|
ER_WARN_CANT_DROP_DEFAULT_KEYCACHE,
|
|
ER(ER_WARN_CANT_DROP_DEFAULT_KEYCACHE));
|
|
goto end; // Ignore default key cache
|
|
}
|
|
|
|
if (key_cache->key_cache_inited) // If initied
|
|
{
|
|
/*
|
|
Move tables using this key cache to the default key cache
|
|
and clear the old key cache.
|
|
*/
|
|
NAMED_LIST *list;
|
|
key_cache= (KEY_CACHE *) find_named(&key_caches, base_name->str,
|
|
base_name->length, &list);
|
|
key_cache->in_init= 1;
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
error= reassign_keycache_tables(thd, key_cache, dflt_key_cache);
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
key_cache->in_init= 0;
|
|
}
|
|
/*
|
|
We don't delete the key cache as some running threads my still be
|
|
in the key cache code with a pointer to the deleted (empty) key cache
|
|
*/
|
|
goto end;
|
|
}
|
|
|
|
key_cache->param_buff_size=
|
|
(ulonglong) getopt_ull_limit_value(tmp, option_limits);
|
|
|
|
/* If key cache didn't existed initialize it, else resize it */
|
|
key_cache->in_init= 1;
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
|
|
if (!key_cache->key_cache_inited)
|
|
error= (bool) (ha_init_key_cache("", key_cache));
|
|
else
|
|
error= (bool)(ha_resize_key_cache(key_cache));
|
|
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
key_cache->in_init= 0;
|
|
|
|
end:
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
return error;
|
|
}
|
|
|
|
|
|
bool sys_var_key_cache_long::update(THD *thd, set_var *var)
|
|
{
|
|
ulong tmp= (ulong) var->value->val_int();
|
|
LEX_STRING *base_name= &var->base;
|
|
bool error= 0;
|
|
|
|
if (!base_name->length)
|
|
base_name= &default_key_cache_base;
|
|
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
KEY_CACHE *key_cache= get_key_cache(base_name);
|
|
|
|
if (!key_cache && !(key_cache= create_key_cache(base_name->str,
|
|
base_name->length)))
|
|
{
|
|
error= 1;
|
|
goto end;
|
|
}
|
|
|
|
/*
|
|
Abort if some other thread is changing the key cache
|
|
TODO: This should be changed so that we wait until the previous
|
|
assignment is done and then do the new assign
|
|
*/
|
|
if (key_cache->in_init)
|
|
goto end;
|
|
|
|
*((ulong*) (((char*) key_cache) + offset))=
|
|
(ulong) getopt_ull_limit_value(tmp, option_limits);
|
|
|
|
/*
|
|
Don't create a new key cache if it didn't exist
|
|
(key_caches are created only when the user sets block_size)
|
|
*/
|
|
key_cache->in_init= 1;
|
|
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
|
|
error= (bool) (ha_resize_key_cache(key_cache));
|
|
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
key_cache->in_init= 0;
|
|
|
|
end:
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
return error;
|
|
}
|
|
|
|
|
|
bool sys_var_log_state::update(THD *thd, set_var *var)
|
|
{
|
|
bool res= 0;
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
if (!var->save_result.ulong_value)
|
|
logger.deactivate_log_handler(thd, log_type);
|
|
else
|
|
{
|
|
if ((res= logger.activate_log_handler(thd, log_type)))
|
|
{
|
|
my_error(ER_CANT_ACTIVATE_LOG, MYF(0),
|
|
log_type == QUERY_LOG_GENERAL ? "general" :
|
|
"slow query");
|
|
goto err;
|
|
}
|
|
}
|
|
err:
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
return res;
|
|
}
|
|
|
|
void sys_var_log_state::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
logger.deactivate_log_handler(thd, log_type);
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
}
|
|
|
|
|
|
static int sys_check_log_path(THD *thd, set_var *var)
|
|
{
|
|
char path[FN_REFLEN];
|
|
MY_STAT f_stat;
|
|
const char *var_path= var->value->str_value.ptr();
|
|
bzero(&f_stat, sizeof(MY_STAT));
|
|
|
|
(void) unpack_filename(path, var_path);
|
|
if (my_stat(path, &f_stat, MYF(0)))
|
|
{
|
|
/* Check if argument is a file and we have 'write' permission */
|
|
if (!MY_S_ISREG(f_stat.st_mode) ||
|
|
!(f_stat.st_mode & MY_S_IWRITE))
|
|
return -1;
|
|
}
|
|
else
|
|
{
|
|
/*
|
|
Check if directory exists and
|
|
we have permission to create file & write to file
|
|
*/
|
|
(void) dirname_part(path, var_path);
|
|
if (my_access(path, (F_OK|W_OK)))
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
bool update_sys_var_str_path(THD *thd, sys_var_str *var_str,
|
|
set_var *var, const char *log_ext,
|
|
bool log_state, uint log_type)
|
|
{
|
|
MYSQL_QUERY_LOG *file_log;
|
|
char buff[FN_REFLEN];
|
|
char *res= 0, *old_value=(char *)(var ? var->value->str_value.ptr() : 0);
|
|
bool result= 0;
|
|
uint str_length= (var ? var->value->str_value.length() : 0);
|
|
|
|
switch (log_type) {
|
|
case QUERY_LOG_SLOW:
|
|
file_log= logger.get_slow_log_file_handler();
|
|
break;
|
|
case QUERY_LOG_GENERAL:
|
|
file_log= logger.get_log_file_handler();
|
|
break;
|
|
default:
|
|
DBUG_ASSERT(0);
|
|
}
|
|
|
|
if (!old_value)
|
|
{
|
|
old_value= make_default_log_name(buff, log_ext);
|
|
str_length= strlen(old_value);
|
|
}
|
|
if (!(res= my_strndup(old_value, str_length, MYF(MY_FAE+MY_WME))))
|
|
{
|
|
result= 1;
|
|
goto err;
|
|
}
|
|
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
logger.lock();
|
|
|
|
if (file_log && log_state)
|
|
file_log->close(0);
|
|
old_value= var_str->value;
|
|
var_str->value= res;
|
|
var_str->value_length= str_length;
|
|
my_free(old_value, MYF(MY_ALLOW_ZERO_PTR));
|
|
if (file_log && log_state)
|
|
{
|
|
switch (log_type) {
|
|
case QUERY_LOG_SLOW:
|
|
file_log->open_slow_log(sys_var_general_log_path.value);
|
|
break;
|
|
case QUERY_LOG_GENERAL:
|
|
file_log->open_query_log(sys_var_general_log_path.value);
|
|
break;
|
|
default:
|
|
DBUG_ASSERT(0);
|
|
}
|
|
}
|
|
|
|
logger.unlock();
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
|
|
err:
|
|
return result;
|
|
}
|
|
|
|
|
|
static bool sys_update_general_log_path(THD *thd, set_var * var)
|
|
{
|
|
return update_sys_var_str_path(thd, &sys_var_general_log_path,
|
|
var, ".log", opt_log, QUERY_LOG_GENERAL);
|
|
}
|
|
|
|
|
|
static void sys_default_general_log_path(THD *thd, enum_var_type type)
|
|
{
|
|
(void) update_sys_var_str_path(thd, &sys_var_general_log_path,
|
|
0, ".log", opt_log, QUERY_LOG_GENERAL);
|
|
}
|
|
|
|
|
|
static bool sys_update_slow_log_path(THD *thd, set_var * var)
|
|
{
|
|
return update_sys_var_str_path(thd, &sys_var_slow_log_path,
|
|
var, "-slow.log", opt_slow_log,
|
|
QUERY_LOG_SLOW);
|
|
}
|
|
|
|
|
|
static void sys_default_slow_log_path(THD *thd, enum_var_type type)
|
|
{
|
|
(void) update_sys_var_str_path(thd, &sys_var_slow_log_path,
|
|
0, "-slow.log", opt_slow_log,
|
|
QUERY_LOG_SLOW);
|
|
}
|
|
|
|
|
|
bool sys_var_log_output::update(THD *thd, set_var *var)
|
|
{
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
logger.lock();
|
|
logger.init_slow_log(var->save_result.ulong_value);
|
|
logger.init_general_log(var->save_result.ulong_value);
|
|
*value= var->save_result.ulong_value;
|
|
logger.unlock();
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
return 0;
|
|
}
|
|
|
|
|
|
void sys_var_log_output::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
logger.lock();
|
|
logger.init_slow_log(LOG_TABLE);
|
|
logger.init_general_log(LOG_TABLE);
|
|
*value= LOG_TABLE;
|
|
logger.unlock();
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
}
|
|
|
|
|
|
byte *sys_var_log_output::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
char buff[256];
|
|
String tmp(buff, sizeof(buff), &my_charset_latin1);
|
|
ulong length;
|
|
ulong val= *value;
|
|
|
|
tmp.length(0);
|
|
for (uint i= 0; val; val>>= 1, i++)
|
|
{
|
|
if (val & 1)
|
|
{
|
|
tmp.append(log_output_typelib.type_names[i],
|
|
log_output_typelib.type_lengths[i]);
|
|
tmp.append(',');
|
|
}
|
|
}
|
|
|
|
if ((length= tmp.length()))
|
|
length--;
|
|
return (byte*) thd->strmake(tmp.ptr(), length);
|
|
}
|
|
|
|
|
|
/*****************************************************************************
|
|
Functions to handle SET NAMES and SET CHARACTER SET
|
|
*****************************************************************************/
|
|
|
|
int set_var_collation_client::check(THD *thd)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int set_var_collation_client::update(THD *thd)
|
|
{
|
|
thd->variables.character_set_client= character_set_client;
|
|
thd->variables.character_set_results= character_set_results;
|
|
thd->variables.collation_connection= collation_connection;
|
|
thd->update_charset();
|
|
thd->protocol_simple.init(thd);
|
|
thd->protocol_prep.init(thd);
|
|
return 0;
|
|
}
|
|
|
|
/****************************************************************************/
|
|
|
|
bool sys_var_timestamp::update(THD *thd, set_var *var)
|
|
{
|
|
thd->set_time((time_t) var->save_result.ulonglong_value);
|
|
return 0;
|
|
}
|
|
|
|
|
|
void sys_var_timestamp::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
thd->user_time=0;
|
|
}
|
|
|
|
|
|
byte *sys_var_timestamp::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
thd->sys_var_tmp.long_value= (long) thd->start_time;
|
|
return (byte*) &thd->sys_var_tmp.long_value;
|
|
}
|
|
|
|
|
|
bool sys_var_last_insert_id::update(THD *thd, set_var *var)
|
|
{
|
|
thd->first_successful_insert_id_in_prev_stmt=
|
|
var->save_result.ulonglong_value;
|
|
return 0;
|
|
}
|
|
|
|
|
|
byte *sys_var_last_insert_id::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
/*
|
|
this tmp var makes it robust againt change of type of
|
|
read_first_successful_insert_id_in_prev_stmt().
|
|
*/
|
|
thd->sys_var_tmp.ulonglong_value=
|
|
thd->read_first_successful_insert_id_in_prev_stmt();
|
|
return (byte*) &thd->sys_var_tmp.ulonglong_value;
|
|
}
|
|
|
|
|
|
bool sys_var_insert_id::update(THD *thd, set_var *var)
|
|
{
|
|
thd->force_one_auto_inc_interval(var->save_result.ulonglong_value);
|
|
return 0;
|
|
}
|
|
|
|
|
|
byte *sys_var_insert_id::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
thd->sys_var_tmp.ulonglong_value=
|
|
thd->auto_inc_intervals_forced.minimum();
|
|
return (byte*) &thd->sys_var_tmp.ulonglong_value;
|
|
}
|
|
|
|
|
|
#ifdef HAVE_REPLICATION
|
|
bool sys_var_slave_skip_counter::check(THD *thd, set_var *var)
|
|
{
|
|
int result= 0;
|
|
pthread_mutex_lock(&LOCK_active_mi);
|
|
pthread_mutex_lock(&active_mi->rli.run_lock);
|
|
if (active_mi->rli.slave_running)
|
|
{
|
|
my_message(ER_SLAVE_MUST_STOP, ER(ER_SLAVE_MUST_STOP), MYF(0));
|
|
result=1;
|
|
}
|
|
pthread_mutex_unlock(&active_mi->rli.run_lock);
|
|
pthread_mutex_unlock(&LOCK_active_mi);
|
|
var->save_result.ulong_value= (ulong) var->value->val_int();
|
|
return result;
|
|
}
|
|
|
|
|
|
bool sys_var_slave_skip_counter::update(THD *thd, set_var *var)
|
|
{
|
|
pthread_mutex_lock(&LOCK_active_mi);
|
|
pthread_mutex_lock(&active_mi->rli.run_lock);
|
|
/*
|
|
The following test should normally never be true as we test this
|
|
in the check function; To be safe against multiple
|
|
SQL_SLAVE_SKIP_COUNTER request, we do the check anyway
|
|
*/
|
|
if (!active_mi->rli.slave_running)
|
|
{
|
|
pthread_mutex_lock(&active_mi->rli.data_lock);
|
|
active_mi->rli.slave_skip_counter= var->save_result.ulong_value;
|
|
pthread_mutex_unlock(&active_mi->rli.data_lock);
|
|
}
|
|
pthread_mutex_unlock(&active_mi->rli.run_lock);
|
|
pthread_mutex_unlock(&LOCK_active_mi);
|
|
return 0;
|
|
}
|
|
|
|
|
|
bool sys_var_sync_binlog_period::update(THD *thd, set_var *var)
|
|
{
|
|
sync_binlog_period= (ulong) var->save_result.ulonglong_value;
|
|
return 0;
|
|
}
|
|
#endif /* HAVE_REPLICATION */
|
|
|
|
bool sys_var_rand_seed1::update(THD *thd, set_var *var)
|
|
{
|
|
thd->rand.seed1= (ulong) var->save_result.ulonglong_value;
|
|
return 0;
|
|
}
|
|
|
|
bool sys_var_rand_seed2::update(THD *thd, set_var *var)
|
|
{
|
|
thd->rand.seed2= (ulong) var->save_result.ulonglong_value;
|
|
return 0;
|
|
}
|
|
|
|
|
|
bool sys_var_thd_time_zone::check(THD *thd, set_var *var)
|
|
{
|
|
char buff[MAX_TIME_ZONE_NAME_LENGTH];
|
|
String str(buff, sizeof(buff), &my_charset_latin1);
|
|
String *res= var->value->val_str(&str);
|
|
|
|
if (!(var->save_result.time_zone=
|
|
my_tz_find(res, thd->lex->time_zone_tables_used)))
|
|
{
|
|
my_error(ER_UNKNOWN_TIME_ZONE, MYF(0), res ? res->c_ptr() : "NULL");
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
bool sys_var_thd_time_zone::update(THD *thd, set_var *var)
|
|
{
|
|
/* We are using Time_zone object found during check() phase. */
|
|
if (var->type == OPT_GLOBAL)
|
|
{
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
global_system_variables.time_zone= var->save_result.time_zone;
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
}
|
|
else
|
|
thd->variables.time_zone= var->save_result.time_zone;
|
|
return 0;
|
|
}
|
|
|
|
|
|
byte *sys_var_thd_time_zone::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
/*
|
|
We can use ptr() instead of c_ptr() here because String contaning
|
|
time zone name is guaranteed to be zero ended.
|
|
*/
|
|
if (type == OPT_GLOBAL)
|
|
return (byte *)(global_system_variables.time_zone->get_name()->ptr());
|
|
else
|
|
{
|
|
/*
|
|
This is an ugly fix for replication: we don't replicate properly queries
|
|
invoking system variables' values to update tables; but
|
|
CONVERT_TZ(,,@@session.time_zone) is so popular that we make it
|
|
replicable (i.e. we tell the binlog code to store the session
|
|
timezone). If it's the global value which was used we can't replicate
|
|
(binlog code stores session value only).
|
|
*/
|
|
thd->time_zone_used= 1;
|
|
return (byte *)(thd->variables.time_zone->get_name()->ptr());
|
|
}
|
|
}
|
|
|
|
|
|
void sys_var_thd_time_zone::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
if (type == OPT_GLOBAL)
|
|
{
|
|
if (default_tz_name)
|
|
{
|
|
String str(default_tz_name, &my_charset_latin1);
|
|
/*
|
|
We are guaranteed to find this time zone since its existence
|
|
is checked during start-up.
|
|
*/
|
|
global_system_variables.time_zone=
|
|
my_tz_find(&str, thd->lex->time_zone_tables_used);
|
|
}
|
|
else
|
|
global_system_variables.time_zone= my_tz_SYSTEM;
|
|
}
|
|
else
|
|
thd->variables.time_zone= global_system_variables.time_zone;
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
}
|
|
|
|
|
|
bool sys_var_max_user_conn::check(THD *thd, set_var *var)
|
|
{
|
|
if (var->type == OPT_GLOBAL)
|
|
return sys_var_thd::check(thd, var);
|
|
else
|
|
{
|
|
/*
|
|
Per-session values of max_user_connections can't be set directly.
|
|
May be we should have a separate error message for this?
|
|
*/
|
|
my_error(ER_GLOBAL_VARIABLE, MYF(0), name);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
bool sys_var_max_user_conn::update(THD *thd, set_var *var)
|
|
{
|
|
DBUG_ASSERT(var->type == OPT_GLOBAL);
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
max_user_connections= (uint)var->save_result.ulonglong_value;
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
return 0;
|
|
}
|
|
|
|
|
|
void sys_var_max_user_conn::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
DBUG_ASSERT(type == OPT_GLOBAL);
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
max_user_connections= (ulong) option_limits->def_value;
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
}
|
|
|
|
|
|
byte *sys_var_max_user_conn::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
if (type != OPT_GLOBAL &&
|
|
thd->user_connect && thd->user_connect->user_resources.user_conn)
|
|
return (byte*) &(thd->user_connect->user_resources.user_conn);
|
|
return (byte*) &(max_user_connections);
|
|
}
|
|
|
|
bool sys_var_thd_lc_time_names::check(THD *thd, set_var *var)
|
|
{
|
|
char *locale_str =var->value->str_value.c_ptr();
|
|
MY_LOCALE *locale_match= my_locale_by_name(locale_str);
|
|
|
|
if (locale_match == NULL)
|
|
{
|
|
my_printf_error(ER_UNKNOWN_ERROR,
|
|
"Unknown locale: '%s'", MYF(0), locale_str);
|
|
return 1;
|
|
}
|
|
var->save_result.locale_value= locale_match;
|
|
return 0;
|
|
}
|
|
|
|
|
|
bool sys_var_thd_lc_time_names::update(THD *thd, set_var *var)
|
|
{
|
|
thd->variables.lc_time_names= var->save_result.locale_value;
|
|
return 0;
|
|
}
|
|
|
|
|
|
byte *sys_var_thd_lc_time_names::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
return (byte *)(thd->variables.lc_time_names->name);
|
|
}
|
|
|
|
|
|
void sys_var_thd_lc_time_names::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
thd->variables.lc_time_names = &my_locale_en_US;
|
|
}
|
|
|
|
/*
|
|
Functions to update thd->options bits
|
|
*/
|
|
|
|
static bool set_option_bit(THD *thd, set_var *var)
|
|
{
|
|
sys_var_thd_bit *sys_var= ((sys_var_thd_bit*) var->var);
|
|
if ((var->save_result.ulong_value != 0) == sys_var->reverse)
|
|
thd->options&= ~sys_var->bit_flag;
|
|
else
|
|
thd->options|= sys_var->bit_flag;
|
|
return 0;
|
|
}
|
|
|
|
|
|
static bool set_option_autocommit(THD *thd, set_var *var)
|
|
{
|
|
/* The test is negative as the flag we use is NOT autocommit */
|
|
|
|
ulonglong org_options= thd->options;
|
|
|
|
if (var->save_result.ulong_value != 0)
|
|
thd->options&= ~((sys_var_thd_bit*) var->var)->bit_flag;
|
|
else
|
|
thd->options|= ((sys_var_thd_bit*) var->var)->bit_flag;
|
|
|
|
if ((org_options ^ thd->options) & OPTION_NOT_AUTOCOMMIT)
|
|
{
|
|
if ((org_options & OPTION_NOT_AUTOCOMMIT))
|
|
{
|
|
/* We changed to auto_commit mode */
|
|
thd->options&= ~(ulonglong) (OPTION_BEGIN |
|
|
OPTION_STATUS_NO_TRANS_UPDATE |
|
|
OPTION_KEEP_LOG);
|
|
thd->server_status|= SERVER_STATUS_AUTOCOMMIT;
|
|
if (ha_commit(thd))
|
|
return 1;
|
|
}
|
|
else
|
|
{
|
|
thd->options&= ~(ulonglong) (OPTION_STATUS_NO_TRANS_UPDATE);
|
|
thd->server_status&= ~SERVER_STATUS_AUTOCOMMIT;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
static int check_log_update(THD *thd, set_var *var)
|
|
{
|
|
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
|
if (!(thd->security_ctx->master_access & SUPER_ACL))
|
|
{
|
|
my_error(ER_SPECIFIC_ACCESS_DENIED_ERROR, MYF(0), "SUPER");
|
|
return 1;
|
|
}
|
|
#endif
|
|
return 0;
|
|
}
|
|
|
|
static bool set_log_update(THD *thd, set_var *var)
|
|
{
|
|
/*
|
|
The update log is not supported anymore since 5.0.
|
|
See sql/mysqld.cc/, comments in function init_server_components() for an
|
|
explaination of the different warnings we send below
|
|
*/
|
|
|
|
if (opt_sql_bin_update)
|
|
{
|
|
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
|
|
ER_UPDATE_LOG_DEPRECATED_TRANSLATED,
|
|
ER(ER_UPDATE_LOG_DEPRECATED_TRANSLATED));
|
|
}
|
|
else
|
|
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
|
|
ER_UPDATE_LOG_DEPRECATED_IGNORED,
|
|
ER(ER_UPDATE_LOG_DEPRECATED_IGNORED));
|
|
set_option_bit(thd, var);
|
|
return 0;
|
|
}
|
|
|
|
|
|
static int check_pseudo_thread_id(THD *thd, set_var *var)
|
|
{
|
|
var->save_result.ulonglong_value= var->value->val_int();
|
|
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
|
if (thd->security_ctx->master_access & SUPER_ACL)
|
|
return 0;
|
|
else
|
|
{
|
|
my_error(ER_SPECIFIC_ACCESS_DENIED_ERROR, MYF(0), "SUPER");
|
|
return 1;
|
|
}
|
|
#else
|
|
return 0;
|
|
#endif
|
|
}
|
|
|
|
static byte *get_warning_count(THD *thd)
|
|
{
|
|
thd->sys_var_tmp.long_value=
|
|
(thd->warn_count[(uint) MYSQL_ERROR::WARN_LEVEL_NOTE] +
|
|
thd->warn_count[(uint) MYSQL_ERROR::WARN_LEVEL_ERROR] +
|
|
thd->warn_count[(uint) MYSQL_ERROR::WARN_LEVEL_WARN]);
|
|
return (byte*) &thd->sys_var_tmp.long_value;
|
|
}
|
|
|
|
static byte *get_error_count(THD *thd)
|
|
{
|
|
thd->sys_var_tmp.long_value=
|
|
thd->warn_count[(uint) MYSQL_ERROR::WARN_LEVEL_ERROR];
|
|
return (byte*) &thd->sys_var_tmp.long_value;
|
|
}
|
|
|
|
|
|
/*
|
|
Get the tmpdir that was specified or chosen by default
|
|
|
|
SYNOPSIS
|
|
get_tmpdir()
|
|
thd thread handle
|
|
|
|
DESCRIPTION
|
|
This is necessary because if the user does not specify a temporary
|
|
directory via the command line, one is chosen based on the environment
|
|
or system defaults. But we can't just always use mysql_tmpdir, because
|
|
that is actually a call to my_tmpdir() which cycles among possible
|
|
temporary directories.
|
|
|
|
RETURN VALUES
|
|
ptr pointer to NUL-terminated string
|
|
*/
|
|
static byte *get_tmpdir(THD *thd)
|
|
{
|
|
if (opt_mysql_tmpdir)
|
|
return (byte *)opt_mysql_tmpdir;
|
|
return (byte*)mysql_tmpdir;
|
|
}
|
|
|
|
/****************************************************************************
|
|
Main handling of variables:
|
|
- Initialisation
|
|
- Searching during parsing
|
|
- Update loop
|
|
****************************************************************************/
|
|
|
|
/*
|
|
Find variable name in option my_getopt structure used for command line args
|
|
|
|
SYNOPSIS
|
|
find_option()
|
|
opt option structure array to search in
|
|
name variable name
|
|
|
|
RETURN VALUES
|
|
0 Error
|
|
ptr pointer to option structure
|
|
*/
|
|
|
|
static struct my_option *find_option(struct my_option *opt, const char *name)
|
|
{
|
|
uint length=strlen(name);
|
|
for (; opt->name; opt++)
|
|
{
|
|
if (!getopt_compare_strings(opt->name, name, length) &&
|
|
!opt->name[length])
|
|
{
|
|
/*
|
|
Only accept the option if one can set values through it.
|
|
If not, there is no default value or limits in the option.
|
|
*/
|
|
return (opt->value) ? opt : 0;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*
|
|
Return variable name and length for hashing of variables
|
|
*/
|
|
|
|
static byte *get_sys_var_length(const sys_var *var, uint *length,
|
|
my_bool first)
|
|
{
|
|
*length= var->name_length;
|
|
return (byte*) var->name;
|
|
}
|
|
|
|
|
|
/*
|
|
Initialises sys variables and put them in system_variable_hash
|
|
*/
|
|
|
|
|
|
void set_var_init()
|
|
{
|
|
sys_var *var;
|
|
|
|
hash_init(&system_variable_hash, system_charset_info, sys_var::sys_vars, 0,
|
|
0, (hash_get_key) get_sys_var_length, 0, 0);
|
|
for (var= sys_var::first; var; var= var->next)
|
|
{
|
|
var->name_length= strlen(var->name);
|
|
var->option_limits= find_option(my_long_options, var->name);
|
|
my_hash_insert(&system_variable_hash, (byte*) var);
|
|
}
|
|
/*
|
|
Special cases
|
|
Needed because MySQL can't find the limits for a variable it it has
|
|
a different name than the command line option.
|
|
As these variables are deprecated, this code will disappear soon...
|
|
*/
|
|
sys_sql_max_join_size.option_limits= sys_max_join_size.option_limits;
|
|
}
|
|
|
|
|
|
void set_var_free()
|
|
{
|
|
hash_free(&system_variable_hash);
|
|
}
|
|
|
|
|
|
/*
|
|
Find a user set-table variable
|
|
|
|
SYNOPSIS
|
|
find_sys_var()
|
|
str Name of system variable to find
|
|
length Length of variable. zero means that we should use strlen()
|
|
on the variable
|
|
|
|
RETURN VALUES
|
|
pointer pointer to variable definitions
|
|
0 Unknown variable (error message is given)
|
|
*/
|
|
|
|
sys_var *find_sys_var(const char *str, uint length)
|
|
{
|
|
sys_var *var= (sys_var*) hash_search(&system_variable_hash,
|
|
(byte*) str,
|
|
length ? length :
|
|
strlen(str));
|
|
if (!var)
|
|
my_error(ER_UNKNOWN_SYSTEM_VARIABLE, MYF(0), (char*) str);
|
|
return var;
|
|
}
|
|
|
|
|
|
/*
|
|
Execute update of all variables
|
|
|
|
SYNOPSIS
|
|
|
|
sql_set
|
|
THD Thread id
|
|
set_var List of variables to update
|
|
|
|
DESCRIPTION
|
|
First run a check of all variables that all updates will go ok.
|
|
If yes, then execute all updates, returning an error if any one failed.
|
|
|
|
This should ensure that in all normal cases none all or variables are
|
|
updated
|
|
|
|
RETURN VALUE
|
|
0 ok
|
|
1 ERROR, message sent (normally no variables was updated)
|
|
-1 ERROR, message not sent
|
|
*/
|
|
|
|
int sql_set_variables(THD *thd, List<set_var_base> *var_list)
|
|
{
|
|
int error;
|
|
List_iterator_fast<set_var_base> it(*var_list);
|
|
DBUG_ENTER("sql_set_variables");
|
|
|
|
set_var_base *var;
|
|
while ((var=it++))
|
|
{
|
|
if ((error= var->check(thd)))
|
|
goto err;
|
|
}
|
|
if (!(error= test(thd->net.report_error)))
|
|
{
|
|
it.rewind();
|
|
while ((var= it++))
|
|
error|= var->update(thd); // Returns 0, -1 or 1
|
|
}
|
|
|
|
err:
|
|
free_underlaid_joins(thd, &thd->lex->select_lex);
|
|
DBUG_RETURN(error);
|
|
}
|
|
|
|
|
|
/*
|
|
Say if all variables set by a SET support the ONE_SHOT keyword (currently,
|
|
only character set and collation do; later timezones will).
|
|
|
|
SYNOPSIS
|
|
|
|
not_all_support_one_shot
|
|
set_var List of variables to update
|
|
|
|
NOTES
|
|
It has a "not_" because it makes faster tests (no need to "!")
|
|
|
|
RETURN VALUE
|
|
0 all variables of the list support ONE_SHOT
|
|
1 at least one does not support ONE_SHOT
|
|
*/
|
|
|
|
bool not_all_support_one_shot(List<set_var_base> *var_list)
|
|
{
|
|
List_iterator_fast<set_var_base> it(*var_list);
|
|
set_var_base *var;
|
|
while ((var= it++))
|
|
{
|
|
if (var->no_support_one_shot())
|
|
return 1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*****************************************************************************
|
|
Functions to handle SET mysql_internal_variable=const_expr
|
|
*****************************************************************************/
|
|
|
|
int set_var::check(THD *thd)
|
|
{
|
|
if (var->is_readonly())
|
|
{
|
|
my_error(ER_INCORRECT_GLOBAL_LOCAL_VAR, MYF(0), var->name, "read only");
|
|
return -1;
|
|
}
|
|
if (var->check_type(type))
|
|
{
|
|
int err= type == OPT_GLOBAL ? ER_LOCAL_VARIABLE : ER_GLOBAL_VARIABLE;
|
|
my_error(err, MYF(0), var->name);
|
|
return -1;
|
|
}
|
|
if ((type == OPT_GLOBAL && check_global_access(thd, SUPER_ACL)))
|
|
return 1;
|
|
/* value is a NULL pointer if we are using SET ... = DEFAULT */
|
|
if (!value)
|
|
{
|
|
if (var->check_default(type))
|
|
{
|
|
my_error(ER_NO_DEFAULT, MYF(0), var->name);
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
if ((!value->fixed &&
|
|
value->fix_fields(thd, &value)) || value->check_cols(1))
|
|
return -1;
|
|
if (var->check_update_type(value->result_type()))
|
|
{
|
|
my_error(ER_WRONG_TYPE_FOR_VAR, MYF(0), var->name);
|
|
return -1;
|
|
}
|
|
return var->check(thd, this) ? -1 : 0;
|
|
}
|
|
|
|
|
|
/*
|
|
Check variable, but without assigning value (used by PS)
|
|
|
|
SYNOPSIS
|
|
set_var::light_check()
|
|
thd thread handler
|
|
|
|
RETURN VALUE
|
|
0 ok
|
|
1 ERROR, message sent (normally no variables was updated)
|
|
-1 ERROR, message not sent
|
|
*/
|
|
int set_var::light_check(THD *thd)
|
|
{
|
|
if (var->check_type(type))
|
|
{
|
|
int err= type == OPT_GLOBAL ? ER_LOCAL_VARIABLE : ER_GLOBAL_VARIABLE;
|
|
my_error(err, MYF(0), var->name);
|
|
return -1;
|
|
}
|
|
if (type == OPT_GLOBAL && check_global_access(thd, SUPER_ACL))
|
|
return 1;
|
|
|
|
if (value && ((!value->fixed && value->fix_fields(thd, &value)) ||
|
|
value->check_cols(1)))
|
|
return -1;
|
|
return 0;
|
|
}
|
|
|
|
|
|
int set_var::update(THD *thd)
|
|
{
|
|
if (!value)
|
|
var->set_default(thd, type);
|
|
else if (var->update(thd, this))
|
|
return -1; // should never happen
|
|
if (var->after_update)
|
|
(*var->after_update)(thd, type);
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*****************************************************************************
|
|
Functions to handle SET @user_variable=const_expr
|
|
*****************************************************************************/
|
|
|
|
int set_var_user::check(THD *thd)
|
|
{
|
|
/*
|
|
Item_func_set_user_var can't substitute something else on its place =>
|
|
0 can be passed as last argument (reference on item)
|
|
*/
|
|
return (user_var_item->fix_fields(thd, (Item**) 0) ||
|
|
user_var_item->check(0)) ? -1 : 0;
|
|
}
|
|
|
|
|
|
/*
|
|
Check variable, but without assigning value (used by PS)
|
|
|
|
SYNOPSIS
|
|
set_var_user::light_check()
|
|
thd thread handler
|
|
|
|
RETURN VALUE
|
|
0 ok
|
|
1 ERROR, message sent (normally no variables was updated)
|
|
-1 ERROR, message not sent
|
|
*/
|
|
int set_var_user::light_check(THD *thd)
|
|
{
|
|
/*
|
|
Item_func_set_user_var can't substitute something else on its place =>
|
|
0 can be passed as last argument (reference on item)
|
|
*/
|
|
return (user_var_item->fix_fields(thd, (Item**) 0));
|
|
}
|
|
|
|
|
|
int set_var_user::update(THD *thd)
|
|
{
|
|
if (user_var_item->update())
|
|
{
|
|
/* Give an error if it's not given already */
|
|
my_message(ER_SET_CONSTANTS_ONLY, ER(ER_SET_CONSTANTS_ONLY), MYF(0));
|
|
return -1;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*****************************************************************************
|
|
Functions to handle SET PASSWORD
|
|
*****************************************************************************/
|
|
|
|
int set_var_password::check(THD *thd)
|
|
{
|
|
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
|
if (!user->host.str)
|
|
{
|
|
if (*thd->security_ctx->priv_host != 0)
|
|
{
|
|
user->host.str= (char *) thd->security_ctx->priv_host;
|
|
user->host.length= strlen(thd->security_ctx->priv_host);
|
|
}
|
|
else
|
|
{
|
|
user->host.str= (char *)"%";
|
|
user->host.length= 1;
|
|
}
|
|
}
|
|
/* Returns 1 as the function sends error to client */
|
|
return check_change_password(thd, user->host.str, user->user.str,
|
|
password, strlen(password)) ? 1 : 0;
|
|
#else
|
|
return 0;
|
|
#endif
|
|
}
|
|
|
|
int set_var_password::update(THD *thd)
|
|
{
|
|
#ifndef NO_EMBEDDED_ACCESS_CHECKS
|
|
/* Returns 1 as the function sends error to client */
|
|
return change_password(thd, user->host.str, user->user.str, password) ?
|
|
1 : 0;
|
|
#else
|
|
return 0;
|
|
#endif
|
|
}
|
|
|
|
/****************************************************************************
|
|
Functions to handle table_type
|
|
****************************************************************************/
|
|
|
|
/* Based upon sys_var::check_enum() */
|
|
|
|
bool sys_var_thd_storage_engine::check(THD *thd, set_var *var)
|
|
{
|
|
char buff[STRING_BUFFER_USUAL_SIZE];
|
|
const char *value;
|
|
String str(buff, sizeof(buff), &my_charset_latin1), *res;
|
|
|
|
if (var->value->result_type() == STRING_RESULT)
|
|
{
|
|
LEX_STRING name;
|
|
handlerton *db_type;
|
|
if (!(res=var->value->val_str(&str)) ||
|
|
!(name.str= (char *)res->ptr()) || !(name.length= res->length()) ||
|
|
!(var->save_result.hton= db_type= ha_resolve_by_name(thd, &name)) ||
|
|
ha_checktype(thd, ha_legacy_type(db_type), 1, 0) != db_type)
|
|
{
|
|
value= res ? res->c_ptr() : "NULL";
|
|
goto err;
|
|
}
|
|
return 0;
|
|
}
|
|
value= "unknown";
|
|
|
|
err:
|
|
my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), value);
|
|
return 1;
|
|
}
|
|
|
|
|
|
byte *sys_var_thd_storage_engine::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
handlerton *val;
|
|
val= (type == OPT_GLOBAL) ? global_system_variables.*offset :
|
|
thd->variables.*offset;
|
|
return (byte *) hton2plugin[val->slot]->name.str;
|
|
}
|
|
|
|
|
|
void sys_var_thd_storage_engine::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
global_system_variables.*offset= myisam_hton;
|
|
else
|
|
thd->variables.*offset= global_system_variables.*offset;
|
|
}
|
|
|
|
|
|
bool sys_var_thd_storage_engine::update(THD *thd, set_var *var)
|
|
{
|
|
handlerton **value= &(global_system_variables.*offset);
|
|
if (var->type != OPT_GLOBAL)
|
|
value= &(thd->variables.*offset);
|
|
*value= var->save_result.hton;
|
|
return 0;
|
|
}
|
|
|
|
void sys_var_thd_table_type::warn_deprecated(THD *thd)
|
|
{
|
|
WARN_DEPRECATED(thd, "5.2", "table_type", "'storage_engine'");
|
|
}
|
|
|
|
void sys_var_thd_table_type::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
warn_deprecated(thd);
|
|
sys_var_thd_storage_engine::set_default(thd, type);
|
|
}
|
|
|
|
bool sys_var_thd_table_type::update(THD *thd, set_var *var)
|
|
{
|
|
warn_deprecated(thd);
|
|
return sys_var_thd_storage_engine::update(thd, var);
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
Functions to handle sql_mode
|
|
****************************************************************************/
|
|
|
|
/*
|
|
Make string representation of mode
|
|
|
|
SYNOPSIS
|
|
thd in thread handler
|
|
val in sql_mode value
|
|
len out pointer on length of string
|
|
|
|
RETURN
|
|
pointer to string with sql_mode representation
|
|
*/
|
|
|
|
byte *sys_var_thd_sql_mode::symbolic_mode_representation(THD *thd,
|
|
ulong val,
|
|
ulong *len)
|
|
{
|
|
char buff[256];
|
|
String tmp(buff, sizeof(buff), &my_charset_latin1);
|
|
ulong length;
|
|
|
|
tmp.length(0);
|
|
for (uint i= 0; val; val>>= 1, i++)
|
|
{
|
|
if (val & 1)
|
|
{
|
|
tmp.append(sql_mode_typelib.type_names[i],
|
|
sql_mode_typelib.type_lengths[i]);
|
|
tmp.append(',');
|
|
}
|
|
}
|
|
|
|
if ((length= tmp.length()))
|
|
length--;
|
|
*len= length;
|
|
return (byte*) thd->strmake(tmp.ptr(), length);
|
|
}
|
|
|
|
|
|
byte *sys_var_thd_sql_mode::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
ulonglong val= ((type == OPT_GLOBAL) ? global_system_variables.*offset :
|
|
thd->variables.*offset);
|
|
ulong length_unused;
|
|
return symbolic_mode_representation(thd, val, &length_unused);
|
|
}
|
|
|
|
|
|
void sys_var_thd_sql_mode::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
global_system_variables.*offset= 0;
|
|
else
|
|
thd->variables.*offset= global_system_variables.*offset;
|
|
}
|
|
|
|
|
|
void fix_sql_mode_var(THD *thd, enum_var_type type)
|
|
{
|
|
if (type == OPT_GLOBAL)
|
|
global_system_variables.sql_mode=
|
|
fix_sql_mode(global_system_variables.sql_mode);
|
|
else
|
|
{
|
|
thd->variables.sql_mode= fix_sql_mode(thd->variables.sql_mode);
|
|
/*
|
|
Update thd->server_status
|
|
*/
|
|
if (thd->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES)
|
|
thd->server_status|= SERVER_STATUS_NO_BACKSLASH_ESCAPES;
|
|
else
|
|
thd->server_status&= ~SERVER_STATUS_NO_BACKSLASH_ESCAPES;
|
|
}
|
|
}
|
|
|
|
/* Map database specific bits to function bits */
|
|
|
|
ulong fix_sql_mode(ulong sql_mode)
|
|
{
|
|
/*
|
|
Note that we dont set
|
|
MODE_NO_KEY_OPTIONS | MODE_NO_TABLE_OPTIONS | MODE_NO_FIELD_OPTIONS
|
|
to allow one to get full use of MySQL in this mode.
|
|
*/
|
|
|
|
if (sql_mode & MODE_ANSI)
|
|
{
|
|
sql_mode|= (MODE_REAL_AS_FLOAT | MODE_PIPES_AS_CONCAT | MODE_ANSI_QUOTES |
|
|
MODE_IGNORE_SPACE);
|
|
/*
|
|
MODE_ONLY_FULL_GROUP_BY removed from ANSI mode because it is currently
|
|
overly restrictive (see BUG#8510).
|
|
*/
|
|
}
|
|
if (sql_mode & MODE_ORACLE)
|
|
sql_mode|= (MODE_PIPES_AS_CONCAT | MODE_ANSI_QUOTES |
|
|
MODE_IGNORE_SPACE |
|
|
MODE_NO_KEY_OPTIONS | MODE_NO_TABLE_OPTIONS |
|
|
MODE_NO_FIELD_OPTIONS | MODE_NO_AUTO_CREATE_USER);
|
|
if (sql_mode & MODE_MSSQL)
|
|
sql_mode|= (MODE_PIPES_AS_CONCAT | MODE_ANSI_QUOTES |
|
|
MODE_IGNORE_SPACE |
|
|
MODE_NO_KEY_OPTIONS | MODE_NO_TABLE_OPTIONS |
|
|
MODE_NO_FIELD_OPTIONS);
|
|
if (sql_mode & MODE_POSTGRESQL)
|
|
sql_mode|= (MODE_PIPES_AS_CONCAT | MODE_ANSI_QUOTES |
|
|
MODE_IGNORE_SPACE |
|
|
MODE_NO_KEY_OPTIONS | MODE_NO_TABLE_OPTIONS |
|
|
MODE_NO_FIELD_OPTIONS);
|
|
if (sql_mode & MODE_DB2)
|
|
sql_mode|= (MODE_PIPES_AS_CONCAT | MODE_ANSI_QUOTES |
|
|
MODE_IGNORE_SPACE |
|
|
MODE_NO_KEY_OPTIONS | MODE_NO_TABLE_OPTIONS |
|
|
MODE_NO_FIELD_OPTIONS);
|
|
if (sql_mode & MODE_MAXDB)
|
|
sql_mode|= (MODE_PIPES_AS_CONCAT | MODE_ANSI_QUOTES |
|
|
MODE_IGNORE_SPACE |
|
|
MODE_NO_KEY_OPTIONS | MODE_NO_TABLE_OPTIONS |
|
|
MODE_NO_FIELD_OPTIONS | MODE_NO_AUTO_CREATE_USER);
|
|
if (sql_mode & MODE_MYSQL40)
|
|
sql_mode|= MODE_HIGH_NOT_PRECEDENCE;
|
|
if (sql_mode & MODE_MYSQL323)
|
|
sql_mode|= MODE_HIGH_NOT_PRECEDENCE;
|
|
if (sql_mode & MODE_TRADITIONAL)
|
|
sql_mode|= (MODE_STRICT_TRANS_TABLES | MODE_STRICT_ALL_TABLES |
|
|
MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE |
|
|
MODE_ERROR_FOR_DIVISION_BY_ZERO | MODE_NO_AUTO_CREATE_USER);
|
|
return sql_mode;
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
Named list handling
|
|
****************************************************************************/
|
|
|
|
gptr find_named(I_List<NAMED_LIST> *list, const char *name, uint length,
|
|
NAMED_LIST **found)
|
|
{
|
|
I_List_iterator<NAMED_LIST> it(*list);
|
|
NAMED_LIST *element;
|
|
while ((element= it++))
|
|
{
|
|
if (element->cmp(name, length))
|
|
{
|
|
if (found)
|
|
*found= element;
|
|
return element->data;
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
void delete_elements(I_List<NAMED_LIST> *list,
|
|
void (*free_element)(const char *name, gptr))
|
|
{
|
|
NAMED_LIST *element;
|
|
DBUG_ENTER("delete_elements");
|
|
while ((element= list->get()))
|
|
{
|
|
(*free_element)(element->name, element->data);
|
|
delete element;
|
|
}
|
|
DBUG_VOID_RETURN;
|
|
}
|
|
|
|
|
|
/* Key cache functions */
|
|
|
|
static KEY_CACHE *create_key_cache(const char *name, uint length)
|
|
{
|
|
KEY_CACHE *key_cache;
|
|
DBUG_ENTER("create_key_cache");
|
|
DBUG_PRINT("enter",("name: %.*s", length, name));
|
|
|
|
if ((key_cache= (KEY_CACHE*) my_malloc(sizeof(KEY_CACHE),
|
|
MYF(MY_ZEROFILL | MY_WME))))
|
|
{
|
|
if (!new NAMED_LIST(&key_caches, name, length, (gptr) key_cache))
|
|
{
|
|
my_free((char*) key_cache, MYF(0));
|
|
key_cache= 0;
|
|
}
|
|
else
|
|
{
|
|
/*
|
|
Set default values for a key cache
|
|
The values in dflt_key_cache_var is set by my_getopt() at startup
|
|
|
|
We don't set 'buff_size' as this is used to enable the key cache
|
|
*/
|
|
key_cache->param_block_size= dflt_key_cache_var.param_block_size;
|
|
key_cache->param_division_limit= dflt_key_cache_var.param_division_limit;
|
|
key_cache->param_age_threshold= dflt_key_cache_var.param_age_threshold;
|
|
}
|
|
}
|
|
DBUG_RETURN(key_cache);
|
|
}
|
|
|
|
|
|
KEY_CACHE *get_or_create_key_cache(const char *name, uint length)
|
|
{
|
|
LEX_STRING key_cache_name;
|
|
KEY_CACHE *key_cache;
|
|
|
|
key_cache_name.str= (char *) name;
|
|
key_cache_name.length= length;
|
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
|
if (!(key_cache= get_key_cache(&key_cache_name)))
|
|
key_cache= create_key_cache(name, length);
|
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
|
return key_cache;
|
|
}
|
|
|
|
|
|
void free_key_cache(const char *name, KEY_CACHE *key_cache)
|
|
{
|
|
ha_end_key_cache(key_cache);
|
|
my_free((char*) key_cache, MYF(0));
|
|
}
|
|
|
|
|
|
bool process_key_caches(int (* func) (const char *name, KEY_CACHE *))
|
|
{
|
|
I_List_iterator<NAMED_LIST> it(key_caches);
|
|
NAMED_LIST *element;
|
|
|
|
while ((element= it++))
|
|
{
|
|
KEY_CACHE *key_cache= (KEY_CACHE *) element->data;
|
|
func(element->name, key_cache);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
void sys_var_trust_routine_creators::warn_deprecated(THD *thd)
|
|
{
|
|
WARN_DEPRECATED(thd, "5.2", "log_bin_trust_routine_creators",
|
|
"'log_bin_trust_function_creators'");
|
|
}
|
|
|
|
void sys_var_trust_routine_creators::set_default(THD *thd, enum_var_type type)
|
|
{
|
|
warn_deprecated(thd);
|
|
sys_var_bool_ptr::set_default(thd, type);
|
|
}
|
|
|
|
bool sys_var_trust_routine_creators::update(THD *thd, set_var *var)
|
|
{
|
|
warn_deprecated(thd);
|
|
return sys_var_bool_ptr::update(thd, var);
|
|
}
|
|
|
|
/* even session variable here requires SUPER, because of -#o,file */
|
|
bool sys_var_thd_dbug::check(THD *thd, set_var *var)
|
|
{
|
|
return check_global_access(thd, SUPER_ACL);
|
|
}
|
|
|
|
bool sys_var_thd_dbug::update(THD *thd, set_var *var)
|
|
{
|
|
if (var->type == OPT_GLOBAL)
|
|
DBUG_SET_INITIAL(var ? var->value->str_value.c_ptr() : "");
|
|
else
|
|
{
|
|
DBUG_POP();
|
|
DBUG_PUSH(var ? var->value->str_value.c_ptr() : "");
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
byte *sys_var_thd_dbug::value_ptr(THD *thd, enum_var_type type, LEX_STRING *b)
|
|
{
|
|
char buf[256];
|
|
if (type == OPT_GLOBAL)
|
|
DBUG_EXPLAIN_INITIAL(buf, sizeof(buf));
|
|
else
|
|
DBUG_EXPLAIN(buf, sizeof(buf));
|
|
return (byte*) thd->strdup(buf);
|
|
}
|
|
|
|
|
|
bool sys_var_event_scheduler::check(THD *thd, set_var *var)
|
|
{
|
|
return check_enum(thd, var, &Events::var_typelib);
|
|
}
|
|
|
|
|
|
/*
|
|
The update method of the global variable event_scheduler.
|
|
If event_scheduler is switched from 0 to 1 then the scheduler main
|
|
thread is resumed and if from 1 to 0 the scheduler thread is suspended
|
|
|
|
SYNOPSIS
|
|
sys_var_event_scheduler::update()
|
|
thd Thread context (unused)
|
|
var The new value
|
|
|
|
Returns
|
|
FALSE OK
|
|
TRUE Error
|
|
*/
|
|
|
|
bool
|
|
sys_var_event_scheduler::update(THD *thd, set_var *var)
|
|
{
|
|
int res;
|
|
/* here start the thread if not running. */
|
|
DBUG_ENTER("sys_var_event_scheduler::update");
|
|
if (Events::opt_event_scheduler == Events::EVENTS_DISABLED)
|
|
{
|
|
my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--event-scheduler=DISABLED");
|
|
DBUG_RETURN(TRUE);
|
|
}
|
|
|
|
DBUG_PRINT("info", ("new_value: %d", (int) var->save_result.ulong_value));
|
|
|
|
Item_result var_type= var->value->result_type();
|
|
|
|
if (var->save_result.ulong_value == Events::EVENTS_ON)
|
|
res= Events::get_instance()->start_execution_of_events();
|
|
else if (var->save_result.ulong_value == Events::EVENTS_OFF)
|
|
res= Events::get_instance()->stop_execution_of_events();
|
|
else
|
|
{
|
|
DBUG_ASSERT(0);
|
|
}
|
|
if (res)
|
|
my_error(ER_EVENT_SET_VAR_ERROR, MYF(0));
|
|
|
|
DBUG_RETURN((bool) res);
|
|
}
|
|
|
|
|
|
byte *sys_var_event_scheduler::value_ptr(THD *thd, enum_var_type type,
|
|
LEX_STRING *base)
|
|
{
|
|
int state;
|
|
if (Events::opt_event_scheduler == Events::EVENTS_DISABLED)
|
|
state= Events::EVENTS_DISABLED; // This should be DISABLED
|
|
else if (Events::get_instance()->is_execution_of_events_started())
|
|
state= Events::EVENTS_ON; // This should be ON
|
|
else
|
|
state= Events::EVENTS_OFF; // This should be OFF
|
|
|
|
return (byte*) Events::opt_typelib.type_names[state];
|
|
}
|
|
|
|
|
|
/****************************************************************************
|
|
Used templates
|
|
****************************************************************************/
|
|
|
|
#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION
|
|
template class List<set_var_base>;
|
|
template class List_iterator_fast<set_var_base>;
|
|
template class I_List_iterator<NAMED_LIST>;
|
|
#endif
|