"alter table from MyISAM to MERGE lost data without errors and warnings"
Add new handlerton flag which prevent user from altering table storage
engine to storage engines which would lose data. Both 'blackhole' and
'merge' are marked with the new flag.
Tests included.
mysql-test/r/blackhole.result:
test for bug#10952
mysql-test/r/merge.result:
test for bug#10952
mysql-test/t/blackhole.test:
test for bug#10952
mysql-test/t/merge.test:
test for bug#10952
sql/ha_blackhole.cc:
Bug#10952
shouldn't be able to alter a table into a blackhole
sql/ha_myisammrg.cc:
Bug#10952
shouldn't be able to alter a table into a merge
sql/handler.h:
Bug#10952
new handlerton flag
sql/sql_table.cc:
Bug#10952
If alter is changing engine, check if new engine allows creating table
via ALTER statement.
mysql-test/include/have_outfile.inc:
Use MYSQLTEST_VARDIR
mysql-test/include/test_outfile.inc:
Use MYSQLTEST_VARDIR
mysql-test/mysql-test-run.pl:
Create variable $MYSQLTEST_VARDIR that points to the vardir
Don't create a symlink from var/ to the physical vardir if it's somewhere else
Setup a symlink(or copy dir on windows) for std_data so it is available in the physical vardir
Use "../tmp" as slave-load-tmpdir, since the server is started in var/master-data and slave in var/slave-data they will both find the dumps in "../tmp"
mysql-test/mysql-test-run.sh:
Export MYSQLTEST_VARDIR, always pointing at mysql-test/var
mysql-test/r/backup.result:
Use MYSQLTEST_VARDIR
mysql-test/r/blackhole.result:
Use "../std_data_ln" to find std_data files
mysql-test/r/loaddata.result:
Use "../std_data_ln" to find std_data files
mysql-test/r/mysqlbinlog.result:
Use "../std_data_ln" to find std_data files
mysql-test/r/mysqltest.result:
Use MYSQLTEST_VARDIR
mysql-test/r/outfile.result:
Use MYSQLTEST_VARDIR
mysql-test/r/query_cache.result:
Add missing drop function
mysql-test/r/rpl000001.result:
Use "../std_data_ln" to find std_data files
mysql-test/r/rpl000004.result:
Use "../std_data_ln" to find std_data files
mysql-test/r/rpl_innodb.result:
Use "../std_data_ln" to find std_data files
mysql-test/r/rpl_loaddata.result:
Use "../std_data_ln" to find std_data files
mysql-test/r/rpl_loaddata_rule_m.result:
Use "../std_data_ln" to find std_data files
mysql-test/r/rpl_loaddata_rule_s.result:
Use "../std_data_ln" to find std_data files
mysql-test/r/rpl_loaddatalocal.result:
Use MYSQLTEST_VARDIR
mysql-test/r/rpl_log.result:
Use "../std_data_ln" to find std_data files
mysql-test/r/rpl_misc_functions.result:
Use MYSQLTEST_VARDIR
mysql-test/r/rpl_replicate_do.result:
Use "../std_data_ln" to find std_data files
mysql-test/r/rpl_rewrite_db.result:
Use "../std_data_ln" to find std_data files
mysql-test/r/rpl_timezone.result:
Use "../std_data_ln" to find std_data files
mysql-test/r/symlink.result:
Use MYSQLTEST_VARDIR
mysql-test/r/trigger.result:
Use "../std_data_ln" to find std_data files
mysql-test/r/view.result:
Use "../std_data_ln" to find std_data files
mysql-test/r/warnings.result:
Use "../std_data_ln" to find std_data files
mysql-test/t/backup-master.sh:
Use MYSQLTEST_VARDIR
mysql-test/t/backup.test:
Use MYSQLTEST_VARDIR
mysql-test/t/blackhole.test:
Use "../std_data_ln" to find std_data files
mysql-test/t/ctype_ucs_binlog.test:
Use MYSQLTEST_VARDIR
mysql-test/t/im_daemon_life_cycle-im.opt:
Use MYSQLTEST_VARDIR
mysql-test/t/im_options_set.imtest:
Use MYSQLTEST_VARDIR
mysql-test/t/im_options_unset.imtest:
Use MYSQLTEST_VARDIR
mysql-test/t/loaddata.test:
Use "../std_data_ln" to find std_data files
mysql-test/t/myisam.test:
Use MYSQLTEST_VARDIR
mysql-test/t/mysqlbinlog.test:
Use "../std_data_ln" to find std_data files
mysql-test/t/mysqlbinlog2.test:
Use MYSQLTEST_VARDIR
mysql-test/t/mysqldump.test:
Use MYSQLTEST_VARDIR
mysql-test/t/mysqltest.test:
Use MYSQLTEST_VARDIR
mysql-test/t/ndb_autodiscover.test:
Use MYSQLTEST_VARDIR
mysql-test/t/outfile.test:
Use MYSQLTEST_VARDIR
mysql-test/t/query_cache.test:
Add missing drop function
mysql-test/t/repair.test:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl000001.test:
Use "../std_data_ln" to find std_data files
mysql-test/t/rpl000004.test:
Use "../std_data_ln" to find std_data files
mysql-test/t/rpl000009.test:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl000015-slave.sh:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl000017-slave.sh:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl_EE_error.test:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl_charset.test:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl_drop_db.test:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl_flush_log_loop-master.opt:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl_flush_log_loop-master.sh:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl_flush_log_loop-slave.opt:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl_flush_log_loop-slave.sh:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl_innodb.test:
Use "../std_data_ln" to find std_data files
mysql-test/t/rpl_loaddata.test:
Use "../std_data_ln" to find std_data files
mysql-test/t/rpl_loaddata_rule_m.test:
Use "../std_data_ln" to find std_data files
mysql-test/t/rpl_loaddata_rule_s.test:
Use "../std_data_ln" to find std_data files
mysql-test/t/rpl_loaddatalocal.test:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl_log.test:
Use "../std_data_ln" to find std_data files
mysql-test/t/rpl_misc_functions-slave.sh:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl_misc_functions.test:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl_replicate_do.test:
Use "../std_data_ln" to find std_data files
mysql-test/t/rpl_rewrite_db.test:
Use "../std_data_ln" to find std_data files
mysql-test/t/rpl_rotate_logs-slave.sh:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl_rotate_logs.test:
Use MYSQLTEST_VARDIR
mysql-test/t/rpl_timezone.test:
Use MYSQLTEST_VARDIR
mysql-test/t/show_check.test:
Use MYSQLTEST_VARDIR
mysql-test/t/sp-destruct.test:
Use MYSQLTEST_VARDIR
mysql-test/t/symlink.test:
Use MYSQLTEST_VARDIR
mysql-test/t/temp_table-master.opt:
Use MYSQLTEST_VARDIR
mysql-test/t/trigger-compat.test:
Use MYSQLTEST_VARDIR
mysql-test/t/trigger-grant.test:
Use MYSQLTEST_VARDIR
mysql-test/t/trigger.test:
Use "../std_data_ln" to find std_data files
mysql-test/t/type_varchar.test:
Use MYSQLTEST_VARDIR
mysql-test/t/user_var-binlog.test:
Use MYSQLTEST_VARDIR
mysql-test/t/view.test:
Use "../std_data_ln" to find std_data files
mysql-test/t/warnings.test:
Use "../std_data_ln" to find std_data files
mysql-test/include/sourced.inc:
New BitKeeper file ``mysql-test/include/sourced.inc''
mysql-test/include/sourced1.inc:
New BitKeeper file ``mysql-test/include/sourced1.inc''
Approximative, because it's using our binlogging way (what we call "query"-level) and this is not as good as record-level binlog (5.1) would be. It imposes several
limitations to routines, and has caveats (which I'll document, and for which the server will try to issue errors but that is not always possible).
Reason I don't propagate caller info to the binlog as planned is that on master and slave
users may be different; even with that some caveats would remain.
mysql-test/mysql-test-run.sh:
In the testsuite we know what we do, we are not creating nasty routines, and breaking binlog is ok except in rpl_sp.
mysql-test/r/blackhole.result:
Updating results now that 4.1 has been merged
mysql-test/valgrind.supp:
Some suppressions for Valgrind (useful on my machine Suse 9.1);
this is just adding to the already existing suppressions of pthread and dl.
sql/item_func.cc:
Don't binlog the substatements when executing a function. If the function
is declared to modify data and does not complete, warning "broken binlog".
Note that SELECT myfunc() will not be binlogged even if myfunc() updates data (will be documented);
but INSERT INTO t VALUES(myfunc()) will be binlogged (what decides is if the caller
gets binlogged; the function changes nothing to binlogging).
sql/log_event.cc:
Just making functions which can be re-used when we binlog more strings
in status_vars in Query_log_event (e.g. one day "user", "host").
sql/log_event.h:
comment
sql/mysql_priv.h:
--log-bin-trust-routine-creators
sql/mysqld.cc:
--log-bin-trust-routine-creators
sql/set_var.cc:
--log-bin-trust-routine-creators
sql/share/errmsg.txt:
error messages to warn about problems with routines and binlog
sql/slave.cc:
If in a routine, replication table inclusion/exclusion rules always answer "replicate!" (see comment in code).
sql/sp.cc:
If binlog is on: errors if one wants to create a non-deterministic update routine
(repeatability problem - note that the test is not perfect for functions) or does not have SUPER (because routines can easily
be made to destroy slave's data with just CREATE ROUTINE and EXECUTE priv on master).
--log-bin-trust-routine-creators removes these errors.
Binlogging of CREATE PROCEDURE|FUNCTION.
sql/sql_acl.cc:
No thd==0 in tables_ok().
sql/sql_parse.cc:
Binlogging of CALL (and not of the substatements of the SP).
If SP returns error, we don't binlog it (see comment); we push warning in this case.
Binlogging of ALTER|DROP PROCEDURE|FUNCTION with safety messages.
no rows of the blackhold engine (for this engine to be a binlog propagator).
NOTE: blackhole.test currently hangs in 5.0 BUG#10175 so I'll merge without running this test; the
person who fixes the hang will correct the merged blackhole.result or ask me to).
mysql-test/r/blackhole.result:
result update
mysql-test/t/blackhole.test:
checking that statements get into binlog even when they were affecting
no rows of the blackhold engine. So that this engine can serve as
a binlog propagator (A->B->C replication where B has only blackhole tables,
B receives binlog from A, applies it to blackhole tables, writes statements
to its binlog which it sends to C; both A and C have non-blackhole tables). B is just a proxy.
configure.in:
Adding logic to run blackhole configure option.
mysql-test/r/blackhole.result:
Correction this, but I think I need to see why the warning is being generated in the first place.
acinclude.m4:
Change in message
mysql-test/r/blackhole.result:
Lowered the number of inserts.
mysql-test/t/blackhole.test:
Lowered the number of inserts.
sql/ha_blackhole.cc:
Added indexes per Serg, correction of indention, added asserts per Serg.
sql/ha_blackhole.h:
Indention fix, added methods for index...
acinclude.m4:
New macro rule for ha_blackhole.
configure.in:
Rule enabling blackhole engine
sql/Makefile.am:
Additions to Makefile for blackhole engine
sql/handler.cc:
Ifdef enable code for blackhole (and message for "what does this thing do").
sql/handler.h:
Flag for storage engine type.
sql/mysql_priv.h:
Added blackhole type.
sql/mysqld.cc:
Updates for building backhole.
sql/set_var.cc:
Show variable for blackhole engine