diff options
author | Nirbhay Choubey <nirbhay@mariadb.com> | 2015-02-18 17:15:57 -0500 |
---|---|---|
committer | Nirbhay Choubey <nirbhay@mariadb.com> | 2015-02-18 17:15:57 -0500 |
commit | 3c9137deeb84dff9fa52734fb5fc3966c6746c00 (patch) | |
tree | 3ce5922ee55d6683c2348e1b1772d961754d1cd6 | |
parent | d8ee54c63321e81ef99465bbadc8e4fb45fe7569 (diff) | |
parent | fdd6c111c254c5044cd9b6c2f7e4d0c74f427a79 (diff) | |
download | mariadb-git-3c9137deeb84dff9fa52734fb5fc3966c6746c00.tar.gz |
Merge branch '5.5' into 5.5-galera
Merge banch 5.5 till revision :
fdd6c11 - MDEV-7419 Function cli_safe_read not exported
Conflicts:
.bzrignore
debian/dist/Debian/mariadb-galera-server-5.5.files.in
debian/dist/Ubuntu/mariadb-galera-server-5.5.files.in
storage/tokudb/CMakeLists.txt
support-files/build-tags
208 files changed, 4345 insertions, 1853 deletions
diff --git a/.bzrignore b/.bzrignore deleted file mode 100644 index f13c29c3087..00000000000 --- a/.bzrignore +++ /dev/null @@ -1,1182 +0,0 @@ -*-t -*.a -*.bb -*.bbg -*.bin -*.cdf -*.core -*.d -*.da -*.dgcov -*.dir/ -*.dll -*.dsp -*.dylib -*.diff -*.exe -*.exp -*.gcda -*.gcno -*.gcov -*.idb -*.ilk -*.la -*.lai -*.lib -*.lo -*.manifest -*.map -*.o -*.obj -*.old -*.pch -*.pdb -*.Plo -*.Po -*.reject -*.res -*.rule -*.sbr -*.so -*.so.* -*.spec -*.Tpo -*.user -*.vcproj -*.vcproj.cmake -*.vcxproj -*.vcxproj.filters -Debug -MySql.sdf -Win32 -RelWithDebInfo -*~ -.*.swp -./CMakeCache.txt -./config.h -./fix-project-files -./mysql*.ds? -./MySql.ncb -./MySql.sln -./MySql.suo -./prepare -./README.build-files -.defs.mk -.depend -.depend.mk -.DS_Store -.gdb_history -.gdbinit -.o -.out -.snprj/* -.vimrc -ac_available_languages_fragment -BitKeeper/ -build_debug -build_install -build_release -client/*.ds? -client/completion_hash.cpp -client/decimal.c -client/dtoa.c -client/echo -client/insert_test -client/link_sources -client/log_event.cc -client/log_event.h -client/log_event_old.cc -client/log_event_old.h -client/mf_iocache.c -client/mf_iocache.cc -client/my_decimal.cc -client/my_decimal.h -client/my_user.c -client/mysql -client/mysql.cpp -client/mysql_upgrade -client/mysqladmin -client/mysqladmin.c -client/mysqladmin.cpp -client/mysqlbinlog -client/mysqlbinlog.cpp -client/mysqlcheck -client/mysqldump -client/mysqlimport -client/mysqlmanager-pwgen -client/mysqlmanagerc -client/mysqlshow -client/mysqlslap -client/mysqltest -client/mysqltestmanager-pwgen -client/mysqltestmanagerc -client/mysys_priv.h -client/readline.cpp -client/rpl_constants.h -client/rpl_filter.cc -client/rpl_filter.h -client/rpl_record_old.cc -client/rpl_record_old.h -client/rpl_tblmap.cc -client/rpl_tblmap.h -client/rpl_utility.cc -client/rpl_utility.h -client/rpl_utility.cc -client/select_test -client/sql_const.h -client/sql_list.cc -client/sql_list.h -client/sql_string.cpp -client/ssl_test -client/thimble -client/thread_test -client/tmp.diff -client/transaction.h -client/async_example -client_debug/* -client_release/* -client_test -cmake_install.cmake -CMakeFiles/ -cmd-line-utils/libedit/common.h -cmd-line-utils/libedit/makelist -comments -comon.h -comp_err/*.ds? -compile -config.h -contrib/*.ds? -COPYING -COPYING.LIB -core -core.* -cscope.in.out -cscope.out -cscope.po.out -CTestTestfile.cmake -dbug/*.ds? -dbug/dbug_analyze -dbug/example*.r -dbug/factorial -dbug/factorial.r -dbug/main.r -dbug/output*.r -dbug/tests -dbug/user.ps -dbug/user.t -debian/control -debian/defs.mk -debug/ -depcomp -Docs/INSTALL-BINARY -examples/*.ds? -examples/udf_example/udf_example.def -EXCEPTIONS-CLIENT -extra/charset2html -extra/comp_err -extra/created_include_files -extra/innochecksum -extra/libevent/event-config.h -extra/my_print_defaults -extra/mysql_install -extra/mysql_tzinfo_to_sql -extra/mysql_waitpid -extra/mysqld_ername.h -extra/mysqld_error.h -extra/perror -extra/replace -extra/resolve_stack_dump -extra/resolveip -extra/sql_state.h -extra/tztime.cc -extra/yassl/taocrypt/benchmark/benchmark -extra/yassl/taocrypt/test/test -extra/yassl/testsuite/testsuite -fcns.c -fcns.h -gdbinit -gmon.out -hardcopy.0 -heap/*.ds? -heap/hp_test1 -heap/hp_test2 -help -help.c -help.h -include/abi_check -include/check_abi -include/link_sources -include/my_config.h -include/my_global.h -include/mysql_h.ic -include/mysql_version.h -include/mysqld_ername.h -include/mysqld_error.h -include/mysqld_error.h.rule -include/openssl -include/probes_mysql_dtrace.h -include/readline -include/readline/*.h -include/readline/readline.h -include/sql_state.h -include/widec.h -insert_test -install -install-sh -INSTALL-SOURCE -INSTALL-WIN-SOURCE -item_xmlfunc.cc -lib_debug/* -lib_release/* -libmysql/*.c -libmysql/*.ds? -libmysql/conf_to_src -libmysql/debug/libmysql.exp -libmysql/libmysql.ver -libmysql/libmysql_exports_file.cc -libmysql/link_sources -libmysql/merge_archives_mysqlclient.cmake -libmysql/my_static.h -libmysql/my_time.c -libmysql/mysys_priv.h -libmysql/net.c -libmysql/release/libmysql.exp -libmysql/vio_priv.h -libmysql/viosocket.o.6WmSJk -libmysql_r/*.c -libmysql_r/client_settings.h -libmysql_r/conf_to_src -libmysql_r/link_sources -libmysql_r/my_static.h -libmysql_r/mysys_priv.h -libmysql_r/vio_priv.h -libmysqld/*.ds? -libmysqld/backup_dir -libmysqld/client.c -libmysqld/client_plugin.c -libmysqld/client_settings.h -libmysqld/cmake_dummy.c -libmysqld/convert.cc -libmysqld/create_options.cc -libmysqld/datadict.cc -libmysqld/debug_sync.cc -libmysqld/derror.cc -libmysqld/des_key_file.cc -libmysqld/discover.cc -libmysqld/discover_xt.cc -libmysqld/emb_qcache.cpp -libmysqld/errmsg.c -libmysqld/event.cc -libmysqld/event_data_objects.cc -libmysqld/event_db_repository.cc -libmysqld/event_executor.cc -libmysqld/event_parse_data.cc -libmysqld/event_queue.cc -libmysqld/event_scheduler.cc -libmysqld/event_timed.cc -libmysqld/events.cc -libmysqld/examples/client_test.c -libmysqld/examples/client_test.cc -libmysqld/examples/completion_hash.cc -libmysqld/examples/completion_hash.h -libmysqld/examples/link_sources -libmysqld/examples/my_readline.h -libmysqld/examples/mysql -libmysqld/examples/mysql.cc -libmysqld/examples/mysql_client_test.c -libmysqld/examples/mysql_client_test_embedded -libmysqld/examples/mysql_embedded -libmysqld/examples/mysqltest -libmysqld/examples/mysqltest.c -libmysqld/examples/mysqltest.cc -libmysqld/examples/mysqltest_embedded -libmysqld/examples/readline.cc -libmysqld/examples/sql_string.cc -libmysqld/examples/sql_string.h -libmysqld/examples/test-gdbinit -libmysqld/field.cc -libmysqld/field_conv.cc -libmysqld/filesort.cc -libmysqld/get_password.c -libmysqld/gstream.cc -libmysqld/ha_archive.cc -libmysqld/ha_berkeley.cc -libmysqld/ha_blackhole.cc -libmysqld/ha_example.cc -libmysqld/ha_federated.cc -libmysqld/ha_federatedx.cc -libmysqld/ha_heap.cc -libmysqld/ha_innobase.cc -libmysqld/ha_innodb.cc -libmysqld/ha_maria.cc -libmysqld/ha_myisam.cc -libmysqld/ha_myisammrg.cc -libmysqld/ha_ndbcluster.cc -libmysqld/ha_ndbcluster_binlog.cc -libmysqld/ha_ndbcluster_cond.cc -libmysqld/ha_partition.cc -libmysqld/ha_tina.cc -libmysqld/handler.cc -libmysqld/handlerton.cc -libmysqld/hash_filo.cc -libmysqld/hostname.cc -libmysqld/init.cc -libmysqld/item.cc -libmysqld/item_buff.cc -libmysqld/item_cmpfunc.cc -libmysqld/item_create.cc -libmysqld/item_func.cc -libmysqld/item_geofunc.cc -libmysqld/item_row.cc -libmysqld/item_strfunc.cc -libmysqld/item_subselect.cc -libmysqld/item_sum.cc -libmysqld/item_timefunc.cc -libmysqld/item_uniq.cc -libmysqld/key.cc -libmysqld/keycaches.cc -libmysqld/lex_hash.h -libmysqld/lib_sql.cpp -libmysqld/libmysql.c -libmysqld/link_sources -libmysqld/lock.cc -libmysqld/log.cc -libmysqld/log_event.cc -libmysqld/log_event_old.cc -libmysqld/md5.c -libmysqld/mdl.cc -libmysqld/merge_archives_mysqlserver.cmake -libmysqld/message.h -libmysqld/message.rc -libmysqld/mf_iocache.cc -libmysqld/mini_client.cc -libmysqld/multi_range_read.cc -libmysqld/my_decimal.cc -libmysqld/my_time.c -libmysqld/my_user.c -libmysqld/mysqlserver_depends.c -libmysqld/myxt_xt.cc -libmysqld/net_pkg.cc -libmysqld/net_serv.cc -libmysqld/opt_ft.cc -libmysqld/opt_index_cond_pushdown.cc -libmysqld/opt_range.cc -libmysqld/opt_subselect.cc -libmysqld/opt_sum.cc -libmysqld/opt_table_elimination.cc -libmysqld/pack.c -libmysqld/parse_file.cc -libmysqld/partition_info.cc -libmysqld/password.c -libmysqld/procedure.cc -libmysqld/protocol.cc -libmysqld/protocol_cursor.cc -libmysqld/records.cc -libmysqld/repl_failsafe.cc -libmysqld/rpl_filter.cc -libmysqld/rpl_handler.cc -libmysqld/rpl_injector.cc -libmysqld/rpl_record.cc -libmysqld/rpl_record_old.cc -libmysqld/rpl_utility.cc -libmysqld/scheduler.cc -libmysqld/set_var.cc -libmysqld/sha2.cc -libmysqld/simple-test -libmysqld/slave.cc -libmysqld/sp.cc -libmysqld/sp_cache.cc -libmysqld/sp_head.cc -libmysqld/sp_pcontext.cc -libmysqld/sp_rcontext.cc -libmysqld/spatial.cc -libmysqld/sql_acl.cc -libmysqld/sql_admin.cc -libmysqld/sql_alter.cc -libmysqld/sql_analyse.cc -libmysqld/sql_audit.cc -libmysqld/sql_base.cc -libmysqld/sql_builtin.cc -libmysqld/sql_cache.cc -libmysqld/sql_class.cc -libmysqld/sql_command -libmysqld/sql_connect.cc -libmysqld/sql_crypt.cc -libmysqld/sql_cursor.cc -libmysqld/sql_cursor.h -libmysqld/sql_db.cc -libmysqld/sql_delete.cc -libmysqld/sql_derived.cc -libmysqld/sql_do.cc -libmysqld/sql_error.cc -libmysqld/sql_expression_cache.cc -libmysqld/sql_handler.cc -libmysqld/sql_help.cc -libmysqld/sql_insert.cc -libmysqld/sql_join_cache.cc -libmysqld/sql_lex.cc -libmysqld/sql_list.cc -libmysqld/sql_load.cc -libmysqld/sql_locale.cc -libmysqld/sql_manager.cc -libmysqld/sql_map.cc -libmysqld/sql_olap.cc -libmysqld/sql_parse.cc -libmysqld/sql_partition.cc -libmysqld/sql_partition_admin.cc -libmysqld/sql_plugin.cc -libmysqld/sql_prepare.cc -libmysqld/sql_profile.cc -libmysqld/sql_reload.cc -libmysqld/sql_rename.cc -libmysqld/sql_repl.cc -libmysqld/sql_select.cc -libmysqld/sql_servers.cc -libmysqld/sql_show.cc -libmysqld/sql_signal.cc -libmysqld/sql_state.c -libmysqld/sql_string.cc -libmysqld/sql_table.cc -libmysqld/sql_tablespace.cc -libmysqld/sql_test.cc -libmysqld/sql_time.cc -libmysqld/sql_trigger.cc -libmysqld/sql_truncate.cc -libmysqld/sql_udf.cc -libmysqld/sql_union.cc -libmysqld/sql_unions.cc -libmysqld/sql_update.cc -libmysqld/sql_view.cc -libmysqld/sql_yacc.cc -libmysqld/sql_yacc.cpp -libmysqld/sql_yacc.h -libmysqld/stacktrace.c -libmysqld/strfunc.cc -libmysqld/sys_vars.cc -libmysqld/table.cc -libmysqld/thr_malloc.cc -libmysqld/transaction.cc -libmysqld/tztime.cc -libmysqld/uniques.cc -libmysqld/unireg.cc -libmysqld/discover_xt.cc -libmysqld/myxt_xt.cc -libmysqld/rpl_reporting.cc -libmysqld/rpl_utility.cc -libmysqltest/*.ds? -libmysqltest/mytest.c -libtool -linked_client_sources -linked_include_sources -linked_libmysql_r_sources -linked_libmysql_sources -linked_libmysqld_sources -linked_libmysqldex_sources -linked_server_sources -linked_tools_sources -locked -ltmain.sh -ma_test_recovery.output -make_dist.cmake -Makefile -Makefile.in -MinSizeRel/ -MIRRORS -missing -mkinstalldirs -my_print_defaults/*.ds? -myisam_ftdump/*.ds? -myisamchk/*.ds? -myisamlog/*.ds? -myisammrg/*.ds? -myisampack/*.ds? -mysql-test/*.ds? -mysql-test/install_test_db -mysql-test/lib/init_db.sql -mysql-test/lib/My/SafeProcess/my_safe_process -mysql-test/mtr -mysql-test/mysql-test-run -mysql-test/r/*.err -mysql-test/r/*.log -mysql-test/r/*.out -mysql-test/r/*.reject -mysql-test/std_data/*.pem -mysql-test/var -mysql.kdevprj -mysql.proj -mysqlbinlog/*.ds? -mysqlcheck/*.ds? -mysqld.S -mysqld.sym -mysqldemb/*.ds? -mysqlserver/*.ds? -mysys/*.ds? -mysys/charset2html -mysys/getopt.c -mysys/getopt1.c -mysys/main.cc -mysys/my_new.cpp -mysys/raid.cpp -mysys/ste5KbMa -mysys/test_atomic -mysys/test_bitmap -mysys/test_charset -mysys/test_dir -mysys/test_gethwaddr -mysys/test_io_cache -mysys/test_thr_alarm -mysys/test_thr_lock -mysys/test_vsnprintf -mysys/testhash -mysys/thr_lock -perror/*.ds? -regex/*.ds? -regex/re -Release/ -RelWithDebInfo/ -replace/*.ds? -scripts/comp_sql -scripts/convert-debug-for-diff -scripts/fill_func_tables -scripts/fill_func_tables.sql -scripts/fill_help_tables -scripts/fill_help_tables.sql -scripts/make_binary_distribution -scripts/make_sharedlib_distribution -scripts/make_win_binary_distribution -scripts/make_win_src_distribution -scripts/make_win_src_distribution_old -scripts/msql2mysql -scripts/mysql_config -scripts/mysql_convert_table_format -scripts/mysql_create_system_tables -scripts/mysql_explain_log -scripts/mysql_find_rows -scripts/mysql_fix_extensions -scripts/mysql_fix_privilege_tables -scripts/mysql_fix_privilege_tables.sql -scripts/mysql_fix_privilege_tables.sql.rule -scripts/mysql_fix_privilege_tables_sql.c -scripts/mysql_fix_privilege_tables_sql.c.rule -scripts/mysql_install_db -scripts/mysql_secure_installation -scripts/mysql_setpermission -scripts/mysql_tableinfo -scripts/mysql_upgrade -scripts/mysql_upgrade_shell -scripts/mysql_zap -scripts/mysqlaccess -scripts/mysqlbug -scripts/mysqld_multi -scripts/mysqld_safe -scripts/mysqldumpslow -scripts/mysqlhotcopy -scripts/mysqlhotcopy.sh.rej -scripts/safe_mysqld -select_test -sql-bench/bench-count-distinct -sql-bench/bench-init.pl -sql-bench/compare-results -sql-bench/compare-results-all -sql-bench/copy-db -sql-bench/crash-me -sql-bench/gif/* -sql-bench/graph-compare-results -sql-bench/innotest1 -sql-bench/innotest1a -sql-bench/innotest1b -sql-bench/innotest2 -sql-bench/innotest2a -sql-bench/innotest2b -sql-bench/output/* -sql-bench/Results-linux/ATIS-mysql_bdb-Linux_2.2.14_my_SMP_i686 -sql-bench/run-all-tests -sql-bench/server-cfg -sql-bench/template.html -sql-bench/test-alter-table -sql-bench/test-ATIS -sql-bench/test-big-tables -sql-bench/test-connect -sql-bench/test-create -sql-bench/test-insert -sql-bench/test-select -sql-bench/test-transactions -sql-bench/test-wisconsin -sql/*.cpp -sql/*.ds? -sql/client.c -sql/client_plugin.c -sql/Doxyfile -sql/gen_lex_hash -sql/lex_hash.h -sql/lex_hash.h.rule -sql/link_sources -sql/message.h -sql/message.mc -sql/message.rc -sql/mini_client_errors.c -sql/my_time.c -sql/my_user.c -sql/mysql_tzinfo_to_sql -sql/mysql_tzinfo_to_sql.cc -sql/mysql_tzinfo_to_sql_tztime.cc -sql/mysqlbinlog -sql/mysqld -sql/mysqld-purecov -sql/mysqld-purify -sql/mysqld-quantify -sql/new.cc -sql/pack.c -sql/share/*/*.sys -sql/sql_builtin.cc -sql/sql_yacc.cc -sql/sql_yacc.h -sql/sql_yacc.h.rule -sql/sql_yacc.output -sql_error.cc -sql_prepare.cc -sql_priv.h -stamp-h -storage/archive/archive_reader -storage/archive/archive_test -storage/heap/hp_test1 -storage/heap/hp_test2 -storage/maria/*.MAD -storage/maria/*.MAI -storage/maria/aria.log -storage/maria/aria_chk -storage/maria/aria_control -storage/maria/aria_dump_log -storage/maria/aria_ftdump -storage/maria/aria_log -storage/maria/aria_log.* -storage/maria/aria_pack -storage/maria/aria_read_log -storage/maria/ma_rt_test -storage/maria/ma_sp_test -storage/maria/ma_test1 -storage/maria/ma_test2 -storage/maria/ma_test3 -storage/maria/ma_test_all -storage/maria/tmp -storage/maria/unittest/ma_pagecache_consist_1k-t-big -storage/maria/unittest/ma_pagecache_consist_1kHC-t-big -storage/maria/unittest/ma_pagecache_consist_1kRD-t-big -storage/maria/unittest/ma_pagecache_consist_1kWR-t-big -storage/maria/unittest/ma_pagecache_consist_64k-t-big -storage/maria/unittest/ma_pagecache_consist_64kHC-t-big -storage/maria/unittest/ma_pagecache_consist_64kRD-t-big -storage/maria/unittest/ma_pagecache_consist_64kWR-t-big -storage/maria/unittest/ma_pagecache_single_64k-t-big -storage/maria/unittest/ma_test_loghandler_long-t-big -storage/maria/unittest/maria_control -storage/maria/unittest/mf_pagecache_consist_1k-t-big -storage/maria/unittest/mf_pagecache_consist_1kHC-t-big -storage/maria/unittest/mf_pagecache_consist_1kRD-t-big -storage/maria/unittest/mf_pagecache_consist_1kWR-t-big -storage/maria/unittest/mf_pagecache_consist_64k-t-big -storage/maria/unittest/mf_pagecache_consist_64kHC-t-big -storage/maria/unittest/mf_pagecache_consist_64kRD-t-big -storage/maria/unittest/mf_pagecache_consist_64kWR-t-big -storage/maria/unittest/mf_pagecache_single_64k-t-big -storage/maria/unittest/page_cache_test_file_1 -storage/maria/unittest/pagecache_debug.log -storage/maria/unittest/tmp -storage/myisam/FT1.MYD -storage/myisam/FT1.MYI -storage/myisam/ft_dump -storage/myisam/ft_eval -storage/myisam/ft_test1 -storage/myisam/ftbench/data -storage/myisam/ftbench/t -storage/myisam/ftbench/var/* -storage/myisam/mi_test1 -storage/myisam/mi_test2 -storage/myisam/mi_test3 -storage/myisam/mi_test_all -storage/myisam/myisam.log -storage/myisam/myisam_ftdump -storage/myisam/myisamchk -storage/myisam/myisamlog -storage/myisam/myisampack -storage/myisam/rt_test -storage/myisam/rt_test.MYD -storage/myisam/rt_test.MYI -storage/myisam/sp_test -storage/myisam/test1.MYD -storage/myisam/test1.MYI -storage/myisam/test2.MYD -storage/myisam/test2.MYI -storage/ndb/bin/acid -storage/ndb/bin/async-lmc-bench-l-p10.sh -storage/ndb/bin/async-lmc-bench-l.sh -storage/ndb/bin/async-lmc-bench-p10.sh -storage/ndb/bin/async-lmc-bench.sh -storage/ndb/bin/atrt -storage/ndb/bin/atrt-analyze-result.sh -storage/ndb/bin/atrt-clear-result.sh -storage/ndb/bin/atrt-gather-result.sh -storage/ndb/bin/atrt-setup.sh -storage/ndb/bin/bankCreator -storage/ndb/bin/bankMakeGL -storage/ndb/bin/bankSumAccounts -storage/ndb/bin/bankTimer -storage/ndb/bin/bankTransactionMaker -storage/ndb/bin/bankValidateAllGLs -storage/ndb/bin/basicTransporterTest -storage/ndb/bin/benchronja -storage/ndb/bin/bulk_copy -storage/ndb/bin/copy_tab -storage/ndb/bin/create_all_tabs -storage/ndb/bin/create_index -storage/ndb/bin/create_tab -storage/ndb/bin/DbAsyncGenerator -storage/ndb/bin/DbCreate -storage/ndb/bin/delete_all -storage/ndb/bin/desc -storage/ndb/bin/drop_all_tabs -storage/ndb/bin/drop_index -storage/ndb/bin/drop_tab -storage/ndb/bin/flexAsynch -storage/ndb/bin/flexBench -storage/ndb/bin/flexHammer -storage/ndb/bin/flexScan -storage/ndb/bin/flexTT -storage/ndb/bin/hugoCalculator -storage/ndb/bin/hugoFill -storage/ndb/bin/hugoLoad -storage/ndb/bin/hugoLockRecords -storage/ndb/bin/hugoPkDelete -storage/ndb/bin/hugoPkRead -storage/ndb/bin/hugoPkReadRecord -storage/ndb/bin/hugoPkUpdate -storage/ndb/bin/hugoScanRead -storage/ndb/bin/hugoScanUpdate -storage/ndb/bin/index -storage/ndb/bin/index2 -storage/ndb/bin/initronja -storage/ndb/bin/interpreterInTup -storage/ndb/bin/list_tables -storage/ndb/bin/make-config.sh -storage/ndb/bin/mgmtclient -storage/ndb/bin/mgmtsrvr -storage/ndb/bin/mkconfig -storage/ndb/bin/ndb -storage/ndb/bin/ndb_cpcc -storage/ndb/bin/ndb_cpcd -storage/ndb/bin/ndb_rep -storage/ndb/bin/ndbsql -storage/ndb/bin/newton_basic -storage/ndb/bin/newton_br -storage/ndb/bin/newton_pb -storage/ndb/bin/newton_perf -storage/ndb/bin/perfTransporterTest -storage/ndb/bin/printConfig -storage/ndb/bin/printSchemafile -storage/ndb/bin/printSysfile -storage/ndb/bin/redoLogFileReader -storage/ndb/bin/restart -storage/ndb/bin/restarter -storage/ndb/bin/restarter2 -storage/ndb/bin/restarts -storage/ndb/bin/restore -storage/ndb/bin/select_all -storage/ndb/bin/select_count -storage/ndb/bin/telco -storage/ndb/bin/test_cpcd -storage/ndb/bin/test_event -storage/ndb/bin/testBackup -storage/ndb/bin/testBank -storage/ndb/bin/testBasic -storage/ndb/bin/testBasicAsynch -storage/ndb/bin/testCopy -storage/ndb/bin/testDataBuffers -storage/ndb/bin/testDict -storage/ndb/bin/testGrep -storage/ndb/bin/testGrepVerify -storage/ndb/bin/testIndex -storage/ndb/bin/testInterpreter -storage/ndb/bin/testKernelDataBuffer -storage/ndb/bin/testLongSig -storage/ndb/bin/testMgm -storage/ndb/bin/testMgmapi -storage/ndb/bin/testNdbApi -storage/ndb/bin/testNodeRestart -storage/ndb/bin/testOdbcDriver -storage/ndb/bin/testOIBasic -storage/ndb/bin/testOperations -storage/ndb/bin/testRestartGci -storage/ndb/bin/testScan -storage/ndb/bin/testScanInterpreter -storage/ndb/bin/testSimplePropertiesSection -storage/ndb/bin/testSystemRestart -storage/ndb/bin/testTimeout -storage/ndb/bin/testTransactions -storage/ndb/bin/verify_index -storage/ndb/bin/waiter -storage/ndb/config/config.mk -storage/ndb/examples/ndbapi_example1/ndbapi_example1 -storage/ndb/examples/ndbapi_example2/ndbapi_example2 -storage/ndb/examples/ndbapi_example3/ndbapi_example3 -storage/ndb/examples/ndbapi_example5/ndbapi_example5 -storage/ndb/examples/select_all/select_all -storage/ndb/include/ndb_global.h -storage/ndb/include/ndb_types.h -storage/ndb/include/ndb_version.h -storage/ndb/lib/libMGM_API.so -storage/ndb/lib/libNDB_API.so -storage/ndb/lib/libNDB_ODBC.so -storage/ndb/lib/libndbclient.so -storage/ndb/lib/libndbclient_extra.so -storage/ndb/lib/libNEWTON_API.so -storage/ndb/lib/libNEWTON_BASICTEST_COMMON.so -storage/ndb/lib/libREP_API.so -storage/ndb/ndbapi-examples/mgmapi_logevent/mgmapi_logevent -storage/ndb/ndbapi-examples/mgmapi_logevent2/mgmapi_logevent2 -storage/ndb/ndbapi-examples/ndbapi_async/ndbapi_async -storage/ndb/ndbapi-examples/ndbapi_async1/ndbapi_async1 -storage/ndb/ndbapi-examples/ndbapi_event/ndbapi_event -storage/ndb/ndbapi-examples/ndbapi_retries/ndbapi_retries -storage/ndb/ndbapi-examples/ndbapi_scan/ndbapi_scan -storage/ndb/ndbapi-examples/ndbapi_simple/ndbapi_simple -storage/ndb/ndbapi-examples/ndbapi_simple_dual/ndbapi_simple_dual -storage/ndb/ndbapi-examples/ndbapi_simple_index/ndbapi_simple_index -storage/ndb/src/common/mgmcommon/printConfig/*.d -storage/ndb/src/common/util/testBitmask.cpp -storage/ndb/src/cw/cpcd/ndb_cpcd -storage/ndb/src/dummy.cpp -storage/ndb/src/kernel/blocks/backup/ndb_print_backup_file -storage/ndb/src/kernel/blocks/backup/restore/ndb_restore -storage/ndb/src/kernel/blocks/dbdict/ndb_print_schema_file -storage/ndb/src/kernel/blocks/dbdih/ndb_print_sys_file -storage/ndb/src/kernel/blocks/dbtup/test_varpage -storage/ndb/src/kernel/blocks/ndb_print_file -storage/ndb/src/kernel/ndbd -storage/ndb/src/libndb.ver -storage/ndb/src/mgmclient/ndb_mgm -storage/ndb/src/mgmclient/test_cpcd/*.d -storage/ndb/src/mgmsrv/ndb_mgmd -storage/ndb/src/ndbapi/ndberror_check -storage/ndb/test/ndbapi/bank/bankCreator -storage/ndb/test/ndbapi/bank/bankMakeGL -storage/ndb/test/ndbapi/bank/bankSumAccounts -storage/ndb/test/ndbapi/bank/bankTimer -storage/ndb/test/ndbapi/bank/bankTransactionMaker -storage/ndb/test/ndbapi/bank/bankValidateAllGLs -storage/ndb/test/ndbapi/bank/testBank -storage/ndb/test/ndbapi/create_all_tabs -storage/ndb/test/ndbapi/create_tab -storage/ndb/test/ndbapi/DbAsyncGenerator -storage/ndb/test/ndbapi/DbCreate -storage/ndb/test/ndbapi/drop_all_tabs -storage/ndb/test/ndbapi/flexAsynch -storage/ndb/test/ndbapi/flexBench -storage/ndb/test/ndbapi/flexHammer -storage/ndb/test/ndbapi/flexTT -storage/ndb/test/ndbapi/ndbapi_slow_select -storage/ndb/test/ndbapi/test_event -storage/ndb/test/ndbapi/test_event_merge -storage/ndb/test/ndbapi/testBackup -storage/ndb/test/ndbapi/testBasic -storage/ndb/test/ndbapi/testBasicAsynch -storage/ndb/test/ndbapi/testBitfield -storage/ndb/test/ndbapi/testBlobs -storage/ndb/test/ndbapi/testDataBuffers -storage/ndb/test/ndbapi/testDeadlock -storage/ndb/test/ndbapi/testDict -storage/ndb/test/ndbapi/testIndex -storage/ndb/test/ndbapi/testIndexStat -storage/ndb/test/ndbapi/testInterpreter -storage/ndb/test/ndbapi/testLcp -storage/ndb/test/ndbapi/testMgm -storage/ndb/test/ndbapi/testNdbApi -storage/ndb/test/ndbapi/testNodeRestart -storage/ndb/test/ndbapi/testOIBasic -storage/ndb/test/ndbapi/testOperations -storage/ndb/test/ndbapi/testPartitioning -storage/ndb/test/ndbapi/testReadPerf -storage/ndb/test/ndbapi/testRestartGci -storage/ndb/test/ndbapi/testScan -storage/ndb/test/ndbapi/testScanInterpreter -storage/ndb/test/ndbapi/testScanPerf -storage/ndb/test/ndbapi/testSRBank -storage/ndb/test/ndbapi/testSystemRestart -storage/ndb/test/ndbapi/testTimeout -storage/ndb/test/ndbapi/testTransactions -storage/ndb/test/run-test/atrt -storage/ndb/test/tools/copy_tab -storage/ndb/test/tools/create_index -storage/ndb/test/tools/hugoCalculator -storage/ndb/test/tools/hugoFill -storage/ndb/test/tools/hugoLoad -storage/ndb/test/tools/hugoLockRecords -storage/ndb/test/tools/hugoPkDelete -storage/ndb/test/tools/hugoPkRead -storage/ndb/test/tools/hugoPkReadRecord -storage/ndb/test/tools/hugoPkUpdate -storage/ndb/test/tools/hugoScanRead -storage/ndb/test/tools/hugoScanUpdate -storage/ndb/test/tools/listen_event -storage/ndb/test/tools/ndb_cpcc -storage/ndb/test/tools/rep_latency -storage/ndb/test/tools/restart -storage/ndb/test/tools/verify_index -storage/ndb/tools/ndb_config -storage/ndb/tools/ndb_delete_all -storage/ndb/tools/ndb_desc -storage/ndb/tools/ndb_drop_index -storage/ndb/tools/ndb_drop_table -storage/ndb/tools/ndb_restore -storage/ndb/tools/ndb_select_all -storage/ndb/tools/ndb_select_count -storage/ndb/tools/ndb_show_tables -storage/ndb/tools/ndb_test_platform -storage/ndb/tools/ndb_waiter -storage/xtradb/configure.lineno -storage/xtradb/conftest.s1 -storage/xtradb/conftest.subs -storage/xtradb/ib_config.h -storage/xtradb/ib_config.h.in -storage/xtradb/mkinstalldirs -storage/xtradb/stamp-h1 -strings/*.ds? -strings/conf_to_src -strings/ctype_autoconf.c -strings/ctype_extra_sources.c -strings/str_test -strings/test_decimal -support-files/*.ini -support-files/binary-configure -support-files/MacOSX/Description.plist -support-files/MacOSX/Info.plist -support-files/MacOSX/postflight -support-files/MacOSX/postinstall -support-files/MacOSX/preflight -support-files/MacOSX/preinstall -support-files/MacOSX/ReadMe.txt -support-files/MacOSX/StartupParameters.plist -support-files/my-huge.cnf -support-files/my-innodb-heavy-4G.cnf -support-files/my-large.cnf -support-files/my-medium.cnf -support-files/my-small.cnf -support-files/mysql-3.23.25-beta.spec -support-files/mysql-3.23.26-beta.spec -support-files/mysql-3.23.27-beta.spec -support-files/mysql-3.23.28-gamma.spec -support-files/mysql-3.23.29-gamma.spec -support-files/mysql-log-rotate -support-files/mysql.server -support-files/mysql.spec -support-files/mysqld_multi.server -support-files/ndb-config-2-node.ini -support-files/wsrep.cnf -support-files/wsrep_notify -TAGS -test/ndbapi/bank/bankCreator -test/ndbapi/bank/bankMakeGL -test/ndbapi/bank/bankSumAccounts -test/ndbapi/bank/bankTimer -test/ndbapi/bank/bankTransactionMaker -test/ndbapi/bank/bankValidateAllGLs -test/ndbapi/bank/testBank -test/ndbapi/create_all_tabs -test/ndbapi/create_tab -test/ndbapi/drop_all_tabs -test/ndbapi/flexAsynch -test/ndbapi/flexBench -test/ndbapi/flexHammer -test/ndbapi/flexTT -test/ndbapi/test_event -test/ndbapi/testBackup -test/ndbapi/testBasic -test/ndbapi/testBasicAsynch -test/ndbapi/testBlobs -test/ndbapi/testDataBuffers -test/ndbapi/testDeadlock -test/ndbapi/testDict -test/ndbapi/testIndex -test/ndbapi/testMgm -test/ndbapi/testNdbApi -test/ndbapi/testNodeRestart -test/ndbapi/testOIBasic -test/ndbapi/testOperations -test/ndbapi/testRestartGci -test/ndbapi/testScan -test/ndbapi/testScanInterpreter -test/ndbapi/testScanPerf -test/ndbapi/testSystemRestart -test/ndbapi/testTimeout -test/ndbapi/testTransactions -test/run-test/atrt -test/tools/copy_tab -test/tools/create_index -test/tools/hugoCalculator -test/tools/hugoFill -test/tools/hugoLoad -test/tools/hugoLockRecords -test/tools/hugoPkDelete -test/tools/hugoPkRead -test/tools/hugoPkReadRecord -test/tools/hugoPkUpdate -test/tools/hugoScanRead -test/tools/hugoScanUpdate -test/tools/ndb_cpcc -test/tools/restart -test/tools/verify_index -test1/* -test?.MA? -test_xml -tests/*.ds? -tests/bug25714 -tests/client_test -tests/connect_test -tests/mysql_client_test -tests/async_queries -thr_insert_test/* -thr_test/* -thread_test -tmp -tmp/* -tools/my_vsnprintf.c -tools/mysqlmanager -tools/mysqlmngd -tools/mysqltestmanager -tools/mysys_priv.h -unittest/examples/*.t -unittest/maria_control -unittest/mysys/*.t -unittest/mysys/mf_pagecache_consist_1k-t-big -unittest/mysys/mf_pagecache_consist_1kHC-t-big -unittest/mysys/mf_pagecache_consist_1kRD-t-big -unittest/mysys/mf_pagecache_consist_1kWR-t-big -unittest/mysys/mf_pagecache_consist_64k-t-big -unittest/mysys/mf_pagecache_consist_64kHC-t-big -unittest/mysys/mf_pagecache_consist_64kRD-t-big -unittest/mysys/mf_pagecache_consist_64kWR-t-big -unittest/mysys/mf_pagecache_single_64k-t-big -unittest/mytap/t/*.t -unittest/page_cache_test_file_1 -unittest/pagecache_debug.log -unittest/tmp/* -unittest/unit -vi.h -vio/*.ds? -vio/test-ssl -vio/test-sslclient -vio/test-sslserver -vio/viotest-ssl -vio/viotest-sslconnect.cpp -vio/viotest.cpp -ylwrap -zlib/*.ds? -sql-bench/test-table-elimination -sql/share/bulgarian -sql/share/czech -sql/share/danish -sql/share/dutch -sql/share/english -sql/share/estonian -sql/share/french -sql/share/german -sql/share/greek -sql/share/hungarian -sql/share/italian -sql/share/japanese -sql/share/japanese-sjis -sql/share/korean -sql/share/norwegian -sql/share/norwegian-ny -sql/share/polish -sql/share/portuguese -sql/share/romanian -sql/share/russian -sql/share/serbian -sql/share/slovak -sql/share/spanish -sql/share/swedish -sql/share/ukrainian -scripts/wsrep_sst_common -scripts/wsrep_sst_mysqldump -scripts/wsrep_sst_rsync -scripts/wsrep_sst_xtrabackup -scripts/wsrep_sst_xtrabackup-v2 -CPackConfig.cmake -CPackSourceConfig.cmake -Docs/INFO_BIN -Docs/INFO_SRC -tags -Testing -info_macros.cmake -VERSION.dep -configure -libmysqld/examples/mysqltest.cc -extra/libevent/event-config.h -libmysqld/opt_table_elimination.cc -libmysqld/ha_federatedx.cc -libmysqld/multi_range_read.cc -libmysqld/opt_index_cond_pushdown.cc -libmysqld/opt_subselect.cc -libmysqld/sql_join_cache.cc -client/rpl_filter.cc -client/rpl_filter.h -client/sql_list.cc -client/sql_list.h -libmysqld/create_options.cc -libmysqld/sql_expression_cache.cc -mysql-test/mtr_command -scripts/convert-debug-for-diff -client/strings_def.h -libmysql/strings_def.h -libmysql_r/strings_def.h -storage/maria/aria_log_control -scripts/mytop -include/*.h.tmp -cmd-line-utils/libedit/emacs.h -mysql-test/collections/default.release -support-files/plugins.files -client/mysql_plugin -*.resource.txt -plugin/handler_socket/perl-Net-HandlerSocket/HandlerSocket.c -plugin/handler_socket/perl-Net-HandlerSocket/blib -plugin/handler_socket/perl-Net-HandlerSocket/pm_to_blib -plugin/handler_socket/perl-Net-HandlerSocket/HandlerSocket.bs -plugin/handler_socket/perl-Net-HandlerSocket/Makefile.PL -libmysqld/libmysqld_exports_file.cc -libmysqld/gcalc_slicescan.cc -libmysqld/gcalc_tools.cc -sql/share/errmsg.sys -sql/share/mysql -install_manifest.txt -sql/db.opt -./_CPack_Packages -./install_manifest_*.txt -typescript -mysql-test/collections/default.release.done -sql/sql_yacc.hh -packaging/solaris/postinstall-solaris -extra/jemalloc/jemalloc-* -extra/jemalloc/build -*.tdb -storage/tokudb/ft-index/CTestCustom.cmake -storage/tokudb/ft-index/xz -storage/tokudb/ft-index/buildheader/db.h -storage/tokudb/ft-index/buildheader/make_tdb -storage/tokudb/ft-index/buildheader/runcat.sh -storage/tokudb/ft-index/ft/log_code.cc -storage/tokudb/ft-index/ft/log_header.h -storage/tokudb/ft-index/ft/log_print.cc -storage/tokudb/ft-index/ft/logformat -storage/tokudb/ft-index/portability/merge_archives_tokuportability_static.cmake -storage/tokudb/ft-index/portability/toku_config.h -storage/tokudb/ft-index/portability/tokuportability_static_depends.cc -storage/tokudb/ft-index/src/merge_archives_tokufractaltree_static.cmake -storage/tokudb/ft-index/src/tokufractaltree_static_depends.cc -storage/tokudb/ft-index/tools/ba_replay -storage/tokudb/ft-index/tools/ftverify -storage/tokudb/ft-index/tools/tdb-recover -storage/tokudb/ft-index/tools/tdb_logprint -storage/tokudb/ft-index/tools/tokudb_dump -storage/tokudb/ft-index/tools/tokuftdump -libmysql/libmysql_versions.ld -scripts/mysql_config.pl diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000000..cdfedef671f --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +*.c diff=cpp +*.h diff=cpp +*.cc diff=cpp +*.ic diff=cpp +*.cpp diff=cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..fc97ceb325e --- /dev/null +++ b/.gitignore @@ -0,0 +1,232 @@ +*-t +*.a +*.ctest +*.o +*.reject +*.so +*.so.* +*.spec +*~ +.*.swp +*.ninja +.ninja_* +.gdb_history +errmsg.sys +typescript +CMakeCache.txt +CMakeFiles/ +CPackConfig.cmake +CPackSourceConfig.cmake +CTestTestfile.cmake +Docs/INFO_BIN +Docs/INFO_SRC +Makefile +TAGS +Testing/ +VERSION.dep +configure +client/async_example +client/mysql +client/mysql_plugin +client/mysql_upgrade +client/mysqladmin +client/mysqlbinlog +client/mysqlcheck +client/mysqldump +client/mysqlimport +client/mysqlshow +client/mysqlslap +client/mysqltest +cmake_install.cmake +dbug/*.r +dbug/factorial +dbug/tests +dbug/user.ps +dbug/user.t +extra/comp_err +extra/innochecksum +extra/jemalloc/build/ +extra/jemalloc/tmp/ +extra/my_print_defaults +extra/mysql_waitpid +extra/perror +extra/replace +extra/resolve_stack_dump +extra/resolveip +import_executables.cmake +include/*.h.tmp +include/config.h +include/my_config.h +include/mysql_version.h +include/mysqld_ername.h +include/mysqld_error.h +include/sql_state.h +info_macros.cmake +libmysql*/libmysql*_exports_file.cc +libmysql*/merge_archives_mysql*.cmake +libmysql*/mysql*_depends.c +libmysql/libmysql_versions.ld +libmysqld/examples/mysql_client_test_embedded +libmysqld/examples/mysql_embedded +libmysqld/examples/mysqltest_embedded +make_dist.cmake +mariadb-*.*.*.tar.gz +mariadb-*.*.*/ +mysql-test/lib/My/SafeProcess/my_safe_process +mysql-test/mtr +mysql-test/mysql-test-run +mysql-test/var +mysys/thr_lock +mysys/thr_timer +packaging/rpm-oel/mysql.spec +packaging/rpm-uln/mysql.10.0.11.spec +packaging/solaris/postinstall-solaris +pcre/config.h +pcre/pcre*test.sh +pcre/pcre.h +pcre/pcre_chartables.c +pcre/pcregrep +pcre/pcretest +pcre/test*grep +scripts/comp_sql +scripts/make_binary_distribution +scripts/msql2mysql +scripts/mysql_config +scripts/mysql_config.pl +scripts/mysql_convert_table_format +scripts/mysql_find_rows +scripts/mysql_fix_extensions +scripts/mysql_fix_privilege_tables.sql +scripts/mysql_fix_privilege_tables_sql.c +scripts/mysql_install_db +scripts/mysql_secure_installation +scripts/mysql_setpermission +scripts/mysql_zap +scripts/mysqlaccess +scripts/mysqlbug +scripts/mysqld_multi +scripts/mysqld_safe +scripts/mysqldumpslow +scripts/mysqlhotcopy +scripts/mytop +scripts/wsrep_sst_common +scripts/wsrep_sst_mysqldump +scripts/wsrep_sst_rsync +scripts/wsrep_sst_xtrabackup +scripts/wsrep_sst_xtrabackup-v2 +sql-bench/bench-count-distinct +sql-bench/bench-init.pl +sql-bench/compare-results +sql-bench/copy-db +sql-bench/crash-me +sql-bench/graph-compare-results +sql-bench/innotest1 +sql-bench/innotest1a +sql-bench/innotest1b +sql-bench/innotest2 +sql-bench/innotest2a +sql-bench/innotest2b +sql-bench/run-all-tests +sql-bench/server-cfg +sql-bench/test-ATIS +sql-bench/test-alter-table +sql-bench/test-big-tables +sql-bench/test-connect +sql-bench/test-create +sql-bench/test-insert +sql-bench/test-select +sql-bench/test-table-elimination +sql-bench/test-transactions +sql-bench/test-wisconsin +sql/gen_lex_hash +sql/lex_hash.h +sql/mysql_tzinfo_to_sql +sql/mysqld +sql/sql_builtin.cc +sql/sql_yacc.cc +sql/sql_yacc.h +storage/heap/hp_test1 +storage/heap/hp_test2 +storage/maria/aria_chk +storage/maria/aria_dump_log +storage/maria/aria_ftdump +storage/maria/aria_pack +storage/maria/aria_read_log +storage/maria/ma_rt_test +storage/maria/ma_sp_test +storage/maria/ma_test1 +storage/maria/ma_test2 +storage/maria/ma_test3 +storage/myisam/mi_test1 +storage/myisam/mi_test2 +storage/myisam/mi_test3 +storage/myisam/myisam_ftdump +storage/myisam/myisamchk +storage/myisam/myisamlog +storage/myisam/myisampack +storage/myisam/rt_test +storage/myisam/sp_test +storage/perfschema/gen_pfs_lex_token +storage/perfschema/pfs_lex_token.h +storage/tokudb/ft-index/buildheader/db.h +storage/tokudb/ft-index/buildheader/make_tdb +storage/tokudb/ft-index/buildheader/runcat.sh +storage/tokudb/ft-index/ft/log_code.cc +storage/tokudb/ft-index/ft/log_header.h +storage/tokudb/ft-index/ft/log_print.cc +storage/tokudb/ft-index/ft/logformat +storage/tokudb/ft-index/ft/ftverify +storage/tokudb/ft-index/ft/tdb-recover +storage/tokudb/ft-index/ft/tdb_logprint +storage/tokudb/ft-index/ft/tokuftdump +storage/tokudb/ft-index/portability/merge_archives_tokuportability_static.cmake +storage/tokudb/ft-index/portability/toku_config.h +storage/tokudb/ft-index/portability/tokuportability_static_depends.cc +storage/tokudb/ft-index/src/merge_archives_tokufractaltree_static.cmake +storage/tokudb/ft-index/src/tokufractaltree_static_depends.cc +storage/tokudb/ft-index/toku_include/toku_config.h +storage/tokudb/ft-index/tools/ba_replay +storage/tokudb/ft-index/tools/ftverify +storage/tokudb/ft-index/tools/tdb-recover +storage/tokudb/ft-index/tools/tdb_logprint +storage/tokudb/ft-index/tools/tokudb_dump +storage/tokudb/ft-index/tools/tokudb_gen +storage/tokudb/ft-index/tools/tokudb_load +storage/tokudb/ft-index/tools/tokuftdump +storage/tokudb/ft-index/ft/ftverify +storage/tokudb/ft-index/ft/tdb-recover +storage/tokudb/ft-index/ft/tdb_logprint +storage/tokudb/ft-index/ft/tokuftdump +storage/tokudb/ft-index/xz/ +support-files/MySQL-shared-compat.spec +support-files/binary-configure +support-files/config.huge.ini +support-files/config.medium.ini +support-files/config.small.ini +support-files/mariadb.pc +support-files/my-huge.cnf +support-files/my-innodb-heavy-4G.cnf +support-files/my-large.cnf +support-files/my-medium.cnf +support-files/my-small.cnf +support-files/mysql-log-rotate +support-files/mysql.10.0.11.spec +support-files/mysql.server +support-files/mysql.spec +support-files/mysqld_multi.server +support-files/wsrep.cnf +support-files/wsrep_notify +tags +tests/async_queries +tests/bug25714 +tests/mysql_client_test +storage/mroonga/config.sh +storage/mroonga/mrn_version.h +storage/mroonga/data/install.sql +storage/mroonga/vendor/groonga/config.h +storage/mroonga/vendor/groonga/config.sh +storage/mroonga/vendor/groonga/groonga.pc +storage/mroonga/vendor/groonga/src/grnslap +storage/mroonga/vendor/groonga/src/groonga +storage/mroonga/vendor/groonga/src/groonga-benchmark +storage/mroonga/vendor/groonga/src/suggest/groonga-suggest-create-dataset diff --git a/CMakeLists.txt b/CMakeLists.txt index fe2ebf1e4a3..8cdced71bcf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -358,6 +358,11 @@ MYSQL_CHECK_READLINE() CHECK_JEMALLOC() +IF(CMAKE_CROSSCOMPILING) + SET(IMPORT_EXECUTABLES "IMPORTFILE-NOTFOUND" CACHE FILEPATH "Path to import_executables.cmake from a native build") + INCLUDE(${IMPORT_EXECUTABLES}) +ENDIF() + # # Setup maintainer mode options by the end. Platform checks are # not run with the warning options as to not perturb fragile checks @@ -439,7 +444,8 @@ CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/mysql_version.h.in CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc.in ${CMAKE_BINARY_DIR}/sql/sql_builtin.cc) CONFIGURE_FILE( - ${CMAKE_SOURCE_DIR}/cmake/info_macros.cmake.in ${CMAKE_BINARY_DIR}/info_macros.cmake @ONLY) + ${CMAKE_SOURCE_DIR}/cmake/info_macros.cmake.in + ${CMAKE_BINARY_DIR}/info_macros.cmake @ONLY) IF(DEB) CONFIGURE_FILE( @@ -451,7 +457,7 @@ ENDIF(DEB) INCLUDE(${CMAKE_BINARY_DIR}/info_macros.cmake) # Source: This can be done during the cmake phase, all information is # available, but should be repeated on each "make" just in case someone -# does "cmake ; make ; bzr pull ; make". +# does "cmake ; make ; git pull ; make". CREATE_INFO_SRC(${CMAKE_BINARY_DIR}/Docs) ADD_CUSTOM_TARGET(INFO_SRC ALL COMMAND ${CMAKE_COMMAND} -P ${CMAKE_SOURCE_DIR}/cmake/info_src.cmake @@ -1,4 +1,4 @@ MYSQL_VERSION_MAJOR=5 MYSQL_VERSION_MINOR=5 -MYSQL_VERSION_PATCH=41 +MYSQL_VERSION_PATCH=42 MYSQL_VERSION_EXTRA= diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c index a4b5d856d44..005e925c03b 100644 --- a/client/mysqlcheck.c +++ b/client/mysqlcheck.c @@ -514,9 +514,6 @@ static uint fixed_name_length(const char *name) { if (*p == '`') extra_length++; - else if (*p == '.') - extra_length+= 2; - } DBUG_RETURN((uint) ((p - name) + extra_length)); } @@ -530,11 +527,6 @@ static char *fix_table_name(char *dest, char *src) for (; *src; src++) { switch (*src) { - case '.': /* add backticks around '.' */ - *dest++= '`'; - *dest++= '.'; - *dest++= '`'; - break; case '`': /* escape backtick character */ *dest++= '`'; /* fall through */ @@ -824,13 +816,17 @@ static void print_result() { MYSQL_RES *res; MYSQL_ROW row; - char prev[(NAME_LEN+9)*2+2]; + char prev[(NAME_LEN+9)*3+2]; char prev_alter[MAX_ALTER_STR_SIZE]; + char *db_name; + uint length_of_db; uint i; my_bool found_error=0, table_rebuild=0; DBUG_ENTER("print_result"); res = mysql_use_result(sock); + db_name= sock->db; + length_of_db= strlen(db_name); prev[0] = '\0'; prev_alter[0]= 0; @@ -854,10 +850,16 @@ static void print_result() if (prev_alter[0]) insert_dynamic(&alter_table_cmds, (uchar*) prev_alter); else - insert_dynamic(&tables4rebuild, (uchar*) prev); + { + char *table_name= prev + (length_of_db+1); + insert_dynamic(&tables4rebuild, (uchar*) table_name); + } } else - insert_dynamic(&tables4repair, (uchar*) prev); + { + char *table_name= prev + (length_of_db+1); + insert_dynamic(&tables4repair, (uchar*) table_name); + } } found_error=0; table_rebuild=0; @@ -917,10 +919,16 @@ static void print_result() if (prev_alter[0]) insert_dynamic(&alter_table_cmds, (uchar*) prev_alter); else - insert_dynamic(&tables4rebuild, (uchar*) prev); + { + char *table_name= prev + (length_of_db+1); + insert_dynamic(&tables4rebuild, (uchar*) table_name); + } } else - insert_dynamic(&tables4repair, (uchar*) prev); + { + char *table_name= prev + (length_of_db+1); + insert_dynamic(&tables4repair, (uchar*) table_name); + } } mysql_free_result(res); DBUG_VOID_RETURN; diff --git a/client/mysqltest.cc b/client/mysqltest.cc index 6ead479b94e..9b925d6bfb8 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -5883,7 +5883,7 @@ void do_connect(struct st_command *command) { int con_port= opt_port; char *con_options; - char *ssl_cipher= 0; + char *ssl_cipher __attribute__((unused))= 0; my_bool con_ssl= 0, con_compress= 0; my_bool con_pipe= 0; my_bool con_shm __attribute__ ((unused))= 0; diff --git a/cmake/cpack_rpm.cmake b/cmake/cpack_rpm.cmake index 8b7a414fd69..7353fb3afdd 100644 --- a/cmake/cpack_rpm.cmake +++ b/cmake/cpack_rpm.cmake @@ -189,6 +189,7 @@ ELSEIF(RPM MATCHES "fedora" OR RPM MATCHES "(rhel|centos)7") ALTERNATIVE_NAME("client" "mysql") ALTERNATIVE_NAME("devel" "mariadb-devel") ALTERNATIVE_NAME("server" "mariadb-server") + ALTERNATIVE_NAME("server" "mysql-compat-server") ALTERNATIVE_NAME("shared" "mariadb-libs") ALTERNATIVE_NAME("shared" "mysql-libs") ALTERNATIVE_NAME("test" "mariadb-test") diff --git a/cmake/cpack_source_ignore_files.cmake b/cmake/cpack_source_ignore_files.cmake index 5db383ae73f..0874311428e 100644 --- a/cmake/cpack_source_ignore_files.cmake +++ b/cmake/cpack_source_ignore_files.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -14,9 +14,6 @@ # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA SET(CPACK_SOURCE_IGNORE_FILES -\\\\.bzr/ -\\\\.bzr-mysql -\\\\.bzrignore CMakeCache\\\\.txt cmake_dist\\\\.cmake CPackSourceConfig\\\\.cmake diff --git a/cmake/info_macros.cmake.in b/cmake/info_macros.cmake.in index 9f40a419c61..fc2f8849337 100644 --- a/cmake/info_macros.cmake.in +++ b/cmake/info_macros.cmake.in @@ -1,4 +1,4 @@ -# Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -23,11 +23,14 @@ # If further variables are used in this file, add them to this list. SET(VERSION "@VERSION@") +SET(MAJOR_VERSION "@MAJOR_VERSION@") +SET(MINOR_VERSION "@MINOR_VERSION@") +SET(PATCH_VERSION "@PATCH_VERSION@") SET(CMAKE_SOURCE_DIR "@CMAKE_SOURCE_DIR@") SET(CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@") SET(CMAKE_GENERATOR "@CMAKE_GENERATOR@") SET(CMAKE_SIZEOF_VOID_P "@CMAKE_SIZEOF_VOID_P@") -SET(BZR_EXECUTABLE "@BZR_EXECUTABLE@") +SET(GIT_EXECUTABLE "@GIT_EXECUTABLE@") SET(CMAKE_CROSSCOMPILING "@CMAKE_CROSSCOMPILING@") SET(CMAKE_HOST_SYSTEM "@CMAKE_HOST_SYSTEM@") SET(CMAKE_HOST_SYSTEM_PROCESSOR "@CMAKE_HOST_SYSTEM_PROCESSOR@") @@ -36,27 +39,51 @@ SET(CMAKE_SYSTEM_PROCESSOR "@CMAKE_SYSTEM_PROCESSOR@") # Create an "INFO_SRC" file with information about the source (only). -# We use "bzr version-info", if possible, and the "VERSION" contents. +# We use "git log", if possible, and the "VERSION" contents. # -# Outside development (BZR tree), the "INFO_SRC" file will not be modified +# Outside development (git tree), the "INFO_SRC" file will not be modified # provided it exists (from "make dist" or a source tarball creation). MACRO(CREATE_INFO_SRC target_dir) SET(INFO_SRC "${target_dir}/INFO_SRC") - IF(EXISTS ${CMAKE_SOURCE_DIR}/.bzr) - # Sources are in a BZR repository: Always update. + SET(PERLSCRIPT + "use warnings; use POSIX qw(strftime); " + "print strftime \"%F %T %z\", localtime;") + EXECUTE_PROCESS( + COMMAND perl -e "${PERLSCRIPT}" + RESULT_VARIABLE result + OUTPUT_VARIABLE bdate + ERROR_VARIABLE error + ) + IF(error) + MESSAGE(STATUS "Could not determine build-date: <${error}>") + ENDIF() + + IF(GIT_EXECUTABLE AND EXISTS ${CMAKE_SOURCE_DIR}/.git) + # Sources are in a GIT repository: Always update. + EXECUTE_PROCESS( + COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + OUTPUT_VARIABLE bname + ) + EXECUTE_PROCESS( - COMMAND ${BZR_EXECUTABLE} version-info ${CMAKE_SOURCE_DIR} + COMMAND ${GIT_EXECUTABLE} log -1 + --pretty="commit: %H%ndate: %ci%nbuild-date: ${bdate} %nshort: %h%nbranch: ${bname}" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} OUTPUT_VARIABLE VERSION_INFO - RESULT_VARIABLE RESULT ) + + ## Output from git is quoted with "", remove them. + STRING(REPLACE "\"" "" VERSION_INFO "${VERSION_INFO}") FILE(WRITE ${INFO_SRC} "${VERSION_INFO}\n") # to debug, add: FILE(APPEND ${INFO_SRC} "\nResult ${RESULT}\n") # For better readability ... - FILE(APPEND ${INFO_SRC} "\nMySQL source ${VERSION}\n") + FILE(APPEND ${INFO_SRC} + "MySQL source ${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}\n") ELSEIF(EXISTS ${INFO_SRC}) - # Outside a BZR tree, there is no need to change an existing "INFO_SRC", + # Outside a git tree, there is no need to change an existing "INFO_SRC", # it cannot be improved. ELSEIF(EXISTS ${CMAKE_SOURCE_DIR}/Docs/INFO_SRC) # If we are building from a source distribution, it also contains "INFO_SRC". diff --git a/cmake/info_src.cmake b/cmake/info_src.cmake index 97776b70901..ce9873cc9d0 100644 --- a/cmake/info_src.cmake +++ b/cmake/info_src.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. +# Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved. # # 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 @@ -16,11 +16,11 @@ # The sole purpose of this cmake control file is to create the "INFO_SRC" file. -# As long as and "bzr pull" (or "bzr commit") is followed by a "cmake", +# As long as and "git pull" (or "git commit") is followed by a "cmake", # the call in top level "CMakeLists.txt" is sufficient. # This file is to provide a separate target for the "make" phase, -# to ensure the BZR revision-id is correct even after a sequence -# cmake ; make ; bzr pull ; make +# to ensure the git commit hash is correct even after a sequence +# cmake ; make ; git pull ; make # Get the macros which handle the "INFO_*" files. diff --git a/cmake/maintainer.cmake b/cmake/maintainer.cmake index 5d3ce4d1f75..872d61d9aac 100644 --- a/cmake/maintainer.cmake +++ b/cmake/maintainer.cmake @@ -36,8 +36,8 @@ ENDIF() # Turn on Werror (warning => error) when using maintainer mode. IF(MYSQL_MAINTAINER_MODE MATCHES "ON") - SET(MY_C_WARNING_FLAGS "${MY_C_WARNING_FLAGS} -Werror") - SET(MY_CXX_WARNING_FLAGS "${MY_CXX_WARNING_FLAGS} -Werror") + SET(MY_C_WARNING_FLAGS "${MY_C_WARNING_FLAGS} -DFORCE_INIT_OF_VARS -Werror") + SET(MY_CXX_WARNING_FLAGS "${MY_CXX_WARNING_FLAGS} -DFORCE_INIT_OF_VARS -Werror") ENDIF() # Set warning flags for GCC/Clang diff --git a/cmake/make_dist.cmake.in b/cmake/make_dist.cmake.in index ada27c36926..c561baaa415 100644 --- a/cmake/make_dist.cmake.in +++ b/cmake/make_dist.cmake.in @@ -22,13 +22,12 @@ SET(CMAKE_BINARY_DIR "@CMAKE_BINARY_DIR@") SET(CPACK_SOURCE_PACKAGE_FILE_NAME "@CPACK_SOURCE_PACKAGE_FILE_NAME@") SET(CMAKE_CPACK_COMMAND "@CMAKE_CPACK_COMMAND@") SET(CMAKE_COMMAND "@CMAKE_COMMAND@") -SET(BZR_EXECUTABLE "@BZR_EXECUTABLE@") +SET(GIT_EXECUTABLE "@GIT_EXECUTABLE@") SET(GTAR_EXECUTABLE "@GTAR_EXECUTABLE@") SET(TAR_EXECUTABLE "@TAR_EXECUTABLE@") SET(CMAKE_GENERATOR "@CMAKE_GENERATOR@") SET(CMAKE_MAKE_PROGRAM "@CMAKE_MAKE_PROGRAM@") SET(CMAKE_SYSTEM_NAME "@CMAKE_SYSTEM_NAME@") -SET(PLUGIN_REPOS "@PLUGIN_REPOS@") SET(VERSION "@VERSION@") @@ -40,38 +39,21 @@ SET(PACKAGE_DIR ${CMAKE_BINARY_DIR}/${CPACK_SOURCE_PACKAGE_FILE_NAME}) FILE(REMOVE_RECURSE ${PACKAGE_DIR}) FILE(REMOVE ${PACKAGE_DIR}.tar.gz ) -IF(BZR_EXECUTABLE) - MESSAGE(STATUS "Running bzr export") +IF(GIT_EXECUTABLE) + MESSAGE(STATUS "Running git checkout-index") EXECUTE_PROCESS( - COMMAND "${BZR_EXECUTABLE}" export - ${PACKAGE_DIR} + COMMAND "${GIT_EXECUTABLE}" checkout-index --all --prefix=${PACKAGE_DIR}/ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} RESULT_VARIABLE RESULT ) IF(NOT RESULT EQUAL 0) - SET(BZR_EXECUTABLE) + SET(GIT_EXECUTABLE) ENDIF() ENDIF() -IF(BZR_EXECUTABLE) - FOREACH(REPO ${PLUGIN_REPOS}) - GET_FILENAME_COMPONENT(PLUGIN_NAME ${REPO} NAME) - SET(DEST ${PACKAGE_DIR}/plugin/${PLUGIN_NAME}) - MESSAGE(STATUS "Running bzr export for plugin/${PLUGIN_NAME}") - EXECUTE_PROCESS( - COMMAND "${BZR_EXECUTABLE}" export ${DEST} - WORKING_DIRECTORY ${REPO} - RESULT_VARIABLE RESULT - ) - IF(NOT RESULT EQUAL 0) - MESSAGE(STATUS "bzr export failed") - ENDIF() - ENDFOREACH() -ENDIF() - -IF(NOT BZR_EXECUTABLE) - MESSAGE(STATUS "bzr not found or source dir is not a repo, use CPack") +IF(NOT GIT_EXECUTABLE) + MESSAGE(STATUS "git not found or source dir is not a repo, use CPack") IF(CMAKE_SOURCE_DIR STREQUAL CMAKE_BINARY_DIR) # In-source build is the worst option, we have to cleanup source tree. @@ -119,15 +101,6 @@ CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.h CONFIGURE_FILE(${CMAKE_BINARY_DIR}/sql/sql_yacc.cc ${PACKAGE_DIR}/sql/sql_yacc.cc COPYONLY) -# Copy spec files -SET(SPECFILENAME "mysql.${VERSION}.spec") -IF("${VERSION}" MATCHES "-ndb-") - STRING(REGEX REPLACE "^.*-ndb-" "" NDBVERSION "${VERSION}") - SET(SPECFILENAME "mysql-cluster-${NDBVERSION}.spec") -ENDIF() -CONFIGURE_FILE(${CMAKE_BINARY_DIR}/support-files/${SPECFILENAME} - ${PACKAGE_DIR}/support-files/${SPECFILENAME} COPYONLY) - # Add documentation, if user has specified where to find them IF(MYSQL_DOCS_LOCATION) MESSAGE("Copying documentation files from " ${MYSQL_DOCS_LOCATION}) diff --git a/cmake/plugin.cmake b/cmake/plugin.cmake index fe17f6d30db..0072ac1c0e2 100644 --- a/cmake/plugin.cmake +++ b/cmake/plugin.cmake @@ -227,11 +227,4 @@ MACRO(CONFIGURE_PLUGINS) ADD_SUBDIRECTORY(${dir}) ENDIF() ENDFOREACH() - FOREACH(dir ${dirs_plugin}) - IF (EXISTS ${dir}/.bzr) - MESSAGE(STATUS "Found repo ${dir}/.bzr") - LIST(APPEND PLUGIN_BZR_REPOS "${dir}") - ENDIF() - ENDFOREACH() - SET(PLUGIN_REPOS "${PLUGIN_BZR_REPOS}" CACHE INTERNAL "") ENDMACRO() diff --git a/debian/dist/Debian/mariadb-galera-server-5.5.files.in b/debian/dist/Debian/mariadb-galera-server-5.5.files.in index b7be2c77634..a5fda79edd5 100644 --- a/debian/dist/Debian/mariadb-galera-server-5.5.files.in +++ b/debian/dist/Debian/mariadb-galera-server-5.5.files.in @@ -1,6 +1,5 @@ usr/sbin/mysqld usr/lib/mysql/plugin/ha_innodb.so -usr/lib/mysql/plugin/ha_oqgraph.so usr/lib/mysql/plugin/sphinx.so usr/lib/mysql/plugin/auth_socket.so usr/lib/mysql/plugin/auth_pam.so @@ -105,5 +104,6 @@ usr/share/mysql/mysql_system_tables.sql usr/share/mysql/mysql_performance_tables.sql usr/share/mysql/mysql_test_data_timezone.sql @TOKUDB_DEB_FILES@ +@OQGRAPH_DEB_FILES@ usr/share/mysql/wsrep.cnf usr/share/mysql/wsrep_notify diff --git a/debian/dist/Ubuntu/mariadb-galera-server-5.5.files.in b/debian/dist/Ubuntu/mariadb-galera-server-5.5.files.in index 308710858d7..c333e85c784 100644 --- a/debian/dist/Ubuntu/mariadb-galera-server-5.5.files.in +++ b/debian/dist/Ubuntu/mariadb-galera-server-5.5.files.in @@ -1,6 +1,5 @@ usr/sbin/mysqld usr/lib/mysql/plugin/ha_innodb.so -usr/lib/mysql/plugin/ha_oqgraph.so usr/lib/mysql/plugin/sphinx.so usr/lib/mysql/plugin/auth_socket.so usr/lib/mysql/plugin/auth_pam.so @@ -107,5 +106,6 @@ usr/share/mysql/mysql_system_tables.sql usr/share/mysql/mysql_performance_tables.sql usr/share/mysql/mysql_test_data_timezone.sql @TOKUDB_DEB_FILES@ +@OQGRAPH_DEB_FILES@ usr/share/mysql/wsrep.cnf usr/share/mysql/wsrep_notify diff --git a/debian/dist/Ubuntu/mariadb-galera-server-5.5.postinst b/debian/dist/Ubuntu/mariadb-galera-server-5.5.postinst index 1c7aa37f69f..920868e22e6 100644 --- a/debian/dist/Ubuntu/mariadb-galera-server-5.5.postinst +++ b/debian/dist/Ubuntu/mariadb-galera-server-5.5.postinst @@ -213,7 +213,7 @@ EOF # admin might already have chosen to remove one or more plugins. Newlines are necessary. install_plugins=`/bin/echo -e \ "USE mysql;\n" \ - "CREATE TABLE plugin (name char(64) COLLATE utf8_bin NOT NULL DEFAULT '', " \ + "CREATE TABLE IF NOT EXISTS plugin (name char(64) COLLATE utf8_bin NOT NULL DEFAULT '', " \ " dl char(128) COLLATE utf8_bin NOT NULL DEFAULT '', " \ " PRIMARY KEY (name)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='MySQL plugins';" ` diff --git a/extra/yassl/README b/extra/yassl/README index 30c7af4a702..da399c3d141 100644 --- a/extra/yassl/README +++ b/extra/yassl/README @@ -12,6 +12,16 @@ before calling SSL_new(); *** end Note *** +yaSSL Release notes, version 2.3.7 (12/10/2014) + This release of yaSSL fixes the potential to process duplicate handshake + messages by explicitly marking/checking received handshake messages. + +yaSSL Release notes, version 2.3.6 (11/25/2014) + + This release of yaSSL fixes some valgrind warnings/errors including + uninitialized reads and off by one index errors induced from fuzzing + the handshake. These were reported by Oracle. + yaSSL Release notes, version 2.3.5 (9/29/2014) This release of yaSSL fixes an RSA Padding check vulnerability reported by diff --git a/extra/yassl/examples/client/client.cpp b/extra/yassl/examples/client/client.cpp index fc05b66aaf7..102ed61734c 100644 --- a/extra/yassl/examples/client/client.cpp +++ b/extra/yassl/examples/client/client.cpp @@ -18,6 +18,10 @@ /* client.cpp */ +// takes an optional command line argument of cipher list to make scripting +// easier + + #include "../../testsuite/test.hpp" //#define TEST_RESUME @@ -73,11 +77,16 @@ void client_test(void* args) #ifdef NON_BLOCKING tcp_set_nonblocking(sockfd); #endif - SSL_METHOD* method = TLSv1_client_method(); SSL_CTX* ctx = SSL_CTX_new(method); set_certs(ctx); + if (argc >= 2) { + printf("setting cipher list to %s\n", argv[1]); + if (SSL_CTX_set_cipher_list(ctx, argv[1]) != SSL_SUCCESS) { + ClientError(ctx, NULL, sockfd, "set_cipher_list error\n"); + } + } SSL* ssl = SSL_new(ctx); SSL_set_fd(ssl, sockfd); diff --git a/extra/yassl/examples/server/server.cpp b/extra/yassl/examples/server/server.cpp index 173ce8fb548..1540f6d3689 100644 --- a/extra/yassl/examples/server/server.cpp +++ b/extra/yassl/examples/server/server.cpp @@ -18,6 +18,9 @@ /* server.cpp */ +// takes 2 optional command line argument to make scripting +// if the first command line argument is 'n' client auth is disabled +// if the second command line argument is 'd' DSA certs are used instead of RSA #include "../../testsuite/test.hpp" @@ -69,6 +72,9 @@ THREAD_RETURN YASSL_API server_test(void* args) char** argv = 0; set_args(argc, argv, *static_cast<func_args*>(args)); +#ifdef SERVER_READY_FILE + set_file_ready("server_ready", *static_cast<func_args*>(args)); +#endif tcp_accept(sockfd, clientfd, *static_cast<func_args*>(args)); tcp_close(sockfd); @@ -77,8 +83,21 @@ THREAD_RETURN YASSL_API server_test(void* args) SSL_CTX* ctx = SSL_CTX_new(method); //SSL_CTX_set_cipher_list(ctx, "RC4-SHA:RC4-MD5"); - SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, 0); - set_serverCerts(ctx); + + // should we disable client auth + if (argc >= 2 && argv[1][0] == 'n') + printf("disabling client auth\n"); + else + SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, 0); + + // are we using DSA certs + if (argc >= 3 && argv[2][0] == 'd') { + printf("using DSA certs\n"); + set_dsaServerCerts(ctx); + } + else { + set_serverCerts(ctx); + } DH* dh = set_tmpDH(ctx); SSL* ssl = SSL_new(ctx); diff --git a/extra/yassl/include/openssl/ssl.h b/extra/yassl/include/openssl/ssl.h index e678c600fed..24acc7e86b9 100644 --- a/extra/yassl/include/openssl/ssl.h +++ b/extra/yassl/include/openssl/ssl.h @@ -35,7 +35,7 @@ #include "rsa.h" -#define YASSL_VERSION "2.3.5" +#define YASSL_VERSION "2.3.7" #if defined(__cplusplus) diff --git a/extra/yassl/include/yassl_int.hpp b/extra/yassl/include/yassl_int.hpp index f93727aa9f3..9f28cbe7726 100644 --- a/extra/yassl/include/yassl_int.hpp +++ b/extra/yassl/include/yassl_int.hpp @@ -107,6 +107,25 @@ enum AcceptState { }; +// track received messages to explicitly disallow duplicate messages +struct RecvdMessages { + uint8 gotClientHello_; + uint8 gotServerHello_; + uint8 gotCert_; + uint8 gotServerKeyExchange_; + uint8 gotCertRequest_; + uint8 gotServerHelloDone_; + uint8 gotCertVerify_; + uint8 gotClientKeyExchange_; + uint8 gotFinished_; + RecvdMessages() : gotClientHello_(0), gotServerHello_(0), gotCert_(0), + gotServerKeyExchange_(0), gotCertRequest_(0), + gotServerHelloDone_(0), gotCertVerify_(0), + gotClientKeyExchange_(0), gotFinished_(0) + {} +}; + + // combines all states class States { RecordLayerState recordLayer_; @@ -115,6 +134,7 @@ class States { ServerState serverState_; ConnectState connectState_; AcceptState acceptState_; + RecvdMessages recvdMessages_; char errorString_[MAX_ERROR_SZ]; YasslError what_; public: @@ -137,6 +157,7 @@ public: AcceptState& UseAccept(); char* useString(); void SetError(YasslError); + int SetMessageRecvd(HandShakeType); private: States(const States&); // hide copy States& operator=(const States&); // and assign diff --git a/extra/yassl/src/yassl_imp.cpp b/extra/yassl/src/yassl_imp.cpp index e2da042457f..742d07956da 100644 --- a/extra/yassl/src/yassl_imp.cpp +++ b/extra/yassl/src/yassl_imp.cpp @@ -242,6 +242,7 @@ void EncryptedPreMasterSecret::read(SSL& ssl, input_buffer& input) } opaque preMasterSecret[SECRET_LEN]; + memset(preMasterSecret, 0, sizeof(preMasterSecret)); rsa.decrypt(preMasterSecret, secret_, length_, ssl.getCrypto().get_random()); @@ -300,6 +301,11 @@ void ClientDiffieHellmanPublic::read(SSL& ssl, input_buffer& input) tmp[1] = input[AUTO]; ato16(tmp, keyLength); + if (keyLength < dh.get_agreedKeyLength()/2) { + ssl.SetError(bad_input); + return; + } + alloc(keyLength); input.read(Yc_, keyLength); if (input.get_error()) { @@ -408,6 +414,10 @@ void DH_Server::read(SSL& ssl, input_buffer& input) tmp[1] = input[AUTO]; ato16(tmp, length); + if (length == 0) { + ssl.SetError(bad_input); + return; + } signature_ = NEW_YS byte[length]; input.read(signature_, length); if (input.get_error()) { @@ -864,6 +874,12 @@ void ChangeCipherSpec::Process(input_buffer& input, SSL& ssl) return; } + // detect duplicate change_cipher + if (ssl.getSecurity().get_parms().pending_ == false) { + ssl.order_error(); + return; + } + ssl.useSecurity().use_parms().pending_ = false; if (ssl.getSecurity().get_resuming()) { if (ssl.getSecurity().get_parms().entity_ == client_end) @@ -2047,12 +2063,8 @@ input_buffer& operator>>(input_buffer& input, CertificateRequest& request) tmp[0] = input[AUTO]; tmp[1] = input[AUTO]; ato16(tmp, dnSz); - - DistinguishedName dn; - request.certificate_authorities_.push_back(dn = NEW_YS - byte[REQUEST_HEADER + dnSz]); - memcpy(dn, tmp, REQUEST_HEADER); - input.read(&dn[REQUEST_HEADER], dnSz); + + input.set_current(input.get_current() + dnSz); sz -= dnSz + REQUEST_HEADER; @@ -2191,6 +2203,11 @@ input_buffer& operator>>(input_buffer& input, CertificateVerify& request) ato16(tmp, sz); request.set_length(sz); + if (sz == 0) { + input.set_error(); + return input; + } + request.signature_ = NEW_YS byte[sz]; input.read(request.signature_, sz); diff --git a/extra/yassl/src/yassl_int.cpp b/extra/yassl/src/yassl_int.cpp index 75e4dc54523..a98b4f3c9bd 100644 --- a/extra/yassl/src/yassl_int.cpp +++ b/extra/yassl/src/yassl_int.cpp @@ -255,6 +255,77 @@ void States::SetError(YasslError ye) } +// mark message recvd, check for duplicates, return 0 on success +int States::SetMessageRecvd(HandShakeType hst) +{ + switch (hst) { + case hello_request: + break; // could send more than one + + case client_hello: + if (recvdMessages_.gotClientHello_) + return -1; + recvdMessages_.gotClientHello_ = 1; + break; + + case server_hello: + if (recvdMessages_.gotServerHello_) + return -1; + recvdMessages_.gotServerHello_ = 1; + break; + + case certificate: + if (recvdMessages_.gotCert_) + return -1; + recvdMessages_.gotCert_ = 1; + break; + + case server_key_exchange: + if (recvdMessages_.gotServerKeyExchange_) + return -1; + recvdMessages_.gotServerKeyExchange_ = 1; + break; + + case certificate_request: + if (recvdMessages_.gotCertRequest_) + return -1; + recvdMessages_.gotCertRequest_ = 1; + break; + + case server_hello_done: + if (recvdMessages_.gotServerHelloDone_) + return -1; + recvdMessages_.gotServerHelloDone_ = 1; + break; + + case certificate_verify: + if (recvdMessages_.gotCertVerify_) + return -1; + recvdMessages_.gotCertVerify_ = 1; + break; + + case client_key_exchange: + if (recvdMessages_.gotClientKeyExchange_) + return -1; + recvdMessages_.gotClientKeyExchange_ = 1; + break; + + case finished: + if (recvdMessages_.gotFinished_) + return -1; + recvdMessages_.gotFinished_ = 1; + break; + + + default: + return -1; + + } + + return 0; +} + + sslFactory::sslFactory() : messageFactory_(InitMessageFactory), handShakeFactory_(InitHandShakeFactory), @@ -1199,6 +1270,11 @@ void SSL::verifyState(const HandShakeHeader& hsHeader) return; } + if (states_.SetMessageRecvd(hsHeader.get_handshakeType()) != 0) { + order_error(); + return; + } + if (secure_.get_parms().entity_ == client_end) verifyClientState(hsHeader.get_handshakeType()); else diff --git a/extra/yassl/taocrypt/src/asn.cpp b/extra/yassl/taocrypt/src/asn.cpp index 544e9518da8..d521088d74a 100644 --- a/extra/yassl/taocrypt/src/asn.cpp +++ b/extra/yassl/taocrypt/src/asn.cpp @@ -672,7 +672,7 @@ word32 CertDecoder::GetSignature() } sigLength_ = GetLength(source_); - if (sigLength_ == 0 || source_.IsLeft(sigLength_) == false) { + if (sigLength_ <= 1 || source_.IsLeft(sigLength_) == false) { source_.SetError(CONTENT_E); return 0; } @@ -1001,11 +1001,17 @@ bool CertDecoder::ConfirmSignature(Source& pub) RSA_PublicKey pubKey(pub); RSAES_Encryptor enc(pubKey); + if (pubKey.FixedCiphertextLength() != sigLength_) { + source_.SetError(SIG_LEN_E); + return false; + } + return enc.SSL_Verify(build.get_buffer(), build.size(), signature_); } else { // DSA // extract r and s from sequence byte seqDecoded[DSA_SIG_SZ]; + memset(seqDecoded, 0, sizeof(seqDecoded)); DecodeDSA_Signature(seqDecoded, signature_, sigLength_); DSA_PublicKey pubKey(pub); diff --git a/extra/yassl/taocrypt/src/integer.cpp b/extra/yassl/taocrypt/src/integer.cpp index b5262e543a4..d8510066d04 100644 --- a/extra/yassl/taocrypt/src/integer.cpp +++ b/extra/yassl/taocrypt/src/integer.cpp @@ -2605,18 +2605,20 @@ void Integer::Decode(Source& source) void Integer::Decode(const byte* input, unsigned int inputLen, Signedness s) { unsigned int idx(0); - byte b = input[idx++]; + byte b = 0; + if (inputLen>0) + b = input[idx]; // peek sign_ = ((s==SIGNED) && (b & 0x80)) ? NEGATIVE : POSITIVE; while (inputLen>0 && (sign_==POSITIVE ? b==0 : b==0xff)) { - inputLen--; - b = input[idx++]; + idx++; // skip + if (--inputLen>0) + b = input[idx]; // peek } reg_.CleanNew(RoundupSize(BytesToWords(inputLen))); - --idx; for (unsigned int i=inputLen; i > 0; i--) { b = input[idx++]; diff --git a/extra/yassl/testsuite/cipher-test.sh b/extra/yassl/testsuite/cipher-test.sh new file mode 100644 index 00000000000..5ce29459d07 --- /dev/null +++ b/extra/yassl/testsuite/cipher-test.sh @@ -0,0 +1,130 @@ +#!/bin/bash + +# test all yassl cipher suties +# + + +server_pid=$no_pid + + +do_cleanup() { + echo "in cleanup" + + if [[ $server_pid != $no_pid ]] + then + echo "killing server" + kill -9 $server_pid + fi +} + +do_trap() { + echo "got trap" + do_cleanup + exit -1 +} + +trap do_trap INT TERM + + +# make sure example server and client are built +if test ! -s ../examples/server/server; then + echo "Please build yaSSL first, example server missing" + exit -1 +fi + +if test ! -s ../examples/client/client; then + echo "Please build yaSSL first, example client missing" + exit -1 +fi + + +# non DSA suites +for suite in {"DHE-RSA-AES256-SHA","AES256-SHA","DHE-RSA-AES128-SHA","AES128-SHA","AES256-RMD","AES128-RMD","DES-CBC3-RMD","DHE-RSA-AES256-RMD","DHE-RSA-AES128-RMD","DHE-RSA-DES-CBC3-RMD","RC4-SHA","RC4-MD5","DES-CBC3-SHA","DES-CBC-SHA","EDH-RSA-DES-CBC3-SHA","EDH-RSA-DES-CBC-SHA"} +do + for client_auth in {y,n} + do + echo "Trying $suite client auth = $client_auth ..." + + if test -e server_ready; then + echo -e "removing exisitng server_ready file" + rm server_ready + fi + ../examples/server/server $client_auth & + server_pid=$! + + while [ ! -s server_ready ]; do + echo -e "waiting for server_ready file..." + sleep 0.1 + done + + ../examples/client/client $suite + client_result=$? + + wait $server_pid + server_result=$? + + server_pid=$no_pid + + if [[ $client_result != 0 ]] + then + echo "Client Error" + exit $client_result + fi + + if [[ $server_result != 0 ]] + then + echo "Server Error" + exit $server_result + fi + + done # end client auth loop +done # end non dsa suite list +echo -e "Non DSA Loop SUCCESS" + + + +# DSA suites +for suite in {"DHE-DSS-AES256-SHA","DHE-DSS-AES128-SHA","DHE-DSS-AES256-RMD","DHE-DSS-AES128-RMD","DHE-DSS-DES-CBC3-RMD","EDH-DSS-DES-CBC3-SHA","EDH-DSS-DES-CBC-SHA"} +do + for client_auth in {y,n} + do + echo "Trying $suite client auth = $client_auth ..." + + if test -e server_ready; then + echo -e "removing exisitng server_ready file" + rm server_ready + fi + # d signifies DSA + ../examples/server/server $client_auth d & + server_pid=$! + + while [ ! -s server_ready ]; do + echo -e "waiting for server_ready file..." + sleep 0.1 + done + + ../examples/client/client $suite + client_result=$? + + wait $server_pid + server_result=$? + + server_pid=$no_pid + + if [[ $client_result != 0 ]] + then + echo "Client Error" + exit $client_result + fi + + if [[ $server_result != 0 ]] + then + echo "Server Error" + exit $server_result + fi + + done # end client auth loop +done # end dsa suite list +echo -e "DSA Loop SUCCESS" + +exit 0 diff --git a/extra/yassl/testsuite/test.hpp b/extra/yassl/testsuite/test.hpp index 33f398ae269..52f6ed79526 100644 --- a/extra/yassl/testsuite/test.hpp +++ b/extra/yassl/testsuite/test.hpp @@ -131,9 +131,10 @@ struct func_args { int argc; char** argv; int return_code; + const char* file_ready; tcp_ready* signal_; - func_args(int c = 0, char** v = 0) : argc(c), argv(v) {} + func_args(int c = 0, char** v = 0) : argc(c), argv(v), file_ready(0) {} void SetSignal(tcp_ready* p) { signal_ = p; } }; @@ -146,6 +147,7 @@ void join_thread(THREAD_TYPE); // yaSSL const char* const yasslIP = "127.0.0.1"; const unsigned short yasslPort = 11111; +const unsigned short proxyPort = 12345; // client @@ -172,13 +174,13 @@ const char* const svrKey3 = "../../../certs/server-key.pem"; // server dsa const char* const dsaCert = "../certs/dsa-cert.pem"; -const char* const dsaKey = "../certs/dsa512.der"; +const char* const dsaKey = "../certs/dsa1024.der"; const char* const dsaCert2 = "../../certs/dsa-cert.pem"; -const char* const dsaKey2 = "../../certs/dsa512.der"; +const char* const dsaKey2 = "../../certs/dsa1024.der"; const char* const dsaCert3 = "../../../certs/dsa-cert.pem"; -const char* const dsaKey3 = "../../../certs/dsa512.der"; +const char* const dsaKey3 = "../../../certs/dsa1024.der"; // CA @@ -222,6 +224,13 @@ inline void store_ca(SSL_CTX* ctx) if (SSL_CTX_load_verify_locations(ctx, certSuite, 0) != SSL_SUCCESS) if (SSL_CTX_load_verify_locations(ctx, certDebug,0) != SSL_SUCCESS) err_sys("failed to use certificate: certs/client-cert.pem"); + + // DSA cert + if (SSL_CTX_load_verify_locations(ctx, dsaCert, 0) != SSL_SUCCESS) + if (SSL_CTX_load_verify_locations(ctx, dsaCert2, 0) != SSL_SUCCESS) + if (SSL_CTX_load_verify_locations(ctx, dsaCert3, 0) != SSL_SUCCESS) + err_sys("failed to use certificate: certs/dsa-cert.pem"); + } @@ -298,7 +307,7 @@ inline void set_dsaServerCerts(SSL_CTX* ctx) != SSL_SUCCESS) if (SSL_CTX_use_PrivateKey_file(ctx, dsaKey3,SSL_FILETYPE_ASN1) != SSL_SUCCESS) - err_sys("failed to use key file: certs/dsa512.der"); + err_sys("failed to use key file: certs/dsa1024.der"); } @@ -310,6 +319,12 @@ inline void set_args(int& argc, char**& argv, func_args& args) } +inline void set_file_ready(const char* name, func_args& args) +{ + args.file_ready = name; +} + + inline void tcp_set_nonblocking(SOCKET_T& sockfd) { #ifdef NON_BLOCKING @@ -349,7 +364,11 @@ inline void tcp_socket(SOCKET_T& sockfd, SOCKADDR_IN_T& addr) */ // end external testing later #else addr.sin_family = AF_INET_V; +#ifdef YASSL_PROXY_PORT + addr.sin_port = htons(proxyPort); +#else addr.sin_port = htons(yasslPort); +#endif addr.sin_addr.s_addr = inet_addr(yasslIP); #endif @@ -401,6 +420,16 @@ inline void tcp_listen(SOCKET_T& sockfd) } +inline void create_ready_file(func_args& args) +{ + FILE* f = fopen(args.file_ready, "w+"); + + if (f) { + fputs("ready", f); + fclose(f); + } +} + inline void tcp_accept(SOCKET_T& sockfd, SOCKET_T& clientfd, func_args& args) { @@ -418,6 +447,9 @@ inline void tcp_accept(SOCKET_T& sockfd, SOCKET_T& clientfd, func_args& args) pthread_mutex_unlock(&ready.mutex_); #endif + if (args.file_ready) + create_ready_file(args); + clientfd = accept(sockfd, (sockaddr*)&client, (ACCEPT_THIRD_T)&client_len); if (clientfd == (SOCKET_T) -1) { diff --git a/include/mysql.h b/include/mysql.h index 090abf46377..2f205ec6463 100644 --- a/include/mysql.h +++ b/include/mysql.h @@ -75,6 +75,7 @@ typedef int my_socket; #include "my_list.h" /* for LISTs used in 'MYSQL' and 'MYSQL_STMT' */ +extern unsigned int mariadb_deinitialize_ssl; extern unsigned int mysql_port; extern char *mysql_unix_port; @@ -853,6 +854,12 @@ my_socket STDCALL mysql_get_socket(const MYSQL *mysql); unsigned int STDCALL mysql_get_timeout_value(const MYSQL *mysql); unsigned int STDCALL mysql_get_timeout_value_ms(const MYSQL *mysql); +/******************************************************************** + mysql_net_ functions - low-level API to MySQL protocol +*********************************************************************/ +unsigned long STDCALL mysql_net_read_packet(MYSQL *mysql); +unsigned long STDCALL mysql_net_field_length(unsigned char **packet); + /* status return codes */ #define MYSQL_NO_DATA 100 #define MYSQL_DATA_TRUNCATED 101 diff --git a/include/mysql.h.pp b/include/mysql.h.pp index c45a8d72c7c..f6be582c0da 100644 --- a/include/mysql.h.pp +++ b/include/mysql.h.pp @@ -168,6 +168,7 @@ extern LIST *list_reverse(LIST *root); extern void list_free(LIST *root,unsigned int free_data); extern unsigned int list_length(LIST *); extern int list_walk(LIST *,list_walk_action action,unsigned char * argument); +extern unsigned int mariadb_deinitialize_ssl; extern unsigned int mysql_port; extern char *mysql_unix_port; typedef struct st_mysql_field { @@ -731,3 +732,5 @@ int mysql_close_cont(MYSQL *sock, int status); my_socket mysql_get_socket(const MYSQL *mysql); unsigned int mysql_get_timeout_value(const MYSQL *mysql); unsigned int mysql_get_timeout_value_ms(const MYSQL *mysql); +unsigned long mysql_net_read_packet(MYSQL *mysql); +unsigned long mysql_net_field_length(unsigned char **packet); diff --git a/include/welcome_copyright_notice.h b/include/welcome_copyright_notice.h index 956a9f1c17a..096d42446bc 100644 --- a/include/welcome_copyright_notice.h +++ b/include/welcome_copyright_notice.h @@ -1,5 +1,5 @@ -/* Copyright (c) 2011, 2014, Oracle and/or its affiliates. - Copyright (c) 2011, 2012, Monty Program Ab +/* Copyright (c) 2011, 2015, Oracle and/or its affiliates. + Copyright (c) 2011, 2015, MariaDB 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 @@ -17,7 +17,7 @@ #ifndef _welcome_copyright_notice_h_ #define _welcome_copyright_notice_h_ -#define COPYRIGHT_NOTICE_CURRENT_YEAR "2014" +#define COPYRIGHT_NOTICE_CURRENT_YEAR "2015" /* This define specifies copyright notice which is displayed by every MySQL diff --git a/libmysql/CMakeLists.txt b/libmysql/CMakeLists.txt index fc4abb0ddd4..4ce4ab02e6d 100644 --- a/libmysql/CMakeLists.txt +++ b/libmysql/CMakeLists.txt @@ -236,6 +236,11 @@ dynamic_column_exists dynamic_column_list dynamic_column_get dynamic_column_prepare_decimal +# +mariadb_deinitialize_ssl +# low-level API to MySQL protocol +mysql_net_read_packet +mysql_net_field_length ) SET(CLIENT_API_FUNCTIONS diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c index 7a4fc9fabd4..1df5f0b6d2c 100644 --- a/libmysql/libmysql.c +++ b/libmysql/libmysql.c @@ -205,7 +205,8 @@ void STDCALL mysql_server_end() mysql_client_plugin_deinit(); finish_client_errs(); - vio_end(); + if (mariadb_deinitialize_ssl) + vio_end(); #ifdef EMBEDDED_LIBRARY end_embedded_server(); #endif @@ -4896,3 +4897,20 @@ my_bool STDCALL mysql_read_query_result(MYSQL *mysql) return (*mysql->methods->read_query_result)(mysql); } +/******************************************************************** + mysql_net_ functions - low-level API to MySQL protocol +*********************************************************************/ +#if MYSQL_VERSION_ID > 100100 +#error remove these wrappers in 10.1, rename functions instead +#endif + +ulong STDCALL mysql_net_read_packet(MYSQL *mysql) +{ + return cli_safe_read(mysql); +} + +ulong STDCALL mysql_net_field_length(uchar **packet) +{ + return net_field_length(packet); +} + diff --git a/mysql-test/extra/binlog_tests/database.test b/mysql-test/extra/binlog_tests/database.test index d071415bf65..61e8b594185 100644 --- a/mysql-test/extra/binlog_tests/database.test +++ b/mysql-test/extra/binlog_tests/database.test @@ -31,12 +31,47 @@ source include/show_binlog_events.inc; FLUSH STATUS; +--echo +--echo # 'DROP TABLE IF EXISTS <deleted tables>' is binlogged +--echo # when 'DROP DATABASE' fails and at least one table is deleted +--echo # from the database. +RESET MASTER; +CREATE DATABASE testing_1; +USE testing_1; +CREATE TABLE t1(c1 INT); +CREATE TABLE t2(c1 INT); + +let $prefix= `SELECT UUID()`; +--echo # Create a file in the database directory +--replace_result $prefix FAKE_FILE +eval SELECT 'hello' INTO OUTFILE 'fake_file.$prefix'; + +--echo +--echo # 'DROP DATABASE' will fail if there is any other file in the the +--echo # database directory + +# Use '/' instead of '\' in the error message. On windows platform, dir is +# formed with '\'. +--replace_regex /\\testing_1\\*/\/testing_1\// +--error 1010 +DROP DATABASE testing_1; +let $wait_binlog_event= DROP TABLE IF EXIST; +source include/wait_for_binlog_event.inc; +let $MYSQLD_DATADIR= `SELECT @@datadir`; + +--echo +--echo # Remove the fake file. +--remove_file $MYSQLD_DATADIR/testing_1/fake_file.$prefix +--echo # Now we can drop the database. +DROP DATABASE testing_1; + --echo # --echo # Bug#11765416 58381: FAILED DROP DATABASE CAN BREAK STATEMENT --echo # BASED REPLICATION --echo # +USE test; --disable_warnings DROP DATABASE IF EXISTS db1; DROP TABLE IF EXISTS t3; diff --git a/mysql-test/lib/My/SafeProcess/Base.pm b/mysql-test/lib/My/SafeProcess/Base.pm index 0e8c191c440..1ac0120a735 100644 --- a/mysql-test/lib/My/SafeProcess/Base.pm +++ b/mysql-test/lib/My/SafeProcess/Base.pm @@ -180,6 +180,7 @@ sub create_process { } $SIG{INT}= 'DEFAULT'; + $SIG{HUP}= 'DEFAULT'; # Make this process it's own process group to be able to kill # it and any childs(that hasn't changed group themself) diff --git a/mysql-test/lib/My/SafeProcess/safe_process.cc b/mysql-test/lib/My/SafeProcess/safe_process.cc index f19ca622278..d6110f5f8c8 100644 --- a/mysql-test/lib/My/SafeProcess/safe_process.cc +++ b/mysql-test/lib/My/SafeProcess/safe_process.cc @@ -141,6 +141,7 @@ extern "C" void handle_signal(int sig) // Ignore further signals signal(SIGTERM, SIG_IGN); signal(SIGINT, SIG_IGN); + signal(SIGHUP, SIG_IGN); // Continune execution, allow the child to be started and // finally terminated by monitor loop @@ -164,6 +165,7 @@ int main(int argc, char* const argv[] ) /* Install signal handlers */ sigaction(SIGTERM, &sa,NULL); sigaction(SIGINT, &sa,NULL); + sigaction(SIGHUP, &sa, NULL); sigaction(SIGCHLD, &sa,NULL); sigaction(SIGABRT, &sa_abort,NULL); @@ -231,6 +233,7 @@ int main(int argc, char* const argv[] ) // Use default signal handlers in child signal(SIGTERM, SIG_DFL); signal(SIGINT, SIG_DFL); + signal(SIGHUP, SIG_DFL); signal(SIGCHLD, SIG_DFL); // Make this process it's own process group to be able to kill diff --git a/mysql-test/lib/generate-ssl-certs.sh b/mysql-test/lib/generate-ssl-certs.sh new file mode 100755 index 00000000000..0ca9bcd41b8 --- /dev/null +++ b/mysql-test/lib/generate-ssl-certs.sh @@ -0,0 +1,31 @@ +#/bin/sh -xe + +# simply run me from mysql-test/ +cd std_data/ + +# boilerplace for "openssl ca" and /etc/ssl/openssl.cnf +rm -rf demoCA +mkdir demoCA demoCA/private demoCA/newcerts +touch demoCA/index.txt +echo 01 > demoCA/serial + +# CA certificate, self-signed +openssl req -x509 -newkey rsa:2048 -keyout demoCA/private/cakey.pem -out cacert.pem -days 7300 -nodes -subj '/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB' -text + +# server certificate signing request and private key +openssl req -newkey rsa:1024 -keyout server-key.pem -out demoCA/server-req.pem -days 7300 -nodes -subj '/C=SE/ST=Uppsala/O=MySQL AB/CN=localhost' +# convert the key to yassl compatible format +openssl rsa -in server-key.pem -out server-key.pem +# sign the server certificate with CA certificate +openssl ca -days 7300 -batch -cert cacert.pem -policy policy_anything -out server-cert.pem -infiles demoCA/server-req.pem + +openssl req -newkey rsa:8192 -keyout server8k-key.pem -out demoCA/server8k-req.pem -days 7300 -nodes -subj '/C=SE/ST=Uppsala/O=MySQL AB/CN=server' +openssl rsa -in server8k-key.pem -out server8k-key.pem +openssl ca -days 7300 -batch -cert cacert.pem -policy policy_anything -out server8k-cert.pem -infiles demoCA/server8k-req.pem + +openssl req -newkey rsa:1024 -keyout client-key.pem -out demoCA/client-req.pem -days 7300 -nodes -subj '/C=SE/ST=Uppsala/O=MySQL AB' +openssl rsa -in client-key.pem -out client-key.pem +# if the folloing will require a common name - that's defined in /etc/ssl/openssl.cnf, under policy_anything +openssl ca -days 7300 -batch -cert cacert.pem -policy policy_anything -out client-cert.pem -infiles demoCA/client-req.pem + +rm -rf demoCA diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 88c052e1d5c..4a793110f46 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -109,6 +109,7 @@ require "lib/mtr_gprof.pl"; require "lib/mtr_misc.pl"; $SIG{INT}= sub { mtr_error("Got ^C signal"); }; +$SIG{HUP}= sub { mtr_error("Hangup detected on controlling terminal"); }; our $mysql_version_id; my $mysql_version_extra; @@ -912,6 +913,7 @@ sub run_worker ($) { my ($server_port, $thread_num)= @_; $SIG{INT}= sub { exit(1); }; + $SIG{HUP}= sub { exit(1); }; # Connect to server my $server = new IO::Socket::INET @@ -1496,6 +1498,7 @@ sub command_line_setup { { $default_vardir= "$glob_mysql_test_dir/var"; } + $default_vardir = realpath $default_vardir unless IS_WINDOWS; if ( ! $opt_vardir ) { @@ -2499,6 +2502,7 @@ sub environment_setup { # ---------------------------------------------------- my $exe_replace= mtr_exe_exists(vs_config_dirs('extra', 'replace'), "$basedir/extra/replace", + "$bindir/extra$opt_vs_config/replace", "$path_client_bindir/replace"); $ENV{'REPLACE'}= native_path($exe_replace); diff --git a/mysql-test/r/create.result b/mysql-test/r/create.result index d7023fea5a5..8dd3cc8f643 100644 --- a/mysql-test/r/create.result +++ b/mysql-test/r/create.result @@ -291,7 +291,7 @@ Level Code Message Note 1050 Table 't1' already exists show status like "Opened_tables"; Variable_name Value -Opened_tables 2 +Opened_tables 1 select * from t1; a b 1 1 diff --git a/mysql-test/r/error_simulation.result b/mysql-test/r/error_simulation.result index 8c16ebf482e..9a783197389 100644 --- a/mysql-test/r/error_simulation.result +++ b/mysql-test/r/error_simulation.result @@ -100,3 +100,24 @@ DROP TABLE t1,t2; # # End of 5.1 tests # +# +# BUG#11747548:DETECT ORPHAN TEMP-POOL FILES, AND HANDLE GRACEFULLY. +# +#Set up. +CREATE TABLE pid_table(pid_no INT); +CREATE TABLE t1 (a BLOB); +INSERT INTO t1 VALUES (1), (2); +#Create MYD and MYI files for intrinsic temp table. +LOAD DATA LOCAL INFILE 'pid_file' INTO TABLE pid_table; +#Reports an error since the temp file already exists. +SELECT a FROM t1 ORDER BY rand(1); +a +1 +2 +#With patch, the query executes successfully. +SELECT a FROM t1 ORDER BY rand(1); +a +1 +2 +#cleanup +DROP TABLE t1, pid_table; diff --git a/mysql-test/r/file_contents.result b/mysql-test/r/file_contents.result index 110769e12f8..0b0d5d598d6 100644 --- a/mysql-test/r/file_contents.result +++ b/mysql-test/r/file_contents.result @@ -1,6 +1,6 @@ Checking 'INFO_SRC' and 'INFO_BIN' -INFO_SRC: Found MySQL version number / Found BZR revision id +INFO_SRC: Found MySQL version number / Found GIT revision id INFO_BIN: Found 'Compiler ... used' line / Found 'Feature flags' line End of tests diff --git a/mysql-test/r/frm_bad_row_type-7333.result b/mysql-test/r/frm_bad_row_type-7333.result new file mode 100644 index 00000000000..198b494d3f8 --- /dev/null +++ b/mysql-test/r/frm_bad_row_type-7333.result @@ -0,0 +1,14 @@ +call mtr.add_suppression("bad_row_type.frm: invalid value 11 for the field row_format"); +select * from bad_row_type; +category_id category_name +show create table bad_row_type; +Table Create Table +bad_row_type CREATE TABLE `bad_row_type` ( + `category_id` int(11) NOT NULL AUTO_INCREMENT, + `category_name` varchar(255) DEFAULT NULL, + PRIMARY KEY (`category_id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 +show table status like 'bad_row_type'; +Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +bad_row_type MyISAM 10 Dynamic 0 0 0 281474976710655 1024 0 1 x x NULL utf8_general_ci NULL +drop table bad_row_type; diff --git a/mysql-test/r/gis.result b/mysql-test/r/gis.result index ba69416b0ef..700b5de44f5 100644 --- a/mysql-test/r/gis.result +++ b/mysql-test/r/gis.result @@ -1607,4 +1607,7 @@ create table t1 (pt point); insert into t1 values(Geomfromtext('POLYGON((1 1, 2 2, 2 1, 1 1))')); ERROR 22007: Incorrect POINT value: 'POLYGON' for column 'pt' at row 1 drop table t1; +SELECT st_astext(ST_Buffer(ST_PolygonFromText('POLYGON((3 5, 2 4, 2 5, 3 5))'), -100)); +st_astext(ST_Buffer(ST_PolygonFromText('POLYGON((3 5, 2 4, 2 5, 3 5))'), -100)) +GEOMETRYCOLLECTION EMPTY End of 5.5 tests diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result index ee0d57929e8..13d77b4b344 100644 --- a/mysql-test/r/information_schema.result +++ b/mysql-test/r/information_schema.result @@ -1919,5 +1919,20 @@ drop view v1; # Clean-up. drop database mysqltest; # +# Test for bug #16869534 - "QUERYING SUBSET OF COLUMNS DOESN'T USE TABLE +# CACHE; OPENED_TABLES INCREASES" +# +SELECT * FROM INFORMATION_SCHEMA.TABLES; +SELECT VARIABLE_VALUE INTO @val1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE +VARIABLE_NAME LIKE 'Opened_tables'; +SELECT ENGINE FROM INFORMATION_SCHEMA.TABLES; +# The below SELECT query should give same output as above SELECT query. +SELECT VARIABLE_VALUE INTO @val2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE +VARIABLE_NAME LIKE 'Opened_tables'; +# The below select should return '1' +SELECT @val1 = @val2; +@val1 = @val2 +1 +# # End of 5.5 tests # diff --git a/mysql-test/r/mysqlcheck.result b/mysql-test/r/mysqlcheck.result index ab707ceef80..40ac4d82461 100644 --- a/mysql-test/r/mysqlcheck.result +++ b/mysql-test/r/mysqlcheck.result @@ -1,5 +1,5 @@ -DROP TABLE IF EXISTS t1, `t``1`, `t 1`; -drop view if exists v1; +DROP TABLE IF EXISTS t1, `t``1`, `t 1`, test.`t.1`, v1; +drop view if exists t1, `t``1`, `t 1`, test.`t.1`, v1; drop database if exists client_test_db; mtr.global_suppressions OK mtr.test_suppressions OK @@ -309,3 +309,10 @@ CHECK TABLE bug47205 FOR UPGRADE; Table Op Msg_type Msg_text test.bug47205 check status OK DROP TABLE bug47205; +# +#MDEV-6128:[PATCH] mysqlcheck wrongly escapes '.' in table names +# +CREATE TABLE test.`t.1` (id int); +mysqlcheck test t.1 +test.t.1 OK +drop table test.`t.1`; diff --git a/mysql-test/r/openssl_1.result b/mysql-test/r/openssl_1.result index 4627f03a8a3..5009a3e0815 100644 --- a/mysql-test/r/openssl_1.result +++ b/mysql-test/r/openssl_1.result @@ -3,8 +3,8 @@ create table t1(f1 int); insert into t1 values (5); grant select on test.* to ssl_user1@localhost require SSL; grant select on test.* to ssl_user2@localhost require cipher "DHE-RSA-AES256-SHA"; -grant select on test.* to ssl_user3@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Uppsala/O=MySQL AB"; -grant select on test.* to ssl_user4@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Uppsala/O=MySQL AB" ISSUER "/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB"; +grant select on test.* to ssl_user3@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Stockholm/L=Stockholm/O=Oracle/OU=MySQL/CN=Client"; +grant select on test.* to ssl_user4@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Stockholm/L=Stockholm/O=Oracle/OU=MySQL/CN=Client" ISSUER "/C=SE/ST=Stockholm/L=Stockholm/O=Oracle/OU=MySQL/CN=CA"; grant select on test.* to ssl_user5@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "xxx"; flush privileges; connect(localhost,ssl_user2,,test,MASTER_PORT,MASTER_SOCKET); diff --git a/mysql-test/r/processlist.result b/mysql-test/r/processlist.result index 0182245c278..eb3af67c5bf 100644 --- a/mysql-test/r/processlist.result +++ b/mysql-test/r/processlist.result @@ -7,9 +7,8 @@ SELECT ID, TIME,TIME_MS FROM INFORMATION_SCHEMA.PROCESSLIST WHERE CONCAT(":", ID SET DEBUG_SYNC = 'now SIGNAL fill_schema_proceed'; ID TIME TIME_MS TID 0 0.000 -SET DEBUG_SYNC = 'dispatch_command_end SIGNAL query_done EXECUTE 2'; -SET DEBUG_SYNC= 'now WAIT_FOR query_done'; -SET DEBUG_SYNC= 'now SIGNAL nosignal'; +set debug_sync='reset'; +SET debug_dbug="+d,sleep_inject_query_done_debug_sync"; select sleep(5); sleep(5) 0 diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result index 2978fce3a98..ee9779a2c23 100644 --- a/mysql-test/r/view.result +++ b/mysql-test/r/view.result @@ -4910,7 +4910,7 @@ Opened_views 3 show status like 'Opened_table%'; Variable_name Value Opened_table_definitions 2 -Opened_tables 3 +Opened_tables 2 # # MDEV-486 LP BUG#1010116 Incorrect query results in # view and derived tables @@ -5396,6 +5396,21 @@ SELECT `f1`(1); DROP FUNCTION f1; DROP VIEW v1; DROP TABLE t1, t2; +create view v1 as select 1; +drop view v1; +# +# MDEV-7260: Crash in get_best_combination when executing multi-table +# UPDATE with nested views +# +CREATE TABLE `t1` (`id` bigint(20)); +INSERT INTO `t1` VALUES (1),(2); +CREATE TABLE `t2` (`id` bigint(20)); +CREATE TABLE `t3` (`id` bigint(20), `flag` tinyint(4)); +create view v1 as select id from t1; +create view v2 as select t2.* from (t2 left join v1 using (id)); +update t3 left join v2 using (id) set flag=flag+1; +drop view v2, v1; +drop table t1, t2, t3; # ----------------------------------------------------------------- # -- End of 5.5 tests. # ----------------------------------------------------------------- diff --git a/mysql-test/std_data/bad_row_type.MYD b/mysql-test/std_data/bad_row_type.MYD new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/mysql-test/std_data/bad_row_type.MYD diff --git a/mysql-test/std_data/bad_row_type.MYI b/mysql-test/std_data/bad_row_type.MYI Binary files differnew file mode 100644 index 00000000000..731a83ed078 --- /dev/null +++ b/mysql-test/std_data/bad_row_type.MYI diff --git a/mysql-test/std_data/bad_row_type.frm b/mysql-test/std_data/bad_row_type.frm Binary files differnew file mode 100644 index 00000000000..d993c98d73e --- /dev/null +++ b/mysql-test/std_data/bad_row_type.frm diff --git a/mysql-test/std_data/cacert.pem b/mysql-test/std_data/cacert.pem index f5ba4fec58d..a0ba67444ef 100644 --- a/mysql-test/std_data/cacert.pem +++ b/mysql-test/std_data/cacert.pem @@ -1,22 +1,79 @@ +Certificate: + Data: + Version: 3 (0x2) + Serial Number: 16263805969935345171 (0xe1b4a55c3ddfa613) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=SE, ST=Stockholm, L=Stockholm, O=Oracle, OU=MySQL, CN=CA + Validity + Not Before: Dec 5 04:48:11 2014 GMT + Not After : Dec 1 04:48:11 2030 GMT + Subject: C=SE, ST=Stockholm, L=Stockholm, O=Oracle, OU=MySQL, CN=CA + Subject Public Key Info: + Public Key Algorithm: rsaEncryption + Public-Key: (2048 bit) + Modulus: + 00:b4:95:bd:24:92:73:06:22:01:13:28:0e:09:a3: + 94:05:96:54:9d:dc:8f:83:39:f3:64:7a:31:70:f6: + d9:c4:14:19:75:87:a6:b1:ea:52:ed:40:54:5a:f6: + 9c:13:8e:d8:76:8f:5a:65:a5:20:19:19:bd:51:9d: + ba:35:ce:9a:a9:58:0a:fc:11:6e:1d:cb:a8:f1:92: + 79:ee:aa:fc:e3:32:5e:aa:0d:0b:23:34:95:e9:d3: + 8e:3f:72:93:90:bc:2c:b0:04:75:4f:a4:4a:a0:32: + db:ac:89:ac:34:9b:d0:07:e3:81:e9:ca:5b:26:f0: + f5:de:fe:d5:5e:a0:54:26:dd:ec:58:07:6e:b9:e5: + 97:f6:20:6d:d8:4a:c0:50:cc:81:e6:d2:3f:c7:47: + 70:8b:15:89:65:71:2e:47:c3:42:76:b5:ee:16:0e: + 26:97:6a:a3:1c:ad:90:53:50:b0:b1:6d:1d:b0:b8: + 6d:df:3c:ee:bd:3b:87:e8:db:4d:3a:72:78:dd:db: + 40:3d:c9:20:46:b8:4e:33:bb:76:b7:4f:b2:79:da: + 03:cc:f9:75:c0:1d:4c:51:0a:b9:9b:25:34:50:11: + 97:df:82:46:02:a9:bc:98:51:3e:c3:df:57:ad:b7: + 28:be:de:65:ce:2b:f3:2c:22:f5:af:31:28:1c:ef: + 10:09 + Exponent: 65537 (0x10001) + X509v3 extensions: + X509v3 Subject Key Identifier: + 94:65:A1:A3:87:CF:BF:C1:74:BB:D8:84:97:B6:6B:EE:B2:90:73:B2 + X509v3 Authority Key Identifier: + keyid:94:65:A1:A3:87:CF:BF:C1:74:BB:D8:84:97:B6:6B:EE:B2:90:73:B2 + + X509v3 Basic Constraints: + CA:TRUE + Signature Algorithm: sha256WithRSAEncryption + 32:97:4c:af:bf:ca:e0:10:66:b7:cc:8b:0d:05:d1:d2:ca:b8: + 0c:c2:78:57:1f:f6:55:9c:74:fc:bd:31:58:05:18:bc:6d:b5: + 79:9a:22:8c:1f:da:33:ea:ef:db:e3:cb:46:bc:36:91:8b:d8: + 36:8d:06:40:c2:e9:fe:79:1b:4a:c5:70:74:6d:9d:92:2c:90: + be:3c:a7:88:03:e4:b7:ef:f4:b0:00:34:ec:8f:d1:c3:23:2b: + ef:bc:ff:ab:a2:0e:bc:ba:11:a5:8e:44:80:fa:d6:f4:26:66: + 84:64:2c:e3:23:62:0c:e2:ba:01:ab:5f:24:d6:9d:7e:9c:7b: + f4:5d:0e:ba:64:35:6e:a5:fa:98:0c:57:f3:72:e8:3e:2e:ce: + b3:f9:e3:fa:ee:aa:79:f9:06:01:19:b2:b3:28:ff:f4:d6:bb: + 17:bb:a6:a0:e0:45:23:f3:61:40:31:5c:a3:ee:88:1c:00:31: + 54:96:f9:71:37:b5:7f:66:6a:af:04:94:09:39:99:b3:88:86: + 9e:bb:d6:36:24:24:f4:37:2c:a6:6c:0b:35:2e:bb:40:af:a7: + 64:8a:7f:f2:74:e3:94:0c:32:bd:31:3d:d9:79:68:0f:1e:4b: + 17:c0:4e:df:85:3c:f0:84:df:58:f1:d2:4d:2f:ad:ff:1b:d7: + c8:9b:fe:dc -----BEGIN CERTIFICATE----- -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 +WPHSTS+t/xvXyJv+3A== -----END CERTIFICATE----- diff --git a/mysql-test/std_data/client-cert.pem b/mysql-test/std_data/client-cert.pem index b83ae7c655d..f60a0884178 100644 --- a/mysql-test/std_data/client-cert.pem +++ b/mysql-test/std_data/client-cert.pem @@ -1,69 +1,82 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 6 (0x6) - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=SE, ST=Uppsala, L=Uppsala, O=MySQL AB + Serial Number: 16263805969935345173 (0xe1b4a55c3ddfa615) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=SE, ST=Stockholm, L=Stockholm, O=Oracle, OU=MySQL, CN=CA Validity - Not Before: Feb 20 03:03:26 2010 GMT - Not After : Sep 3 03:03:26 2030 GMT - Subject: C=SE, ST=Uppsala, O=MySQL AB + Not Before: Dec 5 04:49:23 2014 GMT + Not After : Dec 1 04:49:23 2029 GMT + Subject: C=SE, ST=Stockholm, L=Stockholm, O=Oracle, OU=MySQL, CN=Client Subject Public Key Info: Public Key Algorithm: rsaEncryption - RSA Public Key: (1024 bit) - Modulus (1024 bit): - 00:c2:e7:20:cf:89:59:2f:67:cb:4c:9f:e8:11:f2: - 23:e5:f1:b1:ee:3f:66:5f:c3:f5:fd:1e:31:ee:8f: - 4c:2a:bd:c0:4a:a5:9f:c8:44:d5:77:8f:15:1b:4d: - 78:6e:b2:a2:48:a5:24:33:05:40:02:b3:c1:87:8d: - 59:3c:1a:07:aa:86:f0:04:e1:9c:20:4b:22:32:c4: - 51:9e:40:e4:31:c3:57:f5:98:bf:2e:b1:fd:2c:56: - bf:49:d9:9b:e7:17:cc:95:5f:b5:08:19:5e:9d:df: - 65:22:39:2c:48:fb:69:96:31:7a:35:4d:de:60:b4: - c1:60:19:5f:96:56:7e:55:19 + Public-Key: (2048 bit) + Modulus: + 00:c8:d1:a1:fe:a4:8c:f3:1b:17:71:1b:74:35:11: + e0:0e:6c:40:0a:fb:c0:f7:f0:eb:bb:c9:1d:a1:c7: + d7:b0:8a:f6:f1:cf:fa:6b:d0:79:64:eb:bb:69:a5: + 0d:80:06:df:52:14:d2:85:32:cf:bf:ce:2a:47:28: + 5b:cd:0b:28:ab:bb:07:33:d5:8b:d3:b4:72:c4:a6: + b5:cc:37:b9:03:a8:78:56:25:58:1f:17:30:7c:d1: + 0a:bb:ec:3c:a3:03:90:97:99:92:49:ae:b3:57:96: + 5c:1a:e9:e8:02:23:ae:c8:c9:05:50:63:e5:77:a1: + 9a:73:06:74:0e:46:50:28:d8:c9:4f:c4:1c:37:b8: + 52:18:0b:af:19:2b:d4:e5:66:74:a4:f3:f0:da:09: + 30:f7:bc:0c:c9:9b:ce:57:06:04:27:e5:a1:2f:2b: + a0:ba:b7:99:69:9d:46:fc:21:b6:45:81:9d:b2:3d: + 2f:76:15:78:b5:33:62:ac:1e:6b:66:dd:27:61:0a: + 47:02:20:2b:57:bb:32:20:dd:06:4c:76:a4:9b:72: + 42:4c:9c:2c:76:72:12:1f:4b:df:1e:11:1f:a9:06: + 54:dc:88:12:b0:49:d5:40:83:ef:7e:48:43:86:7a: + 37:a6:c1:d7:9b:fe:08:34:98:e0:54:3c:30:4f:79: + 15:29 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE + Netscape Comment: + OpenSSL Generated Certificate X509v3 Subject Key Identifier: - 8D:10:67:91:33:76:9C:02:E5:78:5D:D8:C5:EF:25:96:B2:D7:FA:1F + 26:0C:90:BC:97:12:9E:43:BB:5E:FE:EB:A9:66:B3:C3:EE:B2:18:CB X509v3 Authority Key Identifier: - keyid:B1:FB:7E:77:B5:40:8D:68:11:7E:D9:11:E5:C3:C6:DA:4D:AC:51:B0 - DirName:/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB - serial:BE:58:AD:4C:1F:3D:25:95 + keyid:94:65:A1:A3:87:CF:BF:C1:74:BB:D8:84:97:B6:6B:EE:B2:90:73:B2 - Signature Algorithm: sha1WithRSAEncryption - a9:88:10:3e:5d:2a:47:29:c8:03:27:7a:31:5a:8e:10:03:bc: - b5:4e:37:1d:12:7b:eb:5f:50:71:70:b1:a3:8e:93:0e:77:17: - 6c:47:b6:c9:a4:4d:2a:c4:38:f0:61:55:b2:7f:28:ba:06:79: - ee:67:11:7d:d4:c9:7f:0a:18:c8:c1:cb:d0:2c:f9:63:0f:bb: - 45:ca:de:ea:bb:ac:00:01:52:48:36:2b:07:2b:c8:46:c7:b1: - 21:81:bd:77:39:e7:4c:39:aa:bd:ac:60:d8:a7:bf:cf:14:98: - 4a:0b:a1:40:55:06:8d:6f:35:a9:39:a0:71:a9:97:ba:7c:73: - 3c:41:ba:c5:1c:11:4b:2b:43:1d:2d:ba:7b:5f:14:b5:3d:64: - 62:15:36:b4:16:bd:78:c8:43:8d:f9:1c:a5:d2:ac:a1:58:74: - e1:99:de:ad:04:19:43:a8:bd:0a:fd:19:9b:50:44:46:6d:18: - 55:4d:bf:b4:5b:a4:93:62:c7:64:91:6c:54:34:d1:f8:f3:ff: - 12:6d:5f:85:e7:35:9e:5c:42:81:5e:fb:c8:bb:44:51:98:b2: - ef:1b:9f:5a:22:77:28:7d:da:fb:08:c2:94:9a:0f:42:08:93: - 54:10:1e:ad:f2:4f:fc:62:98:51:e9:9b:b9:3a:93:d9:e4:1f: - 1d:c4:76:d0 + Signature Algorithm: sha256WithRSAEncryption + 3e:3c:1f:6c:5b:83:d1:71:15:f5:45:52:fc:7f:67:bc:af:c5: + 92:f5:74:78:13:43:3c:fe:b5:61:bf:00:47:43:45:a0:b9:dd: + a1:10:0c:29:69:2a:6f:7d:67:3d:1e:09:b5:15:74:bf:73:11: + e6:e9:09:b6:6b:b5:cc:1e:06:fd:bd:3a:11:d3:44:bd:ca:7a: + a1:f1:09:43:fc:bf:83:89:3a:b1:18:40:f3:cf:6d:12:ef:6e: + 0c:b7:a4:99:03:8a:4f:0c:3c:2c:23:78:35:2a:99:ea:de:9c: + 1b:e8:8d:19:fb:44:80:13:89:81:c5:05:4b:a7:66:6b:c0:31: + 41:f0:6c:60:aa:ec:d3:4c:ff:c1:3b:d5:bb:0d:42:7d:37:5e: + 80:e7:9c:7e:60:90:0f:a4:4e:70:20:9c:b1:e4:1b:70:65:b0: + ef:bb:41:16:ed:ad:46:ce:34:d3:02:3d:dd:e2:50:fa:3c:5d: + f0:e2:71:f8:9a:ef:a3:32:25:c5:8e:64:f4:46:e1:f4:c0:69: + d2:34:56:8d:d9:c2:6e:b6:55:3b:6a:4d:b6:d2:84:ab:85:7b: + cb:fd:b4:73:40:ba:5d:49:e2:0d:39:77:17:01:49:bb:72:8b: + 3a:c9:b1:e2:cd:13:d2:9c:ce:7d:6c:a8:f0:32:c9:a4:af:56: + 6f:8a:e6:88 -----BEGIN CERTIFICATE----- -MIIDETCCAfmgAwIBAgIBBjANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJTRTEQ -MA4GA1UECBMHVXBwc2FsYTEQMA4GA1UEBxMHVXBwc2FsYTERMA8GA1UEChMITXlT -UUwgQUIwHhcNMTAwMjIwMDMwMzI2WhcNMzAwOTAzMDMwMzI2WjAyMQswCQYDVQQG -EwJTRTEQMA4GA1UECBMHVXBwc2FsYTERMA8GA1UEChMITXlTUUwgQUIwgZ8wDQYJ -KoZIhvcNAQEBBQADgY0AMIGJAoGBAMLnIM+JWS9ny0yf6BHyI+Xxse4/Zl/D9f0e -Me6PTCq9wEqln8hE1XePFRtNeG6yokilJDMFQAKzwYeNWTwaB6qG8AThnCBLIjLE -UZ5A5DHDV/WYvy6x/SxWv0nZm+cXzJVftQgZXp3fZSI5LEj7aZYxejVN3mC0wWAZ -X5ZWflUZAgMBAAGjgaMwgaAwCQYDVR0TBAIwADAdBgNVHQ4EFgQUjRBnkTN2nALl -eF3Yxe8llrLX+h8wdAYDVR0jBG0wa4AUsft+d7VAjWgRftkR5cPG2k2sUbChSKRG -MEQxCzAJBgNVBAYTAlNFMRAwDgYDVQQIEwdVcHBzYWxhMRAwDgYDVQQHEwdVcHBz -YWxhMREwDwYDVQQKEwhNeVNRTCBBQoIJAL5YrUwfPSWVMA0GCSqGSIb3DQEBBQUA -A4IBAQCpiBA+XSpHKcgDJ3oxWo4QA7y1TjcdEnvrX1BxcLGjjpMOdxdsR7bJpE0q -xDjwYVWyfyi6BnnuZxF91Ml/ChjIwcvQLPljD7tFyt7qu6wAAVJINisHK8hGx7Eh -gb13OedMOaq9rGDYp7/PFJhKC6FAVQaNbzWpOaBxqZe6fHM8QbrFHBFLK0MdLbp7 -XxS1PWRiFTa0Fr14yEON+Ryl0qyhWHThmd6tBBlDqL0K/RmbUERGbRhVTb+0W6ST -YsdkkWxUNNH48/8SbV+F5zWeXEKBXvvIu0RRmLLvG59aIncofdr7CMKUmg9CCJNU -EB6t8k/8YphR6Zu5OpPZ5B8dxHbQ +MIIDyDCCArCgAwIBAgIJAOG0pVw936YVMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNV +BAYTAlNFMRIwEAYDVQQIDAlTdG9ja2hvbG0xEjAQBgNVBAcMCVN0b2NraG9sbTEP +MA0GA1UECgwGT3JhY2xlMQ4wDAYDVQQLDAVNeVNRTDELMAkGA1UEAwwCQ0EwHhcN +MTQxMjA1MDQ0OTIzWhcNMjkxMjAxMDQ0OTIzWjBnMQswCQYDVQQGEwJTRTESMBAG +A1UECAwJU3RvY2tob2xtMRIwEAYDVQQHDAlTdG9ja2hvbG0xDzANBgNVBAoMBk9y +YWNsZTEOMAwGA1UECwwFTXlTUUwxDzANBgNVBAMMBkNsaWVudDCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMjRof6kjPMbF3EbdDUR4A5sQAr7wPfw67vJ +HaHH17CK9vHP+mvQeWTru2mlDYAG31IU0oUyz7/OKkcoW80LKKu7BzPVi9O0csSm +tcw3uQOoeFYlWB8XMHzRCrvsPKMDkJeZkkmus1eWXBrp6AIjrsjJBVBj5XehmnMG +dA5GUCjYyU/EHDe4UhgLrxkr1OVmdKTz8NoJMPe8DMmbzlcGBCfloS8roLq3mWmd +RvwhtkWBnbI9L3YVeLUzYqwea2bdJ2EKRwIgK1e7MiDdBkx2pJtyQkycLHZyEh9L +3x4RH6kGVNyIErBJ1UCD735IQ4Z6N6bB15v+CDSY4FQ8ME95FSkCAwEAAaN7MHkw +CQYDVR0TBAIwADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2Vy +dGlmaWNhdGUwHQYDVR0OBBYEFCYMkLyXEp5Du17+66lms8PushjLMB8GA1UdIwQY +MBaAFJRloaOHz7/BdLvYhJe2a+6ykHOyMA0GCSqGSIb3DQEBCwUAA4IBAQA+PB9s +W4PRcRX1RVL8f2e8r8WS9XR4E0M8/rVhvwBHQ0Wgud2hEAwpaSpvfWc9Hgm1FXS/ +cxHm6Qm2a7XMHgb9vToR00S9ynqh8QlD/L+DiTqxGEDzz20S724Mt6SZA4pPDDws +I3g1Kpnq3pwb6I0Z+0SAE4mBxQVLp2ZrwDFB8GxgquzTTP/BO9W7DUJ9N16A55x+ +YJAPpE5wIJyx5BtwZbDvu0EW7a1GzjTTAj3d4lD6PF3w4nH4mu+jMiXFjmT0RuH0 +wGnSNFaN2cJutlU7ak220oSrhXvL/bRzQLpdSeINOXcXAUm7cos6ybHizRPSnM59 +bKjwMsmkr1ZviuaI -----END CERTIFICATE----- diff --git a/mysql-test/std_data/client-key.pem b/mysql-test/std_data/client-key.pem index 2fc1754e9c5..e0aae4f2c4a 100644 --- a/mysql-test/std_data/client-key.pem +++ b/mysql-test/std_data/client-key.pem @@ -1,15 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -MIICWwIBAAKBgQDC5yDPiVkvZ8tMn+gR8iPl8bHuP2Zfw/X9HjHuj0wqvcBKpZ/I -RNV3jxUbTXhusqJIpSQzBUACs8GHjVk8GgeqhvAE4ZwgSyIyxFGeQOQxw1f1mL8u -sf0sVr9J2ZvnF8yVX7UIGV6d32UiOSxI+2mWMXo1Td5gtMFgGV+WVn5VGQIDAQAB -AoGARXcXLKDpVooJ3W+IyQyiWsw//IhANpWjUOm4JiyQmxMyO+i4ACr4Yjpu7WI5 -MEseqAGj20NdwxjKO0PXsCIe5LmrGZ+SI8+CSERFOWXWRtCWz7y7SG30i1k6suvM -mwqWom0tJLwn93uA1lm/WSwKQwUrJRahRQd3EaZqrl7DP5kCQQD/8gbuYAT5pxQe -ULLGM0RvEsXxDYbEDxNbY5wrBazfklBwpumxZpFl6jEAT++7Kh2Ns3A7kB1oUNlA -FPYr+dYPAkEAwvHEwRtoyUr8jqoqVVJWI76CDmBjEOzVeMKW97ztqbs2LxZW8dYI -iOh/myFGpdoUwgu0U8w9MmXcj3ZeZCYKVwJALyQ+AJPw9qa+fuLwOq9gsHCtwrty -EhSQxSlwrz/pWniRll439vPkXfgntF4E0t1r+hiN2Hqv3/HcQgBaYzkuIwJAG023 -bACFxaOuCeFFepvEms8E8jSHy4gQQhCnCl24v8wLw76SQN7kZSCDNtwLRBFuVNtE -z3PMonFn2eQPRmGZkwJAP1c1BHprMQx/ruafdscROILv3JrH40C1bR6KVVBKt1dK -Qpnpgi7hK5rUQjDF8k3bn9ugTt06jyeHe/QhAml0kg== +MIIEowIBAAKCAQEAyNGh/qSM8xsXcRt0NRHgDmxACvvA9/Dru8kdocfXsIr28c/6 +a9B5ZOu7aaUNgAbfUhTShTLPv84qRyhbzQsoq7sHM9WL07RyxKa1zDe5A6h4ViVY +HxcwfNEKu+w8owOQl5mSSa6zV5ZcGunoAiOuyMkFUGPld6GacwZ0DkZQKNjJT8Qc +N7hSGAuvGSvU5WZ0pPPw2gkw97wMyZvOVwYEJ+WhLyugureZaZ1G/CG2RYGdsj0v +dhV4tTNirB5rZt0nYQpHAiArV7syIN0GTHakm3JCTJwsdnISH0vfHhEfqQZU3IgS +sEnVQIPvfkhDhno3psHXm/4INJjgVDwwT3kVKQIDAQABAoIBAFrliE2abbIcMSAh +LRhYXvIoTVSrX0za39i/z4nKyvY98EjDurXSRyBHEy1eaB3q/mpIwoFH3oES8FAF +FIha5K3Wmgv8PK42nzwjuWYWUsg1GULk5F4uQOQ+On2VEF0439m+yVhQmxyqEkac +WUeenx6C3sTkcpkTrLUj1qQfb2kM6JmeGsXfJNFLP/U36x8Q6kp2089DxBFgVcFu +W3ge24W08umDBKuZWIF5B9GX8JFzmbAwPT2KATppGeroX0+bo4KAts4F1dBKmbrm +3815kqYnz+VqyWbw6AHUA7aw2TY6QIT1oHrm+EdfnOQZaf8d/2CHWlIZPmxB46Lz +6zQTVgECgYEA/L9awju31alISm0WYOPZBBndIHsOve4iKcMmy85GTKSvV+cAvgAZ +uQwabZi4ZYHYaa4LPF0hbTb5IdV6krQzGYXpAjlwaarW0Zx4VoQIErWyji79OnFD +QpbzIPGQiUAc0D7Gk7kJpwNmpgjyYcSkjEibF4cFEhDpTVlccbgxboUCgYEAy2c0 +tIfKiu1hwo/8UdcO4LQ6LWJdbIDdNU45HCk/IhIe4FrB0pXnk1yIBBn0ezY7Mgzy +USYlfPTjFmnQOFF/6bHyGmeB4YTYamlTDuHlUUdH76brCZ3ywUlqpToiAPJFjx36 +nTNjo8JLF7eyjMOy4uN6eJzzS7OP9GwsHllux1UCgYBeFLCo+me8va2uHpsk58th +TmtUatoa8uh+mSj41kiuwOKQGunYz9rDWfEAeMey6TlwZRvDlXsa10q3QGrG7xLS +XllUvaLNgo1CKzdUJQOIS2AysuUJ+x0pTV0lFyZRIK9ZCPUMCeXA6HAuP8hRgkwp +9+DbSiQmDGt7olbZ8dFcrQKBgQCOFzzUWH//aTD/z8H+EfQMuRpjFfIZmDPvxwNS +TuYRkQMMy5nW2G17ngpOgyss34eewTiNw84waoow4B5bGWP4Bx0PoPs0Za8hNw6U +uO2PR/JS0hIjF7m7mOPtJJ0YeCZrgg/OvVV/0nzOxr7uYs+WfD7T/yBe48NOhjqT +wPoIOQKBgGRLd3G8b0AbPTv4NVwzIl3xKHCKYd1EcBbfyPWjAZ8+BagEPK8mJfOt +MXkMrSKOq6ShEfzRsdJna7eI0te3zNXXFu/G3IHQZUdC0RtksW5T9tXvASRN3wnX ++aaoIM1q/KUgfH0TF/1pQPHFSUfFrGyLDiCDUu1sJ2ijULr5rZES -----END RSA PRIVATE KEY----- diff --git a/mysql-test/std_data/server-cert.pem b/mysql-test/std_data/server-cert.pem index d77bae800f2..f6acc62ff5f 100644 --- a/mysql-test/std_data/server-cert.pem +++ b/mysql-test/std_data/server-cert.pem @@ -1,69 +1,82 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 4 (0x4) - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=SE, ST=Uppsala, L=Uppsala, O=MySQL AB + Serial Number: 16263805969935345172 (0xe1b4a55c3ddfa614) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=SE, ST=Stockholm, L=Stockholm, O=Oracle, OU=MySQL, CN=CA Validity - Not Before: Feb 20 02:55:06 2010 GMT - Not After : Sep 3 02:55:06 2030 GMT - Subject: C=SE, ST=Uppsala, O=MySQL AB, CN=localhost + Not Before: Dec 5 04:48:40 2014 GMT + Not After : Dec 1 04:48:40 2029 GMT + Subject: C=SE, ST=Stockholm, L=Stockholm, O=Oracle, OU=MySQL, CN=localhost Subject Public Key Info: Public Key Algorithm: rsaEncryption - RSA Public Key: (1024 bit) - Modulus (1024 bit): - 00:e3:7d:4f:c2:23:77:a9:3a:2c:d2:69:59:a0:2f: - 4e:d1:51:4c:ae:8d:f5:17:cc:ce:58:9c:83:4f:0b: - a3:bb:29:a2:b8:1d:3e:1b:04:f9:a9:3e:e2:61:d0: - e6:7b:b9:7c:12:d8:1f:86:c9:53:b5:04:dd:df:26: - e9:c0:2b:de:4a:96:2e:f3:23:6f:79:6d:a9:d2:4e: - 17:af:2f:de:8b:68:44:ae:de:a3:e2:c4:37:1c:04: - ad:73:4b:85:f9:83:ac:fe:b7:c1:54:47:2e:96:d4: - 31:96:85:94:69:d6:5a:63:24:04:99:89:19:1d:56: - 8a:d1:77:aa:87:fb:38:cd:b7 + Public-Key: (2048 bit) + Modulus: + 00:e9:20:e7:05:51:07:3a:48:b9:e2:62:a2:24:45: + 1f:f1:54:34:22:5c:62:86:9b:01:e8:c2:45:90:00: + 8d:4e:e4:a2:ea:e9:d7:b5:95:25:ce:18:ac:1a:4f: + b3:e6:30:46:af:20:13:40:84:df:21:dc:df:09:e5: + a0:7f:81:12:6e:1e:84:58:5c:a1:11:db:aa:b6:04: + e0:fc:1e:0c:11:2e:f3:30:62:1a:f9:ee:df:fe:a3: + d3:d6:83:6e:ad:e8:8d:98:89:b1:69:63:b8:72:f4: + 5a:e6:22:5e:73:64:95:ef:56:92:92:0b:e1:93:a5: + d7:4c:41:47:e7:31:ed:09:68:b3:c5:6e:c1:1b:01: + 39:bb:f1:8f:bf:ba:f4:02:e2:e5:e5:9e:b7:d6:9a: + b2:94:76:9b:48:d8:27:18:0e:9f:30:98:f5:9a:3e: + 23:e6:3b:4a:48:ee:a5:26:e8:80:94:37:e4:4a:ba: + ff:9f:42:b9:32:dd:7a:9d:63:11:a8:25:99:b1:1f: + 86:e5:7c:b1:31:e3:12:11:0c:eb:f6:1d:02:4b:1d: + 34:cb:74:1d:7f:2f:40:c0:81:e2:04:d4:8e:ea:96: + f8:22:35:8e:ab:b6:99:33:36:ef:b5:83:11:88:6d: + 06:0f:76:4d:bf:db:a8:df:6c:3c:91:e2:ba:73:a0: + 73:45 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE + Netscape Comment: + OpenSSL Generated Certificate X509v3 Subject Key Identifier: - CC:8C:71:40:D0:0F:BF:D1:99:79:3F:1B:E9:10:76:19:67:36:0F:A3 + E4:31:D8:D5:06:EA:C6:B3:A2:F6:01:39:8F:58:08:36:2C:7B:3F:DB X509v3 Authority Key Identifier: - keyid:B1:FB:7E:77:B5:40:8D:68:11:7E:D9:11:E5:C3:C6:DA:4D:AC:51:B0 - DirName:/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB - serial:BE:58:AD:4C:1F:3D:25:95 + keyid:94:65:A1:A3:87:CF:BF:C1:74:BB:D8:84:97:B6:6B:EE:B2:90:73:B2 - Signature Algorithm: sha1WithRSAEncryption - 6f:ad:5e:59:fa:84:3a:be:e2:72:b1:e8:66:2a:4e:f8:73:19: - 11:06:11:92:78:56:3e:d6:e8:68:29:90:8b:59:d2:fe:aa:ae: - 25:59:c7:e9:99:bb:4a:06:43:dd:40:bd:cb:f4:ae:79:95:7d: - 8e:90:ef:58:d2:a8:fc:bf:07:f3:37:b2:9b:bd:da:e6:8c:56: - dd:5e:c6:4a:70:7c:3e:3d:a1:e8:35:06:b8:a7:7b:ac:26:85: - 54:5d:09:a2:7b:77:b4:17:7f:72:31:cb:ff:cc:67:6d:e6:3e: - c6:dc:96:eb:4a:0a:ae:e9:48:ae:8a:e0:d6:73:57:6e:32:4c: - 00:dc:28:da:55:b3:9f:9f:d8:98:cc:d9:f1:b6:b3:14:67:2e: - a1:47:1e:51:11:cf:70:9f:31:8f:ba:59:29:f2:d0:88:0b:e2: - 51:6b:f8:31:ed:6d:ac:00:5e:d3:78:4c:95:97:02:cc:74:2b: - 3b:c6:28:e6:2a:c3:30:99:35:b4:4d:31:46:d4:90:f2:47:ed: - 64:85:1a:75:2a:72:0a:2f:c6:3a:2f:d2:ac:6b:31:cc:e5:a8: - 07:c2:d6:22:f3:c6:0f:bf:67:d9:d6:b2:79:cd:48:b5:c3:e0: - e3:18:7f:b5:74:c9:43:19:fb:c4:93:29:ca:cc:90:2b:1b:6f: - 45:f6:25:f9 + Signature Algorithm: sha256WithRSAEncryption + 46:ef:cd:bf:c1:ef:36:a9:cb:99:b5:be:e2:a7:ba:69:0d:f5: + 9b:63:39:78:32:35:01:a8:b9:f1:70:0e:b5:d1:8f:94:2e:7a: + cb:65:d4:d0:b4:ad:52:b8:51:5f:64:2e:a8:08:a5:71:fe:c2: + 35:8a:0d:28:26:e5:be:ca:d7:f4:79:54:e1:27:8f:87:92:d3: + 04:72:1b:cc:c4:7f:8b:26:09:92:2d:c8:6f:27:da:97:31:80: + 0f:83:84:9c:e0:a4:88:c9:e3:8f:35:e7:de:bd:31:e2:fa:52: + 83:de:ee:5c:60:6e:8f:a5:8d:5e:53:41:18:42:f3:03:0b:05: + 0b:59:09:42:2e:1b:0b:29:b3:fe:11:3b:d5:ad:3f:4d:24:e8: + c0:da:4c:0d:93:94:ec:cd:18:0f:66:cd:03:d3:ee:a0:b2:7f: + 64:d7:39:66:19:72:9f:64:43:38:b4:b6:b3:ea:6f:39:e7:09: + 98:90:9f:6c:f5:e8:b3:2e:09:8d:7b:76:65:30:f4:c4:9b:8e: + 10:4e:9b:8c:93:63:44:9d:2b:8a:f3:f0:cf:f8:7b:65:95:38: + fb:b4:92:e8:6c:11:03:a2:a2:2f:ea:e0:22:b7:cd:cf:0d:a5: + 91:23:14:47:0c:34:8f:f1:11:cc:e8:1e:37:53:ec:a1:01:81: + 20:c0:2c:f5 -----BEGIN CERTIFICATE----- -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 +8RHM6B43U+yhAYEgwCz1 -----END CERTIFICATE----- diff --git a/mysql-test/std_data/server-key.pem b/mysql-test/std_data/server-key.pem index bf0ae205107..89aead41877 100644 --- a/mysql-test/std_data/server-key.pem +++ b/mysql-test/std_data/server-key.pem @@ -1,15 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/mysql-test/std_data/server8k-cert.pem b/mysql-test/std_data/server8k-cert.pem index c4c4c3a6374..dfae47b05d2 100644 --- a/mysql-test/std_data/server8k-cert.pem +++ b/mysql-test/std_data/server8k-cert.pem @@ -1,69 +1,207 @@ Certificate: Data: Version: 3 (0x2) - Serial Number: 5 (0x5) - Signature Algorithm: sha1WithRSAEncryption - Issuer: C=SE, ST=Uppsala, L=Uppsala, O=MySQL AB + Serial Number: 10754692786786449447 (0x9540581bd8dcb827) + Signature Algorithm: sha256WithRSAEncryption + Issuer: C=SE, ST=Stockholm, L=Stockholm, O=Oracle, OU=MySQL, CN=CA Validity - Not Before: Feb 20 03:00:54 2010 GMT - Not After : Sep 3 03:00:54 2030 GMT - Subject: C=SE, ST=Uppsala, O=MySQL AB, CN=server + Not Before: Dec 5 04:50:48 2014 GMT + Not After : Dec 1 04:50:48 2029 GMT + Subject: C=SE, ST=Stockholm, L=Stockholm, O=Oracle, OU=MySQL, CN=Server Subject Public Key Info: Public Key Algorithm: rsaEncryption - RSA Public Key: (1024 bit) - Modulus (1024 bit): - 00:c5:da:44:95:06:77:16:21:af:a0:c4:3c:e9:f8: - 1d:2d:95:f9:63:90:8c:3f:86:ba:77:76:4a:52:4b: - 6b:af:29:f5:1c:aa:d4:3f:3e:42:9f:6d:46:ba:86: - 90:b1:2d:cc:db:c6:33:15:a3:f4:af:53:33:4f:a1: - 56:d1:aa:3b:26:10:f7:64:b5:f9:bf:1b:b1:47:8e: - cc:a6:d6:0d:aa:4a:77:e3:a3:63:9d:2a:dc:65:f4: - 7f:91:17:38:2d:d6:cd:4e:8d:53:52:97:6e:87:fc: - 64:60:a6:a1:00:ac:96:6c:e4:42:94:75:17:46:6f: - 91:b5:dd:06:47:ed:05:e3:db + Public-Key: (8192 bit) + Modulus: + 00:d8:8f:9d:66:66:9c:12:ca:0a:ad:9e:9f:05:66: + 6c:6c:8a:db:19:9f:a2:d0:fa:38:dc:de:c5:a6:94: + 60:0d:4b:72:c9:85:e2:ff:27:c8:d4:ce:b1:29:66: + 31:e7:2b:4e:08:b3:a2:71:cf:1e:36:7c:8e:4d:08: + 6e:fd:7a:ea:c1:0d:5c:97:09:66:fa:ed:0b:36:64: + 8f:cc:39:35:a9:43:6c:a9:17:48:0f:2e:0a:4b:d3: + 94:bb:b0:5b:43:f1:4e:f7:e5:30:e1:ae:a2:a8:5d: + 3c:db:39:df:d6:4b:70:a6:c9:68:c3:f3:9d:19:d7: + 2f:2a:38:31:11:ab:f1:60:66:c3:38:4f:d9:6f:b5: + 49:df:ce:14:b5:fa:c8:95:04:50:69:90:9d:26:c2: + e9:07:69:7b:a2:d8:91:e7:cd:de:c4:ed:9c:e4:c8: + 8c:e3:a0:cd:dd:2b:37:21:8f:ee:54:38:91:2b:2b: + 01:86:90:f0:2e:9a:06:8a:e1:f2:a2:3f:d1:d4:21: + 9f:b0:81:eb:d0:e9:d3:e9:a9:28:6e:c2:06:4b:94: + 6e:96:70:f5:31:33:dd:97:2f:cc:5d:80:c5:74:ce: + c0:3d:b2:6a:81:b7:ce:65:4f:6a:49:3e:c9:5d:00: + 3c:06:4a:57:c9:a7:f9:bb:46:50:df:64:dc:13:1f: + 22:ad:21:0b:aa:4b:5d:94:60:9f:20:ff:28:aa:56: + 5f:f6:cd:23:34:fe:44:a2:d6:80:bd:a9:67:00:d6: + a1:82:82:9f:c9:e8:0c:97:26:1e:a9:b1:e2:ee:01: + ef:9d:c6:82:fc:72:33:02:40:35:cc:ae:51:23:f4: + f8:92:29:d3:2f:5c:1f:03:c6:81:7d:fb:4f:e9:de: + ed:68:3c:a1:be:7c:fa:11:96:2b:5a:10:c5:c5:cb: + 2e:7a:54:4c:7b:12:b8:07:01:d9:b5:38:0f:a6:43: + 70:28:81:8d:d7:95:ad:d6:e8:88:b4:19:62:05:7b: + 75:c0:2d:24:72:1c:4d:04:a3:f7:1d:6b:8b:fa:16: + a3:5a:6c:51:ba:5c:62:fa:3e:82:7f:4e:10:db:d0: + 52:d4:81:df:0e:5b:33:7e:20:77:1d:51:ca:4e:13: + ee:cd:72:36:28:b4:31:88:3d:61:0f:1a:80:19:f6: + 7d:71:5d:21:1f:dd:0b:d9:73:88:a9:72:4b:8d:a3: + d6:f1:4f:5d:01:6e:9e:c2:28:97:80:de:5b:2d:ac: + a3:c9:24:db:e9:0f:2b:36:ee:a7:f2:94:c1:41:7a: + 70:9f:fd:d0:31:a9:de:55:38:65:89:20:f4:02:f1: + 83:73:40:77:db:35:d2:66:ff:26:5f:f4:d2:e6:f9: + ba:fc:6a:66:b1:02:24:04:a3:32:4b:21:85:83:b4: + 6a:97:3c:25:7f:65:cc:a6:dd:cc:ac:e5:22:09:58: + dc:a1:0d:7d:b4:ac:98:98:81:1d:a7:83:d4:3a:e4: + 39:a7:04:6a:b6:b7:5d:a8:fe:0e:47:08:1d:95:61: + eb:a8:97:53:91:1e:ca:1f:3f:19:5a:01:73:da:33: + 32:d7:33:ca:39:1e:00:37:6b:f8:18:47:30:3a:2e: + 99:39:d0:d0:49:6d:87:c1:98:59:d0:21:ca:12:6d: + 89:33:0f:f2:52:6e:d6:c5:78:dd:15:b6:11:d6:5e: + 72:e8:c7:12:00:c3:8d:57:34:e5:d8:6d:a2:e8:47: + 79:83:8c:49:17:3b:75:24:0d:de:e1:3b:dd:bc:b7: + df:89:a6:31:e6:49:37:80:f8:8f:86:e3:42:f4:2e: + dc:de:58:45:c4:41:a9:2d:a6:5d:f0:7d:81:3d:54: + f4:8a:a3:5f:18:7c:02:c9:7f:1c:f5:9f:dd:0a:29: + 49:40:92:24:b3:b7:65:37:91:9a:a8:00:c4:4e:7f: + 7e:f7:97:de:24:2a:d7:3b:f2:a2:63:ec:38:b7:1f: + 9e:b5:72:99:bd:b1:c0:41:6a:57:97:e2:fb:11:32: + ba:a3:5d:82:48:c5:0a:cc:2c:f5:21:7a:f1:99:56: + 1b:54:9d:c7:64:50:62:80:94:50:5a:40:32:61:f3: + 2c:f8:09:dc:f0:6d:2b:60:29:c2:86:70:5a:57:12: + 7d:09:73:ca:41:6d:22:61:18:1a:48:cb:80:95:be: + 08:e8:15:99:de:36:3a:bf:09:67:35:e8:53:d9:40: + 1b:27:e5:14:32:09:73:e0:f6:a9:19:ee:81:90:dc: + b7:9d:b6:91:51:33:1e:1f:22:e0:bd:df:a8:d1:33: + a7:ab:9b:9c:27:7a:3c:ef:aa:9e:4d:f8:a8:97:63: + 24:20:c8:36:ab:05:8a:c0:80:9b:64:0c:1f:ec:4f: + de:ec:f0:9c:9c:54:db:02:ab:12:aa:ab:58:a3:49: + 25:bf:6a:0a:04:7f:2f:1d:41:11:23:4e:e2:83:51: + e3:f5:12:95:22:72:13:f4:be:6f:e2:00:29:4f:fe: + 9b:ae:b9:e2:7d:72:d3:1b:e8:12:3b:6d:b6:d2:62: + a4:91:31:46:e7:16:7f:9d:8d:74:5e:97:51:d1:cb: + 82:57:bb:bd:46:e4:9c:c5:bd:08:8b:68:20:f8:5e: + d6:aa:ed:6e:4d:ba:a4:29:fd:ac:5c:2f:25:14:d3: + 19:63:0c:01:75:6c:87:a5:0b:29:09:7f:13:7f:00: + d4:63:72:e2:a0:39:88:80:68:2c:3f:49:b1:9b:94: + 77:63:08:05:55 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE + Netscape Comment: + OpenSSL Generated Certificate X509v3 Subject Key Identifier: - 6E:60:3F:29:13:60:99:ED:0C:F7:15:B5:DB:7B:1C:FB:6F:60:19:ED + 3E:96:BB:23:C2:FD:41:11:7F:EB:63:9B:39:5F:58:2D:92:A0:F0:9F X509v3 Authority Key Identifier: - keyid:B1:FB:7E:77:B5:40:8D:68:11:7E:D9:11:E5:C3:C6:DA:4D:AC:51:B0 - DirName:/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB - serial:BE:58:AD:4C:1F:3D:25:95 + keyid:60:57:8F:09:CF:83:86:4B:35:32:BF:73:EB:81:4C:DB:36:27:12:8F - Signature Algorithm: sha1WithRSAEncryption - 63:2e:0f:07:14:06:cf:74:90:3d:37:42:f2:48:70:60:21:bc: - 34:52:31:f1:87:70:d2:b2:fb:ff:13:38:dc:f0:5e:43:d7:ee: - a7:c7:1f:ac:aa:d2:8c:4f:fa:3c:4c:73:f6:b6:c2:0c:a0:ea: - a2:c9:e2:73:61:c3:2e:78:40:0f:2a:d3:63:50:9b:b8:f9:89: - 40:ed:98:08:97:c3:07:24:17:34:b5:78:89:0a:bb:83:4c:e2: - 5c:2e:13:d6:21:30:ad:30:48:b5:70:12:ff:4a:6f:42:f0:f8: - 9f:b1:4b:bd:89:2b:f0:9d:e2:49:2b:35:69:18:1f:76:40:b4: - 76:bd:cb:dd:27:2f:c0:c1:e2:33:3e:6e:df:68:54:19:92:8a: - bb:13:9c:cf:d6:17:56:da:bf:0d:64:70:3a:45:b7:aa:5f:e3: - f5:96:ae:34:f2:17:37:27:d0:4b:e8:30:4a:c0:02:42:e2:d2: - 30:eb:eb:c7:d7:ec:d8:df:5c:43:58:e2:6f:b7:58:54:0d:c4: - 01:71:2d:59:8f:44:c7:a1:6c:0b:41:28:fa:b7:63:a7:68:d3: - 4f:c3:0f:17:9e:b2:32:50:e6:0b:87:3d:e2:39:47:c0:d8:0a: - 3b:f6:af:50:68:0f:9d:ef:6e:34:0d:3a:07:94:f8:a4:d7:24: - 86:32:d3:b4 + Signature Algorithm: sha256WithRSAEncryption + 19:b8:4d:94:a3:41:1b:78:e8:fa:da:7c:c3:0c:f5:42:6a:2e: + 04:8c:f4:6e:90:e0:d1:55:28:7c:97:85:18:12:c4:ff:d3:ba: + 74:f1:7f:af:b0:ab:4d:64:f4:45:58:6e:b1:2e:06:cc:a7:5b: + cd:25:8f:60:68:14:e1:f9:56:21:40:43:e4:c4:ee:91:72:01: + 7d:86:41:2f:ac:6d:be:c6:1a:2a:ae:dd:13:ca:51:01:37:33: + 7e:b9:1a:9a:28:16:8c:bc:d1:e7:d4:46:55:87:1f:05:93:4c: + b5:75:ff:ed:ca:29:b2:5d:15:05:4c:02:a9:53:3c:d9:11:01: + 04:db:82:ad:01:ad:4e:d4:7d:9e:6a:00:5e:cc:88:83:42:98: + 6e:4b:cd:7c:55:c6:4c:98:39:db:d1:e3:aa:f3:27:83:6a:3c: + 01:ad:c5:ee:ef:01:aa:b7:4d:f7:a1:86:34:9d:61:20:7c:a0: + c0:75:26:24:6f:a3:68:0e:03:4d:cf:f3:bf:d9:40:4f:1a:04: + 4d:9c:5e:62:49:37:5b:78:ee:c5:11:78:ee:e5:87:f7:f4:f1: + 6d:0d:bd:a2:fb:a2:6c:27:91:d4:84:43:03:f5:9b:11:50:ab: + 45:ca:7c:3d:fe:5c:6b:e1:03:20:c8:c9:ac:66:ff:74:6e:0d: + 87:47:75:77:41:ca:5e:e9:77:5f:2b:09:bb:a5:7d:fc:cf:ed: + 75:dd:b0:ee:b8:da:3e:59:d0:e2:7f:38:16:fe:04:c9:99:d1: + 06:84:11:b1:07:8a:4d:59:d6:70:c3:9b:f7:f8:b9:ae:99:86: + b6:31:a4:13:de:7e:23:27:33:96:d1:9b:15:65:98:04:e5:f8: + 73:3c:f3:72:ef:a1:28:06:1d:7e:88:52:c1:f7:eb:2a:e1:f7: + 57:e5:ed:08:e9:ee:f8:95:3d:ec:4c:98:93:e7:e1:ea:a5:02: + 37:c1:66:18:ba:01:78:05:6d:c4:6b:2c:61:ee:bf:a9:e1:4d: + bf:95:31:f5:28:2a:f8:c9:ce:72:a5:c7:a3:38:2c:f6:69:34: + eb:cb:e9:b3:4f:78:de:87:61:8a:34:bd:5a:64:27:f0:42:1a: + 22:e9:2b:ac:97:f1:ed:7a:50:3b:3e:18:ae:b7:d9:20:9b:d6: + 12:3b:18:b1:47:71:39:0a:31:54:9f:fe:f2:90:d7:b8:27:6b: + 49:e5:82:cd:82:99:95:b1:ab:aa:1f:7a:e4:4e:6e:46:91:a7: + 16:b8:09:a3:5b:ec:6f:57:ca:b4:4f:69:e7:f5:f3:b9:03:93: + 08:90:9d:8d:57:82:77:bc:69:f8:e4:46:d9:4d:d1:25:ea:b8: + 60:b0:e2:cd:0c:ff:c2:63:65:20:f4:2c:34:36:34:a3:cf:67: + 6a:01:3e:51:5f:4a:49:26:9d:30:3f:03:05:70:22:b1:e3:46: + d1:ff:23:23:45:08:4b:0e:77:db:91:d9:a2:5c:15:48:49:ee: + 08:48:90:c3:25:44:b7:7b:9f:82:96:7e:8e:91:91:e5:a0:4d: + af:04:b8:72:df:07:a0:4b:02:79:0e:38:05:47:61:c3:9e:b4: + bf:01:00:10:c3:12:44:64:12:7a:bc:e1:c8:41:e5:cb:0d:7c: + 52:32:7f:71:c1:3f:6e:d3:81:d3:12:ec:85:4c:16:72:d2:79: + f8:bf:c0:fe:31:14:47:53:20:87:73:bb:34:8f:60:4a:9e:91: + 35:6e:20:96:da:bd:4b:7e:bd:c7:c4:f9:25:54:40:2c:9d:b0: + 8b:b5:fb:1e:74:59:a5:f7:b9:b7:23:56:3b:eb:2e:0a:eb:f5: + 10:9b:88:5b:49:8e:0f:05:61:7b:e5:a9:a0:24:f2:16:3f:cb: + 5b:06:d6:a5:bb:94:3a:46:2e:43:c5:02:67:b1:7d:5d:b6:c0: + f9:93:2a:d6:18:95:89:73:ff:3b:a1:f3:a6:bd:5b:6a:f0:e0: + 11:e8:95:09:83:5d:69:c3:91:e8:88:ea:b2:7c:32:73:a8:b0: + a4:24:d8:e5:6f:c7:97:8b:3e:c7:1e:69:6a:2a:b7:db:d1:26: + 7b:94:83:27:6d:d2:82:58:dd:a7:c2:74:0d:43:13:e2:c5:96: + 9f:3c:00:40:1a:10:b1:da:62:23:2e:b7:5c:33:61:56:3b:8b: + b4:b9:01:64:71:67:82:7c:18:2c:e8:d9:cf:e7:da:4b:16:7a: + 91:67:af:82:0e:ac:7a:c9:cc:47:9b:84:b9:49:e8:3d:33:a4: + 66:3f:c3:c1:20:ba:d1:0e:1e:11:80:82:78:90:25:a4:bc:80: + a2:25:8a:5c:de:3c:59:52:2f:b3:50:bb:0b:5a:f1:96:8d:d2: + eb:b9:f1:e9:72:a8:ae:f2:15:fd:5a:9c:a3:e8:ca:26:e9:67: + 80:13:38:1f:38:9f:85:8a:82:3c:4f:d3:04:ff:3a:13:f7:b5: + 13:f7:e3:50:1d:d6:e1:e6:1e:d0:b4:c8:5e:21:d7:22:cc:01: + de:db:d1:c4:a2:5c:0b:dc:dc:2f:08:e4:2e:12:c5:4a:bc:a1: + b3:92:32:1e:05:5c:7e:ca:43:6e:2e:06:3f:27:fd:1b:75:f0: + 01:42:8d:ff:aa:f8:f1:47:5b:56:67:74:66:1b:aa:b5:75:41: + 69:ba:91:66:ce:c3:3a:00:7a:93:59:1c:0c:49:c2:d2:d8:8d: + 7a:57:a4:7d:ba:61:26:1e:e9:aa:ab:e6:cb:2c:16:0a -----BEGIN CERTIFICATE----- -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 +umEmHumqq+bLLBYK -----END CERTIFICATE----- diff --git a/mysql-test/std_data/server8k-key.pem b/mysql-test/std_data/server8k-key.pem index d3c3ec5baba..9b3f7ed2aa3 100644 --- a/mysql-test/std_data/server8k-key.pem +++ b/mysql-test/std_data/server8k-key.pem @@ -1,15 +1,99 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/mysql-test/suite/binlog/r/binlog_database.result b/mysql-test/suite/binlog/r/binlog_database.result index 556a23cd7b9..b04d2a09ec6 100644 --- a/mysql-test/suite/binlog/r/binlog_database.result +++ b/mysql-test/suite/binlog/r/binlog_database.result @@ -39,10 +39,31 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt1` /* generated by server */ master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ FLUSH STATUS; + +# 'DROP TABLE IF EXISTS <deleted tables>' is binlogged +# when 'DROP DATABASE' fails and at least one table is deleted +# from the database. +RESET MASTER; +CREATE DATABASE testing_1; +USE testing_1; +CREATE TABLE t1(c1 INT); +CREATE TABLE t2(c1 INT); +# Create a file in the database directory +SELECT 'hello' INTO OUTFILE 'fake_file.FAKE_FILE'; + +# 'DROP DATABASE' will fail if there is any other file in the the +# database directory +DROP DATABASE testing_1; +ERROR HY000: Error dropping database (can't rmdir './testing_1/', errno: 17) + +# Remove the fake file. +# Now we can drop the database. +DROP DATABASE testing_1; # # Bug#11765416 58381: FAILED DROP DATABASE CAN BREAK STATEMENT # BASED REPLICATION # +USE test; DROP DATABASE IF EXISTS db1; DROP TABLE IF EXISTS t3; CREATE DATABASE db1; @@ -58,7 +79,7 @@ Tables_in_db1 t2 show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # use `db1`; DROP TABLE `t1` +master-bin.000001 # Query # # use `db1`; DROP TABLE IF EXISTS `t1` DROP TABLE t3; DROP DATABASE db1; set binlog_format=mixed; @@ -102,10 +123,31 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # use `test`; DROP TEMPORARY TABLE `tt1` /* generated by server */ master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ FLUSH STATUS; + +# 'DROP TABLE IF EXISTS <deleted tables>' is binlogged +# when 'DROP DATABASE' fails and at least one table is deleted +# from the database. +RESET MASTER; +CREATE DATABASE testing_1; +USE testing_1; +CREATE TABLE t1(c1 INT); +CREATE TABLE t2(c1 INT); +# Create a file in the database directory +SELECT 'hello' INTO OUTFILE 'fake_file.FAKE_FILE'; + +# 'DROP DATABASE' will fail if there is any other file in the the +# database directory +DROP DATABASE testing_1; +ERROR HY000: Error dropping database (can't rmdir './testing_1/', errno: 17) + +# Remove the fake file. +# Now we can drop the database. +DROP DATABASE testing_1; # # Bug#11765416 58381: FAILED DROP DATABASE CAN BREAK STATEMENT # BASED REPLICATION # +USE test; DROP DATABASE IF EXISTS db1; DROP TABLE IF EXISTS t3; CREATE DATABASE db1; @@ -121,7 +163,7 @@ Tables_in_db1 t2 show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # use `db1`; DROP TABLE `t1` +master-bin.000001 # Query # # use `db1`; DROP TABLE IF EXISTS `t1` DROP TABLE t3; DROP DATABASE db1; set binlog_format=row; @@ -166,10 +208,31 @@ master-bin.000001 # Query # # COMMIT master-bin.000001 # Query # # DROP TEMPORARY TABLE IF EXISTS `test`.`tt1` /* generated by server */ master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */ FLUSH STATUS; + +# 'DROP TABLE IF EXISTS <deleted tables>' is binlogged +# when 'DROP DATABASE' fails and at least one table is deleted +# from the database. +RESET MASTER; +CREATE DATABASE testing_1; +USE testing_1; +CREATE TABLE t1(c1 INT); +CREATE TABLE t2(c1 INT); +# Create a file in the database directory +SELECT 'hello' INTO OUTFILE 'fake_file.FAKE_FILE'; + +# 'DROP DATABASE' will fail if there is any other file in the the +# database directory +DROP DATABASE testing_1; +ERROR HY000: Error dropping database (can't rmdir './testing_1/', errno: 17) + +# Remove the fake file. +# Now we can drop the database. +DROP DATABASE testing_1; # # Bug#11765416 58381: FAILED DROP DATABASE CAN BREAK STATEMENT # BASED REPLICATION # +USE test; DROP DATABASE IF EXISTS db1; DROP TABLE IF EXISTS t3; CREATE DATABASE db1; @@ -185,7 +248,7 @@ Tables_in_db1 t2 show binlog events from <binlog_start>; Log_name Pos Event_type Server_id End_log_pos Info -master-bin.000001 # Query # # use `db1`; DROP TABLE `t1` +master-bin.000001 # Query # # use `db1`; DROP TABLE IF EXISTS `t1` DROP TABLE t3; DROP DATABASE db1; show databases; diff --git a/mysql-test/suite/innodb/r/innodb-mdev-7055.result b/mysql-test/suite/innodb/r/innodb-mdev-7055.result new file mode 100644 index 00000000000..d00491fd7e5 --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb-mdev-7055.result @@ -0,0 +1 @@ +1 diff --git a/mysql-test/suite/innodb/r/innodb-mdev-7513.result b/mysql-test/suite/innodb/r/innodb-mdev-7513.result new file mode 100644 index 00000000000..bb3531e3f90 --- /dev/null +++ b/mysql-test/suite/innodb/r/innodb-mdev-7513.result @@ -0,0 +1,204 @@ +call mtr.add_suppression("Row size too large (> 8126)*"); +CREATE TABLE t1 ( text1 TEXT, +text2 TEXT, +text3 TEXT, +text4 TEXT, +text5 TEXT, +text6 TEXT, +text7 TEXT, +text8 TEXT, +text9 TEXT, +text10 TEXT, +text11 TEXT, +text12 TEXT, +text13 TEXT, +text14 TEXT, +text15 TEXT, +text16 TEXT, +text17 TEXT, +text18 TEXT, +text19 TEXT, +text20 TEXT, +text21 TEXT, +text22 TEXT, +text23 TEXT, +text24 TEXT, +text25 TEXT, +text26 TEXT, +text27 TEXT, +text28 TEXT, +text29 TEXT, +text30 TEXT, +text31 TEXT, +text32 TEXT, +text33 TEXT, +text34 TEXT, +text35 TEXT, +text36 TEXT, +text37 TEXT, +text38 TEXT, +text39 TEXT, +text40 TEXT, +text41 TEXT, +text42 TEXT, +text43 TEXT, +text44 TEXT, +text45 TEXT, +text46 TEXT, +text47 TEXT, +text48 TEXT, +text49 TEXT, +text50 TEXT, +text51 TEXT, +text52 TEXT, +text53 TEXT, +text54 TEXT, +text55 TEXT, +text56 TEXT, +text57 TEXT, +text58 TEXT, +text59 TEXT, +text60 TEXT, +text61 TEXT, +text62 TEXT, +text63 TEXT, +text64 TEXT, +text65 TEXT, +text66 TEXT, +text67 TEXT, +text68 TEXT, +text69 TEXT, +text70 TEXT, +text71 TEXT, +text72 TEXT, +text73 TEXT, +text74 TEXT, +text75 TEXT, +text76 TEXT, +text77 TEXT, +text78 TEXT, +text79 TEXT, +text80 TEXT, +text81 TEXT, +text82 TEXT, +text83 TEXT, +text84 TEXT, +text85 TEXT, +text86 TEXT, +text87 TEXT, +text88 TEXT, +text89 TEXT, +text90 TEXT, +text91 TEXT, +text92 TEXT, +text93 TEXT, +text94 TEXT, +text95 TEXT, +text96 TEXT, +text97 TEXT, +text98 TEXT, +text99 TEXT, +text100 TEXT, +text101 TEXT, +text102 TEXT, +text103 TEXT, +text104 TEXT, +text105 TEXT, +text106 TEXT, +text107 TEXT, +text108 TEXT, +text109 TEXT, +text110 TEXT, +text111 TEXT, +text112 TEXT, +text113 TEXT, +text114 TEXT, +text115 TEXT, +text116 TEXT, +text117 TEXT, +text118 TEXT, +text119 TEXT, +text120 TEXT, +text121 TEXT, +text122 TEXT, +text123 TEXT, +text124 TEXT, +text125 TEXT, +text126 TEXT, +text127 TEXT, +text128 TEXT, +text129 TEXT, +text130 TEXT, +text131 TEXT, +text132 TEXT, +text133 TEXT, +text134 TEXT, +text135 TEXT, +text136 TEXT, +text137 TEXT, +text138 TEXT, +text139 TEXT, +text140 TEXT, +text141 TEXT, +text142 TEXT, +text143 TEXT, +text144 TEXT, +text145 TEXT, +text146 TEXT, +text147 TEXT, +text148 TEXT, +text149 TEXT, +text150 TEXT, +text151 TEXT, +text152 TEXT, +text153 TEXT, +text154 TEXT, +text155 TEXT, +text156 TEXT, +text157 TEXT, +text158 TEXT, +text159 TEXT, +text160 TEXT, +text161 TEXT, +text162 TEXT, +text163 TEXT, +text164 TEXT, +text165 TEXT, +text166 TEXT, +text167 TEXT, +text168 TEXT, +text169 TEXT, +text170 TEXT, +text171 TEXT, +text172 TEXT, +text173 TEXT, +text174 TEXT, +text175 TEXT, +text176 TEXT, +text177 TEXT, +text178 TEXT, +text179 TEXT, +text180 TEXT, +text181 TEXT, +text182 TEXT, +text183 TEXT, +text184 TEXT, +text185 TEXT, +text186 TEXT, +text187 TEXT, +text188 TEXT, +text189 TEXT, +text190 TEXT, +text191 TEXT, +text192 TEXT, +text193 TEXT, +text194 TEXT, +text195 TEXT, +text196 TEXT, +text197 TEXT +) ENGINE = InnoDB; +INSERT INTO t1 VALUES ('abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef'); +DELETE FROM t1 WHERE text1 = 'abcdef'; +SELECT * from t1; +text1 text2 text3 text4 text5 text6 text7 text8 text9 text10 text11 text12 text13 text14 text15 text16 text17 text18 text19 text20 text21 text22 text23 text24 text25 text26 text27 text28 text29 text30 text31 text32 text33 text34 text35 text36 text37 text38 text39 text40 text41 text42 text43 text44 text45 text46 text47 text48 text49 text50 text51 text52 text53 text54 text55 text56 text57 text58 text59 text60 text61 text62 text63 text64 text65 text66 text67 text68 text69 text70 text71 text72 text73 text74 text75 text76 text77 text78 text79 text80 text81 text82 text83 text84 text85 text86 text87 text88 text89 text90 text91 text92 text93 text94 text95 text96 text97 text98 text99 text100 text101 text102 text103 text104 text105 text106 text107 text108 text109 text110 text111 text112 text113 text114 text115 text116 text117 text118 text119 text120 text121 text122 text123 text124 text125 text126 text127 text128 text129 text130 text131 text132 text133 text134 text135 text136 text137 text138 text139 text140 text141 text142 text143 text144 text145 text146 text147 text148 text149 text150 text151 text152 text153 text154 text155 text156 text157 text158 text159 text160 text161 text162 text163 text164 text165 text166 text167 text168 text169 text170 text171 text172 text173 text174 text175 text176 text177 text178 text179 text180 text181 text182 text183 text184 text185 text186 text187 text188 text189 text190 text191 text192 text193 text194 text195 text196 text197 +DROP TABLE t1; diff --git a/mysql-test/suite/innodb/r/multi_repair-7404.result b/mysql-test/suite/innodb/r/multi_repair-7404.result new file mode 100644 index 00000000000..b3db5755b87 --- /dev/null +++ b/mysql-test/suite/innodb/r/multi_repair-7404.result @@ -0,0 +1,21 @@ +create table `t1`(`a` int) engine=innodb partition by key (`a`); +create table `t2`(`b` int) engine=innodb; +create table `t3`(`c` int) engine=innodb; +insert t1 values (1); +insert t2 values (2); +insert t3 values (3); +repair table `t1`,`t2`,`t3`; +Table Op Msg_type Msg_text +test.t1 repair status OK +test.t2 repair status OK +test.t3 repair status OK +select * from t1; +a +1 +select * from t2; +b +2 +select * from t3; +c +3 +drop table t1, t2, t3; diff --git a/mysql-test/suite/innodb/t/innodb-mdev-7055.test b/mysql-test/suite/innodb/t/innodb-mdev-7055.test new file mode 100644 index 00000000000..8f4d647e35d --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb-mdev-7055.test @@ -0,0 +1,23 @@ +-- source include/have_innodb.inc + +# MDEV-7055: MySQL#74664 - InnoDB: Failing assertion: len <= col->len +# || col->mtype == 5 || (col->len == 0 && col->mtype == 1) in +# file rem0rec.cc line 845 +--disable_query_log +--disable_warnings +--disable_result_log +set @old_character_set=@@character_set_connection; +set character_set_connection=ucs2; +create TABLE t1 engine=innodb select if(0=0,'Y','N'); +insert INTO t1 values(date_format('2001-01-01','%W')); +select * from t1; +drop table t1; +set @@character_set_connection=@old_character_set; +--enable_result_log +--enable_warnings +--enable_query_log + +#produce something +--echo 1 + + diff --git a/mysql-test/suite/innodb/t/innodb-mdev-7513.test b/mysql-test/suite/innodb/t/innodb-mdev-7513.test new file mode 100644 index 00000000000..b929ea14781 --- /dev/null +++ b/mysql-test/suite/innodb/t/innodb-mdev-7513.test @@ -0,0 +1,220 @@ +-- source include/have_innodb.inc +-- source include/not_embedded.inc + +# MDEV-7513: ib_warn_row_too_big dereferences null thd + +call mtr.add_suppression("Row size too large (> 8126)*"); + +--disable_warnings +CREATE TABLE t1 ( text1 TEXT, +text2 TEXT, +text3 TEXT, +text4 TEXT, +text5 TEXT, +text6 TEXT, +text7 TEXT, +text8 TEXT, +text9 TEXT, +text10 TEXT, +text11 TEXT, +text12 TEXT, +text13 TEXT, +text14 TEXT, +text15 TEXT, +text16 TEXT, +text17 TEXT, +text18 TEXT, +text19 TEXT, +text20 TEXT, +text21 TEXT, +text22 TEXT, +text23 TEXT, +text24 TEXT, +text25 TEXT, +text26 TEXT, +text27 TEXT, +text28 TEXT, +text29 TEXT, +text30 TEXT, +text31 TEXT, +text32 TEXT, +text33 TEXT, +text34 TEXT, +text35 TEXT, +text36 TEXT, +text37 TEXT, +text38 TEXT, +text39 TEXT, +text40 TEXT, +text41 TEXT, +text42 TEXT, +text43 TEXT, +text44 TEXT, +text45 TEXT, +text46 TEXT, +text47 TEXT, +text48 TEXT, +text49 TEXT, +text50 TEXT, +text51 TEXT, +text52 TEXT, +text53 TEXT, +text54 TEXT, +text55 TEXT, +text56 TEXT, +text57 TEXT, +text58 TEXT, +text59 TEXT, +text60 TEXT, +text61 TEXT, +text62 TEXT, +text63 TEXT, +text64 TEXT, +text65 TEXT, +text66 TEXT, +text67 TEXT, +text68 TEXT, +text69 TEXT, +text70 TEXT, +text71 TEXT, +text72 TEXT, +text73 TEXT, +text74 TEXT, +text75 TEXT, +text76 TEXT, +text77 TEXT, +text78 TEXT, +text79 TEXT, +text80 TEXT, +text81 TEXT, +text82 TEXT, +text83 TEXT, +text84 TEXT, +text85 TEXT, +text86 TEXT, +text87 TEXT, +text88 TEXT, +text89 TEXT, +text90 TEXT, +text91 TEXT, +text92 TEXT, +text93 TEXT, +text94 TEXT, +text95 TEXT, +text96 TEXT, +text97 TEXT, +text98 TEXT, +text99 TEXT, +text100 TEXT, +text101 TEXT, +text102 TEXT, +text103 TEXT, +text104 TEXT, +text105 TEXT, +text106 TEXT, +text107 TEXT, +text108 TEXT, +text109 TEXT, +text110 TEXT, +text111 TEXT, +text112 TEXT, +text113 TEXT, +text114 TEXT, +text115 TEXT, +text116 TEXT, +text117 TEXT, +text118 TEXT, +text119 TEXT, +text120 TEXT, +text121 TEXT, +text122 TEXT, +text123 TEXT, +text124 TEXT, +text125 TEXT, +text126 TEXT, +text127 TEXT, +text128 TEXT, +text129 TEXT, +text130 TEXT, +text131 TEXT, +text132 TEXT, +text133 TEXT, +text134 TEXT, +text135 TEXT, +text136 TEXT, +text137 TEXT, +text138 TEXT, +text139 TEXT, +text140 TEXT, +text141 TEXT, +text142 TEXT, +text143 TEXT, +text144 TEXT, +text145 TEXT, +text146 TEXT, +text147 TEXT, +text148 TEXT, +text149 TEXT, +text150 TEXT, +text151 TEXT, +text152 TEXT, +text153 TEXT, +text154 TEXT, +text155 TEXT, +text156 TEXT, +text157 TEXT, +text158 TEXT, +text159 TEXT, +text160 TEXT, +text161 TEXT, +text162 TEXT, +text163 TEXT, +text164 TEXT, +text165 TEXT, +text166 TEXT, +text167 TEXT, +text168 TEXT, +text169 TEXT, +text170 TEXT, +text171 TEXT, +text172 TEXT, +text173 TEXT, +text174 TEXT, +text175 TEXT, +text176 TEXT, +text177 TEXT, +text178 TEXT, +text179 TEXT, +text180 TEXT, +text181 TEXT, +text182 TEXT, +text183 TEXT, +text184 TEXT, +text185 TEXT, +text186 TEXT, +text187 TEXT, +text188 TEXT, +text189 TEXT, +text190 TEXT, +text191 TEXT, +text192 TEXT, +text193 TEXT, +text194 TEXT, +text195 TEXT, +text196 TEXT, +text197 TEXT +) ENGINE = InnoDB; + +INSERT INTO t1 VALUES ('abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef', 'abcdef'); +--enable_warnings + +DELETE FROM t1 WHERE text1 = 'abcdef'; + +--source include/restart_mysqld.inc + +--disable_warnings +SELECT * from t1; +--enable_warnings + +DROP TABLE t1; + diff --git a/mysql-test/suite/innodb/t/innodb_corrupt_bit.test b/mysql-test/suite/innodb/t/innodb_corrupt_bit.test index 753f2e29ef2..88da919bfaa 100644 --- a/mysql-test/suite/innodb/t/innodb_corrupt_bit.test +++ b/mysql-test/suite/innodb/t/innodb_corrupt_bit.test @@ -3,11 +3,6 @@ # -- source include/have_innodb.inc -if (`select plugin_auth_version <= "5.5.40-MariaDB-36.1" from information_schema.plugins where plugin_name='innodb'`) -{ - --skip Not fixed in XtraDB as of 5.5.40-MariaDB-36.1 or earlier -} - # Issues with innodb_change_buffering_debug on Windows, so the test scenario # cannot be created on windows --source include/not_windows.inc @@ -16,6 +11,7 @@ if (`select plugin_auth_version <= "5.5.40-MariaDB-36.1" from information_schema --source include/have_debug.inc -- disable_query_log +call mtr.add_suppression("Flagged corruption of idx.*in CHECK TABLE"); # This test setup is extracted from bug56680.test: # The flag innodb_change_buffering_debug is only available in debug builds. # It instructs InnoDB to try to evict pages from the buffer pool when @@ -28,10 +24,10 @@ SET GLOBAL innodb_change_buffering_debug = 1; SET UNIQUE_CHECKS=0; CREATE DATABASE pad; -let $i=345; +let $i=338; while ($i) { - --eval CREATE TABLE pad.t$i (a INT PRIMARY KEY) ENGINE=InnoDB; +--eval CREATE TABLE pad.t$i(a INT PRIMARY KEY)ENGINE=InnoDB; dec $i; } diff --git a/mysql-test/suite/innodb/t/multi_repair-7404.test b/mysql-test/suite/innodb/t/multi_repair-7404.test new file mode 100644 index 00000000000..0775cd8b200 --- /dev/null +++ b/mysql-test/suite/innodb/t/multi_repair-7404.test @@ -0,0 +1,18 @@ +# +# MDEV-7404 REPAIR multiple tables crash in MDL_ticket::has_stronger_or_equal_type +# + +--source include/have_partition.inc +--source include/have_innodb.inc +create table `t1`(`a` int) engine=innodb partition by key (`a`); +create table `t2`(`b` int) engine=innodb; +create table `t3`(`c` int) engine=innodb; +insert t1 values (1); +insert t2 values (2); +insert t3 values (3); +repair table `t1`,`t2`,`t3`; +select * from t1; +select * from t2; +select * from t3; +drop table t1, t2, t3; + diff --git a/mysql-test/suite/plugins/r/server_audit.result b/mysql-test/suite/plugins/r/server_audit.result index 8843fc8b3e9..d91a4f424fe 100644 --- a/mysql-test/suite/plugins/r/server_audit.result +++ b/mysql-test/suite/plugins/r/server_audit.result @@ -85,6 +85,66 @@ create table sa_t1(id int); insert into sa_t1 values (1), (2); drop table sa_t1; drop database sa_db; +create database sa_db; +use sa_db; +CREATE USER u1 IDENTIFIED BY 'pwd-123'; +GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321"; +SET PASSWORD FOR u1 = PASSWORD('pwd 098'); +CREATE USER u3 IDENTIFIED BY ''; +drop user u1, u2, u3; +set global server_audit_events='query_ddl'; +create table t1(id int); +insert into t1 values (1), (2); +select * from t1; +id +1 +2 +select 2; +2 +2 +(select 2); +2 +2 +/*! select 2*/; +2 +2 +/*comment*/ select 2; +2 +2 +drop table t1; +set global server_audit_events='query_ddl,query_dml'; +create table t1(id int); +insert into t1 values (1), (2); +select * from t1; +id +1 +2 +select 2; +2 +2 +drop table t1; +set global server_audit_events='query_dml'; +create table t1(id int); +insert into t1 values (1), (2); +select * from t1; +id +1 +2 +select 2; +2 +2 +(select 2); +2 +2 +/*! select 2*/; +2 +2 +/*comment*/ select 2; +2 +2 +drop table t1; +set global server_audit_events=''; +drop database sa_db; set global server_audit_file_path='.'; show status like 'server_audit_current_log'; Variable_name Value @@ -176,19 +236,65 @@ TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,proc, TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,event, TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop database sa_db',0 TIME,HOSTNAME,root,localhost,ID,0,DISCONNECT,sa_db,,0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\'.\'',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\'.\'',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'show status like \'server_audit_current_log\'',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\'\'',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\'\'',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'show status like \'server_audit_current_log\'',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\' \'',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\' \'',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'show status like \'server_audit_current_log\'',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\'nonexisting_dir/\'',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'set global server_audit_file_path=\'nonexisting_dir/\'',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'SHOW WARNINGS',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'show status like \'server_audit_current_log\'',0 -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'show variables like \'server_audit%\'',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'create database sa_db',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'use sa_db',0 +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,user, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,db, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,tables_priv, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,columns_priv, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,procs_priv, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,proxies_priv, +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'CREATE USER u1 IDENTIFIED BY *****',0 +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,user, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,tables_priv, +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'GRANT ALL ON sa_db TO u2 IDENTIFIED BY *****',0 +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,user, +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'SET PASSWORD FOR u1 = PASSWORD(*****)',0 +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,user, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,db, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,tables_priv, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,columns_priv, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,procs_priv, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,proxies_priv, +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'CREATE USER u3 IDENTIFIED BY *****',0 +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,user, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,db, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,tables_priv, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,columns_priv, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,procs_priv, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,proxies_priv, +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop user u1, u2, u3',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'create table t1(id int)',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop table t1',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'create table t1(id int)',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'insert into t1 values (1), (2)',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'select * from t1',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'select 2',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop table t1',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'insert into t1 values (1), (2)',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'select * from t1',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'select 2',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'(select 2)',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'/*! select 2*/',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'/*comment*/ select 2',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_events=\'\'',0 +TIME,HOSTNAME,root,localhost,ID,ID,READ,mysql,proc, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,proc, +TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,event, +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'drop database sa_db',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\'.\'',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\'.\'',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'show status like \'server_audit_current_log\'',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\'\'',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\'\'',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'show status like \'server_audit_current_log\'',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\' \'',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\' \'',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'show status like \'server_audit_current_log\'',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\'nonexisting_dir/\'',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'set global server_audit_file_path=\'nonexisting_dir/\'',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'SHOW WARNINGS',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'show status like \'server_audit_current_log\'',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'show variables like \'server_audit%\'',0 TIME,HOSTNAME,root,localhost,ID,ID,WRITE,mysql,plugin, -TIME,HOSTNAME,root,localhost,ID,ID,QUERY,test,'uninstall plugin server_audit',0 +TIME,HOSTNAME,root,localhost,ID,ID,QUERY,sa_db,'uninstall plugin server_audit',0 diff --git a/mysql-test/suite/plugins/t/server_audit.test b/mysql-test/suite/plugins/t/server_audit.test index f63c8022392..f59a68e3148 100644 --- a/mysql-test/suite/plugins/t/server_audit.test +++ b/mysql-test/suite/plugins/t/server_audit.test @@ -15,6 +15,7 @@ connect (con1,localhost,root,,mysql); connection default; disconnect con1; --sleep 2 +--sleep 2 --replace_result $MASTER_MYSOCK MASTER_SOCKET $MASTER_MYPORT MASTER_PORT --error ER_ACCESS_DENIED_ERROR connect (con1,localhost,no_such_user,,mysql); @@ -45,6 +46,8 @@ set global server_audit_events=''; create database sa_db; connect (con1,localhost,root,,test); connection con1; +--sleep 2 +--sleep 2 create table t1 (id2 int); insert into t1 values (1), (2); select * from t1; @@ -56,8 +59,43 @@ drop table sa_t1; drop database sa_db; connection default; disconnect con1; - --sleep 2 +--sleep 2 +create database sa_db; +use sa_db; +CREATE USER u1 IDENTIFIED BY 'pwd-123'; +GRANT ALL ON sa_db TO u2 IDENTIFIED BY "pwd-321"; +SET PASSWORD FOR u1 = PASSWORD('pwd 098'); +CREATE USER u3 IDENTIFIED BY ''; +drop user u1, u2, u3; + +set global server_audit_events='query_ddl'; +create table t1(id int); +insert into t1 values (1), (2); +select * from t1; +select 2; +(select 2); +/*! select 2*/; +/*comment*/ select 2; +drop table t1; +set global server_audit_events='query_ddl,query_dml'; +create table t1(id int); +insert into t1 values (1), (2); +select * from t1; +select 2; +drop table t1; +set global server_audit_events='query_dml'; +create table t1(id int); +insert into t1 values (1), (2); +select * from t1; +select 2; +(select 2); +/*! select 2*/; +/*comment*/ select 2; +drop table t1; +set global server_audit_events=''; +drop database sa_db; + set global server_audit_file_path='.'; --replace_regex /\.[\\\/]/HOME_DIR\// show status like 'server_audit_current_log'; diff --git a/mysql-test/suite/rpl/r/rpl_drop_db_fail.result b/mysql-test/suite/rpl/r/rpl_drop_db_fail.result new file mode 100644 index 00000000000..1be90338493 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_drop_db_fail.result @@ -0,0 +1,16 @@ +include/master-slave.inc +[connection master] +CREATE DATABASE IF NOT EXISTS db1; +CREATE DATABASE IF NOT EXISTS db2; +use db1; +CREATE TABLE a(id INT); +CREATE VIEW v AS SELECT * FROM a; +CREATE TABLE table_father(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20)) ENGINE=INNODB; +use db2; +CREATE TABLE table_child(id INT PRIMARY KEY, info VARCHAR(20), father_id INT) ENGINE=INNODB; +ALTER TABLE table_child ADD CONSTRAINT aaa FOREIGN KEY (father_id) REFERENCES db1.table_father(id); +DROP DATABASE db1; +ERROR 23000: Cannot delete or update a parent row: a foreign key constraint fails +DROP DATABASE db2; +DROP DATABASE db1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_drop_db_fail.test b/mysql-test/suite/rpl/t/rpl_drop_db_fail.test new file mode 100644 index 00000000000..77e6cb957f7 --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_drop_db_fail.test @@ -0,0 +1,32 @@ +############################################################################### +# Bug#20041860: SLAVE ERROR WHEN DROP DATABASE +# +# Test: +# ===== +# Create two databases such that one database has a dependency over the other +# database and try to drop the database which has a dependency. This should +# not cause slave to break. +############################################################################### +--source include/have_innodb.inc +--source include/master-slave.inc + +connection master; +CREATE DATABASE IF NOT EXISTS db1; +CREATE DATABASE IF NOT EXISTS db2; + +use db1; +CREATE TABLE a(id INT); +CREATE VIEW v AS SELECT * FROM a; +CREATE TABLE table_father(id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20)) ENGINE=INNODB; + +use db2; +CREATE TABLE table_child(id INT PRIMARY KEY, info VARCHAR(20), father_id INT) ENGINE=INNODB; +ALTER TABLE table_child ADD CONSTRAINT aaa FOREIGN KEY (father_id) REFERENCES db1.table_father(id); + +--error ER_ROW_IS_REFERENCED +DROP DATABASE db1; +DROP DATABASE db2; +--sync_slave_with_master +--connection master +DROP DATABASE db1; +--source include/rpl_end.inc diff --git a/mysql-test/suite/sys_vars/r/stored_program_cache_basic.result b/mysql-test/suite/sys_vars/r/stored_program_cache_basic.result index f1638520f72..7f882255567 100644 --- a/mysql-test/suite/sys_vars/r/stored_program_cache_basic.result +++ b/mysql-test/suite/sys_vars/r/stored_program_cache_basic.result @@ -23,7 +23,7 @@ Warnings: Warning 1292 Truncated incorrect stored_program_cache value: '-1' SELECT @@global.stored_program_cache; @@global.stored_program_cache -256 +0 SET @@global.stored_program_cache =100000000000; Warnings: Warning 1292 Truncated incorrect stored_program_cache value: '100000000000' @@ -31,11 +31,9 @@ SELECT @@global.stored_program_cache; @@global.stored_program_cache 524288 SET @@global.stored_program_cache = 0; -Warnings: -Warning 1292 Truncated incorrect stored_program_cache value: '0' SELECT @@global.stored_program_cache; @@global.stored_program_cache -256 +0 SET @@global.stored_program_cache = 10000.01; ERROR 42000: Incorrect argument type to variable 'stored_program_cache' SET @@global.stored_program_cache = ON; diff --git a/mysql-test/suite/sys_vars/r/stored_program_cache_func.result b/mysql-test/suite/sys_vars/r/stored_program_cache_func.result new file mode 100644 index 00000000000..11151847d6b --- /dev/null +++ b/mysql-test/suite/sys_vars/r/stored_program_cache_func.result @@ -0,0 +1,52 @@ +create procedure p1() select 1; +flush status; +show status like 'handler_read_key'; +Variable_name Value +Handler_read_key 0 +call p1; +1 +1 +show status like 'handler_read_key'; +Variable_name Value +Handler_read_key 1 +call p1; +1 +1 +show status like 'handler_read_key'; +Variable_name Value +Handler_read_key 1 +set global stored_program_cache=0; +call p1; +1 +1 +show status like 'handler_read_key'; +Variable_name Value +Handler_read_key 2 +call p1; +1 +1 +show status like 'handler_read_key'; +Variable_name Value +Handler_read_key 3 +drop procedure p1; +set global stored_program_cache=default; +create procedure pr(i int) begin +create table t1 (a int, b int); +if (i = 1) then alter table t1 drop a; +else alter table t1 drop b; +end if; +select * from t1; +drop table t1; +end | +call pr(1); +b +call pr(2); +ERROR 42S22: Unknown column 'test.t1.b' in 'field list' +drop table t1; +set global stored_program_cache=0; +call pr(1); +b +call pr(2); +a +drop procedure pr; +set global stored_program_cache=default; diff --git a/mysql-test/suite/sys_vars/t/stored_program_cache_func.test b/mysql-test/suite/sys_vars/t/stored_program_cache_func.test new file mode 100644 index 00000000000..f85fc8eb1bf --- /dev/null +++ b/mysql-test/suite/sys_vars/t/stored_program_cache_func.test @@ -0,0 +1,43 @@ +create procedure p1() select 1; + +flush status; +show status like 'handler_read_key'; +call p1; +show status like 'handler_read_key'; +call p1; +show status like 'handler_read_key'; + +set global stored_program_cache=0; + +call p1; +show status like 'handler_read_key'; +call p1; +show status like 'handler_read_key'; + +drop procedure p1; +set global stored_program_cache=default; + +# Test for missing SP automatic reparsing. +# when MDEV-5816 is implemented, it should be removed. + +--delimiter | +create procedure pr(i int) begin + create table t1 (a int, b int); + if (i = 1) then alter table t1 drop a; + else alter table t1 drop b; + end if; + select * from t1; + drop table t1; +end | +--delimiter ; +call pr(1); +--error ER_BAD_FIELD_ERROR +call pr(2); +drop table t1; + +set global stored_program_cache=0; +call pr(1); +call pr(2); +drop procedure pr; +set global stored_program_cache=default; + diff --git a/mysql-test/t/error_simulation-master.opt b/mysql-test/t/error_simulation-master.opt new file mode 100644 index 00000000000..c9f8d7bd0c0 --- /dev/null +++ b/mysql-test/t/error_simulation-master.opt @@ -0,0 +1 @@ +--tmpdir=$MYSQLTEST_VARDIR/tmp diff --git a/mysql-test/t/error_simulation.test b/mysql-test/t/error_simulation.test index 58ead1e3ced..7c343ed6566 100644 --- a/mysql-test/t/error_simulation.test +++ b/mysql-test/t/error_simulation.test @@ -1,4 +1,5 @@ -- source include/have_debug.inc +--source include/not_embedded.inc # # Bug #28499: crash for grouping query when tmp_table_size is too small @@ -112,3 +113,38 @@ DROP TABLE t1,t2; --echo # --echo # End of 5.1 tests --echo # + + +--echo # +--echo # BUG#11747548:DETECT ORPHAN TEMP-POOL FILES, AND HANDLE GRACEFULLY. +--echo # + +--echo #Set up. +CREATE TABLE pid_table(pid_no INT); +CREATE TABLE t1 (a BLOB); +INSERT INTO t1 VALUES (1), (2); + +--echo #Create MYD and MYI files for intrinsic temp table. +--let $pid_file=`SELECT @@pid_file` +--replace_result $pid_file pid_file +--eval LOAD DATA LOCAL INFILE '$pid_file' INTO TABLE pid_table +--let $temp_file= `SELECT CONCAT('#sql_', LCASE(HEX(pid_no)), '_0') FROM pid_table` +--write_file $MYSQLTEST_VARDIR/tmp/$temp_file.MYD +EOF +--write_file $MYSQLTEST_VARDIR/tmp/$temp_file.MYI +EOF +--write_file $MYSQLTEST_VARDIR/tmp/$temp_file.MAD +EOF +--write_file $MYSQLTEST_VARDIR/tmp/$temp_file.MAI +EOF + +--echo #Reports an error since the temp file already exists. +--replace_regex /.*Can't create\/write *.*/Can't create or write to file/ +#--error 1 +SELECT a FROM t1 ORDER BY rand(1); + +--echo #With patch, the query executes successfully. +SELECT a FROM t1 ORDER BY rand(1); + +--echo #cleanup +DROP TABLE t1, pid_table; diff --git a/mysql-test/t/file_contents.test b/mysql-test/t/file_contents.test index 746f4e3ae06..5537e7ee85b 100644 --- a/mysql-test/t/file_contents.test +++ b/mysql-test/t/file_contents.test @@ -36,7 +36,7 @@ if ($dir_bin eq '/usr/') { # Slackware $dir_docs = glob "$dir_bin/doc/mariadb-[0-9]*" unless -d $dir_docs; } else { - # tar.gz package, Windows, or developer work (in BZR) + # tar.gz package, Windows, or developer work (in git) $dir_docs = $dir_bin; if(-d "$dir_docs/docs") { $dir_docs = "$dir_docs/docs"; # package @@ -49,7 +49,7 @@ $found_revision = "No line 'revision-id: .....'"; open(I_SRC,"<","$dir_docs/INFO_SRC") or print "Cannot open 'INFO_SRC' in '$dir_docs' (starting from bindir '$dir_bin')\n"; while(defined ($line = <I_SRC>)) { if ($line =~ m|^MySQL source \d\.\d\.\d+|) {$found_version = "Found MySQL version number";} - if ($line =~ m|^revision-id: .*@.*-2\d{13}-\w+$|) {$found_revision = "Found BZR revision id";} + if ($line =~ m|^commit: \w{40}$|) {$found_revision = "Found GIT revision id";} } close I_SRC; print "INFO_SRC: $found_version / $found_revision\n"; diff --git a/mysql-test/t/frm_bad_row_type-7333.test b/mysql-test/t/frm_bad_row_type-7333.test new file mode 100644 index 00000000000..5100a85cb22 --- /dev/null +++ b/mysql-test/t/frm_bad_row_type-7333.test @@ -0,0 +1,14 @@ +# +# MDEV-7333 "'show table status like 'table_name'" on tokudb table lead to MariaDB crash +# +let $datadir= `select @@datadir`; +call mtr.add_suppression("bad_row_type.frm: invalid value 11 for the field row_format"); +copy_file std_data/bad_row_type.MYD $datadir/test/bad_row_type.MYD; +copy_file std_data/bad_row_type.MYI $datadir/test/bad_row_type.MYI; +copy_file std_data/bad_row_type.frm $datadir/test/bad_row_type.frm; + +select * from bad_row_type; +show create table bad_row_type; +replace_column 12 x 13 x; +show table status like 'bad_row_type'; +drop table bad_row_type; diff --git a/mysql-test/t/gis.test b/mysql-test/t/gis.test index 4d421e15d58..bce1fa2c226 100644 --- a/mysql-test/t/gis.test +++ b/mysql-test/t/gis.test @@ -1465,4 +1465,9 @@ create table t1 (pt point); insert into t1 values(Geomfromtext('POLYGON((1 1, 2 2, 2 1, 1 1))')); drop table t1; +# +# MDEV-7516 Assertion `!cur_p->event' failed in Gcalc_scan_iterator::arrange_event(int, int) +# +SELECT st_astext(ST_Buffer(ST_PolygonFromText('POLYGON((3 5, 2 4, 2 5, 3 5))'), -100)); + --echo End of 5.5 tests diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test index 2fabab1f645..311edff909e 100644 --- a/mysql-test/t/information_schema.test +++ b/mysql-test/t/information_schema.test @@ -1799,6 +1799,23 @@ drop view v1; --echo # Clean-up. drop database mysqltest; +--echo # +--echo # Test for bug #16869534 - "QUERYING SUBSET OF COLUMNS DOESN'T USE TABLE +--echo # CACHE; OPENED_TABLES INCREASES" +--echo # +--disable_result_log +SELECT * FROM INFORMATION_SCHEMA.TABLES; +--enable_result_log +SELECT VARIABLE_VALUE INTO @val1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE + VARIABLE_NAME LIKE 'Opened_tables'; +--disable_result_log +SELECT ENGINE FROM INFORMATION_SCHEMA.TABLES; +--enable_result_log +--echo # The below SELECT query should give same output as above SELECT query. +SELECT VARIABLE_VALUE INTO @val2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE + VARIABLE_NAME LIKE 'Opened_tables'; +--echo # The below select should return '1' +SELECT @val1 = @val2; --echo # --echo # End of 5.5 tests diff --git a/mysql-test/t/mysqlcheck.test b/mysql-test/t/mysqlcheck.test index c0025f9e742..7c55bb73c1f 100644 --- a/mysql-test/t/mysqlcheck.test +++ b/mysql-test/t/mysqlcheck.test @@ -13,8 +13,8 @@ # --disable_warnings -DROP TABLE IF EXISTS t1, `t``1`, `t 1`; -drop view if exists v1; +DROP TABLE IF EXISTS t1, `t``1`, `t 1`, test.`t.1`, v1; +drop view if exists t1, `t``1`, `t 1`, test.`t.1`, v1; drop database if exists client_test_db; # Repair any tables in mysql, sometimes the slow_log is marked as crashed # after server has been killed @@ -313,3 +313,13 @@ CHECK TABLE bug47205 FOR UPGRADE; CHECK TABLE bug47205 FOR UPGRADE; DROP TABLE bug47205; + +--echo # +--echo #MDEV-6128:[PATCH] mysqlcheck wrongly escapes '.' in table names +--echo # +CREATE TABLE test.`t.1` (id int); + +--echo mysqlcheck test t.1 +--exec $MYSQL_CHECK test t.1 + +drop table test.`t.1`; diff --git a/mysql-test/t/openssl_1.test b/mysql-test/t/openssl_1.test index bee0e2cc720..3594b8c86eb 100644 --- a/mysql-test/t/openssl_1.test +++ b/mysql-test/t/openssl_1.test @@ -15,8 +15,8 @@ insert into t1 values (5); grant select on test.* to ssl_user1@localhost require SSL; grant select on test.* to ssl_user2@localhost require cipher "DHE-RSA-AES256-SHA"; -grant select on test.* to ssl_user3@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Uppsala/O=MySQL AB"; -grant select on test.* to ssl_user4@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Uppsala/O=MySQL AB" ISSUER "/C=SE/ST=Uppsala/L=Uppsala/O=MySQL AB"; +grant select on test.* to ssl_user3@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Stockholm/L=Stockholm/O=Oracle/OU=MySQL/CN=Client"; +grant select on test.* to ssl_user4@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "/C=SE/ST=Stockholm/L=Stockholm/O=Oracle/OU=MySQL/CN=Client" ISSUER "/C=SE/ST=Stockholm/L=Stockholm/O=Oracle/OU=MySQL/CN=CA"; grant select on test.* to ssl_user5@localhost require cipher "DHE-RSA-AES256-SHA" AND SUBJECT "xxx"; flush privileges; diff --git a/mysql-test/t/processlist.test b/mysql-test/t/processlist.test index 9c555c0f9fb..a8f8a4ed64c 100644 --- a/mysql-test/t/processlist.test +++ b/mysql-test/t/processlist.test @@ -2,6 +2,7 @@ # MDEV-4578 information_schema.processlist reports incorrect value for Time (2147483647) # +source include/have_debug.inc; source include/have_debug_sync.inc; let $tid= `SELECT CONNECTION_ID()`; @@ -21,6 +22,7 @@ SET DEBUG_SYNC = 'now SIGNAL fill_schema_proceed'; connection con1; --replace_result $tid TID reap; +set debug_sync='reset'; connection default; # @@ -28,15 +30,13 @@ connection default; # connection con1; -# Trigger a signal once the thread has gone from "Query" to "Sleep" command -# state. Note we need to execute this twice: Once at the end of SET DEBUG_SYNC, -# and once for the intended time, at the end of SELECT SLEEP(). -SET DEBUG_SYNC = 'dispatch_command_end SIGNAL query_done EXECUTE 2'; -connection default; -# Wait for and clear the first signal set during SET DEBUG_SYNC. -SET DEBUG_SYNC= 'now WAIT_FOR query_done'; -SET DEBUG_SYNC= 'now SIGNAL nosignal'; -connection con1; +# This DBUG insertion triggers a DEBUG_SYNC signal "query_done" once +# the below SELECT SLEEP(5) has gone from "Query" to "Sleep" command +# state. (We cannot just set the DEBUG_SYNC directly here, because +# then it can trigger at the end of the SET DEBUG_SYNC statement (or +# at the end of the Prepare step of the SELECT, if --ps-protocol), +# thus occuring too early). +SET debug_dbug="+d,sleep_inject_query_done_debug_sync"; select sleep(5); #run a query that will take some time connection default; diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test index 9cb9deff3f8..b96799215fe 100644 --- a/mysql-test/t/view.test +++ b/mysql-test/t/view.test @@ -5335,6 +5335,38 @@ DROP FUNCTION f1; DROP VIEW v1; DROP TABLE t1, t2; + +create view v1 as select 1; + +--let $MYSQLD_DATADIR= `select @@datadir` +--let SEARCH_FILE= $MYSQLD_DATADIR/test/v1.frm +--let SEARCH_PATTERN=mariadb-version +--source include/search_pattern_in_file.inc + +drop view v1; + +--echo # +--echo # MDEV-7260: Crash in get_best_combination when executing multi-table +--echo # UPDATE with nested views +--echo # + +CREATE TABLE `t1` (`id` bigint(20)); + +INSERT INTO `t1` VALUES (1),(2); + +CREATE TABLE `t2` (`id` bigint(20)); + +CREATE TABLE `t3` (`id` bigint(20), `flag` tinyint(4)); + +create view v1 as select id from t1; + +create view v2 as select t2.* from (t2 left join v1 using (id)); + +update t3 left join v2 using (id) set flag=flag+1; + +drop view v2, v1; +drop table t1, t2, t3; + --echo # ----------------------------------------------------------------- --echo # -- End of 5.5 tests. --echo # ----------------------------------------------------------------- diff --git a/mysys/my_context.c b/mysys/my_context.c index 9be5ab80468..80156df4495 100644 --- a/mysys/my_context.c +++ b/mysys/my_context.c @@ -729,33 +729,36 @@ my_context_continue(struct my_context *c) #ifdef MY_CONTEXT_DISABLE int -my_context_continue(struct my_context *c) +my_context_continue(struct my_context *c __attribute__((unused))) { return -1; } int -my_context_spawn(struct my_context *c, void (*f)(void *), void *d) +my_context_spawn(struct my_context *c __attribute__((unused)), + void (*f)(void *) __attribute__((unused)), + void *d __attribute__((unused))) { return -1; } int -my_context_yield(struct my_context *c) +my_context_yield(struct my_context *c __attribute__((unused))) { return -1; } int -my_context_init(struct my_context *c, size_t stack_size) +my_context_init(struct my_context *c __attribute__((unused)), + size_t stack_size __attribute__((unused))) { return -1; /* Out of memory */ } void -my_context_destroy(struct my_context *c) +my_context_destroy(struct my_context *c __attribute__((unused))) { } diff --git a/packaging/WiX/custom_ui.wxs b/packaging/WiX/custom_ui.wxs index d49e4210b12..a28c3c9b8a1 100644 --- a/packaging/WiX/custom_ui.wxs +++ b/packaging/WiX/custom_ui.wxs @@ -2,7 +2,7 @@ xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<!--
- Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
+ Copyright (c) 2010, 2015, Oracle and/or its affiliates. All rights reserved.
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
@@ -30,7 +30,7 @@ <Control Id="Back" Type="PushButton" X="156" Y="243" Width="56" Height="17" Text="!(loc.WixUIBack)" Disabled="yes" />
<Control Id="Description" Type="Text" X="135" Y="80" Width="220" Height="60" Transparent="yes" NoPrefix="yes" Text="!(loc.WelcomeDlgDescription)" />
<Control Id="Title" Type="Text" X="135" Y="20" Width="220" Height="60" Transparent="yes" NoPrefix="yes" Text="!(loc.WelcomeDlgTitle)" />
- <Control Id="CopyrightText" Type="Text" X="135" Y="200" Width="220" Height="40" Transparent="yes" Text="Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved." />
+ <Control Id="CopyrightText" Type="Text" X="135" Y="200" Width="220" Height="40" Transparent="yes" Text="Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved." />
<Control Id="Bitmap" Type="Bitmap" X="0" Y="0" Width="370" Height="234" TabSkip="no" Text="!(loc.WelcomeDlgBitmap)" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
</Dialog>
diff --git a/plugin/server_audit/server_audit.c b/plugin/server_audit/server_audit.c index 5c19b366347..491a98e44dd 100644 --- a/plugin/server_audit/server_audit.c +++ b/plugin/server_audit/server_audit.c @@ -14,11 +14,10 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#define PLUGIN_VERSION 0x101 -#define PLUGIN_STR_VERSION "1.1.7" +#define PLUGIN_VERSION 0x102 +#define PLUGIN_STR_VERSION "1.2.0" #include <my_config.h> - #include <stdio.h> #include <time.h> #include <string.h> @@ -142,6 +141,10 @@ static int my_strnncoll_binary(CHARSET_INFO * cs __attribute__((unused)), #define flogger_mutex_lock(A) pthread_mutex_lock(&(A)->m_mutex) #define flogger_mutex_unlock(A) pthread_mutex_unlock(&(A)->m_mutex) +static char **int_mysql_data_home; +static char *default_home= (char *)"."; +#define mysql_data_home (*int_mysql_data_home) + #include "../../mysys/file_logger.c" #endif /*!MARIADB_ONLY*/ @@ -165,6 +168,7 @@ static int my_strnncoll_binary(CHARSET_INFO * cs __attribute__((unused)), extern char server_version[]; static const char *serv_ver= NULL; static int started_mysql= 0; +static int started_mariadb= 0; static int maria_above_5= 0; static char *incl_users, *excl_users, *file_path, *syslog_info; @@ -222,11 +226,15 @@ static MYSQL_SYSVAR_STR(excl_users, excl_users, PLUGIN_VAR_RQCMDARG, NULL, update_excl_users, NULL); /* bits in the event filter. */ #define EVENT_CONNECT 1 -#define EVENT_QUERY 2 +#define EVENT_QUERY_ALL 2 +#define EVENT_QUERY 26 #define EVENT_TABLE 4 +#define EVENT_QUERY_DDL 8 +#define EVENT_QUERY_DML 16 + static const char *event_names[]= { - "CONNECT", "QUERY", "TABLE", + "CONNECT", "QUERY", "TABLE", "QUERY_DDL", "QUERY_DML", NULL }; static TYPELIB events_typelib= @@ -234,7 +242,7 @@ static TYPELIB events_typelib= array_elements(event_names) - 1, "", event_names, NULL }; static MYSQL_SYSVAR_SET(events, events, PLUGIN_VAR_RQCMDARG, - "Specifies the set of events to monitor. Can be CONNECT, QUERY, TABLE.", + "Specifies the set of events to monitor. Can be CONNECT, QUERY, TABLE, QUERY_DDL, QUERY_DML.", NULL, NULL, 0, &events_typelib); #define OUTPUT_SYSLOG 0 #define OUTPUT_FILE 1 @@ -526,6 +534,103 @@ static int user_hash_fill(HASH *h, char *users, } +enum sa_keywords +{ + SQLCOM_NOTHING=0, + SQLCOM_DDL, + SQLCOM_DML, + SQLCOM_GRANT, + SQLCOM_CREATE_USER, + SQLCOM_CHANGE_MASTER, + SQLCOM_CREATE_SERVER, + SQLCOM_SET_OPTION, + SQLCOM_ALTER_SERVER, + SQLCOM_TRUNCATE, + SQLCOM_QUERY_ADMIN, + SQLCOM_DCL, +}; + +struct sa_keyword +{ + int length; + const char *wd; + struct sa_keyword *next; + enum sa_keywords type; +}; + + +struct sa_keyword xml_word= {3, "XML", 0, SQLCOM_NOTHING}; +struct sa_keyword user_word= {4, "USER", 0, SQLCOM_NOTHING}; +struct sa_keyword data_word= {4, "DATA", 0, SQLCOM_NOTHING}; +struct sa_keyword server_word= {6, "SERVER", 0, SQLCOM_NOTHING}; +struct sa_keyword master_word= {6, "MASTER", 0, SQLCOM_NOTHING}; +struct sa_keyword password_word= {8, "PASSWORD", 0, SQLCOM_NOTHING}; +struct sa_keyword function_word= {8, "FUNCTION", 0, SQLCOM_NOTHING}; +struct sa_keyword statement_word= {9, "STATEMENT", 0, SQLCOM_NOTHING}; +struct sa_keyword procedure_word= {9, "PROCEDURE", 0, SQLCOM_NOTHING}; + + +struct sa_keyword keywords_to_skip[]= +{ + {3, "SET", &statement_word, SQLCOM_QUERY_ADMIN}, + {0, NULL, 0, SQLCOM_DDL} +}; + + +struct sa_keyword not_ddl_keywords[]= +{ + {4, "DROP", &function_word, SQLCOM_QUERY_ADMIN}, + {4, "DROP", &procedure_word, SQLCOM_QUERY_ADMIN}, + {4, "DROP", &user_word, SQLCOM_DCL}, + {6, "CREATE", &user_word, SQLCOM_DCL}, + {6, "CREATE", &function_word, SQLCOM_QUERY_ADMIN}, + {6, "CREATE", &procedure_word, SQLCOM_QUERY_ADMIN}, + {6, "RENAME", &user_word, SQLCOM_DCL}, + {0, NULL, 0, SQLCOM_DDL} +}; + + +struct sa_keyword ddl_keywords[]= +{ + {4, "DROP", 0, SQLCOM_DDL}, + {5, "ALTER", 0, SQLCOM_DDL}, + {6, "CREATE", 0, SQLCOM_DDL}, + {6, "RENAME", 0, SQLCOM_DDL}, + {8, "TRUNCATE", 0, SQLCOM_DDL}, + {0, NULL, 0, SQLCOM_DDL} +}; + + +struct sa_keyword dml_keywords[]= +{ + {2, "DO", 0, SQLCOM_DML}, + {4, "CALL", 0, SQLCOM_DML}, + {4, "LOAD", &data_word, SQLCOM_DML}, + {4, "LOAD", &xml_word, SQLCOM_DML}, + {6, "DELETE", 0, SQLCOM_DML}, + {6, "INSERT", 0, SQLCOM_DML}, + {6, "SELECT", 0, SQLCOM_DML}, + {6, "UPDATE", 0, SQLCOM_DML}, + {7, "HANDLER", 0, SQLCOM_DML}, + {7, "REPLACE", 0, SQLCOM_DML}, + {0, NULL, 0, SQLCOM_DML} +}; + + +struct sa_keyword passwd_keywords[]= +{ + {3, "SET", &password_word, SQLCOM_SET_OPTION}, + {5, "ALTER", &server_word, SQLCOM_ALTER_SERVER}, + {5, "GRANT", 0, SQLCOM_GRANT}, + {6, "CREATE", &user_word, SQLCOM_CREATE_USER}, + {6, "CREATE", &server_word, SQLCOM_CREATE_SERVER}, + {6, "CHANGE", &master_word, SQLCOM_CHANGE_MASTER}, + {0, NULL, 0, SQLCOM_NOTHING} +}; + +#define MAX_KEYWORD 9 + + static void error_header() { struct tm tm_time; @@ -563,6 +668,7 @@ struct connection_info int log_always; }; + static HASH connection_hash; @@ -773,6 +879,21 @@ static struct connection_info * #define SAFE_STRLEN(s) (s ? strlen(s) : 0) +static int is_space(char c) +{ + return c == ' ' || c == '\r' || c == '\n' || c == '\t'; +} + + +#define SKIP_SPACES(str) \ +do { \ + while (is_space(*str)) \ + ++str; \ +} while(0) + + + + static struct connection_info * add_connection_initdb(const struct mysql_event_general *event) { @@ -980,6 +1101,98 @@ static size_t escape_string(const char *str, unsigned int len, } +static size_t escape_string_hide_passwords(const char *str, unsigned int len, + char *result, size_t result_len, + const char *word1, size_t word1_len, + const char *word2, size_t word2_len, + int next_text_string) +{ + const char *res_start= result; + const char *res_end= result + result_len - 2; + size_t d_len; + char b_char; + + while (len) + { + if (len > word1_len + 1 && strncasecmp(str, word1, word1_len) == 0) + { + const char *next_s= str + word1_len; + size_t c; + + if (next_text_string) + { + while (*next_s && *next_s != '\'' && *next_s != '"') + ++next_s; + } + else + { + if (word2) + { + SKIP_SPACES(next_s); + if (len < (next_s - str) + word2_len + 1 || + strncasecmp(next_s, word2, word2_len) != 0) + goto no_password; + next_s+= word2_len; + } + + while (*next_s && *next_s != '\'' && *next_s != '"') + ++next_s; + } + + d_len= next_s - str; + if (result + d_len + 5 > res_end) + break; + + for (c=0; c<d_len; c++) + result[c]= is_space(str[c]) ? ' ' : str[c]; + + memmove(result + d_len, "*****", 5); + result+= d_len + 5; + b_char= *(next_s++); + while (*next_s) + { + if (*next_s == b_char) + { + ++next_s; + break; + } + if (*next_s == '\\') + { + if (next_s[1]) + next_s++; + } + next_s++; + } + len-= next_s - str; + str= next_s; + continue; + } +no_password: + if (result >= res_end) + break; + if (*str == '\'') + { + *(result++)= '\\'; + *(result++)= '\''; + } + else if (*str == '\\') + { + *(result++)= '\\'; + *(result++)= '\\'; + } + else if (is_space(*str)) + *(result++)= ' '; + else + *(result++)= *str; + str++; + len--; + } + *result= 0; + return result - res_start; +} + + + static int do_log_user(const char *name) { size_t len; @@ -998,6 +1211,96 @@ static int do_log_user(const char *name) } +static int get_next_word(const char *query, char *word) +{ + int len= 0; + char c; + while ((c= query[len])) + { + if (c >= 'a' && c <= 'z') + word[len]= 'A' + (c-'a'); + else if (c >= 'A' && c <= 'Z') + word[len]= c; + else + break; + + if (len++ == MAX_KEYWORD) + return 0; + } + word[len]= 0; + return len; +} + + +static int filter_query_type(const char *query, struct sa_keyword *kwd) +{ + int qwe_in_list; + char fword[MAX_KEYWORD + 1], nword[MAX_KEYWORD + 1]; + int len, nlen= 0; + const struct sa_keyword *l_keywords; + + while (*query && (is_space(*query) || *query == '(' || *query == '/')) + { + /* comment handling */ + if (*query == '/' && query[1] == '*') + { + if (query[2] == '!') + { + query+= 3; + while (*query >= '0' && *query <= '9') + query++; + continue; + } + query+= 2; + while (*query) + { + if (*query=='*' && query[1] == '/') + { + query+= 2; + break; + } + query++; + } + continue; + } + query++; + } + + qwe_in_list= 0; + if (!(len= get_next_word(query, fword))) + goto not_in_list; + query+= len+1; + + l_keywords= kwd; + while (l_keywords->length) + { + if (l_keywords->length == len && strncmp(l_keywords->wd, fword, len) == 0) + { + if (l_keywords->next) + { + if (nlen == 0) + { + while (*query && is_space(*query)) + query++; + nlen= get_next_word(query, nword); + } + if (l_keywords->next->length != nlen || + strncmp(l_keywords->next->wd, nword, nlen) != 0) + goto do_loop; + } + + qwe_in_list= l_keywords->type; + break; + }; +do_loop: + l_keywords++; + } + +not_in_list: + return qwe_in_list; +} + + static int log_statement_ex(const struct connection_info *cn, time_t ev_time, unsigned long thd_id, const char *query, unsigned int query_len, @@ -1034,10 +1337,77 @@ static int log_statement_ex(const struct connection_info *cn, /* Can happen after the error in mysqld_prepare_stmt() */ query= cn->query; query_len= cn->query_length; + if (query == 0 || query_len == 0) + return 0; + } + + if (query && !(events & EVENT_QUERY_ALL) && + (events & EVENT_QUERY)) + { + const char *orig_query= query; + + if (filter_query_type(query, keywords_to_skip)) + { + char fword[MAX_KEYWORD + 1]; + int len; + do + { + len= get_next_word(query, fword); + query+= len ? len : 1; + if (len == 3 && strncmp(fword, "FOR", 3) == 0) + break; + } while (*query); + + if (*query == 0) + return 0; + } + + if (events & EVENT_QUERY_DDL) + { + if (!filter_query_type(query, not_ddl_keywords) && + filter_query_type(query, ddl_keywords)) + goto do_log_query; + } + if (events & EVENT_QUERY_DML) + { + if (filter_query_type(query, dml_keywords)) + goto do_log_query; + } + + return 0; +do_log_query: + query= orig_query; } - esc_q_len= escape_string(query, query_len, - uh_buffer, sizeof(uh_buffer)); + switch (filter_query_type(query, passwd_keywords)) + { + case SQLCOM_GRANT: + case SQLCOM_CREATE_USER: + esc_q_len= escape_string_hide_passwords(query, query_len, + uh_buffer, sizeof(uh_buffer), + "IDENTIFIED", 10, "BY", 2, 0); + break; + case SQLCOM_CHANGE_MASTER: + esc_q_len= escape_string_hide_passwords(query, query_len, + uh_buffer, sizeof(uh_buffer), + "MASTER_PASSWORD", 15, "=", 1, 0); + break; + case SQLCOM_CREATE_SERVER: + case SQLCOM_ALTER_SERVER: + esc_q_len= escape_string_hide_passwords(query, query_len, + uh_buffer, sizeof(uh_buffer), + "PASSWORD", 8, NULL, 0, 0); + break; + case SQLCOM_SET_OPTION: + esc_q_len= escape_string_hide_passwords(query, query_len, + uh_buffer, sizeof(uh_buffer), + "=", 1, NULL, 0, 1); + break; + default: + esc_q_len= escape_string(query, query_len, + uh_buffer, sizeof(uh_buffer)); + break; + } csize+= my_snprintf(message+csize, sizeof(message) - 1 - csize, ",\'%.*s\',%d", esc_q_len, uh_buffer, error_code); message[csize]= '\n'; @@ -1386,6 +1756,105 @@ exit_func: } +#ifdef DBUG_OFF + #ifdef __x86_64__ +static const int cmd_off= 4200; +static const int db_off= 120; +static const int db_len_off= 128; + #else +static const int cmd_off= 2668; +static const int db_off= 60; +static const int db_len_off= 64; + #endif /*x86_64*/ +#else + #ifdef __x86_64__ +static const int cmd_off= 4432; +static const int db_off= 120; +static const int db_len_off= 128; + #else +static const int cmd_off= 2808; +static const int db_off= 64; +static const int db_len_off= 68; + #endif /*x86_64*/ +#endif /*DBUG_OFF*/ + +struct mysql_event_general_v8 +{ + unsigned int event_class; + unsigned int event_subclass; + int general_error_code; + unsigned long general_thread_id; + const char *general_user; + unsigned int general_user_length; + const char *general_command; + unsigned int general_command_length; + const char *general_query; + unsigned int general_query_length; + struct charset_info_st *general_charset; + unsigned long long general_time; + unsigned long long general_rows; +}; + +static void auditing_v8(MYSQL_THD thd, struct mysql_event_general_v8 *ev_v8) +{ + struct mysql_event_general event; + + if (ev_v8->event_class != MYSQL_AUDIT_GENERAL_CLASS) + return; + + event.event_subclass= ev_v8->event_subclass; + event.general_error_code= ev_v8->general_error_code; + event.general_thread_id= ev_v8->general_thread_id; + event.general_user= ev_v8->general_user; + event.general_user_length= ev_v8->general_user_length; + event.general_command= ev_v8->general_command; + event.general_command_length= ev_v8->general_command_length; + event.general_query= ev_v8->general_query; + event.general_query_length= ev_v8->general_query_length; + event.general_charset= ev_v8->general_charset; + event.general_time= ev_v8->general_time; + event.general_rows= ev_v8->general_rows; + event.database= 0; + event.database_length= 0; + + if (event.general_query_length > 0) + { + event.event_subclass= MYSQL_AUDIT_GENERAL_STATUS; + event.general_command= "Query"; + event.general_command_length= 5; +#ifdef __linux__ + event.database= *(char **) (((char *) thd) + db_off); + event.database_length= *(size_t *) (((char *) thd) + db_len_off); +#endif /*__linux*/ + } +#ifdef __linux__ + else if (*((int *) (((char *)thd) + cmd_off)) == 2) + { + event.event_subclass= MYSQL_AUDIT_GENERAL_LOG; + event.general_command= "Init DB"; + event.general_command_length= 7; + event.general_query= *(char **) (((char *) thd) + db_off); + event.general_query_length= *(size_t *) (((char *) thd) + db_len_off); + } +#endif /*__linux*/ + auditing(thd, ev_v8->event_class, &event); +} + + +static void auditing_v13(MYSQL_THD thd, unsigned int *ev_v0) +{ + struct mysql_event_general event= *(const struct mysql_event_general *) (ev_v0+1); + + if (event.general_query_length > 0) + { + event.event_subclass= MYSQL_AUDIT_GENERAL_STATUS; + event.general_command= "Query"; + event.general_command_length= 5; + } + auditing(thd, ev_v0[0], &event); +} + + /* As it's just too difficult to #include "sql_class.h", let's just copy the necessary part of the system_variables @@ -1461,15 +1930,19 @@ typedef struct loc_system_variables ulong query_cache_type; } LOC_SV; + static int server_audit_init(void *p __attribute__((unused))) { const void *my_hash_init_ptr; + + if (!serv_ver) + { #ifdef _WIN32 - serv_ver= (const char *) GetProcAddress(0, "server_version"); + serv_ver= (const char *) GetProcAddress(0, "server_version"); #else - serv_ver= server_version; + serv_ver= server_version; #endif /*_WIN32*/ - + } my_hash_init_ptr= dlsym(RTLD_DEFAULT, "_my_hash_init"); if (!my_hash_init_ptr) { @@ -1477,8 +1950,14 @@ static int server_audit_init(void *p __attribute__((unused))) my_hash_init_ptr= dlsym(RTLD_DEFAULT, "my_hash_init2"); } + if(!(int_mysql_data_home= dlsym(RTLD_DEFAULT, "mysql_data_home"))) + { + if(!(int_mysql_data_home= dlsym(RTLD_DEFAULT, "?mysql_data_home@@3PADA"))) + int_mysql_data_home= &default_home; + } + if (!serv_ver || !my_hash_init_ptr) - return 0; + return 1; if (!started_mysql) { @@ -1489,7 +1968,6 @@ static int server_audit_init(void *p __attribute__((unused))) } } - if (gethostname(servhost, sizeof(servhost))) strcpy(servhost, "unknown"); @@ -1608,8 +2086,8 @@ mysql_declare_plugin(server_audit) MYSQL_AUDIT_PLUGIN, &mysql_descriptor, "SERVER_AUDIT", - " Alexey Botchkov (MariaDB)", - "Audit the server activity.", + " Alexey Botchkov (MariaDB Corporation)", + "Audit the server activity", PLUGIN_LICENSE_GPL, server_audit_init_mysql, server_audit_deinit, @@ -1636,8 +2114,8 @@ maria_declare_plugin(server_audit) MYSQL_AUDIT_PLUGIN, &maria_descriptor, "SERVER_AUDIT", - "Alexey Botchkov (MariaDB)", - "Audit the server activity.", + "Alexey Botchkov (MariaDB Corporation)", + "Audit the server activity", PLUGIN_LICENSE_GPL, server_audit_init, server_audit_deinit, @@ -1645,7 +2123,7 @@ maria_declare_plugin(server_audit) audit_status, vars, PLUGIN_STR_VERSION, - MariaDB_PLUGIN_MATURITY_BETA + MariaDB_PLUGIN_MATURITY_GAMMA } maria_declare_plugin_end; @@ -1915,3 +2393,48 @@ static void update_syslog_ident(MYSQL_THD thd __attribute__((unused)), } +#ifdef _WIN32 +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + if (fdwReason != DLL_PROCESS_ATTACH) + return 1; + + serv_ver= (const char *) GetProcAddress(0, "server_version"); +#else +void __attribute__ ((constructor)) audit_plugin_so_init(void) +{ + serv_ver= server_version; +#endif /*_WIN32*/ + + if (!serv_ver) + goto exit; + + started_mariadb= strstr(serv_ver, "MariaDB") != 0; + + if (!started_mariadb) + { + if (serv_ver[0] == '5' && serv_ver[2] == '5') + { + int sc= serv_ver[4] - '0'; + if (serv_ver[5] >= '0' && serv_ver[5] <= '9') + sc= sc * 10 + serv_ver[5] - '0'; + if (sc <= 10) + { + mysql_descriptor.interface_version= 0x0200; + mysql_descriptor.event_notify= (void *) auditing_v8; + } + else if (sc < 14) + { + mysql_descriptor.interface_version= 0x0200; + mysql_descriptor.event_notify= (void *) auditing_v13; + } + } + } +exit: +#ifdef _WIN32 + return 1; +#else + return; +#endif +} + diff --git a/scripts/mysql_install_db.pl.in b/scripts/mysql_install_db.pl.in index 03b79312156..dcb7d7736e0 100644 --- a/scripts/mysql_install_db.pl.in +++ b/scripts/mysql_install_db.pl.in @@ -65,8 +65,8 @@ Usage: $0 [OPTIONS] Read this file after the global files are read. --defaults-file=name Only read default options from the given file name. --force Causes mysql_install_db to run even if DNS does not - work. In that case, grant table entries that normally - use hostnames will use IP addresses. + work. In that case, grant table entries that + normally use hostnames will use IP addresses. --help Display this help and exit. --ldata=path The path to the MySQL data directory. Same as --datadir. --no-defaults Don't read default options from any option file. diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh index 8da092289e9..5d53b252fd7 100644 --- a/scripts/mysql_install_db.sh +++ b/scripts/mysql_install_db.sh @@ -50,8 +50,8 @@ Usage: $0 [OPTIONS] Read this file after the global files are read. --defaults-file=name Only read default options from the given file name. --force Causes mysql_install_db to run even if DNS does not - work. In that case, grant table entries that normally - use hostnames will use IP addresses. + work. In that case, grant table entries that + normally use hostnames will use IP addresses. --help Display this help and exit. --ldata=path The path to the MariaDB data directory. Same as --datadir. diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh index 1b20453f68f..1de9e401186 100644 --- a/scripts/mysqld_safe.sh +++ b/scripts/mysqld_safe.sh @@ -28,6 +28,7 @@ syslog_tag= user='@MYSQLD_USER@' pid_file= err_log= +err_log_base= syslog_tag_mysqld=mysqld syslog_tag_mysqld_safe=mysqld_safe @@ -292,7 +293,7 @@ parse_arguments() { --user=*) user="$val"; SET_USER=1 ;; --log-basename=*|--hostname=*|--loose-log-basename=*) pid_file="$val.pid"; - err_log="$val.err"; + err_log_base="$val"; ;; # these might have been set in a [mysqld_safe] section of my.cnf @@ -668,7 +669,16 @@ then * ) err_log="$DATADIR/$err_log" ;; esac else - err_log=$DATADIR/`@HOSTNAME@`.err + if [ -n "$err_log_base" ] + then + err_log=$err_log_base.err + case "$err_log" in + /* ) ;; + * ) err_log="$DATADIR/$err_log" ;; + esac + else + err_log=$DATADIR/`@HOSTNAME@`.err + fi fi append_arg_to_args "--log-error=$err_log" @@ -677,6 +687,7 @@ then then # User explicitly asked for syslog, so warn that it isn't used log_error "Can't log to error log and syslog at the same time. Remove all --log-error configuration options for --syslog to take effect." + want_syslog=0 fi # Log to err_log file diff --git a/sql-bench/test-table-elimination.sh b/sql-bench/test-table-elimination.sh index 5b494688bec..7772cab42b0 100755 --- a/sql-bench/test-table-elimination.sh +++ b/sql-bench/test-table-elimination.sh @@ -1,4 +1,4 @@ -#!@PERL@ +#!/usr/bin/perl # Test of table elimination feature use Cwd; diff --git a/sql-common/client.c b/sql-common/client.c index 69387391e6d..7117c12e529 100644 --- a/sql-common/client.c +++ b/sql-common/client.c @@ -1,5 +1,5 @@ -/* Copyright (c) 2003, 2013, Oracle and/or its affiliates. - Copyright (c) 2009, 2013, Monty Program Ab +/* Copyright (c) 2003, 2014, Oracle and/or its affiliates. + Copyright (c) 2009, 2015, MariaDB 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 @@ -118,6 +118,7 @@ my_bool net_flush(NET *net); #define native_password_plugin_name "mysql_native_password" #define old_password_plugin_name "mysql_old_password" +uint mariadb_deinitialize_ssl= 1; uint mysql_port=0; char *mysql_unix_port= 0; const char *unknown_sqlstate= "HY000"; diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt index 39301ef5fc9..7fcdf601d81 100644 --- a/sql/CMakeLists.txt +++ b/sql/CMakeLists.txt @@ -1,4 +1,5 @@ -# Copyright (c) 2006, 2013, Oracle and/or its affiliates. +# Copyright (c) 2006, 2014, Oracle and/or its affiliates. +# Copyright (c) 2010, 2015, MariaDB # # 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 @@ -275,14 +276,15 @@ IF(WIN32 OR HAVE_DLOPEN AND NOT DISABLE_SHARED) ENDIF() FOREACH(tool glibtoolize libtoolize aclocal autoconf autoheader automake gtar - tar bzr) + tar git) STRING(TOUPPER ${tool} TOOL) FIND_PROGRAM(${TOOL}_EXECUTABLE ${tool} DOC "path to the executable") MARK_AS_ADVANCED(${TOOL}_EXECUTABLE) ENDFOREACH() CONFIGURE_FILE( - ${CMAKE_SOURCE_DIR}/cmake/make_dist.cmake.in ${CMAKE_BINARY_DIR}/make_dist.cmake @ONLY) + ${CMAKE_SOURCE_DIR}/cmake/make_dist.cmake.in + ${CMAKE_BINARY_DIR}/make_dist.cmake @ONLY) ADD_CUSTOM_TARGET(dist COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/make_dist.cmake @@ -292,8 +294,7 @@ ADD_CUSTOM_TARGET(dist ADD_CUSTOM_TARGET(distclean COMMAND ${CMAKE_COMMAND} -E echo WARNING: distclean target is not functional - COMMAND ${CMAKE_COMMAND} -E echo Use 'bzr clean-tree' with --unknown and/or - --ignored parameter instead + COMMAND ${CMAKE_COMMAND} -E echo Use 'git clean -fdx' instead VERBATIM ) diff --git a/sql/handler.cc b/sql/handler.cc index 53c875da6a2..2337eaced55 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -89,9 +89,7 @@ static const LEX_STRING sys_table_aliases[]= }; const char *ha_row_type[] = { - "", "FIXED", "DYNAMIC", "COMPRESSED", "REDUNDANT", "COMPACT", - "PAGE", - "?","?","?" + "", "FIXED", "DYNAMIC", "COMPRESSED", "REDUNDANT", "COMPACT", "PAGE" }; const char *tx_isolation_names[] = diff --git a/sql/handler.h b/sql/handler.h index f4550cb1b22..692d69cd7c5 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -370,9 +370,10 @@ enum legacy_db_type enum row_type { ROW_TYPE_NOT_USED=-1, ROW_TYPE_DEFAULT, ROW_TYPE_FIXED, ROW_TYPE_DYNAMIC, ROW_TYPE_COMPRESSED, - ROW_TYPE_REDUNDANT, ROW_TYPE_COMPACT, - /** Unused. Reserved for future versions. */ - ROW_TYPE_PAGE }; + ROW_TYPE_REDUNDANT, ROW_TYPE_COMPACT, ROW_TYPE_PAGE }; + +/* not part of the enum, so that it shouldn't be in switch(row_type) */ +#define ROW_TYPE_MAX ((uint)ROW_TYPE_PAGE + 1) enum enum_binlog_func { BFN_RESET_LOGS= 1, @@ -1254,7 +1255,7 @@ class partition_info; struct st_partition_iter; #define NOT_A_PARTITION_ID ((uint32)-1) -enum ha_choice { HA_CHOICE_UNDEF, HA_CHOICE_NO, HA_CHOICE_YES }; +enum ha_choice { HA_CHOICE_UNDEF, HA_CHOICE_NO, HA_CHOICE_YES, HA_CHOICE_MAX }; typedef struct st_ha_create_information { diff --git a/sql/item_func.cc b/sql/item_func.cc index e1607529dea..34569cb938f 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1,5 +1,5 @@ /* Copyright (c) 2000, 2014, Oracle and/or its affiliates. - Copyright (c) 2009, 2014, Monty Program Ab. + Copyright (c) 2009, 2015, MariaDB 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 @@ -3671,8 +3671,12 @@ bool udf_handler::get_arguments() { f_args.args[i]= (char*) res->ptr(); f_args.lengths[i]= res->length(); - break; } + else + { + f_args.lengths[i]= 0; + } + break; } case INT_RESULT: *((longlong*) to) = args[i]->val_int(); @@ -4494,6 +4498,11 @@ longlong Item_func_sleep::val_int() mysql_cond_destroy(&cond); + DBUG_EXECUTE_IF("sleep_inject_query_done_debug_sync", { + debug_sync_set_action + (thd, STRING_WITH_LEN("dispatch_command_end SIGNAL query_done")); + };); + return test(!error); // Return 1 killed } diff --git a/sql/item_geofunc.cc b/sql/item_geofunc.cc index a38e9d416a7..5e1c0add54b 100644 --- a/sql/item_geofunc.cc +++ b/sql/item_geofunc.cc @@ -1286,6 +1286,13 @@ String *Item_func_buffer::val_str(String *str_value) if (dist > 0.0) mbr.buffer(dist); + else + { + /* This happens when dist is too far negative. */ + if (mbr.xmax + dist < mbr.xmin || mbr.ymax + dist < mbr.ymin) + goto return_empty_result; + } + collector.set_extent(mbr.xmin, mbr.xmax, mbr.ymin, mbr.ymax); /* If the distance given is 0, the Buffer function is in fact NOOP, @@ -1313,6 +1320,7 @@ String *Item_func_buffer::val_str(String *str_value) goto mem_error; +return_empty_result: str_value->set_charset(&my_charset_bin); if (str_value->reserve(SRID_SIZE, 512)) goto mem_error; diff --git a/sql/sql_base.cc b/sql/sql_base.cc index e155287906f..31416075519 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -2031,6 +2031,9 @@ unique_table(THD *thd, TABLE_LIST *table, TABLE_LIST *table_list, bool check_alias) { TABLE_LIST *dup; + + table= table->find_table_for_update(); + if (table->table && table->table->file->ht->db_type == DB_TYPE_MRG_MYISAM) { TABLE_LIST *child; diff --git a/sql/sql_db.cc b/sql/sql_db.cc index 0464128bd97..f72a8918f61 100644 --- a/sql/sql_db.cc +++ b/sql/sql_db.cc @@ -1,6 +1,6 @@ /* - Copyright (c) 2000, 2013, Oracle and/or its affiliates. - Copyright (c) 2009, 2013, Monty Program Ab. + Copyright (c) 2000, 2014, Oracle and/or its affiliates. + Copyright (c) 2009, 2015, MariaDB 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 @@ -917,7 +917,7 @@ update_binlog: if (!(query= (char*) thd->alloc(MAX_DROP_TABLE_Q_LEN))) goto exit; /* not much else we can do */ - query_pos= query_data_start= strmov(query,"DROP TABLE "); + query_pos= query_data_start= strmov(query,"DROP TABLE IF EXISTS "); query_end= query + MAX_DROP_TABLE_Q_LEN; db_len= strlen(db); diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 445364ca57b..8fed26555db 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -661,9 +661,10 @@ multi_delete::initialize_tables(JOIN *join) delete_while_scanning= 1; for (walk= delete_tables; walk; walk= walk->next_local) { - tables_to_delete_from|= walk->table->map; + TABLE_LIST *tbl= walk->correspondent_table->find_table_for_update(); + tables_to_delete_from|= tbl->table->map; if (delete_while_scanning && - unique_table(thd, walk, join->tables_list, false)) + unique_table(thd, tbl, join->tables_list, false)) { /* If the table we are going to delete from appears diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index 004cccb41a9..56748fa110d 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -507,6 +507,9 @@ bool mysql_derived_merge_for_insert(THD *thd, LEX *lex, TABLE_LIST *derived) DBUG_RETURN(FALSE); if (derived->is_materialized_derived()) DBUG_RETURN(mysql_derived_prepare(thd, lex, derived)); + if ((thd->lex->sql_command == SQLCOM_UPDATE_MULTI || + thd->lex->sql_command == SQLCOM_DELETE_MULTI)) + DBUG_RETURN(FALSE); if (!derived->is_multitable()) { if (!derived->single_table_updatable()) diff --git a/sql/sql_plugin.cc b/sql/sql_plugin.cc index dd0f0a7d9e3..9683199a2f3 100644 --- a/sql/sql_plugin.cc +++ b/sql/sql_plugin.cc @@ -3922,7 +3922,7 @@ static int test_plugin_options(MEM_ROOT *tmp_root, struct st_plugin_int *tmp, we copy string values to a plugin's memroot. */ if (mysqld_server_started && - ((o->flags & (PLUGIN_VAR_STR | PLUGIN_VAR_NOCMDOPT | + ((o->flags & (PLUGIN_VAR_TYPEMASK | PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_MEMALLOC)) == PLUGIN_VAR_STR)) { sysvar_str_t* str= (sysvar_str_t *)o; diff --git a/sql/sql_select.cc b/sql/sql_select.cc index bdb2d1c3346..387fdb35ace 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -1,5 +1,5 @@ -/* Copyright (c) 2000, 2013 Oracle and/or its affiliates. - Copyright (c) 2009, 2013 Monty Program Ab. +/* Copyright (c) 2000, 2014 Oracle and/or its affiliates. + Copyright (c) 2009, 2015 MariaDB 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 diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 5ab78197494..5e1fd283337 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -7711,12 +7711,12 @@ err: /* - Recreates tables by calling mysql_alter_table(). + Recreates one table by calling mysql_alter_table(). SYNOPSIS mysql_recreate_table() thd Thread handler - tables Tables to recreate + table_list Table to recreate RETURN Like mysql_alter_table(). @@ -7725,9 +7725,9 @@ bool mysql_recreate_table(THD *thd, TABLE_LIST *table_list) { HA_CREATE_INFO create_info; Alter_info alter_info; + TABLE_LIST *next_table= table_list->next_global; DBUG_ENTER("mysql_recreate_table"); - DBUG_ASSERT(!table_list->next_global); /* table_list->table has been closed and freed. Do not reference uninitialized data. open_tables() could fail. @@ -7739,15 +7739,19 @@ bool mysql_recreate_table(THD *thd, TABLE_LIST *table_list) table_list->lock_type= TL_READ_NO_INSERT; /* Same applies to MDL request. */ table_list->mdl_request.set_type(MDL_SHARED_NO_WRITE); + /* hide following tables from open_tables() */ + table_list->next_global= NULL; bzero((char*) &create_info, sizeof(create_info)); create_info.row_type=ROW_TYPE_NOT_USED; create_info.default_table_charset=default_charset_info; /* Force alter table to recreate table */ alter_info.flags= (ALTER_CHANGE_COLUMN | ALTER_RECREATE); - DBUG_RETURN(mysql_alter_table(thd, NullS, NullS, &create_info, + bool res= mysql_alter_table(thd, NullS, NullS, &create_info, table_list, &alter_info, 0, - (ORDER *) 0, 0, 0)); + (ORDER *) 0, 0, 0); + table_list->next_global= next_table; + DBUG_RETURN(res); } diff --git a/sql/sql_view.cc b/sql/sql_view.cc index b711f05be02..09784f7257a 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -730,7 +730,7 @@ err: /* number of required parameters for making view */ -static const int required_view_parameters= 14; +static const int required_view_parameters= 15; /* table of VIEW .frm field descriptors @@ -781,6 +781,9 @@ static File_option view_parameters[]= {{(char*) STRING_WITH_LEN("view_body_utf8")}, my_offsetof(TABLE_LIST, view_body_utf8), FILE_OPTIONS_ESTRING}, + {{ C_STRING_WITH_LEN("mariadb-version")}, + my_offsetof(TABLE_LIST, mariadb_version), + FILE_OPTIONS_ULONGLONG}, {{NullS, 0}, 0, FILE_OPTIONS_STRING} }; @@ -877,6 +880,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, } view->file_version= 1; + view->mariadb_version= MYSQL_VERSION_ID; view->calc_md5(md5); if (!(view->md5.str= (char*) thd->memdup(md5, 32))) { diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 88760e2d602..f5eb6708137 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -3973,7 +3973,7 @@ static Sys_var_ulong Sys_sp_cache_size( "The soft upper limit for number of cached stored routines for " "one connection.", GLOBAL_VAR(stored_program_cache_size), CMD_LINE(REQUIRED_ARG), - VALID_RANGE(256, 512 * 1024), DEFAULT(256), BLOCK_SIZE(1)); + VALID_RANGE(0, 512 * 1024), DEFAULT(256), BLOCK_SIZE(1)); export const char *plugin_maturity_names[]= { "unknown", "experimental", "alpha", "beta", "gamma", "stable", 0 }; diff --git a/sql/table.cc b/sql/table.cc index 0f34364065a..caebf3e6bbe 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1,5 +1,5 @@ -/* Copyright (c) 2000, 2012, Oracle and/or its affiliates. - Copyright (c) 2008, 2014, SkySQL Ab. +/* Copyright (c) 2000, 2014, Oracle and/or its affiliates. + Copyright (c) 2008, 2015, MariaDB 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 @@ -893,6 +893,23 @@ static bool create_key_infos(uchar *strpos, uint keys, KEY *keyinfo, return 0; } +/** ensures that the enum value (read from frm) is within limits + + if not - issues a warning and resets the value to 0 + (that is, 0 is assumed to be a default value) +*/ +static uint enum_value_with_check(THD *thd, TABLE_SHARE *share, + const char *name, uint value, uint limit) +{ + if (value < limit) + return value; + + sql_print_warning("%s.frm: invalid value %d for the field %s", + share->normalized_path.str, value, name); + return 0; +} + + /* Read data from a binary .frm file from MySQL 3.23 - 5.0 into TABLE_SHARE */ @@ -986,9 +1003,12 @@ static int open_binary_frm(THD *thd, TABLE_SHARE *share, uchar *head, if (!head[32]) // New frm file in 3.23 { share->avg_row_length= uint4korr(head+34); - share->transactional= (ha_choice) (head[39] & 3); - share->page_checksum= (ha_choice) ((head[39] >> 2) & 3); - share->row_type= (row_type) head[40]; + share->transactional= (ha_choice) + enum_value_with_check(thd, share, "transactional", (head[39] & 3), HA_CHOICE_MAX); + share->page_checksum= (ha_choice) + enum_value_with_check(thd, share, "page_checksum", (head[39] >> 2) & 3, HA_CHOICE_MAX); + share->row_type= (row_type) + enum_value_with_check(thd, share, "row_format", head[40], ROW_TYPE_MAX); share->table_charset= get_charset((((uint) head[41]) << 8) + (uint) head[38],MYF(0)); share->null_field_first= 1; @@ -2706,7 +2726,9 @@ partititon_err: outparam->no_replicate= outparam->file && test(outparam->file->ha_table_flags() & HA_HAS_OWN_BINLOGGING); - thd->status_var.opened_tables++; + /* Increment the opened_tables counter, only when open flags set. */ + if (db_stat) + thd->status_var.opened_tables++; thd->lex->context_analysis_only= save_context_analysis_only; DBUG_RETURN (0); diff --git a/sql/table.h b/sql/table.h index ac15e389f75..7a1e380f14c 100644 --- a/sql/table.h +++ b/sql/table.h @@ -1807,6 +1807,7 @@ struct TABLE_LIST LEX_STRING timestamp; /* GMT time stamp of last operation */ st_lex_user definer; /* definer of view */ ulonglong file_version; /* version of file's field set */ + ulonglong mariadb_version; /* version of server on creation */ ulonglong updatable_view; /* VIEW can be updated */ /** @brief The declared algorithm, if this is a view. @@ -1983,6 +1984,24 @@ struct TABLE_LIST TABLE_LIST *find_underlying_table(TABLE *table); TABLE_LIST *first_leaf_for_name_resolution(); TABLE_LIST *last_leaf_for_name_resolution(); + /** + @brief + Find the bottom in the chain of embedded table VIEWs. + + @detail + This is used for single-table UPDATE/DELETE when they are modifying a + single-table VIEW. + */ + TABLE_LIST *find_table_for_update() + { + TABLE_LIST *tbl= this; + while(!tbl->is_multitable() && tbl->single_table_updatable() && + tbl->merge_underlying_list) + { + tbl= tbl->merge_underlying_list; + } + return tbl; + } TABLE *get_real_join_table(); bool is_leaf_for_name_resolution(); inline TABLE_LIST *top_table() diff --git a/sql/udf_example.c b/sql/udf_example.c index 36a5eafb704..a48801d1c4a 100644 --- a/sql/udf_example.c +++ b/sql/udf_example.c @@ -1,5 +1,5 @@ /* - Copyright (c) 2000, 2010, Oracle and/or its affiliates. + Copyright (c) 2000, 2014, Oracle and/or its affiliates. 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 @@ -296,9 +296,12 @@ char *metaphon(UDF_INIT *initid __attribute__((unused)), if (!word) /* Null argument */ { + /* The length is expected to be zero when the argument is NULL. */ + assert(args->lengths[0] == 0); *is_null=1; return 0; } + w_end=word+args->lengths[0]; org_result=result; diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc index b3db61355a4..8bc34da77fc 100644 --- a/storage/federated/ha_federated.cc +++ b/storage/federated/ha_federated.cc @@ -1,4 +1,4 @@ -/* Copyright (c) 2004, 2013, Oracle and/or its affiliates. +/* Copyright (c) 2004, 2014, Oracle and/or its affiliates. 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 @@ -1679,9 +1679,9 @@ int ha_federated::close(void) DBUG_ENTER("ha_federated::close"); free_result(); - + delete_dynamic(&results); - + /* Disconnect from mysql */ mysql_close(mysql); mysql= NULL; diff --git a/storage/innobase/dict/dict0dict.c b/storage/innobase/dict/dict0dict.c index 59b4bc4825b..15426b18c6d 100644 --- a/storage/innobase/dict/dict0dict.c +++ b/storage/innobase/dict/dict0dict.c @@ -2530,7 +2530,7 @@ dict_foreign_remove_from_cache( rbt = foreign->referenced_table->referenced_rbt; - if (rbt != NULL) { + if (rbt != NULL && foreign->id != NULL) { const ib_rbt_node_t* node = rbt_lookup(rbt, foreign->id); dict_foreign_t* val = *(dict_foreign_t**) node->value; @@ -2549,7 +2549,7 @@ dict_foreign_remove_from_cache( foreign); rbt = foreign->foreign_table->foreign_rbt; - if (rbt != NULL) { + if (rbt != NULL && foreign->id != NULL) { const ib_rbt_node_t* node = rbt_lookup(rbt, foreign->id); dict_foreign_t* val = *(dict_foreign_t**) node->value; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 268887e9fc2..8eeee43128a 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -11641,10 +11641,8 @@ ha_innobase::cmp_ref( len1 = innobase_read_from_2_little_endian(ref1); len2 = innobase_read_from_2_little_endian(ref2); - ref1 += 2; - ref2 += 2; - result = ((Field_blob*)field)->cmp( ref1, len1, - ref2, len2); + result = ((Field_blob*)field)->cmp(ref1 + 2, len1, + ref2 + 2, len2); } else { result = field->key_cmp(ref1, ref2); } @@ -13680,6 +13678,10 @@ ib_warn_row_too_big(const dict_table_t* table) THD* thd = current_thd; + if (thd == NULL) { + return; + } + push_warning_printf( thd, MYSQL_ERROR::WARN_LEVEL_WARN, HA_ERR_TO_BIG_ROW, "Row size too large (> %lu). Changing some columns to TEXT" diff --git a/storage/innobase/ibuf/ibuf0ibuf.c b/storage/innobase/ibuf/ibuf0ibuf.c index d22fc8b9962..eee5402daa7 100644 --- a/storage/innobase/ibuf/ibuf0ibuf.c +++ b/storage/innobase/ibuf/ibuf0ibuf.c @@ -2731,6 +2731,14 @@ ibuf_contract_for_n_pages( ulint n_bytes; ulint n_pag2; +#if defined UNIV_DEBUG || defined UNIV_IBUF_DEBUG + if (ibuf_debug) { + return(0); + } +#endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */ + + + while (sum_pages < n_pages) { n_bytes = ibuf_contract_ext(&n_pag2, sync); diff --git a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h index 0ad3cb3bcce..bb1119b3c19 100644 --- a/storage/innobase/include/dict0dict.h +++ b/storage/innobase/include/dict0dict.h @@ -1139,7 +1139,7 @@ recalculated */ #define DICT_TABLE_CHANGED_TOO_MUCH(t) \ ((ib_int64_t) (t)->stat_modified_counter > (srv_stats_modified_counter ? \ - ut_min(srv_stats_modified_counter, (16 + (t)->stat_n_rows / 16)) : \ + (ib_int64_t) ut_min(srv_stats_modified_counter, (16 + (t)->stat_n_rows / 16)) : \ 16 + (t)->stat_n_rows / 16)) /*********************************************************************//** diff --git a/storage/innobase/rem/rem0rec.c b/storage/innobase/rem/rem0rec.c index cb4e8ca1cb1..3494d4e4773 100644 --- a/storage/innobase/rem/rem0rec.c +++ b/storage/innobase/rem/rem0rec.c @@ -833,7 +833,8 @@ rec_get_converted_size_comp_prefix_low( } ut_ad(len <= col->len || col->mtype == DATA_BLOB - || (col->len == 0 && col->mtype == DATA_VARCHAR)); + || col->mtype == DATA_VARMYSQL + || (col->len == 0 && col->mtype == DATA_VARCHAR)); fixed_len = field->fixed_len; if (temp && fixed_len @@ -1260,7 +1261,8 @@ rec_convert_dtuple_to_rec_comp( *lens-- = (byte) len; } else { ut_ad(len <= dtype_get_len(type) - || dtype_get_mtype(type) == DATA_BLOB); + || dtype_get_mtype(type) == DATA_BLOB + || dtype_get_mtype(type) == DATA_VARMYSQL); if (len < 128 || (dtype_get_len(type) < 256 && dtype_get_mtype(type) != DATA_BLOB)) { diff --git a/storage/oqgraph/CMakeLists.txt b/storage/oqgraph/CMakeLists.txt index 7b110b7de5a..0a3cabcd03c 100644 --- a/storage/oqgraph/CMakeLists.txt +++ b/storage/oqgraph/CMakeLists.txt @@ -52,4 +52,5 @@ IF(BOOST_OK) MYSQL_ADD_PLUGIN(oqgraph ha_oqgraph.cc graphcore.cc STORAGE_ENGINE MODULE_ONLY) + SET(OQGRAPH_DEB_FILES "usr/lib/mysql/plugin/ha_oqgraph.so\n" PARENT_SCOPE) ENDIF(BOOST_OK) diff --git a/storage/tokudb/CMakeLists.txt b/storage/tokudb/CMakeLists.txt index 8a68ffb0078..efb26d255d3 100644 --- a/storage/tokudb/CMakeLists.txt +++ b/storage/tokudb/CMakeLists.txt @@ -25,7 +25,7 @@ IF (HAVE_WVLA) ENDIF() ############################################ -SET(TOKUDB_VERSION "tokudb-7.5.3") +SET(TOKUDB_VERSION "tokudb-7.5.4") SET(TOKUDB_DEB_FILES "usr/lib/mysql/plugin/ha_tokudb.so\netc/mysql/conf.d/tokudb.cnf\nusr/bin/tokuftdump\nusr/share/doc/mariadb-galera-server-5.5/README-TOKUDB\nusr/share/doc/mariadb-galera-server-5.5/README.md" PARENT_SCOPE) SET(USE_BDB OFF CACHE BOOL "") MARK_AS_ADVANCED(BUILDNAME) @@ -72,18 +72,34 @@ include(CheckCXXCompilerFlag) macro(set_cflags_if_supported) foreach(flag ${ARGN}) - check_c_compiler_flag(${flag} HAVE_C_${flag}) - if (HAVE_C_${flag}) + string(REGEX REPLACE "-" "_" temp_flag ${flag}) + check_c_compiler_flag(${flag} HAVE_C_${temp_flag}) + if (HAVE_C_${temp_flag}) set(CMAKE_C_FLAGS "${flag} ${CMAKE_C_FLAGS}") endif () - check_cxx_compiler_flag(${flag} HAVE_CXX_${flag}) - if (HAVE_CXX_${flag}) + check_cxx_compiler_flag(${flag} HAVE_CXX_${temp_flag}) + if (HAVE_CXX_${temp_flag}) set(CMAKE_CXX_FLAGS "${flag} ${CMAKE_CXX_FLAGS}") endif () endforeach(flag) endmacro(set_cflags_if_supported) +macro(append_cflags_if_supported) + foreach(flag ${ARGN}) + string(REGEX REPLACE "-" "_" temp_flag ${flag}) + check_c_compiler_flag(${flag} HAVE_C_${temp_flag}) + if (HAVE_C_${temp_flag}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${flag}") + endif () + check_cxx_compiler_flag(${flag} HAVE_CXX_${temp_flag}) + if (HAVE_CXX_${temp_flag}) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}") + endif () + endforeach(flag) +endmacro(append_cflags_if_supported) + set_cflags_if_supported(-Wno-missing-field-initializers) +append_cflags_if_supported(-Wno-vla) ADD_SUBDIRECTORY(ft-index) diff --git a/storage/tokudb/README.md b/storage/tokudb/README.md index dc7362a5124..2ab2e21a5a1 100644 --- a/storage/tokudb/README.md +++ b/storage/tokudb/README.md @@ -1,11 +1,10 @@ TokuDB ====== -TokuDB is a high-performance, write optimized, transactional storage engine for MySQL and -MariaDB. For more details, see our [product page][products]. +TokuDB is a high-performance, write optimized, transactional storage engine for MySQL, MariaDB, and Percona Server. +For more details, see our [product page][products]. -This repository contains the MySQL plugin that uses the [TokuFT][tokuft] -core. +This repository contains the MySQL plugin that uses the [TokuFT][tokuft] core. There are also patches to the MySQL and MariaDB kernels, available in our forks of [mysql][mysql] and [mariadb][mariadb]. @@ -15,23 +14,30 @@ forks of [mysql][mysql] and [mariadb][mariadb]. [mysql]: http://github.com/Tokutek/mysql [mariadb]: http://github.com/Tokutek/mariadb - -Building +Download -------- +* [MySQL 5.5 + TokuDB](http://www.tokutek.com/tokudb-for-mysql/download-community/) +* [MariaDB 5.5 + TokuDB](http://www.tokutek.com/tokudb-for-mysql/download-community/) +* [MariaDB 10.0 + TokuDB](https://downloads.mariadb.org/) +* [Percona Server 5.6 + TokuDB](http://www.percona.com/downloads/) + +Build +----- + The `scripts/` directory contains a script that can be used to build a working MySQL or MariaDB with Tokutek patches, and with the TokuDB storage engine, called `make.mysql.bash`. This script will download copies of the needed source code from github and build everything. -To build MySQL 5.5.39 with TokuDB 7.5.2: +To build MySQL 5.5.40 with TokuDB 7.5.3: ```sh -scripts/make.mysql.bash --mysqlbuild=mysql-5.5.39-tokudb-7.5.2-linux-x86_64 +scripts/make.mysql.bash --mysqlbuild=mysql-5.5.40-tokudb-7.5.3-linux-x86_64 ``` -To build MariaDB 5.5.39 with TokuDB 7.5.2: +To build MariaDB 5.5.40 with TokuDB 7.5.3: ```sh -scripts/make.mysql.bash --mysqlbuild=mariadb-5.5.39-tokudb-7.5.2-linux-x86_64 +scripts/make.mysql.bash --mysqlbuild=mariadb-5.5.40-tokudb-7.5.3-linux-x86_64 ``` Before you start, make sure you have a C++11-compatible compiler (GCC >= @@ -54,10 +60,10 @@ scripts/make.mysql.debug.env.bash ``` -Contributing ------------- +Contribute +---------- -Please report bugs in TokuDB here on github. +Please report TokuDB bugs at https://tokutek.atlassian.net/browse/DB. We have two publicly accessible mailing lists: @@ -66,7 +72,7 @@ We have two publicly accessible mailing lists: - tokudb-dev@googlegroups.com is for discussion of the development of TokuDB. -We are also available on IRC on freenode.net, in the #tokutek channel. +We are on IRC on freenode.net, in the #tokutek channel. License @@ -74,7 +80,7 @@ License TokuDB is available under the GPL version 2. See [COPYING][copying] -The TokuKV component of TokuDB is available under the GPL version 2, with +The TokuFT component of TokuDB is available under the GPL version 2, with slight modifications. See [README-TOKUDB][license]. [copying]: http://github.com/Tokutek/tokudb-engine/blob/master/COPYING diff --git a/storage/tokudb/doc2/sysbench.update.ma10.tokudb754.loglog.png b/storage/tokudb/doc2/sysbench.update.ma10.tokudb754.loglog.png Binary files differnew file mode 100644 index 00000000000..7b2c1c5c66d --- /dev/null +++ b/storage/tokudb/doc2/sysbench.update.ma10.tokudb754.loglog.png diff --git a/storage/tokudb/doc2/sysbench.update.ma10.tokudb754.png b/storage/tokudb/doc2/sysbench.update.ma10.tokudb754.png Binary files differnew file mode 100644 index 00000000000..d46c053c0af --- /dev/null +++ b/storage/tokudb/doc2/sysbench.update.ma10.tokudb754.png diff --git a/storage/tokudb/doc2/sysbench.update.ma55.tokudb753.binlog.png b/storage/tokudb/doc2/sysbench.update.ma55.tokudb753.binlog.png Binary files differnew file mode 100644 index 00000000000..510f1811e5a --- /dev/null +++ b/storage/tokudb/doc2/sysbench.update.ma55.tokudb753.binlog.png diff --git a/storage/tokudb/doc2/sysbench.update.ma55.tokudb753.loglog.png b/storage/tokudb/doc2/sysbench.update.ma55.tokudb753.loglog.png Binary files differnew file mode 100644 index 00000000000..81fecd37684 --- /dev/null +++ b/storage/tokudb/doc2/sysbench.update.ma55.tokudb753.loglog.png diff --git a/storage/tokudb/doc2/sysbench.update.ma55.tokudb753.png b/storage/tokudb/doc2/sysbench.update.ma55.tokudb753.png Binary files differnew file mode 100644 index 00000000000..e5ed5f90b63 --- /dev/null +++ b/storage/tokudb/doc2/sysbench.update.ma55.tokudb753.png diff --git a/storage/tokudb/doc2/sysbench.update.my55.tokudb753.loglog.png b/storage/tokudb/doc2/sysbench.update.my55.tokudb753.loglog.png Binary files differnew file mode 100644 index 00000000000..1fe55b07b19 --- /dev/null +++ b/storage/tokudb/doc2/sysbench.update.my55.tokudb753.loglog.png diff --git a/storage/tokudb/doc2/sysbench.update.ps56.tokudb754.loglog.png b/storage/tokudb/doc2/sysbench.update.ps56.tokudb754.loglog.png Binary files differnew file mode 100644 index 00000000000..52985276249 --- /dev/null +++ b/storage/tokudb/doc2/sysbench.update.ps56.tokudb754.loglog.png diff --git a/storage/tokudb/doc2/sysbench.update.ps56.tokudb754.png b/storage/tokudb/doc2/sysbench.update.ps56.tokudb754.png Binary files differnew file mode 100644 index 00000000000..39b1c591730 --- /dev/null +++ b/storage/tokudb/doc2/sysbench.update.ps56.tokudb754.png diff --git a/storage/tokudb/ft-index/buildheader/make_tdb.cc b/storage/tokudb/ft-index/buildheader/make_tdb.cc index 9890b8ed34b..88f8882df78 100644 --- a/storage/tokudb/ft-index/buildheader/make_tdb.cc +++ b/storage/tokudb/ft-index/buildheader/make_tdb.cc @@ -585,6 +585,7 @@ static void print_db_txn_struct (void) { "uint64_t (*id64) (DB_TXN*)", "void (*set_client_id)(DB_TXN *, uint64_t client_id)", "uint64_t (*get_client_id)(DB_TXN *)", + "bool (*is_prepared)(DB_TXN *)", NULL}; sort_and_dump_fields("db_txn", false, extra); } diff --git a/storage/tokudb/ft-index/ft/ft-internal.h b/storage/tokudb/ft-index/ft/ft-internal.h index 3cd39705571..88fc5dca686 100644 --- a/storage/tokudb/ft-index/ft/ft-internal.h +++ b/storage/tokudb/ft-index/ft/ft-internal.h @@ -616,6 +616,7 @@ typedef enum { FT_PRO_RIGHTMOST_LEAF_SHORTCUT_SUCCESS, FT_PRO_RIGHTMOST_LEAF_SHORTCUT_FAIL_POS, FT_PRO_RIGHTMOST_LEAF_SHORTCUT_FAIL_REACTIVE, + FT_CURSOR_SKIP_DELETED_LEAF_ENTRY, // how many deleted leaf entries were skipped by a cursor FT_STATUS_NUM_ROWS } ft_status_entry; diff --git a/storage/tokudb/ft-index/ft/ft-ops.cc b/storage/tokudb/ft-index/ft/ft-ops.cc index 481d80fdbe4..34c9c46f1c6 100644 --- a/storage/tokudb/ft-index/ft/ft-ops.cc +++ b/storage/tokudb/ft-index/ft/ft-ops.cc @@ -377,6 +377,8 @@ status_init(void) STATUS_INIT(FT_PRO_RIGHTMOST_LEAF_SHORTCUT_FAIL_POS, nullptr, PARCOUNT, "promotion: tried the rightmost leaf shorcut but failed (out-of-bounds)", TOKU_ENGINE_STATUS); STATUS_INIT(FT_PRO_RIGHTMOST_LEAF_SHORTCUT_FAIL_REACTIVE,nullptr, PARCOUNT, "promotion: tried the rightmost leaf shorcut but failed (child reactive)", TOKU_ENGINE_STATUS); + STATUS_INIT(FT_CURSOR_SKIP_DELETED_LEAF_ENTRY, CURSOR_SKIP_DELETED_LEAF_ENTRY, PARCOUNT, "cursor skipped deleted leaf entries", TOKU_ENGINE_STATUS|TOKU_GLOBAL_STATUS); + ft_status.initialized = true; } static void status_destroy(void) { @@ -3378,13 +3380,13 @@ ok: ; if (le_val_is_del(le, ftcursor->is_snapshot_read, ftcursor->ttxn)) { // Provisionally deleted stuff is gone. // So we need to scan in the direction to see if we can find something. - // Every 100 deleted leaf entries check if the leaf's key is within the search bounds. - for (uint n_deleted = 1; ; n_deleted++) { + // Every 64 deleted leaf entries check if the leaf's key is within the search bounds. + for (uint64_t n_deleted = 1; ; n_deleted++) { switch (search->direction) { case FT_SEARCH_LEFT: idx++; - if (idx >= bn->data_buffer.num_klpairs() || - ((n_deleted % 64) == 0 && !search_continue(search, key, keylen))) { + if (idx >= bn->data_buffer.num_klpairs() || ((n_deleted % 64) == 0 && !search_continue(search, key, keylen))) { + STATUS_INC(FT_CURSOR_SKIP_DELETED_LEAF_ENTRY, n_deleted); if (ftcursor->interrupt_cb && ftcursor->interrupt_cb(ftcursor->interrupt_cb_extra)) { return TOKUDB_INTERRUPTED; } @@ -3393,6 +3395,7 @@ ok: ; break; case FT_SEARCH_RIGHT: if (idx == 0) { + STATUS_INC(FT_CURSOR_SKIP_DELETED_LEAF_ENTRY, n_deleted); if (ftcursor->interrupt_cb && ftcursor->interrupt_cb(ftcursor->interrupt_cb_extra)) { return TOKUDB_INTERRUPTED; } @@ -3406,6 +3409,7 @@ ok: ; r = bn->data_buffer.fetch_klpair(idx, &le, &keylen, &key); assert_zero(r); // we just validated the index if (!le_val_is_del(le, ftcursor->is_snapshot_read, ftcursor->ttxn)) { + STATUS_INC(FT_CURSOR_SKIP_DELETED_LEAF_ENTRY, n_deleted); goto got_a_good_value; } } diff --git a/storage/tokudb/ft-index/locktree/lock_request.cc b/storage/tokudb/ft-index/locktree/lock_request.cc index 97fa780bb04..18f6051afdf 100644 --- a/storage/tokudb/ft-index/locktree/lock_request.cc +++ b/storage/tokudb/ft-index/locktree/lock_request.cc @@ -113,12 +113,19 @@ void lock_request::create(void) { m_complete_r = 0; m_state = state::UNINITIALIZED; + m_info = nullptr; toku_cond_init(&m_wait_cond, nullptr); + + m_start_test_callback = nullptr; + m_retry_test_callback = nullptr; } // destroy a lock request. void lock_request::destroy(void) { + invariant(m_state != state::PENDING); + invariant(m_state != state::DESTROYED); + m_state = state::DESTROYED; toku_destroy_dbt(&m_left_key_copy); toku_destroy_dbt(&m_right_key_copy); toku_cond_destroy(&m_wait_cond); @@ -135,7 +142,7 @@ void lock_request::set(locktree *lt, TXNID txnid, const DBT *left_key, const DBT toku_destroy_dbt(&m_right_key_copy); m_type = lock_type; m_state = state::INITIALIZED; - m_info = lt->get_lock_request_info(); + m_info = lt ? lt->get_lock_request_info() : nullptr; m_big_txn = big_txn; } @@ -223,15 +230,18 @@ int lock_request::start(void) { insert_into_lock_requests(); if (deadlock_exists(conflicts)) { remove_from_lock_requests(); - complete(DB_LOCK_DEADLOCK); + r = DB_LOCK_DEADLOCK; } toku_mutex_unlock(&m_info->mutex); - } else { + if (m_start_test_callback) m_start_test_callback(); // test callback + } + + if (r != DB_LOCK_NOTGRANTED) { complete(r); } conflicts.destroy(); - return m_state == state::COMPLETE ? m_complete_r : r; + return r; } // sleep on the lock request until it becomes resolved or the wait time has elapsed. @@ -292,8 +302,8 @@ int lock_request::wait(uint64_t wait_time_ms, uint64_t killed_time_ms, int (*kil // complete this lock request with the given return value void lock_request::complete(int complete_r) { - m_state = state::COMPLETE; m_complete_r = complete_r; + m_state = state::COMPLETE; } const DBT *lock_request::get_left_key(void) const { @@ -331,6 +341,7 @@ int lock_request::retry(void) { if (r == 0) { remove_from_lock_requests(); complete(r); + if (m_retry_test_callback) m_retry_test_callback(); // test callback toku_cond_broadcast(&m_wait_cond); } @@ -416,7 +427,8 @@ void lock_request::remove_from_lock_requests(void) { uint32_t idx; lock_request *request; int r = m_info->pending_lock_requests.find_zero<TXNID, find_by_txnid>(m_txnid, &request, &idx); - invariant_zero(r && request == this); + invariant_zero(r); + invariant(request == this); r = m_info->pending_lock_requests.delete_at(idx); invariant_zero(r); } @@ -432,4 +444,12 @@ int lock_request::find_by_txnid(lock_request * const &request, const TXNID &txni } } +void lock_request::set_start_test_callback(void (*f)(void)) { + m_start_test_callback = f; +} + +void lock_request::set_retry_test_callback(void (*f)(void)) { + m_retry_test_callback = f; +} + } /* namespace toku */ diff --git a/storage/tokudb/ft-index/locktree/lock_request.h b/storage/tokudb/ft-index/locktree/lock_request.h index d1a4c2822e0..c504961fcc0 100644 --- a/storage/tokudb/ft-index/locktree/lock_request.h +++ b/storage/tokudb/ft-index/locktree/lock_request.h @@ -164,6 +164,8 @@ public: // The rest remain pending. static void retry_all_lock_requests(locktree *lt); + void set_start_test_callback(void (*f)(void)); + void set_retry_test_callback(void (*f)(void)); private: enum state { @@ -171,6 +173,7 @@ private: INITIALIZED, PENDING, COMPLETE, + DESTROYED, }; // The keys for a lock request are stored "unowned" in m_left_key @@ -236,6 +239,9 @@ private: static int find_by_txnid(lock_request * const &request, const TXNID &txnid); + void (*m_start_test_callback)(void); + void (*m_retry_test_callback)(void); + friend class lock_request_unit_test; }; ENSURE_POD(lock_request); diff --git a/storage/tokudb/ft-index/locktree/locktree.cc b/storage/tokudb/ft-index/locktree/locktree.cc index 27e528db8e8..fc2470e98bd 100644 --- a/storage/tokudb/ft-index/locktree/locktree.cc +++ b/storage/tokudb/ft-index/locktree/locktree.cc @@ -152,6 +152,7 @@ void locktree::create(locktree_manager *mgr, DICTIONARY_ID dict_id, const compar void locktree::destroy(void) { invariant(m_reference_count == 0); + invariant(m_lock_request_info.pending_lock_requests.size() == 0); m_cmp.destroy(); m_rangetree->destroy(); toku_free(m_rangetree); diff --git a/storage/tokudb/ft-index/locktree/tests/lock_request_start_retry_race.cc b/storage/tokudb/ft-index/locktree/tests/lock_request_start_retry_race.cc new file mode 100644 index 00000000000..86ef2dd9cc5 --- /dev/null +++ b/storage/tokudb/ft-index/locktree/tests/lock_request_start_retry_race.cc @@ -0,0 +1,193 @@ +/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*- */ +// vim: ft=cpp:expandtab:ts=8:sw=4:softtabstop=4: +#ident "$Id$" +/* +COPYING CONDITIONS NOTICE: + + This program is free software; you can redistribute it and/or modify + it under the terms of version 2 of the GNU General Public License as + published by the Free Software Foundation, and provided that the + following conditions are met: + + * Redistributions of source code must retain this COPYING + CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the + DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the + PATENT MARKING NOTICE (below), and the PATENT RIGHTS + GRANT (below). + + * Redistributions in binary form must reproduce this COPYING + CONDITIONS NOTICE, the COPYRIGHT NOTICE (below), the + DISCLAIMER (below), the UNIVERSITY PATENT NOTICE (below), the + PATENT MARKING NOTICE (below), and the PATENT RIGHTS + GRANT (below) in the documentation and/or other materials + provided with the distribution. + + 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., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. + +COPYRIGHT NOTICE: + + TokuFT, Tokutek Fractal Tree Indexing Library. + Copyright (C) 2007-2013 Tokutek, Inc. + +DISCLAIMER: + + 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. + +UNIVERSITY PATENT NOTICE: + + The technology is licensed by the Massachusetts Institute of + Technology, Rutgers State University of New Jersey, and the Research + Foundation of State University of New York at Stony Brook under + United States of America Serial No. 11/760379 and to the patents + and/or patent applications resulting from it. + +PATENT MARKING NOTICE: + + This software is covered by US Patent No. 8,185,551. + This software is covered by US Patent No. 8,489,638. + +PATENT RIGHTS GRANT: + + "THIS IMPLEMENTATION" means the copyrightable works distributed by + Tokutek as part of the Fractal Tree project. + + "PATENT CLAIMS" means the claims of patents that are owned or + licensable by Tokutek, both currently or in the future; and that in + the absence of this license would be infringed by THIS + IMPLEMENTATION or by using or running THIS IMPLEMENTATION. + + "PATENT CHALLENGE" shall mean a challenge to the validity, + patentability, enforceability and/or non-infringement of any of the + PATENT CLAIMS or otherwise opposing any of the PATENT CLAIMS. + + Tokutek hereby grants to you, for the term and geographical scope of + the PATENT CLAIMS, a non-exclusive, no-charge, royalty-free, + irrevocable (except as stated in this section) patent license to + make, have made, use, offer to sell, sell, import, transfer, and + otherwise run, modify, and propagate the contents of THIS + IMPLEMENTATION, where such license applies only to the PATENT + CLAIMS. This grant does not include claims that would be infringed + only as a consequence of further modifications of THIS + IMPLEMENTATION. If you or your agent or licensee institute or order + or agree to the institution of patent litigation against any entity + (including a cross-claim or counterclaim in a lawsuit) alleging that + THIS IMPLEMENTATION constitutes direct or contributory patent + infringement, or inducement of patent infringement, then any rights + granted to you under this License shall terminate as of the date + such litigation is filed. If you or your agent or exclusive + licensee institute or order or agree to the institution of a PATENT + CHALLENGE, then Tokutek may terminate any rights granted to you + under this License. +*/ + +#ident "Copyright (c) 2014 Tokutek Inc. All rights reserved." +#ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it." + +#include <iostream> +#include "test.h" +#include "locktree.h" +#include "lock_request.h" + +// Test FT-633, the data race on the lock request between ::start and ::retry +// This test is non-deterministic. It uses sleeps at 2 critical places to +// expose the data race on the lock requests state. + +namespace toku { + +struct locker_arg { + locktree *_lt; + TXNID _id; + const DBT *_key; + + locker_arg(locktree *lt, TXNID id, const DBT *key) : _lt(lt), _id(id), _key(key) { + } +}; + +static void locker_callback(void) { + usleep(10000); +} + +static void run_locker(locktree *lt, TXNID txnid, const DBT *key) { + int i; + for (i = 0; i < 1000; i++) { + + lock_request request; + request.create(); + + request.set(lt, txnid, key, key, lock_request::type::WRITE, false); + + // set the test callbacks + request.set_start_test_callback(locker_callback); + request.set_retry_test_callback(locker_callback); + + // try to acquire the lock + int r = request.start(); + if (r == DB_LOCK_NOTGRANTED) { + // wait for the lock to be granted + r = request.wait(10 * 1000); + } + + if (r == 0) { + // release the lock + range_buffer buffer; + buffer.create(); + buffer.append(key, key); + lt->release_locks(txnid, &buffer); + buffer.destroy(); + + // retry pending lock requests + lock_request::retry_all_lock_requests(lt); + } + + request.destroy(); + memset(&request, 0xab, sizeof request); + + toku_pthread_yield(); + if ((i % 10) == 0) + std::cout << toku_pthread_self() << " " << i << std::endl; + } +} + +static void *locker(void *v_arg) { + locker_arg *arg = static_cast<locker_arg *>(v_arg); + run_locker(arg->_lt, arg->_id, arg->_key); + return arg; +} + +} /* namespace toku */ + +int main(void) { + int r; + + toku::locktree lt; + DICTIONARY_ID dict_id = { 1 }; + lt.create(nullptr, dict_id, toku::dbt_comparator); + + const DBT *one = toku::get_dbt(1); + + const int n_workers = 2; + toku_pthread_t ids[n_workers]; + for (int i = 0; i < n_workers; i++) { + toku::locker_arg *arg = new toku::locker_arg(<, i, one); + r = toku_pthread_create(&ids[i], nullptr, toku::locker, arg); + assert_zero(r); + } + for (int i = 0; i < n_workers; i++) { + void *ret; + r = toku_pthread_join(ids[i], &ret); + assert_zero(r); + toku::locker_arg *arg = static_cast<toku::locker_arg *>(ret); + delete arg; + } + + lt.release_reference(); + lt.destroy(); + return 0; +} + diff --git a/storage/tokudb/ft-index/src/ydb_row_lock.cc b/storage/tokudb/ft-index/src/ydb_row_lock.cc index 5ca853d92d9..4dd527220ec 100644 --- a/storage/tokudb/ft-index/src/ydb_row_lock.cc +++ b/storage/tokudb/ft-index/src/ydb_row_lock.cc @@ -307,6 +307,7 @@ void toku_db_grab_write_lock (DB *db, DBT *key, TOKUTXN tokutxn) { int r = request.start(); invariant_zero(r); db_txn_note_row_lock(db, txn_anc, key, key); + request.destroy(); } void toku_db_release_lt_key_ranges(DB_TXN *txn, txn_lt_key_ranges *ranges) { diff --git a/storage/tokudb/ft-index/src/ydb_txn.cc b/storage/tokudb/ft-index/src/ydb_txn.cc index dd428c4d502..ce06e78b23f 100644 --- a/storage/tokudb/ft-index/src/ydb_txn.cc +++ b/storage/tokudb/ft-index/src/ydb_txn.cc @@ -422,6 +422,11 @@ static int toku_txn_discard(DB_TXN *txn, uint32_t flags) { return 0; } +static bool toku_txn_is_prepared(DB_TXN *txn) { + TOKUTXN ttxn = db_txn_struct_i(txn)->tokutxn; + return toku_txn_get_state(ttxn) == TOKUTXN_PREPARING; +} + static inline void txn_func_init(DB_TXN *txn) { #define STXN(name) txn->name = locked_txn_ ## name STXN(abort); @@ -438,6 +443,7 @@ static inline void txn_func_init(DB_TXN *txn) { SUTXN(discard); #undef SUTXN txn->id64 = toku_txn_id64; + txn->is_prepared = toku_txn_is_prepared; } // diff --git a/storage/tokudb/ha_tokudb.cc b/storage/tokudb/ha_tokudb.cc index 7f894640ca6..66074ccb2fc 100644 --- a/storage/tokudb/ha_tokudb.cc +++ b/storage/tokudb/ha_tokudb.cc @@ -172,6 +172,31 @@ static inline uint32_t get_len_of_offsets(KEY_AND_COL_INFO* kc_info, TABLE_SHARE } +static int get_thread_query_string(my_thread_id id, String &qs) { + mysql_mutex_lock(&LOCK_thread_count); + I_List_iterator<THD> it(threads); + THD* tmp; + while ((tmp= it++)) + { + /* ID */ + if (tmp->thread_id == id) + { + /* Lock THD mutex that protects its data when looking at it. */ + mysql_mutex_lock(&tmp->LOCK_thd_data); + + /* INFO */ + if (tmp->query()) + { + qs = String(tmp->query(), tmp->query_length(), system_charset_info); + } + mysql_mutex_unlock(&tmp->LOCK_thd_data); + break; + } + } + mysql_mutex_unlock(&LOCK_thread_count); + return 0; +} + static int allocate_key_and_col_info ( TABLE_SHARE* table_share, KEY_AND_COL_INFO* kc_info) { int error; // @@ -1742,7 +1767,7 @@ int ha_tokudb::initialize_share(const char* name, int mode) { // initialize cardinality info from the status dictionary share->n_rec_per_key = tokudb::compute_total_key_parts(table_share); - share->rec_per_key = (uint64_t *) tokudb_my_realloc(share->rec_per_key, share->n_rec_per_key * sizeof (uint64_t), MYF(MY_FAE)); + share->rec_per_key = (uint64_t *) tokudb_my_realloc(share->rec_per_key, share->n_rec_per_key * sizeof (uint64_t), MYF(MY_FAE + MY_ALLOW_ZERO_PTR)); error = tokudb::get_card_from_status(share->status_block, txn, share->n_rec_per_key, share->rec_per_key); if (error) { for (uint i = 0; i < share->n_rec_per_key; i++) @@ -3557,8 +3582,12 @@ static void maybe_do_unique_checks_delay(THD *thd) { } } +static bool need_read_only(THD *thd) { + return opt_readonly || !THDVAR(thd, rpl_check_readonly); +} + static bool do_unique_checks(THD *thd, bool do_rpl_event) { - if (do_rpl_event && thd->slave_thread && opt_readonly && !THDVAR(thd, rpl_unique_checks)) + if (do_rpl_event && thd->slave_thread && need_read_only(thd) && !THDVAR(thd, rpl_unique_checks)) return false; else return !thd_test_options(thd, OPTION_RELAXED_UNIQUE_CHECKS); @@ -5378,9 +5407,12 @@ int ha_tokudb::get_next(uchar* buf, int direction, DBT* key_to_compare, bool do_ } if (!error) { - tokudb_trx_data* trx = (tokudb_trx_data *) thd_get_ha_data(ha_thd(), tokudb_hton); + THD *thd = ha_thd(); + tokudb_trx_data* trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton); trx->stmt_progress.queried++; - track_progress(ha_thd()); + track_progress(thd); + if (thd_killed(thd)) + error = ER_ABORTING_CONNECTION; } cleanup: return error; @@ -5995,6 +6027,9 @@ int ha_tokudb::extra(enum ha_extra_function operation) { case HA_EXTRA_NO_IGNORE_NO_KEY: using_ignore_no_key = false; break; + case HA_EXTRA_NOT_USED: + case HA_EXTRA_PREPARE_FOR_RENAME: + break; // must do nothing and return 0 default: break; } @@ -6240,7 +6275,11 @@ int ha_tokudb::start_stmt(THD * thd, thr_lock_type lock_type) { int error = 0; tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, tokudb_hton); - DBUG_ASSERT(trx); + if (!trx) { + error = create_tokudb_trx_data_instance(&trx); + if (error) { goto cleanup; } + thd_set_ha_data(thd, tokudb_hton, trx); + } /* note that trx->stmt may have been already initialized as start_stmt() @@ -7246,7 +7285,7 @@ double ha_tokudb::index_only_read_time(uint keynr, double records) { // HA_POS_ERROR - Something is wrong with the index tree // ha_rows ha_tokudb::records_in_range(uint keynr, key_range* start_key, key_range* end_key) { - TOKUDB_HANDLER_DBUG_ENTER(""); + TOKUDB_HANDLER_DBUG_ENTER("%d %p %p", keynr, start_key, end_key); DBT *pleft_key, *pright_key; DBT left_key, right_key; ha_rows ret_val = HA_TOKUDB_RANGE_COUNT; @@ -7302,6 +7341,9 @@ ha_rows ha_tokudb::records_in_range(uint keynr, key_range* start_key, key_range* ret_val = (ha_rows) (rows <= 1 ? 1 : rows); cleanup: + if (tokudb_debug & TOKUDB_DEBUG_RETURN) { + TOKUDB_HANDLER_TRACE("%" PRIu64 " %" PRIu64, (uint64_t) ret_val, rows); + } DBUG_RETURN(ret_val); } diff --git a/storage/tokudb/ha_tokudb.h b/storage/tokudb/ha_tokudb.h index c17a4628a11..6c4055fc621 100644 --- a/storage/tokudb/ha_tokudb.h +++ b/storage/tokudb/ha_tokudb.h @@ -833,7 +833,7 @@ static inline bool key_is_clustering(const KEY *key) { #else static inline bool key_is_clustering(const KEY *key) { - return key->option_struct && key->option_struct->clustering; + return key->flags & HA_CLUSTERING; } #endif diff --git a/storage/tokudb/ha_tokudb_admin.cc b/storage/tokudb/ha_tokudb_admin.cc index c3b895bf4f4..d6da45733a5 100644 --- a/storage/tokudb/ha_tokudb_admin.cc +++ b/storage/tokudb/ha_tokudb_admin.cc @@ -89,6 +89,8 @@ PATENT RIGHTS GRANT: #ident "Copyright (c) 2007-2013 Tokutek Inc. All rights reserved." #ident "The technology is licensed by the Massachusetts Institute of Technology, Rutgers State University of New Jersey, and the Research Foundation of State University of New York at Stony Brook under United States of America Serial No. 11/760379 and to the patents and/or patent applications resulting from it." +#include "toku_time.h" + struct analyze_progress_extra { THD *thd; TOKUDB_SHARE *share; @@ -186,9 +188,12 @@ typedef struct hot_optimize_context { uint progress_stage; uint current_table; uint num_tables; + float progress_limit; + uint64_t progress_last_time; + uint64_t throttle; } *HOT_OPTIMIZE_CONTEXT; -static int hot_poll_fun(void *extra, float progress) { +static int hot_optimize_progress_fun(void *extra, float progress) { HOT_OPTIMIZE_CONTEXT context = (HOT_OPTIMIZE_CONTEXT)extra; if (thd_killed(context->thd)) { sprintf(context->write_status_msg, "The process has been killed, aborting hot optimize."); @@ -207,14 +212,27 @@ static int hot_poll_fun(void *extra, float progress) { // the percentage we report here is for the current stage/db thd_progress_report(context->thd, (unsigned long long) percentage, 100); #endif - return 0; + + // throttle the optimize table + if (context->throttle) { + uint64_t time_now = toku_current_time_microsec(); + uint64_t dt = time_now - context->progress_last_time; + uint64_t throttle_time = 1000000ULL / context->throttle; + if (throttle_time > dt) { + usleep(throttle_time - dt); + } + context->progress_last_time = toku_current_time_microsec(); + } + + // return 1 if progress has reach the progress limit + return progress >= context->progress_limit; } // flatten all DB's in this table, to do so, peform hot optimize on each db int ha_tokudb::do_optimize(THD *thd) { TOKUDB_HANDLER_DBUG_ENTER("%s", share->table_name); + int error = 0; const char *orig_proc_info = tokudb_thd_get_proc_info(thd); - int error; uint curr_num_DBs = table->s->keys + tokudb_test(hidden_primary_key); #ifdef HA_TOKUDB_HAS_THD_PROGRESS @@ -225,11 +243,21 @@ int ha_tokudb::do_optimize(THD *thd) { // for each DB, run optimize and hot_optimize for (uint i = 0; i < curr_num_DBs; i++) { + // only optimize the index if it matches the optimize_index_name session variable + const char *optimize_index_name = THDVAR(thd, optimize_index_name); + if (optimize_index_name) { + const char *this_index_name = i >= table_share->keys ? "primary" : table_share->key_info[i].name; + if (strcasecmp(optimize_index_name, this_index_name) != 0) { + continue; + } + } + DB* db = share->key_file[i]; error = db->optimize(db); if (error) { goto cleanup; } + struct hot_optimize_context hc; memset(&hc, 0, sizeof hc); hc.thd = thd; @@ -237,8 +265,11 @@ int ha_tokudb::do_optimize(THD *thd) { hc.ha = this; hc.current_table = i; hc.num_tables = curr_num_DBs; + hc.progress_limit = THDVAR(thd, optimize_index_fraction); + hc.progress_last_time = toku_current_time_microsec(); + hc.throttle = THDVAR(thd, optimize_throttle); uint64_t loops_run; - error = db->hot_optimize(db, NULL, NULL, hot_poll_fun, &hc, &loops_run); + error = db->hot_optimize(db, NULL, NULL, hot_optimize_progress_fun, &hc, &loops_run); if (error) { goto cleanup; } diff --git a/storage/tokudb/ha_tokudb_alter_56.cc b/storage/tokudb/ha_tokudb_alter_56.cc index 1a03dc815a1..cae50446fa0 100644 --- a/storage/tokudb/ha_tokudb_alter_56.cc +++ b/storage/tokudb/ha_tokudb_alter_56.cc @@ -765,7 +765,9 @@ bool ha_tokudb::commit_inplace_alter_table(TABLE *altered_table, Alter_inplace_i #else THD::killed_state saved_killed_state = thd->killed; thd->killed = THD::NOT_KILLED; - for (volatile uint i = 0; wait_while_table_is_used(thd, table, HA_EXTRA_NOT_USED); i++) { + // MySQL does not handle HA_EXTRA_NOT_USED so we use HA_EXTRA_PREPARE_FOR_RENAME since it is passed through + // the partition storage engine and is treated as a NOP by tokudb + for (volatile uint i = 0; wait_while_table_is_used(thd, table, HA_EXTRA_PREPARE_FOR_RENAME); i++) { if (thd->killed != THD::NOT_KILLED) thd->killed = THD::NOT_KILLED; sleep(1); diff --git a/storage/tokudb/hatoku_defines.h b/storage/tokudb/hatoku_defines.h index 5af066bb1b6..1889b48224b 100644 --- a/storage/tokudb/hatoku_defines.h +++ b/storage/tokudb/hatoku_defines.h @@ -162,6 +162,9 @@ PATENT RIGHTS GRANT: #define TOKU_INCLUDE_EXTENDED_KEYS 1 #define TOKU_INCLUDE_OPTION_STRUCTS 1 #define TOKU_CLUSTERING_IS_COVERING 1 +#define TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING 1 +#else +#define TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING 1 #endif #define TOKU_INCLUDE_HANDLERTON_HANDLE_FATAL_SIGNAL 0 /* MariaDB 5.5 */ diff --git a/storage/tokudb/hatoku_hton.cc b/storage/tokudb/hatoku_hton.cc index 34b28be83ae..c16a5b37e1c 100644 --- a/storage/tokudb/hatoku_hton.cc +++ b/storage/tokudb/hatoku_hton.cc @@ -425,10 +425,10 @@ static int tokudb_init_func(void *p) { tokudb_hton->commit = tokudb_commit; tokudb_hton->rollback = tokudb_rollback; #if TOKU_INCLUDE_XA - tokudb_hton->prepare=tokudb_xa_prepare; - tokudb_hton->recover=tokudb_xa_recover; - tokudb_hton->commit_by_xid=tokudb_commit_by_xid; - tokudb_hton->rollback_by_xid=tokudb_rollback_by_xid; + tokudb_hton->prepare = tokudb_xa_prepare; + tokudb_hton->recover = tokudb_xa_recover; + tokudb_hton->commit_by_xid = tokudb_commit_by_xid; + tokudb_hton->rollback_by_xid = tokudb_rollback_by_xid; #endif tokudb_hton->table_options= tokudb_table_options; @@ -785,16 +785,35 @@ static void tokudb_cleanup_handlers(tokudb_trx_data *trx, DB_TXN *txn) { } } +#if MYSQL_VERSION_ID >= 50600 +extern "C" enum durability_properties thd_get_durability_property(const MYSQL_THD thd); +#endif + +// Determine if an fsync is used when a transaction is committed. +static bool tokudb_fsync_on_commit(THD *thd, tokudb_trx_data *trx, DB_TXN *txn) { +#if MYSQL_VERSION_ID >= 50600 + // Check the client durability property which is set during 2PC + if (thd_get_durability_property(thd) == HA_IGNORE_DURABILITY) + return false; +#endif +#if defined(MARIADB_BASE_VERSION) + // Check is the txn is prepared and the binlog is open + if (txn->is_prepared(txn) && mysql_bin_log.is_open()) + return false; +#endif + return THDVAR(thd, commit_sync) != 0; +} + static int tokudb_commit(handlerton * hton, THD * thd, bool all) { TOKUDB_DBUG_ENTER(""); DBUG_PRINT("trans", ("ending transaction %s", all ? "all" : "stmt")); - uint32_t syncflag = THDVAR(thd, commit_sync) ? 0 : DB_TXN_NOSYNC; tokudb_trx_data *trx = (tokudb_trx_data *) thd_get_ha_data(thd, hton); DB_TXN **txn = all ? &trx->all : &trx->stmt; DB_TXN *this_txn = *txn; if (this_txn) { + uint32_t syncflag = tokudb_fsync_on_commit(thd, trx, this_txn) ? 0 : DB_TXN_NOSYNC; if (tokudb_debug & TOKUDB_DEBUG_TXN) { - TOKUDB_TRACE("commit trx %u txn %p", all, this_txn); + TOKUDB_TRACE("commit trx %u txn %p syncflag %u", all, this_txn, syncflag); } // test hook to induce a crash on a debug build DBUG_EXECUTE_IF("tokudb_crash_commit_before", DBUG_SUICIDE();); @@ -848,7 +867,7 @@ static int tokudb_xa_prepare(handlerton* hton, THD* thd, bool all) { TOKUDB_DBUG_ENTER(""); int r = 0; - /* if support_xa is disable, just return */ + // if tokudb_support_xa is disable, just return if (!THDVAR(thd, support_xa)) { TOKUDB_DBUG_RETURN(r); } @@ -1384,8 +1403,6 @@ static MYSQL_SYSVAR_STR(data_dir, tokudb_data_dir, PLUGIN_VAR_READONLY, "TokuDB static MYSQL_SYSVAR_STR(version, tokudb_version, PLUGIN_VAR_READONLY, "TokuDB Version", NULL, NULL, NULL); -static MYSQL_SYSVAR_UINT(init_flags, tokudb_init_flags, PLUGIN_VAR_READONLY, "Sets TokuDB DB_ENV->open flags", NULL, NULL, tokudb_init_flags, 0, ~0U, 0); - static MYSQL_SYSVAR_UINT(write_status_frequency, tokudb_write_status_frequency, 0, "TokuDB frequency that show processlist updates status of writes", NULL, NULL, 1000, 0, ~0U, 0); static MYSQL_SYSVAR_UINT(read_status_frequency, tokudb_read_status_frequency, 0, "TokuDB frequency that show processlist updates status of reads", NULL, NULL, 10000, 0, ~0U, 0); static MYSQL_SYSVAR_INT(fs_reserve_percent, tokudb_fs_reserve_percent, PLUGIN_VAR_READONLY, "TokuDB file system space reserve (percent free required)", NULL, NULL, 5, 0, 100, 0); @@ -1422,7 +1439,6 @@ static struct st_mysql_sys_var *tokudb_system_variables[] = { MYSQL_SYSVAR(create_index_online), MYSQL_SYSVAR(disable_prefetching), MYSQL_SYSVAR(version), - MYSQL_SYSVAR(init_flags), MYSQL_SYSVAR(checkpointing_period), MYSQL_SYSVAR(prelock_empty), MYSQL_SYSVAR(checkpoint_lock), @@ -1463,6 +1479,10 @@ static struct st_mysql_sys_var *tokudb_system_variables[] = { MYSQL_SYSVAR(rpl_unique_checks_delay), MYSQL_SYSVAR(rpl_lookup_rows), MYSQL_SYSVAR(rpl_lookup_rows_delay), + MYSQL_SYSVAR(rpl_check_readonly), + MYSQL_SYSVAR(optimize_index_name), + MYSQL_SYSVAR(optimize_index_fraction), + MYSQL_SYSVAR(optimize_throttle), NULL }; @@ -1608,12 +1628,12 @@ static ST_FIELD_INFO tokudb_fractal_tree_info_field_info[] = { static int tokudb_report_fractal_tree_info_for_db(const DBT *dname, const DBT *iname, TABLE *table, THD *thd) { int error; - DB *db; uint64_t bt_num_blocks_allocated; uint64_t bt_num_blocks_in_use; uint64_t bt_size_allocated; uint64_t bt_size_in_use; + DB *db = NULL; error = db_create(&db, db_env, 0); if (error) { goto exit; @@ -1625,12 +1645,6 @@ static int tokudb_report_fractal_tree_info_for_db(const DBT *dname, const DBT *i error = db->get_fractal_tree_info64(db, &bt_num_blocks_allocated, &bt_num_blocks_in_use, &bt_size_allocated, &bt_size_in_use); - { - int close_error = db->close(db, 0); - if (!error) { - error = close_error; - } - } if (error) { goto exit; } @@ -1662,6 +1676,11 @@ static int tokudb_report_fractal_tree_info_for_db(const DBT *dname, const DBT *i error = schema_table_store_record(thd, table); exit: + if (db) { + int close_error = db->close(db, 0); + if (error == 0) + error = close_error; + } return error; } @@ -1956,6 +1975,33 @@ static int tokudb_fractal_tree_block_map_done(void *p) { return 0; } +#if TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING +struct tokudb_search_txn_extra { + bool match_found; + uint64_t match_txn_id; + uint64_t match_client_id; +}; + +static int tokudb_search_txn_callback(uint64_t txn_id, uint64_t client_id, iterate_row_locks_callback iterate_locks, void *locks_extra, void *extra) { + struct tokudb_search_txn_extra *e = reinterpret_cast<struct tokudb_search_txn_extra *>(extra); + if (e->match_txn_id == txn_id) { + e->match_found = true; + e->match_client_id = client_id; + return 1; + } + return 0; +} + +static bool tokudb_txn_id_to_client_id(THD *thd, uint64_t blocking_txnid, uint64_t *blocking_client_id) { + struct tokudb_search_txn_extra e = { false, blocking_txnid, 0}; + (void) db_env->iterate_live_transactions(db_env, tokudb_search_txn_callback, &e); + if (e.match_found) { + *blocking_client_id = e.match_client_id; + } + return e.match_found; +} +#endif + static void tokudb_pretty_key(const DB *db, const DBT *key, const char *default_key, String *out) { if (key->data == NULL) { out->append(default_key); @@ -2005,8 +2051,9 @@ static void tokudb_lock_timeout_callback(DB *db, uint64_t requesting_txnid, cons // generate a JSON document with the lock timeout info String log_str; log_str.append("{"); + uint64_t mysql_thread_id = thd->thread_id; log_str.append("\"mysql_thread_id\":"); - log_str.append_ulonglong(thd->thread_id); + log_str.append_ulonglong(mysql_thread_id); log_str.append(", \"dbname\":"); log_str.append("\""); log_str.append(tokudb_get_index_name(db)); log_str.append("\""); log_str.append(", \"requesting_txnid\":"); @@ -2046,7 +2093,18 @@ static void tokudb_lock_timeout_callback(DB *db, uint64_t requesting_txnid, cons } // dump to stderr if (lock_timeout_debug & 2) { - sql_print_error("%s: %s", tokudb_hton_name, log_str.c_ptr()); + sql_print_error("%s: lock timeout %s", tokudb_hton_name, log_str.c_ptr()); + LEX_STRING *qs = thd_query_string(thd); + sql_print_error("%s: requesting_thread_id:%" PRIu64 " q:%.*s", tokudb_hton_name, mysql_thread_id, (int) qs->length, qs->str); +#if TOKU_INCLUDE_LOCK_TIMEOUT_QUERY_STRING + uint64_t blocking_thread_id = 0; + if (tokudb_txn_id_to_client_id(thd, blocking_txnid, &blocking_thread_id)) { + String blocking_qs; + if (get_thread_query_string(blocking_thread_id, blocking_qs) == 0) { + sql_print_error("%s: blocking_thread_id:%" PRIu64 " q:%.*s", tokudb_hton_name, blocking_thread_id, blocking_qs.length(), blocking_qs.c_ptr()); + } + } +#endif } } } diff --git a/storage/tokudb/hatoku_hton.h b/storage/tokudb/hatoku_hton.h index 797e8ff48bc..ff17ecc276d 100644 --- a/storage/tokudb/hatoku_hton.h +++ b/storage/tokudb/hatoku_hton.h @@ -491,6 +491,15 @@ static MYSQL_THDVAR_BOOL(rpl_lookup_rows, PLUGIN_VAR_THDLOCAL, "lookup a row on static MYSQL_THDVAR_ULONGLONG(rpl_lookup_rows_delay, PLUGIN_VAR_THDLOCAL, "time in milliseconds to add to lookups on replication slave", NULL, NULL, 0 /*default*/, 0 /*min*/, ~0ULL /*max*/, 1 /*blocksize*/); +static MYSQL_THDVAR_BOOL(rpl_check_readonly, PLUGIN_VAR_THDLOCAL, "check if the slave is read only", + NULL /*check*/, NULL /*update*/, true /*default*/); + +static MYSQL_THDVAR_STR(optimize_index_name, PLUGIN_VAR_THDLOCAL + PLUGIN_VAR_MEMALLOC, "optimize index name (default all indexes)", NULL /*check*/, NULL /*update*/, NULL /*default*/); + +static MYSQL_THDVAR_DOUBLE(optimize_index_fraction, 0, "optimize index fraction (default 1.0 all)", NULL /*check*/, NULL /*update*/, 1.0 /*def*/, 0 /*min*/, 1.0 /*max*/, 1); + +static MYSQL_THDVAR_ULONGLONG(optimize_throttle, 0, "optimize throttle (default no throttle)", NULL /*check*/, NULL /*update*/, 0 /*def*/, 0 /*min*/, ~0ULL /*max*/, 1); + extern HASH tokudb_open_tables; extern pthread_mutex_t tokudb_mutex; extern uint32_t tokudb_write_status_frequency; diff --git a/storage/tokudb/mysql-test/rpl/disabled.def b/storage/tokudb/mysql-test/rpl/disabled.def index efa4be9e16c..4c1a9a3e785 100644 --- a/storage/tokudb/mysql-test/rpl/disabled.def +++ b/storage/tokudb/mysql-test/rpl/disabled.def @@ -10,3 +10,6 @@ rpl_tokudb_write_pk: unreliable, uses timestamp differences rpl_tokudb_write_pk_uc1: unreliable, uses timestamp differences rpl_tokudb_write_unique: unreliable, uses timestamp differences rpl_tokudb_write_unique_uc1: unreliable, uses timestamp differences +rpl_tokudb_read_only_ff: unreliable, uses timestamp differences +rpl_tokudb_read_only_tf: unreliable, uses timestamp differences +rpl_tokudb_read_only_tt: unreliable, uses timestamp differences diff --git a/storage/tokudb/mysql-test/rpl/r/rpl_tokudb_read_only_ff.result b/storage/tokudb/mysql-test/rpl/r/rpl_tokudb_read_only_ff.result new file mode 100644 index 00000000000..6db2036d933 --- /dev/null +++ b/storage/tokudb/mysql-test/rpl/r/rpl_tokudb_read_only_ff.result @@ -0,0 +1,14 @@ +include/master-slave.inc +[connection master] +drop table if exists t; +create table t (a bigint not null, primary key(a)) engine=tokudb; +select unix_timestamp() into @tstart; +insert into t values (1); +insert into t values (2),(3); +insert into t values (4); +select unix_timestamp()-@tstart <= 10; +unix_timestamp()-@tstart <= 10 +1 +include/diff_tables.inc [master:test.t, slave:test.t] +drop table if exists t; +include/rpl_end.inc diff --git a/storage/tokudb/mysql-test/rpl/r/rpl_tokudb_read_only_ft.result b/storage/tokudb/mysql-test/rpl/r/rpl_tokudb_read_only_ft.result new file mode 100644 index 00000000000..3bcd3e8ccdd --- /dev/null +++ b/storage/tokudb/mysql-test/rpl/r/rpl_tokudb_read_only_ft.result @@ -0,0 +1,14 @@ +include/master-slave.inc +[connection master] +drop table if exists t; +create table t (a bigint not null, primary key(a)) engine=tokudb; +select unix_timestamp() into @tstart; +insert into t values (1); +insert into t values (2),(3); +insert into t values (4); +select unix_timestamp()-@tstart <= 10; +unix_timestamp()-@tstart <= 10 +0 +include/diff_tables.inc [master:test.t, slave:test.t] +drop table if exists t; +include/rpl_end.inc diff --git a/storage/tokudb/mysql-test/rpl/r/rpl_tokudb_read_only_tf.result b/storage/tokudb/mysql-test/rpl/r/rpl_tokudb_read_only_tf.result new file mode 100644 index 00000000000..6db2036d933 --- /dev/null +++ b/storage/tokudb/mysql-test/rpl/r/rpl_tokudb_read_only_tf.result @@ -0,0 +1,14 @@ +include/master-slave.inc +[connection master] +drop table if exists t; +create table t (a bigint not null, primary key(a)) engine=tokudb; +select unix_timestamp() into @tstart; +insert into t values (1); +insert into t values (2),(3); +insert into t values (4); +select unix_timestamp()-@tstart <= 10; +unix_timestamp()-@tstart <= 10 +1 +include/diff_tables.inc [master:test.t, slave:test.t] +drop table if exists t; +include/rpl_end.inc diff --git a/storage/tokudb/mysql-test/rpl/r/rpl_tokudb_read_only_tt.result b/storage/tokudb/mysql-test/rpl/r/rpl_tokudb_read_only_tt.result new file mode 100644 index 00000000000..6db2036d933 --- /dev/null +++ b/storage/tokudb/mysql-test/rpl/r/rpl_tokudb_read_only_tt.result @@ -0,0 +1,14 @@ +include/master-slave.inc +[connection master] +drop table if exists t; +create table t (a bigint not null, primary key(a)) engine=tokudb; +select unix_timestamp() into @tstart; +insert into t values (1); +insert into t values (2),(3); +insert into t values (4); +select unix_timestamp()-@tstart <= 10; +unix_timestamp()-@tstart <= 10 +1 +include/diff_tables.inc [master:test.t, slave:test.t] +drop table if exists t; +include/rpl_end.inc diff --git a/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_ff-slave.opt b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_ff-slave.opt new file mode 100644 index 00000000000..b9eb687d8d5 --- /dev/null +++ b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_ff-slave.opt @@ -0,0 +1 @@ +--read-only=OFF --tokudb-rpl-check-readonly=OFF --tokudb-rpl-unique-checks-delay=5000 --tokudb-rpl-unique-checks=OFF diff --git a/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_ff.test b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_ff.test new file mode 100644 index 00000000000..c77e4b49605 --- /dev/null +++ b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_ff.test @@ -0,0 +1,53 @@ +# test replicated write rows log events on a table with a primary key. +# the slave is read only with tokudb unique checks disabled. + +source include/have_tokudb.inc; +let $engine=tokudb; +source include/have_binlog_format_row.inc; +source include/master-slave.inc; + +# initialize +connection master; +disable_warnings; +drop table if exists t; +enable_warnings; + +connection slave; +# show variables like 'read_only'; +# show variables like 'tokudb_rpl_unique_checks%'; + +# insert some rows +connection master; +# select @@binlog_format; +# select @@autocommit; +eval create table t (a bigint not null, primary key(a)) engine=$engine; +# show create table t; +select unix_timestamp() into @tstart; +insert into t values (1); +insert into t values (2),(3); +insert into t values (4); + +sync_slave_with_master; +# source include/sync_slave_sql_with_master.inc; + +connection master; +select unix_timestamp()-@tstart <= 10; + +connection slave; +# insert into t values (5); # test read-only +# show create table t; + +# diff tables +connection master; +--let $diff_tables= master:test.t, slave:test.t +source include/diff_tables.inc; + +# cleanup +connection master; +drop table if exists t; + +sync_slave_with_master; +# source include/sync_slave_sql_with_master.inc; + +source include/rpl_end.inc; + diff --git a/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_ft-slave.opt b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_ft-slave.opt new file mode 100644 index 00000000000..8283875e8a7 --- /dev/null +++ b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_ft-slave.opt @@ -0,0 +1 @@ +--read-only=OFF --tokudb-rpl-check-readonly=ON --tokudb-rpl-unique-checks-delay=5000 --tokudb-rpl-unique-checks=OFF diff --git a/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_ft.test b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_ft.test new file mode 100644 index 00000000000..c77e4b49605 --- /dev/null +++ b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_ft.test @@ -0,0 +1,53 @@ +# test replicated write rows log events on a table with a primary key. +# the slave is read only with tokudb unique checks disabled. + +source include/have_tokudb.inc; +let $engine=tokudb; +source include/have_binlog_format_row.inc; +source include/master-slave.inc; + +# initialize +connection master; +disable_warnings; +drop table if exists t; +enable_warnings; + +connection slave; +# show variables like 'read_only'; +# show variables like 'tokudb_rpl_unique_checks%'; + +# insert some rows +connection master; +# select @@binlog_format; +# select @@autocommit; +eval create table t (a bigint not null, primary key(a)) engine=$engine; +# show create table t; +select unix_timestamp() into @tstart; +insert into t values (1); +insert into t values (2),(3); +insert into t values (4); + +sync_slave_with_master; +# source include/sync_slave_sql_with_master.inc; + +connection master; +select unix_timestamp()-@tstart <= 10; + +connection slave; +# insert into t values (5); # test read-only +# show create table t; + +# diff tables +connection master; +--let $diff_tables= master:test.t, slave:test.t +source include/diff_tables.inc; + +# cleanup +connection master; +drop table if exists t; + +sync_slave_with_master; +# source include/sync_slave_sql_with_master.inc; + +source include/rpl_end.inc; + diff --git a/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_tf-slave.opt b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_tf-slave.opt new file mode 100644 index 00000000000..21e57d27c17 --- /dev/null +++ b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_tf-slave.opt @@ -0,0 +1 @@ +--read-only=ON --tokudb-rpl-check-readonly=OFF --tokudb-rpl-unique-checks-delay=5000 --tokudb-rpl-unique-checks=OFF diff --git a/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_tf.test b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_tf.test new file mode 100644 index 00000000000..c77e4b49605 --- /dev/null +++ b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_tf.test @@ -0,0 +1,53 @@ +# test replicated write rows log events on a table with a primary key. +# the slave is read only with tokudb unique checks disabled. + +source include/have_tokudb.inc; +let $engine=tokudb; +source include/have_binlog_format_row.inc; +source include/master-slave.inc; + +# initialize +connection master; +disable_warnings; +drop table if exists t; +enable_warnings; + +connection slave; +# show variables like 'read_only'; +# show variables like 'tokudb_rpl_unique_checks%'; + +# insert some rows +connection master; +# select @@binlog_format; +# select @@autocommit; +eval create table t (a bigint not null, primary key(a)) engine=$engine; +# show create table t; +select unix_timestamp() into @tstart; +insert into t values (1); +insert into t values (2),(3); +insert into t values (4); + +sync_slave_with_master; +# source include/sync_slave_sql_with_master.inc; + +connection master; +select unix_timestamp()-@tstart <= 10; + +connection slave; +# insert into t values (5); # test read-only +# show create table t; + +# diff tables +connection master; +--let $diff_tables= master:test.t, slave:test.t +source include/diff_tables.inc; + +# cleanup +connection master; +drop table if exists t; + +sync_slave_with_master; +# source include/sync_slave_sql_with_master.inc; + +source include/rpl_end.inc; + diff --git a/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_tt-slave.opt b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_tt-slave.opt new file mode 100644 index 00000000000..fd77ee0da9c --- /dev/null +++ b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_tt-slave.opt @@ -0,0 +1 @@ +--read-only=ON --tokudb-rpl-check-readonly=ON --tokudb-rpl-unique-checks-delay=5000 --tokudb-rpl-unique-checks=OFF diff --git a/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_tt.test b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_tt.test new file mode 100644 index 00000000000..c77e4b49605 --- /dev/null +++ b/storage/tokudb/mysql-test/rpl/t/rpl_tokudb_read_only_tt.test @@ -0,0 +1,53 @@ +# test replicated write rows log events on a table with a primary key. +# the slave is read only with tokudb unique checks disabled. + +source include/have_tokudb.inc; +let $engine=tokudb; +source include/have_binlog_format_row.inc; +source include/master-slave.inc; + +# initialize +connection master; +disable_warnings; +drop table if exists t; +enable_warnings; + +connection slave; +# show variables like 'read_only'; +# show variables like 'tokudb_rpl_unique_checks%'; + +# insert some rows +connection master; +# select @@binlog_format; +# select @@autocommit; +eval create table t (a bigint not null, primary key(a)) engine=$engine; +# show create table t; +select unix_timestamp() into @tstart; +insert into t values (1); +insert into t values (2),(3); +insert into t values (4); + +sync_slave_with_master; +# source include/sync_slave_sql_with_master.inc; + +connection master; +select unix_timestamp()-@tstart <= 10; + +connection slave; +# insert into t values (5); # test read-only +# show create table t; + +# diff tables +connection master; +--let $diff_tables= master:test.t, slave:test.t +source include/diff_tables.inc; + +# cleanup +connection master; +drop table if exists t; + +sync_slave_with_master; +# source include/sync_slave_sql_with_master.inc; + +source include/rpl_end.inc; + diff --git a/storage/tokudb/mysql-test/tokudb/r/change_column_varchar.result b/storage/tokudb/mysql-test/tokudb/r/change_column_varchar.result index a9cb5e57a36..2e7da5ed5ef 100644 --- a/storage/tokudb/mysql-test/tokudb/r/change_column_varchar.result +++ b/storage/tokudb/mysql-test/tokudb/r/change_column_varchar.result @@ -6,6 +6,7 @@ Table Create Table t CREATE TABLE `t` ( `a` varchar(1) DEFAULT NULL ) ENGINE=TokuDB DEFAULT CHARSET=latin1 +INSERT INTO t VALUES (null); ALTER TABLE t CHANGE COLUMN a a VARCHAR(2); ALTER TABLE t CHANGE COLUMN a a VARCHAR(2); ALTER TABLE t CHANGE COLUMN a a VARCHAR(3); diff --git a/storage/tokudb/mysql-test/tokudb/r/information-schema-global-status.result b/storage/tokudb/mysql-test/tokudb/r/information-schema-global-status.result index 369c14fe4fe..7d0e83260e1 100644 --- a/storage/tokudb/mysql-test/tokudb/r/information-schema-global-status.result +++ b/storage/tokudb/mysql-test/tokudb/r/information-schema-global-status.result @@ -65,6 +65,7 @@ TOKUDB_CHECKPOINT_LONG_BEGIN_COUNT TOKUDB_CHECKPOINT_LONG_BEGIN_TIME TOKUDB_CHECKPOINT_PERIOD TOKUDB_CHECKPOINT_TAKEN +TOKUDB_CURSOR_SKIP_DELETED_LEAF_ENTRY TOKUDB_DB_CLOSES TOKUDB_DB_OPENS TOKUDB_DB_OPEN_CURRENT diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_create_select.test b/storage/tokudb/mysql-test/tokudb/t/bf_create_select.test index 20455da874f..8c457b75f27 100644 --- a/storage/tokudb/mysql-test/tokudb/t/bf_create_select.test +++ b/storage/tokudb/mysql-test/tokudb/t/bf_create_select.test @@ -65,8 +65,8 @@ while ($i < $maxq) { let $time_elapsed_off = `select unix_timestamp() - $s`; -# Check that the time with bulk fetch off is at least twice that whith bulk fetch on -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# Check that the time with bulk fetch off is greater that with bulk fetch on +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_on $time_elapsed_off; } if (!$verdict) { echo index $time_elapsed_on $time_elapsed_off; } @@ -94,8 +94,8 @@ while ($i < $maxq) { let $time_elapsed_off = `select unix_timestamp() - $s`; -# Check that the time with bulk fetch off is at least twice that whith bulk fetch on -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# Check that the time with bulk fetch off is greater that with bulk fetch on +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_on $time_elapsed_off; } if (!$verdict) { echo range $time_elapsed_on $time_elapsed_off; } diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_create_select_hash_part.test b/storage/tokudb/mysql-test/tokudb/t/bf_create_select_hash_part.test index 4df0a138be8..34995b4ba2f 100644 --- a/storage/tokudb/mysql-test/tokudb/t/bf_create_select_hash_part.test +++ b/storage/tokudb/mysql-test/tokudb/t/bf_create_select_hash_part.test @@ -65,8 +65,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 1.5 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +# check that bulk fetch on is greater than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; } @@ -93,8 +93,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 1.5 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 1.5 * $time_elapsed_on`; +# check that bulk fetch on is greater than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; } diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_create_select_range_part.test b/storage/tokudb/mysql-test/tokudb/t/bf_create_select_range_part.test index b66b2c42808..a53249893f4 100644 --- a/storage/tokudb/mysql-test/tokudb/t/bf_create_select_range_part.test +++ b/storage/tokudb/mysql-test/tokudb/t/bf_create_select_range_part.test @@ -72,8 +72,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 2 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# check that bulk fetch on is greater than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; } @@ -100,8 +100,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 2 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# check that bulk fetch on is greater than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; } diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_create_temp_select.test b/storage/tokudb/mysql-test/tokudb/t/bf_create_temp_select.test index 52cb886a410..4f8211a51d9 100644 --- a/storage/tokudb/mysql-test/tokudb/t/bf_create_temp_select.test +++ b/storage/tokudb/mysql-test/tokudb/t/bf_create_temp_select.test @@ -65,8 +65,8 @@ while ($i < $maxq) { let $time_elapsed_off = `select unix_timestamp() - $s`; -# Check that the time with bulk fetch off is at least twice that whith bulk fetch on -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# Check that the time with bulk fetch off is greater that with bulk fetch on +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_on $time_elapsed_off; } if (!$verdict) { echo index $time_elapsed_on $time_elapsed_off; } @@ -94,8 +94,8 @@ while ($i < $maxq) { let $time_elapsed_off = `select unix_timestamp() - $s`; -# Check that the time with bulk fetch off is at least twice that whith bulk fetch on -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# Check that the time with bulk fetch off is greater than with bulk fetch on +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_on $time_elapsed_off; } if (!$verdict) { echo range $time_elapsed_on $time_elapsed_off; } diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_delete.test b/storage/tokudb/mysql-test/tokudb/t/bf_delete.test index f98e87f1ec1..a55d78784cc 100644 --- a/storage/tokudb/mysql-test/tokudb/t/bf_delete.test +++ b/storage/tokudb/mysql-test/tokudb/t/bf_delete.test @@ -1,5 +1,4 @@ -# Verify that index scans for delete statements use bulk fetch and are -# at least twice as fast +# Verify that index scans for delete statements use bulk fetch are faster than when not using bulk fetch source include/have_tokudb.inc; source include/big_test.inc; @@ -62,8 +61,8 @@ while ($i < $maxq) { } let $time_elapsed_bf_off = `select unix_timestamp() - $s`; -# verify that a delete scan with bulk fetch ON is at least 2 times faster than with bulk fetch OFF -let $verdict = `select $time_elapsed_bf_on > 0 && $time_elapsed_bf_off >= 2 * $time_elapsed_bf_on`; +# verify that a delete scan with bulk fetch ON is greater than with bulk fetch OFF +let $verdict = `select $time_elapsed_bf_on > 0 && $time_elapsed_bf_off > $time_elapsed_bf_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_bf_on $time_elapsed_bf_off; } if (!$verdict) { echo range $time_elapsed_bf_on $time_elapsed_bf_off; } diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_insert_select.test b/storage/tokudb/mysql-test/tokudb/t/bf_insert_select.test index 5fcb8fa58b5..8d96c26bc29 100644 --- a/storage/tokudb/mysql-test/tokudb/t/bf_insert_select.test +++ b/storage/tokudb/mysql-test/tokudb/t/bf_insert_select.test @@ -66,8 +66,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 2 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# check that the time with bulk fetch on is greater than with bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; } @@ -92,7 +92,7 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; } diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_insert_select_dup_key.test b/storage/tokudb/mysql-test/tokudb/t/bf_insert_select_dup_key.test index 51c6d66d706..1b015b2c272 100644 --- a/storage/tokudb/mysql-test/tokudb/t/bf_insert_select_dup_key.test +++ b/storage/tokudb/mysql-test/tokudb/t/bf_insert_select_dup_key.test @@ -70,8 +70,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 2 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# check that bulk fetch on is greater than with bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; } @@ -96,8 +96,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 2 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# check that bulk fetch on is greater than bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; } diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_replace_select.test b/storage/tokudb/mysql-test/tokudb/t/bf_replace_select.test index 1ca754454eb..72cda349f80 100644 --- a/storage/tokudb/mysql-test/tokudb/t/bf_replace_select.test +++ b/storage/tokudb/mysql-test/tokudb/t/bf_replace_select.test @@ -66,8 +66,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -# check that bulk fetch on is at least 2 times faster than bulk fetch off -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# check that the time with bulk fetch on is greater than with bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo index $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo index $time_elapsed_off $time_elapsed_on; } @@ -92,7 +92,8 @@ while ($i < $maxq) { } let $time_elapsed_off = `select unix_timestamp() - $s`; -let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off >= 2 * $time_elapsed_on`; +# check that the time with bulk fetch on is greater than with bulk fetch off +let $verdict = `select $time_elapsed_on > 0 && $time_elapsed_off > $time_elapsed_on`; echo $verdict; if ($debug) { echo range $verdict $time_elapsed_off $time_elapsed_on; } if (!$verdict) { echo range $time_elapsed_off $time_elapsed_on; } diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_select_hash_part.test b/storage/tokudb/mysql-test/tokudb/t/bf_select_hash_part.test index 2271a2086be..46986278743 100644 --- a/storage/tokudb/mysql-test/tokudb/t/bf_select_hash_part.test +++ b/storage/tokudb/mysql-test/tokudb/t/bf_select_hash_part.test @@ -65,8 +65,8 @@ let $time_bf_off = `select unix_timestamp() - $s`; if ($debug) { echo index scans took $time_bf_off.; } -# check that the scan time with bulk fetch off is at least 1.5 times as long as with bulk fetch on -let $verdict = `select $time_bf_on > 0 && $time_bf_off >= 1.5 * $time_bf_on`; +# check that the scan time with bulk fetch off is greater than with bulk fetch on +let $verdict = `select $time_bf_on > 0 && $time_bf_off > $time_bf_on`; echo $verdict; if ($debug) { echo index $verdict $time_bf_on $time_bf_off; } if (!$verdict) { echo index $time_bf_on $time_bf_off; } @@ -93,8 +93,8 @@ let $time_bf_off = `select unix_timestamp() - $s`; if ($debug) { echo range scans took $time_bf_off.; } -# check that the scan time with bulk fetch off is at least 1.5 times as long as with bulk fetch on -let $verdict = `select $time_bf_on > 0 && $time_bf_off >= 1.5 * $time_bf_on`; +# check that the scan time with bulk fetch off is greater than with bulk fetch on +let $verdict = `select $time_bf_on > 0 && $time_bf_off > $time_bf_on`; echo $verdict; if ($debug) { echo range $verdict $time_bf_on $time_bf_off; } if (!$verdict) { echo range $time_bf_on $time_bf_off; } diff --git a/storage/tokudb/mysql-test/tokudb/t/bf_select_range_part.test b/storage/tokudb/mysql-test/tokudb/t/bf_select_range_part.test index 9dcb044d4d4..7e608777798 100644 --- a/storage/tokudb/mysql-test/tokudb/t/bf_select_range_part.test +++ b/storage/tokudb/mysql-test/tokudb/t/bf_select_range_part.test @@ -70,8 +70,8 @@ while ($i < $maxq) { } let $time_bf_off = `select unix_timestamp() - $s`; -# check that the scan time with bulk fetch off is at least 1.5 times as long as with bulk fetch on -let $verdict = `select $time_bf_on > 0 && $time_bf_off >= 1.5 * $time_bf_on`; +# check that the scan time with bulk fetch off is greater than with bulk fetch on +let $verdict = `select $time_bf_on > 0 && $time_bf_off > $time_bf_on`; echo $verdict; if ($debug) { echo index $verdict $time_bf_on $time_bf_off; } if (!$verdict) { echo index scan $time_bf_on $time_bf_off; } @@ -94,8 +94,8 @@ while ($i < $maxq) { } let $time_bf_off = `select unix_timestamp() - $s`; -# check that the scan time with bulk fetch off is at least 1.5 times as long as with bulk fetch on -let $verdict = `select $time_bf_on > 0 && $time_bf_off >= 1.5 * $time_bf_on`; +# check that the scan time with bulk fetch off is greater than with bulk fetch on +let $verdict = `select $time_bf_on > 0 && $time_bf_off > $time_bf_on`; echo $verdict; if ($debug) { echo range $verdict $time_bf_on $time_bf_off; } if (!$verdict) { echo range $time_bf_on $time_bf_off; } diff --git a/storage/tokudb/mysql-test/tokudb/t/change_column_varchar.test b/storage/tokudb/mysql-test/tokudb/t/change_column_varchar.test index f2b4e3cbf78..6543952ad29 100644 --- a/storage/tokudb/mysql-test/tokudb/t/change_column_varchar.test +++ b/storage/tokudb/mysql-test/tokudb/t/change_column_varchar.test @@ -9,6 +9,7 @@ SET SESSION TOKUDB_DISABLE_SLOW_ALTER=ON; CREATE TABLE t (a VARCHAR(1)) ENGINE=TokuDB; SHOW CREATE TABLE t; +INSERT INTO t VALUES (null); # 1->1 let $i=1 diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db762.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db762.result new file mode 100644 index 00000000000..159957dba3e --- /dev/null +++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db762.result @@ -0,0 +1,7 @@ +drop table if exists t1,t2; +create table t1 (x int) engine=innodb; +lock table t1 read; +create temporary table t2 (x int) engine=tokudb; +insert into t2 values (1); +unlock tables; +drop table t1, t2; diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db766.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db766.result new file mode 100644 index 00000000000..bb02229046a --- /dev/null +++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db766.result @@ -0,0 +1,7 @@ +set default_storage_engine=TokuDB; +drop table if exists t1; +CREATE TABLE t1(c1 INT,c2 CHAR)PARTITION BY KEY(c1) PARTITIONS 5; +insert INTO t1 values(1,1),(2,1),(2,2),(2,3); +ALTER TABLE t1 ADD UNIQUE INDEX i1(c1); +ERROR 23000: Duplicate entry '2' for key 'i1' +drop table t1; diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db768.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db768.result new file mode 100644 index 00000000000..f302114b45c --- /dev/null +++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db768.result @@ -0,0 +1,10 @@ +set default_storage_engine='tokudb'; +drop table if exists t; +create table t (id int primary key); +set autocommit=OFF; +lock tables t write; +optimize table t; +Table Op Msg_type Msg_text +test.t optimize status OK +unlock tables; +drop table t; diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db771.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db771.result new file mode 100644 index 00000000000..3fc012a732f --- /dev/null +++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db771.result @@ -0,0 +1,11 @@ +set default_storage_engine=tokudb; +drop table if exists t1; +CREATE TABLE t1 (a int key, b varchar(32), c varchar(32)); +REPLACE t1 SET a = 4; +ALTER TABLE t1 CHANGE COLUMN c c VARCHAR(500); +update t1 set b='hi'; +update t1 set c='there'; +select * from t1; +a b c +4 hi there +drop table t1; diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db788-optimize-index-name.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db788-optimize-index-name.result new file mode 100644 index 00000000000..b634466c923 --- /dev/null +++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db788-optimize-index-name.result @@ -0,0 +1,16 @@ +set default_storage_engine='tokudb'; +drop table if exists t; +create table t (a int, b int, c int, primary key(a), key(b), key(c)); +set tokudb_optimize_index_name='primary'; +optimize table t; +Table Op Msg_type Msg_text +test.t optimize status OK +set tokudb_optimize_index_name='b'; +optimize table t; +Table Op Msg_type Msg_text +test.t optimize status OK +set tokudb_optimize_index_name='c'; +optimize table t; +Table Op Msg_type Msg_text +test.t optimize status OK +drop table t; diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/db801.result b/storage/tokudb/mysql-test/tokudb_bugs/r/db801.result new file mode 100644 index 00000000000..800db69ba39 --- /dev/null +++ b/storage/tokudb/mysql-test/tokudb_bugs/r/db801.result @@ -0,0 +1,18 @@ +set default_storage_engine=tokudb; +drop table if exists t; +create table t (id int not null primary key, c int not null) engine=tokudb; +insert into t values (1,0); +begin; +update t set c=10 where id=1; +update t set c=100; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +rollback; +drop table t; +create table t (id int not null primary key, c int not null) engine=tokudb partition by hash(id) partitions 1; +insert into t values (1,0); +begin; +update t set c=10 where id=1; +update t set c=100; +ERROR HY000: Lock wait timeout exceeded; try restarting transaction +rollback; +drop table t; diff --git a/storage/tokudb/mysql-test/tokudb_bugs/r/memcache_dirty.result b/storage/tokudb/mysql-test/tokudb_bugs/r/memcache_dirty.result deleted file mode 100644 index 2ca26cd5c56..00000000000 --- a/storage/tokudb/mysql-test/tokudb_bugs/r/memcache_dirty.result +++ /dev/null @@ -1,14 +0,0 @@ -SET DEFAULT_STORAGE_ENGINE = 'tokudb'; -DROP TABLE IF EXISTS t1; -create table t1 (i int, j int, primary key (i))engine=TokuDB; -insert into t1 values (0,0) MEMCACHE_DIRTY 'a'; -insert into t1 values (1,0) MEMCACHE_DIRTY 'b', 'c'; -update t1 set j=j+1 where i=0 MEMCACHE_DIRTY 'a'; -update t1 set j=j+1 where i=1 MEMCACHE_DIRTY 'b', 'c'; -insert into t1 values (0,0) on duplicate key update j=j+1 MEMCACHE_DIRTY 'a'; -insert into t1 values (2,0) on duplicate key update j=j+1 MEMCACHE_DIRTY 'a', 'b'; -replace into t1 values (0,3) MEMCACHE_DIRTY 'a'; -replace into t1 values (3,3) MEMCACHE_DIRTY 'a', 'b'; -delete from t1 where i=0 MEMCACHE_DIRTY 'a'; -delete from t1 where i=1 MEMCACHE_DIRTY 'b', 'c'; -DROP TABLE t1; diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/5585-master.opt b/storage/tokudb/mysql-test/tokudb_bugs/t/5585-master.opt new file mode 100644 index 00000000000..017432e797d --- /dev/null +++ b/storage/tokudb/mysql-test/tokudb_bugs/t/5585-master.opt @@ -0,0 +1 @@ +--tokudb-cache-size=1000000000 --innodb-buffer-pool-size=1000000000 diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db762.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db762.test new file mode 100644 index 00000000000..4428e9df8ec --- /dev/null +++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db762.test @@ -0,0 +1,13 @@ +# test for DB-762 and DB-767 +source include/have_tokudb.inc; +source include/have_innodb.inc; +disable_warnings; +drop table if exists t1,t2; +enable_warnings; +create table t1 (x int) engine=innodb; +lock table t1 read; +create temporary table t2 (x int) engine=tokudb; +insert into t2 values (1); +unlock tables; +drop table t1, t2; + diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db766.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db766.test new file mode 100644 index 00000000000..e9d17d2c47a --- /dev/null +++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db766.test @@ -0,0 +1,12 @@ +# reproducer for DB-766 +source include/have_tokudb.inc; +source include/have_partition.inc; +set default_storage_engine=TokuDB; +disable_warnings; +drop table if exists t1; +enable_warnings; +CREATE TABLE t1(c1 INT,c2 CHAR)PARTITION BY KEY(c1) PARTITIONS 5; +insert INTO t1 values(1,1),(2,1),(2,2),(2,3); +--error ER_DUP_ENTRY +ALTER TABLE t1 ADD UNIQUE INDEX i1(c1); +drop table t1; diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db768.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db768.test new file mode 100644 index 00000000000..be2155f5c18 --- /dev/null +++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db768.test @@ -0,0 +1,12 @@ +# test case for DB-768 +source include/have_tokudb.inc; +set default_storage_engine='tokudb'; +disable_warnings; +drop table if exists t; +enable_warnings; +create table t (id int primary key); +set autocommit=OFF; +lock tables t write; +optimize table t; +unlock tables; +drop table t; diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db771.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db771.test new file mode 100644 index 00000000000..039ad7471c1 --- /dev/null +++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db771.test @@ -0,0 +1,13 @@ +# test case for DB-771 +source include/have_tokudb.inc; +set default_storage_engine=tokudb; +disable_warnings; +drop table if exists t1; +enable_warnings; +CREATE TABLE t1 (a int key, b varchar(32), c varchar(32)); +REPLACE t1 SET a = 4; +ALTER TABLE t1 CHANGE COLUMN c c VARCHAR(500); +update t1 set b='hi'; +update t1 set c='there'; +select * from t1; +drop table t1; diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db788-optimize-index-name.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db788-optimize-index-name.test new file mode 100644 index 00000000000..644f00a5862 --- /dev/null +++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db788-optimize-index-name.test @@ -0,0 +1,21 @@ +# test tokudb_optimize_index_name session variable +set default_storage_engine='tokudb'; +source include/have_tokudb.inc; +disable_warnings; +drop table if exists t; +enable_warnings; + +create table t (a int, b int, c int, primary key(a), key(b), key(c)); +# optimize primary key +set tokudb_optimize_index_name='primary'; +optimize table t; + +# optimize key b +set tokudb_optimize_index_name='b'; +optimize table t; + +# optimize key c +set tokudb_optimize_index_name='c'; +optimize table t; + +drop table t; diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/db801.test b/storage/tokudb/mysql-test/tokudb_bugs/t/db801.test new file mode 100644 index 00000000000..8a8fcea1496 --- /dev/null +++ b/storage/tokudb/mysql-test/tokudb_bugs/t/db801.test @@ -0,0 +1,50 @@ +# test for the DB-801 bug on mysql-5.5.41 +source include/have_tokudb.inc; +source include/have_partition.inc; +set default_storage_engine=tokudb; + +disable_warnings; +drop table if exists t; +enable_warnings; + +# run the test on a tokudb table +create table t (id int not null primary key, c int not null) engine=tokudb; + +insert into t values (1,0); + +connect(conn1,localhost,root,,); +connection default; +begin; +update t set c=10 where id=1; + +connection conn1; +--error ER_LOCK_WAIT_TIMEOUT +update t set c=100; + +connection default; +rollback; +disconnect conn1; + +drop table t; + +# run the test on a partitioned tokudb table +create table t (id int not null primary key, c int not null) engine=tokudb partition by hash(id) partitions 1; + +insert into t values (1,0); + +connect(conn1,localhost,root,,); +connection default; +begin; +update t set c=10 where id=1; + +connection conn1; +--error ER_LOCK_WAIT_TIMEOUT +update t set c=100; + +connection default; +rollback; +disconnect conn1; + +drop table t; + + diff --git a/storage/tokudb/mysql-test/tokudb_bugs/t/memcache_dirty.test b/storage/tokudb/mysql-test/tokudb_bugs/t/memcache_dirty.test deleted file mode 100644 index e66c4cf0b6f..00000000000 --- a/storage/tokudb/mysql-test/tokudb_bugs/t/memcache_dirty.test +++ /dev/null @@ -1,25 +0,0 @@ ---source include/have_tokudb.inc -# -# Record inconsistency. -# -# -SET DEFAULT_STORAGE_ENGINE = 'tokudb'; - ---disable_warnings -DROP TABLE IF EXISTS t1; ---enable_warnings -create table t1 (i int, j int, primary key (i))engine=TokuDB; -insert into t1 values (0,0) MEMCACHE_DIRTY 'a'; insert into t1 values (1,0) MEMCACHE_DIRTY 'b', 'c'; - -update t1 set j=j+1 where i=0 MEMCACHE_DIRTY 'a'; update t1 set j=j+1 where i=1 MEMCACHE_DIRTY 'b', 'c'; - -insert into t1 values (0,0) on duplicate key update j=j+1 MEMCACHE_DIRTY 'a'; insert into t1 values (2,0) on duplicate key update j=j+1 MEMCACHE_DIRTY 'a', 'b'; - -replace into t1 values (0,3) MEMCACHE_DIRTY 'a'; replace into t1 values (3,3) MEMCACHE_DIRTY 'a', 'b'; - -delete from t1 where i=0 MEMCACHE_DIRTY 'a'; delete from t1 where i=1 MEMCACHE_DIRTY 'b', 'c'; - - -# Final cleanup. -DROP TABLE t1; - diff --git a/storage/tokudb/scripts/common.sh b/storage/tokudb/scripts/common.sh index fc676ceeceb..fe39b9feca7 100644 --- a/storage/tokudb/scripts/common.sh +++ b/storage/tokudb/scripts/common.sh @@ -131,11 +131,20 @@ function parse_mysqlbuild() { tokudb_version=${BASH_REMATCH[6]} target_system=${BASH_REMATCH[7]} target_arch=${BASH_REMATCH[8]} + # verify targets if [ $target_system != $system ] ; then exitcode=1; fi if [ $target_arch != $arch ] ; then exitcode=1; fi + # split the version string into major.minor.patch + if [[ $mysql_version =~ ^([0-9]+)\.([0-9]+)\.([0-9]+.*) ]] ; then + mysql_version_major=${BASH_REMATCH[1]} + mysql_version_minor=${BASH_REMATCH[2]} + mysql_version_patch=${BASH_REMATCH[3]} + fi + local temp_tokudb_version=$tokudb_version + # decode enterprise if [[ $temp_tokudb_version =~ (.*)-e$ ]] ; then build_type=enterprise @@ -143,6 +152,7 @@ function parse_mysqlbuild() { else build_type=community fi + # decode debug if [[ $temp_tokudb_version =~ (.*)-debug$ ]] ; then build_debug=1 @@ -151,8 +161,9 @@ function parse_mysqlbuild() { else build_debug=0 fi + # set tag or HEAD - if [[ $temp_tokudb_version =~ ^([0-9]+)\\.([0-9]+)\\.([0-9]+) ]] ; then + if [[ $temp_tokudb_version =~ ^([0-9]+)\.([0-9]+)\.([0-9]+) ]] ; then git_tag=tokudb-$temp_tokudb_version else git_tag=HEAD @@ -160,6 +171,8 @@ function parse_mysqlbuild() { if [ -z $mysql_tree ] ; then mysql_tree=$mysql_distro-$mysql_version; fi if [ -z $jemalloc_tree ] ; then jemalloc_tree=$jemalloc_version; fi fi + + # set repository mysql_repo=$mysql_distro if [[ $mysql_version =~ ^([0-9]+\.[0-9]+) ]] ; then mysql_repo=$mysql_distro-${BASH_REMATCH[1]}; else exitcode=1; fi else @@ -174,6 +187,15 @@ function parse_mysql() { if [[ $mysql =~ ^(mysql|mariadb)-(.*)$ ]] ; then mysql_distro=${BASH_REMATCH[1]} mysql_version=${BASH_REMATCH[2]} + + # split the version string into major.minor.patch + if [[ $mysql_version =~ ^([0-9]+)\.([0-9]+)\.([0-9]+.*) ]] ; then + mysql_version_major=${BASH_REMATCH[1]} + mysql_version_minor=${BASH_REMATCH[2]} + mysql_version_patch=${BASH_REMATCH[3]} + fi + + # set repository mysql_repo=$mysql_distro if [[ $mysql_version =~ ^([0-9]+\.[0-9]+) ]] ; then mysql_repo=$mysql_distro-${BASH_REMATCH[1]}; else exitcode=1; fi exitcode=0 diff --git a/storage/tokudb/scripts/make.mysql.bash b/storage/tokudb/scripts/make.mysql.bash index 5654c1c7926..a614424d9a0 100755 --- a/storage/tokudb/scripts/make.mysql.bash +++ b/storage/tokudb/scripts/make.mysql.bash @@ -103,10 +103,22 @@ fi cd $mysql_distro-$mysql_version if [ $? != 0 ] ; then exit 1; fi +# extract mysql version patch number only +if [[ $mysql_version_patch =~ ^([0-9]+) ]] ; then p=${BASH_REMATCH[1]}; else p=$mysql_version_patch; fi + # install the backup source -if [ ! -d toku_backup ] ; then +tokudb_backup= +if [ $mysql_version_major -eq 5 -a $mysql_version_minor -eq 5 -a $p -le 40 ] ; then + tokudb_backup=patch github_download Tokutek/backup-$build_type $(git_tree $git_tag $backup_tree) backup-$build_type cp -r backup-$build_type/backup toku_backup +elif [ $build_type = enterprise ] ; then + tokudb_backup=plugin + github_download Tokutek/tokudb-backup-plugin $(git_tree $git_tag $backup_tree) tokudb-backup-plugin + mv tokudb-backup-plugin plugin + github_download Tokutek/backup-enterprise $(git_tree $git_tag $backup_tree) backup-enterprise + mv backup-enterprise/backup plugin/tokudb-backup-plugin + rm -rf backup-enterprise fi if [ ! -d tokudb-engine ] ; then @@ -153,6 +165,7 @@ function generate_cmake_cmd () { echo -n CC=$cc CXX=$cxx cmake \ -D BUILD_CONFIG=mysql_release \ + -D MYSQL_MAINTAINER_MODE=OFF \ -D CMAKE_BUILD_TYPE=$cmake_build_type \ -D CMAKE_TOKUDB_REVISION=$ft_revision \ -D TOKUDB_VERSION=tokudb-${tokudb_version} \ diff --git a/storage/tokudb/scripts/make.mysql.debug.env.bash b/storage/tokudb/scripts/make.mysql.debug.env.bash index b7c270cfbd7..08ea19827bc 100755 --- a/storage/tokudb/scripts/make.mysql.debug.env.bash +++ b/storage/tokudb/scripts/make.mysql.debug.env.bash @@ -55,7 +55,7 @@ function github_clone() { git_tag= mysql=mysql-5.5 -mysql_tree=mysql-5.5.35 +mysql_tree=mysql-5.5.41 jemalloc=jemalloc jemalloc_tree=3.6.0 tokudbengine=tokudb-engine @@ -148,13 +148,15 @@ fi pushd $build_dir if [ $? != 0 ] ; then exit 1; fi extra_cmake_options="-DCMAKE_LINK_DEPENDS_NO_SHARED=ON" +extra_cmake_options+=" -DBUILD_TESTING=OFF" +extra_cmake_options+=" -DMYSQL_MAINTAINER_MODE=OFF" if (( $cmake_valgrind )) ; then extra_cmake_options+=" -DUSE_VALGRIND=ON" fi if (( $cmake_debug_paranoid )) ; then extra_cmake_options+=" -DTOKU_DEBUG_PARANOID=ON" fi -CC=$cc CXX=$cxx cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$install_dir -DBUILD_TESTING=OFF $extra_cmake_options ../$mysql_tree +CC=$cc CXX=$cxx cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=$install_dir $extra_cmake_options ../$mysql_tree if [ $? != 0 ] ; then exit 1; fi make -j4 install if [ $? != 0 ] ; then exit 1; fi diff --git a/storage/tokudb/tokudb_update_fun.cc b/storage/tokudb/tokudb_update_fun.cc index 3ab7510121a..9754dc989a2 100644 --- a/storage/tokudb/tokudb_update_fun.cc +++ b/storage/tokudb/tokudb_update_fun.cc @@ -851,7 +851,7 @@ static int tokudb_expand_variable_offsets( DBT new_val; memset(&new_val, 0, sizeof new_val); if (old_val != NULL) { - assert(offset_start + number_of_offsets < old_val->size); + assert(offset_start + number_of_offsets <= old_val->size); // compute the new val from the old val uchar *old_val_ptr = (uchar *)old_val->data; diff --git a/storage/xtradb/CMakeLists.txt b/storage/xtradb/CMakeLists.txt index 50f05159d10..1c3bf769ef4 100644 --- a/storage/xtradb/CMakeLists.txt +++ b/storage/xtradb/CMakeLists.txt @@ -330,6 +330,14 @@ SET(INNOBASE_SOURCES btr/btr0btr.c btr/btr0cur.c btr/btr0pcur.c btr/btr0sea.c ut/ut0byte.c ut/ut0dbg.c ut/ut0list.c ut/ut0mem.c ut/ut0rbt.c ut/ut0rnd.c ut/ut0ut.c ut/ut0vec.c ut/ut0wqueue.c ut/ut0bh.c) +# These files have unused result errors, so we skip Werror +CHECK_C_COMPILER_FLAG("-Werror" HAVE_WERROR) +IF(HAVE_WERROR) + INCLUDE(${MYSQL_CMAKE_SCRIPT_DIR}/compile_flags.cmake) + ADD_COMPILE_FLAGS(page/page0zip.c COMPILE_FLAGS "-Wno-error") + ADD_COMPILE_FLAGS(ut/ut0ut.c COMPILE_FLAGS "-Wno-error") +ENDIF() + IF(WITH_INNODB) # Legacy option SET(WITH_INNOBASE_STORAGE_ENGINE TRUE) diff --git a/storage/xtradb/dict/dict0dict.c b/storage/xtradb/dict/dict0dict.c index b7ffbabc22e..0addc419715 100644 --- a/storage/xtradb/dict/dict0dict.c +++ b/storage/xtradb/dict/dict0dict.c @@ -42,6 +42,12 @@ UNIV_INTERN dict_index_t* dict_ind_compact; UNIV_INTERN uint ibuf_debug; #endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */ +/********************************************************************** +Issue a warning that the row is too big. */ +void +ib_warn_row_too_big(const dict_table_t* table); + + #ifndef UNIV_HOTBACKUP #include "buf0buf.h" #include "data0type.h" @@ -1892,11 +1898,18 @@ dict_index_add_to_cache( new_index->n_fields = new_index->n_def; - if (strict && dict_index_too_big_for_tree(table, new_index)) { + if (dict_index_too_big_for_tree(table, new_index)) { + + if (strict) { too_big: - dict_mem_index_free(new_index); - dict_mem_index_free(index); - return(DB_TOO_BIG_RECORD); + dict_mem_index_free(new_index); + dict_mem_index_free(index); + return(DB_TOO_BIG_RECORD); + } else { + + ib_warn_row_too_big(table); + + } } if (UNIV_UNLIKELY(index->type & DICT_UNIVERSAL)) { @@ -2650,8 +2663,14 @@ dict_foreign_remove_from_cache( foreign); rbt = foreign->referenced_table->referenced_rbt; - if (rbt != NULL) { - rbt_delete(rbt, foreign->id); + if (rbt != NULL && foreign->id != NULL) { + const ib_rbt_node_t* node + = rbt_lookup(rbt, foreign->id); + dict_foreign_t* val = *(dict_foreign_t**) node->value; + + if (val == foreign) { + rbt_delete(rbt, foreign->id); + } } } @@ -2663,8 +2682,14 @@ dict_foreign_remove_from_cache( foreign); rbt = foreign->foreign_table->foreign_rbt; - if (rbt != NULL) { - rbt_delete(rbt, foreign->id); + if (rbt != NULL && foreign->id != NULL) { + const ib_rbt_node_t* node + = rbt_lookup(rbt, foreign->id); + dict_foreign_t* val = *(dict_foreign_t**) node->value; + + if (val == foreign) { + rbt_delete(rbt, foreign->id); + } } } @@ -6050,11 +6075,11 @@ dict_set_corrupted( dict_index_copy_types(tuple, sys_index, 2); - btr_cur_search_to_nth_level(sys_index, 0, tuple, PAGE_CUR_GE, + btr_cur_search_to_nth_level(sys_index, 0, tuple, PAGE_CUR_LE, BTR_MODIFY_LEAF, &cursor, 0, __FILE__, __LINE__, &mtr); - if (cursor.up_match == dtuple_get_n_fields(tuple)) { + if (cursor.low_match == dtuple_get_n_fields(tuple)) { /* UPDATE SYS_INDEXES SET TYPE=index->type WHERE TABLE_ID=index->table->id AND INDEX_ID=index->id */ ulint len; diff --git a/storage/xtradb/handler/ha_innodb.cc b/storage/xtradb/handler/ha_innodb.cc index 9dcabeccce8..fa1686b5eb9 100644 --- a/storage/xtradb/handler/ha_innodb.cc +++ b/storage/xtradb/handler/ha_innodb.cc @@ -11506,6 +11506,7 @@ ha_innobase::start_stmt( thr_lock_type lock_type) { trx_t* trx; + DBUG_ENTER("ha_innobase::start_stmt"); update_thd(thd); @@ -11528,6 +11529,28 @@ ha_innobase::start_stmt( prebuilt->hint_need_to_fetch_extra_cols = 0; reset_template(); + if (dict_table_is_temporary(prebuilt->table) + && prebuilt->mysql_has_locked + && prebuilt->select_lock_type == LOCK_NONE) { + ulint error; + + switch (thd_sql_command(thd)) { + case SQLCOM_INSERT: + case SQLCOM_UPDATE: + case SQLCOM_DELETE: + init_table_handle_for_HANDLER(); + prebuilt->select_lock_type = LOCK_X; + error = row_lock_table_for_mysql(prebuilt, NULL, 1); + + if (error != DB_SUCCESS) { + error = convert_error_code_to_mysql( + (int) error, 0, thd); + DBUG_RETURN((int) error); + } + break; + } + } + if (!prebuilt->mysql_has_locked) { /* This handle is for a temporary table created inside this same LOCK TABLES; since MySQL does NOT call external_lock @@ -11560,7 +11583,7 @@ ha_innobase::start_stmt( innobase_register_trx(ht, thd, trx); - return(0); + DBUG_RETURN(0); } /******************************************************************//** @@ -15365,6 +15388,37 @@ innobase_convert_to_filename_charset( } +/********************************************************************** +Issue a warning that the row is too big. */ +extern "C" +void +ib_warn_row_too_big(const dict_table_t* table) +{ + /* If prefix is true then a 768-byte prefix is stored + locally for BLOB fields. Refer to dict_table_get_format() */ + const bool prefix = ((table->flags & DICT_TF_FORMAT_MASK) + >> DICT_TF_FORMAT_SHIFT) < UNIV_FORMAT_B; + + const ulint free_space = page_get_free_space_of_empty( + table->flags & DICT_TF_COMPACT) / 2; + + THD* thd = current_thd; + + if (thd == NULL) { + return; + } + + push_warning_printf( + thd, MYSQL_ERROR::WARN_LEVEL_WARN, HA_ERR_TO_BIG_ROW, + "Row size too large (> %lu). Changing some columns to TEXT" + " or BLOB %smay help. In current row format, BLOB prefix of" + " %d bytes is stored inline.", free_space + , prefix ? "or using ROW_FORMAT=DYNAMIC or" + " ROW_FORMAT=COMPRESSED ": "" + , prefix ? DICT_MAX_FIXED_COL_LEN : 0); +} + + /**************************************************************************** * DS-MRR implementation ***************************************************************************/ diff --git a/storage/xtradb/ibuf/ibuf0ibuf.c b/storage/xtradb/ibuf/ibuf0ibuf.c index e04b6ac3ba6..7811b6ba19e 100644 --- a/storage/xtradb/ibuf/ibuf0ibuf.c +++ b/storage/xtradb/ibuf/ibuf0ibuf.c @@ -2775,6 +2775,12 @@ ibuf_contract_for_n_pages( ulint n_bytes; ulint n_pag2; +#if defined UNIV_DEBUG || defined UNIV_IBUF_DEBUG + if (ibuf_debug) { + return(0); + } +#endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */ + while (sum_pages < n_pages) { n_bytes = ibuf_contract_ext(&n_pag2, sync); diff --git a/storage/xtradb/include/btr0cur.ic b/storage/xtradb/include/btr0cur.ic index 5fc4651ca13..5d122101fab 100644 --- a/storage/xtradb/include/btr0cur.ic +++ b/storage/xtradb/include/btr0cur.ic @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 1994, 2012, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 1994, 2014, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -28,7 +28,7 @@ Created 10/16/1994 Heikki Tuuri #ifdef UNIV_DEBUG # define LIMIT_OPTIMISTIC_INSERT_DEBUG(NREC, CODE)\ -if (btr_cur_limit_optimistic_insert_debug\ +if (btr_cur_limit_optimistic_insert_debug > 1\ && (NREC) >= (ulint)btr_cur_limit_optimistic_insert_debug) {\ CODE;\ } diff --git a/storage/xtradb/include/dict0dict.h b/storage/xtradb/include/dict0dict.h index b03d25818c9..3d05f40eb08 100644 --- a/storage/xtradb/include/dict0dict.h +++ b/storage/xtradb/include/dict0dict.h @@ -1139,7 +1139,7 @@ recalculated */ #define DICT_TABLE_CHANGED_TOO_MUCH(t) \ ((ib_int64_t) (t)->stat_modified_counter > (srv_stats_modified_counter ? \ - ut_min(srv_stats_modified_counter, (16 + (t)->stat_n_rows / 16)) : \ + (ib_int64_t) ut_min(srv_stats_modified_counter, (16 + (t)->stat_n_rows / 16)) : \ 16 + (t)->stat_n_rows / 16)) /*********************************************************************//** @@ -1399,6 +1399,14 @@ dict_table_init_referenced_rbt( /*===========================*/ dict_table_t* table); /*!< in: the table object whose table->referenced_rbt will be initialized */ +/********************************************************************//** +Check if it is a temporary table. +@return true if temporary table flag is set. */ +UNIV_INLINE +ibool +dict_table_is_temporary( +/*====================*/ + const dict_table_t* table); /*!< in: table to check */ #ifndef UNIV_NONINL #include "dict0dict.ic" diff --git a/storage/xtradb/include/dict0dict.ic b/storage/xtradb/include/dict0dict.ic index 00ae3d0a718..6836928ff49 100644 --- a/storage/xtradb/include/dict0dict.ic +++ b/storage/xtradb/include/dict0dict.ic @@ -1017,3 +1017,15 @@ dict_table_init_referenced_rbt( ut_a(table->referenced_rbt != NULL); return(table->referenced_rbt); } + +/********************************************************************//** +Check if it is a temporary table. +@return true if temporary table flag is set. */ +UNIV_INLINE +ibool +dict_table_is_temporary( +/*====================*/ + const dict_table_t* table) /*!< in: table to check */ +{ + return(table->flags & (DICT_TF2_TEMPORARY << DICT_TF2_SHIFT)); +} diff --git a/storage/xtradb/include/os0stacktrace.h b/storage/xtradb/include/os0stacktrace.h index 58e9a528593..e79347c6189 100644 --- a/storage/xtradb/include/os0stacktrace.h +++ b/storage/xtradb/include/os0stacktrace.h @@ -20,7 +20,7 @@ this program; if not, write to the Free Software Foundation, Inc., #ifndef os0stacktrace_h #define os0stacktrace_h -#ifdef __linux__ +#if defined (__linux__) && HAVE_BACKTRACE && HAVE_BACKTRACE_SYMBOLS #if HAVE_EXECINFO_H #include <execinfo.h> #endif @@ -40,5 +40,5 @@ os_stacktrace_print( siginfo_t* info, /*!< in: signal information */ void* ucontext);/*!< in: signal context */ -#endif /* __linux__ */ +#endif /* defined (__linux__) && HAVE_BACKTRACE && HAVE_BACKTRACE_SYMBOLS */ #endif /* os0stacktrace.h */ diff --git a/storage/xtradb/include/univ.i b/storage/xtradb/include/univ.i index af9560dbc13..1154e2e2f42 100644 --- a/storage/xtradb/include/univ.i +++ b/storage/xtradb/include/univ.i @@ -64,10 +64,10 @@ component, i.e. we show M.N.P as M.N */ (INNODB_VERSION_MAJOR << 8 | INNODB_VERSION_MINOR) #ifndef PERCONA_INNODB_VERSION -#define PERCONA_INNODB_VERSION 36.1 +#define PERCONA_INNODB_VERSION 37.0 #endif -#define INNODB_VERSION_STR "5.5.40-MariaDB-" IB_TO_STR(PERCONA_INNODB_VERSION) +#define INNODB_VERSION_STR "5.5.41-MariaDB-" IB_TO_STR(PERCONA_INNODB_VERSION) #define REFMAN "http://dev.mysql.com/doc/refman/" \ IB_TO_STR(MYSQL_MAJOR_VERSION) "." \ @@ -122,6 +122,10 @@ if we are compiling on Windows. */ # include <sched.h> # endif +# ifdef HAVE_MALLOC_H +# include <malloc.h> +# endif + /* We only try to do explicit inlining of functions with gcc and Sun Studio */ diff --git a/storage/xtradb/log/log0log.c b/storage/xtradb/log/log0log.c index ca866ab3036..bc208f42e50 100644 --- a/storage/xtradb/log/log0log.c +++ b/storage/xtradb/log/log0log.c @@ -260,7 +260,7 @@ log_buffer_extend( { ulint move_start; ulint move_end; - byte *tmp_buf=alloca(OS_FILE_LOG_BLOCK_SIZE); + byte* tmp_buf = alloca(OS_FILE_LOG_BLOCK_SIZE); mutex_enter(&(log_sys->mutex)); diff --git a/storage/xtradb/log/log0online.c b/storage/xtradb/log/log0online.c index 58f86d1581a..acb3bd58714 100644 --- a/storage/xtradb/log/log0online.c +++ b/storage/xtradb/log/log0online.c @@ -1817,7 +1817,7 @@ log_online_purge_changed_page_bitmaps( return TRUE; } - if (srv_track_changed_pages && lsn >= log_bmp_sys->end_lsn) { + if (srv_track_changed_pages && lsn > log_bmp_sys->end_lsn) { /* If we have to delete the current output file, close it first. */ os_file_close(log_bmp_sys->out.file); diff --git a/storage/xtradb/log/log0recv.c b/storage/xtradb/log/log0recv.c index 61239dfb25d..cae36421c52 100644 --- a/storage/xtradb/log/log0recv.c +++ b/storage/xtradb/log/log0recv.c @@ -2996,10 +2996,10 @@ recv_recovery_from_checkpoint_start_func( #endif /* UNIV_LOG_ARCHIVE */ byte* buf; byte* log_hdr_buf; - byte *log_hdr_buf_base; + byte* log_hdr_buf_base = alloca(LOG_FILE_HDR_SIZE + + OS_FILE_LOG_BLOCK_SIZE); ulint err; - log_hdr_buf_base= alloca(LOG_FILE_HDR_SIZE + OS_FILE_LOG_BLOCK_SIZE); log_hdr_buf = ut_align(log_hdr_buf_base, OS_FILE_LOG_BLOCK_SIZE); #ifdef UNIV_LOG_ARCHIVE diff --git a/storage/xtradb/rem/rem0rec.c b/storage/xtradb/rem/rem0rec.c index cb4e8ca1cb1..3494d4e4773 100644 --- a/storage/xtradb/rem/rem0rec.c +++ b/storage/xtradb/rem/rem0rec.c @@ -833,7 +833,8 @@ rec_get_converted_size_comp_prefix_low( } ut_ad(len <= col->len || col->mtype == DATA_BLOB - || (col->len == 0 && col->mtype == DATA_VARCHAR)); + || col->mtype == DATA_VARMYSQL + || (col->len == 0 && col->mtype == DATA_VARCHAR)); fixed_len = field->fixed_len; if (temp && fixed_len @@ -1260,7 +1261,8 @@ rec_convert_dtuple_to_rec_comp( *lens-- = (byte) len; } else { ut_ad(len <= dtype_get_len(type) - || dtype_get_mtype(type) == DATA_BLOB); + || dtype_get_mtype(type) == DATA_BLOB + || dtype_get_mtype(type) == DATA_VARMYSQL); if (len < 128 || (dtype_get_len(type) < 256 && dtype_get_mtype(type) != DATA_BLOB)) { diff --git a/storage/xtradb/row/row0mysql.c b/storage/xtradb/row/row0mysql.c index 7028c51babb..9496df8774a 100644 --- a/storage/xtradb/row/row0mysql.c +++ b/storage/xtradb/row/row0mysql.c @@ -1,6 +1,6 @@ /***************************************************************************** -Copyright (c) 2000, 2013, Oracle and/or its affiliates. All Rights Reserved. +Copyright (c) 2000, 2014, Oracle and/or its affiliates. All Rights Reserved. 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 @@ -3227,6 +3227,9 @@ row_drop_table_for_mysql( ulint namelen; ibool locked_dictionary = FALSE; pars_info_t* info = NULL; + DBUG_ENTER("row_drop_table_for_mysql"); + + DBUG_PRINT("row_drop_table_for_mysql", ("table: %s", name)); ut_a(name != NULL); @@ -3237,7 +3240,7 @@ row_drop_table_for_mysql( "InnoDB: Shut down mysqld and edit my.cnf so that newraw" " is replaced with raw.\n", stderr); - return(DB_ERROR); + DBUG_RETURN(DB_ERROR); } trx->op_info = "dropping table"; @@ -3644,7 +3647,7 @@ funct_exit: srv_wake_master_thread(); - return((int) err); + DBUG_RETURN((int) err); } /*********************************************************************//** diff --git a/storage/xtradb/srv/srv0start.c b/storage/xtradb/srv/srv0start.c index 6045130b680..5bf2be6e33e 100644 --- a/storage/xtradb/srv/srv0start.c +++ b/storage/xtradb/srv/srv0start.c @@ -1277,7 +1277,7 @@ innobase_start_or_create_for_mysql(void) stacktrace feature. */ if (srv_use_stacktrace) { -#ifdef __linux__ +#if defined (__linux__) && HAVE_BACKTRACE && HAVE_BACKTRACE_SYMBOLS struct sigaction sigact; sigact.sa_sigaction = os_stacktrace_print; @@ -1290,7 +1290,7 @@ innobase_start_or_create_for_mysql(void) srv_use_stacktrace = FALSE; } -#endif /* __linux__ */ +#endif /* defined (__linux__) && HAVE_BACKTRACE && HAVE_BACKTRACE_SYMBOLS */ } diff --git a/support-files/build-tags b/support-files/build-tags index f42fae218d2..c37485e32f9 100755 --- a/support-files/build-tags +++ b/support-files/build-tags @@ -1,17 +1,12 @@ #! /bin/sh rm -f TAGS -filter='\.cc$\|\.c$\|\.h$\|\.yy\|\.ic\|.ih$' +filter='\.cpp$\|\.cc$\|\.c$\|\.h$\|sql_yacc\.yy$\|\.hpp$\|\.ic$' -#list="find . -type f" -bzr root >/dev/null 2>/dev/null && list="bzr ls --from-root -R --kind=file --versioned" +list="find . -type f" +git rev-parse >/dev/null 2>/dev/null && list="git ls-files" $list |grep $filter |while read f; do etags -o TAGS --append $f done - -(cd storage/galera && svn ls -R) | grep $filter | while read f; -do - etags -o TAGS --append storage/galera/$f -done diff --git a/support-files/mysql.server.sh b/support-files/mysql.server.sh index 1600cb0f86a..30d1ecd5f4c 100644 --- a/support-files/mysql.server.sh +++ b/support-files/mysql.server.sh @@ -147,6 +147,9 @@ parse_server_arguments() { --datadir=*) datadir=`echo "$arg" | sed -e 's/^[^=]*=//'` datadir_set=1 ;; + --log-basename=*|--hostname=*|--loose-log-basename=*) + mysqld_pid_file_path=`echo "$arg.pid" | sed -e 's/^[^=]*=//'` + ;; --pid-file=*) mysqld_pid_file_path=`echo "$arg" | sed -e 's/^[^=]*=//'` ;; --service-startup-timeout=*) service_startup_timeout=`echo "$arg" | sed -e 's/^[^=]*=//'` ;; esac diff --git a/support-files/rpm/server-postin.sh b/support-files/rpm/server-postin.sh index 91885f73466..cd2aec4d84a 100644 --- a/support-files/rpm/server-postin.sh +++ b/support-files/rpm/server-postin.sh @@ -1,6 +1,10 @@ # Make MySQL start/shutdown automatically when the machine does it. if [ $1 = 1 ] ; then + if [ -x /usr/bin/systemctl ] ; then + /usr/bin/systemctl daemon-reload >/dev/null 2>&1 + fi + if [ -x /sbin/chkconfig ] ; then /sbin/chkconfig --add mysql fi @@ -51,30 +55,31 @@ fi SETARGETDIR=/etc/selinux/targeted/src/policy SEDOMPROG=$SETARGETDIR/domains/program SECONPROG=$SETARGETDIR/file_contexts/program -if [ -f /etc/redhat-release ] \ - && grep -q "Red Hat Enterprise Linux .. release 4" /etc/redhat-release \ - || grep -q "CentOS release 4" /etc/redhat-release ; then - echo - echo - echo 'Notes regarding SELinux on this platform:' - echo '=========================================' - echo - echo 'The default policy might cause server startup to fail because it is ' - echo 'not allowed to access critical files. In this case, please update ' - echo 'your installation. ' - echo - echo 'The default policy might also cause inavailability of SSL related ' - echo 'features because the server is not allowed to access /dev/random ' - echo 'and /dev/urandom. If this is a problem, please do the following: ' - echo - echo ' 1) install selinux-policy-targeted-sources from your OS vendor' - echo ' 2) add the following two lines to '$SEDOMPROG/mysqld.te':' - echo ' allow mysqld_t random_device_t:chr_file read;' - echo ' allow mysqld_t urandom_device_t:chr_file read;' - echo ' 3) cd to '$SETARGETDIR' and issue the following command:' - echo ' make load' - echo - echo +if [ -f /etc/redhat-release ] ; then + if grep '\(Red Hat Enterprise Linux ..\|CentOS\) release 4' \ + /etc/redhat-release >/dev/null 2>&1; then + echo + echo + echo 'Notes regarding SELinux on this platform:' + echo '=========================================' + echo + echo 'The default policy might cause server startup to fail because it is ' + echo 'not allowed to access critical files. In this case, please update ' + echo 'your installation. ' + echo + echo 'The default policy might also cause inavailability of SSL related ' + echo 'features because the server is not allowed to access /dev/random ' + echo 'and /dev/urandom. If this is a problem, please do the following: ' + echo + echo ' 1) install selinux-policy-targeted-sources from your OS vendor' + echo ' 2) add the following two lines to '$SEDOMPROG/mysqld.te':' + echo ' allow mysqld_t random_device_t:chr_file read;' + echo ' allow mysqld_t urandom_device_t:chr_file read;' + echo ' 3) cd to '$SETARGETDIR' and issue the following command:' + echo ' make load' + echo + echo + fi fi if [ -x sbin/restorecon ] ; then diff --git a/support-files/rpm/server-postun.sh b/support-files/rpm/server-postun.sh index dcf67173a02..412c6f4c67b 100644 --- a/support-files/rpm/server-postun.sh +++ b/support-files/rpm/server-postun.sh @@ -6,3 +6,10 @@ if [ $1 -ge 1 ]; then fi fi fi + +if [ $1 = 0 ] ; then + if [ -x /usr/bin/systemctl ] ; then + /usr/bin/systemctl daemon-reload > /dev/null 2>&1 + fi +fi + diff --git a/vio/viosslfactories.c b/vio/viosslfactories.c index 22645b18b1b..41c1dbbd0e4 100644 --- a/vio/viosslfactories.c +++ b/vio/viosslfactories.c @@ -1,4 +1,5 @@ -/* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. +/* Copyright (c) 2000, 2015, Oracle and/or its affiliates. + Copyright (c) 2011, 2015, MariaDB 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 @@ -173,6 +174,7 @@ new_VioSSLFd(const char *key_file, const char *cert_file, { DH *dh; struct st_VioSSLFd *ssl_fd; + long ssl_ctx_options= SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3; DBUG_ENTER("new_VioSSLFd"); DBUG_PRINT("enter", ("key_file: '%s' cert_file: '%s' ca_file: '%s' ca_path: '%s' " @@ -200,7 +202,7 @@ new_VioSSLFd(const char *key_file, const char *cert_file, DBUG_RETURN(0); } - SSL_CTX_set_options(ssl_fd->ssl_context, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3); + SSL_CTX_set_options(ssl_fd->ssl_context, ssl_ctx_options); /* Set the ciphers that can be used diff --git a/win/packaging/heidisql.cmake b/win/packaging/heidisql.cmake index e429907cb2e..f9334f09570 100644 --- a/win/packaging/heidisql.cmake +++ b/win/packaging/heidisql.cmake @@ -1,4 +1,4 @@ -SET(HEIDISQL_BASE_NAME "HeidiSQL_8.3_Portable")
+SET(HEIDISQL_BASE_NAME "HeidiSQL_9.1_Portable")
SET(HEIDISQL_ZIP "${HEIDISQL_BASE_NAME}.zip")
SET(HEIDISQL_URL "http://www.heidisql.com/downloads/releases/${HEIDISQL_ZIP}")
SET(HEIDISQL_DOWNLOAD_DIR ${THIRD_PARTY_DOWNLOAD_LOCATION}/${HEIDISQL_BASE_NAME})
diff --git a/win/packaging/heidisql.wxi.in b/win/packaging/heidisql.wxi.in index 1e6e3d552a8..6b1176921bc 100644 --- a/win/packaging/heidisql.wxi.in +++ b/win/packaging/heidisql.wxi.in @@ -23,9 +23,10 @@ uninstallation. We use RemoveFile to force delete in any case.
-->
<RemoveFile Id="Remove_HeidiSQL_exe" Name="heidisql.exe" On="uninstall" />
+ <!-- remove readme.txt too, it's not included in HeidiSQL-9.1-Portable.zip -->
+ <RemoveFile Id="Remove_readme_txt" Name="readme.txt" On="uninstall" />
<File Id="heidisql.license.txt" Name="license.txt" Source="${HEIDISQL_DOWNLOAD_DIR}\license.txt" />
- <File Id="heidisql.readme.txt" Name="readme.txt" Source="${HEIDISQL_DOWNLOAD_DIR}\readme.txt" />
</Component>
<Component Id="component.HeidiSQL_MenuShortcut" Guid="*" Win64="no">
<RegistryValue Root="HKCU" Key="Software\@CPACK_WIX_PACKAGE_NAME@\Uninstall" Name="shortcuts.heidisql" Value="1" Type="string" KeyPath="yes" />
@@ -34,6 +35,26 @@ <Component Id="component.HeidiSQL_libmysql.dll" Guid="*" Win64="no">
<File Id="heidisql.libmysql.dll" Name="libmysql.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\libmysql.dll" />
</Component>
+
+ <Component Id="component.HeidiSQL_libeay32.dll" Guid="*" Win64="no">
+ <File Id="heidisql.libeay32.dll" Name="libeay32.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\libeay32.dll" />
+ </Component>
+ <Component Id="component.HeidiSQL_libpq.dll" Guid="*" Win64="no">
+ <File Id="heidisql.libpq.dll" Name="libpq.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\libpq.dll" />
+ </Component>
+ <Component Id="component.HeidiSQL_ssleay32.dll" Guid="*" Win64="no">
+ <File Id="heidisql.ssleay32.dll" Name="ssleay32.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\ssleay32.dll" />
+ </Component>
+ <Component Id="component.HeidiSQL_libintl.dll" Guid="*" Win64="no">
+ <File Id="heidisql.libintl.dll" Name="libintl.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\libintl.dll" />
+ </Component>
+
+ <Directory Id="D.HeidiSQL.plugins" Name="plugins">
+ <Component Id="component.HeidiSQL_dialog.dll" Guid="*" Win64="no">
+ <File Id="heidisql.dialog.dll" Name="dialog.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\plugins\dialog.dll" />
+ </Component>
+ </Directory>
+
<Component Id="component.HeidiSQL_CleanupSettings" Guid="*" Win64="no">
<Condition>HEIDISQLINSTALLED</Condition>
<RegistryValue Root="HKCU" Key="Software\@CPACK_WIX_PACKAGE_NAME@\UninstallCleanupHeidiSQLSettings" Name="cleanup.heidisql" Value="1" Type="string" KeyPath="yes" />
@@ -46,6 +67,11 @@ <ComponentRef Id="component.HeidiSQL"/>
<ComponentRef Id="component.HeidiSQL_MenuShortcut"/>
<ComponentRef Id="component.HeidiSQL_libmysql.dll"/>
+ <ComponentRef Id="component.HeidiSQL_libeay32.dll" />
+ <ComponentRef Id="component.HeidiSQL_libpq.dll" />
+ <ComponentRef Id="component.HeidiSQL_ssleay32.dll" />
+ <ComponentRef Id="component.HeidiSQL_libintl.dll" />
+ <ComponentRef Id="component.HeidiSQL_dialog.dll" />
<ComponentRef Id="component.HeidiSQL_CleanupSettings"/>
</ComponentGroup>
</Include>
|