File: rpl_create_select_row.test

package info (click to toggle)
mariadb 1%3A11.8.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 772,520 kB
  • sloc: ansic: 2,414,714; cpp: 1,791,394; asm: 381,336; perl: 62,905; sh: 49,647; pascal: 40,897; java: 39,363; python: 20,791; yacc: 20,432; sql: 17,907; xml: 12,344; ruby: 8,544; cs: 6,542; makefile: 6,145; ada: 1,879; lex: 1,193; javascript: 996; objc: 80; tcl: 73; awk: 46; php: 22
file content (161 lines) | stat: -rw-r--r-- 5,619 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
--source include/have_binlog_format_row.inc
--source include/have_innodb.inc
--source include/master-slave.inc

--connection master
set @max_binlog_cache_size         = @@global.max_binlog_cache_size;
set @binlog_cache_size             = @@global.binlog_cache_size;
set @@global.max_binlog_cache_size = 4096;
set @@global.    binlog_cache_size = 4096;

--echo #
--echo # MDEV-35207 ignored error at binlogging by CREATE-TABLE-SELECT leads to assert
--echo #
# fix the current (write) binlog position
--let $binlog_file_0= query_get_value(SHOW MASTER STATUS, File, 1)
--let $binlog_start_0 = query_get_value(SHOW MASTER STATUS, Position, 1)

# use a separate connection also to validate its close will be clean
connect (conn_err,localhost,root,,);

call mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage");
--error ER_TRANS_CACHE_FULL
create table t engine=myisam select repeat ('a',4096*3) AS a;

--error ER_TRANS_CACHE_FULL
create table t engine=innodb select repeat ('a',4096*3) AS a;

--error ER_DUP_ENTRY
create table t (a int unique, b char) select 1 AS a, 'b' as b union select 1 as a, 'c' as b;
--error ER_NO_SUCH_TABLE
select * from t;

--disconnect conn_err

--connection master
--let $binlog_file_1= query_get_value(SHOW MASTER STATUS, File, 1)
--let $binlog_start_1= query_get_value(SHOW MASTER STATUS, Position, 1)

--let $cmp = `select strcmp('$binlog_file_1', '$binlog_file_0') <> 0 OR $binlog_start_1 <> $binlog_start_0`
if (!$cmp)
{
   --echo *** Error: unexpected advance of binlog position
   --die
}

--echo
--echo #
--echo # MDEV-35499 errored CREATE-OR-REPLACE-SELECT does not DROP table in binlog
--echo #
--let $i = 2
while ($i)
{
  --let $engine=`select if($i % 2, "myisam", "innodb")`
  --echo #
  --echo # Engine = $engine
  --echo #
  set statement binlog_format=statement for create table t (a int) select 1 as a;
  --let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
  --let $binlog_start = query_get_value(SHOW MASTER STATUS, Position, 1)
  --error ER_DUP_ENTRY
  --eval set statement binlog_format=row for create or replace table t (a int primary key, b char) engine=$engine select 1 AS a, 'b' as b union select 1 as a, 'c' as b
  --error ER_NO_SUCH_TABLE
  select * from t;
  --echo #
  --echo # Prove an expected lonely `DROP table t'
  --source include/show_binlog_events.inc

  # error before stmt commit
  set statement binlog_format=statement for create table t (a int) select 1 as a;
  --let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
  --let $binlog_start = query_get_value(SHOW MASTER STATUS, Position, 1)
  --error ER_TRANS_CACHE_FULL
  --eval set statement binlog_format=row for create or replace table t (a text) engine=$engine select repeat ('a',1024) AS a union select repeat ('a',3*4096) AS a union select repeat ('a',3*4096) AS a
  --error ER_NO_SUCH_TABLE
  select * from t;
  --echo #
  --echo # Prove an expected lonely `DROP table t'
  --source include/show_binlog_events.inc

  # error at stmt commit
  set statement binlog_format=statement for create table t (a int) select 1 as a;
  --let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
  --let $binlog_start = query_get_value(SHOW MASTER STATUS, Position, 1)
  --error ER_TRANS_CACHE_FULL
  --eval set statement binlog_format=row for create or replace table t (a text) engine=$engine select repeat ('a',4096*3) AS a;
  --error ER_NO_SUCH_TABLE
  select * from t;
  --echo #
  --echo # Prove an expected lonely `DROP table t'
  --source include/show_binlog_events.inc

--dec $i
}

# Tests of mixed engines to demonstrate non-transaction table updates
# are binlogged or otherwise MDEV-36027.
create table ti_pk (a int primary key) engine=innodb;
create table ta (a int) engine=aria;
delimiter |;
create function f_ia(arg int)
returns integer
begin
  insert into ti_pk set a=1;
  insert into ta set a=1;
  insert into ti_pk set a=arg;
  return 1;
end |
delimiter ;|

--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
--let $binlog_start = query_get_value(SHOW MASTER STATUS, Position, 1)

--error ER_DUP_ENTRY
set statement binlog_format = ROW for create table t_y (a int) engine=aria select f_ia(1 /* err */) as a;
--error ER_NO_SUCH_TABLE
select * from t_y;

--echo # correct execution: `ta` is modified and its new record is binlogged
--source include/show_binlog_events.inc
select * from ta;
select * from ti_pk;

--sync_slave_with_master
--let  $diff_tables=master:ta,slave:ta
--source include/diff_tables.inc

--connection master
delete from ta;
--sync_slave_with_master

--connection master
# MDEV-36027 Errored-out CREATE-SELECT does not binlog results of any function modifying non-transactional table
--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
--let $binlog_start = query_get_value(SHOW MASTER STATUS, Position, 1)
--error ER_DUP_ENTRY
set statement binlog_format = STATEMENT for create table t_y (a int) engine=aria select f_ia(1 /* err */) as a;
--error ER_NO_SUCH_TABLE
select * from t_y;

--echo # ***TODO: fix MDEV-36027***. As of now `ta` is modified but that's not binlogged
--source include/show_binlog_events.inc
select *,'on_master' from ta;
select * from ti_pk;

--sync_slave_with_master
select *,'on_slave' from ta;

# Cleanup
--connection master
drop function f_ia;
drop table ti_pk, ta;

SET @@global.max_binlog_cache_size = @max_binlog_cache_size;
SET @@global.    binlog_cache_size = @binlog_cache_size;

# test that binlog replicates correctly to slave
# --connection slave
--sync_slave_with_master

--echo End of the tests
--source include/rpl_end.inc