Linux ns8.secondary29.go.th 2.6.32-754.28.1.el6.x86_64 #1 SMP Wed Mar 11 18:38:45 UTC 2020 x86_64
Apache/2.2.15 (CentOS)
: 122.154.134.11 | : 122.154.134.9
Cant Read [ /etc/named.conf ]
5.6.40
apache
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
usr /
share /
mysql-test /
include /
[ HOME SHELL ]
Name
Size
Permission
Action
add_anonymous_users.inc
187
B
-rw-r--r--
analyze-sync_with_master.test
283
B
-rw-r--r--
analyze-timeout.test
25
B
-rw-r--r--
assert.inc
5.62
KB
-rw-r--r--
begin_include_file.inc
2.61
KB
-rw-r--r--
big_test.inc
107
B
-rw-r--r--
binlog_inject_error.inc
457
B
-rw-r--r--
check-testcase.test
533
B
-rw-r--r--
check-warnings.test
1.55
KB
-rw-r--r--
check_concurrent_insert.inc
2.66
KB
-rw-r--r--
check_events_off.inc
1.82
KB
-rw-r--r--
check_no_concurrent_insert.inc
2.04
KB
-rw-r--r--
check_no_row_lock.inc
1.76
KB
-rw-r--r--
check_shared_row_lock.inc
1.39
KB
-rw-r--r--
check_slave_is_running.inc
651
B
-rw-r--r--
check_slave_no_error.inc
655
B
-rw-r--r--
check_slave_param.inc
1.02
KB
-rw-r--r--
check_var_limit.inc
394
B
-rw-r--r--
cleanup_fake_relay_log.inc
669
B
-rw-r--r--
commit.inc
20.54
KB
-rw-r--r--
common-tests.inc
115.9
KB
-rw-r--r--
concurrent.inc
25.01
KB
-rw-r--r--
connect2.inc
977
B
-rw-r--r--
count_sessions.inc
382
B
-rw-r--r--
ctype_8bit.inc
2.85
KB
-rw-r--r--
ctype_common.inc
2.82
KB
-rw-r--r--
ctype_filesort.inc
377
B
-rw-r--r--
ctype_german.inc
965
B
-rw-r--r--
ctype_innodb_like.inc
665
B
-rw-r--r--
ctype_like_escape.inc
592
B
-rw-r--r--
ctype_like_range_f1f2.inc
835
B
-rw-r--r--
ctype_regex.inc
1.03
KB
-rw-r--r--
ddl_i18n.check_events.inc
864
B
-rw-r--r--
ddl_i18n.check_sp.inc
1.48
KB
-rw-r--r--
ddl_i18n.check_triggers.inc
1.55
KB
-rw-r--r--
ddl_i18n.check_views.inc
544
B
-rw-r--r--
deadlock.inc
3.57
KB
-rw-r--r--
default_my.cnf
1.25
KB
-rw-r--r--
default_mysqld.cnf
1.19
KB
-rw-r--r--
default_ndbd.cnf
836
B
-rw-r--r--
delete_anonymous_users.inc
207
B
-rw-r--r--
diff_tables.inc
6.49
KB
-rw-r--r--
end_include_file.inc
2.42
KB
-rw-r--r--
endspace.inc
338
B
-rw-r--r--
file_does_not_exist.inc
340
B
-rw-r--r--
force_restart.inc
335
B
-rw-r--r--
force_restart_if_skipped.inc
346
B
-rw-r--r--
get_relay_log_pos.inc
2.77
KB
-rw-r--r--
gis_generic.inc
12.67
KB
-rw-r--r--
gis_keys.inc
1.93
KB
-rw-r--r--
grant_cache.inc
7.53
KB
-rw-r--r--
handler.inc
17.11
KB
-rw-r--r--
have_32bit.inc
400
B
-rw-r--r--
have_64bit.inc
357
B
-rw-r--r--
have_archive.inc
180
B
-rw-r--r--
have_big5.inc
107
B
-rw-r--r--
have_binlog_format_mixed.inc
155
B
-rw-r--r--
have_binlog_format_mixed_or_ro...
181
B
-rw-r--r--
have_binlog_format_mixed_or_st...
193
B
-rw-r--r--
have_binlog_format_row.inc
153
B
-rw-r--r--
have_binlog_format_row_or_stat...
192
B
-rw-r--r--
have_binlog_format_statement.i...
159
B
-rw-r--r--
have_blackhole.inc
173
B
-rw-r--r--
have_case_insensitive_file_sys...
134
B
-rw-r--r--
have_case_insensitive_fs.inc
125
B
-rw-r--r--
have_case_sensitive_file_syste...
132
B
-rw-r--r--
have_community_features.inc
130
B
-rw-r--r--
have_compress.inc
109
B
-rw-r--r--
have_cp1250_ch.inc
112
B
-rw-r--r--
have_cp1251.inc
115
B
-rw-r--r--
have_cp866.inc
113
B
-rw-r--r--
have_cp932.inc
110
B
-rw-r--r--
have_crypt.inc
103
B
-rw-r--r--
have_csv.inc
174
B
-rw-r--r--
have_dbi_dbd-mysql.inc
3.1
KB
-rw-r--r--
have_debug.inc
113
B
-rw-r--r--
have_debug_sync.inc
196
B
-rw-r--r--
have_dynamic_loading.inc
169
B
-rw-r--r--
have_eucjpms.inc
114
B
-rw-r--r--
have_euckr.inc
108
B
-rw-r--r--
have_example_plugin.inc
319
B
-rw-r--r--
have_exampledb.inc
178
B
-rw-r--r--
have_federated_plugin.inc
151
B
-rw-r--r--
have_gb2312.inc
111
B
-rw-r--r--
have_gbk.inc
105
B
-rw-r--r--
have_geometry.inc
110
B
-rw-r--r--
have_innodb.inc
163
B
-rw-r--r--
have_innodb_change_buffering.i...
200
B
-rw-r--r--
have_innodb_plugin.inc
260
B
-rw-r--r--
have_koi8r.inc
113
B
-rw-r--r--
have_latin2_ch.inc
112
B
-rw-r--r--
have_local_infile.inc
111
B
-rw-r--r--
have_log_bin.inc
238
B
-rw-r--r--
have_lowercase0.inc
116
B
-rw-r--r--
have_lowercase1.inc
116
B
-rw-r--r--
have_lowercase2.inc
116
B
-rw-r--r--
have_multi_ndb.inc
1.58
KB
-rw-r--r--
have_mysql_upgrade.inc
134
B
-rw-r--r--
have_ndb.inc
518
B
-rw-r--r--
have_ndb_extra.inc
65
B
-rw-r--r--
have_ndbapi_examples.inc
148
B
-rw-r--r--
have_not_innodb_plugin.inc
185
B
-rw-r--r--
have_outfile.inc
171
B
-rw-r--r--
have_partition.inc
114
B
-rw-r--r--
have_query_cache.inc
115
B
-rw-r--r--
have_simple_parser.inc
315
B
-rw-r--r--
have_sjis.inc
108
B
-rw-r--r--
have_ssl.inc
99
B
-rw-r--r--
have_symlink.inc
391
B
-rw-r--r--
have_tis620.inc
108
B
-rw-r--r--
have_ucs2.inc
107
B
-rw-r--r--
have_udf.inc
319
B
-rw-r--r--
have_ujis.inc
108
B
-rw-r--r--
have_utf8.inc
111
B
-rw-r--r--
have_valgrind.inc
182
B
-rw-r--r--
index_merge1.inc
18.08
KB
-rw-r--r--
index_merge2.inc
11.79
KB
-rw-r--r--
index_merge_2sweeps.inc
1.52
KB
-rw-r--r--
index_merge_ror.inc
9.73
KB
-rw-r--r--
index_merge_ror_cpk.inc
4.32
KB
-rw-r--r--
innodb_rollback_on_timeout.inc
931
B
-rw-r--r--
innodb_trx_weight.inc
861
B
-rw-r--r--
io_thd_fault_injection.inc
598
B
-rw-r--r--
is_embedded.inc
126
B
-rw-r--r--
kill_query.inc
1.73
KB
-rw-r--r--
kill_query_and_diff_master_sla...
1.05
KB
-rw-r--r--
linux_sys_vars.inc
803
B
-rw-r--r--
load_sysvars.inc
442
B
-rw-r--r--
loaddata_autocom.inc
889
B
-rw-r--r--
master-slave.inc
1.68
KB
-rw-r--r--
min_null_cond.inc
1.55
KB
-rw-r--r--
mix1.inc
44.9
KB
-rw-r--r--
mix2.inc
76.35
KB
-rw-r--r--
mix2_ucs2.inc
11.52
KB
-rw-r--r--
mtr_check.sql
2.86
KB
-rw-r--r--
mtr_warnings.sql
6.89
KB
-rw-r--r--
mysqlbinlog_have_debug.inc
989
B
-rw-r--r--
mysqldump.inc
2.02
KB
-rw-r--r--
mysqlhotcopy.inc
4.75
KB
-rw-r--r--
mysqltest-x.inc
41
B
-rw-r--r--
ndb_backup.inc
1.7
KB
-rw-r--r--
ndb_backup_print.inc
521
B
-rw-r--r--
ndb_default_cluster.inc
119
B
-rw-r--r--
ndb_master-slave.inc
398
B
-rw-r--r--
ndb_master-slave_2ch.inc
1.76
KB
-rw-r--r--
ndb_not_readonly.inc
844
B
-rw-r--r--
ndb_restore_master.inc
640
B
-rw-r--r--
ndb_restore_slave_eoption.inc
657
B
-rw-r--r--
ndb_setup_slave.inc
805
B
-rw-r--r--
ndb_wait_connected.inc
470
B
-rw-r--r--
no_running_event_scheduler.inc
1.51
KB
-rw-r--r--
no_running_events.inc
1.72
KB
-rw-r--r--
no_valgrind_without_big.inc
364
B
-rw-r--r--
not_as_root.inc
45
B
-rw-r--r--
not_binlog_format_row.inc
92
B
-rw-r--r--
not_blackhole.inc
173
B
-rw-r--r--
not_crashrep.inc
594
B
-rw-r--r--
not_embedded.inc
127
B
-rw-r--r--
not_ndb.inc
183
B
-rw-r--r--
not_ndb_default.inc
161
B
-rw-r--r--
not_openssl.inc
106
B
-rw-r--r--
not_valgrind.inc
118
B
-rw-r--r--
not_windows.inc
165
B
-rw-r--r--
not_windows_embedded.inc
305
B
-rw-r--r--
one_thread_per_connection.inc
111
B
-rw-r--r--
parser_bug21114.inc
1.32
KB
-rw-r--r--
partition_date_range.inc
2.63
KB
-rw-r--r--
ps_conv.inc
47.8
KB
-rw-r--r--
ps_create.inc
1.42
KB
-rw-r--r--
ps_ddl_1.inc
468
B
-rw-r--r--
ps_modify.inc
10.22
KB
-rw-r--r--
ps_modify1.inc
3.16
KB
-rw-r--r--
ps_query.inc
24.49
KB
-rw-r--r--
ps_renew.inc
1.48
KB
-rw-r--r--
query_cache.inc
5.71
KB
-rw-r--r--
query_cache_sql_prepare.inc
13.1
KB
-rw-r--r--
read_many_rows.inc
4.28
KB
-rw-r--r--
report-features.test
186
B
-rw-r--r--
restart_mysqld.inc
1.02
KB
-rw-r--r--
restart_slave_sql.inc
1001
B
-rw-r--r--
rowid_order.inc
2.97
KB
-rw-r--r--
rpl_change_topology.inc
9.72
KB
-rw-r--r--
rpl_connect.inc
1.54
KB
-rw-r--r--
rpl_connection.inc
1.27
KB
-rw-r--r--
rpl_connection_master.inc
68
B
-rw-r--r--
rpl_connection_slave.inc
67
B
-rw-r--r--
rpl_connection_slave1.inc
68
B
-rw-r--r--
rpl_diff.inc
3.2
KB
-rw-r--r--
rpl_end.inc
2.76
KB
-rw-r--r--
rpl_events.inc
5.83
KB
-rw-r--r--
rpl_for_each_slave.inc
952
B
-rw-r--r--
rpl_generate_sync_chain.inc
5.51
KB
-rw-r--r--
rpl_init.inc
7.08
KB
-rw-r--r--
rpl_loaddata_charset.inc
781
B
-rw-r--r--
rpl_multi_engine.inc
729
B
-rw-r--r--
rpl_multi_engine2.inc
2.56
KB
-rw-r--r--
rpl_multi_engine3.inc
2.21
KB
-rw-r--r--
rpl_reconnect.inc
3.16
KB
-rw-r--r--
rpl_reset.inc
1.96
KB
-rw-r--r--
rpl_restart_server.inc
1.04
KB
-rw-r--r--
rpl_start_server.inc
1.53
KB
-rw-r--r--
rpl_start_slaves.inc
843
B
-rw-r--r--
rpl_stmt_seq.inc
7.63
KB
-rw-r--r--
rpl_stop_server.inc
1.92
KB
-rw-r--r--
rpl_stop_slaves.inc
780
B
-rw-r--r--
rpl_sync.inc
4.63
KB
-rw-r--r--
rpl_udf.inc
5.62
KB
-rw-r--r--
running_event_scheduler.inc
1.76
KB
-rw-r--r--
safe_set_to_maybe_ro_var.inc
707
B
-rw-r--r--
save_master_pos.inc
864
B
-rw-r--r--
search_pattern_in_file.inc
2.57
KB
-rw-r--r--
select_ndb_apply_status.inc
505
B
-rw-r--r--
set_binlog_format_mixed.sql
783
B
-rw-r--r--
set_binlog_format_row.sql
779
B
-rw-r--r--
set_binlog_format_statement.sq...
791
B
-rw-r--r--
setup_fake_relay_log.inc
2.92
KB
-rw-r--r--
show_binary_logs.inc
91
B
-rw-r--r--
show_binlog_events.inc
1.49
KB
-rw-r--r--
show_binlog_events2.inc
218
B
-rw-r--r--
show_binlog_using_logname.inc
512
B
-rw-r--r--
show_master_logs.inc
106
B
-rw-r--r--
show_master_status.inc
133
B
-rw-r--r--
show_msg.inc
747
B
-rw-r--r--
show_msg80.inc
4.46
KB
-rw-r--r--
show_rpl_debug_info.inc
2.71
KB
-rw-r--r--
show_slave_status.inc
2.72
KB
-rw-r--r--
sp-vars.inc
3.29
KB
-rw-r--r--
start_slave.inc
758
B
-rw-r--r--
stop_slave.inc
2.32
KB
-rw-r--r--
stop_slave_io.inc
934
B
-rw-r--r--
stop_slave_sql.inc
843
B
-rw-r--r--
strict_autoinc.inc
619
B
-rw-r--r--
sync_io_with_master.inc
1.13
KB
-rw-r--r--
sync_slave_io_with_master.inc
1.3
KB
-rw-r--r--
sync_slave_sql_with_io.inc
1.47
KB
-rw-r--r--
system_db_struct.inc
477
B
-rw-r--r--
test_fieldsize.inc
698
B
-rw-r--r--
test_outfile.inc
76
B
-rw-r--r--
testdb_only.inc
1.39
KB
-rw-r--r--
tpcb.inc
4.37
KB
-rw-r--r--
tpcb_disk_data.inc
4.76
KB
-rw-r--r--
truncate_file.inc
308
B
-rw-r--r--
unsafe_binlog.inc
6.73
KB
-rw-r--r--
uses_vardir.inc
385
B
-rw-r--r--
varchar.inc
7.12
KB
-rw-r--r--
view_alias.inc
1.05
KB
-rw-r--r--
wait_condition.inc
1.23
KB
-rw-r--r--
wait_condition_sp.inc
1.27
KB
-rw-r--r--
wait_for_binlog_event.inc
827
B
-rw-r--r--
wait_for_query_to_fail.inc
366
B
-rw-r--r--
wait_for_query_to_succeed.inc
371
B
-rw-r--r--
wait_for_slave_io_error.inc
3.01
KB
-rw-r--r--
wait_for_slave_io_to_start.inc
851
B
-rw-r--r--
wait_for_slave_io_to_stop.inc
967
B
-rw-r--r--
wait_for_slave_param.inc
3.8
KB
-rw-r--r--
wait_for_slave_sql_error.inc
2.41
KB
-rw-r--r--
wait_for_slave_sql_error_and_s...
1.67
KB
-rw-r--r--
wait_for_slave_sql_to_start.in...
905
B
-rw-r--r--
wait_for_slave_sql_to_stop.inc
975
B
-rw-r--r--
wait_for_slave_to_start.inc
678
B
-rw-r--r--
wait_for_slave_to_stop.inc
946
B
-rw-r--r--
wait_for_status_var.inc
2.2
KB
-rw-r--r--
wait_show_condition.inc
2.29
KB
-rw-r--r--
wait_until_connected_again.inc
546
B
-rw-r--r--
wait_until_count_sessions.inc
4.12
KB
-rw-r--r--
wait_until_disconnected.inc
382
B
-rw-r--r--
wait_until_rows_count.inc
409
B
-rw-r--r--
windows.inc
118
B
-rw-r--r--
windows_sys_vars.inc
802
B
-rw-r--r--
write_var_to_file.inc
1.7
KB
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : commit.inc
## Bug#12713 (Error in a stored function called from a SELECT doesn't cause ## ROLLBACK of statem) ## ## Pre-Requisites : ## - $engine_type should be set ## set sql_mode=no_engine_substitution; eval set storage_engine = $engine_type; set autocommit=1; --disable_warnings drop table if exists t1; drop table if exists t2; drop table if exists t3; drop function if exists f2; drop procedure if exists bug12713_call; drop procedure if exists bug12713_dump_spvars; drop procedure if exists dummy; --enable_warnings create table t1 (a int); create table t2 (a int unique); create table t3 (a int); # a workaround for Bug#32633: Can not create any routine if # SQL_MODE=no_engine_substitution set sql_mode=default; insert into t1 (a) values (1), (2); insert into t3 (a) values (1), (2); delimiter |; ## Cause a failure every time create function f2(x int) returns int begin insert into t2 (a) values (x); insert into t2 (a) values (x); return x; end| delimiter ;| set autocommit=0; flush status; ##============================================================================ ## Design notes ## ## In each case, statement rollback is expected. ## for transactional engines, the rollback should be properly executed ## for non transactional engines, the rollback may cause warnings. ## ## The test pattern is as follows ## - insert 1000+N ## - statement with a side effect, that fails to insert N twice ## - a statement rollback is expected (expecting 1 row 1000+N only) in t2 ## - a rollback is performed ## - expecting a clean table t2. ##============================================================================ insert into t2 (a) values (1001); --error ER_DUP_ENTRY insert into t1 (a) values (f2(1)); select * from t2; rollback; select * from t2; insert into t2 (a) values (1002); --error ER_DUP_ENTRY insert into t3 (a) select f2(2) from t1; select * from t2; rollback; select * from t2; insert into t2 (a) values (1003); --error ER_DUP_ENTRY update t1 set a= a + f2(3); select * from t2; rollback; select * from t2; insert into t2 (a) values (1004); --error ER_DUP_ENTRY update t1, t3 set t1.a = 0, t3.a = 0 where (f2(4) = 4) and (t1.a = t3.a); select * from t2; rollback; select * from t2; insert into t2 (a) values (1005); --error ER_DUP_ENTRY delete from t1 where (a = f2(5)); select * from t2; rollback; select * from t2; insert into t2 (a) values (1006); --error ER_DUP_ENTRY delete from t1, t3 using t1, t3 where (f2(6) = 6) ; select * from t2; rollback; select * from t2; insert into t2 (a) values (1007); --error ER_DUP_ENTRY replace t1 values (f2(7)); select * from t2; rollback; select * from t2; insert into t2 (a) values (1008); --error ER_DUP_ENTRY replace into t3 (a) select f2(8) from t1; select * from t2; rollback; select * from t2; insert into t2 (a) values (1009); --error ER_DUP_ENTRY select f2(9) from t1 ; select * from t2; rollback; select * from t2; insert into t2 (a) values (1010); --error ER_DUP_ENTRY show databases where (f2(10) = 10); select * from t2; rollback; select * from t2; insert into t2 (a) values (1011); --error ER_DUP_ENTRY show tables where (f2(11) = 11); select * from t2; rollback; select * from t2; insert into t2 (a) values (1012); --error ER_DUP_ENTRY show triggers where (f2(12) = 12); select * from t2; rollback; select * from t2; insert into t2 (a) values (1013); --error ER_DUP_ENTRY show table status where (f2(13) = 13); select * from t2; rollback; select * from t2; insert into t2 (a) values (1014); --error ER_DUP_ENTRY show open tables where (f2(14) = 14); select * from t2; rollback; select * from t2; insert into t2 (a) values (1015); --error ER_DUP_ENTRY show columns in mysql.proc where (f2(15) = 15); select * from t2; rollback; select * from t2; insert into t2 (a) values (1016); --error ER_DUP_ENTRY show status where (f2(16) = 16); select * from t2; rollback; select * from t2; insert into t2 (a) values (1017); --error ER_DUP_ENTRY show variables where (f2(17) = 17); select * from t2; rollback; select * from t2; insert into t2 (a) values (1018); --error ER_DUP_ENTRY show charset where (f2(18) = 18); select * from t2; rollback; select * from t2; insert into t2 (a) values (1019); --error ER_DUP_ENTRY show collation where (f2(19) = 19); select * from t2; rollback; select * from t2; --echo # We need at least one procedure to make sure the WHERE clause is --echo # evaluated create procedure dummy() begin end; insert into t2 (a) values (1020); --error ER_DUP_ENTRY show procedure status where (f2(20) = 20); select * from t2; rollback; select * from t2; drop procedure dummy; insert into t2 (a) values (1021); --error ER_DUP_ENTRY show function status where (f2(21) = 21); select * from t2; rollback; select * from t2; insert into t2 (a) values (1022); prepare stmt from "insert into t1 (a) values (f2(22))"; --error ER_DUP_ENTRY execute stmt; select * from t2; rollback; select * from t2; insert into t2 (a) values (1023); do (f2(23)); select * from t2; rollback; select * from t2; ## Please note : ## This will insert a record 1024 in t1 (statement commit) ## This will insert a record 24 in t1 (statement commit) ## then will rollback the second insert only (24) (statement rollback) ## then will rollback the complete transaction (transaction rollback) delimiter |; create procedure bug12713_call () begin insert into t2 (a) values (24); insert into t2 (a) values (24); end| delimiter ;| insert into t2 (a) values (1024); --error ER_DUP_ENTRY call bug12713_call(); select * from t2; rollback; select * from t2; --echo ======================================================================= --echo Testing select_to_file --echo ======================================================================= insert into t2 (a) values (1025); --replace_result $MYSQLTEST_VARDIR .. --error ER_DUP_ENTRY eval select f2(25) into outfile "$MYSQLTEST_VARDIR/tmp/dml.out" from t1; select * from t2; rollback; select * from t2; --remove_file $MYSQLTEST_VARDIR/tmp/dml.out insert into t2 (a) values (1026); --replace_result $MYSQLTEST_VARDIR .. --error ER_DUP_ENTRY eval load data infile "../../std_data/words.dat" into table t1 (a) set a:=f2(26); select * from t2; rollback; select * from t2; --echo ======================================================================= --echo Testing select_dumpvar --echo ======================================================================= insert into t2 (a) values (1027); --error ER_DUP_ENTRY select f2(27) into @foo; select * from t2; rollback; select * from t2; --echo ======================================================================= --echo Testing Select_fetch_into_spvars --echo ======================================================================= delimiter |; create procedure bug12713_dump_spvars () begin declare foo int; declare continue handler for sqlexception begin select "Exception trapped"; end; select f2(28) into foo; select * from t2; end| delimiter ;| insert into t2 (a) values (1028); call bug12713_dump_spvars (); rollback; select * from t2; --echo ======================================================================= --echo Cleanup --echo ======================================================================= set autocommit=default; drop table t1; drop table t2; drop table t3; drop function f2; drop procedure bug12713_call; drop procedure bug12713_dump_spvars; --echo # --echo # Bug#12713 Error in a stored function called from a SELECT doesn't --echo # cause ROLLBACK of statem --echo # --echo # Verify that two-phase commit is not issued for read-only --echo # transactions. --echo # --echo # Verify that two-phase commit is issued for read-write transactions, --echo # even if the change is done inside a stored function called from --echo # SELECT or SHOW statement. --echo # set autocommit=0; --disable_warnings drop table if exists t1; drop table if exists t2; drop function if exists f1; drop procedure if exists p_verify_status_increment; --enable_warnings # Save binlog_format in a user variable. References to system # variables are "unsafe", meaning they are written as rows instead of # as statements to the binlog, if the loggging mode is 'mixed'. But # we don't want p_verify_status_increment to affect the logging mode. # Hence, we save binlog_format in a user variable (which is not # unsafe) and use that inside p_verify_status_increment. set @binlog_format=@@global.binlog_format; set sql_mode=no_engine_substitution; create table t1 (a int unique); create table t2 (a int) engine=myisam; set sql_mode=default; --echo # --echo # An auxiliary procedure to track Handler_prepare and Handler_commit --echo # statistics. --echo # delimiter |; create procedure p_verify_status_increment(commit_inc_mixed int, prepare_inc_mixed int, commit_inc_row int, prepare_inc_row int) begin declare commit_inc int; declare prepare_inc int; declare old_commit_count int default ifnull(@commit_count, 0); declare old_prepare_count int default ifnull(@prepare_count, 0); declare c_res int; # Use a cursor to have just one access to I_S instead of 2, it is very slow # and amounts for over 90% of test CPU time declare c cursor for select variable_value from information_schema.session_status where variable_name='Handler_commit' or variable_name='Handler_prepare' order by variable_name; if @binlog_format = 'ROW' then set commit_inc= commit_inc_row; set prepare_inc= prepare_inc_row; else set commit_inc= commit_inc_mixed; set prepare_inc= prepare_inc_mixed; end if; open c; fetch c into c_res; set @commit_count=c_res; fetch c into c_res; set @prepare_count=c_res; close c; if old_commit_count + commit_inc <> @commit_count then select concat("Expected commit increment: ", commit_inc, " actual: ", @commit_count - old_commit_count) as 'ERROR'; elseif old_prepare_count + prepare_inc <> @prepare_count then select concat("Expected prepare increment: ", prepare_inc, " actual: ", @prepare_count - old_prepare_count) as 'ERROR'; else select '' as 'SUCCESS'; end if; end| delimiter ;| --echo # Reset Handler_commit and Handler_prepare counters flush status; --echo # --echo # 1. Read-only statement: SELECT --echo # select * from t1; call p_verify_status_increment(1, 0, 1, 0); commit; call p_verify_status_increment(1, 0, 1, 0); --echo # 2. Read-write statement: INSERT, insert 1 row. --echo # insert into t1 (a) values (1); call p_verify_status_increment(2, 2, 2, 2); commit; call p_verify_status_increment(2, 2, 2, 2); --echo # 3. Read-write statement: UPDATE, update 1 row. --echo # update t1 set a=2; call p_verify_status_increment(2, 2, 2, 2); commit; call p_verify_status_increment(2, 2, 2, 2); --echo # 4. Read-write statement: UPDATE, update 0 rows, 1 row matches WHERE --echo # update t1 set a=2; call p_verify_status_increment(2, 2, 1, 0); commit; call p_verify_status_increment(2, 2, 1, 0); --echo # 5. Read-write statement: UPDATE, update 0 rows, 0 rows match WHERE --echo # --echo # In mixed replication mode, there is a read-only transaction --echo # in InnoDB and also the statement is written to the binary log. --echo # So we have two commits but no 2pc, since the first engine's --echo # transaction is read-only. --echo # In the row level replication mode, we only have the read-only --echo # transaction in InnoDB and nothing is written to the binary log. --echo # update t1 set a=3 where a=1; call p_verify_status_increment(2, 0, 1, 0); commit; call p_verify_status_increment(2, 0, 1, 0); --echo # 6. Read-write statement: DELETE, delete 0 rows. --echo # delete from t1 where a=1; call p_verify_status_increment(2, 0, 1, 0); commit; call p_verify_status_increment(2, 0, 1, 0); --echo # 7. Read-write statement: DELETE, delete 1 row. --echo # delete from t1 where a=2; call p_verify_status_increment(2, 2, 2, 2); commit; call p_verify_status_increment(2, 2, 2, 2); --echo # 8. Read-write statement: unqualified DELETE --echo # --echo # In statement or mixed replication mode, we call --echo # handler::ha_delete_all_rows() and write statement text --echo # to the binary log. This results in two read-write transactions. --echo # In row level replication mode, we do not call --echo # handler::ha_delete_all_rows(), but delete rows one by one. --echo # Since there are no rows, nothing is written to the binary log. --echo # Thus we have just one read-only transaction in InnoDB. delete from t1; call p_verify_status_increment(2, 2, 1, 0); commit; call p_verify_status_increment(2, 2, 1, 0); --echo # 9. Read-write statement: REPLACE, change 1 row. --echo # replace t1 set a=1; call p_verify_status_increment(2, 2, 2, 2); commit; call p_verify_status_increment(2, 2, 2, 2); --echo # 10. Read-write statement: REPLACE, change 0 rows. --echo # replace t1 set a=1; call p_verify_status_increment(2, 2, 1, 0); commit; call p_verify_status_increment(2, 2, 1, 0); --echo # 11. Read-write statement: IODKU, change 1 row. --echo # insert t1 set a=1 on duplicate key update a=a+1; call p_verify_status_increment(2, 2, 2, 2); select * from t1; call p_verify_status_increment(1, 0, 1, 0); commit; call p_verify_status_increment(2, 2, 2, 2); --echo # 12. Read-write statement: IODKU, change 0 rows. --echo # insert t1 set a=2 on duplicate key update a=2; call p_verify_status_increment(2, 2, 1, 0); commit; call p_verify_status_increment(2, 2, 1, 0); --echo # 13. Read-write statement: INSERT IGNORE, change 0 rows. --echo # insert ignore t1 set a=2; call p_verify_status_increment(2, 2, 1, 0); commit; call p_verify_status_increment(2, 2, 1, 0); --echo # 14. Read-write statement: INSERT IGNORE, change 1 row. --echo # insert ignore t1 set a=1; call p_verify_status_increment(2, 2, 2, 2); commit; call p_verify_status_increment(2, 2, 2, 2); --echo # 15. Read-write statement: UPDATE IGNORE, change 0 rows. --echo # update ignore t1 set a=2 where a=1; call p_verify_status_increment(2, 2, 1, 0); commit; call p_verify_status_increment(2, 2, 1, 0); --echo # --echo # Create a stored function that modifies a --echo # non-transactional table. Demonstrate that changes in --echo # non-transactional tables do not affect the two phase commit --echo # algorithm. --echo # delimiter |; create function f1() returns int begin insert t2 set a=2; return 2; end| delimiter ;| call p_verify_status_increment(0, 0, 0, 0); --echo # 16. A function changes non-trans-table. --echo # --echo # For row-based logging, there is an extra commit for the --echo # non-transactional changes saved in the transaction cache to --echo # the binary log. --echo # select f1(); call p_verify_status_increment(0, 0, 1, 0); commit; call p_verify_status_increment(0, 0, 1, 0); --echo # 17. Read-only statement, a function changes non-trans-table. --echo # --echo # For row-based logging, there is an extra commit for the --echo # non-transactional changes saved in the transaction cache to --echo # the binary log. --echo # select f1() from t1; call p_verify_status_increment(1, 0, 2, 0); commit; call p_verify_status_increment(1, 0, 2, 0); --echo # 18. Read-write statement: UPDATE, change 0 (transactional) rows. --echo # select count(*) from t2; update t1 set a=2 where a=f1()+10; select count(*) from t2; call p_verify_status_increment(2, 0, 2, 0); commit; call p_verify_status_increment(2, 0, 2, 0); --echo # --echo # Replace the non-transactional table with a temporary --echo # transactional table. Demonstrate that a change to a temporary --echo # transactional table does not provoke 2-phase commit, although --echo # does trigger a commit and a binlog write (in statement mode). --echo # drop table t2; set sql_mode=no_engine_substitution; create temporary table t2 (a int); call p_verify_status_increment(0, 0, 0, 0); set sql_mode=default; --echo # 19. A function changes temp-trans-table. --echo # select f1(); --echo # Two commits because a binary log record is written call p_verify_status_increment(2, 0, 1, 0); commit; call p_verify_status_increment(2, 0, 1, 0); --echo # 20. Read-only statement, a function changes non-trans-table. --echo # select f1() from t1; --echo # Two commits because a binary log record is written call p_verify_status_increment(2, 0, 1, 0); commit; call p_verify_status_increment(2, 0, 1, 0); --echo # 21. Read-write statement: UPDATE, change 0 (transactional) rows. --echo # update t1 set a=2 where a=f1()+10; call p_verify_status_increment(2, 0, 1, 0); commit; call p_verify_status_increment(2, 0, 1, 0); --echo # 22. DDL: ALTER TEMPORARY TABLE, should not cause a 2pc --echo # alter table t2 add column b int default 5; --echo # A commit is done internally by ALTER. call p_verify_status_increment(2, 0, 2, 0); commit; --echo # There is nothing left to commit call p_verify_status_increment(0, 0, 0, 0); --echo # 23. DDL: RENAME TEMPORARY TABLE, does not start a transaction --echo --echo # No test because of Bug#8729 "rename table fails on temporary table" --echo # 24. DDL: TRUNCATE TEMPORARY TABLE --echo truncate table t2; call p_verify_status_increment(4, 0, 4, 0); commit; --echo # There is nothing left to commit call p_verify_status_increment(0, 0, 0, 0); --echo # 25. Read-write statement: unqualified DELETE --echo delete from t2; call p_verify_status_increment(2, 0, 1, 0); commit; --echo # There is nothing left to commit call p_verify_status_increment(2, 0, 1, 0); --echo # 25. DDL: DROP TEMPORARY TABLE, does not start a transaction --echo # drop temporary table t2; call p_verify_status_increment(0, 0, 0, 0); commit; call p_verify_status_increment(0, 0, 0, 0); --echo # 26. Verify that SET AUTOCOMMIT issues an implicit commit --echo # insert t1 set a=3; call p_verify_status_increment(2, 2, 2, 2); set autocommit=1; call p_verify_status_increment(2, 2, 2, 2); rollback; select a from t1 where a=3; call p_verify_status_increment(1, 0, 1, 0); delete from t1 where a=3; call p_verify_status_increment(2, 2, 2, 2); commit; call p_verify_status_increment(0, 0, 0, 0); set autocommit=0; call p_verify_status_increment(0, 0, 0, 0); insert t1 set a=3; call p_verify_status_increment(2, 2, 2, 2); --echo # Sic: not actually changing the value of autocommit set autocommit=0; call p_verify_status_increment(0, 0, 0, 0); rollback; select a from t1 where a=3; call p_verify_status_increment(1, 0, 1, 0); --echo # 27. Savepoint management --echo # insert t1 set a=3; call p_verify_status_increment(2, 2, 2, 2); savepoint a; call p_verify_status_increment(1, 0, 1, 0); insert t1 set a=4; call p_verify_status_increment(2, 2, 2, 2); release savepoint a; rollback; call p_verify_status_increment(0, 0, 0, 0); select a from t1 where a=3; call p_verify_status_increment(1, 0, 1, 0); commit; call p_verify_status_increment(1, 0, 1, 0); --echo # 28. Read-write statement: DO --echo # create table t2 (a int); call p_verify_status_increment(0, 0, 0, 0); do (select f1() from t1 where a=2); call p_verify_status_increment(2, 2, 2, 2); commit; call p_verify_status_increment(2, 2, 2, 2); --echo # 29. Read-write statement: MULTI-DELETE --echo # delete t1, t2 from t1 join t2 on (t1.a=t2.a) where t1.a=2; commit; call p_verify_status_increment(4, 4, 4, 4); --echo # 30. Read-write statement: INSERT-SELECT, MULTI-UPDATE, REPLACE-SELECT --echo # insert into t2 select a from t1; commit; replace into t2 select a from t1; commit; call p_verify_status_increment(8, 8, 8, 8); # # Multi-update is one of the few remaining statements that still # locks the tables at prepare step (and hence starts the transaction. # Disable the PS protocol, since in this protocol we get a different # number of commmits (there is an extra commit after prepare # --disable_ps_protocol update t1, t2 set t1.a=4, t2.a=8 where t1.a=t2.a and t1.a=1; --enable_ps_protocol commit; call p_verify_status_increment(4, 4, 4, 4); --echo # 31. DDL: various DDL with transactional tables --echo # --echo # Sic: no table is created. create table if not exists t2 (a int) select 6 union select 7; --echo # Sic: first commits the statement, and then the transaction. call p_verify_status_increment(4, 4, 4, 4); create table t3 select a from t2; call p_verify_status_increment(4, 4, 4, 4); alter table t3 add column (b int); call p_verify_status_increment(2, 0, 2, 0); alter table t3 rename t4; call p_verify_status_increment(1, 0, 1, 0); rename table t4 to t3; call p_verify_status_increment(1, 0, 1, 0); truncate table t3; call p_verify_status_increment(4, 4, 4, 4); create view v1 as select * from t2; call p_verify_status_increment(1, 0, 1, 0); check table t1; call p_verify_status_increment(3, 0, 3, 0); --echo # Sic: after this bug is fixed, CHECK leaves no pending transaction commit; call p_verify_status_increment(0, 0, 0, 0); check table t1, t2, t3; call p_verify_status_increment(6, 0, 6, 0); commit; call p_verify_status_increment(0, 0, 0, 0); drop view v1; call p_verify_status_increment(0, 0, 0, 0); --echo # --echo # Cleanup --echo # drop table t1, t2, t3; drop procedure p_verify_status_increment; drop function f1;
Close