BUG#49978: Replication tests don't clean up replication state at the end
Major replication test framework cleanup. This does the following:
- Ensure that all tests clean up the replication state when they
finish, by making check-testcase check the output of SHOW SLAVE STATUS.
This implies:
- Slave must not be running after test finished. This is good
because it removes the risk for sporadic errors in subsequent
tests when a test forgets to sync correctly.
- Slave SQL and IO errors must be cleared when test ends. This is
good because we will notice if a test gets an unexpected error in
the slave threads near the end.
- We no longer have to clean up before a test starts.
- Ensure that all tests that wait for an error in one of the slave
threads waits for a specific error. It is no longer possible to
source wait_for_slave_[sql|io]_to_stop.inc when there is an error
in one of the slave threads. This is good because:
- If a test expects an error but there is a bug that causes
another error to happen, or if it stops the slave thread without
an error, then we will notice.
- When developing tests, wait_for_*_to_[start|stop].inc will fail
immediately if there is an error in the relevant slave thread.
Before this patch, we had to wait for the timeout.
- Remove duplicated and repeated code for setting up unusual replication
topologies. Now, there is a single file that is capable of setting
up arbitrary topologies (include/rpl_init.inc, but
include/master-slave.inc is still available for the most common
topology). Tests can now end with include/rpl_end.inc, which will clean
up correctly no matter what topology is used. The topology can be
changed with include/rpl_change_topology.inc.
- Improved debug information when tests fail. This includes:
- debug info is printed on all servers configured by include/rpl_init.inc
- User can set $rpl_debug=1, which makes auxiliary replication files
print relevant debug info.
- Improved documentation for all auxiliary replication files. Now they
describe purpose, usage, parameters, and side effects.
- Many small code cleanups:
- Made have_innodb.inc output a sensible error message.
- Moved contents of rpl000017-slave.sh into rpl000017.test
- Added mysqltest variables that expose the current state of
disable_warnings/enable_warnings and friends.
- Too many to list here: see per-file comments for details.
client/mysqltest.cc:
Added the following variables:
$ENABLED_WARNINGS
$ENABLED_QUERY_LOG
$ENABLED_RESULT_LOG
$ENABLED_ABORT_ON_ERROR
$ENABLED_INFO
$ENABLED_METADATA
Each variable is 0 or 1, depending on if the corresponding
mysqltest feature is on or off.
mysql-test/extra/rpl_tests/rpl_EE_err.test:
Made test clean up after itself and removed outdated comments.
mysql-test/extra/rpl_tests/rpl_auto_increment.test:
- Use rpl_reset.inc instead of master-slave-reset.inc
- diff_tables.inc now takes only one parameter.
Made test clean up after itself and removed outdated comments.
mysql-test/extra/rpl_tests/rpl_auto_increment_insert_view.test:
diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_auto_increment_invoke_trigger.test:
diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_autoinc_func_invokes_trigger.test:
diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_charset.test:
Made test clean up after itself and removed unnecessary cleanup in beginning.
mysql-test/extra/rpl_tests/rpl_commit_after_flush.test:
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_conflicts.test:
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_ddl.test:
Don't clean up replication here since this file does not setup
replication. The main test now has to both setup and clean up
replication.
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_deadlock.test:
make test clean up after itself
mysql-test/extra/rpl_tests/rpl_extra_col_master.test:
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_extra_col_slave.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_failed_optimize.test:
made test clean up after itself
mysql-test/extra/rpl_tests/rpl_flsh_tbls.test:
made test clean up after itself
mysql-test/extra/rpl_tests/rpl_foreign_key.test:
made test clean up after itself
mysql-test/extra/rpl_tests/rpl_get_master_version_and_clock.test:
- Replace 'start slave; wait_for_slave_to_start.inc' by
include/start_slave.inc.
- Use new file rpl_connect.inc to reconnect on all connections, since the
connections are used by rpl_end.inc.
- Use wait_for_slave_param.inc instead of wait_for_slave_io_to_start.inc,
since wait_for_slave_io_to_start.inc now fails if the IO thread has
an error. In this particular test case, it is normal that the IO thread
has an error.
- Changed wait_for_slave_io_error.inc so that it waits
for the IO thread to stop. However, in this test case,
the IO thread only gets a non-fatal error, so it does
not stop. So we set $slave_io_error_is_nonfatal=1 to
prevent wait_for_slave_io_error.inc from waiting.
mysql-test/extra/rpl_tests/rpl_insert_id.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_insert_id_pk.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_loaddata.test:
- Use wait_for_slave_sql_error.inc to wait for errors
instead of wait_for_slave_sql_to_stop.inc
- Use check_slave_no_error.inc instead of print errors
to the log.
- Use rpl_reset.inc instead of master-slave-reset.inc
This means we have to clear the error from the slave
threads by calling RESET SLAVE explicitly.
- diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_log.test:
replace master-slave-reset.inc by rpl_reset.inc
mysql-test/extra/rpl_tests/rpl_max_relay_size.test:
made test clean up after itself
cosmetic fix
mysql-test/extra/rpl_tests/rpl_multi_query.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_multi_update.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_ndb_apply_status.test:
replace master-slave-reset.inc by rpl_reset.inc
mysql-test/extra/rpl_tests/rpl_not_null.test:
- replace master-slave-reset.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_record_compare.test:
- replace master-slave-reset.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_reset_slave.test:
- replace wait_for_slave_io_error.inc+stop_slave.inc by
wait_for_slave_io_error_and_stop.inc+stop_slave_sql.inc
since stop_slave.inc now fails when the io thread has an
error.
- replace stop_slave.inc by STOP SLAVE +
wait_for_slave_sql_to_stop.inc +
wait_for_slave_param. stop_slave.inc would fail since
the IO thread has an error.
- add include/rpl_end.inc to clean up replication state
mysql-test/extra/rpl_tests/rpl_row_UUID.test:
Don't clean up replication here since this file does not setup
replication. The main test now has to both setup and clean up
replication.
mysql-test/extra/rpl_tests/rpl_row_basic.test:
- replaced reset_master_and_slave.inc by rpl_reset.inc
- replaced sequence of reset master+reset slave by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_row_delayed_ins.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_row_sp002.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_row_sp007.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_set_null.test:
- replaced master-slave-reset.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_stm_EE_err2.test:
- Made test clean up replication state.
mysql-test/extra/rpl_tests/rpl_stm_create_if_not_exists.test:
replaced rpl_diff_tables.inc by diff_tables.inc
mysql-test/extra/rpl_tests/rpl_stop_slave.test:
changed protocol for diff_tables.inc
mysql-test/extra/rpl_tests/rpl_sv_relay_space.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_test_framework.inc:
Auxiliary file used by rpl_test_framework.test.
This checks that rpl_change_topology.inc works correctly.
mysql-test/extra/rpl_tests/rpl_truncate.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_truncate_helper.test:
- replace reset_master_and_slave.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/include/analyze-sync_with_master.test:
- improved debug output printed when sync_slave_with_master or
sync_with_master fails
- Added documentation
mysql-test/include/assert.inc:
Added file to facilitate assertions.
mysql-test/include/begin_include_file.inc:
New auxiliary file to be used by replication helper files like
rpl_init.inc, stop_slave.inc, wait_for_slave_*.inc, etc. Such
helper files should source rpl_begin_include_file.inc at the
beginning and rpl_end_include_file.inc at the end. That adds the
following features:
- When a test sources the file, the file name is printed to the
result file. This is good because it makes result files easier to
follow.
- When a helper file sources a second helper file recursively, then
the name of the second file is not printed. This is good because
it would make the result file harder to follow if all the internal
calls of all helper files were printed.
- When $rpl_debug is set, all internal calls are printed to the
result file. This is good because it helps when debugging test
cases. (With $rpl_debug=1, many of the helper files now print other
relevant debug info too.)
- When a file needs to turn off the query log or the warning log
(disable_query_log/disable_warnings), then the file can tell
rpl_begin_include_file.inc about it. Then rpl_begin_include_file.inc
will turn off the log correctly, and rpl_end_include_file.inc
will turn on the log correctly. Note that if rpl_a.inc sources
rpl_b.inc and both files need to turn off the log, then the
log is not turned on when rpl_b.inc ends (because rpl_a.inc
still needs the log off). This makes it easier to program
replication helper files.
mysql-test/include/check-testcase.test:
Made check-testcase ensure that the slave status is reset
after the test has finished.
mysql-test/include/check_slave_is_running.inc:
- Use existing framework (check_slave_param.inc) instead of ad-hoc code
to check value of slave parameters.
- Use rpl_begin_include_file.inc to improve debug capabilities.
- improve documentation.
mysql-test/include/check_slave_no_error.inc:
- Use rpl_begin_include_file.inc to improve debug capabilities.
- improve documentation.
mysql-test/include/check_slave_param.inc:
- Use rpl_begin_include_file.inc to improve debug capabilities.
- improve documentation.
mysql-test/include/cleanup_fake_relay_log.inc:
- Use RESET SLAVE instead of manual file removal. This also
resets other replication state.
- verify that RESET SLAVE correctly removed files.
mysql-test/include/diff_tables.inc:
- Use rpl_begin_include_file.inc to improve debug capabilities.
- Improved documentation.
- file now supports an arbitrary number of tables
(not just two). The tables are now given as a comma-separated
list instead of as two variables.
- You no longer have to specify database name for each table.
If no database is specified, it defaults to the current
database.
- File now restores the connection at the end.
mysql-test/include/end_include_file.inc:
New file to be sourced at the end of auxiliary replication include
files. See include/rpl_begin_include_file.inc for details.
mysql-test/include/file_does_not_exist.inc:
Added .inc file to check that a given file is removed.
mysql-test/include/force_restart.inc:
Added file to force server restart after test
mysql-test/include/force_restart_if_skipped.inc:
Added file to force server restart after test, if the test is skipped
mysql-test/include/have_innodb.inc:
Made have_innodb.inc print sensible message when innodb is
not supported.
mysql-test/include/io_thd_fault_injection.inc:
Use rpl_server_restart.inc instead of restart_mysqld.inc in rpl tests
mysql-test/include/kill_query_and_diff_master_slave.inc:
Renamed diff_master_slave.inc to rpl_diff.inc
mysql-test/include/master-slave.inc:
- Use new rpl_init.inc file
- Now, we don't do 'drop table' in master-slave.inc any more. That's good
because drop table has nothing to do with configuring replication servers.
- master-slave.inc now supports the additional parameter
$rpl_server_count. By default, master-slave.inc only
configures two servers; if $rpl_server_count is set, it
configures that many servers. Only the second server is
a slave; the rest are not part of the replication topology.
mysql-test/include/mtr_check.sql:
Removed unneeded SP (use include/force_restart.inc instead)
mysql-test/include/mysqldump.inc:
diff_tables.inc now takes only one parameter.
mysql-test/include/ndb_master-slave.inc:
use master-slave.inc instead of ad-hoc calls to 'connect'
mysql-test/include/ndb_master-slave_2ch.inc:
use rpl_init.inc instead of ad-hoc setup
mysql-test/include/ndb_not_readonly.inc:
turn off query log while executing this script.
this was previously done by the caller. now it's done in the script.
mysql-test/include/report-features.test:
add newline at end of file
mysql-test/include/reset_master_and_slave.inc:
rpl_reset.inc replaces this file
mysql-test/include/restart_mysqld.inc:
force caller to use rpl_restart_server.inc instead if replication is configured
mysql-test/include/rpl_change_topology.inc:
New file to change replication topology on the fly. This is used
by rpl_init.inc internally, but is also used by test cases
that need to change topology (e.g., rpl.rpl_circular_for_4_hosts, which
reconfigures the topology to make a failover).
mysql-test/include/rpl_connect.inc:
New file to create a named connection. This file knows about a number
of "standard" connections (master, slave, server_1, etc), and knows how
each of them should normally be created. This is mostly used internally
(e.g., by rpl_init.inc, master-slave.inc, ndb_master-slave_2ch.inc etc),
but can also be used by tests that need to bring a connection up after
disconnecting.
mysql-test/include/rpl_connection.inc:
New file to change connection. This prints the name of the connection.
However, for files that source rpl_begin_include_file.inc, it does not
print the name of the connection unless $rpl_debug=1. This is good
because printing something every time the .inc file changed connection
would make the result log harder to read.
mysql-test/include/rpl_diff.inc:
- Made file capable to compare many servers
- Hence renamed it to rpl_diff.inc
- If no server list is specified, use all servers from
server_1 to server_$rpl_server_count
- It now writes the statement to file before executing it.
That means it will be subject to SQL string interpolation,
but not shell string interpolation (which may be
platform-dependent)
mysql-test/include/rpl_diff_tables.inc:
Removed this file, since its functionality has been merged into
diff_tables.inc.
mysql-test/include/rpl_end.inc:
Renamed master-slave-end.inc to rpl_end.inc, and made it
work with arbitrary replication topologies (as configured
with rpl_init.inc and possibly rpl_change_topology.inc). Also
made it assert that no slave thread has an error. Made it
assert that no slave thread is stopped, unless
$rpl_only_running_threads=1.
mysql-test/include/rpl_for_each_slave.inc:
New test script that executes a command once for each slave.
This is used by include/rpl_start_slaves.inc and
include/rpl_stop_slaves.inc and could possibly be useful for other
custom scripts too.
mysql-test/include/rpl_generate_sync_chain.inc:
New file that computes the variable $rpl_sync_chain. This variable
determines in what order slaves are synced by include/rpl_sync.inc.
The variable is recomputed the first time that include/rpl_sync.inc
is called after rpl_change_topology.inc.
mysql-test/include/rpl_init.inc:
Made file work for arbitrary topologies instead of just 4-server
circle. This file is used by master-slave.inc, rpl_master-slave_2ch.inc
etc, and also by tests that need other specific replication topologies.
mysql-test/include/rpl_reconnect.inc:
New auxiliary file that will reconnect many clients to a given
server. All clients configured by rpl_init.inc will reconnect.
mysql-test/include/rpl_reset.inc:
Made file work for arbitrary replication topologies,
check for errors, and sync all threads. Also removed
'drop table' because that has nothing to do with replication.
mysql-test/include/rpl_restart_server.inc:
New auxiliary file that restarts a server.
mysql-test/include/rpl_start_server.inc:
New auxiliary file that starts a server that has been shut down.
mysql-test/include/rpl_start_slaves.inc:
New auxiliary file to start all slaves configured by rpl_init.inc
This is used internally by rpl_init.inc but may also be used by tests
that want to bring all slaves up.
mysql-test/include/rpl_stop_server.inc:
New auxiliary file that shuts down a server.
mysql-test/include/rpl_stop_slaves.inc:
New auxiliary file to stop all slaves configured rpl_init.inc. This
is used internally by rpl_end.inc, but may also be used by tests that
want to stop all slaves.
mysql-test/include/rpl_sync.inc:
Made file work for arbitrary replication topologies (as configured
by rpl_init.inc and possibly rpl_change_topology.inc) instead of
just 4-server circle.
mysql-test/include/save_master_pos.inc:
Auxiliary file to save the master position.
mysql-test/include/setup_fake_relay_log.inc:
- Moved complicated logic to write to file into
write_var_to_file.inc, so that it can be re-used by
other tests.
- Added call to show_rpl_debug_info and die in error case.
mysql-test/include/show_rpl_debug_info.inc:
- Made file print NOW()
- Made file print both SHOW MASTER STATUS, SHOW SLAVE HOSTS,
and SHOW SLAVE STATUS.
- Made file print debug info for all servers configured by
rpl_init.inc
mysql-test/include/show_slave_status.inc:
- Made file use echo instead of SELECT to print variables.
- Improved comments.
- Use variable names that are less likely to be used by other tests.
mysql-test/include/start_slave.inc:
- Made test use rpl_begin_include_file.inc to improve debug
capabilities.
- improved documentation
mysql-test/include/stop_slave.inc:
- Made script capable to detect which threads are running
and stop only those.
- Improved documentation
mysql-test/include/stop_slave_io.inc:
Added file to stop the slave IO thread.
mysql-test/include/stop_slave_sql.inc:
Added file to stop the slave SQL thread.
mysql-test/include/sync_io_with_master.inc:
Added file to sync the IO thread of the current connection, up to
a previously saved position.
mysql-test/include/sync_slave_io_with_master.inc:
- Made file work with arbitrarily-named connections.
- Made file use rpl_begin_include_file.inc to improve debug
capabilities.
mysql-test/include/sync_slave_sql_with_io.inc:
Added file to sync only the SQL thread, up to the position copied
in the IO thread.
mysql-test/include/wait_for_query_to_fail.inc:
Added file to wait for a query to fail.
mysql-test/include/wait_for_slave_io_error.inc:
- Use rpl_begin_include_file.inc to improve debug capabilities.
- Use existing atom include/show_slave_status.inc to print error
message.
- Improve comments.
******
- This file now waits until the slave IO thread has completely
stopped (to avoid races in tests).
- Some IO thread errors are non-fatal and don't cause the slave
IO thread to stop. To allow tests to wait for such errors, we
add the parameters $slave_io_error_is_nonfatal. If
$slave_io_error_is_nonfatal is set, this script does not wait
for the IO thread to stop.
mysql-test/include/wait_for_slave_io_to_start.inc:
- Made script fail if the IO thread has an error.
- Use rpl_begin_include_file.inc to improve debug capabilities.
- Improved documentation.
mysql-test/include/wait_for_slave_io_to_stop.inc:
- Fail if server is not configured as slave. Previously, the
script accepted servers not configured as slave because there
was cleanup code called from master-slave.inc that would execute
STOP SLAVE on both master and slave. Now all tests have to
clean up after themselves, so we don't have to call stop slave
at the beginning of tests. Hence, we disallow calling this
script on servers not configured as slaves.
- Use rpl_begin_include_file.inc to improve debug capabilities.
- Improved documentation.
mysql-test/include/wait_for_slave_param.inc:
- Added $slave_error_param. This variable can be set to
Slave_IO_Errno or Slave_SQL_Errno, in which case the
script fails if the corresponding column in the output from
SHOW SLAVE STATUS is nonzero.
- Replaced exit by die.
- Made it print timeout seconds correctly in error message.
- Removed $slave_error_message. This is not needed.
- Use rpl_begin_include_file.inc for better debug capabilities.
mysql-test/include/wait_for_slave_sql_error.inc:
- Use rpl_begin_include_file.inc for better debug capabilities.
- Improve documentation
- Use existing atom show_slave_status.inc to print error.
mysql-test/include/wait_for_slave_sql_error_and_skip.inc:
- Use rpl_begin_include_file.inc and rpl_connection.inc for better
debug capabilities.
- Improve documentation
mysql-test/include/wait_for_slave_sql_to_start.inc:
- Use rpl_begin_include_file.inc for better debug capabilities.
- Improve documentation
mysql-test/include/wait_for_slave_sql_to_stop.inc:
- Fail if Last_SQL_Errno is nonzero.
- Fail if server is not configured as slave. Previously, the
script accepted servers not configured as slave because there
was cleanup code called from master-slave.inc that would execute
STOP SLAVE on both master and slave. Now all tests have to
clean up after themselves, so we don't have to call stop slave
at the beginning of tests. Hence, we disallow calling this
script on servers not configured as slaves.
- Use rpl_begin_include_file.inc for better debug capabilities.
- Improve documentation
mysql-test/include/wait_for_slave_to_start.inc:
- Use rpl_begin_include_file.inc for better debug capabilities.
- Improve documentation
mysql-test/include/wait_for_slave_to_stop.inc:
- Use rpl_begin_include_file.inc for better debug capabilities.
- Improve documentation
mysql-test/include/write_var_to_file.inc:
Added file to write contents of a mysqltest variable to file.
(This was previously in setup_fake_relay_log.inc)
mysql-test/mysql-test-run.pl:
Allow tests to require restart in case the test is skipped.
mysql-test/r/init_file.result:
updated result file
mysql-test/r/mysqldump_restore.result:
update result file
mysql-test/suite/binlog/r/binlog_drop_if_exists.result:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/r/binlog_old_versions.result:
updated result file
mysql-test/suite/binlog/r/binlog_query_filter_rules.result:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/r/binlog_server_id.result:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/r/binlog_sf.result:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/r/binlog_sql_mode.result:
updated result file
mysql-test/suite/binlog/t/binlog_auto_increment_bug33029-master.opt:
This test replicates, so it should be in the rpl suite.
Then we can remove this .opt file too.
mysql-test/suite/binlog/t/binlog_drop_if_exists.test:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/t/binlog_old_versions.test:
cosmetic fixes
mysql-test/suite/binlog/t/binlog_query_filter_rules-master.opt:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/t/binlog_query_filter_rules.test:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/t/binlog_server_id.test:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/t/binlog_sf.test:
Moved test that does not use replication to binlog suite.
Since test sets binlog_format internally, it's useless to
re-run it. Hence we source have_binlog_format_statement.inc
mysql-test/suite/binlog/t/binlog_sql_mode.test:
- Test does not use replication, so we remove master-slave.inc.
- mysqltest magically adds --force-if-open to $MYSQL_BINLOG in test
files that source master-slave.inc. So now we have to add
--force-if-open explicitly.
mysql-test/suite/bugs/t/rpl_bug12691.test:
made test clean up after itself
cosmetic fixes
mysql-test/suite/bugs/t/rpl_bug23533.test:
made test clean up after itself
cosmetic fixes
mysql-test/suite/bugs/t/rpl_bug31582.test:
made test clean up after itself
mysql-test/suite/bugs/t/rpl_bug31583.test:
made test clean up after itself
mysql-test/suite/bugs/t/rpl_bug33029.test:
made test clean up after itself
mysql-test/suite/bugs/t/rpl_bug36391.test:
made test clean up after itself
cosmetic fixes
mysql-test/suite/bugs/t/rpl_bug37426.test:
made test clean up after itself
cosmetic fixes
mysql-test/suite/bugs/t/rpl_bug38205.test:
made test clean up after itself
mysql-test/suite/manual/t/rpl_replication_delay.test:
made test clean up after itself
cosmetic fixes
mysql-test/suite/ndb_team/t/rpl_ndb_dd_advance.test:
made test clean up after itself
cosmetic fixes
mysql-test/suite/ndb_team/t/rpl_ndb_extraColMaster.test:
made test clean up after itself
mysql-test/suite/ndb_team/t/rpl_ndb_mix_innodb.test:
made test clean up after itself
cosmetic fixes
mysql-test/suite/parts/r/rpl_partition.result:
updated result file
mysql-test/suite/parts/t/rpl_partition.test:
Make test clean up replication state.
cosmetic fixes
mysql-test/suite/rpl/include/rpl_mixed_ddl.inc:
made test clean up after itself
cosmetic fixes
mysql-test/suite/rpl/include/rpl_mixed_dml.inc:
made test clean up after itself
cosmetic fixes
mysql-test/suite/rpl/r/rpl_000010.result:
update result file
mysql-test/suite/rpl/r/rpl_000011.result:
update result file
mysql-test/suite/rpl/r/rpl_000013.result:
update result file
mysql-test/suite/rpl/r/rpl_000017.result:
update result file
mysql-test/suite/rpl/r/rpl_EE_err.result:
update result file
mysql-test/suite/rpl/r/rpl_LD_INFILE.result:
update result file
mysql-test/suite/rpl/r/rpl_alter.result:
update result file
mysql-test/suite/rpl/r/rpl_alter_db.result:
update result file
mysql-test/suite/rpl/r/rpl_auto_increment.result:
update result file
mysql-test/suite/rpl/r/rpl_auto_increment_11932.result:
update result file
mysql-test/suite/rpl/r/rpl_auto_increment_bug33029.result:
update result file
mysql-test/suite/rpl/r/rpl_auto_increment_update_failure.result:
update result file
mysql-test/suite/rpl/r/rpl_begin_commit_rollback.result:
update result file
mysql-test/suite/rpl/r/rpl_binlog_corruption.result:
Updated result file
mysql-test/suite/rpl/r/rpl_binlog_errors.result:
updated result file
mysql-test/suite/rpl/r/rpl_binlog_grant.result:
update result file
mysql-test/suite/rpl/r/rpl_binlog_max_cache_size.result:
Updated result file
mysql-test/suite/rpl/r/rpl_bit.result:
update result file
mysql-test/suite/rpl/r/rpl_bit_npk.result:
update result file
mysql-test/suite/rpl/r/rpl_blackhole.result:
update result file
mysql-test/suite/rpl/r/rpl_bug26395.result:
update result file
mysql-test/suite/rpl/r/rpl_bug31076.result:
update result file
mysql-test/suite/rpl/r/rpl_bug33931.result:
updated result file
mysql-test/suite/rpl/r/rpl_bug38694.result:
update result file
mysql-test/suite/rpl/r/rpl_change_master.result:
update result file
mysql-test/suite/rpl/r/rpl_charset.result:
update result file
mysql-test/suite/rpl/r/rpl_charset_sjis.result:
update result file
mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result:
Updated result file
mysql-test/suite/rpl/r/rpl_colSize.result:
update result file
mysql-test/suite/rpl/r/rpl_commit_after_flush.result:
update result file
mysql-test/suite/rpl/r/rpl_concurrency_error.result:
update result file
mysql-test/suite/rpl/r/rpl_conditional_comments.result:
update result file
mysql-test/suite/rpl/r/rpl_create_database.result:
update result file
mysql-test/suite/rpl/r/rpl_create_if_not_exists.result:
update result file
mysql-test/suite/rpl/r/rpl_create_tmp_table_if_not_exists.result:
update result file
mysql-test/suite/rpl/r/rpl_cross_version.result:
Updated result file
mysql-test/suite/rpl/r/rpl_current_user.result:
update result file
mysql-test/suite/rpl/r/rpl_deadlock_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_delete_no_where.result:
update result file
mysql-test/suite/rpl/r/rpl_do_grant.result:
updated result file
mysql-test/suite/rpl/r/rpl_drop.result:
update result file
mysql-test/suite/rpl/r/rpl_drop_db.result:
update result file
mysql-test/suite/rpl/r/rpl_drop_temp.result:
update result file
mysql-test/suite/rpl/r/rpl_drop_view.result:
update result file
mysql-test/suite/rpl/r/rpl_dual_pos_advance.result:
update result file
mysql-test/suite/rpl/r/rpl_empty_master_crash.result:
update result file
mysql-test/suite/rpl/r/rpl_err_ignoredtable.result:
update result file
mysql-test/suite/rpl/r/rpl_events.result:
update result file
mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_extra_col_slave_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_extra_col_slave_myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_failed_optimize.result:
update result file
mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result:
update result file
mysql-test/suite/rpl/r/rpl_flushlog_loop.result:
update result file
mysql-test/suite/rpl/r/rpl_foreign_key_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_found_rows.result:
update result file
mysql-test/suite/rpl/r/rpl_free_items.result:
update result file
mysql-test/suite/rpl/r/rpl_geometry.result:
update result file
mysql-test/suite/rpl/r/rpl_get_lock.result:
update result file
mysql-test/suite/rpl/r/rpl_get_master_version_and_clock.result:
update result file
mysql-test/suite/rpl/r/rpl_grant.result:
update result file
mysql-test/suite/rpl/r/rpl_idempotency.result:
update result file
mysql-test/suite/rpl/r/rpl_ignore_grant.result:
update result file
mysql-test/suite/rpl/r/rpl_ignore_revoke.result:
update result file
mysql-test/suite/rpl/r/rpl_ignore_table.result:
update result file
mysql-test/suite/rpl/r/rpl_ignore_table_update.result:
update result file
mysql-test/suite/rpl/r/rpl_incident.result:
update result file
mysql-test/suite/rpl/r/rpl_init_slave.result:
update result file
mysql-test/suite/rpl/r/rpl_init_slave_errors.result:
update result file
mysql-test/suite/rpl/r/rpl_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_innodb_bug28430.result:
update result file
mysql-test/suite/rpl/r/rpl_innodb_bug30888.result:
update result file
mysql-test/suite/rpl/r/rpl_innodb_mixed_ddl.result:
update result file
mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result:
update result file
mysql-test/suite/rpl/r/rpl_insert.result:
update result file
mysql-test/suite/rpl/r/rpl_insert_id.result:
update result file
mysql-test/suite/rpl/r/rpl_insert_id_pk.result:
update result file
mysql-test/suite/rpl/r/rpl_insert_ignore.result:
update result file
mysql-test/suite/rpl/r/rpl_insert_select.result:
update result file
mysql-test/suite/rpl/r/rpl_invoked_features.result:
update result file
mysql-test/suite/rpl/r/rpl_killed_ddl.result:
update result file
mysql-test/suite/rpl/r/rpl_known_bugs_detection.result:
update result file
mysql-test/suite/rpl/r/rpl_load_from_master.result:
update result file
mysql-test/suite/rpl/r/rpl_load_table_from_master.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_charset.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_concurrent.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_fatal.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_m.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_map.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_s.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_simple.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_symlink.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddatalocal.result:
update result file
mysql-test/suite/rpl/r/rpl_loadfile.result:
update result file
mysql-test/suite/rpl/r/rpl_locale.result:
update result file
mysql-test/suite/rpl/r/rpl_log_pos.result:
update result file
mysql-test/suite/rpl/r/rpl_manual_change_index_file.result:
update result file
mysql-test/suite/rpl/r/rpl_many_optimize.result:
update result file
mysql-test/suite/rpl/r/rpl_master_pos_wait.result:
update result file
mysql-test/suite/rpl/r/rpl_misc_functions.result:
update result file
mysql-test/suite/rpl/r/rpl_mixed_bit_pk.result:
update result file
mysql-test/suite/rpl/r/rpl_mixed_ddl_dml.result:
update result file
mysql-test/suite/rpl/r/rpl_multi_delete.result:
update result file
mysql-test/suite/rpl/r/rpl_multi_delete2.result:
update result file
mysql-test/suite/rpl/r/rpl_multi_engine.result:
update result file
mysql-test/suite/rpl/r/rpl_multi_update.result:
update result file
mysql-test/suite/rpl/r/rpl_multi_update2.result:
update result file
mysql-test/suite/rpl/r/rpl_multi_update3.result:
update result file
mysql-test/suite/rpl/r/rpl_multi_update4.result:
update result file
mysql-test/suite/rpl/r/rpl_mysql_upgrade.result:
update result file
mysql-test/suite/rpl/r/rpl_name_const.result:
update result file
mysql-test/suite/rpl/r/rpl_nondeterministic_functions.result:
update result file
mysql-test/suite/rpl/r/rpl_not_null_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_not_null_myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_optimize.result:
update result file
mysql-test/suite/rpl/r/rpl_packet.result:
update result file
mysql-test/suite/rpl/r/rpl_plugin_load.result:
update result file
mysql-test/suite/rpl/r/rpl_ps.result:
update result file
mysql-test/suite/rpl/r/rpl_rbr_to_sbr.result:
update result file
mysql-test/suite/rpl/r/rpl_read_only.result:
update result file
mysql-test/suite/rpl/r/rpl_relay_space_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_relay_space_myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_relayrotate.result:
update result file
mysql-test/suite/rpl/r/rpl_relayspace.result:
update result file
mysql-test/suite/rpl/r/rpl_replicate_do.result:
update result file
mysql-test/suite/rpl/r/rpl_replicate_ignore_db.result:
update result file
mysql-test/suite/rpl/r/rpl_report.result:
update result file
mysql-test/suite/rpl/r/rpl_rewrt_db.result:
update result file
mysql-test/suite/rpl/r/rpl_rotate_logs.result:
update result file
mysql-test/suite/rpl/r/rpl_row_001.result:
update result file
mysql-test/suite/rpl/r/rpl_row_4_bytes.result:
update result file
mysql-test/suite/rpl/r/rpl_row_NOW.result:
update result file
mysql-test/suite/rpl/r/rpl_row_USER.result:
update result file
mysql-test/suite/rpl/r/rpl_row_UUID.result:
update result file
mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result:
update result file
mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_row_basic_8partition.result:
update result file
mysql-test/suite/rpl/r/rpl_row_blob_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_row_blob_myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_row_colSize.result:
update result file
mysql-test/suite/rpl/r/rpl_row_conflicts.result:
update result file
mysql-test/suite/rpl/r/rpl_row_delayed_ins.result:
update result file
mysql-test/suite/rpl/r/rpl_row_drop.result:
update result file
mysql-test/suite/rpl/r/rpl_row_find_row.result:
update result file
mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result:
update result file
mysql-test/suite/rpl/r/rpl_row_func001.result:
update result file
mysql-test/suite/rpl/r/rpl_row_func002.result:
update result file
mysql-test/suite/rpl/r/rpl_row_func003.result:
update result file
mysql-test/suite/rpl/r/rpl_row_inexist_tbl.result:
updated result file
mysql-test/suite/rpl/r/rpl_row_insert_delayed.result:
update result file
mysql-test/suite/rpl/r/rpl_row_log.result:
update result file
mysql-test/suite/rpl/r/rpl_row_log_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_row_max_relay_size.result:
update result file
mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result:
update result file
mysql-test/suite/rpl/r/rpl_row_rec_comp_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_row_rec_comp_myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_row_reset_slave.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp001.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp002_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp003.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp005.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp006_InnoDB.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp007_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp008.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp009.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp010.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp011.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp012.result:
update result file
mysql-test/suite/rpl/r/rpl_row_stop_middle_update.result:
update result file
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_row_tbl_metadata.result:
update result file
mysql-test/suite/rpl/r/rpl_row_trig001.result:
update result file
mysql-test/suite/rpl/r/rpl_row_trig002.result:
update result file
mysql-test/suite/rpl/r/rpl_row_trig003.result:
update result file
mysql-test/suite/rpl/r/rpl_row_trig004.result:
update result file
mysql-test/suite/rpl/r/rpl_row_trunc_temp.result:
update result file
mysql-test/suite/rpl/r/rpl_row_unsafe_funcs.result:
update result file
mysql-test/suite/rpl/r/rpl_row_until.result:
update result file
mysql-test/suite/rpl/r/rpl_row_view01.result:
update result file
mysql-test/suite/rpl/r/rpl_row_wide_table.result:
update result file
mysql-test/suite/rpl/r/rpl_server_id1.result:
update result file
mysql-test/suite/rpl/r/rpl_server_id2.result:
update result file
mysql-test/suite/rpl/r/rpl_session_var.result:
update result file
mysql-test/suite/rpl/r/rpl_set_charset.result:
update result file
mysql-test/suite/rpl/r/rpl_set_null_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_set_null_myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_show_slave_running.result:
update result file
mysql-test/suite/rpl/r/rpl_skip_error.result:
update result file
mysql-test/suite/rpl/r/rpl_slave_grp_exec.result:
update result file
mysql-test/suite/rpl/r/rpl_slave_load_in.result:
update result file
mysql-test/suite/rpl/r/rpl_slave_load_remove_tmpfile.result:
Updated result file
mysql-test/suite/rpl/r/rpl_slave_load_tmpdir_not_exist.result:
updated result file
mysql-test/suite/rpl/r/rpl_slave_skip.result:
update result file
mysql-test/suite/rpl/r/rpl_slave_status.result:
update result file
mysql-test/suite/rpl/r/rpl_slow_query_log.result:
update result file
mysql-test/suite/rpl/r/rpl_sp.result:
update result file
mysql-test/suite/rpl/r/rpl_sp004.result:
update result file
mysql-test/suite/rpl/r/rpl_sp_effects.result:
update result file
mysql-test/suite/rpl/r/rpl_sporadic_master.result:
update result file
mysql-test/suite/rpl/r/rpl_ssl.result:
update result file
mysql-test/suite/rpl/r/rpl_ssl1.result:
update result file
mysql-test/suite/rpl/r/rpl_start_stop_slave.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_000001.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_EE_err2.result:
updated result file
mysql-test/suite/rpl/r/rpl_stm_auto_increment_bug33029.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_binlog_direct.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_conflicts.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_create_if_not_exists.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_flsh_tbls.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_insert_delayed.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_loadfile.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_log.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_max_relay_size.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_multi_query.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_no_op.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_reset_slave.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_sql_mode.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_until.result:
update result file
mysql-test/suite/rpl/r/rpl_stop_slave.result:
update result file
mysql-test/suite/rpl/r/rpl_switch_stm_row_mixed.result:
update result file
mysql-test/suite/rpl/r/rpl_temp_table.result:
update result file
mysql-test/suite/rpl/r/rpl_temp_table_mix_row.result:
update result file
mysql-test/suite/rpl/r/rpl_temporary.result:
update result file
mysql-test/suite/rpl/r/rpl_temporary_errors.result:
update result file
mysql-test/suite/rpl/r/rpl_test_framework.result:
updated result file
mysql-test/suite/rpl/r/rpl_timezone.result:
Updated result file
mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL.result:
update result file
mysql-test/suite/rpl/r/rpl_trigger.result:
update result file
mysql-test/suite/rpl/r/rpl_trunc_temp.result:
update result file
mysql-test/suite/rpl/r/rpl_truncate_2myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_truncate_3innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_typeconv_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_udf.result:
update result file
mysql-test/suite/rpl/r/rpl_user.result:
update result file
mysql-test/suite/rpl/r/rpl_user_variables.result:
update result file
mysql-test/suite/rpl/r/rpl_variables.result:
update result file
mysql-test/suite/rpl/r/rpl_variables_stm.result:
update result file
mysql-test/suite/rpl/r/rpl_view.result:
update result file
mysql-test/suite/rpl/t/rpl000017-slave.sh:
Moved contents of -slave.sh into test.
mysql-test/suite/rpl/t/rpl_000010-slave.opt:
make all rpl tests use prefix rpl_
mysql-test/suite/rpl/t/rpl_000010.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_000011.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_000013.test:
Made test clean up replication state.
Replaced save_master_pos/connection slave/sync_with_master
by sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_000017-slave.opt:
make all rpl tests use prefix rpl_
mysql-test/suite/rpl/t/rpl_000017.test:
Moved contents of -slave.sh into .test
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_EE_err.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_LD_INFILE.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_alter.test:
made test clean up after itself
replaced rpl_diff_tables by diff_tables
cosmetic fixes
mysql-test/suite/rpl/t/rpl_alter_db.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_auto_increment.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_auto_increment_11932.test:
Made test clean up replication state.
don't drop database twice
mysql-test/suite/rpl/t/rpl_auto_increment_bug33029.test:
- This test replicates, so moved it to rpl suite.
- This test uses a fake relay log, so use
include/setup_fake_relay_log.inc and cleanup_fake_relay_log.inc
instead of ad-hoc code.
- Made test clean up replication state (rpl_end.inc)
mysql-test/suite/rpl/t/rpl_auto_increment_update_failure.test:
- Made test clean up replication state.
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_begin_commit_rollback.test:
renamed rpl_end.inc to master-slave-end.inc
mysql-test/suite/rpl/t/rpl_binlog_corruption-master.opt:
Got rid of useless -master.opt file.
mysql-test/suite/rpl/t/rpl_binlog_corruption.test:
Made test clean up replication state.
Made test execute on slave connection instead of on master connection.
This allows us to get rid of -master.opt file.
mysql-test/suite/rpl/t/rpl_binlog_errors.test:
made test use rpl_restart_server.inc instead of restart_mysqld.inc
mysql-test/suite/rpl/t/rpl_binlog_grant.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_binlog_max_cache_size.test:
- Made test clean up replication state.
- replaced wait_for_slave_sql_to_stop.inc by
wait_for_slave_sql_error_and_skip.inc
- renamed diff_master_slave.inc to rpl_diff.inc and
renamed $diff_statement to $rpl_diff_statement
mysql-test/suite/rpl/t/rpl_bit.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_bit_npk.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_blackhole.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_bug26395.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_bug31076.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_bug33931.test:
Made test clean up replication state.
Made test use source include/master-slave.inc instead of
ad-hoc setup.
mysql-test/suite/rpl/t/rpl_bug38694.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_change_master.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_charset.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_charset_sjis.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.cnf:
Use new names of mtr variables (introduced by the changes in
include/circular_rpl_init.inc).
mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test:
- Use rpl_init.inc instead of circular_rpl_for_4_hosts.inc.
Connections have been renamed (server_[1234] instead of master_[abcd]),
we use rpl_sync.inc instead of circular_rpl_for_4_hosts_sync.inc,
we use the new rpl_end.inc to clean up instead of doing it
manually, and we use rpl_change_topology.inc instead of manual
reconfiguration.
- Added comment to make test understandable.
- the test contained a race condition. server_4 was not sync'ed. This could
cause sql_slave_skip_counter to have the value 1 when the test ended, so
check-testcase would complain. Added 'sync_slave_with_master server_4'.
mysql-test/suite/rpl/t/rpl_colSize.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_commit_after_flush.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_concurrency_error.test:
- Made test clean up replication state.
- renamed diff_master_slave.inc to rpl_diff.inc and
renamed $diff_statement to $rpl_diff_statement
mysql-test/suite/rpl/t/rpl_conditional_comments.test:
made test clean up after itself
new protocol for diff_tables.inc
mysql-test/suite/rpl/t/rpl_create_database.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_create_if_not_exists.test:
renamed master-slave-end.inc to rpl_end.inc
mysql-test/suite/rpl/t/rpl_create_tmp_table_if_not_exists.test:
renamed master-slave-end.inc to rpl_end.inc
mysql-test/suite/rpl/t/rpl_critical_errors.test:
Made test clean up replication state.
Fixed syntax error in test.
mysql-test/suite/rpl/t/rpl_cross_version.test:
Made test clean up replication state.
Made test execute on slave connection instead of on master connection.
This allows us to get rid of -master.opt file.
mysql-test/suite/rpl/t/rpl_current_user.cnf:
use environment variables recognized by rpl_init.inc
mysql-test/suite/rpl/t/rpl_current_user.test:
- Use rpl_init.inc instead of ad-hoc three-server setup.
Hence, rename connection slave2 to server_3
- don't drop lots of things at the beginning of the test
- rpl_diff_tables.inc does not sync any more, so we have to
sync here instead
- renamed $diff_table to $rpl_diff_table and $diff_table_list
to $rpl_diff_table_list
- use diff_tables.inc instead of rpl_diff_tables.inc
mysql-test/suite/rpl/t/rpl_ddl.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_deadlock_innodb.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_delete_no_where.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_do_grant.test:
Made test clean up replication state.
renamed master-slave-end.inc to rpl_end.inc
use include/check_slave_no_error.inc instead of ad-hoc construction
mysql-test/suite/rpl/t/rpl_drop.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_drop_db.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_drop_temp.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_drop_view.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_dual_pos_advance.test:
Made test use the new framework for circular replication,
instead of ad-hoc setup.
mysql-test/suite/rpl/t/rpl_empty_master_crash.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_err_ignoredtable.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_events.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_extra_col_master_innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_extra_col_master_myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_extra_col_slave_innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_extra_col_slave_myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_failed_optimize.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_filter_tables_not_exist.test:
renamed master-slave-end.inc to rpl_end.inc
mysql-test/suite/rpl/t/rpl_flushlog_loop-master.opt:
Removed useless options from -master.opt file.
mysql-test/suite/rpl/t/rpl_flushlog_loop-master.sh:
Removed useless -master.sh file
mysql-test/suite/rpl/t/rpl_flushlog_loop-slave.opt:
Removed useless options from -slave.opt file
mysql-test/suite/rpl/t/rpl_flushlog_loop-slave.sh:
Removed useless -slave.sh file
mysql-test/suite/rpl/t/rpl_flushlog_loop.test:
Made test use new framework for circular replication,
instead of ad-hoc setup.
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_foreign_key_innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_found_rows.test:
Made test clean up replication state.
replaced reset_master_and_slave.inc by rpl_reset.inc
mysql-test/suite/rpl/t/rpl_free_items.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_geometry.test:
replaced master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_get_lock.test:
Made test clean up replication state.
Replaced save_master_pos+connection slave+sync_with_master
by sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test:
Made test clean up replication state.
Removed last part of test, because it was verbatim identical to
rpl_server_id1.test
mysql-test/suite/rpl/t/rpl_grant.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_idempotency.test:
use check_slave_no_error.inc instead of ad-hoc tests
use wait_for_slave_sql_error.inc instead of wait_for_slave_to_stop.inc
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_ignore_grant.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_ignore_revoke.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_ignore_table.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_ignore_table_update.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_incident.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_init_slave.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_init_slave_errors.test:
Made test clean up replication state.
Also replaced call to wait_for_slave_sql_to_stop.inc by
call to wait_for_slave_sql_error.inc
mysql-test/suite/rpl/t/rpl_innodb.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_innodb_bug28430.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_innodb_bug30888.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_innodb_mixed_ddl.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_innodb_mixed_dml.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_insert.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_insert_id.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_insert_id_pk.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_insert_ignore.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_insert_select.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_invoked_features.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_killed_ddl.test:
- Made test clean up replication state.
- renamed diff_master_slave.inc to rpl_diff.inc and
renamed $diff_statement to $rpl_diff_statement
mysql-test/suite/rpl/t/rpl_known_bugs_detection.test:
- Made test clean up replication state.
- removed wait_for_slave_sql_to_stop.inc, because it already does
wait_for_slave_sql_error.inc
mysql-test/suite/rpl/t/rpl_load_from_master.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_load_table_from_master.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_loaddata_charset.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_fatal.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_m.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_map.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_s.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_simple.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_symlink.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddatalocal.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loadfile.test:
- Made test clean up replication state.
- replace reset_master_and_slave.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
- diff_tables.inc also restores the connection to what it was before,
so in this test we have to manually change connection
after sourcing diff_tables.inc
mysql-test/suite/rpl/t/rpl_locale.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_log_pos.test:
Made test clean up replication state.
replace stop_slave.inc by stop_slave_sql.inc since the io thread
is already stopped.
mysql-test/suite/rpl/t/rpl_manual_change_index_file.test:
use wait_for_slave_io_error.inc instead of wait_for_slave_to_stop.inc
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_many_optimize.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_master_pos_wait.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_misc_functions.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_mixed_bit_pk.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_mixed_ddl_dml.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_delete.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_delete2.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_engine.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_update.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_multi_update2.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_update3.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_update4.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_mysql_upgrade.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_name_const.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_nondeterministic_functions.test:
- Made test clean up replication state.
- diff_tables.inc now takes only one parameter.
- diff_tables.inc also restores the connection to what it was before,
so in this test we have to manually change connection
after sourcing diff_tables.inc
mysql-test/suite/rpl/t/rpl_not_null_innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_not_null_myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_optimize.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_packet.test:
- Made test clean up replication state.
- replace wait_for_slave_io_to_stop.inc by wait_for_slave_io_error.inc
- replace master-slave-reset.inc by rpl_reset.inc + drop table t1.
- replaced save_master_pos/connection slave/sync_with_master
by sync_slave_with_master.
- added comment explaining why we need stop_slave_sql.inc
(we shouldn't need it, it's a bug)
mysql-test/suite/rpl/t/rpl_plugin_load.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_ps.test:
Made test clean up replication state.
removed lots os useless junk
mysql-test/suite/rpl/t/rpl_rbr_to_sbr.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_read_only.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_relay_space_innodb.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_relay_space_myisam.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_relayrotate.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_relayspace.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_replicate_do.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_replicate_ignore_db.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_report.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_rewrt_db.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_rotate_logs-slave.opt:
Got rid of unnecessary -slave.opt file
mysql-test/suite/rpl/t/rpl_rotate_logs-slave.sh:
Got rid of unnecessary -slave.sh file
mysql-test/suite/rpl/t/rpl_rotate_logs.test:
- Made test clean up replication state.
- replaced wait_for_slave_sql_to_stop.inc by
wait_for_slave_sql_error_and_skip.inc
- removed useless cleanup at beginning of test
- did not make test use the standard replication framework
(master-slave.inc + rpl_end.inc), because it won't work. i don't
know why.
mysql-test/suite/rpl/t/rpl_row_001.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_4_bytes.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_NOW.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_USER.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_UUID.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test:
Made test clean up replication state.
Removed unnecessary 'set binlog_format'.
replaced master-slave-reset.inc by rpl_reset.inc
mysql-test/suite/rpl/t/rpl_row_basic_2myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_basic_3innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_basic_8partition.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_blob_innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_blob_myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_colSize.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_conflicts.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_row_create_table.test:
replace master-slave-end.inc by rpl_end.inc
replace master-slave-reset.inc by rpl_reset.inc
replace long sequence of reset master+reset slave by rpl_reset.inc
mysql-test/suite/rpl/t/rpl_row_delayed_ins.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_row_drop.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_find_row.test:
- Made test clean up replication state.
- replace master-slave-reset.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_row_flsh_tbls.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_row_func001.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_func002.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_func003.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_inexist_tbl.test:
Made test clean up replication state.
replace wait_for_slave_sql_to_stop.inc by wait_for_slave_sql_error.inc
mysql-test/suite/rpl/t/rpl_row_insert_delayed.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_log.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_log_innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test:
Made test clean up replication state
mysql-test/suite/rpl/t/rpl_row_rec_comp_myisam.test:
- replace master-slave-reset.inc by rpl_reset.inc
- Made test clean up replication state
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_row_sp001.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp002_innodb.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_row_sp003.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp005.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp006_InnoDB.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp007_innodb.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_row_sp008.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp009.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp010.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp011.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp012.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_stop_middle_update.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_tabledefs_2myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_tabledefs_3innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test:
- replaced master-slave-reset.inc by rpl_reset.inc
- replaced master-slave-end.inc by rpl_end.inc
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_row_trig001.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_trig002.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_trig003.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_trig004.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_trunc_temp.test:
replaced master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_row_unsafe_funcs.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_until.test:
Made test clean up replication state.
Removed unused mtr variable $VERSION.
mysql-test/suite/rpl/t/rpl_row_view01.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_wide_table.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_server_id1.test:
- Replaced ad-hoc setup of circular replication by call to rpl_init.inc
- Made test clean up replication state.
- Replaced ad-hoc use of wait_for_slave_param.inc by
wait_for_slave_io_error.inc
mysql-test/suite/rpl/t/rpl_server_id2.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_session_var.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_set_charset.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_set_null_innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_set_null_myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_show_slave_running.test:
made test clean up replication state
mysql-test/suite/rpl/t/rpl_skip_error.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_slave_grp_exec.test:
- Made test clean up replication state.
- replaced wait_for_slave_sql_to_stop.inc by wait_for_slave_sql_error.inc
- replaced stop_slave.inc by stop_slave_io.inc where the sql thread
was already stopped.
mysql-test/suite/rpl/t/rpl_slave_load_in.test:
- Made test clean up replication state.
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_slave_load_tmpdir_not_exist.test:
- Made test clean up replication state.
- Replaced call to wait_for_slave_sql_to_stop.inc by call to
wait_for_slave_sql_error.inc
- Replaced ad-hoc repliction setup by call to master-slave.inc
mysql-test/suite/rpl/t/rpl_slave_skip.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_slave_status.test:
Made test clean up replication state.
replaced check that IO thread has stopped by wait_for_slave_io_error.inc
simplified cleanup code
mysql-test/suite/rpl/t/rpl_slow_query_log.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_sp.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_sp004.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_sp_effects.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_sporadic_master.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_ssl.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_ssl1.test:
Made test clean up replication state.
Replaced save_master_pos+connection slave+sync_slave_with_master
by sync_slave_with_master
mysql-test/suite/rpl/t/rpl_start_stop_slave.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_000001.test:
The include file extra/rpl_tests/rpl_stm_000001.test was only
sourced once, in suite/rpl/t/rpl_stm_000001.test.
Moved extra/rpl_tests/rpl_stm_000001.test to
suite/rpl/t/rpl_stm_000001.test and removed the old
suite/rpl/t/rpl_stm_000001.test.
Also made test clean up replication state, and replaced
wait_for_slave_sql_to_stop.inc by wait_for_slave_sql_error_and_skip.inc
mysql-test/suite/rpl/t/rpl_stm_000001.test:
- The include file extra/rpl_tests/rpl_stm_000001.test was only
sourced once, in suite/rpl/t/rpl_stm_000001.test.
Moved extra/rpl_tests/rpl_stm_000001.test to
suite/rpl/t/rpl_stm_000001.test and removed the old
suite/rpl/t/rpl_stm_000001.test.
mysql-test/suite/rpl/t/rpl_stm_auto_increment_bug33029.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_binlog_direct.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_conflicts.test:
replaced master-slave-end.inc by rpl_end.inc
cosmetic fixes
mysql-test/suite/rpl/t/rpl_stm_create_if_not_exists.test:
use rpl_end instead of master-slave-end.
mysql-test/suite/rpl/t/rpl_stm_flsh_tbls.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_stm_insert_delayed.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_loadfile.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_log.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_max_relay_size.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_stm_mixing_engines.test:
- replaced master-slave-end.inc by rpl_end.inc
- replaced master-slave-reset.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_stm_multi_query.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_stm_no_op.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_sql_mode.test:
made test clean up replication state
mysql-test/suite/rpl/t/rpl_stm_until.test:
- Made test clean up replication state.
- replaced master-slave-reset.inc by rpl_reset.inc
- the relay log is now called slave-relay-bin.000003 instead of .000004,
because master-slave.inc doesn't rotate it as much as before.
mysql-test/suite/rpl/t/rpl_stop_slave.test:
use rpl_end instead of master-slav-end
mysql-test/suite/rpl/t/rpl_switch_stm_row_mixed.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_temp_table.test:
Made test clean up replication state.
Replaced save_master_pos/connection slave/sync_with_master
by sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test:
Made test clean up replication state.
replaced ad-hoc call to 'connect' by include/rpl_connect.inc
replaced master-slave-reset.inc by rpl_reset.inc
mysql-test/suite/rpl/t/rpl_temporary.test:
- Made test clean up replication state.
- This test sources include/delete_anonymous_users.inc on master.
This means it updates the user table in the mysql database manually
on the master. This causes failure in the slave sql thread when
binlog_format=row. Hence, we stop the slave first and source
include/delete_anonymous_users.inc on both master and slave.
mysql-test/suite/rpl/t/rpl_temporary_errors.test:
Made test clean up replication state.
cosmetic fixes
mysql-test/suite/rpl/t/rpl_test_framework.cnf:
new cfg file for new test
mysql-test/suite/rpl/t/rpl_test_framework.test:
new test case that verifies that include/rpl_change_topology.inc
works
mysql-test/suite/rpl/t/rpl_timezone.test:
- Made test clean up replication state.
- stop slave before last sub-test, because that test does not use
the slave connection.
mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_trigger.test:
- Made test clean up replication state.
- replace master-slave-reset.inc by rpl_reset.inc
- use new file rpl_reconnect.inc instead of ad-hoc code
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_trunc_temp.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_truncate_2myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_truncate_3innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_typeconv_innodb.test:
- made test clean up replication state
- removed unnecessary call to master-slave-reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_udf.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_user.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_user_variables.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_variables.test:
- Made test clean up replication state.
- replaced reset_master_and_slave.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_variables_stm.test:
- Made test clean up replication state.
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_view.test:
Made test clean up replication state.
mysql-test/suite/rpl_ndb/r/rpl_ndb_2other.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_UUID.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_apply_status.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_auto_inc.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_basic.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_blob.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_blob2.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_circular.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_simplex.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_commit_afterflush.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_ctype_ucs2_def.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_basic.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_partitions.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_ddl.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_delete_nowhere.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_do_db.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_do_table.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_func003.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_idempotent.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb2ndb.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb_trans.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_insert_ignore.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_log.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_mixed_engines_transactions.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_mixed_tables.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_multi.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_multi_update2.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_multi_update3.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_myisam2ndb.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_rep_ignore.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_row_001.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_set_null.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_sp003.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_sp006.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_stm_innodb.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_sync.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_trig004.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb.result:
updated result file
mysql-test/suite/rpl_ndb/t/rpl_ndb_2innodb.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_2myisam.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_2ndb.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_2other.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_UUID.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_apply_status.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_auto_inc.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_bank.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test:
- replaced master-slave-end.inc by rpl_end.inc
- removed wait_for_slave_sql_to_stop since it is followed by
wait_for_slave_sql_error.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_blob.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_blob2.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_circular.test:
made test use rpl_init.inc to setup circular replication, instead of ad-hoc setup
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.cnf:
removed automatic configuration of server as slave. this is not
needed because rpl_init.inc does it.
mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test:
- made test clean up replication state
- it seems that sync_slave_with_master does not work deterministically
here, so instead we wait for 'drop table' to replicate by checking
when the table disappears on slave.
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_simplex.test:
make test clean up replication state
use rpl_change_topology.inc to reconfigure replication topology,
instead of ad-hoc call to change master
mysql-test/suite/rpl_ndb/t/rpl_ndb_commit_afterflush.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_ctype_ucs2_def.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_basic.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_partitions.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_ddl.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_delete_nowhere.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_do_db.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_do_table.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_extraCol.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_func003.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_idempotent.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb_trans.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_insert_ignore.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_load.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_log.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_engines_transactions.test:
- replace master-slave-end.inc by rpl_end.inc
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables.test:
- make test clean up replication state
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl_ndb/t/rpl_ndb_multi.test:
- make test clean up replication state
- use rpl_change_topology.inc to change replication topology,
instead of ad-hoc calls to change master
mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update2.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update3.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_relayrotate.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_rep_ignore.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_row_001.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_set_null.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_sp003.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_sp006.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_stm_innodb.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_sync.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_trig004.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndbapi_multi.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_row_basic_7ndb.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb_2.test:
make test clean up replication state
mysql-test/suite/sys_vars/t/rpl_init_slave_func.test:
made test clean up after itself
mysql-test/t/init_file.test:
use new file force_restart.inc instead of SP
2010-12-19 18:07:28 +01:00
include/master-slave.inc
[connection master]
2005-11-10 17:50:51 +01:00
drop database if exists mysqltest1;
create database mysqltest1;
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
use mysqltest1;
create table t1 (a varchar(100));
use mysqltest1;
create procedure foo()
begin
declare b int;
set b = 8;
insert into t1 values (b);
insert into t1 values (unix_timestamp());
end|
select * from mysql.proc where name='foo' and db='mysqltest1';
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
2005-11-10 17:50:51 +01:00
mysqltest1 foo PROCEDURE foo SQL CONTAINS_SQL NO DEFINER begin
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
declare b int;
set b = 8;
insert into t1 values (b);
insert into t1 values (unix_timestamp());
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
end root@localhost # # latin1 latin1_swedish_ci latin1_swedish_ci begin
declare b int;
set b = 8;
insert into t1 values (b);
insert into t1 values (unix_timestamp());
end
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
select * from mysql.proc where name='foo' and db='mysqltest1';
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
2005-11-10 17:50:51 +01:00
mysqltest1 foo PROCEDURE foo SQL CONTAINS_SQL NO DEFINER begin
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
declare b int;
set b = 8;
insert into t1 values (b);
insert into t1 values (unix_timestamp());
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
end root@localhost # # latin1 latin1_swedish_ci latin1_swedish_ci begin
declare b int;
set b = 8;
insert into t1 values (b);
insert into t1 values (unix_timestamp());
end
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
set timestamp=1000000000;
call foo();
select * from t1;
a
8
1000000000
select * from t1;
a
8
1000000000
delete from t1;
create procedure foo2()
select * from mysqltest1.t1;
call foo2();
a
alter procedure foo2 contains sql;
drop table t1;
create table t1 (a int);
create table t2 like t1;
create procedure foo3()
deterministic
insert into t1 values (15);
grant CREATE ROUTINE, EXECUTE on mysqltest1.* to "zedjzlcsjhd"@127.0.0.1;
grant SELECT on mysqltest1.t1 to "zedjzlcsjhd"@127.0.0.1;
grant SELECT, INSERT on mysqltest1.t2 to "zedjzlcsjhd"@127.0.0.1;
2006-01-04 15:25:51 +01:00
SELECT 1;
1
1
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
create procedure foo4()
deterministic
begin
insert into t2 values(3);
insert into t1 values (5);
end|
call foo4();
2005-05-05 18:28:54 +02:00
Got one of the listed errors
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
call foo3();
show warnings;
Level Code Message
call foo4();
2005-05-05 18:28:54 +02:00
Got one of the listed errors
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
alter procedure foo4 sql security invoker;
call foo4();
show warnings;
Level Code Message
select * from t1;
a
15
5
select * from t2;
a
3
3
3
select * from t1;
a
15
5
select * from t2;
a
3
2005-08-25 15:34:34 +02:00
3
3
2005-11-10 17:50:51 +01:00
delete from t2;
alter table t2 add unique (a);
drop procedure foo4;
create procedure foo4()
deterministic
begin
insert into t2 values(20),(20);
end|
call foo4();
2006-11-15 16:08:47 +01:00
ERROR 23000: Duplicate entry '20' for key 'a'
2005-11-10 17:50:51 +01:00
show warnings;
Level Code Message
2007-06-06 19:57:07 +02:00
Error 1062 Duplicate entry '20' for key 'a'
2009-11-03 20:02:56 +01:00
Warning 1196 Some non-transactional changed tables couldn't be rolled back
2005-11-10 17:50:51 +01:00
select * from t2;
a
20
select * from t2;
a
20
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
select * from mysql.proc where name="foo4" and db='mysqltest1';
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
2005-11-10 17:50:51 +01:00
mysqltest1 foo4 PROCEDURE foo4 SQL CONTAINS_SQL YES DEFINER begin
insert into t2 values(20),(20);
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
end root@localhost # # latin1 latin1_swedish_ci latin1_swedish_ci begin
insert into t2 values(20),(20);
end
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
drop procedure foo4;
select * from mysql.proc where name="foo4" and db='mysqltest1';
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
select * from mysql.proc where name="foo4" and db='mysqltest1';
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
drop procedure foo;
drop procedure foo2;
drop procedure foo3;
create function fn1(x int)
returns int
2005-11-10 17:50:51 +01:00
begin
insert into t1 values (x);
return x+2;
end|
ERROR HY000: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
create function fn1(x int)
returns int
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
deterministic
begin
insert into t1 values (x);
return x+2;
end|
delete t1,t2 from t1,t2;
select fn1(20);
fn1(20)
22
insert into t2 values(fn1(21));
select * from t1;
a
21
20
select * from t2;
a
23
select * from t1;
a
21
2005-08-25 15:34:34 +02:00
20
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
select * from t2;
a
23
drop function fn1;
create function fn1()
returns int
2005-11-10 17:50:51 +01:00
no sql
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
begin
return unix_timestamp();
end|
2005-11-10 17:50:51 +01:00
alter function fn1 contains sql;
ERROR HY000: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
delete from t1;
set timestamp=1000000000;
insert into t1 values(fn1());
2005-11-10 17:50:51 +01:00
create function fn2()
returns int
no sql
begin
return unix_timestamp();
end|
ERROR HY000: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
BUG#37975: wait_for_slave_* should increase the timeout
Problem 1: tests often fail in pushbuild with a timeout when waiting
for the slave to start/stop/receive error.
Fix 1: Updated the wait_for_slave_* macros in the following way:
- The timeout is increased by a factor ten
- Refactored the macros so that wait_for_slave_param does the work for
the other macros.
Problem 2: Tests are often incorrectly written, lacking a
source include/wait_for_slave_to_[start|stop].inc.
Fix 2: Improved the chance to get it right by adding
include/start_slave.inc and include/stop_slave.inc, and updated tests
to use these.
Problem 3: The the built-in test language command
wait_for_slave_to_stop is a misnomer (does not wait for the slave io
thread) and does not give as much debug info in case of failure as
the otherwise equivalent macro
source include/wait_for_slave_sql_to_stop.inc
Fix 3: Replaced all calls to the built-in command by a call to the
macro.
Problem 4: Some, but not all, of the wait_for_slave_* macros had an
implicit connection slave. This made some tests confusing to read,
and made it more difficult to use the macro in circular replication
scenarios, where the connection named master needs to wait.
Fix 4: Removed the implicit connection slave from all
wait_for_slave_* macros, and updated tests to use an explicit
connection slave where necessary.
Problem 5: The macros wait_slave_status.inc and wait_show_pattern.inc
were unused. Moreover, using them is difficult and error-prone.
Fix 5: remove these macros.
Problem 6: log_bin_trust_function_creators_basic failed when running
tests because it assumed @@global.log_bin_trust_function_creators=1,
and some tests modified this variable without resetting it to its
original value.
Fix 6: All tests that use this variable have been updated so that
they reset the value at end of test.
mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test:
Replaced wait_for_slave_to_stop by include/wait_for_slave_sql_to_stop.inc
mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test:
Replaced wait_for_slave_to_stop by include/wait_for_slave_sql_to_stop.inc
Added connection slave since includ/wait_for_slave_sql_to_stop.inc
does not do that anymore.
mysql-test/extra/rpl_tests/rpl_log.test:
Replaced start slave+wait_slave_status by start_slave.inc
mysql-test/include/reset_master_and_slave.inc:
replaced start/stop slave by start_slave.inc/stop_slave.inc
mysql-test/include/sync_slave_io_with_master.inc:
Improved comments and error message.
mysql-test/include/wait_for_slave_io_to_stop.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_param.inc:
- Improved usage instructions
- Added more debug info in case of timeout
- Added parameters $slave_param_comparison, $slave_timeout,
$slave_keep_connection, $slave_error_message
mysql-test/include/wait_for_slave_sql_error.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_sql_to_start.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_sql_to_stop.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_to_start.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_to_stop.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_show_pattern.inc:
Removed unused (and error-prone) file
mysql-test/include/wait_slave_status.inc:
Removed unused (and error-prone) file
mysql-test/suite/binlog/t/binlog_auto_increment_bug33029.test:
Renamed $keep_connection to $slave_keep_connection.
mysql-test/suite/rpl/t/rpl_bug26395.test:
Replace stop slave by stop_slave.inc
mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test:
Replace start/stop slave by start_slave.inc/stop_slave.inc.
Replace wait_for_slave_param by wait_for_slave_sql_to_stop.inc.
mysql-test/suite/rpl/t/rpl_dual_pos_advance.test:
Renamed $keep_connection to $slave_keep_connection.
mysql-test/suite/rpl/t/rpl_flushlog_loop.test:
Replace wait_slave_status by start_slave.inc
mysql-test/suite/rpl/t/rpl_idempotency.test:
Added connection slave since wait_for_slave_sql_to_stop.inc does not
do that any more.
mysql-test/suite/rpl/t/rpl_incident.test:
Replaced wait_for_slave_to_stop by wait_for_slave_sql_to_stop.inc
mysql-test/suite/rpl/t/rpl_init_slave.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced save_master_pos;connection slave;sync_with_master by
sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_log_pos.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced wait_for_slave_param by other wait_for_slave_* macros.
mysql-test/suite/rpl/t/rpl_packet.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_row_inexist_tbl.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_row_stop_middle_update.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_row_until.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced save_master_pos;connection slave;sync_with_master by
sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_server_id1.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_slave_grp_exec.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_slave_skip.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_slave_status.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_sp.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/suite/rpl/t/rpl_sp_effects.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/suite/rpl/t/rpl_stm_until.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced save_master_pos;connection slave;sync_with_master by
sync_slave_with_master.
mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test:
Replaced start slave by start_slave.inc.
Added explicit connection slave since wait_for_slave_sql_to_stop.inc
does not do that anymore.
mysql-test/t/disabled.def:
Disabled failing test.
mysql-test/t/func_time.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/grant.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/grant2.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/innodb_notembedded.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/log_bin_trust_function_creators_func.test:
Restore @@global.log_bin_trust_function_creators at end of test.
Clean up at end of test by dropping the created user.
mysql-test/t/query_cache.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/query_cache_notembedded.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/rpl_init_slave_func.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/t/timezone2.test:
Restore @@global.log_bin_trust_function_creators at end of test.
2008-07-10 18:09:39 +02:00
set @old_log_bin_trust_function_creators= @@global.log_bin_trust_function_creators;
2005-11-10 17:50:51 +01:00
set global log_bin_trust_function_creators=0;
set global log_bin_trust_function_creators=1;
BUG#37975: wait_for_slave_* should increase the timeout
Problem 1: tests often fail in pushbuild with a timeout when waiting
for the slave to start/stop/receive error.
Fix 1: Updated the wait_for_slave_* macros in the following way:
- The timeout is increased by a factor ten
- Refactored the macros so that wait_for_slave_param does the work for
the other macros.
Problem 2: Tests are often incorrectly written, lacking a
source include/wait_for_slave_to_[start|stop].inc.
Fix 2: Improved the chance to get it right by adding
include/start_slave.inc and include/stop_slave.inc, and updated tests
to use these.
Problem 3: The the built-in test language command
wait_for_slave_to_stop is a misnomer (does not wait for the slave io
thread) and does not give as much debug info in case of failure as
the otherwise equivalent macro
source include/wait_for_slave_sql_to_stop.inc
Fix 3: Replaced all calls to the built-in command by a call to the
macro.
Problem 4: Some, but not all, of the wait_for_slave_* macros had an
implicit connection slave. This made some tests confusing to read,
and made it more difficult to use the macro in circular replication
scenarios, where the connection named master needs to wait.
Fix 4: Removed the implicit connection slave from all
wait_for_slave_* macros, and updated tests to use an explicit
connection slave where necessary.
Problem 5: The macros wait_slave_status.inc and wait_show_pattern.inc
were unused. Moreover, using them is difficult and error-prone.
Fix 5: remove these macros.
Problem 6: log_bin_trust_function_creators_basic failed when running
tests because it assumed @@global.log_bin_trust_function_creators=1,
and some tests modified this variable without resetting it to its
original value.
Fix 6: All tests that use this variable have been updated so that
they reset the value at end of test.
mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test:
Replaced wait_for_slave_to_stop by include/wait_for_slave_sql_to_stop.inc
mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test:
Replaced wait_for_slave_to_stop by include/wait_for_slave_sql_to_stop.inc
Added connection slave since includ/wait_for_slave_sql_to_stop.inc
does not do that anymore.
mysql-test/extra/rpl_tests/rpl_log.test:
Replaced start slave+wait_slave_status by start_slave.inc
mysql-test/include/reset_master_and_slave.inc:
replaced start/stop slave by start_slave.inc/stop_slave.inc
mysql-test/include/sync_slave_io_with_master.inc:
Improved comments and error message.
mysql-test/include/wait_for_slave_io_to_stop.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_param.inc:
- Improved usage instructions
- Added more debug info in case of timeout
- Added parameters $slave_param_comparison, $slave_timeout,
$slave_keep_connection, $slave_error_message
mysql-test/include/wait_for_slave_sql_error.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_sql_to_start.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_sql_to_stop.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_to_start.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_to_stop.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_show_pattern.inc:
Removed unused (and error-prone) file
mysql-test/include/wait_slave_status.inc:
Removed unused (and error-prone) file
mysql-test/suite/binlog/t/binlog_auto_increment_bug33029.test:
Renamed $keep_connection to $slave_keep_connection.
mysql-test/suite/rpl/t/rpl_bug26395.test:
Replace stop slave by stop_slave.inc
mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test:
Replace start/stop slave by start_slave.inc/stop_slave.inc.
Replace wait_for_slave_param by wait_for_slave_sql_to_stop.inc.
mysql-test/suite/rpl/t/rpl_dual_pos_advance.test:
Renamed $keep_connection to $slave_keep_connection.
mysql-test/suite/rpl/t/rpl_flushlog_loop.test:
Replace wait_slave_status by start_slave.inc
mysql-test/suite/rpl/t/rpl_idempotency.test:
Added connection slave since wait_for_slave_sql_to_stop.inc does not
do that any more.
mysql-test/suite/rpl/t/rpl_incident.test:
Replaced wait_for_slave_to_stop by wait_for_slave_sql_to_stop.inc
mysql-test/suite/rpl/t/rpl_init_slave.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced save_master_pos;connection slave;sync_with_master by
sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_log_pos.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced wait_for_slave_param by other wait_for_slave_* macros.
mysql-test/suite/rpl/t/rpl_packet.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_row_inexist_tbl.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_row_stop_middle_update.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_row_until.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced save_master_pos;connection slave;sync_with_master by
sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_server_id1.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_slave_grp_exec.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_slave_skip.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_slave_status.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_sp.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/suite/rpl/t/rpl_sp_effects.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/suite/rpl/t/rpl_stm_until.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced save_master_pos;connection slave;sync_with_master by
sync_slave_with_master.
mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test:
Replaced start slave by start_slave.inc.
Added explicit connection slave since wait_for_slave_sql_to_stop.inc
does not do that anymore.
mysql-test/t/disabled.def:
Disabled failing test.
mysql-test/t/func_time.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/grant.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/grant2.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/innodb_notembedded.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/log_bin_trust_function_creators_func.test:
Restore @@global.log_bin_trust_function_creators at end of test.
Clean up at end of test by dropping the created user.
mysql-test/t/query_cache.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/query_cache_notembedded.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/rpl_init_slave_func.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/t/timezone2.test:
Restore @@global.log_bin_trust_function_creators at end of test.
2008-07-10 18:09:39 +02:00
set @old_log_bin_trust_function_creators= @@global.log_bin_trust_function_creators;
2005-11-10 17:50:51 +01:00
set global log_bin_trust_function_creators=1;
create function fn2()
returns int
no sql
begin
return unix_timestamp();
end|
create function fn3()
returns int
not deterministic
reads sql data
begin
return 0;
end|
select fn3();
fn3()
0
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
select * from mysql.proc where db='mysqltest1';
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
2005-11-10 17:50:51 +01:00
mysqltest1 fn1 FUNCTION fn1 SQL NO_SQL NO DEFINER int(11) begin
return unix_timestamp();
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
end root@localhost # # latin1 latin1_swedish_ci latin1_swedish_ci begin
return unix_timestamp();
end
2005-11-10 17:50:51 +01:00
mysqltest1 fn2 FUNCTION fn2 SQL NO_SQL NO DEFINER int(11) begin
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
return unix_timestamp();
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
end zedjzlcsjhd@localhost # # latin1 latin1_swedish_ci latin1_swedish_ci begin
return unix_timestamp();
end
2005-11-10 17:50:51 +01:00
mysqltest1 fn3 FUNCTION fn3 SQL READS_SQL_DATA NO DEFINER int(11) begin
return 0;
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
end root@localhost # # latin1 latin1_swedish_ci latin1_swedish_ci begin
return 0;
end
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
select * from t1;
a
1000000000
use mysqltest1;
select * from t1;
a
1000000000
select * from mysql.proc where db='mysqltest1';
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8
2005-11-10 17:50:51 +01:00
mysqltest1 fn1 FUNCTION fn1 SQL NO_SQL NO DEFINER int(11) begin
return unix_timestamp();
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
end root@localhost # # latin1 latin1_swedish_ci latin1_swedish_ci begin
return unix_timestamp();
end
2005-11-10 17:50:51 +01:00
mysqltest1 fn2 FUNCTION fn2 SQL NO_SQL NO DEFINER int(11) begin
Approximative fixes for BUG#2610,2611,9100 i.e. WL#2146 binlogging/replication of routines (stored procs and functions).
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.
2005-05-05 14:20:53 +02:00
return unix_timestamp();
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
end zedjzlcsjhd@localhost # # latin1 latin1_swedish_ci latin1_swedish_ci begin
return unix_timestamp();
end
2005-11-10 17:50:51 +01:00
mysqltest1 fn3 FUNCTION fn3 SQL READS_SQL_DATA NO DEFINER int(11) begin
return 0;
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
end root@localhost # # latin1 latin1_swedish_ci latin1_swedish_ci begin
return 0;
end
2005-11-10 17:50:51 +01:00
delete from t2;
alter table t2 add unique (a);
drop function fn1;
Fix for BUG#14769 "Function fails to replicate if fails half-way (slave stops)":
if the function, invoked in a non-binlogged caller (e.g. SELECT, DO), failed half-way on the master,
slave would stop and complain that error code between him and master mismatch.
To solve this, when a stored function is invoked in a non-binlogged caller (e.g. SELECT, DO), we binlog the function
call as SELECT instead of as DO (see revision comment of sp_head.cc for more).
And: minor wording change in the help text.
This cset will cause conflicts in 5.1, I'll merge.
mysql-test/r/rpl_sp.result:
result update
mysql-test/t/rpl_sp-slave.opt:
bug just fixed so option not needed
mysql-test/t/rpl_sp.test:
test for more half-failed functions with DO and SELECT, to test the bug of this changeset.
cleanup at the end.
sql/mysqld.cc:
function -> stored function (change suggested by Paul)
sql/sp_head.cc:
When a function updates data and is called from a non-binlogged statement (SELECT, DO), we binlog it
as SELECT myfunc(), and not DO myfunc() like before.
2006-02-18 17:26:30 +01:00
create function fn1(x int)
2005-11-10 17:50:51 +01:00
returns int
begin
Fix for BUG#14769 "Function fails to replicate if fails half-way (slave stops)":
if the function, invoked in a non-binlogged caller (e.g. SELECT, DO), failed half-way on the master,
slave would stop and complain that error code between him and master mismatch.
To solve this, when a stored function is invoked in a non-binlogged caller (e.g. SELECT, DO), we binlog the function
call as SELECT instead of as DO (see revision comment of sp_head.cc for more).
And: minor wording change in the help text.
This cset will cause conflicts in 5.1, I'll merge.
mysql-test/r/rpl_sp.result:
result update
mysql-test/t/rpl_sp-slave.opt:
bug just fixed so option not needed
mysql-test/t/rpl_sp.test:
test for more half-failed functions with DO and SELECT, to test the bug of this changeset.
cleanup at the end.
sql/mysqld.cc:
function -> stored function (change suggested by Paul)
sql/sp_head.cc:
When a function updates data and is called from a non-binlogged statement (SELECT, DO), we binlog it
as SELECT myfunc(), and not DO myfunc() like before.
2006-02-18 17:26:30 +01:00
insert into t2 values(x),(x);
2005-11-10 17:50:51 +01:00
return 10;
end|
Fix for BUG#14769 "Function fails to replicate if fails half-way (slave stops)":
if the function, invoked in a non-binlogged caller (e.g. SELECT, DO), failed half-way on the master,
slave would stop and complain that error code between him and master mismatch.
To solve this, when a stored function is invoked in a non-binlogged caller (e.g. SELECT, DO), we binlog the function
call as SELECT instead of as DO (see revision comment of sp_head.cc for more).
And: minor wording change in the help text.
This cset will cause conflicts in 5.1, I'll merge.
mysql-test/r/rpl_sp.result:
result update
mysql-test/t/rpl_sp-slave.opt:
bug just fixed so option not needed
mysql-test/t/rpl_sp.test:
test for more half-failed functions with DO and SELECT, to test the bug of this changeset.
cleanup at the end.
sql/mysqld.cc:
function -> stored function (change suggested by Paul)
sql/sp_head.cc:
When a function updates data and is called from a non-binlogged statement (SELECT, DO), we binlog it
as SELECT myfunc(), and not DO myfunc() like before.
2006-02-18 17:26:30 +01:00
do fn1(100);
Warnings:
2007-06-06 19:57:07 +02:00
Error 1062 Duplicate entry '100' for key 'a'
2009-11-03 20:02:56 +01:00
Warning 1196 Some non-transactional changed tables couldn't be rolled back
Fix for BUG#14769 "Function fails to replicate if fails half-way (slave stops)":
if the function, invoked in a non-binlogged caller (e.g. SELECT, DO), failed half-way on the master,
slave would stop and complain that error code between him and master mismatch.
To solve this, when a stored function is invoked in a non-binlogged caller (e.g. SELECT, DO), we binlog the function
call as SELECT instead of as DO (see revision comment of sp_head.cc for more).
And: minor wording change in the help text.
This cset will cause conflicts in 5.1, I'll merge.
mysql-test/r/rpl_sp.result:
result update
mysql-test/t/rpl_sp-slave.opt:
bug just fixed so option not needed
mysql-test/t/rpl_sp.test:
test for more half-failed functions with DO and SELECT, to test the bug of this changeset.
cleanup at the end.
sql/mysqld.cc:
function -> stored function (change suggested by Paul)
sql/sp_head.cc:
When a function updates data and is called from a non-binlogged statement (SELECT, DO), we binlog it
as SELECT myfunc(), and not DO myfunc() like before.
2006-02-18 17:26:30 +01:00
select fn1(20);
2006-11-15 16:08:47 +01:00
ERROR 23000: Duplicate entry '20' for key 'a'
2005-11-10 17:50:51 +01:00
select * from t2;
a
20
Fix for BUG#14769 "Function fails to replicate if fails half-way (slave stops)":
if the function, invoked in a non-binlogged caller (e.g. SELECT, DO), failed half-way on the master,
slave would stop and complain that error code between him and master mismatch.
To solve this, when a stored function is invoked in a non-binlogged caller (e.g. SELECT, DO), we binlog the function
call as SELECT instead of as DO (see revision comment of sp_head.cc for more).
And: minor wording change in the help text.
This cset will cause conflicts in 5.1, I'll merge.
mysql-test/r/rpl_sp.result:
result update
mysql-test/t/rpl_sp-slave.opt:
bug just fixed so option not needed
mysql-test/t/rpl_sp.test:
test for more half-failed functions with DO and SELECT, to test the bug of this changeset.
cleanup at the end.
sql/mysqld.cc:
function -> stored function (change suggested by Paul)
sql/sp_head.cc:
When a function updates data and is called from a non-binlogged statement (SELECT, DO), we binlog it
as SELECT myfunc(), and not DO myfunc() like before.
2006-02-18 17:26:30 +01:00
100
2005-11-10 17:50:51 +01:00
select * from t2;
a
20
Fix for BUG#14769 "Function fails to replicate if fails half-way (slave stops)":
if the function, invoked in a non-binlogged caller (e.g. SELECT, DO), failed half-way on the master,
slave would stop and complain that error code between him and master mismatch.
To solve this, when a stored function is invoked in a non-binlogged caller (e.g. SELECT, DO), we binlog the function
call as SELECT instead of as DO (see revision comment of sp_head.cc for more).
And: minor wording change in the help text.
This cset will cause conflicts in 5.1, I'll merge.
mysql-test/r/rpl_sp.result:
result update
mysql-test/t/rpl_sp-slave.opt:
bug just fixed so option not needed
mysql-test/t/rpl_sp.test:
test for more half-failed functions with DO and SELECT, to test the bug of this changeset.
cleanup at the end.
sql/mysqld.cc:
function -> stored function (change suggested by Paul)
sql/sp_head.cc:
When a function updates data and is called from a non-binlogged statement (SELECT, DO), we binlog it
as SELECT myfunc(), and not DO myfunc() like before.
2006-02-18 17:26:30 +01:00
100
2005-05-06 18:52:19 +02:00
create trigger trg before insert on t1 for each row set new.a= 10;
2006-11-15 16:08:47 +01:00
ERROR 42000: TRIGGER command denied to user 'zedjzlcsjhd'@'localhost' for table 't1'
2005-05-06 18:52:19 +02:00
delete from t1;
create trigger trg before insert on t1 for each row set new.a= 10;
insert into t1 values (1);
select * from t1;
a
10
select * from t1;
a
10
delete from t1;
2005-07-19 18:06:49 +02:00
drop trigger trg;
2005-05-06 18:52:19 +02:00
insert into t1 values (1);
select * from t1;
a
1
2007-01-08 23:52:21 +01:00
select * from t1;
a
1
create procedure foo()
not deterministic
reads sql data
select * from t1;
call foo();
a
1
drop procedure foo;
drop function fn1;
drop database mysqltest1;
drop user "zedjzlcsjhd"@127.0.0.1;
use test;
use test;
drop function if exists f1;
create function f1() returns int reads sql data
begin
declare var integer;
declare c cursor for select a from v1;
open c;
fetch c into var;
close c;
return var;
end|
create view v1 as select 1 as a;
create table t1 (a int);
insert into t1 (a) values (f1());
select * from t1;
a
1
drop view v1;
drop function f1;
select * from t1;
a
1
DROP PROCEDURE IF EXISTS p1;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1(col VARCHAR(10));
CREATE PROCEDURE p1(arg VARCHAR(10))
INSERT INTO t1 VALUES(arg);
CALL p1('test');
SELECT * FROM t1;
col
test
SELECT * FROM t1;
col
test
DROP PROCEDURE p1;
---> Test for BUG#20438
---> Preparing environment...
---> connection: master
DROP PROCEDURE IF EXISTS p1;
DROP FUNCTION IF EXISTS f1;
---> Synchronizing slave with master...
---> connection: master
---> Creating procedure...
/*!50003 CREATE PROCEDURE p1() SET @a = 1 */;
/*!50003 CREATE FUNCTION f1() RETURNS INT RETURN 0 */;
---> Checking on master...
SHOW CREATE PROCEDURE p1;
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
2007-01-08 23:52:21 +01:00
p1 CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
SET @a = 1 latin1 latin1_swedish_ci latin1_swedish_ci
2007-01-08 23:52:21 +01:00
SHOW CREATE FUNCTION f1;
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
Function sql_mode Create Function character_set_client collation_connection Database Collation
2007-01-08 23:52:21 +01:00
f1 CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
RETURN 0 latin1 latin1_swedish_ci latin1_swedish_ci
2007-01-08 23:52:21 +01:00
---> Synchronizing slave with master...
---> connection: master
---> Checking on slave...
SHOW CREATE PROCEDURE p1;
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
2007-01-08 23:52:21 +01:00
p1 CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
SET @a = 1 latin1 latin1_swedish_ci latin1_swedish_ci
2007-01-08 23:52:21 +01:00
SHOW CREATE FUNCTION f1;
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
Function sql_mode Create Function character_set_client collation_connection Database Collation
2007-01-08 23:52:21 +01:00
f1 CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
Patch for the following bugs:
- BUG#11986: Stored routines and triggers can fail if the code
has a non-ascii symbol
- BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
- BUG#19443: INFORMATION_SCHEMA does not support charsets properly
- BUG#21249: Character set of SP-var can be ignored
- BUG#25212: Character set of string constant is ignored (stored routines)
- BUG#25221: Character set of string constant is ignored (triggers)
There were a few general problems that caused these bugs:
1. Character set information of the original (definition) query for views,
triggers, stored routines and events was lost.
2. mysqldump output query in client character set, which can be
inappropriate to encode definition-query.
3. INFORMATION_SCHEMA used strings with mixed encodings to display object
definition;
1. No query-definition-character set.
In order to compile query into execution code, some extra data (such as
environment variables or the database character set) is used. The problem
here was that this context was not preserved. So, on the next load it can
differ from the original one, thus the result will be different.
The context contains the following data:
- client character set;
- connection collation (character set and collation);
- collation of the owner database;
The fix is to store this context and use it each time we parse (compile)
and execute the object (stored routine, trigger, ...).
2. Wrong mysqldump-output.
The original query can contain several encodings (by means of character set
introducers). The problem here was that we tried to convert original query
to the mysqldump-client character set.
Moreover, we stored queries in different character sets for different
objects (views, for one, used UTF8, triggers used original character set).
The solution is
- to store definition queries in the original character set;
- to change SHOW CREATE statement to output definition query in the
binary character set (i.e. without any conversion);
- introduce SHOW CREATE TRIGGER statement;
- to dump special statements to switch the context to the original one
before dumping and restore it afterwards.
Note, in order to preserve the database collation at the creation time,
additional ALTER DATABASE might be used (to temporary switch the database
collation back to the original value). In this case, ALTER DATABASE
privilege will be required. This is a backward-incompatible change.
3. INFORMATION_SCHEMA showed non-UTF8 strings
The fix is to generate UTF8-query during the parsing, store it in the object
and show it in the INFORMATION_SCHEMA.
Basically, the idea is to create a copy of the original query convert it to
UTF8. Character set introducers are removed and all text literals are
converted to UTF8.
This UTF8 query is intended to provide user-readable output. It must not be
used to recreate the object. Specialized SHOW CREATE statements should be
used for this.
The reason for this limitation is the following: the original query can
contain symbols from several character sets (by means of character set
introducers).
Example:
- original query:
CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
- UTF8 query (for INFORMATION_SCHEMA):
CREATE VIEW v1 AS SELECT 'Hello' AS c1;
client/mysqldump.c:
Set original character set and collation before dumping definition query.
include/my_sys.h:
Move out-parameter to the end of list.
mysql-test/lib/mtr_report.pl:
Ignore server-warnings during the test case.
mysql-test/r/create.result:
Update result file.
mysql-test/r/ctype_cp932_binlog_stm.result:
Update result file.
mysql-test/r/events.result:
Update result file.
mysql-test/r/events_bugs.result:
Update result file.
mysql-test/r/events_grant.result:
Update result file.
mysql-test/r/func_in.result:
Update result file.
mysql-test/r/gis.result:
Update result file.
mysql-test/r/grant.result:
Update result file.
mysql-test/r/information_schema.result:
Update result file.
mysql-test/r/information_schema_db.result:
Update result file.
mysql-test/r/lowercase_view.result:
Update result file.
mysql-test/r/mysqldump.result:
Update result file.
mysql-test/r/ndb_sp.result:
Update result file.
mysql-test/r/ps.result:
Update result file.
mysql-test/r/rpl_replicate_do.result:
Update result file.
mysql-test/r/rpl_sp.result:
Update result file.
mysql-test/r/rpl_trigger.result:
Update result file.
mysql-test/r/rpl_view.result:
Update result file.
mysql-test/r/show_check.result:
Update result file.
mysql-test/r/skip_grants.result:
Update result file.
mysql-test/r/sp-destruct.result:
Update result file.
mysql-test/r/sp-error.result:
Update result file.
mysql-test/r/sp-security.result:
Update result file.
mysql-test/r/sp.result:
Update result file.
mysql-test/r/sql_mode.result:
Update result file.
mysql-test/r/system_mysql_db.result:
Update result file.
mysql-test/r/temp_table.result:
Update result file.
mysql-test/r/trigger-compat.result:
Update result file.
mysql-test/r/trigger-grant.result:
Update result file.
mysql-test/r/trigger.result:
Update result file.
mysql-test/r/view.result:
Update result file.
mysql-test/r/view_grant.result:
Update result file.
mysql-test/t/events.test:
Update test case (new columns added).
mysql-test/t/information_schema.test:
Update test case (new columns added).
mysql-test/t/show_check.test:
Test case for SHOW CREATE TRIGGER in prepared statements and
stored routines.
mysql-test/t/sp-destruct.test:
Update test case (new columns added).
mysql-test/t/sp.test:
Update test case (new columns added).
mysql-test/t/view.test:
Update test.
mysys/charset.c:
Move out-parameter to the end of list.
scripts/mysql_system_tables.sql:
Add new columns to mysql.proc and mysql.event.
scripts/mysql_system_tables_fix.sql:
Add new columns to mysql.proc and mysql.event.
sql/event_data_objects.cc:
Support new attributes for events.
sql/event_data_objects.h:
Support new attributes for events.
sql/event_db_repository.cc:
Support new attributes for events.
sql/event_db_repository.h:
Support new attributes for events.
sql/events.cc:
Add new columns to SHOW CREATE event resultset.
sql/mysql_priv.h:
1. Introduce Object_creation_ctx;
2. Introduce SHOW CREATE TRIGGER;
3. Introduce auxilary functions.
sql/sp.cc:
Add support for new store routines attributes.
sql/sp_head.cc:
Add support for new store routines attributes.
sql/sp_head.h:
Add support for new store routines attributes.
sql/sql_lex.cc:
Generate UTF8-body on parsing/lexing.
sql/sql_lex.h:
1. Generate UTF8-body on parsing/lexing.
2. Introduce SHOW CREATE TRIGGER.
sql/sql_parse.cc:
Introduce SHOW CREATE TRIGGER.
sql/sql_partition.cc:
Update parse_sql().
sql/sql_prepare.cc:
Update parse_sql().
sql/sql_show.cc:
Support new attributes for views
sql/sql_trigger.cc:
Support new attributes for views
sql/sql_trigger.h:
Support new attributes for views
sql/sql_view.cc:
Support new attributes for views
sql/sql_yacc.yy:
1. Add SHOW CREATE TRIGGER statement.
2. Generate UTF8-body for views, stored routines, triggers and events.
sql/table.cc:
Introduce Object_creation_ctx.
sql/table.h:
Introduce Object_creation_ctx.
sql/share/errmsg.txt:
Add new errors.
mysql-test/include/ddl_i18n.check_events.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_sp.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_triggers.inc:
Aux file for test suite.
mysql-test/include/ddl_i18n.check_views.inc:
Aux file for test suite.
mysql-test/include/have_cp1251.inc:
Aux file for test suite.
mysql-test/include/have_cp866.inc:
Aux file for test suite.
mysql-test/include/have_koi8r.inc:
Aux file for test suite.
mysql-test/include/have_utf8.inc:
Aux file for test suite.
mysql-test/r/ddl_i18n_koi8r.result:
Result file.
mysql-test/r/ddl_i18n_utf8.result:
Result file.
mysql-test/r/have_cp1251.require:
Aux file for test suite.
mysql-test/r/have_cp866.require:
Aux file for test suite.
mysql-test/r/have_koi8r.require:
Aux file for test suite.
mysql-test/r/have_utf8.require:
Aux file for test suite.
mysql-test/t/ddl_i18n_koi8r.test:
Complete koi8r test case for the CS patch.
mysql-test/t/ddl_i18n_utf8.test:
Complete utf8 test case for the CS patch.
2007-06-28 19:34:54 +02:00
RETURN 0 latin1 latin1_swedish_ci latin1_swedish_ci
2007-01-08 23:52:21 +01:00
---> connection: master
---> Cleaning up...
DROP PROCEDURE p1;
DROP FUNCTION f1;
drop table t1;
drop database if exists mysqltest;
drop database if exists mysqltest2;
create database mysqltest;
create database mysqltest2;
use mysqltest2;
create table t ( t integer );
create procedure mysqltest.test() begin end;
insert into t values ( 1 );
create procedure `\\`.test() begin end;
ERROR 42000: Unknown database '\\'
create function f1 () returns int
begin
insert into t values (1);
return 0;
end|
use mysqltest;
set @a:= mysqltest2.f1();
fixes for test failures
and small collateral changes
mysql-test/lib/My/Test.pm:
somehow with "print" we get truncated writes sometimes
mysql-test/suite/perfschema/r/digest_table_full.result:
md5 hashes of statement digests differ, because yacc token codes are different in mariadb
mysql-test/suite/perfschema/r/dml_handler.result:
host table is not ported over yet
mysql-test/suite/perfschema/r/information_schema.result:
host table is not ported over yet
mysql-test/suite/perfschema/r/nesting.result:
this differs, because we don't rewrite general log queries, and multi-statement
packets are logged as a one entry. this result file is identical to what mysql-5.6.5
produces with the --log-raw option.
mysql-test/suite/perfschema/r/relaylog.result:
MariaDB modifies the binlog index file directly, while MySQL 5.6 has a feature "crash-safe binlog index" and modifies a special "crash-safe" shadow copy of the index file and then moves it over. That's why this test shows "NONE" index file writes in MySQL and "MANY" in MariaDB.
mysql-test/suite/perfschema/r/server_init.result:
MariaDB initializes the "manager" resources from the "manager" thread, and starts this thread only when --flush-time is not 0. MySQL 5.6 initializes "manager" resources unconditionally on server startup.
mysql-test/suite/perfschema/r/stage_mdl_global.result:
this differs, because MariaDB disables query cache when query_cache_size=0. MySQL does not
do that, and this causes useless mutex locks and waits.
mysql-test/suite/perfschema/r/statement_digest.result:
md5 hashes of statement digests differ, because yacc token codes are different in mariadb
mysql-test/suite/perfschema/r/statement_digest_consumers.result:
md5 hashes of statement digests differ, because yacc token codes are different in mariadb
mysql-test/suite/perfschema/r/statement_digest_long_query.result:
md5 hashes of statement digests differ, because yacc token codes are different in mariadb
mysql-test/suite/rpl/r/rpl_mixed_drop_create_temp_table.result:
will be updated to match 5.6 when alfranio.correia@oracle.com-20110512172919-c1b5kmum4h52g0ni and anders.song@greatopensource.com-20110105052107-zoab0bsf5a6xxk2y are merged
mysql-test/suite/rpl/r/rpl_non_direct_mixed_mixing_engines.result:
will be updated to match 5.6 when anders.song@greatopensource.com-20110105052107-zoab0bsf5a6xxk2y is merged
2012-09-27 20:09:46 +02:00
include/show_binlog_events.inc
2005-05-06 18:52:19 +02:00
Log_name Pos Event_type Server_id End_log_pos Info
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # drop database if exists mysqltest1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # create database mysqltest1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; create table t1 (a varchar(100))
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`()
2005-11-11 01:28:35 +01:00
begin
declare b int;
set b = 8;
insert into t1 values (b);
insert into t1 values (unix_timestamp());
end
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 values ( NAME_CONST('b',8))
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 values (unix_timestamp())
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; delete from t1
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo2`()
2005-11-11 01:28:35 +01:00
select * from mysqltest1.t1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; alter procedure foo2 contains sql
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2010-08-20 04:59:58 +02:00
master-bin.000001 # Query # # use `mysqltest1`; DROP TABLE `t1` /* generated by server */
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; create table t1 (a int)
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; create table t2 like t1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo3`()
2008-05-16 17:35:15 +02:00
DETERMINISTIC
2005-11-11 01:28:35 +01:00
insert into t1 values (15)
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; grant CREATE ROUTINE, EXECUTE on mysqltest1.* to "zedjzlcsjhd"@127.0.0.1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; grant SELECT on mysqltest1.t1 to "zedjzlcsjhd"@127.0.0.1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; grant SELECT, INSERT on mysqltest1.t2 to "zedjzlcsjhd"@127.0.0.1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` PROCEDURE `foo4`()
2008-05-16 17:35:15 +02:00
DETERMINISTIC
2005-11-11 01:28:35 +01:00
begin
insert into t2 values(3);
insert into t1 values (5);
end
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; insert into t2 values(3)
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 values (15)
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; insert into t2 values(3)
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; alter procedure foo4 sql security invoker
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; insert into t2 values(3)
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 values (5)
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; delete from t2
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; alter table t2 add unique (a)
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; drop procedure foo4
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo4`()
2008-05-16 17:35:15 +02:00
DETERMINISTIC
2005-11-11 01:28:35 +01:00
begin
insert into t2 values(20),(20);
end
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; insert into t2 values(20),(20)
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; drop procedure foo4
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; drop procedure foo
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; drop procedure foo2
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; drop procedure foo3
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
2008-05-16 17:35:15 +02:00
DETERMINISTIC
2005-11-11 01:28:35 +01:00
begin
insert into t1 values (x);
return x+2;
end
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; delete t1,t2 from t1,t2
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; SELECT `mysqltest1`.`fn1`(20)
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; insert into t2 values(fn1(21))
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; drop function fn1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`() RETURNS int(11)
2008-05-16 17:35:15 +02:00
NO SQL
2005-11-11 01:28:35 +01:00
begin
return unix_timestamp();
end
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; delete from t1
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 values(fn1())
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` FUNCTION `fn2`() RETURNS int(11)
2008-05-16 17:35:15 +02:00
NO SQL
2005-11-11 01:28:35 +01:00
begin
return unix_timestamp();
end
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn3`() RETURNS int(11)
2008-05-16 17:35:15 +02:00
READS SQL DATA
2005-11-11 01:28:35 +01:00
begin
return 0;
end
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; delete from t2
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; alter table t2 add unique (a)
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; drop function fn1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
2005-11-11 01:28:35 +01:00
begin
Fix for BUG#14769 "Function fails to replicate if fails half-way (slave stops)":
if the function, invoked in a non-binlogged caller (e.g. SELECT, DO), failed half-way on the master,
slave would stop and complain that error code between him and master mismatch.
To solve this, when a stored function is invoked in a non-binlogged caller (e.g. SELECT, DO), we binlog the function
call as SELECT instead of as DO (see revision comment of sp_head.cc for more).
And: minor wording change in the help text.
This cset will cause conflicts in 5.1, I'll merge.
mysql-test/r/rpl_sp.result:
result update
mysql-test/t/rpl_sp-slave.opt:
bug just fixed so option not needed
mysql-test/t/rpl_sp.test:
test for more half-failed functions with DO and SELECT, to test the bug of this changeset.
cleanup at the end.
sql/mysqld.cc:
function -> stored function (change suggested by Paul)
sql/sp_head.cc:
When a function updates data and is called from a non-binlogged statement (SELECT, DO), we binlog it
as SELECT myfunc(), and not DO myfunc() like before.
2006-02-18 17:26:30 +01:00
insert into t2 values(x),(x);
2005-11-11 01:28:35 +01:00
return 10;
end
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; SELECT `mysqltest1`.`fn1`(100)
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; SELECT `mysqltest1`.`fn1`(20)
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; delete from t1
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` trigger trg before insert on t1 for each row set new.a= 10
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 values (1)
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; delete from t1
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; drop trigger trg
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; insert into t1 values (1)
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`()
2008-05-16 17:35:15 +02:00
READS SQL DATA
2007-01-08 23:52:21 +01:00
select * from t1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; drop procedure foo
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest1`; drop function fn1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # drop database mysqltest1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # drop user "zedjzlcsjhd"@127.0.0.1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; drop function if exists f1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
2008-05-16 17:35:15 +02:00
READS SQL DATA
2005-11-17 01:15:10 +01:00
begin
declare var integer;
declare c cursor for select a from v1;
open c;
fetch c into var;
close c;
return var;
2007-01-08 23:52:21 +01:00
end
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 as a
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; create table t1 (a int)
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; insert into t1 (a) values (f1())
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; drop view v1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; drop function f1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; DROP PROCEDURE IF EXISTS p1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2010-08-20 04:59:58 +02:00
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS `t1` /* generated by server */
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; CREATE TABLE t1(col VARCHAR(10))
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(arg VARCHAR(10))
2007-01-08 23:52:21 +01:00
INSERT INTO t1 VALUES(arg)
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test' COLLATE 'latin1_swedish_ci'))
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; DROP PROCEDURE p1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; DROP PROCEDURE IF EXISTS p1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; DROP FUNCTION IF EXISTS f1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
2008-05-16 17:35:15 +02:00
SET @a = 1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
2008-05-16 17:35:15 +02:00
RETURN 0
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; DROP PROCEDURE p1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `test`; DROP FUNCTION f1
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2010-08-20 04:59:58 +02:00
master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # drop database if exists mysqltest
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # drop database if exists mysqltest2
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # create database mysqltest
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # create database mysqltest2
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest2`; create table t ( t integer )
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltest`.`test`()
2008-05-16 17:35:15 +02:00
begin end
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest2`; insert into t values ( 1 )
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest2`; CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
2007-01-08 23:52:21 +01:00
begin
insert into t values (1);
return 0;
end
2013-03-26 10:35:34 +01:00
master-bin.000001 # Gtid # # BEGIN GTID #-#-#
2009-09-29 13:16:23 +02:00
master-bin.000001 # Query # # use `mysqltest`; SELECT `mysqltest2`.`f1`()
2009-11-03 20:02:56 +01:00
master-bin.000001 # Query # # COMMIT
BUG#37975: wait_for_slave_* should increase the timeout
Problem 1: tests often fail in pushbuild with a timeout when waiting
for the slave to start/stop/receive error.
Fix 1: Updated the wait_for_slave_* macros in the following way:
- The timeout is increased by a factor ten
- Refactored the macros so that wait_for_slave_param does the work for
the other macros.
Problem 2: Tests are often incorrectly written, lacking a
source include/wait_for_slave_to_[start|stop].inc.
Fix 2: Improved the chance to get it right by adding
include/start_slave.inc and include/stop_slave.inc, and updated tests
to use these.
Problem 3: The the built-in test language command
wait_for_slave_to_stop is a misnomer (does not wait for the slave io
thread) and does not give as much debug info in case of failure as
the otherwise equivalent macro
source include/wait_for_slave_sql_to_stop.inc
Fix 3: Replaced all calls to the built-in command by a call to the
macro.
Problem 4: Some, but not all, of the wait_for_slave_* macros had an
implicit connection slave. This made some tests confusing to read,
and made it more difficult to use the macro in circular replication
scenarios, where the connection named master needs to wait.
Fix 4: Removed the implicit connection slave from all
wait_for_slave_* macros, and updated tests to use an explicit
connection slave where necessary.
Problem 5: The macros wait_slave_status.inc and wait_show_pattern.inc
were unused. Moreover, using them is difficult and error-prone.
Fix 5: remove these macros.
Problem 6: log_bin_trust_function_creators_basic failed when running
tests because it assumed @@global.log_bin_trust_function_creators=1,
and some tests modified this variable without resetting it to its
original value.
Fix 6: All tests that use this variable have been updated so that
they reset the value at end of test.
mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test:
Replaced wait_for_slave_to_stop by include/wait_for_slave_sql_to_stop.inc
mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test:
Replaced wait_for_slave_to_stop by include/wait_for_slave_sql_to_stop.inc
Added connection slave since includ/wait_for_slave_sql_to_stop.inc
does not do that anymore.
mysql-test/extra/rpl_tests/rpl_log.test:
Replaced start slave+wait_slave_status by start_slave.inc
mysql-test/include/reset_master_and_slave.inc:
replaced start/stop slave by start_slave.inc/stop_slave.inc
mysql-test/include/sync_slave_io_with_master.inc:
Improved comments and error message.
mysql-test/include/wait_for_slave_io_to_stop.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_param.inc:
- Improved usage instructions
- Added more debug info in case of timeout
- Added parameters $slave_param_comparison, $slave_timeout,
$slave_keep_connection, $slave_error_message
mysql-test/include/wait_for_slave_sql_error.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_sql_to_start.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_sql_to_stop.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_to_start.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_for_slave_to_stop.inc:
Refactored to use wait_for_slave_param.inc.
Removed connection slave.
mysql-test/include/wait_show_pattern.inc:
Removed unused (and error-prone) file
mysql-test/include/wait_slave_status.inc:
Removed unused (and error-prone) file
mysql-test/suite/binlog/t/binlog_auto_increment_bug33029.test:
Renamed $keep_connection to $slave_keep_connection.
mysql-test/suite/rpl/t/rpl_bug26395.test:
Replace stop slave by stop_slave.inc
mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test:
Replace start/stop slave by start_slave.inc/stop_slave.inc.
Replace wait_for_slave_param by wait_for_slave_sql_to_stop.inc.
mysql-test/suite/rpl/t/rpl_dual_pos_advance.test:
Renamed $keep_connection to $slave_keep_connection.
mysql-test/suite/rpl/t/rpl_flushlog_loop.test:
Replace wait_slave_status by start_slave.inc
mysql-test/suite/rpl/t/rpl_idempotency.test:
Added connection slave since wait_for_slave_sql_to_stop.inc does not
do that any more.
mysql-test/suite/rpl/t/rpl_incident.test:
Replaced wait_for_slave_to_stop by wait_for_slave_sql_to_stop.inc
mysql-test/suite/rpl/t/rpl_init_slave.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced save_master_pos;connection slave;sync_with_master by
sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_log_pos.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced wait_for_slave_param by other wait_for_slave_* macros.
mysql-test/suite/rpl/t/rpl_packet.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_row_inexist_tbl.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_row_stop_middle_update.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_row_until.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced save_master_pos;connection slave;sync_with_master by
sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_server_id1.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_slave_grp_exec.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_slave_skip.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_slave_status.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/suite/rpl/t/rpl_sp.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/suite/rpl/t/rpl_sp_effects.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/suite/rpl/t/rpl_stm_until.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
Replaced save_master_pos;connection slave;sync_with_master by
sync_slave_with_master.
mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test:
Replaced start slave by start_slave.inc.
Added explicit connection slave since wait_for_slave_sql_to_stop.inc
does not do that anymore.
mysql-test/t/disabled.def:
Disabled failing test.
mysql-test/t/func_time.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/grant.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/grant2.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/innodb_notembedded.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/log_bin_trust_function_creators_func.test:
Restore @@global.log_bin_trust_function_creators at end of test.
Clean up at end of test by dropping the created user.
mysql-test/t/query_cache.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/query_cache_notembedded.test:
Restore @@global.log_bin_trust_function_creators at end of test.
mysql-test/t/rpl_init_slave_func.test:
Replaced start/stop slave by start_slave.inc/stop_slave.inc.
mysql-test/t/timezone2.test:
Restore @@global.log_bin_trust_function_creators at end of test.
2008-07-10 18:09:39 +02:00
set @@global.log_bin_trust_function_creators= @old_log_bin_trust_function_creators;
set @@global.log_bin_trust_function_creators= @old_log_bin_trust_function_creators;
2006-11-28 16:03:53 +01:00
drop database mysqltest;
drop database mysqltest2;
2008-05-16 17:35:15 +02:00
use test;
/*!50001 create procedure `mysqltestbug36570_p1`() */
begin
select 1;
end|
use mysql|
create procedure test.` mysqltestbug36570_p2`(/*!50001 a int*/)`label`:
begin
select a;
end|
/*!50001 create function test.mysqltestbug36570_f1() */
returns int
/*!50001 deterministic */
begin
return 3;
end|
use test|
show procedure status like '%mysqltestbug36570%';
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
test mysqltestbug36570_p2 PROCEDURE root@localhost t t DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
test mysqltestbug36570_p1 PROCEDURE root@localhost t t DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
show create procedure ` mysqltestbug36570_p2`;
Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
mysqltestbug36570_p2 CREATE DEFINER=`root`@`localhost` PROCEDURE ` mysqltestbug36570_p2`( a int)
`label`:
begin
select a;
end latin1 latin1_swedish_ci latin1_swedish_ci
2008-05-16 17:38:13 +02:00
show procedure status like '%mysqltestbug36570%';
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
test mysqltestbug36570_p2 PROCEDURE root@localhost t t DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
test mysqltestbug36570_p1 PROCEDURE root@localhost t t DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
show create procedure ` mysqltestbug36570_p2`;
Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
mysqltestbug36570_p2 CREATE DEFINER=`root`@`localhost` PROCEDURE ` mysqltestbug36570_p2`( a int)
`label`:
begin
select a;
end latin1 latin1_swedish_ci latin1_swedish_ci
2008-05-16 17:35:15 +02:00
call ` mysqltestbug36570_p2`(42);
a
42
show function status like '%mysqltestbug36570%';
Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
test mysqltestbug36570_f1 FUNCTION root@localhost t t DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
2008-05-16 15:15:56 +02:00
flush logs;
2012-11-20 13:37:23 +01:00
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
2008-05-16 15:15:56 +02:00
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
ROLLBACK/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 17:35:15 +02:00
SET @@session.pseudo_thread_id=999999999/*!*/;
2009-11-03 14:54:41 +01:00
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
2008-05-16 15:15:56 +02:00
SET @@session.sql_mode=0/*!*/;
2008-05-16 17:35:15 +02:00
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
2008-05-16 15:15:56 +02:00
/*!\C latin1 *//*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
2008-05-16 17:35:15 +02:00
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
2008-05-16 15:15:56 +02:00
drop database if exists mysqltest1
/*!*/;
SET TIMESTAMP=t/*!*/;
create database mysqltest1
/*!*/;
2012-08-24 10:06:16 +02:00
use `mysqltest1`/*!*/;
2008-05-16 15:15:56 +02:00
SET TIMESTAMP=t/*!*/;
create table t1 (a varchar(100))
/*!*/;
SET TIMESTAMP=t/*!*/;
CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`()
begin
declare b int;
set b = 8;
insert into t1 values (b);
insert into t1 values (unix_timestamp());
end
/*!*/;
2009-11-03 20:02:56 +01:00
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
insert into t1 values ( NAME_CONST('b',8))
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
insert into t1 values (unix_timestamp())
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
delete from t1
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
CREATE DEFINER=`root`@`localhost` PROCEDURE `foo2`()
select * from mysqltest1.t1
/*!*/;
SET TIMESTAMP=t/*!*/;
alter procedure foo2 contains sql
/*!*/;
SET TIMESTAMP=t/*!*/;
2010-08-20 04:59:58 +02:00
DROP TABLE `t1` /* generated by server */
2008-05-16 15:15:56 +02:00
/*!*/;
SET TIMESTAMP=t/*!*/;
create table t1 (a int)
/*!*/;
SET TIMESTAMP=t/*!*/;
create table t2 like t1
/*!*/;
SET TIMESTAMP=t/*!*/;
CREATE DEFINER=`root`@`localhost` PROCEDURE `foo3`()
DETERMINISTIC
insert into t1 values (15)
/*!*/;
SET TIMESTAMP=t/*!*/;
grant CREATE ROUTINE, EXECUTE on mysqltest1.* to "zedjzlcsjhd"@127.0.0.1
/*!*/;
SET TIMESTAMP=t/*!*/;
grant SELECT on mysqltest1.t1 to "zedjzlcsjhd"@127.0.0.1
/*!*/;
SET TIMESTAMP=t/*!*/;
grant SELECT, INSERT on mysqltest1.t2 to "zedjzlcsjhd"@127.0.0.1
/*!*/;
SET TIMESTAMP=t/*!*/;
CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` PROCEDURE `foo4`()
DETERMINISTIC
begin
insert into t2 values(3);
insert into t1 values (5);
end
/*!*/;
2009-11-03 20:02:56 +01:00
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
insert into t2 values(3)
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
insert into t1 values (15)
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
insert into t2 values(3)
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
alter procedure foo4 sql security invoker
/*!*/;
2009-11-03 20:02:56 +01:00
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
insert into t2 values(3)
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
insert into t1 values (5)
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
delete from t2
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
alter table t2 add unique (a)
/*!*/;
SET TIMESTAMP=t/*!*/;
drop procedure foo4
/*!*/;
SET TIMESTAMP=t/*!*/;
CREATE DEFINER=`root`@`localhost` PROCEDURE `foo4`()
DETERMINISTIC
begin
insert into t2 values(20),(20);
end
/*!*/;
2009-11-03 20:02:56 +01:00
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
insert into t2 values(20),(20)
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
drop procedure foo4
/*!*/;
SET TIMESTAMP=t/*!*/;
drop procedure foo
/*!*/;
SET TIMESTAMP=t/*!*/;
drop procedure foo2
/*!*/;
SET TIMESTAMP=t/*!*/;
drop procedure foo3
/*!*/;
SET TIMESTAMP=t/*!*/;
CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
DETERMINISTIC
begin
insert into t1 values (x);
return x+2;
end
/*!*/;
2009-11-03 20:02:56 +01:00
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
delete t1,t2 from t1,t2
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
SELECT `mysqltest1`.`fn1`(20)
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
insert into t2 values(fn1(21))
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
drop function fn1
/*!*/;
SET TIMESTAMP=t/*!*/;
CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`() RETURNS int(11)
NO SQL
begin
return unix_timestamp();
end
/*!*/;
2009-11-03 20:02:56 +01:00
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
delete from t1
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
insert into t1 values(fn1())
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
CREATE DEFINER=`zedjzlcsjhd`@`127.0.0.1` FUNCTION `fn2`() RETURNS int(11)
NO SQL
begin
return unix_timestamp();
end
/*!*/;
SET TIMESTAMP=t/*!*/;
CREATE DEFINER=`root`@`localhost` FUNCTION `fn3`() RETURNS int(11)
READS SQL DATA
begin
return 0;
end
/*!*/;
2009-11-03 20:02:56 +01:00
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
delete from t2
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
alter table t2 add unique (a)
/*!*/;
SET TIMESTAMP=t/*!*/;
drop function fn1
/*!*/;
SET TIMESTAMP=t/*!*/;
CREATE DEFINER=`root`@`localhost` FUNCTION `fn1`(x int) RETURNS int(11)
begin
insert into t2 values(x),(x);
return 10;
end
/*!*/;
2009-11-03 20:02:56 +01:00
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
SELECT `mysqltest1`.`fn1`(100)
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
SELECT `mysqltest1`.`fn1`(20)
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
delete from t1
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
CREATE DEFINER=`root`@`localhost` trigger trg before insert on t1 for each row set new.a= 10
/*!*/;
2009-11-03 20:02:56 +01:00
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
insert into t1 values (1)
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
delete from t1
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
drop trigger trg
/*!*/;
2009-11-03 20:02:56 +01:00
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
insert into t1 values (1)
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
CREATE DEFINER=`root`@`localhost` PROCEDURE `foo`()
READS SQL DATA
select * from t1
/*!*/;
SET TIMESTAMP=t/*!*/;
drop procedure foo
/*!*/;
SET TIMESTAMP=t/*!*/;
drop function fn1
/*!*/;
SET TIMESTAMP=t/*!*/;
drop database mysqltest1
/*!*/;
SET TIMESTAMP=t/*!*/;
drop user "zedjzlcsjhd"@127.0.0.1
/*!*/;
2012-08-24 10:06:16 +02:00
use `test`/*!*/;
2008-05-16 15:15:56 +02:00
SET TIMESTAMP=t/*!*/;
2009-02-10 11:52:19 +01:00
drop function if exists f1
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
READS SQL DATA
begin
declare var integer;
declare c cursor for select a from v1;
open c;
fetch c into var;
close c;
return var;
end
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 17:35:15 +02:00
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select 1 as a
2008-05-16 15:15:56 +02:00
/*!*/;
SET TIMESTAMP=t/*!*/;
create table t1 (a int)
/*!*/;
2009-11-03 20:02:56 +01:00
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
insert into t1 (a) values (f1())
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
drop view v1
/*!*/;
SET TIMESTAMP=t/*!*/;
drop function f1
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-02-10 11:52:19 +01:00
DROP PROCEDURE IF EXISTS p1
/*!*/;
SET TIMESTAMP=t/*!*/;
2010-08-20 04:59:58 +02:00
DROP TABLE IF EXISTS `t1` /* generated by server */
2008-05-16 15:15:56 +02:00
/*!*/;
SET TIMESTAMP=t/*!*/;
CREATE TABLE t1(col VARCHAR(10))
/*!*/;
SET TIMESTAMP=t/*!*/;
CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`(arg VARCHAR(10))
INSERT INTO t1 VALUES(arg)
/*!*/;
2009-11-03 20:02:56 +01:00
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-10-01 11:48:47 +02:00
INSERT INTO t1 VALUES( NAME_CONST('arg',_latin1'test' COLLATE 'latin1_swedish_ci'))
2008-05-16 15:15:56 +02:00
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
DROP PROCEDURE p1
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-02-10 11:52:19 +01:00
DROP PROCEDURE IF EXISTS p1
/*!*/;
SET TIMESTAMP=t/*!*/;
DROP FUNCTION IF EXISTS f1
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
SET @a = 1
/*!*/;
SET TIMESTAMP=t/*!*/;
CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
RETURN 0
/*!*/;
SET TIMESTAMP=t/*!*/;
DROP PROCEDURE p1
/*!*/;
SET TIMESTAMP=t/*!*/;
DROP FUNCTION f1
/*!*/;
SET TIMESTAMP=t/*!*/;
2010-08-20 04:59:58 +02:00
DROP TABLE `t1` /* generated by server */
2008-05-16 15:15:56 +02:00
/*!*/;
SET TIMESTAMP=t/*!*/;
drop database if exists mysqltest
/*!*/;
SET TIMESTAMP=t/*!*/;
drop database if exists mysqltest2
/*!*/;
SET TIMESTAMP=t/*!*/;
create database mysqltest
/*!*/;
SET TIMESTAMP=t/*!*/;
create database mysqltest2
/*!*/;
2012-08-24 10:06:16 +02:00
use `mysqltest2`/*!*/;
2008-05-16 15:15:56 +02:00
SET TIMESTAMP=t/*!*/;
create table t ( t integer )
/*!*/;
SET TIMESTAMP=t/*!*/;
CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltest`.`test`()
begin end
/*!*/;
2009-11-03 20:02:56 +01:00
BEGIN
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
insert into t values ( 1 )
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
CREATE DEFINER=`root`@`localhost` FUNCTION `f1`() RETURNS int(11)
begin
insert into t values (1);
return 0;
end
/*!*/;
2009-11-03 20:02:56 +01:00
BEGIN
/*!*/;
2012-08-24 10:06:16 +02:00
use `mysqltest`/*!*/;
2008-05-16 15:15:56 +02:00
SET TIMESTAMP=t/*!*/;
SELECT `mysqltest2`.`f1`()
/*!*/;
SET TIMESTAMP=t/*!*/;
2009-11-03 20:02:56 +01:00
COMMIT
/*!*/;
SET TIMESTAMP=t/*!*/;
2008-05-16 15:15:56 +02:00
drop database mysqltest
/*!*/;
SET TIMESTAMP=t/*!*/;
drop database mysqltest2
/*!*/;
2012-08-24 10:06:16 +02:00
use `test`/*!*/;
2008-05-16 15:15:56 +02:00
SET TIMESTAMP=t/*!*/;
CREATE DEFINER=`root`@`localhost` PROCEDURE `mysqltestbug36570_p1`()
begin
select 1;
end
/*!*/;
2012-08-24 10:06:16 +02:00
use `mysql`/*!*/;
2008-05-16 15:15:56 +02:00
SET TIMESTAMP=t/*!*/;
2008-05-16 17:35:15 +02:00
CREATE DEFINER=`root`@`localhost` PROCEDURE `test`.` mysqltestbug36570_p2`( a int)
2008-05-16 15:15:56 +02:00
`label`:
begin
select a;
end
/*!*/;
SET TIMESTAMP=t/*!*/;
CREATE DEFINER=`root`@`localhost` FUNCTION `test`.`mysqltestbug36570_f1`() RETURNS int(11)
DETERMINISTIC
begin
return 3;
end
/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
2012-11-20 13:37:23 +01:00
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
Bug#36570: Parse error of CREATE PROCEDURE stmt with comments on \
slave
The stored-routine code took the contents of the (lowest) parser
and copied it directly to the binlog, which causes problems if there
is a special case of interpretation at the parser level -- which
there is, in the "/*!VER */" comments. The trailing "*/" caused
errors on the slave, naturally.
Now, since by that point we have /properly/ created parse-tree (as
the rest of the server should do!) for the stored-routine CREATE, we
can construct a perfect statement from that information, instead of
writing uncertain information from an unknown parser state.
Fortunately, there's already a function nearby that does exactly
that.
---
Update for Bug#36570. Qualify routine names with db name when
writing to the binlog ONLY if the source text is qualified.
mysql-test/r/binlog_innodb.result:
Offsets changed due to quoting.
---
New offset to account for db-qualified names.
mysql-test/r/ctype_cp932_binlog.result:
Offsets changed due to quoting.
---
Qualify routine names with DB. Offsets change also.
mysql-test/r/mysqlbinlog.result:
Case changed in result due to interpretation of data instead of
literal recitation.
---
Qualify procedure name with db.
mysql-test/r/rpl_sp.result:
Offsets changed due to quoting. Added tests.
---
Qualify routine names with DB if qualified in query. Offsets change also.
mysql-test/t/rpl_sp.test:
Add version-limiting quotes to exercise bug#36570. Test that
backtick-quoted identifiers and labels work also.
---
Use different db to show qualification works. Qualify routine names
with DB if qualified in query.
sql/sp.cc:
In create_string, we may not have a sp_name parameter yet, so
instead pass the char* and length of the only member we'd get out
of it.
Having done that, we can use the same function to write the
CREATE (FUNC|TRIG|PROC) statement to the binlog as we always used
to display the statement to the user.
---
Make the db name part of the CREATE string if it is specified.
Specify it in part of writing to the binlog when creating a new
routine.
sql/sp_head.cc:
Set the sp_head m_explicit_name member as the sp_name member is set.
We can not peek at this later, as the sp_name is gone by then.
sql/sp_head.h:
Add a member to track whether the name is qualified with the
database.
2008-05-16 01:13:24 +02:00
use test;
drop procedure mysqltestbug36570_p1;
drop procedure ` mysqltestbug36570_p2`;
drop function mysqltestbug36570_f1;
2007-01-08 23:52:21 +01:00
End of 5.0 tests
Apply and review:
3655 Jon Olav Hauglid 2009-10-19
Bug #30977 Concurrent statement using stored function and DROP FUNCTION
breaks SBR
Bug #48246 assert in close_thread_table
Implement a fix for:
Bug #41804 purge stored procedure cache causes mysterious hang for many
minutes
Bug #49972 Crash in prepared statements
The problem was that concurrent execution of DML statements that
use stored functions and DDL statements that drop/modify the same
function might result in incorrect binary log in statement (and
mixed) mode and therefore break replication.
This patch fixes the problem by introducing metadata locking for
stored procedures and functions. This is similar to what is done
in Bug#25144 for views. Procedures and functions now are
locked using metadata locks until the transaction is either
committed or rolled back. This prevents other statements from
modifying the procedure/function while it is being executed. This
provides commit ordering - guaranteeing serializability across
multiple transactions and thus fixes the reported binlog problem.
Note that we do not take locks for top-level CALLs. This means
that procedures called directly are not protected from changes by
simultaneous DDL operations so they are executed at the state they
had at the time of the CALL. By not taking locks for top-level
CALLs, we still allow transactions to be started inside
procedures.
This patch also changes stored procedure cache invalidation.
Upon a change of cache version, we no longer invalidate the entire
cache, but only those routines which we use, only when a statement
is executed that uses them.
This patch also changes the logic of prepared statement validation.
A stored procedure used by a prepared statement is now validated
only once a metadata lock has been acquired. A version mismatch
causes a flush of the obsolete routine from the cache and
statement reprepare.
Incompatible changes:
1) ER_LOCK_DEADLOCK is reported for a transaction trying to access
a procedure/function that is locked by a DDL operation in
another connection.
2) Procedure/function DDL operations are now prohibited in LOCK
TABLES mode as exclusive locks must be taken all at once and
LOCK TABLES provides no way to specifiy procedures/functions to
be locked.
Test cases have been added to sp-lock.test and rpl_sp.test.
Work on this bug has very much been a team effort and this patch
includes and is based on contributions from Davi Arnaut, Dmitry
Lenev, Magne Mæhre and Konstantin Osipov.
mysql-test/r/ps_ddl.result:
Update results (Bug#30977).
mysql-test/r/ps_ddl1.result:
Update results (Bug#30977).
mysql-test/r/sp-error.result:
Update results (Bug#30977).
mysql-test/r/sp-lock.result:
Update results (Bug#30977).
mysql-test/suite/rpl/r/rpl_sp.result:
Update results (Bug#30977).
mysql-test/suite/rpl/t/rpl_sp.test:
Add a test case for Bug#30977.
mysql-test/t/ps_ddl.test:
Update comments. We no longer re-prepare a prepared statement
when a stored procedure used in top-level CALL is changed.
mysql-test/t/ps_ddl1.test:
Modifying stored procedure p1 no longer invalidates prepared
statement "call p1" -- we can re-use the prepared statement
without invalidation.
mysql-test/t/sp-error.test:
Use a constant for an error value.
mysql-test/t/sp-lock.test:
Add test coverage for Bug#30977.
sql/lock.cc:
Implement lock_routine_name() - a way to acquire an
exclusive metadata lock (ex- name-lock) on
stored procedure/function.
sql/sp.cc:
Change semantics of sp_cache_routine() -- now it has an option
to make sure that the routine that is cached is up to date (has
the latest sp cache version).
Add sp_cache_invalidate() to sp_drop_routine(), where it was
missing (a bug!).
Acquire metadata locks for SP DDL (ALTER/CREATE/DROP). This is
the core of the fix for Bug#30977.
Since caching and cache invalidation scheme was changed, make
sure we don't invalidate the SP cache in the middle of a stored
routine execution. At the same time, make sure we don't access
stale data due to lack of invalidation.
For that, change ALTER FUNCTION/PROCEDURE to not use the cache,
and SHOW PROCEDURE CODE/SHOW CREATE PROCEDURE/FUNCTION to always
read an up to date version of the routine from the cache.
sql/sp.h:
Add a helper wrapper around sp_cache_routine().
sql/sp_cache.cc:
Implement new sp_cache_version() and sp_cache_flush_obsolete().
Now we flush stale routines individually, rather than all at once.
sql/sp_cache.h:
Update signatures of sp_cache_version() and sp_cache_flush_obsolete().
sql/sp_head.cc:
Add a default initialization of sp_head::m_sp_cache_version.
Remove a redundant sp_head::create().
sql/sp_head.h:
Add m_sp_cache_version to sp_head class - we now
keep track of every routine in the stored procedure cache, rather than
of the entire cache.
sql/sql_base.cc:
Implement prelocking for stored routines. Validate stored
routines after they were locked.
Flush obsolete routines upon next access, one by one, not all at once
(Bug#41804).
Style fixes.
sql/sql_class.h:
Rename a Open_table_context method.
sql/sql_parse.cc:
Make sure stored procedures DDL commits the active transaction
(issues an implicit commit before and after).
Remove sp_head::create(), a pure redundancy.
Move the semantical check during alter routine inside sp_update_routine() code in order to:
- avoid using SP cache during update, it may be obsolete.
- speed up and simplify the update procedure.
Remove sp_cache_flush_obsolete() calls, we no longer flush the entire
cache, ever, stale routines are flushed before next use, one at a time.
sql/sql_prepare.cc:
Move routine metadata validation to open_and_process_routine().
Fix Bug#49972 (don't swap flags at reprepare).
Reset Sroutine_hash_entries in reinit_stmt_before_use().
Remove SP cache invalidation, it's now done by open_tables().
sql/sql_show.cc:
Fix a warning: remove an unused label.
sql/sql_table.cc:
Reset mdl_request.ticket for tickets acquired for routines inlined
through a view, in CHECK TABLE statement, to satisfy an MDL assert.
sql/sql_update.cc:
Move the cleanup of "translation items" to close_tables_for_reopen(),
since it's needed in all cases when we back off, not just
the back-off in multi-update. This fixes a bug when the server
would crash on attempt to back off when opening tables
for a statement that uses information_schema tables.
2009-12-29 13:19:05 +01:00
# End of 5.1 tests
#
# Test Bug#30977 Concurrent statement using stored
# function and DROP FUNCTION breaks SBR.
#
# Demonstrate that stored function DDL can not go through,
# or, worse yet, make its way into the binary log, while
# the stored function is in use.
# For that, try to insert a result of a stored function
# into a table. Block the insert in the beginning, waiting
# on a table lock. While insert is blocked, attempt to
# drop the routine. Verify that this attempt
# blocks and waits for INSERT to complete. Commit and
# reap the chain of events. Master and slave must contain
# identical data. Statements in the binrary log must be
# consistent with data in the table.
#
# --> connection default
drop table if exists t1, t2;
drop function if exists t1;
create table t1 (a int);
create table t2 (a int) as select 1 as a;
create function f1() returns int deterministic return (select max(a) from t2);
lock table t2 write;
# --> connection master
# Sending 'insert into t1 (a) values (f1())'...
insert into t1 (a) values (f1());
# Waitng for 'insert into t1 ...' to get blocked on table lock...
2010-06-07 09:06:55 +02:00
# Sending 'drop function f1'. It will wait till insert finishes.
drop function f1;;
Apply and review:
3655 Jon Olav Hauglid 2009-10-19
Bug #30977 Concurrent statement using stored function and DROP FUNCTION
breaks SBR
Bug #48246 assert in close_thread_table
Implement a fix for:
Bug #41804 purge stored procedure cache causes mysterious hang for many
minutes
Bug #49972 Crash in prepared statements
The problem was that concurrent execution of DML statements that
use stored functions and DDL statements that drop/modify the same
function might result in incorrect binary log in statement (and
mixed) mode and therefore break replication.
This patch fixes the problem by introducing metadata locking for
stored procedures and functions. This is similar to what is done
in Bug#25144 for views. Procedures and functions now are
locked using metadata locks until the transaction is either
committed or rolled back. This prevents other statements from
modifying the procedure/function while it is being executed. This
provides commit ordering - guaranteeing serializability across
multiple transactions and thus fixes the reported binlog problem.
Note that we do not take locks for top-level CALLs. This means
that procedures called directly are not protected from changes by
simultaneous DDL operations so they are executed at the state they
had at the time of the CALL. By not taking locks for top-level
CALLs, we still allow transactions to be started inside
procedures.
This patch also changes stored procedure cache invalidation.
Upon a change of cache version, we no longer invalidate the entire
cache, but only those routines which we use, only when a statement
is executed that uses them.
This patch also changes the logic of prepared statement validation.
A stored procedure used by a prepared statement is now validated
only once a metadata lock has been acquired. A version mismatch
causes a flush of the obsolete routine from the cache and
statement reprepare.
Incompatible changes:
1) ER_LOCK_DEADLOCK is reported for a transaction trying to access
a procedure/function that is locked by a DDL operation in
another connection.
2) Procedure/function DDL operations are now prohibited in LOCK
TABLES mode as exclusive locks must be taken all at once and
LOCK TABLES provides no way to specifiy procedures/functions to
be locked.
Test cases have been added to sp-lock.test and rpl_sp.test.
Work on this bug has very much been a team effort and this patch
includes and is based on contributions from Davi Arnaut, Dmitry
Lenev, Magne Mæhre and Konstantin Osipov.
mysql-test/r/ps_ddl.result:
Update results (Bug#30977).
mysql-test/r/ps_ddl1.result:
Update results (Bug#30977).
mysql-test/r/sp-error.result:
Update results (Bug#30977).
mysql-test/r/sp-lock.result:
Update results (Bug#30977).
mysql-test/suite/rpl/r/rpl_sp.result:
Update results (Bug#30977).
mysql-test/suite/rpl/t/rpl_sp.test:
Add a test case for Bug#30977.
mysql-test/t/ps_ddl.test:
Update comments. We no longer re-prepare a prepared statement
when a stored procedure used in top-level CALL is changed.
mysql-test/t/ps_ddl1.test:
Modifying stored procedure p1 no longer invalidates prepared
statement "call p1" -- we can re-use the prepared statement
without invalidation.
mysql-test/t/sp-error.test:
Use a constant for an error value.
mysql-test/t/sp-lock.test:
Add test coverage for Bug#30977.
sql/lock.cc:
Implement lock_routine_name() - a way to acquire an
exclusive metadata lock (ex- name-lock) on
stored procedure/function.
sql/sp.cc:
Change semantics of sp_cache_routine() -- now it has an option
to make sure that the routine that is cached is up to date (has
the latest sp cache version).
Add sp_cache_invalidate() to sp_drop_routine(), where it was
missing (a bug!).
Acquire metadata locks for SP DDL (ALTER/CREATE/DROP). This is
the core of the fix for Bug#30977.
Since caching and cache invalidation scheme was changed, make
sure we don't invalidate the SP cache in the middle of a stored
routine execution. At the same time, make sure we don't access
stale data due to lack of invalidation.
For that, change ALTER FUNCTION/PROCEDURE to not use the cache,
and SHOW PROCEDURE CODE/SHOW CREATE PROCEDURE/FUNCTION to always
read an up to date version of the routine from the cache.
sql/sp.h:
Add a helper wrapper around sp_cache_routine().
sql/sp_cache.cc:
Implement new sp_cache_version() and sp_cache_flush_obsolete().
Now we flush stale routines individually, rather than all at once.
sql/sp_cache.h:
Update signatures of sp_cache_version() and sp_cache_flush_obsolete().
sql/sp_head.cc:
Add a default initialization of sp_head::m_sp_cache_version.
Remove a redundant sp_head::create().
sql/sp_head.h:
Add m_sp_cache_version to sp_head class - we now
keep track of every routine in the stored procedure cache, rather than
of the entire cache.
sql/sql_base.cc:
Implement prelocking for stored routines. Validate stored
routines after they were locked.
Flush obsolete routines upon next access, one by one, not all at once
(Bug#41804).
Style fixes.
sql/sql_class.h:
Rename a Open_table_context method.
sql/sql_parse.cc:
Make sure stored procedures DDL commits the active transaction
(issues an implicit commit before and after).
Remove sp_head::create(), a pure redundancy.
Move the semantical check during alter routine inside sp_update_routine() code in order to:
- avoid using SP cache during update, it may be obsolete.
- speed up and simplify the update procedure.
Remove sp_cache_flush_obsolete() calls, we no longer flush the entire
cache, ever, stale routines are flushed before next use, one at a time.
sql/sql_prepare.cc:
Move routine metadata validation to open_and_process_routine().
Fix Bug#49972 (don't swap flags at reprepare).
Reset Sroutine_hash_entries in reinit_stmt_before_use().
Remove SP cache invalidation, it's now done by open_tables().
sql/sql_show.cc:
Fix a warning: remove an unused label.
sql/sql_table.cc:
Reset mdl_request.ticket for tickets acquired for routines inlined
through a view, in CHECK TABLE statement, to satisfy an MDL assert.
sql/sql_update.cc:
Move the cleanup of "translation items" to close_tables_for_reopen(),
since it's needed in all cases when we back off, not just
the back-off in multi-update. This fixes a bug when the server
would crash on attempt to back off when opening tables
for a statement that uses information_schema tables.
2009-12-29 13:19:05 +01:00
# --> connection default
2010-06-07 09:06:55 +02:00
# Check that 'drop function f1' gets blocked.
Apply and review:
3655 Jon Olav Hauglid 2009-10-19
Bug #30977 Concurrent statement using stored function and DROP FUNCTION
breaks SBR
Bug #48246 assert in close_thread_table
Implement a fix for:
Bug #41804 purge stored procedure cache causes mysterious hang for many
minutes
Bug #49972 Crash in prepared statements
The problem was that concurrent execution of DML statements that
use stored functions and DDL statements that drop/modify the same
function might result in incorrect binary log in statement (and
mixed) mode and therefore break replication.
This patch fixes the problem by introducing metadata locking for
stored procedures and functions. This is similar to what is done
in Bug#25144 for views. Procedures and functions now are
locked using metadata locks until the transaction is either
committed or rolled back. This prevents other statements from
modifying the procedure/function while it is being executed. This
provides commit ordering - guaranteeing serializability across
multiple transactions and thus fixes the reported binlog problem.
Note that we do not take locks for top-level CALLs. This means
that procedures called directly are not protected from changes by
simultaneous DDL operations so they are executed at the state they
had at the time of the CALL. By not taking locks for top-level
CALLs, we still allow transactions to be started inside
procedures.
This patch also changes stored procedure cache invalidation.
Upon a change of cache version, we no longer invalidate the entire
cache, but only those routines which we use, only when a statement
is executed that uses them.
This patch also changes the logic of prepared statement validation.
A stored procedure used by a prepared statement is now validated
only once a metadata lock has been acquired. A version mismatch
causes a flush of the obsolete routine from the cache and
statement reprepare.
Incompatible changes:
1) ER_LOCK_DEADLOCK is reported for a transaction trying to access
a procedure/function that is locked by a DDL operation in
another connection.
2) Procedure/function DDL operations are now prohibited in LOCK
TABLES mode as exclusive locks must be taken all at once and
LOCK TABLES provides no way to specifiy procedures/functions to
be locked.
Test cases have been added to sp-lock.test and rpl_sp.test.
Work on this bug has very much been a team effort and this patch
includes and is based on contributions from Davi Arnaut, Dmitry
Lenev, Magne Mæhre and Konstantin Osipov.
mysql-test/r/ps_ddl.result:
Update results (Bug#30977).
mysql-test/r/ps_ddl1.result:
Update results (Bug#30977).
mysql-test/r/sp-error.result:
Update results (Bug#30977).
mysql-test/r/sp-lock.result:
Update results (Bug#30977).
mysql-test/suite/rpl/r/rpl_sp.result:
Update results (Bug#30977).
mysql-test/suite/rpl/t/rpl_sp.test:
Add a test case for Bug#30977.
mysql-test/t/ps_ddl.test:
Update comments. We no longer re-prepare a prepared statement
when a stored procedure used in top-level CALL is changed.
mysql-test/t/ps_ddl1.test:
Modifying stored procedure p1 no longer invalidates prepared
statement "call p1" -- we can re-use the prepared statement
without invalidation.
mysql-test/t/sp-error.test:
Use a constant for an error value.
mysql-test/t/sp-lock.test:
Add test coverage for Bug#30977.
sql/lock.cc:
Implement lock_routine_name() - a way to acquire an
exclusive metadata lock (ex- name-lock) on
stored procedure/function.
sql/sp.cc:
Change semantics of sp_cache_routine() -- now it has an option
to make sure that the routine that is cached is up to date (has
the latest sp cache version).
Add sp_cache_invalidate() to sp_drop_routine(), where it was
missing (a bug!).
Acquire metadata locks for SP DDL (ALTER/CREATE/DROP). This is
the core of the fix for Bug#30977.
Since caching and cache invalidation scheme was changed, make
sure we don't invalidate the SP cache in the middle of a stored
routine execution. At the same time, make sure we don't access
stale data due to lack of invalidation.
For that, change ALTER FUNCTION/PROCEDURE to not use the cache,
and SHOW PROCEDURE CODE/SHOW CREATE PROCEDURE/FUNCTION to always
read an up to date version of the routine from the cache.
sql/sp.h:
Add a helper wrapper around sp_cache_routine().
sql/sp_cache.cc:
Implement new sp_cache_version() and sp_cache_flush_obsolete().
Now we flush stale routines individually, rather than all at once.
sql/sp_cache.h:
Update signatures of sp_cache_version() and sp_cache_flush_obsolete().
sql/sp_head.cc:
Add a default initialization of sp_head::m_sp_cache_version.
Remove a redundant sp_head::create().
sql/sp_head.h:
Add m_sp_cache_version to sp_head class - we now
keep track of every routine in the stored procedure cache, rather than
of the entire cache.
sql/sql_base.cc:
Implement prelocking for stored routines. Validate stored
routines after they were locked.
Flush obsolete routines upon next access, one by one, not all at once
(Bug#41804).
Style fixes.
sql/sql_class.h:
Rename a Open_table_context method.
sql/sql_parse.cc:
Make sure stored procedures DDL commits the active transaction
(issues an implicit commit before and after).
Remove sp_head::create(), a pure redundancy.
Move the semantical check during alter routine inside sp_update_routine() code in order to:
- avoid using SP cache during update, it may be obsolete.
- speed up and simplify the update procedure.
Remove sp_cache_flush_obsolete() calls, we no longer flush the entire
cache, ever, stale routines are flushed before next use, one at a time.
sql/sql_prepare.cc:
Move routine metadata validation to open_and_process_routine().
Fix Bug#49972 (don't swap flags at reprepare).
Reset Sroutine_hash_entries in reinit_stmt_before_use().
Remove SP cache invalidation, it's now done by open_tables().
sql/sql_show.cc:
Fix a warning: remove an unused label.
sql/sql_table.cc:
Reset mdl_request.ticket for tickets acquired for routines inlined
through a view, in CHECK TABLE statement, to satisfy an MDL assert.
sql/sql_update.cc:
Move the cleanup of "translation items" to close_tables_for_reopen(),
since it's needed in all cases when we back off, not just
the back-off in multi-update. This fixes a bug when the server
would crash on attempt to back off when opening tables
for a statement that uses information_schema tables.
2009-12-29 13:19:05 +01:00
# Now let's let 'insert' go through...
unlock tables;
2010-06-07 09:06:55 +02:00
# --> connection master
Apply and review:
3655 Jon Olav Hauglid 2009-10-19
Bug #30977 Concurrent statement using stored function and DROP FUNCTION
breaks SBR
Bug #48246 assert in close_thread_table
Implement a fix for:
Bug #41804 purge stored procedure cache causes mysterious hang for many
minutes
Bug #49972 Crash in prepared statements
The problem was that concurrent execution of DML statements that
use stored functions and DDL statements that drop/modify the same
function might result in incorrect binary log in statement (and
mixed) mode and therefore break replication.
This patch fixes the problem by introducing metadata locking for
stored procedures and functions. This is similar to what is done
in Bug#25144 for views. Procedures and functions now are
locked using metadata locks until the transaction is either
committed or rolled back. This prevents other statements from
modifying the procedure/function while it is being executed. This
provides commit ordering - guaranteeing serializability across
multiple transactions and thus fixes the reported binlog problem.
Note that we do not take locks for top-level CALLs. This means
that procedures called directly are not protected from changes by
simultaneous DDL operations so they are executed at the state they
had at the time of the CALL. By not taking locks for top-level
CALLs, we still allow transactions to be started inside
procedures.
This patch also changes stored procedure cache invalidation.
Upon a change of cache version, we no longer invalidate the entire
cache, but only those routines which we use, only when a statement
is executed that uses them.
This patch also changes the logic of prepared statement validation.
A stored procedure used by a prepared statement is now validated
only once a metadata lock has been acquired. A version mismatch
causes a flush of the obsolete routine from the cache and
statement reprepare.
Incompatible changes:
1) ER_LOCK_DEADLOCK is reported for a transaction trying to access
a procedure/function that is locked by a DDL operation in
another connection.
2) Procedure/function DDL operations are now prohibited in LOCK
TABLES mode as exclusive locks must be taken all at once and
LOCK TABLES provides no way to specifiy procedures/functions to
be locked.
Test cases have been added to sp-lock.test and rpl_sp.test.
Work on this bug has very much been a team effort and this patch
includes and is based on contributions from Davi Arnaut, Dmitry
Lenev, Magne Mæhre and Konstantin Osipov.
mysql-test/r/ps_ddl.result:
Update results (Bug#30977).
mysql-test/r/ps_ddl1.result:
Update results (Bug#30977).
mysql-test/r/sp-error.result:
Update results (Bug#30977).
mysql-test/r/sp-lock.result:
Update results (Bug#30977).
mysql-test/suite/rpl/r/rpl_sp.result:
Update results (Bug#30977).
mysql-test/suite/rpl/t/rpl_sp.test:
Add a test case for Bug#30977.
mysql-test/t/ps_ddl.test:
Update comments. We no longer re-prepare a prepared statement
when a stored procedure used in top-level CALL is changed.
mysql-test/t/ps_ddl1.test:
Modifying stored procedure p1 no longer invalidates prepared
statement "call p1" -- we can re-use the prepared statement
without invalidation.
mysql-test/t/sp-error.test:
Use a constant for an error value.
mysql-test/t/sp-lock.test:
Add test coverage for Bug#30977.
sql/lock.cc:
Implement lock_routine_name() - a way to acquire an
exclusive metadata lock (ex- name-lock) on
stored procedure/function.
sql/sp.cc:
Change semantics of sp_cache_routine() -- now it has an option
to make sure that the routine that is cached is up to date (has
the latest sp cache version).
Add sp_cache_invalidate() to sp_drop_routine(), where it was
missing (a bug!).
Acquire metadata locks for SP DDL (ALTER/CREATE/DROP). This is
the core of the fix for Bug#30977.
Since caching and cache invalidation scheme was changed, make
sure we don't invalidate the SP cache in the middle of a stored
routine execution. At the same time, make sure we don't access
stale data due to lack of invalidation.
For that, change ALTER FUNCTION/PROCEDURE to not use the cache,
and SHOW PROCEDURE CODE/SHOW CREATE PROCEDURE/FUNCTION to always
read an up to date version of the routine from the cache.
sql/sp.h:
Add a helper wrapper around sp_cache_routine().
sql/sp_cache.cc:
Implement new sp_cache_version() and sp_cache_flush_obsolete().
Now we flush stale routines individually, rather than all at once.
sql/sp_cache.h:
Update signatures of sp_cache_version() and sp_cache_flush_obsolete().
sql/sp_head.cc:
Add a default initialization of sp_head::m_sp_cache_version.
Remove a redundant sp_head::create().
sql/sp_head.h:
Add m_sp_cache_version to sp_head class - we now
keep track of every routine in the stored procedure cache, rather than
of the entire cache.
sql/sql_base.cc:
Implement prelocking for stored routines. Validate stored
routines after they were locked.
Flush obsolete routines upon next access, one by one, not all at once
(Bug#41804).
Style fixes.
sql/sql_class.h:
Rename a Open_table_context method.
sql/sql_parse.cc:
Make sure stored procedures DDL commits the active transaction
(issues an implicit commit before and after).
Remove sp_head::create(), a pure redundancy.
Move the semantical check during alter routine inside sp_update_routine() code in order to:
- avoid using SP cache during update, it may be obsolete.
- speed up and simplify the update procedure.
Remove sp_cache_flush_obsolete() calls, we no longer flush the entire
cache, ever, stale routines are flushed before next use, one at a time.
sql/sql_prepare.cc:
Move routine metadata validation to open_and_process_routine().
Fix Bug#49972 (don't swap flags at reprepare).
Reset Sroutine_hash_entries in reinit_stmt_before_use().
Remove SP cache invalidation, it's now done by open_tables().
sql/sql_show.cc:
Fix a warning: remove an unused label.
sql/sql_table.cc:
Reset mdl_request.ticket for tickets acquired for routines inlined
through a view, in CHECK TABLE statement, to satisfy an MDL assert.
sql/sql_update.cc:
Move the cleanup of "translation items" to close_tables_for_reopen(),
since it's needed in all cases when we back off, not just
the back-off in multi-update. This fixes a bug when the server
would crash on attempt to back off when opening tables
for a statement that uses information_schema tables.
2009-12-29 13:19:05 +01:00
# Reaping 'insert into t1 (a) values (f1())'...
2010-06-07 09:06:55 +02:00
# --> connection master1
# Reaping 'drop function f1'
# --> connection master
Apply and review:
3655 Jon Olav Hauglid 2009-10-19
Bug #30977 Concurrent statement using stored function and DROP FUNCTION
breaks SBR
Bug #48246 assert in close_thread_table
Implement a fix for:
Bug #41804 purge stored procedure cache causes mysterious hang for many
minutes
Bug #49972 Crash in prepared statements
The problem was that concurrent execution of DML statements that
use stored functions and DDL statements that drop/modify the same
function might result in incorrect binary log in statement (and
mixed) mode and therefore break replication.
This patch fixes the problem by introducing metadata locking for
stored procedures and functions. This is similar to what is done
in Bug#25144 for views. Procedures and functions now are
locked using metadata locks until the transaction is either
committed or rolled back. This prevents other statements from
modifying the procedure/function while it is being executed. This
provides commit ordering - guaranteeing serializability across
multiple transactions and thus fixes the reported binlog problem.
Note that we do not take locks for top-level CALLs. This means
that procedures called directly are not protected from changes by
simultaneous DDL operations so they are executed at the state they
had at the time of the CALL. By not taking locks for top-level
CALLs, we still allow transactions to be started inside
procedures.
This patch also changes stored procedure cache invalidation.
Upon a change of cache version, we no longer invalidate the entire
cache, but only those routines which we use, only when a statement
is executed that uses them.
This patch also changes the logic of prepared statement validation.
A stored procedure used by a prepared statement is now validated
only once a metadata lock has been acquired. A version mismatch
causes a flush of the obsolete routine from the cache and
statement reprepare.
Incompatible changes:
1) ER_LOCK_DEADLOCK is reported for a transaction trying to access
a procedure/function that is locked by a DDL operation in
another connection.
2) Procedure/function DDL operations are now prohibited in LOCK
TABLES mode as exclusive locks must be taken all at once and
LOCK TABLES provides no way to specifiy procedures/functions to
be locked.
Test cases have been added to sp-lock.test and rpl_sp.test.
Work on this bug has very much been a team effort and this patch
includes and is based on contributions from Davi Arnaut, Dmitry
Lenev, Magne Mæhre and Konstantin Osipov.
mysql-test/r/ps_ddl.result:
Update results (Bug#30977).
mysql-test/r/ps_ddl1.result:
Update results (Bug#30977).
mysql-test/r/sp-error.result:
Update results (Bug#30977).
mysql-test/r/sp-lock.result:
Update results (Bug#30977).
mysql-test/suite/rpl/r/rpl_sp.result:
Update results (Bug#30977).
mysql-test/suite/rpl/t/rpl_sp.test:
Add a test case for Bug#30977.
mysql-test/t/ps_ddl.test:
Update comments. We no longer re-prepare a prepared statement
when a stored procedure used in top-level CALL is changed.
mysql-test/t/ps_ddl1.test:
Modifying stored procedure p1 no longer invalidates prepared
statement "call p1" -- we can re-use the prepared statement
without invalidation.
mysql-test/t/sp-error.test:
Use a constant for an error value.
mysql-test/t/sp-lock.test:
Add test coverage for Bug#30977.
sql/lock.cc:
Implement lock_routine_name() - a way to acquire an
exclusive metadata lock (ex- name-lock) on
stored procedure/function.
sql/sp.cc:
Change semantics of sp_cache_routine() -- now it has an option
to make sure that the routine that is cached is up to date (has
the latest sp cache version).
Add sp_cache_invalidate() to sp_drop_routine(), where it was
missing (a bug!).
Acquire metadata locks for SP DDL (ALTER/CREATE/DROP). This is
the core of the fix for Bug#30977.
Since caching and cache invalidation scheme was changed, make
sure we don't invalidate the SP cache in the middle of a stored
routine execution. At the same time, make sure we don't access
stale data due to lack of invalidation.
For that, change ALTER FUNCTION/PROCEDURE to not use the cache,
and SHOW PROCEDURE CODE/SHOW CREATE PROCEDURE/FUNCTION to always
read an up to date version of the routine from the cache.
sql/sp.h:
Add a helper wrapper around sp_cache_routine().
sql/sp_cache.cc:
Implement new sp_cache_version() and sp_cache_flush_obsolete().
Now we flush stale routines individually, rather than all at once.
sql/sp_cache.h:
Update signatures of sp_cache_version() and sp_cache_flush_obsolete().
sql/sp_head.cc:
Add a default initialization of sp_head::m_sp_cache_version.
Remove a redundant sp_head::create().
sql/sp_head.h:
Add m_sp_cache_version to sp_head class - we now
keep track of every routine in the stored procedure cache, rather than
of the entire cache.
sql/sql_base.cc:
Implement prelocking for stored routines. Validate stored
routines after they were locked.
Flush obsolete routines upon next access, one by one, not all at once
(Bug#41804).
Style fixes.
sql/sql_class.h:
Rename a Open_table_context method.
sql/sql_parse.cc:
Make sure stored procedures DDL commits the active transaction
(issues an implicit commit before and after).
Remove sp_head::create(), a pure redundancy.
Move the semantical check during alter routine inside sp_update_routine() code in order to:
- avoid using SP cache during update, it may be obsolete.
- speed up and simplify the update procedure.
Remove sp_cache_flush_obsolete() calls, we no longer flush the entire
cache, ever, stale routines are flushed before next use, one at a time.
sql/sql_prepare.cc:
Move routine metadata validation to open_and_process_routine().
Fix Bug#49972 (don't swap flags at reprepare).
Reset Sroutine_hash_entries in reinit_stmt_before_use().
Remove SP cache invalidation, it's now done by open_tables().
sql/sql_show.cc:
Fix a warning: remove an unused label.
sql/sql_table.cc:
Reset mdl_request.ticket for tickets acquired for routines inlined
through a view, in CHECK TABLE statement, to satisfy an MDL assert.
sql/sql_update.cc:
Move the cleanup of "translation items" to close_tables_for_reopen(),
since it's needed in all cases when we back off, not just
the back-off in multi-update. This fixes a bug when the server
would crash on attempt to back off when opening tables
for a statement that uses information_schema tables.
2009-12-29 13:19:05 +01:00
select * from t1;
a
2010-06-07 09:06:55 +02:00
1
Apply and review:
3655 Jon Olav Hauglid 2009-10-19
Bug #30977 Concurrent statement using stored function and DROP FUNCTION
breaks SBR
Bug #48246 assert in close_thread_table
Implement a fix for:
Bug #41804 purge stored procedure cache causes mysterious hang for many
minutes
Bug #49972 Crash in prepared statements
The problem was that concurrent execution of DML statements that
use stored functions and DDL statements that drop/modify the same
function might result in incorrect binary log in statement (and
mixed) mode and therefore break replication.
This patch fixes the problem by introducing metadata locking for
stored procedures and functions. This is similar to what is done
in Bug#25144 for views. Procedures and functions now are
locked using metadata locks until the transaction is either
committed or rolled back. This prevents other statements from
modifying the procedure/function while it is being executed. This
provides commit ordering - guaranteeing serializability across
multiple transactions and thus fixes the reported binlog problem.
Note that we do not take locks for top-level CALLs. This means
that procedures called directly are not protected from changes by
simultaneous DDL operations so they are executed at the state they
had at the time of the CALL. By not taking locks for top-level
CALLs, we still allow transactions to be started inside
procedures.
This patch also changes stored procedure cache invalidation.
Upon a change of cache version, we no longer invalidate the entire
cache, but only those routines which we use, only when a statement
is executed that uses them.
This patch also changes the logic of prepared statement validation.
A stored procedure used by a prepared statement is now validated
only once a metadata lock has been acquired. A version mismatch
causes a flush of the obsolete routine from the cache and
statement reprepare.
Incompatible changes:
1) ER_LOCK_DEADLOCK is reported for a transaction trying to access
a procedure/function that is locked by a DDL operation in
another connection.
2) Procedure/function DDL operations are now prohibited in LOCK
TABLES mode as exclusive locks must be taken all at once and
LOCK TABLES provides no way to specifiy procedures/functions to
be locked.
Test cases have been added to sp-lock.test and rpl_sp.test.
Work on this bug has very much been a team effort and this patch
includes and is based on contributions from Davi Arnaut, Dmitry
Lenev, Magne Mæhre and Konstantin Osipov.
mysql-test/r/ps_ddl.result:
Update results (Bug#30977).
mysql-test/r/ps_ddl1.result:
Update results (Bug#30977).
mysql-test/r/sp-error.result:
Update results (Bug#30977).
mysql-test/r/sp-lock.result:
Update results (Bug#30977).
mysql-test/suite/rpl/r/rpl_sp.result:
Update results (Bug#30977).
mysql-test/suite/rpl/t/rpl_sp.test:
Add a test case for Bug#30977.
mysql-test/t/ps_ddl.test:
Update comments. We no longer re-prepare a prepared statement
when a stored procedure used in top-level CALL is changed.
mysql-test/t/ps_ddl1.test:
Modifying stored procedure p1 no longer invalidates prepared
statement "call p1" -- we can re-use the prepared statement
without invalidation.
mysql-test/t/sp-error.test:
Use a constant for an error value.
mysql-test/t/sp-lock.test:
Add test coverage for Bug#30977.
sql/lock.cc:
Implement lock_routine_name() - a way to acquire an
exclusive metadata lock (ex- name-lock) on
stored procedure/function.
sql/sp.cc:
Change semantics of sp_cache_routine() -- now it has an option
to make sure that the routine that is cached is up to date (has
the latest sp cache version).
Add sp_cache_invalidate() to sp_drop_routine(), where it was
missing (a bug!).
Acquire metadata locks for SP DDL (ALTER/CREATE/DROP). This is
the core of the fix for Bug#30977.
Since caching and cache invalidation scheme was changed, make
sure we don't invalidate the SP cache in the middle of a stored
routine execution. At the same time, make sure we don't access
stale data due to lack of invalidation.
For that, change ALTER FUNCTION/PROCEDURE to not use the cache,
and SHOW PROCEDURE CODE/SHOW CREATE PROCEDURE/FUNCTION to always
read an up to date version of the routine from the cache.
sql/sp.h:
Add a helper wrapper around sp_cache_routine().
sql/sp_cache.cc:
Implement new sp_cache_version() and sp_cache_flush_obsolete().
Now we flush stale routines individually, rather than all at once.
sql/sp_cache.h:
Update signatures of sp_cache_version() and sp_cache_flush_obsolete().
sql/sp_head.cc:
Add a default initialization of sp_head::m_sp_cache_version.
Remove a redundant sp_head::create().
sql/sp_head.h:
Add m_sp_cache_version to sp_head class - we now
keep track of every routine in the stored procedure cache, rather than
of the entire cache.
sql/sql_base.cc:
Implement prelocking for stored routines. Validate stored
routines after they were locked.
Flush obsolete routines upon next access, one by one, not all at once
(Bug#41804).
Style fixes.
sql/sql_class.h:
Rename a Open_table_context method.
sql/sql_parse.cc:
Make sure stored procedures DDL commits the active transaction
(issues an implicit commit before and after).
Remove sp_head::create(), a pure redundancy.
Move the semantical check during alter routine inside sp_update_routine() code in order to:
- avoid using SP cache during update, it may be obsolete.
- speed up and simplify the update procedure.
Remove sp_cache_flush_obsolete() calls, we no longer flush the entire
cache, ever, stale routines are flushed before next use, one at a time.
sql/sql_prepare.cc:
Move routine metadata validation to open_and_process_routine().
Fix Bug#49972 (don't swap flags at reprepare).
Reset Sroutine_hash_entries in reinit_stmt_before_use().
Remove SP cache invalidation, it's now done by open_tables().
sql/sql_show.cc:
Fix a warning: remove an unused label.
sql/sql_table.cc:
Reset mdl_request.ticket for tickets acquired for routines inlined
through a view, in CHECK TABLE statement, to satisfy an MDL assert.
sql/sql_update.cc:
Move the cleanup of "translation items" to close_tables_for_reopen(),
since it's needed in all cases when we back off, not just
the back-off in multi-update. This fixes a bug when the server
would crash on attempt to back off when opening tables
for a statement that uses information_schema tables.
2009-12-29 13:19:05 +01:00
select * from t1;
a
2010-06-07 09:06:55 +02:00
1
Apply and review:
3655 Jon Olav Hauglid 2009-10-19
Bug #30977 Concurrent statement using stored function and DROP FUNCTION
breaks SBR
Bug #48246 assert in close_thread_table
Implement a fix for:
Bug #41804 purge stored procedure cache causes mysterious hang for many
minutes
Bug #49972 Crash in prepared statements
The problem was that concurrent execution of DML statements that
use stored functions and DDL statements that drop/modify the same
function might result in incorrect binary log in statement (and
mixed) mode and therefore break replication.
This patch fixes the problem by introducing metadata locking for
stored procedures and functions. This is similar to what is done
in Bug#25144 for views. Procedures and functions now are
locked using metadata locks until the transaction is either
committed or rolled back. This prevents other statements from
modifying the procedure/function while it is being executed. This
provides commit ordering - guaranteeing serializability across
multiple transactions and thus fixes the reported binlog problem.
Note that we do not take locks for top-level CALLs. This means
that procedures called directly are not protected from changes by
simultaneous DDL operations so they are executed at the state they
had at the time of the CALL. By not taking locks for top-level
CALLs, we still allow transactions to be started inside
procedures.
This patch also changes stored procedure cache invalidation.
Upon a change of cache version, we no longer invalidate the entire
cache, but only those routines which we use, only when a statement
is executed that uses them.
This patch also changes the logic of prepared statement validation.
A stored procedure used by a prepared statement is now validated
only once a metadata lock has been acquired. A version mismatch
causes a flush of the obsolete routine from the cache and
statement reprepare.
Incompatible changes:
1) ER_LOCK_DEADLOCK is reported for a transaction trying to access
a procedure/function that is locked by a DDL operation in
another connection.
2) Procedure/function DDL operations are now prohibited in LOCK
TABLES mode as exclusive locks must be taken all at once and
LOCK TABLES provides no way to specifiy procedures/functions to
be locked.
Test cases have been added to sp-lock.test and rpl_sp.test.
Work on this bug has very much been a team effort and this patch
includes and is based on contributions from Davi Arnaut, Dmitry
Lenev, Magne Mæhre and Konstantin Osipov.
mysql-test/r/ps_ddl.result:
Update results (Bug#30977).
mysql-test/r/ps_ddl1.result:
Update results (Bug#30977).
mysql-test/r/sp-error.result:
Update results (Bug#30977).
mysql-test/r/sp-lock.result:
Update results (Bug#30977).
mysql-test/suite/rpl/r/rpl_sp.result:
Update results (Bug#30977).
mysql-test/suite/rpl/t/rpl_sp.test:
Add a test case for Bug#30977.
mysql-test/t/ps_ddl.test:
Update comments. We no longer re-prepare a prepared statement
when a stored procedure used in top-level CALL is changed.
mysql-test/t/ps_ddl1.test:
Modifying stored procedure p1 no longer invalidates prepared
statement "call p1" -- we can re-use the prepared statement
without invalidation.
mysql-test/t/sp-error.test:
Use a constant for an error value.
mysql-test/t/sp-lock.test:
Add test coverage for Bug#30977.
sql/lock.cc:
Implement lock_routine_name() - a way to acquire an
exclusive metadata lock (ex- name-lock) on
stored procedure/function.
sql/sp.cc:
Change semantics of sp_cache_routine() -- now it has an option
to make sure that the routine that is cached is up to date (has
the latest sp cache version).
Add sp_cache_invalidate() to sp_drop_routine(), where it was
missing (a bug!).
Acquire metadata locks for SP DDL (ALTER/CREATE/DROP). This is
the core of the fix for Bug#30977.
Since caching and cache invalidation scheme was changed, make
sure we don't invalidate the SP cache in the middle of a stored
routine execution. At the same time, make sure we don't access
stale data due to lack of invalidation.
For that, change ALTER FUNCTION/PROCEDURE to not use the cache,
and SHOW PROCEDURE CODE/SHOW CREATE PROCEDURE/FUNCTION to always
read an up to date version of the routine from the cache.
sql/sp.h:
Add a helper wrapper around sp_cache_routine().
sql/sp_cache.cc:
Implement new sp_cache_version() and sp_cache_flush_obsolete().
Now we flush stale routines individually, rather than all at once.
sql/sp_cache.h:
Update signatures of sp_cache_version() and sp_cache_flush_obsolete().
sql/sp_head.cc:
Add a default initialization of sp_head::m_sp_cache_version.
Remove a redundant sp_head::create().
sql/sp_head.h:
Add m_sp_cache_version to sp_head class - we now
keep track of every routine in the stored procedure cache, rather than
of the entire cache.
sql/sql_base.cc:
Implement prelocking for stored routines. Validate stored
routines after they were locked.
Flush obsolete routines upon next access, one by one, not all at once
(Bug#41804).
Style fixes.
sql/sql_class.h:
Rename a Open_table_context method.
sql/sql_parse.cc:
Make sure stored procedures DDL commits the active transaction
(issues an implicit commit before and after).
Remove sp_head::create(), a pure redundancy.
Move the semantical check during alter routine inside sp_update_routine() code in order to:
- avoid using SP cache during update, it may be obsolete.
- speed up and simplify the update procedure.
Remove sp_cache_flush_obsolete() calls, we no longer flush the entire
cache, ever, stale routines are flushed before next use, one at a time.
sql/sql_prepare.cc:
Move routine metadata validation to open_and_process_routine().
Fix Bug#49972 (don't swap flags at reprepare).
Reset Sroutine_hash_entries in reinit_stmt_before_use().
Remove SP cache invalidation, it's now done by open_tables().
sql/sql_show.cc:
Fix a warning: remove an unused label.
sql/sql_table.cc:
Reset mdl_request.ticket for tickets acquired for routines inlined
through a view, in CHECK TABLE statement, to satisfy an MDL assert.
sql/sql_update.cc:
Move the cleanup of "translation items" to close_tables_for_reopen(),
since it's needed in all cases when we back off, not just
the back-off in multi-update. This fixes a bug when the server
would crash on attempt to back off when opening tables
for a statement that uses information_schema tables.
2009-12-29 13:19:05 +01:00
drop table t1, t2;
drop function f1;
ERROR 42000: FUNCTION test.f1 does not exist
2010-04-13 23:56:19 +02:00
#
# Bug #11918 Can't use a declared variable in LIMIT clause
#
2010-12-19 18:15:12 +01:00
include/rpl_reset.inc
2010-04-13 23:56:19 +02:00
create table t1 (c1 int);
insert into t1 (c1) values
(1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
2010-04-28 14:47:49 +02:00
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
2010-04-13 23:56:19 +02:00
create procedure p1(p1 integer)
delete from t1 limit p1;
set @save_binlog_format=@@session.binlog_format;
set @@session.binlog_format=STATEMENT;
call p1(NULL);
call p1(0);
call p1(1);
call p1(2);
call p1(3);
select * from t1;
c1
7
8
9
10
select * from t1;
c1
7
8
9
10
call p1(-1);
select * from t1;
c1
select * from t1;
c1
# Cleanup
set @@session.binlog_format=@save_binlog_format;
drop table t1;
drop procedure p1;
Apply and review:
3655 Jon Olav Hauglid 2009-10-19
Bug #30977 Concurrent statement using stored function and DROP FUNCTION
breaks SBR
Bug #48246 assert in close_thread_table
Implement a fix for:
Bug #41804 purge stored procedure cache causes mysterious hang for many
minutes
Bug #49972 Crash in prepared statements
The problem was that concurrent execution of DML statements that
use stored functions and DDL statements that drop/modify the same
function might result in incorrect binary log in statement (and
mixed) mode and therefore break replication.
This patch fixes the problem by introducing metadata locking for
stored procedures and functions. This is similar to what is done
in Bug#25144 for views. Procedures and functions now are
locked using metadata locks until the transaction is either
committed or rolled back. This prevents other statements from
modifying the procedure/function while it is being executed. This
provides commit ordering - guaranteeing serializability across
multiple transactions and thus fixes the reported binlog problem.
Note that we do not take locks for top-level CALLs. This means
that procedures called directly are not protected from changes by
simultaneous DDL operations so they are executed at the state they
had at the time of the CALL. By not taking locks for top-level
CALLs, we still allow transactions to be started inside
procedures.
This patch also changes stored procedure cache invalidation.
Upon a change of cache version, we no longer invalidate the entire
cache, but only those routines which we use, only when a statement
is executed that uses them.
This patch also changes the logic of prepared statement validation.
A stored procedure used by a prepared statement is now validated
only once a metadata lock has been acquired. A version mismatch
causes a flush of the obsolete routine from the cache and
statement reprepare.
Incompatible changes:
1) ER_LOCK_DEADLOCK is reported for a transaction trying to access
a procedure/function that is locked by a DDL operation in
another connection.
2) Procedure/function DDL operations are now prohibited in LOCK
TABLES mode as exclusive locks must be taken all at once and
LOCK TABLES provides no way to specifiy procedures/functions to
be locked.
Test cases have been added to sp-lock.test and rpl_sp.test.
Work on this bug has very much been a team effort and this patch
includes and is based on contributions from Davi Arnaut, Dmitry
Lenev, Magne Mæhre and Konstantin Osipov.
mysql-test/r/ps_ddl.result:
Update results (Bug#30977).
mysql-test/r/ps_ddl1.result:
Update results (Bug#30977).
mysql-test/r/sp-error.result:
Update results (Bug#30977).
mysql-test/r/sp-lock.result:
Update results (Bug#30977).
mysql-test/suite/rpl/r/rpl_sp.result:
Update results (Bug#30977).
mysql-test/suite/rpl/t/rpl_sp.test:
Add a test case for Bug#30977.
mysql-test/t/ps_ddl.test:
Update comments. We no longer re-prepare a prepared statement
when a stored procedure used in top-level CALL is changed.
mysql-test/t/ps_ddl1.test:
Modifying stored procedure p1 no longer invalidates prepared
statement "call p1" -- we can re-use the prepared statement
without invalidation.
mysql-test/t/sp-error.test:
Use a constant for an error value.
mysql-test/t/sp-lock.test:
Add test coverage for Bug#30977.
sql/lock.cc:
Implement lock_routine_name() - a way to acquire an
exclusive metadata lock (ex- name-lock) on
stored procedure/function.
sql/sp.cc:
Change semantics of sp_cache_routine() -- now it has an option
to make sure that the routine that is cached is up to date (has
the latest sp cache version).
Add sp_cache_invalidate() to sp_drop_routine(), where it was
missing (a bug!).
Acquire metadata locks for SP DDL (ALTER/CREATE/DROP). This is
the core of the fix for Bug#30977.
Since caching and cache invalidation scheme was changed, make
sure we don't invalidate the SP cache in the middle of a stored
routine execution. At the same time, make sure we don't access
stale data due to lack of invalidation.
For that, change ALTER FUNCTION/PROCEDURE to not use the cache,
and SHOW PROCEDURE CODE/SHOW CREATE PROCEDURE/FUNCTION to always
read an up to date version of the routine from the cache.
sql/sp.h:
Add a helper wrapper around sp_cache_routine().
sql/sp_cache.cc:
Implement new sp_cache_version() and sp_cache_flush_obsolete().
Now we flush stale routines individually, rather than all at once.
sql/sp_cache.h:
Update signatures of sp_cache_version() and sp_cache_flush_obsolete().
sql/sp_head.cc:
Add a default initialization of sp_head::m_sp_cache_version.
Remove a redundant sp_head::create().
sql/sp_head.h:
Add m_sp_cache_version to sp_head class - we now
keep track of every routine in the stored procedure cache, rather than
of the entire cache.
sql/sql_base.cc:
Implement prelocking for stored routines. Validate stored
routines after they were locked.
Flush obsolete routines upon next access, one by one, not all at once
(Bug#41804).
Style fixes.
sql/sql_class.h:
Rename a Open_table_context method.
sql/sql_parse.cc:
Make sure stored procedures DDL commits the active transaction
(issues an implicit commit before and after).
Remove sp_head::create(), a pure redundancy.
Move the semantical check during alter routine inside sp_update_routine() code in order to:
- avoid using SP cache during update, it may be obsolete.
- speed up and simplify the update procedure.
Remove sp_cache_flush_obsolete() calls, we no longer flush the entire
cache, ever, stale routines are flushed before next use, one at a time.
sql/sql_prepare.cc:
Move routine metadata validation to open_and_process_routine().
Fix Bug#49972 (don't swap flags at reprepare).
Reset Sroutine_hash_entries in reinit_stmt_before_use().
Remove SP cache invalidation, it's now done by open_tables().
sql/sql_show.cc:
Fix a warning: remove an unused label.
sql/sql_table.cc:
Reset mdl_request.ticket for tickets acquired for routines inlined
through a view, in CHECK TABLE statement, to satisfy an MDL assert.
sql/sql_update.cc:
Move the cleanup of "translation items" to close_tables_for_reopen(),
since it's needed in all cases when we back off, not just
the back-off in multi-update. This fixes a bug when the server
would crash on attempt to back off when opening tables
for a statement that uses information_schema tables.
2009-12-29 13:19:05 +01:00
# End of 5.5 tests.
BUG#49978: Replication tests don't clean up replication state at the end
Major replication test framework cleanup. This does the following:
- Ensure that all tests clean up the replication state when they
finish, by making check-testcase check the output of SHOW SLAVE STATUS.
This implies:
- Slave must not be running after test finished. This is good
because it removes the risk for sporadic errors in subsequent
tests when a test forgets to sync correctly.
- Slave SQL and IO errors must be cleared when test ends. This is
good because we will notice if a test gets an unexpected error in
the slave threads near the end.
- We no longer have to clean up before a test starts.
- Ensure that all tests that wait for an error in one of the slave
threads waits for a specific error. It is no longer possible to
source wait_for_slave_[sql|io]_to_stop.inc when there is an error
in one of the slave threads. This is good because:
- If a test expects an error but there is a bug that causes
another error to happen, or if it stops the slave thread without
an error, then we will notice.
- When developing tests, wait_for_*_to_[start|stop].inc will fail
immediately if there is an error in the relevant slave thread.
Before this patch, we had to wait for the timeout.
- Remove duplicated and repeated code for setting up unusual replication
topologies. Now, there is a single file that is capable of setting
up arbitrary topologies (include/rpl_init.inc, but
include/master-slave.inc is still available for the most common
topology). Tests can now end with include/rpl_end.inc, which will clean
up correctly no matter what topology is used. The topology can be
changed with include/rpl_change_topology.inc.
- Improved debug information when tests fail. This includes:
- debug info is printed on all servers configured by include/rpl_init.inc
- User can set $rpl_debug=1, which makes auxiliary replication files
print relevant debug info.
- Improved documentation for all auxiliary replication files. Now they
describe purpose, usage, parameters, and side effects.
- Many small code cleanups:
- Made have_innodb.inc output a sensible error message.
- Moved contents of rpl000017-slave.sh into rpl000017.test
- Added mysqltest variables that expose the current state of
disable_warnings/enable_warnings and friends.
- Too many to list here: see per-file comments for details.
client/mysqltest.cc:
Added the following variables:
$ENABLED_WARNINGS
$ENABLED_QUERY_LOG
$ENABLED_RESULT_LOG
$ENABLED_ABORT_ON_ERROR
$ENABLED_INFO
$ENABLED_METADATA
Each variable is 0 or 1, depending on if the corresponding
mysqltest feature is on or off.
mysql-test/extra/rpl_tests/rpl_EE_err.test:
Made test clean up after itself and removed outdated comments.
mysql-test/extra/rpl_tests/rpl_auto_increment.test:
- Use rpl_reset.inc instead of master-slave-reset.inc
- diff_tables.inc now takes only one parameter.
Made test clean up after itself and removed outdated comments.
mysql-test/extra/rpl_tests/rpl_auto_increment_insert_view.test:
diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_auto_increment_invoke_trigger.test:
diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_autoinc_func_invokes_trigger.test:
diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_charset.test:
Made test clean up after itself and removed unnecessary cleanup in beginning.
mysql-test/extra/rpl_tests/rpl_commit_after_flush.test:
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_conflicts.test:
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_ddl.test:
Don't clean up replication here since this file does not setup
replication. The main test now has to both setup and clean up
replication.
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_deadlock.test:
make test clean up after itself
mysql-test/extra/rpl_tests/rpl_extra_col_master.test:
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_extra_col_slave.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_failed_optimize.test:
made test clean up after itself
mysql-test/extra/rpl_tests/rpl_flsh_tbls.test:
made test clean up after itself
mysql-test/extra/rpl_tests/rpl_foreign_key.test:
made test clean up after itself
mysql-test/extra/rpl_tests/rpl_get_master_version_and_clock.test:
- Replace 'start slave; wait_for_slave_to_start.inc' by
include/start_slave.inc.
- Use new file rpl_connect.inc to reconnect on all connections, since the
connections are used by rpl_end.inc.
- Use wait_for_slave_param.inc instead of wait_for_slave_io_to_start.inc,
since wait_for_slave_io_to_start.inc now fails if the IO thread has
an error. In this particular test case, it is normal that the IO thread
has an error.
- Changed wait_for_slave_io_error.inc so that it waits
for the IO thread to stop. However, in this test case,
the IO thread only gets a non-fatal error, so it does
not stop. So we set $slave_io_error_is_nonfatal=1 to
prevent wait_for_slave_io_error.inc from waiting.
mysql-test/extra/rpl_tests/rpl_insert_id.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_insert_id_pk.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_loaddata.test:
- Use wait_for_slave_sql_error.inc to wait for errors
instead of wait_for_slave_sql_to_stop.inc
- Use check_slave_no_error.inc instead of print errors
to the log.
- Use rpl_reset.inc instead of master-slave-reset.inc
This means we have to clear the error from the slave
threads by calling RESET SLAVE explicitly.
- diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_log.test:
replace master-slave-reset.inc by rpl_reset.inc
mysql-test/extra/rpl_tests/rpl_max_relay_size.test:
made test clean up after itself
cosmetic fix
mysql-test/extra/rpl_tests/rpl_multi_query.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_multi_update.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_ndb_apply_status.test:
replace master-slave-reset.inc by rpl_reset.inc
mysql-test/extra/rpl_tests/rpl_not_null.test:
- replace master-slave-reset.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_record_compare.test:
- replace master-slave-reset.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_reset_slave.test:
- replace wait_for_slave_io_error.inc+stop_slave.inc by
wait_for_slave_io_error_and_stop.inc+stop_slave_sql.inc
since stop_slave.inc now fails when the io thread has an
error.
- replace stop_slave.inc by STOP SLAVE +
wait_for_slave_sql_to_stop.inc +
wait_for_slave_param. stop_slave.inc would fail since
the IO thread has an error.
- add include/rpl_end.inc to clean up replication state
mysql-test/extra/rpl_tests/rpl_row_UUID.test:
Don't clean up replication here since this file does not setup
replication. The main test now has to both setup and clean up
replication.
mysql-test/extra/rpl_tests/rpl_row_basic.test:
- replaced reset_master_and_slave.inc by rpl_reset.inc
- replaced sequence of reset master+reset slave by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_row_delayed_ins.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_row_sp002.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_row_sp007.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_set_null.test:
- replaced master-slave-reset.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/extra/rpl_tests/rpl_stm_EE_err2.test:
- Made test clean up replication state.
mysql-test/extra/rpl_tests/rpl_stm_create_if_not_exists.test:
replaced rpl_diff_tables.inc by diff_tables.inc
mysql-test/extra/rpl_tests/rpl_stop_slave.test:
changed protocol for diff_tables.inc
mysql-test/extra/rpl_tests/rpl_sv_relay_space.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_test_framework.inc:
Auxiliary file used by rpl_test_framework.test.
This checks that rpl_change_topology.inc works correctly.
mysql-test/extra/rpl_tests/rpl_truncate.test:
made test clean up after itself
cosmetic fixes
mysql-test/extra/rpl_tests/rpl_truncate_helper.test:
- replace reset_master_and_slave.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/include/analyze-sync_with_master.test:
- improved debug output printed when sync_slave_with_master or
sync_with_master fails
- Added documentation
mysql-test/include/assert.inc:
Added file to facilitate assertions.
mysql-test/include/begin_include_file.inc:
New auxiliary file to be used by replication helper files like
rpl_init.inc, stop_slave.inc, wait_for_slave_*.inc, etc. Such
helper files should source rpl_begin_include_file.inc at the
beginning and rpl_end_include_file.inc at the end. That adds the
following features:
- When a test sources the file, the file name is printed to the
result file. This is good because it makes result files easier to
follow.
- When a helper file sources a second helper file recursively, then
the name of the second file is not printed. This is good because
it would make the result file harder to follow if all the internal
calls of all helper files were printed.
- When $rpl_debug is set, all internal calls are printed to the
result file. This is good because it helps when debugging test
cases. (With $rpl_debug=1, many of the helper files now print other
relevant debug info too.)
- When a file needs to turn off the query log or the warning log
(disable_query_log/disable_warnings), then the file can tell
rpl_begin_include_file.inc about it. Then rpl_begin_include_file.inc
will turn off the log correctly, and rpl_end_include_file.inc
will turn on the log correctly. Note that if rpl_a.inc sources
rpl_b.inc and both files need to turn off the log, then the
log is not turned on when rpl_b.inc ends (because rpl_a.inc
still needs the log off). This makes it easier to program
replication helper files.
mysql-test/include/check-testcase.test:
Made check-testcase ensure that the slave status is reset
after the test has finished.
mysql-test/include/check_slave_is_running.inc:
- Use existing framework (check_slave_param.inc) instead of ad-hoc code
to check value of slave parameters.
- Use rpl_begin_include_file.inc to improve debug capabilities.
- improve documentation.
mysql-test/include/check_slave_no_error.inc:
- Use rpl_begin_include_file.inc to improve debug capabilities.
- improve documentation.
mysql-test/include/check_slave_param.inc:
- Use rpl_begin_include_file.inc to improve debug capabilities.
- improve documentation.
mysql-test/include/cleanup_fake_relay_log.inc:
- Use RESET SLAVE instead of manual file removal. This also
resets other replication state.
- verify that RESET SLAVE correctly removed files.
mysql-test/include/diff_tables.inc:
- Use rpl_begin_include_file.inc to improve debug capabilities.
- Improved documentation.
- file now supports an arbitrary number of tables
(not just two). The tables are now given as a comma-separated
list instead of as two variables.
- You no longer have to specify database name for each table.
If no database is specified, it defaults to the current
database.
- File now restores the connection at the end.
mysql-test/include/end_include_file.inc:
New file to be sourced at the end of auxiliary replication include
files. See include/rpl_begin_include_file.inc for details.
mysql-test/include/file_does_not_exist.inc:
Added .inc file to check that a given file is removed.
mysql-test/include/force_restart.inc:
Added file to force server restart after test
mysql-test/include/force_restart_if_skipped.inc:
Added file to force server restart after test, if the test is skipped
mysql-test/include/have_innodb.inc:
Made have_innodb.inc print sensible message when innodb is
not supported.
mysql-test/include/io_thd_fault_injection.inc:
Use rpl_server_restart.inc instead of restart_mysqld.inc in rpl tests
mysql-test/include/kill_query_and_diff_master_slave.inc:
Renamed diff_master_slave.inc to rpl_diff.inc
mysql-test/include/master-slave.inc:
- Use new rpl_init.inc file
- Now, we don't do 'drop table' in master-slave.inc any more. That's good
because drop table has nothing to do with configuring replication servers.
- master-slave.inc now supports the additional parameter
$rpl_server_count. By default, master-slave.inc only
configures two servers; if $rpl_server_count is set, it
configures that many servers. Only the second server is
a slave; the rest are not part of the replication topology.
mysql-test/include/mtr_check.sql:
Removed unneeded SP (use include/force_restart.inc instead)
mysql-test/include/mysqldump.inc:
diff_tables.inc now takes only one parameter.
mysql-test/include/ndb_master-slave.inc:
use master-slave.inc instead of ad-hoc calls to 'connect'
mysql-test/include/ndb_master-slave_2ch.inc:
use rpl_init.inc instead of ad-hoc setup
mysql-test/include/ndb_not_readonly.inc:
turn off query log while executing this script.
this was previously done by the caller. now it's done in the script.
mysql-test/include/report-features.test:
add newline at end of file
mysql-test/include/reset_master_and_slave.inc:
rpl_reset.inc replaces this file
mysql-test/include/restart_mysqld.inc:
force caller to use rpl_restart_server.inc instead if replication is configured
mysql-test/include/rpl_change_topology.inc:
New file to change replication topology on the fly. This is used
by rpl_init.inc internally, but is also used by test cases
that need to change topology (e.g., rpl.rpl_circular_for_4_hosts, which
reconfigures the topology to make a failover).
mysql-test/include/rpl_connect.inc:
New file to create a named connection. This file knows about a number
of "standard" connections (master, slave, server_1, etc), and knows how
each of them should normally be created. This is mostly used internally
(e.g., by rpl_init.inc, master-slave.inc, ndb_master-slave_2ch.inc etc),
but can also be used by tests that need to bring a connection up after
disconnecting.
mysql-test/include/rpl_connection.inc:
New file to change connection. This prints the name of the connection.
However, for files that source rpl_begin_include_file.inc, it does not
print the name of the connection unless $rpl_debug=1. This is good
because printing something every time the .inc file changed connection
would make the result log harder to read.
mysql-test/include/rpl_diff.inc:
- Made file capable to compare many servers
- Hence renamed it to rpl_diff.inc
- If no server list is specified, use all servers from
server_1 to server_$rpl_server_count
- It now writes the statement to file before executing it.
That means it will be subject to SQL string interpolation,
but not shell string interpolation (which may be
platform-dependent)
mysql-test/include/rpl_diff_tables.inc:
Removed this file, since its functionality has been merged into
diff_tables.inc.
mysql-test/include/rpl_end.inc:
Renamed master-slave-end.inc to rpl_end.inc, and made it
work with arbitrary replication topologies (as configured
with rpl_init.inc and possibly rpl_change_topology.inc). Also
made it assert that no slave thread has an error. Made it
assert that no slave thread is stopped, unless
$rpl_only_running_threads=1.
mysql-test/include/rpl_for_each_slave.inc:
New test script that executes a command once for each slave.
This is used by include/rpl_start_slaves.inc and
include/rpl_stop_slaves.inc and could possibly be useful for other
custom scripts too.
mysql-test/include/rpl_generate_sync_chain.inc:
New file that computes the variable $rpl_sync_chain. This variable
determines in what order slaves are synced by include/rpl_sync.inc.
The variable is recomputed the first time that include/rpl_sync.inc
is called after rpl_change_topology.inc.
mysql-test/include/rpl_init.inc:
Made file work for arbitrary topologies instead of just 4-server
circle. This file is used by master-slave.inc, rpl_master-slave_2ch.inc
etc, and also by tests that need other specific replication topologies.
mysql-test/include/rpl_reconnect.inc:
New auxiliary file that will reconnect many clients to a given
server. All clients configured by rpl_init.inc will reconnect.
mysql-test/include/rpl_reset.inc:
Made file work for arbitrary replication topologies,
check for errors, and sync all threads. Also removed
'drop table' because that has nothing to do with replication.
mysql-test/include/rpl_restart_server.inc:
New auxiliary file that restarts a server.
mysql-test/include/rpl_start_server.inc:
New auxiliary file that starts a server that has been shut down.
mysql-test/include/rpl_start_slaves.inc:
New auxiliary file to start all slaves configured by rpl_init.inc
This is used internally by rpl_init.inc but may also be used by tests
that want to bring all slaves up.
mysql-test/include/rpl_stop_server.inc:
New auxiliary file that shuts down a server.
mysql-test/include/rpl_stop_slaves.inc:
New auxiliary file to stop all slaves configured rpl_init.inc. This
is used internally by rpl_end.inc, but may also be used by tests that
want to stop all slaves.
mysql-test/include/rpl_sync.inc:
Made file work for arbitrary replication topologies (as configured
by rpl_init.inc and possibly rpl_change_topology.inc) instead of
just 4-server circle.
mysql-test/include/save_master_pos.inc:
Auxiliary file to save the master position.
mysql-test/include/setup_fake_relay_log.inc:
- Moved complicated logic to write to file into
write_var_to_file.inc, so that it can be re-used by
other tests.
- Added call to show_rpl_debug_info and die in error case.
mysql-test/include/show_rpl_debug_info.inc:
- Made file print NOW()
- Made file print both SHOW MASTER STATUS, SHOW SLAVE HOSTS,
and SHOW SLAVE STATUS.
- Made file print debug info for all servers configured by
rpl_init.inc
mysql-test/include/show_slave_status.inc:
- Made file use echo instead of SELECT to print variables.
- Improved comments.
- Use variable names that are less likely to be used by other tests.
mysql-test/include/start_slave.inc:
- Made test use rpl_begin_include_file.inc to improve debug
capabilities.
- improved documentation
mysql-test/include/stop_slave.inc:
- Made script capable to detect which threads are running
and stop only those.
- Improved documentation
mysql-test/include/stop_slave_io.inc:
Added file to stop the slave IO thread.
mysql-test/include/stop_slave_sql.inc:
Added file to stop the slave SQL thread.
mysql-test/include/sync_io_with_master.inc:
Added file to sync the IO thread of the current connection, up to
a previously saved position.
mysql-test/include/sync_slave_io_with_master.inc:
- Made file work with arbitrarily-named connections.
- Made file use rpl_begin_include_file.inc to improve debug
capabilities.
mysql-test/include/sync_slave_sql_with_io.inc:
Added file to sync only the SQL thread, up to the position copied
in the IO thread.
mysql-test/include/wait_for_query_to_fail.inc:
Added file to wait for a query to fail.
mysql-test/include/wait_for_slave_io_error.inc:
- Use rpl_begin_include_file.inc to improve debug capabilities.
- Use existing atom include/show_slave_status.inc to print error
message.
- Improve comments.
******
- This file now waits until the slave IO thread has completely
stopped (to avoid races in tests).
- Some IO thread errors are non-fatal and don't cause the slave
IO thread to stop. To allow tests to wait for such errors, we
add the parameters $slave_io_error_is_nonfatal. If
$slave_io_error_is_nonfatal is set, this script does not wait
for the IO thread to stop.
mysql-test/include/wait_for_slave_io_to_start.inc:
- Made script fail if the IO thread has an error.
- Use rpl_begin_include_file.inc to improve debug capabilities.
- Improved documentation.
mysql-test/include/wait_for_slave_io_to_stop.inc:
- Fail if server is not configured as slave. Previously, the
script accepted servers not configured as slave because there
was cleanup code called from master-slave.inc that would execute
STOP SLAVE on both master and slave. Now all tests have to
clean up after themselves, so we don't have to call stop slave
at the beginning of tests. Hence, we disallow calling this
script on servers not configured as slaves.
- Use rpl_begin_include_file.inc to improve debug capabilities.
- Improved documentation.
mysql-test/include/wait_for_slave_param.inc:
- Added $slave_error_param. This variable can be set to
Slave_IO_Errno or Slave_SQL_Errno, in which case the
script fails if the corresponding column in the output from
SHOW SLAVE STATUS is nonzero.
- Replaced exit by die.
- Made it print timeout seconds correctly in error message.
- Removed $slave_error_message. This is not needed.
- Use rpl_begin_include_file.inc for better debug capabilities.
mysql-test/include/wait_for_slave_sql_error.inc:
- Use rpl_begin_include_file.inc for better debug capabilities.
- Improve documentation
- Use existing atom show_slave_status.inc to print error.
mysql-test/include/wait_for_slave_sql_error_and_skip.inc:
- Use rpl_begin_include_file.inc and rpl_connection.inc for better
debug capabilities.
- Improve documentation
mysql-test/include/wait_for_slave_sql_to_start.inc:
- Use rpl_begin_include_file.inc for better debug capabilities.
- Improve documentation
mysql-test/include/wait_for_slave_sql_to_stop.inc:
- Fail if Last_SQL_Errno is nonzero.
- Fail if server is not configured as slave. Previously, the
script accepted servers not configured as slave because there
was cleanup code called from master-slave.inc that would execute
STOP SLAVE on both master and slave. Now all tests have to
clean up after themselves, so we don't have to call stop slave
at the beginning of tests. Hence, we disallow calling this
script on servers not configured as slaves.
- Use rpl_begin_include_file.inc for better debug capabilities.
- Improve documentation
mysql-test/include/wait_for_slave_to_start.inc:
- Use rpl_begin_include_file.inc for better debug capabilities.
- Improve documentation
mysql-test/include/wait_for_slave_to_stop.inc:
- Use rpl_begin_include_file.inc for better debug capabilities.
- Improve documentation
mysql-test/include/write_var_to_file.inc:
Added file to write contents of a mysqltest variable to file.
(This was previously in setup_fake_relay_log.inc)
mysql-test/mysql-test-run.pl:
Allow tests to require restart in case the test is skipped.
mysql-test/r/init_file.result:
updated result file
mysql-test/r/mysqldump_restore.result:
update result file
mysql-test/suite/binlog/r/binlog_drop_if_exists.result:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/r/binlog_old_versions.result:
updated result file
mysql-test/suite/binlog/r/binlog_query_filter_rules.result:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/r/binlog_server_id.result:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/r/binlog_sf.result:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/r/binlog_sql_mode.result:
updated result file
mysql-test/suite/binlog/t/binlog_auto_increment_bug33029-master.opt:
This test replicates, so it should be in the rpl suite.
Then we can remove this .opt file too.
mysql-test/suite/binlog/t/binlog_drop_if_exists.test:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/t/binlog_old_versions.test:
cosmetic fixes
mysql-test/suite/binlog/t/binlog_query_filter_rules-master.opt:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/t/binlog_query_filter_rules.test:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/t/binlog_server_id.test:
Moved test that does not use replication to binlog suite.
mysql-test/suite/binlog/t/binlog_sf.test:
Moved test that does not use replication to binlog suite.
Since test sets binlog_format internally, it's useless to
re-run it. Hence we source have_binlog_format_statement.inc
mysql-test/suite/binlog/t/binlog_sql_mode.test:
- Test does not use replication, so we remove master-slave.inc.
- mysqltest magically adds --force-if-open to $MYSQL_BINLOG in test
files that source master-slave.inc. So now we have to add
--force-if-open explicitly.
mysql-test/suite/bugs/t/rpl_bug12691.test:
made test clean up after itself
cosmetic fixes
mysql-test/suite/bugs/t/rpl_bug23533.test:
made test clean up after itself
cosmetic fixes
mysql-test/suite/bugs/t/rpl_bug31582.test:
made test clean up after itself
mysql-test/suite/bugs/t/rpl_bug31583.test:
made test clean up after itself
mysql-test/suite/bugs/t/rpl_bug33029.test:
made test clean up after itself
mysql-test/suite/bugs/t/rpl_bug36391.test:
made test clean up after itself
cosmetic fixes
mysql-test/suite/bugs/t/rpl_bug37426.test:
made test clean up after itself
cosmetic fixes
mysql-test/suite/bugs/t/rpl_bug38205.test:
made test clean up after itself
mysql-test/suite/manual/t/rpl_replication_delay.test:
made test clean up after itself
cosmetic fixes
mysql-test/suite/ndb_team/t/rpl_ndb_dd_advance.test:
made test clean up after itself
cosmetic fixes
mysql-test/suite/ndb_team/t/rpl_ndb_extraColMaster.test:
made test clean up after itself
mysql-test/suite/ndb_team/t/rpl_ndb_mix_innodb.test:
made test clean up after itself
cosmetic fixes
mysql-test/suite/parts/r/rpl_partition.result:
updated result file
mysql-test/suite/parts/t/rpl_partition.test:
Make test clean up replication state.
cosmetic fixes
mysql-test/suite/rpl/include/rpl_mixed_ddl.inc:
made test clean up after itself
cosmetic fixes
mysql-test/suite/rpl/include/rpl_mixed_dml.inc:
made test clean up after itself
cosmetic fixes
mysql-test/suite/rpl/r/rpl_000010.result:
update result file
mysql-test/suite/rpl/r/rpl_000011.result:
update result file
mysql-test/suite/rpl/r/rpl_000013.result:
update result file
mysql-test/suite/rpl/r/rpl_000017.result:
update result file
mysql-test/suite/rpl/r/rpl_EE_err.result:
update result file
mysql-test/suite/rpl/r/rpl_LD_INFILE.result:
update result file
mysql-test/suite/rpl/r/rpl_alter.result:
update result file
mysql-test/suite/rpl/r/rpl_alter_db.result:
update result file
mysql-test/suite/rpl/r/rpl_auto_increment.result:
update result file
mysql-test/suite/rpl/r/rpl_auto_increment_11932.result:
update result file
mysql-test/suite/rpl/r/rpl_auto_increment_bug33029.result:
update result file
mysql-test/suite/rpl/r/rpl_auto_increment_update_failure.result:
update result file
mysql-test/suite/rpl/r/rpl_begin_commit_rollback.result:
update result file
mysql-test/suite/rpl/r/rpl_binlog_corruption.result:
Updated result file
mysql-test/suite/rpl/r/rpl_binlog_errors.result:
updated result file
mysql-test/suite/rpl/r/rpl_binlog_grant.result:
update result file
mysql-test/suite/rpl/r/rpl_binlog_max_cache_size.result:
Updated result file
mysql-test/suite/rpl/r/rpl_bit.result:
update result file
mysql-test/suite/rpl/r/rpl_bit_npk.result:
update result file
mysql-test/suite/rpl/r/rpl_blackhole.result:
update result file
mysql-test/suite/rpl/r/rpl_bug26395.result:
update result file
mysql-test/suite/rpl/r/rpl_bug31076.result:
update result file
mysql-test/suite/rpl/r/rpl_bug33931.result:
updated result file
mysql-test/suite/rpl/r/rpl_bug38694.result:
update result file
mysql-test/suite/rpl/r/rpl_change_master.result:
update result file
mysql-test/suite/rpl/r/rpl_charset.result:
update result file
mysql-test/suite/rpl/r/rpl_charset_sjis.result:
update result file
mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result:
Updated result file
mysql-test/suite/rpl/r/rpl_colSize.result:
update result file
mysql-test/suite/rpl/r/rpl_commit_after_flush.result:
update result file
mysql-test/suite/rpl/r/rpl_concurrency_error.result:
update result file
mysql-test/suite/rpl/r/rpl_conditional_comments.result:
update result file
mysql-test/suite/rpl/r/rpl_create_database.result:
update result file
mysql-test/suite/rpl/r/rpl_create_if_not_exists.result:
update result file
mysql-test/suite/rpl/r/rpl_create_tmp_table_if_not_exists.result:
update result file
mysql-test/suite/rpl/r/rpl_cross_version.result:
Updated result file
mysql-test/suite/rpl/r/rpl_current_user.result:
update result file
mysql-test/suite/rpl/r/rpl_deadlock_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_delete_no_where.result:
update result file
mysql-test/suite/rpl/r/rpl_do_grant.result:
updated result file
mysql-test/suite/rpl/r/rpl_drop.result:
update result file
mysql-test/suite/rpl/r/rpl_drop_db.result:
update result file
mysql-test/suite/rpl/r/rpl_drop_temp.result:
update result file
mysql-test/suite/rpl/r/rpl_drop_view.result:
update result file
mysql-test/suite/rpl/r/rpl_dual_pos_advance.result:
update result file
mysql-test/suite/rpl/r/rpl_empty_master_crash.result:
update result file
mysql-test/suite/rpl/r/rpl_err_ignoredtable.result:
update result file
mysql-test/suite/rpl/r/rpl_events.result:
update result file
mysql-test/suite/rpl/r/rpl_extra_col_master_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_extra_col_master_myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_extra_col_slave_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_extra_col_slave_myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_failed_optimize.result:
update result file
mysql-test/suite/rpl/r/rpl_filter_tables_not_exist.result:
update result file
mysql-test/suite/rpl/r/rpl_flushlog_loop.result:
update result file
mysql-test/suite/rpl/r/rpl_foreign_key_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_found_rows.result:
update result file
mysql-test/suite/rpl/r/rpl_free_items.result:
update result file
mysql-test/suite/rpl/r/rpl_geometry.result:
update result file
mysql-test/suite/rpl/r/rpl_get_lock.result:
update result file
mysql-test/suite/rpl/r/rpl_get_master_version_and_clock.result:
update result file
mysql-test/suite/rpl/r/rpl_grant.result:
update result file
mysql-test/suite/rpl/r/rpl_idempotency.result:
update result file
mysql-test/suite/rpl/r/rpl_ignore_grant.result:
update result file
mysql-test/suite/rpl/r/rpl_ignore_revoke.result:
update result file
mysql-test/suite/rpl/r/rpl_ignore_table.result:
update result file
mysql-test/suite/rpl/r/rpl_ignore_table_update.result:
update result file
mysql-test/suite/rpl/r/rpl_incident.result:
update result file
mysql-test/suite/rpl/r/rpl_init_slave.result:
update result file
mysql-test/suite/rpl/r/rpl_init_slave_errors.result:
update result file
mysql-test/suite/rpl/r/rpl_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_innodb_bug28430.result:
update result file
mysql-test/suite/rpl/r/rpl_innodb_bug30888.result:
update result file
mysql-test/suite/rpl/r/rpl_innodb_mixed_ddl.result:
update result file
mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result:
update result file
mysql-test/suite/rpl/r/rpl_insert.result:
update result file
mysql-test/suite/rpl/r/rpl_insert_id.result:
update result file
mysql-test/suite/rpl/r/rpl_insert_id_pk.result:
update result file
mysql-test/suite/rpl/r/rpl_insert_ignore.result:
update result file
mysql-test/suite/rpl/r/rpl_insert_select.result:
update result file
mysql-test/suite/rpl/r/rpl_invoked_features.result:
update result file
mysql-test/suite/rpl/r/rpl_killed_ddl.result:
update result file
mysql-test/suite/rpl/r/rpl_known_bugs_detection.result:
update result file
mysql-test/suite/rpl/r/rpl_load_from_master.result:
update result file
mysql-test/suite/rpl/r/rpl_load_table_from_master.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_charset.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_concurrent.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_fatal.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_m.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_map.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_s.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_simple.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddata_symlink.result:
update result file
mysql-test/suite/rpl/r/rpl_loaddatalocal.result:
update result file
mysql-test/suite/rpl/r/rpl_loadfile.result:
update result file
mysql-test/suite/rpl/r/rpl_locale.result:
update result file
mysql-test/suite/rpl/r/rpl_log_pos.result:
update result file
mysql-test/suite/rpl/r/rpl_manual_change_index_file.result:
update result file
mysql-test/suite/rpl/r/rpl_many_optimize.result:
update result file
mysql-test/suite/rpl/r/rpl_master_pos_wait.result:
update result file
mysql-test/suite/rpl/r/rpl_misc_functions.result:
update result file
mysql-test/suite/rpl/r/rpl_mixed_bit_pk.result:
update result file
mysql-test/suite/rpl/r/rpl_mixed_ddl_dml.result:
update result file
mysql-test/suite/rpl/r/rpl_multi_delete.result:
update result file
mysql-test/suite/rpl/r/rpl_multi_delete2.result:
update result file
mysql-test/suite/rpl/r/rpl_multi_engine.result:
update result file
mysql-test/suite/rpl/r/rpl_multi_update.result:
update result file
mysql-test/suite/rpl/r/rpl_multi_update2.result:
update result file
mysql-test/suite/rpl/r/rpl_multi_update3.result:
update result file
mysql-test/suite/rpl/r/rpl_multi_update4.result:
update result file
mysql-test/suite/rpl/r/rpl_mysql_upgrade.result:
update result file
mysql-test/suite/rpl/r/rpl_name_const.result:
update result file
mysql-test/suite/rpl/r/rpl_nondeterministic_functions.result:
update result file
mysql-test/suite/rpl/r/rpl_not_null_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_not_null_myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_optimize.result:
update result file
mysql-test/suite/rpl/r/rpl_packet.result:
update result file
mysql-test/suite/rpl/r/rpl_plugin_load.result:
update result file
mysql-test/suite/rpl/r/rpl_ps.result:
update result file
mysql-test/suite/rpl/r/rpl_rbr_to_sbr.result:
update result file
mysql-test/suite/rpl/r/rpl_read_only.result:
update result file
mysql-test/suite/rpl/r/rpl_relay_space_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_relay_space_myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_relayrotate.result:
update result file
mysql-test/suite/rpl/r/rpl_relayspace.result:
update result file
mysql-test/suite/rpl/r/rpl_replicate_do.result:
update result file
mysql-test/suite/rpl/r/rpl_replicate_ignore_db.result:
update result file
mysql-test/suite/rpl/r/rpl_report.result:
update result file
mysql-test/suite/rpl/r/rpl_rewrt_db.result:
update result file
mysql-test/suite/rpl/r/rpl_rotate_logs.result:
update result file
mysql-test/suite/rpl/r/rpl_row_001.result:
update result file
mysql-test/suite/rpl/r/rpl_row_4_bytes.result:
update result file
mysql-test/suite/rpl/r/rpl_row_NOW.result:
update result file
mysql-test/suite/rpl/r/rpl_row_USER.result:
update result file
mysql-test/suite/rpl/r/rpl_row_UUID.result:
update result file
mysql-test/suite/rpl/r/rpl_row_basic_11bugs.result:
update result file
mysql-test/suite/rpl/r/rpl_row_basic_2myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_row_basic_3innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_row_basic_8partition.result:
update result file
mysql-test/suite/rpl/r/rpl_row_blob_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_row_blob_myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_row_colSize.result:
update result file
mysql-test/suite/rpl/r/rpl_row_conflicts.result:
update result file
mysql-test/suite/rpl/r/rpl_row_delayed_ins.result:
update result file
mysql-test/suite/rpl/r/rpl_row_drop.result:
update result file
mysql-test/suite/rpl/r/rpl_row_find_row.result:
update result file
mysql-test/suite/rpl/r/rpl_row_flsh_tbls.result:
update result file
mysql-test/suite/rpl/r/rpl_row_func001.result:
update result file
mysql-test/suite/rpl/r/rpl_row_func002.result:
update result file
mysql-test/suite/rpl/r/rpl_row_func003.result:
update result file
mysql-test/suite/rpl/r/rpl_row_inexist_tbl.result:
updated result file
mysql-test/suite/rpl/r/rpl_row_insert_delayed.result:
update result file
mysql-test/suite/rpl/r/rpl_row_log.result:
update result file
mysql-test/suite/rpl/r/rpl_row_log_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_row_max_relay_size.result:
update result file
mysql-test/suite/rpl/r/rpl_row_mysqlbinlog.result:
update result file
mysql-test/suite/rpl/r/rpl_row_rec_comp_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_row_rec_comp_myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_row_reset_slave.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp001.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp002_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp003.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp005.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp006_InnoDB.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp007_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp008.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp009.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp010.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp011.result:
update result file
mysql-test/suite/rpl/r/rpl_row_sp012.result:
update result file
mysql-test/suite/rpl/r/rpl_row_stop_middle_update.result:
update result file
mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_row_tbl_metadata.result:
update result file
mysql-test/suite/rpl/r/rpl_row_trig001.result:
update result file
mysql-test/suite/rpl/r/rpl_row_trig002.result:
update result file
mysql-test/suite/rpl/r/rpl_row_trig003.result:
update result file
mysql-test/suite/rpl/r/rpl_row_trig004.result:
update result file
mysql-test/suite/rpl/r/rpl_row_trunc_temp.result:
update result file
mysql-test/suite/rpl/r/rpl_row_unsafe_funcs.result:
update result file
mysql-test/suite/rpl/r/rpl_row_until.result:
update result file
mysql-test/suite/rpl/r/rpl_row_view01.result:
update result file
mysql-test/suite/rpl/r/rpl_row_wide_table.result:
update result file
mysql-test/suite/rpl/r/rpl_server_id1.result:
update result file
mysql-test/suite/rpl/r/rpl_server_id2.result:
update result file
mysql-test/suite/rpl/r/rpl_session_var.result:
update result file
mysql-test/suite/rpl/r/rpl_set_charset.result:
update result file
mysql-test/suite/rpl/r/rpl_set_null_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_set_null_myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_show_slave_running.result:
update result file
mysql-test/suite/rpl/r/rpl_skip_error.result:
update result file
mysql-test/suite/rpl/r/rpl_slave_grp_exec.result:
update result file
mysql-test/suite/rpl/r/rpl_slave_load_in.result:
update result file
mysql-test/suite/rpl/r/rpl_slave_load_remove_tmpfile.result:
Updated result file
mysql-test/suite/rpl/r/rpl_slave_load_tmpdir_not_exist.result:
updated result file
mysql-test/suite/rpl/r/rpl_slave_skip.result:
update result file
mysql-test/suite/rpl/r/rpl_slave_status.result:
update result file
mysql-test/suite/rpl/r/rpl_slow_query_log.result:
update result file
mysql-test/suite/rpl/r/rpl_sp.result:
update result file
mysql-test/suite/rpl/r/rpl_sp004.result:
update result file
mysql-test/suite/rpl/r/rpl_sp_effects.result:
update result file
mysql-test/suite/rpl/r/rpl_sporadic_master.result:
update result file
mysql-test/suite/rpl/r/rpl_ssl.result:
update result file
mysql-test/suite/rpl/r/rpl_ssl1.result:
update result file
mysql-test/suite/rpl/r/rpl_start_stop_slave.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_000001.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_EE_err2.result:
updated result file
mysql-test/suite/rpl/r/rpl_stm_auto_increment_bug33029.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_binlog_direct.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_conflicts.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_create_if_not_exists.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_flsh_tbls.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_insert_delayed.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_loadfile.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_log.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_max_relay_size.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_multi_query.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_no_op.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_reset_slave.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_sql_mode.result:
update result file
mysql-test/suite/rpl/r/rpl_stm_until.result:
update result file
mysql-test/suite/rpl/r/rpl_stop_slave.result:
update result file
mysql-test/suite/rpl/r/rpl_switch_stm_row_mixed.result:
update result file
mysql-test/suite/rpl/r/rpl_temp_table.result:
update result file
mysql-test/suite/rpl/r/rpl_temp_table_mix_row.result:
update result file
mysql-test/suite/rpl/r/rpl_temporary.result:
update result file
mysql-test/suite/rpl/r/rpl_temporary_errors.result:
update result file
mysql-test/suite/rpl/r/rpl_test_framework.result:
updated result file
mysql-test/suite/rpl/r/rpl_timezone.result:
Updated result file
mysql-test/suite/rpl/r/rpl_tmp_table_and_DDL.result:
update result file
mysql-test/suite/rpl/r/rpl_trigger.result:
update result file
mysql-test/suite/rpl/r/rpl_trunc_temp.result:
update result file
mysql-test/suite/rpl/r/rpl_truncate_2myisam.result:
update result file
mysql-test/suite/rpl/r/rpl_truncate_3innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_typeconv_innodb.result:
update result file
mysql-test/suite/rpl/r/rpl_udf.result:
update result file
mysql-test/suite/rpl/r/rpl_user.result:
update result file
mysql-test/suite/rpl/r/rpl_user_variables.result:
update result file
mysql-test/suite/rpl/r/rpl_variables.result:
update result file
mysql-test/suite/rpl/r/rpl_variables_stm.result:
update result file
mysql-test/suite/rpl/r/rpl_view.result:
update result file
mysql-test/suite/rpl/t/rpl000017-slave.sh:
Moved contents of -slave.sh into test.
mysql-test/suite/rpl/t/rpl_000010-slave.opt:
make all rpl tests use prefix rpl_
mysql-test/suite/rpl/t/rpl_000010.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_000011.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_000013.test:
Made test clean up replication state.
Replaced save_master_pos/connection slave/sync_with_master
by sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_000017-slave.opt:
make all rpl tests use prefix rpl_
mysql-test/suite/rpl/t/rpl_000017.test:
Moved contents of -slave.sh into .test
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_EE_err.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_LD_INFILE.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_alter.test:
made test clean up after itself
replaced rpl_diff_tables by diff_tables
cosmetic fixes
mysql-test/suite/rpl/t/rpl_alter_db.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_auto_increment.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_auto_increment_11932.test:
Made test clean up replication state.
don't drop database twice
mysql-test/suite/rpl/t/rpl_auto_increment_bug33029.test:
- This test replicates, so moved it to rpl suite.
- This test uses a fake relay log, so use
include/setup_fake_relay_log.inc and cleanup_fake_relay_log.inc
instead of ad-hoc code.
- Made test clean up replication state (rpl_end.inc)
mysql-test/suite/rpl/t/rpl_auto_increment_update_failure.test:
- Made test clean up replication state.
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_begin_commit_rollback.test:
renamed rpl_end.inc to master-slave-end.inc
mysql-test/suite/rpl/t/rpl_binlog_corruption-master.opt:
Got rid of useless -master.opt file.
mysql-test/suite/rpl/t/rpl_binlog_corruption.test:
Made test clean up replication state.
Made test execute on slave connection instead of on master connection.
This allows us to get rid of -master.opt file.
mysql-test/suite/rpl/t/rpl_binlog_errors.test:
made test use rpl_restart_server.inc instead of restart_mysqld.inc
mysql-test/suite/rpl/t/rpl_binlog_grant.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_binlog_max_cache_size.test:
- Made test clean up replication state.
- replaced wait_for_slave_sql_to_stop.inc by
wait_for_slave_sql_error_and_skip.inc
- renamed diff_master_slave.inc to rpl_diff.inc and
renamed $diff_statement to $rpl_diff_statement
mysql-test/suite/rpl/t/rpl_bit.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_bit_npk.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_blackhole.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_bug26395.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_bug31076.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_bug33931.test:
Made test clean up replication state.
Made test use source include/master-slave.inc instead of
ad-hoc setup.
mysql-test/suite/rpl/t/rpl_bug38694.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_change_master.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_charset.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_charset_sjis.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.cnf:
Use new names of mtr variables (introduced by the changes in
include/circular_rpl_init.inc).
mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test:
- Use rpl_init.inc instead of circular_rpl_for_4_hosts.inc.
Connections have been renamed (server_[1234] instead of master_[abcd]),
we use rpl_sync.inc instead of circular_rpl_for_4_hosts_sync.inc,
we use the new rpl_end.inc to clean up instead of doing it
manually, and we use rpl_change_topology.inc instead of manual
reconfiguration.
- Added comment to make test understandable.
- the test contained a race condition. server_4 was not sync'ed. This could
cause sql_slave_skip_counter to have the value 1 when the test ended, so
check-testcase would complain. Added 'sync_slave_with_master server_4'.
mysql-test/suite/rpl/t/rpl_colSize.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_commit_after_flush.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_concurrency_error.test:
- Made test clean up replication state.
- renamed diff_master_slave.inc to rpl_diff.inc and
renamed $diff_statement to $rpl_diff_statement
mysql-test/suite/rpl/t/rpl_conditional_comments.test:
made test clean up after itself
new protocol for diff_tables.inc
mysql-test/suite/rpl/t/rpl_create_database.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_create_if_not_exists.test:
renamed master-slave-end.inc to rpl_end.inc
mysql-test/suite/rpl/t/rpl_create_tmp_table_if_not_exists.test:
renamed master-slave-end.inc to rpl_end.inc
mysql-test/suite/rpl/t/rpl_critical_errors.test:
Made test clean up replication state.
Fixed syntax error in test.
mysql-test/suite/rpl/t/rpl_cross_version.test:
Made test clean up replication state.
Made test execute on slave connection instead of on master connection.
This allows us to get rid of -master.opt file.
mysql-test/suite/rpl/t/rpl_current_user.cnf:
use environment variables recognized by rpl_init.inc
mysql-test/suite/rpl/t/rpl_current_user.test:
- Use rpl_init.inc instead of ad-hoc three-server setup.
Hence, rename connection slave2 to server_3
- don't drop lots of things at the beginning of the test
- rpl_diff_tables.inc does not sync any more, so we have to
sync here instead
- renamed $diff_table to $rpl_diff_table and $diff_table_list
to $rpl_diff_table_list
- use diff_tables.inc instead of rpl_diff_tables.inc
mysql-test/suite/rpl/t/rpl_ddl.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_deadlock_innodb.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_delete_no_where.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_do_grant.test:
Made test clean up replication state.
renamed master-slave-end.inc to rpl_end.inc
use include/check_slave_no_error.inc instead of ad-hoc construction
mysql-test/suite/rpl/t/rpl_drop.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_drop_db.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_drop_temp.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_drop_view.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_dual_pos_advance.test:
Made test use the new framework for circular replication,
instead of ad-hoc setup.
mysql-test/suite/rpl/t/rpl_empty_master_crash.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_err_ignoredtable.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_events.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_extra_col_master_innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_extra_col_master_myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_extra_col_slave_innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_extra_col_slave_myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_failed_optimize.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_filter_tables_not_exist.test:
renamed master-slave-end.inc to rpl_end.inc
mysql-test/suite/rpl/t/rpl_flushlog_loop-master.opt:
Removed useless options from -master.opt file.
mysql-test/suite/rpl/t/rpl_flushlog_loop-master.sh:
Removed useless -master.sh file
mysql-test/suite/rpl/t/rpl_flushlog_loop-slave.opt:
Removed useless options from -slave.opt file
mysql-test/suite/rpl/t/rpl_flushlog_loop-slave.sh:
Removed useless -slave.sh file
mysql-test/suite/rpl/t/rpl_flushlog_loop.test:
Made test use new framework for circular replication,
instead of ad-hoc setup.
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_foreign_key_innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_found_rows.test:
Made test clean up replication state.
replaced reset_master_and_slave.inc by rpl_reset.inc
mysql-test/suite/rpl/t/rpl_free_items.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_geometry.test:
replaced master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_get_lock.test:
Made test clean up replication state.
Replaced save_master_pos+connection slave+sync_with_master
by sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test:
Made test clean up replication state.
Removed last part of test, because it was verbatim identical to
rpl_server_id1.test
mysql-test/suite/rpl/t/rpl_grant.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_idempotency.test:
use check_slave_no_error.inc instead of ad-hoc tests
use wait_for_slave_sql_error.inc instead of wait_for_slave_to_stop.inc
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_ignore_grant.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_ignore_revoke.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_ignore_table.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_ignore_table_update.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_incident.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_init_slave.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_init_slave_errors.test:
Made test clean up replication state.
Also replaced call to wait_for_slave_sql_to_stop.inc by
call to wait_for_slave_sql_error.inc
mysql-test/suite/rpl/t/rpl_innodb.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_innodb_bug28430.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_innodb_bug30888.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_innodb_mixed_ddl.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_innodb_mixed_dml.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_insert.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_insert_id.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_insert_id_pk.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_insert_ignore.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_insert_select.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_invoked_features.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_killed_ddl.test:
- Made test clean up replication state.
- renamed diff_master_slave.inc to rpl_diff.inc and
renamed $diff_statement to $rpl_diff_statement
mysql-test/suite/rpl/t/rpl_known_bugs_detection.test:
- Made test clean up replication state.
- removed wait_for_slave_sql_to_stop.inc, because it already does
wait_for_slave_sql_error.inc
mysql-test/suite/rpl/t/rpl_load_from_master.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_load_table_from_master.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_loaddata_charset.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_fatal.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_m.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_map.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_s.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_simple.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddata_symlink.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loaddatalocal.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_loadfile.test:
- Made test clean up replication state.
- replace reset_master_and_slave.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
- diff_tables.inc also restores the connection to what it was before,
so in this test we have to manually change connection
after sourcing diff_tables.inc
mysql-test/suite/rpl/t/rpl_locale.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_log_pos.test:
Made test clean up replication state.
replace stop_slave.inc by stop_slave_sql.inc since the io thread
is already stopped.
mysql-test/suite/rpl/t/rpl_manual_change_index_file.test:
use wait_for_slave_io_error.inc instead of wait_for_slave_to_stop.inc
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_many_optimize.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_master_pos_wait.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_misc_functions.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_mixed_bit_pk.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_mixed_ddl_dml.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_delete.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_delete2.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_engine.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_update.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_multi_update2.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_update3.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_multi_update4.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_mysql_upgrade.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_name_const.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_nondeterministic_functions.test:
- Made test clean up replication state.
- diff_tables.inc now takes only one parameter.
- diff_tables.inc also restores the connection to what it was before,
so in this test we have to manually change connection
after sourcing diff_tables.inc
mysql-test/suite/rpl/t/rpl_not_null_innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_not_null_myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_optimize.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_packet.test:
- Made test clean up replication state.
- replace wait_for_slave_io_to_stop.inc by wait_for_slave_io_error.inc
- replace master-slave-reset.inc by rpl_reset.inc + drop table t1.
- replaced save_master_pos/connection slave/sync_with_master
by sync_slave_with_master.
- added comment explaining why we need stop_slave_sql.inc
(we shouldn't need it, it's a bug)
mysql-test/suite/rpl/t/rpl_plugin_load.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_ps.test:
Made test clean up replication state.
removed lots os useless junk
mysql-test/suite/rpl/t/rpl_rbr_to_sbr.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_read_only.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_relay_space_innodb.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_relay_space_myisam.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_relayrotate.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_relayspace.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_replicate_do.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_replicate_ignore_db.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_report.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_rewrt_db.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_rotate_logs-slave.opt:
Got rid of unnecessary -slave.opt file
mysql-test/suite/rpl/t/rpl_rotate_logs-slave.sh:
Got rid of unnecessary -slave.sh file
mysql-test/suite/rpl/t/rpl_rotate_logs.test:
- Made test clean up replication state.
- replaced wait_for_slave_sql_to_stop.inc by
wait_for_slave_sql_error_and_skip.inc
- removed useless cleanup at beginning of test
- did not make test use the standard replication framework
(master-slave.inc + rpl_end.inc), because it won't work. i don't
know why.
mysql-test/suite/rpl/t/rpl_row_001.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_4_bytes.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_NOW.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_USER.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_UUID.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_basic_11bugs.test:
Made test clean up replication state.
Removed unnecessary 'set binlog_format'.
replaced master-slave-reset.inc by rpl_reset.inc
mysql-test/suite/rpl/t/rpl_row_basic_2myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_basic_3innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_basic_8partition.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_blob_innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_blob_myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_colSize.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_conflicts.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_row_create_table.test:
replace master-slave-end.inc by rpl_end.inc
replace master-slave-reset.inc by rpl_reset.inc
replace long sequence of reset master+reset slave by rpl_reset.inc
mysql-test/suite/rpl/t/rpl_row_delayed_ins.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_row_drop.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_find_row.test:
- Made test clean up replication state.
- replace master-slave-reset.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_row_flsh_tbls.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_row_func001.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_func002.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_func003.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_inexist_tbl.test:
Made test clean up replication state.
replace wait_for_slave_sql_to_stop.inc by wait_for_slave_sql_error.inc
mysql-test/suite/rpl/t/rpl_row_insert_delayed.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_log.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_log_innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_mysqlbinlog.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test:
Made test clean up replication state
mysql-test/suite/rpl/t/rpl_row_rec_comp_myisam.test:
- replace master-slave-reset.inc by rpl_reset.inc
- Made test clean up replication state
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_row_sp001.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp002_innodb.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_row_sp003.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp005.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp006_InnoDB.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp007_innodb.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_row_sp008.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp009.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp010.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp011.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_sp012.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_stop_middle_update.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_tabledefs_2myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_tabledefs_3innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test:
- replaced master-slave-reset.inc by rpl_reset.inc
- replaced master-slave-end.inc by rpl_end.inc
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_row_trig001.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_trig002.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_trig003.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_trig004.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_trunc_temp.test:
replaced master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl/t/rpl_row_unsafe_funcs.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_until.test:
Made test clean up replication state.
Removed unused mtr variable $VERSION.
mysql-test/suite/rpl/t/rpl_row_view01.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_row_wide_table.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_server_id1.test:
- Replaced ad-hoc setup of circular replication by call to rpl_init.inc
- Made test clean up replication state.
- Replaced ad-hoc use of wait_for_slave_param.inc by
wait_for_slave_io_error.inc
mysql-test/suite/rpl/t/rpl_server_id2.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_session_var.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_set_charset.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_set_null_innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_set_null_myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_show_slave_running.test:
made test clean up replication state
mysql-test/suite/rpl/t/rpl_skip_error.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_slave_grp_exec.test:
- Made test clean up replication state.
- replaced wait_for_slave_sql_to_stop.inc by wait_for_slave_sql_error.inc
- replaced stop_slave.inc by stop_slave_io.inc where the sql thread
was already stopped.
mysql-test/suite/rpl/t/rpl_slave_load_in.test:
- Made test clean up replication state.
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_slave_load_tmpdir_not_exist.test:
- Made test clean up replication state.
- Replaced call to wait_for_slave_sql_to_stop.inc by call to
wait_for_slave_sql_error.inc
- Replaced ad-hoc repliction setup by call to master-slave.inc
mysql-test/suite/rpl/t/rpl_slave_skip.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_slave_status.test:
Made test clean up replication state.
replaced check that IO thread has stopped by wait_for_slave_io_error.inc
simplified cleanup code
mysql-test/suite/rpl/t/rpl_slow_query_log.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_sp.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_sp004.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_sp_effects.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_sporadic_master.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_ssl.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_ssl1.test:
Made test clean up replication state.
Replaced save_master_pos+connection slave+sync_slave_with_master
by sync_slave_with_master
mysql-test/suite/rpl/t/rpl_start_stop_slave.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_000001.test:
The include file extra/rpl_tests/rpl_stm_000001.test was only
sourced once, in suite/rpl/t/rpl_stm_000001.test.
Moved extra/rpl_tests/rpl_stm_000001.test to
suite/rpl/t/rpl_stm_000001.test and removed the old
suite/rpl/t/rpl_stm_000001.test.
Also made test clean up replication state, and replaced
wait_for_slave_sql_to_stop.inc by wait_for_slave_sql_error_and_skip.inc
mysql-test/suite/rpl/t/rpl_stm_000001.test:
- The include file extra/rpl_tests/rpl_stm_000001.test was only
sourced once, in suite/rpl/t/rpl_stm_000001.test.
Moved extra/rpl_tests/rpl_stm_000001.test to
suite/rpl/t/rpl_stm_000001.test and removed the old
suite/rpl/t/rpl_stm_000001.test.
mysql-test/suite/rpl/t/rpl_stm_auto_increment_bug33029.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_binlog_direct.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_conflicts.test:
replaced master-slave-end.inc by rpl_end.inc
cosmetic fixes
mysql-test/suite/rpl/t/rpl_stm_create_if_not_exists.test:
use rpl_end instead of master-slave-end.
mysql-test/suite/rpl/t/rpl_stm_flsh_tbls.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_stm_insert_delayed.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_loadfile.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_log.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_max_relay_size.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_stm_mixing_engines.test:
- replaced master-slave-end.inc by rpl_end.inc
- replaced master-slave-reset.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_stm_multi_query.test:
cosmetic fixes
mysql-test/suite/rpl/t/rpl_stm_no_op.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_stm_sql_mode.test:
made test clean up replication state
mysql-test/suite/rpl/t/rpl_stm_until.test:
- Made test clean up replication state.
- replaced master-slave-reset.inc by rpl_reset.inc
- the relay log is now called slave-relay-bin.000003 instead of .000004,
because master-slave.inc doesn't rotate it as much as before.
mysql-test/suite/rpl/t/rpl_stop_slave.test:
use rpl_end instead of master-slav-end
mysql-test/suite/rpl/t/rpl_switch_stm_row_mixed.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_temp_table.test:
Made test clean up replication state.
Replaced save_master_pos/connection slave/sync_with_master
by sync_slave_with_master.
mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test:
Made test clean up replication state.
replaced ad-hoc call to 'connect' by include/rpl_connect.inc
replaced master-slave-reset.inc by rpl_reset.inc
mysql-test/suite/rpl/t/rpl_temporary.test:
- Made test clean up replication state.
- This test sources include/delete_anonymous_users.inc on master.
This means it updates the user table in the mysql database manually
on the master. This causes failure in the slave sql thread when
binlog_format=row. Hence, we stop the slave first and source
include/delete_anonymous_users.inc on both master and slave.
mysql-test/suite/rpl/t/rpl_temporary_errors.test:
Made test clean up replication state.
cosmetic fixes
mysql-test/suite/rpl/t/rpl_test_framework.cnf:
new cfg file for new test
mysql-test/suite/rpl/t/rpl_test_framework.test:
new test case that verifies that include/rpl_change_topology.inc
works
mysql-test/suite/rpl/t/rpl_timezone.test:
- Made test clean up replication state.
- stop slave before last sub-test, because that test does not use
the slave connection.
mysql-test/suite/rpl/t/rpl_tmp_table_and_DDL.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_trigger.test:
- Made test clean up replication state.
- replace master-slave-reset.inc by rpl_reset.inc
- use new file rpl_reconnect.inc instead of ad-hoc code
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_trunc_temp.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_truncate_2myisam.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_truncate_3innodb.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_typeconv_innodb.test:
- made test clean up replication state
- removed unnecessary call to master-slave-reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_udf.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_user.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_user_variables.test:
Made test clean up replication state.
mysql-test/suite/rpl/t/rpl_variables.test:
- Made test clean up replication state.
- replaced reset_master_and_slave.inc by rpl_reset.inc
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_variables_stm.test:
- Made test clean up replication state.
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl/t/rpl_view.test:
Made test clean up replication state.
mysql-test/suite/rpl_ndb/r/rpl_ndb_2other.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_UUID.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_apply_status.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_auto_inc.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_basic.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_blob.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_blob2.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_circular.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_simplex.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_commit_afterflush.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_ctype_ucs2_def.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_basic.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_dd_partitions.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_ddl.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_delete_nowhere.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_do_db.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_do_table.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_extraCol.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_func003.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_idempotent.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb2ndb.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_innodb_trans.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_insert_ignore.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_log.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_mixed_engines_transactions.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_mixed_tables.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_multi.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_multi_update2.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_multi_update3.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_myisam2ndb.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_rep_ignore.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_row_001.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_set_null.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_sp003.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_sp006.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_stm_innodb.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_sync.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_ndb_trig004.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_row_basic_7ndb.result:
updated result file
mysql-test/suite/rpl_ndb/r/rpl_truncate_7ndb.result:
updated result file
mysql-test/suite/rpl_ndb/t/rpl_ndb_2innodb.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_2myisam.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_2ndb.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_2other.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_UUID.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_apply_status.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_auto_inc.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_bank.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test:
- replaced master-slave-end.inc by rpl_end.inc
- removed wait_for_slave_sql_to_stop since it is followed by
wait_for_slave_sql_error.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_blob.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_blob2.test:
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_circular.test:
made test use rpl_init.inc to setup circular replication, instead of ad-hoc setup
made test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.cnf:
removed automatic configuration of server as slave. this is not
needed because rpl_init.inc does it.
mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test:
- made test clean up replication state
- it seems that sync_slave_with_master does not work deterministically
here, so instead we wait for 'drop table' to replicate by checking
when the table disappears on slave.
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_simplex.test:
make test clean up replication state
use rpl_change_topology.inc to reconfigure replication topology,
instead of ad-hoc call to change master
mysql-test/suite/rpl_ndb/t/rpl_ndb_commit_afterflush.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_ctype_ucs2_def.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_basic.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_dd_partitions.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_ddl.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_delete_nowhere.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_do_db.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_do_table.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_extraCol.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_func003.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_idempotent.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb2ndb.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_innodb_trans.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_insert_ignore.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_load.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_log.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_engines_transactions.test:
- replace master-slave-end.inc by rpl_end.inc
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables.test:
- make test clean up replication state
- diff_tables.inc now takes only one parameter.
mysql-test/suite/rpl_ndb/t/rpl_ndb_multi.test:
- make test clean up replication state
- use rpl_change_topology.inc to change replication topology,
instead of ad-hoc calls to change master
mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update2.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_multi_update3.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_myisam2ndb.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_relayrotate.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_rep_ignore.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_row_001.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_set_null.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_sp003.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_sp006.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_stm_innodb.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_sync.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndb_trig004.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_ndbapi_multi.test:
make test clean up replication state
mysql-test/suite/rpl_ndb/t/rpl_row_basic_7ndb.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb.test:
replace master-slave-end.inc by rpl_end.inc
mysql-test/suite/rpl_ndb/t/rpl_truncate_7ndb_2.test:
make test clean up replication state
mysql-test/suite/sys_vars/t/rpl_init_slave_func.test:
made test clean up after itself
mysql-test/t/init_file.test:
use new file force_restart.inc instead of SP
2010-12-19 18:07:28 +01:00
include/rpl_end.inc