Merge lp:~laurynas-biveinis/percona-server/fake-changes-from-fb-5.5 into lp:percona-server/5.5

Proposed by Laurynas Biveinis
Status: Superseded
Proposed branch: lp:~laurynas-biveinis/percona-server/fake-changes-from-fb-5.5
Merge into: lp:percona-server/5.5
Prerequisite: lp:~laurynas-biveinis/percona-server/fake-changes-binlog-5.5
Diff against target: 1845 lines (+1146/-174)
17 files modified
Percona-Server/mysql-test/include/start_fake_changes.inc (+32/-0)
Percona-Server/mysql-test/include/stop_fake_changes.inc (+32/-0)
Percona-Server/mysql-test/r/percona_innodb_fake_changes.result (+548/-40)
Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_898306.result (+48/-3)
Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_917942.result (+128/-0)
Percona-Server/mysql-test/t/percona_innodb_fake_changes.test (+302/-73)
Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_898306.test (+8/-4)
Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_917942.test (+14/-24)
Percona-Server/mysql-test/t/percona_innodb_fake_changes_locks.test (+1/-0)
Percona-Server/sql/sql_insert.cc (+1/-1)
Percona-Server/storage/innobase/btr/btr0cur.c (+10/-10)
Percona-Server/storage/innobase/handler/ha_innodb.cc (+10/-7)
Percona-Server/storage/innobase/handler/handler0alter.cc (+4/-4)
Percona-Server/storage/innobase/lock/lock0lock.c (+4/-4)
Percona-Server/storage/innobase/que/que0que.c (+1/-1)
Percona-Server/storage/innobase/row/row0ins.c (+2/-2)
Percona-Server/storage/innobase/row/row0upd.c (+1/-1)
To merge this branch: bzr merge lp:~laurynas-biveinis/percona-server/fake-changes-from-fb-5.5
Reviewer Review Type Date Requested Status
Laurynas Biveinis (community) Needs Fixing
Registry Administrators Pending
Review via email: mp+174192@code.launchpad.net

This proposal has been superseded by a proposal from 2013-07-16.

Description of the change

No BT or ST but BT 20439 prerequisite.
http://jenkins.percona.com/job/percona-server-5.5-param/798/

Fix bug 1190604 (Missing branch predictor annotations for fake
changes) by adding likely/unlikely/UNIV_LIKELY/UNIV_LIKELY annotations
to all the fake changes check branches that are missing them.

Fix bug 1200162 (Missing MTR tests for fake changes with BLOBs and
secondary indexes) by reviewing Facebook patch and adding
corresponding tests to our fake changes tests.

At the same time: create two new include files start_fake_changes.inc
and stop_fake_changes.inc. They start or stop fake changes and also
take the snapshot of the server state that should not change during
the fake changes workload. Use these files instead of setting
fake_changes session variable directly where applicable for additional
verification.

To post a comment you must log in.
Revision history for this message
Laurynas Biveinis (laurynas-biveinis) wrote :

start|stop_fake_changes.inc:

SELECT ROWS FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS and SHOW INDEXES may cause test instabilities if there is a non-fake-change session workload for the same table running in parallel to the fake change one and the automatic stat recalculation kicks in at a wrong time. This need either ANALYZE TABLE, either disabling auto recalc. Right now the former seems like a better option IMHO.

review: Needs Fixing

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'Percona-Server/mysql-test/include/start_fake_changes.inc'
2--- Percona-Server/mysql-test/include/start_fake_changes.inc 1970-01-01 00:00:00 +0000
3+++ Percona-Server/mysql-test/include/start_fake_changes.inc 2013-07-15 16:19:41 +0000
4@@ -0,0 +1,32 @@
5+#
6+# Include this file in a session before fake changes workload. It will enable
7+# the fake changes for the current session and save the relevant server state
8+# to variables that will be used by stop_fake_changes.inc that it didn't change.
9+#
10+# Since some of the state checked is global InnoDB counters, do not issue a
11+# non-fake-changes workload in parallel.
12+#
13+
14+# Requires userstat
15+SELECT @@global.userstat = 1 AS should_be_1;
16+
17+# Have up-to-date stats for the fake changes table, so that, if there is a
18+# non-fake-changes session running in parallel, it does not trigger an auto
19+# stat recalc which then fails these checks.
20+eval ANALYZE TABLE $fake_changes_table;
21+
22+let $t_checksum_1= `CHECKSUM TABLE $fake_changes_table EXTENDED`;
23+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
24+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
25+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
26+eval SELECT ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE '$fake_changes_table';
27+eval SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE '$fake_changes_table';
28+eval SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE '$fake_changes_table';
29+
30+#
31+# Index stats should not change, but it's only possible to inspect them
32+# manually.
33+#
34+eval SHOW INDEXES IN $fake_changes_table;
35+
36+SET innodb_fake_changes=1;
37
38=== added file 'Percona-Server/mysql-test/include/stop_fake_changes.inc'
39--- Percona-Server/mysql-test/include/stop_fake_changes.inc 1970-01-01 00:00:00 +0000
40+++ Percona-Server/mysql-test/include/stop_fake_changes.inc 2013-07-15 16:19:41 +0000
41@@ -0,0 +1,32 @@
42+#
43+# Include this file in a session after fake changes workload. It will disable the fake
44+# changes and assert that the relevant server state has not changed from the one saved
45+# by a previous start_fake_changes.inc.
46+#
47+SET innodb_fake_changes=0;
48+
49+eval CHECK TABLE $fake_changes_table;
50+
51+let $t_checksum_2= `CHECKSUM TABLE $fake_changes_table EXTENDED`;
52+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
53+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
54+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
55+eval SELECT ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE '$fake_changes_table';
56+eval SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE '$fake_changes_table';
57+eval SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE '$fake_changes_table';
58+
59+--disable_query_log
60+eval SELECT "$t_checksum_1" LIKE "$t_checksum_2" AS should_be_1;
61+--enable_query_log
62+SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
63+SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
64+SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
65+SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
66+SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
67+SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
68+
69+#
70+# Index stats should not change, but it's only possible to inspect them
71+# manually.
72+#
73+eval SHOW INDEXES IN $fake_changes_table;
74
75=== modified file 'Percona-Server/mysql-test/r/percona_innodb_fake_changes.result'
76--- Percona-Server/mysql-test/r/percona_innodb_fake_changes.result 2012-10-17 11:56:00 +0000
77+++ Percona-Server/mysql-test/r/percona_innodb_fake_changes.result 2013-07-15 16:19:41 +0000
78@@ -22,10 +22,23 @@
79 OFF
80 # Explicit COMMIT should fail when innodb_fake_changes is enabled
81 # DML should be fine
82-SET @@GLOBAL.userstat= TRUE;
83+SET @@GLOBAL.userstat=TRUE;
84 CREATE TABLE t1 (a INT) ENGINE=InnoDB;
85 INSERT INTO t1 VALUES (1);
86-SET autocommit=0;
87+SELECT @@global.userstat = 1 AS should_be_1;
88+should_be_1
89+1
90+ANALYZE TABLE t1;
91+Table Op Msg_type Msg_text
92+test.t1 analyze status OK
93+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
94+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
95+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
96+SELECT ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
97+SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
98+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
99+SHOW INDEXES IN t1;
100+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
101 SET innodb_fake_changes=1;
102 BEGIN;
103 INSERT INTO t1 VALUES (2);
104@@ -36,29 +49,417 @@
105 1
106 COMMIT;
107 ERROR HY000: Got error 131 during COMMIT
108-SET innodb_fake_changes=default;
109-# Verify that the fake changes to t1 did not leak through
110-CHECK TABLE t1;
111-Table Op Msg_type Msg_text
112-test.t1 check status OK
113-should_be_1
114-1
115-should_be_0
116-0
117-should_be_0
118-0
119-should_be_0
120-0
121-should_be_0
122-0
123-should_be_0
124-0
125-should_be_0
126-0
127-DROP TABLE t1;
128+SET innodb_fake_changes=0;
129+CHECK TABLE t1;
130+Table Op Msg_type Msg_text
131+test.t1 check status OK
132+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
133+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
134+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
135+SELECT ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
136+SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
137+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
138+should_be_1
139+1
140+SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
141+should_be_0
142+0
143+SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
144+should_be_0
145+0
146+SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
147+should_be_0
148+0
149+SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
150+should_be_0
151+0
152+SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
153+should_be_0
154+0
155+SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
156+should_be_0
157+0
158+SHOW INDEXES IN t1;
159+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
160+DROP TABLE t1;
161+CREATE TABLE t1 (a INT PRIMARY KEY, b INT, UNIQUE KEY (b)) ENGINE=InnoDB;
162+INSERT INTO t1 VALUES (1,1);
163+SELECT @@global.userstat = 1 AS should_be_1;
164+should_be_1
165+1
166+ANALYZE TABLE t1;
167+Table Op Msg_type Msg_text
168+test.t1 analyze status OK
169+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
170+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
171+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
172+SELECT ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
173+SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
174+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
175+SHOW INDEXES IN t1;
176+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
177+t1 0 PRIMARY 1 a A 1 NULL NULL BTREE
178+t1 0 b 1 b A 1 NULL NULL YES BTREE
179+SET innodb_fake_changes=1;
180+SELECT * FROM t1;
181+ERROR HY000: Got error 131 during COMMIT
182+INSERT INTO t1 VALUES (2,2);
183+ERROR HY000: Got error 131 during COMMIT
184+UPDATE t1 SET a=0 where b=1;
185+ERROR 23000: Duplicate entry '1' for key 'b'
186+UPDATE t1 SET b=0 where a=1;
187+ERROR HY000: Got error 131 during COMMIT
188+UPDATE t1 SET b=0 where a=2;
189+ERROR HY000: Got error 131 during COMMIT
190+DELETE FROM t1 where b=2;
191+ERROR HY000: Got error 131 during COMMIT
192+DELETE FROM t1 where b=1;
193+ERROR HY000: Got error 131 during COMMIT
194+DELETE FROM t1 where a=2;
195+ERROR HY000: Got error 131 during COMMIT
196+DELETE FROM t1 where a=1;
197+ERROR HY000: Got error 131 during COMMIT
198+REPLACE INTO t1 values (2,3);
199+ERROR HY000: Got error 131 during COMMIT
200+BEGIN;
201+SELECT * FROM t1;
202+a b
203+1 1
204+COMMIT;
205+ERROR HY000: Got error 131 during COMMIT
206+BEGIN;
207+INSERT INTO t1 VALUES (2,2);
208+COMMIT;
209+ERROR HY000: Got error 131 during COMMIT
210+BEGIN;
211+UPDATE t1 SET a=0 where b=1;
212+ERROR 23000: Duplicate entry '1' for key 'b'
213+COMMIT;
214+ERROR HY000: Got error 131 during COMMIT
215+BEGIN;
216+UPDATE t1 SET b=0 where a=1;
217+COMMIT;
218+ERROR HY000: Got error 131 during COMMIT
219+BEGIN;
220+UPDATE t1 SET b=0 where a=2;
221+COMMIT;
222+ERROR HY000: Got error 131 during COMMIT
223+BEGIN;
224+DELETE FROM t1 where b=2;
225+COMMIT;
226+ERROR HY000: Got error 131 during COMMIT
227+BEGIN;
228+DELETE FROM t1 where b=1;
229+COMMIT;
230+ERROR HY000: Got error 131 during COMMIT
231+BEGIN;
232+DELETE FROM t1 where a=2;
233+COMMIT;
234+ERROR HY000: Got error 131 during COMMIT
235+BEGIN;
236+DELETE FROM t1 where a=1;
237+COMMIT;
238+ERROR HY000: Got error 131 during COMMIT
239+BEGIN;
240+REPLACE INTO t1 values (2,3);
241+COMMIT;
242+ERROR HY000: Got error 131 during COMMIT
243+INSERT INTO t1 VALUES (1,1) ON DUPLICATE KEY UPDATE b=2;
244+ERROR HY000: Got error 131 during COMMIT
245+CREATE INDEX bx ON t1(b);
246+ERROR HY000: Got error 131 during COMMIT
247+SET innodb_fake_changes=0;
248+CHECK TABLE t1;
249+Table Op Msg_type Msg_text
250+test.t1 check status OK
251+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
252+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
253+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
254+SELECT ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
255+SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
256+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
257+should_be_1
258+1
259+SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
260+should_be_0
261+0
262+SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
263+should_be_0
264+0
265+SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
266+should_be_0
267+0
268+SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
269+should_be_0
270+0
271+SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
272+should_be_0
273+0
274+SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
275+should_be_0
276+0
277+SHOW INDEXES IN t1;
278+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
279+t1 0 PRIMARY 1 a A 1 NULL NULL BTREE
280+t1 0 b 1 b A 1 NULL NULL YES BTREE
281+DROP TABLE t1;
282+CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
283+INSERT INTO t2 VALUES (1, 1);
284+SELECT @@global.userstat = 1 AS should_be_1;
285+should_be_1
286+1
287+ANALYZE TABLE t2;
288+Table Op Msg_type Msg_text
289+test.t2 analyze status OK
290+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
291+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
292+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
293+SELECT ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2';
294+SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2';
295+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2';
296+SHOW INDEXES IN t2;
297+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
298+t2 0 PRIMARY 1 a A 1 NULL NULL BTREE
299+SET innodb_fake_changes=1;
300+SELECT * FROM t2;
301+ERROR HY000: Got error 131 during COMMIT
302+INSERT INTO t2 VALUES (2,2);
303+ERROR HY000: Got error 131 during COMMIT
304+UPDATE t2 SET b=0 where a=1;
305+ERROR HY000: Got error 131 during COMMIT
306+UPDATE t2 SET b=0 where a=2;
307+ERROR HY000: Got error 131 during COMMIT
308+DELETE FROM t2 where b=2;
309+ERROR HY000: Got error 131 during COMMIT
310+DELETE FROM t2 where b=1;
311+ERROR HY000: Got error 131 during COMMIT
312+DELETE FROM t2 where a=2;
313+ERROR HY000: Got error 131 during COMMIT
314+DELETE FROM t2 where a=1;
315+ERROR HY000: Got error 131 during COMMIT
316+REPLACE INTO t2 values (2,3);
317+ERROR HY000: Got error 131 during COMMIT
318+REPLACE INTO t2 VALUES (1,1);
319+ERROR HY000: Got error 131 during COMMIT
320+REPLACE INTO t2 VALUES (1,2);
321+ERROR HY000: Got error 131 during COMMIT
322+BEGIN;
323+SELECT * FROM t2;
324+a b
325+1 1
326+COMMIT;
327+ERROR HY000: Got error 131 during COMMIT
328+BEGIN;
329+INSERT INTO t2 VALUES (2,2);
330+COMMIT;
331+ERROR HY000: Got error 131 during COMMIT
332+BEGIN;
333+UPDATE t2 SET b=0 where a=1;
334+COMMIT;
335+ERROR HY000: Got error 131 during COMMIT
336+BEGIN;
337+UPDATE t2 SET b=0 where a=2;
338+COMMIT;
339+ERROR HY000: Got error 131 during COMMIT
340+BEGIN;
341+DELETE FROM t2 where b=2;
342+COMMIT;
343+ERROR HY000: Got error 131 during COMMIT
344+BEGIN;
345+DELETE FROM t2 where b=1;
346+COMMIT;
347+ERROR HY000: Got error 131 during COMMIT
348+BEGIN;
349+DELETE FROM t2 where a=2;
350+COMMIT;
351+ERROR HY000: Got error 131 during COMMIT
352+BEGIN;
353+DELETE FROM t2 where a=1;
354+COMMIT;
355+ERROR HY000: Got error 131 during COMMIT
356+BEGIN;
357+REPLACE INTO t2 values (2,3);
358+COMMIT;
359+ERROR HY000: Got error 131 during COMMIT
360+BEGIN;
361+REPLACE INTO t2 VALUES (1,1);
362+COMMIT;
363+ERROR HY000: Got error 131 during COMMIT
364+BEGIN;
365+REPLACE INTO t2 VALUES (1,2);
366+COMMIT;
367+ERROR HY000: Got error 131 during COMMIT
368+BEGIN;
369+REPLACE INTO t2 VALUES (1,2);
370+SELECT * from t2;
371+a b
372+1 1
373+REPLACE INTO t2 VALUES (1,1);
374+SELECT * from t2;
375+a b
376+1 1
377+ROLLBACK;
378+BEGIN;
379+INSERT INTO t2 VALUES (1,1);
380+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
381+INSERT INTO t2 VALUES (1,2);
382+ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
383+ROLLBACK;
384+INSERT INTO t2 VALUES (1,1) ON DUPLICATE KEY UPDATE b=2;
385+ERROR HY000: Got error 131 during COMMIT
386+INSERT INTO t2 VALUES (1,1) ON DUPLICATE KEY UPDATE b=b+10;
387+ERROR HY000: Got error 131 during COMMIT
388+INSERT INTO t2 VALUES (1,2) ON DUPLICATE KEY UPDATE b=b+10;
389+ERROR HY000: Got error 131 during COMMIT
390+CREATE INDEX bx ON t2(b);
391+ERROR HY000: Got error 131 during COMMIT
392+SET innodb_fake_changes=0;
393+CHECK TABLE t2;
394+Table Op Msg_type Msg_text
395+test.t2 check status OK
396+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
397+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
398+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
399+SELECT ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2';
400+SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2';
401+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2';
402+should_be_1
403+1
404+SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
405+should_be_0
406+0
407+SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
408+should_be_0
409+0
410+SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
411+should_be_0
412+0
413+SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
414+should_be_0
415+0
416+SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
417+should_be_0
418+0
419+SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
420+should_be_0
421+0
422+SHOW INDEXES IN t2;
423+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
424+t2 0 PRIMARY 1 a A 1 NULL NULL BTREE
425+DROP TABLE t2;
426+CREATE TABLE t3 (a INT PRIMARY KEY, B TEXT) ENGINE=InnoDB;
427+INSERT INTO t3 VALUES (1, '');
428+SELECT @@global.userstat = 1 AS should_be_1;
429+should_be_1
430+1
431+ANALYZE TABLE t3;
432+Table Op Msg_type Msg_text
433+test.t3 analyze status OK
434+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
435+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
436+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
437+SELECT ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
438+SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
439+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
440+SHOW INDEXES IN t3;
441+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
442+t3 0 PRIMARY 1 a A 1 NULL NULL BTREE
443+SET innodb_fake_changes=1;
444+SELECT * FROM t3;
445+ERROR HY000: Got error 131 during COMMIT
446+INSERT INTO t3 VALUES (2,lpad('a',10000, 'b'));
447+ERROR HY000: Got error 131 during COMMIT
448+UPDATE t3 SET a=0 where a=1;
449+ERROR HY000: Got error 131 during COMMIT
450+DELETE FROM t3 where a=2;
451+ERROR HY000: Got error 131 during COMMIT
452+DELETE FROM t3 where a=1;
453+ERROR HY000: Got error 131 during COMMIT
454+REPLACE INTO t3 values (2,lpad('a',9000,'q'));
455+ERROR HY000: Got error 131 during COMMIT
456+INSERT INTO t3 VALUES (1,1) ON DUPLICATE KEY UPDATE b=lpad('b',11000,'c');
457+ERROR HY000: Got error 131 during COMMIT
458+BEGIN;
459+SELECT * FROM t3;
460+a B
461+1
462+COMMIT;
463+ERROR HY000: Got error 131 during COMMIT
464+BEGIN;
465+INSERT INTO t3 VALUES (2,lpad('a',10000, 'b'));
466+COMMIT;
467+ERROR HY000: Got error 131 during COMMIT
468+BEGIN;
469+UPDATE t3 SET a=0 where a=1;
470+COMMIT;
471+ERROR HY000: Got error 131 during COMMIT
472+BEGIN;
473+DELETE FROM t3 where a=2;
474+COMMIT;
475+ERROR HY000: Got error 131 during COMMIT
476+BEGIN;
477+DELETE FROM t3 where a=1;
478+COMMIT;
479+ERROR HY000: Got error 131 during COMMIT
480+BEGIN;
481+REPLACE INTO t3 values (2,lpad('a',9000,'q'));
482+COMMIT;
483+ERROR HY000: Got error 131 during COMMIT
484+BEGIN;
485+INSERT INTO t3 VALUES (1,1) ON DUPLICATE KEY UPDATE b=lpad('b',11000,'c');
486+COMMIT;
487+ERROR HY000: Got error 131 during COMMIT
488+SET innodb_fake_changes=0;
489+CHECK TABLE t3;
490+Table Op Msg_type Msg_text
491+test.t3 check status OK
492+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
493+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
494+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
495+SELECT ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
496+SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
497+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
498+should_be_1
499+1
500+SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
501+should_be_0
502+0
503+SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
504+should_be_0
505+0
506+SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
507+should_be_0
508+0
509+SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
510+should_be_0
511+0
512+SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
513+should_be_0
514+0
515+SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
516+should_be_0
517+0
518+SHOW INDEXES IN t3;
519+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
520+t3 0 PRIMARY 1 a A 1 NULL NULL BTREE
521+DROP TABLE t3;
522 # DDL must result in error
523 CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
524-SET autocommit=0;
525+SELECT @@global.userstat = 1 AS should_be_1;
526+should_be_1
527+1
528+ANALYZE TABLE t1;
529+Table Op Msg_type Msg_text
530+test.t1 analyze status OK
531+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
532+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
533+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
534+SELECT ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
535+SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
536+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
537+SHOW INDEXES IN t1;
538+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
539+t1 0 PRIMARY 1 a A 0 NULL NULL BTREE
540 SET innodb_fake_changes=1;
541 BEGIN;
542 CREATE TABLE t2 (a INT) ENGINE=InnoDB;
543@@ -66,50 +467,157 @@
544 DROP TABLE t1;
545 ERROR 42S02: Unknown table 't1'
546 TRUNCATE TABLE t1;
547-ERROR HY000: Got error 131 during COMMIT
548+ERROR HY000: Table storage engine for 't1' doesn't have this option
549 ALTER TABLE t1 ENGINE=MyISAM;
550 ERROR HY000: Got error 131 during COMMIT
551 ROLLBACK;
552 SET innodb_fake_changes=0;
553+CHECK TABLE t1;
554+Table Op Msg_type Msg_text
555+test.t1 check status OK
556+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
557+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
558+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
559+SELECT ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
560+SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
561+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
562+should_be_1
563+1
564+SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
565+should_be_0
566+0
567+SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
568+should_be_0
569+0
570+SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
571+should_be_0
572+0
573+SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
574+should_be_0
575+0
576+SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
577+should_be_0
578+0
579+SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
580+should_be_0
581+0
582+SHOW INDEXES IN t1;
583+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
584+t1 0 PRIMARY 1 a A 0 NULL NULL BTREE
585 INSERT INTO t1 VALUES (1), (2);
586-COMMIT;
587 CREATE TABLE t2 (a INT PRIMARY KEY, b INT, INDEX b_ind (b),
588 FOREIGN KEY (b) REFERENCES t1(a) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;
589 INSERT INTO t2 VALUES (1, 1);
590 INSERT INTO t2 VALUES (2, 2);
591-COMMIT;
592+SELECT @@global.userstat = 1 AS should_be_1;
593+should_be_1
594+1
595+ANALYZE TABLE t1;
596+Table Op Msg_type Msg_text
597+test.t1 analyze status OK
598+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
599+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
600+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
601+SELECT ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
602+SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
603+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
604+SHOW INDEXES IN t1;
605+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
606+t1 0 PRIMARY 1 a A 2 NULL NULL BTREE
607 SET innodb_fake_changes=1;
608+BEGIN;
609 DELETE FROM t1 WHERE a=1;
610 UPDATE t1 SET a=3 WHERE a=2;
611 COMMIT;
612 ERROR HY000: Got error 131 during COMMIT
613+SET innodb_fake_changes=0;
614+CHECK TABLE t1;
615+Table Op Msg_type Msg_text
616+test.t1 check status OK
617+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
618+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
619+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
620+SELECT ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
621+SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
622+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
623 should_be_1
624 1
625-should_be_0
626-0
627-should_be_0
628-0
629-should_be_0
630-0
631-should_be_0
632-0
633-should_be_0
634-0
635-SET innodb_fake_changes=0;
636+SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
637+should_be_0
638+0
639+SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
640+should_be_0
641+0
642+SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
643+should_be_0
644+0
645+SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
646+should_be_0
647+0
648+SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
649+should_be_0
650+0
651+SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
652+should_be_0
653+0
654+SHOW INDEXES IN t1;
655+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
656+t1 0 PRIMARY 1 a A 2 NULL NULL BTREE
657 DROP TABLE t2;
658 CREATE TABLE t3 (a INT primary key, b text) ENGINE=InnoDB;
659 INSERT INTO t3 VALUES (1,'');
660-COMMIT;
661+SELECT @@global.userstat = 1 AS should_be_1;
662+should_be_1
663+1
664+ANALYZE TABLE t3;
665+Table Op Msg_type Msg_text
666+test.t3 analyze status OK
667+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
668+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
669+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
670+SELECT ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
671+SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
672+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
673+SHOW INDEXES IN t3;
674+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
675+t3 0 PRIMARY 1 a A 1 NULL NULL BTREE
676 SET innodb_fake_changes=1;
677+BEGIN;
678 UPDATE t3 set b=lpad('b',11000,'c') where a=1;
679 COMMIT;
680 ERROR HY000: Got error 131 during COMMIT
681-SET innodb_fake_changes=default;
682-# Verify that the fake changes to t3 did not leak through
683+SET innodb_fake_changes=0;
684 CHECK TABLE t3;
685 Table Op Msg_type Msg_text
686 test.t3 check status OK
687+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
688+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
689+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
690+SELECT ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
691+SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
692+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
693 should_be_1
694 1
695+SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
696+should_be_0
697+0
698+SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
699+should_be_0
700+0
701+SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
702+should_be_0
703+0
704+SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
705+should_be_0
706+0
707+SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
708+should_be_0
709+0
710+SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
711+should_be_0
712+0
713+SHOW INDEXES IN t3;
714+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
715+t3 0 PRIMARY 1 a A 1 NULL NULL BTREE
716 DROP TABLE t1, t3;
717 SET @@GLOBAL.userstat= default;
718
719=== modified file 'Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_898306.result'
720--- Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_898306.result 2012-10-17 11:30:19 +0000
721+++ Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_898306.result 2013-07-15 16:19:41 +0000
722@@ -1,7 +1,24 @@
723 DROP TABLE IF EXISTS t1;
724+SET @@GLOBAL.userstat=ON;
725 CREATE TABLE t1 (a INT primary key, b int, unique key (b)) ENGINE=InnoDB;
726 INSERT INTO t1 VALUES (1,1);
727 SET autocommit=1;
728+SELECT @@global.userstat = 1 AS should_be_1;
729+should_be_1
730+1
731+ANALYZE TABLE t1;
732+Table Op Msg_type Msg_text
733+test.t1 analyze status OK
734+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
735+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
736+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
737+SELECT ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
738+SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
739+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
740+SHOW INDEXES IN t1;
741+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
742+t1 0 PRIMARY 1 a A 1 NULL NULL BTREE
743+t1 0 b 1 b A 1 NULL NULL YES BTREE
744 SET innodb_fake_changes=1;
745 # Confirm that duplicate key errors on REPLACE works
746 REPLACE INTO t1 VALUES (1,1);
747@@ -34,10 +51,38 @@
748 INSERT INTO t1 VALUES (1,2) ON DUPLICATE KEY UPDATE b=b+10;
749 ERROR HY000: Got error 131 during COMMIT
750 SET innodb_fake_changes=0;
751-SELECT * from t1;
752-a b
753-1 1
754 CHECK TABLE t1;
755 Table Op Msg_type Msg_text
756 test.t1 check status OK
757+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
758+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
759+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
760+SELECT ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
761+SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
762+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
763+should_be_1
764+1
765+SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
766+should_be_0
767+0
768+SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
769+should_be_0
770+0
771+SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
772+should_be_0
773+0
774+SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
775+should_be_0
776+0
777+SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
778+should_be_0
779+0
780+SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
781+should_be_0
782+0
783+SHOW INDEXES IN t1;
784+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
785+t1 0 PRIMARY 1 a A 1 NULL NULL BTREE
786+t1 0 b 1 b A 1 NULL NULL YES BTREE
787 DROP TABLE t1;
788+SET @@GLOBAL.userstat=default;
789
790=== modified file 'Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_917942.result'
791--- Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_917942.result 2012-10-16 11:18:45 +0000
792+++ Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_917942.result 2013-07-15 16:19:41 +0000
793@@ -1,7 +1,23 @@
794 DROP TABLE IF EXISTS t1;
795+SET @@GLOBAL.userstat=ON;
796 Test compressed
797 CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB KEY_BLOCK_SIZE=8;
798 INSERT INTO t1 VALUES(NULL, LPAD("v", 2, "b"), LPAD("a", 100, "b"));
799+SELECT @@global.userstat = 1 AS should_be_1;
800+should_be_1
801+1
802+ANALYZE TABLE t1;
803+Table Op Msg_type Msg_text
804+test.t1 analyze status OK
805+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
806+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
807+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
808+SELECT ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
809+SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
810+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
811+SHOW INDEXES IN t1;
812+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
813+t1 0 PRIMARY 1 id A 1 NULL NULL BTREE
814 SET innodb_fake_changes=1;
815 INSERT INTO t1 VALUES(1, "foo", LPAD("a", 4600, "b")) ON DUPLICATE KEY UPDATE T = VALUES(T);
816 ERROR HY000: Got error 131 during COMMIT
817@@ -11,12 +27,54 @@
818 CHECK TABLE t1;
819 Table Op Msg_type Msg_text
820 test.t1 check status OK
821+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
822+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
823+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
824+SELECT ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
825+SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
826+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
827 should_be_1
828 1
829+SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
830+should_be_0
831+0
832+SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
833+should_be_0
834+0
835+SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
836+should_be_0
837+0
838+SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
839+should_be_0
840+0
841+SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
842+should_be_0
843+0
844+SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
845+should_be_0
846+0
847+SHOW INDEXES IN t1;
848+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
849+t1 0 PRIMARY 1 id A 1 NULL NULL BTREE
850 DROP TABLE t1;
851 Test for uncompressed
852 CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB;
853 INSERT INTO t1 VALUES(NULL, LPAD("v", 2, "b"), LPAD("a", 100, "b"));
854+SELECT @@global.userstat = 1 AS should_be_1;
855+should_be_1
856+1
857+ANALYZE TABLE t1;
858+Table Op Msg_type Msg_text
859+test.t1 analyze status OK
860+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
861+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
862+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
863+SELECT ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
864+SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
865+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
866+SHOW INDEXES IN t1;
867+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
868+t1 0 PRIMARY 1 id A 1 NULL NULL BTREE
869 SET innodb_fake_changes=1;
870 ERROR HY000: Got error 131 during COMMIT
871 ERROR HY000: Got error 131 during COMMIT
872@@ -122,11 +180,53 @@
873 CHECK TABLE t1;
874 Table Op Msg_type Msg_text
875 test.t1 check status OK
876+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
877+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
878+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
879+SELECT ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
880+SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
881+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
882 should_be_1
883 1
884+SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
885+should_be_0
886+0
887+SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
888+should_be_0
889+0
890+SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
891+should_be_0
892+0
893+SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
894+should_be_0
895+0
896+SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
897+should_be_0
898+0
899+SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
900+should_be_0
901+0
902+SHOW INDEXES IN t1;
903+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
904+t1 0 PRIMARY 1 id A 1 NULL NULL BTREE
905 DROP TABLE t1;
906 CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB KEY_BLOCK_SIZE=8;
907 INSERT INTO t1 VALUES(2, LPAD("v", 2, "b"), LPAD("a", 200, "b"));
908+SELECT @@global.userstat = 1 AS should_be_1;
909+should_be_1
910+1
911+ANALYZE TABLE t1;
912+Table Op Msg_type Msg_text
913+test.t1 analyze status OK
914+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
915+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
916+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
917+SELECT ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
918+SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
919+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
920+SHOW INDEXES IN t1;
921+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
922+t1 0 PRIMARY 1 id A 1 NULL NULL BTREE
923 SET innodb_fake_changes=1;
924 INSERT INTO t1 VALUES (3, "foo", LPAD("a", 4600, "b"));
925 ERROR HY000: Got error 131 during COMMIT
926@@ -134,8 +234,35 @@
927 CHECK TABLE t1;
928 Table Op Msg_type Msg_text
929 test.t1 check status OK
930+SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
931+SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
932+SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
933+SELECT ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
934+SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
935+SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
936 should_be_1
937 1
938+SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
939+should_be_0
940+0
941+SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
942+should_be_0
943+0
944+SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
945+should_be_0
946+0
947+SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
948+should_be_0
949+0
950+SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
951+should_be_0
952+0
953+SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
954+should_be_0
955+0
956+SHOW INDEXES IN t1;
957+Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
958+t1 0 PRIMARY 1 id A 1 NULL NULL BTREE
959 DROP TABLE t1;
960 CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB;
961 INSERT INTO t1 VALUES(2, LPAD("v", 3, "b"), LPAD("a", 100, "b"));
962@@ -149,3 +276,4 @@
963 should_be_1
964 1
965 DROP TABLE t1;
966+SET @@GLOBAL.userstat=default;
967
968=== modified file 'Percona-Server/mysql-test/t/percona_innodb_fake_changes.test'
969--- Percona-Server/mysql-test/t/percona_innodb_fake_changes.test 2012-10-17 11:56:00 +0000
970+++ Percona-Server/mysql-test/t/percona_innodb_fake_changes.test 2013-07-15 16:19:41 +0000
971@@ -4,7 +4,6 @@
972 DROP TABLE IF EXISTS t1, t2, t3;
973 --enable_warnings
974
975-
976 --echo # Checking variables
977 SHOW VARIABLES LIKE 'innodb_fake_changes';
978 SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
979@@ -17,20 +16,13 @@
980
981 --echo # Explicit COMMIT should fail when innodb_fake_changes is enabled
982 --echo # DML should be fine
983-SET @@GLOBAL.userstat= TRUE;
984+SET @@GLOBAL.userstat=TRUE;
985 CREATE TABLE t1 (a INT) ENGINE=InnoDB;
986 INSERT INTO t1 VALUES (1);
987
988-let $t1_checksum_1= `CHECKSUM TABLE t1 EXTENDED`;
989-let $innodb_rows_inserted_1= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_inserted'`;
990-let $innodb_rows_deleted_1= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted'`;
991-let $innodb_rows_updated_1= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated'`;
992-let $table_rows_estimate_1= `SELECT ROWS FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1'`;
993-let $table_rows_changed_1= `SELECT ROWS_CHANGED FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1'`;
994-let $table_rows_changed_x_indexes_1= `SELECT ROWS_CHANGED_X_INDEXES FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1'`;
995+--let $fake_changes_table=t1
996+--source include/start_fake_changes.inc
997
998-SET autocommit=0;
999-SET innodb_fake_changes=1;
1000 BEGIN;
1001 INSERT INTO t1 VALUES (2);
1002 UPDATE t1 SET a=0;
1003@@ -38,102 +30,339 @@
1004 SELECT * FROM t1;
1005 --error 1180
1006 COMMIT;
1007-SET innodb_fake_changes=default;
1008---echo # Verify that the fake changes to t1 did not leak through
1009-CHECK TABLE t1;
1010-let $t1_checksum_2= `CHECKSUM TABLE t1 EXTENDED`;
1011-let $innodb_rows_inserted_2= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_inserted'`;
1012-let $innodb_rows_deleted_2= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted'`;
1013-let $innodb_rows_updated_2= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated'`;
1014-let $table_rows_estimate_2= `SELECT ROWS FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1'`;
1015-let $table_rows_changed_2= `SELECT ROWS_CHANGED FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1'`;
1016-let $table_rows_changed_x_indexes_2= `SELECT ROWS_CHANGED_X_INDEXES FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1'`;
1017---disable_query_log
1018-eval SELECT "$t1_checksum_1" LIKE "$t1_checksum_2" AS should_be_1;
1019-eval SELECT "$innodb_rows_inserted_2" - "$innodb_rows_inserted_1" AS should_be_0;
1020-eval SELECT "$innodb_rows_deleted_2" - "$innodb_rows_deleted_1" AS should_be_0;
1021-eval SELECT "$innodb_rows_updated_2" - "$innodb_rows_updated_1" AS should_be_0;
1022-eval SELECT "$table_rows_estimate_2" - "$table_rows_estimate_1" AS should_be_0;
1023-eval SELECT "$table_rows_changed_2" - "$table_rows_changed_1" AS should_be_0;
1024-eval SELECT "$table_rows_changed_x_indexes_2" - "$table_rows_changed_x_indexes_1" AS should_be_0;
1025---enable_query_log
1026-DROP TABLE t1;
1027+
1028+--source include/stop_fake_changes.inc
1029+
1030+DROP TABLE t1;
1031+
1032+#
1033+# Test primary and secondary index access
1034+#
1035+CREATE TABLE t1 (a INT PRIMARY KEY, b INT, UNIQUE KEY (b)) ENGINE=InnoDB;
1036+INSERT INTO t1 VALUES (1,1);
1037+
1038+--source include/start_fake_changes.inc
1039+
1040+# Test with autocommit
1041+--error ER_ERROR_DURING_COMMIT
1042+SELECT * FROM t1;
1043+--error ER_ERROR_DURING_COMMIT
1044+INSERT INTO t1 VALUES (2,2);
1045+--error ER_DUP_ENTRY
1046+UPDATE t1 SET a=0 where b=1;
1047+--error ER_ERROR_DURING_COMMIT
1048+UPDATE t1 SET b=0 where a=1;
1049+--error ER_ERROR_DURING_COMMIT
1050+UPDATE t1 SET b=0 where a=2;
1051+--error ER_ERROR_DURING_COMMIT
1052+DELETE FROM t1 where b=2;
1053+--error ER_ERROR_DURING_COMMIT
1054+DELETE FROM t1 where b=1;
1055+--error ER_ERROR_DURING_COMMIT
1056+DELETE FROM t1 where a=2;
1057+--error ER_ERROR_DURING_COMMIT
1058+DELETE FROM t1 where a=1;
1059+--error ER_ERROR_DURING_COMMIT
1060+REPLACE INTO t1 values (2,3);
1061+
1062+# Test with transactions
1063+BEGIN;
1064+SELECT * FROM t1;
1065+--error ER_ERROR_DURING_COMMIT
1066+COMMIT;
1067+
1068+BEGIN;
1069+INSERT INTO t1 VALUES (2,2);
1070+--error ER_ERROR_DURING_COMMIT
1071+COMMIT;
1072+
1073+BEGIN;
1074+--error ER_DUP_ENTRY
1075+UPDATE t1 SET a=0 where b=1;
1076+--error ER_ERROR_DURING_COMMIT
1077+COMMIT;
1078+
1079+BEGIN;
1080+UPDATE t1 SET b=0 where a=1;
1081+--error ER_ERROR_DURING_COMMIT
1082+COMMIT;
1083+
1084+BEGIN;
1085+UPDATE t1 SET b=0 where a=2;
1086+--error ER_ERROR_DURING_COMMIT
1087+COMMIT;
1088+
1089+BEGIN;
1090+DELETE FROM t1 where b=2;
1091+--error ER_ERROR_DURING_COMMIT
1092+COMMIT;
1093+
1094+BEGIN;
1095+DELETE FROM t1 where b=1;
1096+--error ER_ERROR_DURING_COMMIT
1097+COMMIT;
1098+
1099+BEGIN;
1100+DELETE FROM t1 where a=2;
1101+--error ER_ERROR_DURING_COMMIT
1102+COMMIT;
1103+
1104+BEGIN;
1105+DELETE FROM t1 where a=1;
1106+--error ER_ERROR_DURING_COMMIT
1107+COMMIT;
1108+
1109+BEGIN;
1110+REPLACE INTO t1 values (2,3);
1111+--error ER_ERROR_DURING_COMMIT
1112+COMMIT;
1113+
1114+--error ER_ERROR_DURING_COMMIT
1115+INSERT INTO t1 VALUES (1,1) ON DUPLICATE KEY UPDATE b=2;
1116+--error ER_ERROR_DURING_COMMIT
1117+CREATE INDEX bx ON t1(b);
1118+
1119+--source include/stop_fake_changes.inc
1120+
1121+DROP TABLE t1;
1122+
1123+#
1124+# Test all accesses through the primary index
1125+#
1126+CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
1127+INSERT INTO t2 VALUES (1, 1);
1128+
1129+--let $fake_changes_table=t2
1130+--source include/start_fake_changes.inc
1131+
1132+# Test with autocommit
1133+--error ER_ERROR_DURING_COMMIT
1134+SELECT * FROM t2;
1135+--error ER_ERROR_DURING_COMMIT
1136+INSERT INTO t2 VALUES (2,2);
1137+--error ER_ERROR_DURING_COMMIT
1138+UPDATE t2 SET b=0 where a=1;
1139+--error ER_ERROR_DURING_COMMIT
1140+UPDATE t2 SET b=0 where a=2;
1141+--error ER_ERROR_DURING_COMMIT
1142+DELETE FROM t2 where b=2;
1143+--error ER_ERROR_DURING_COMMIT
1144+DELETE FROM t2 where b=1;
1145+--error ER_ERROR_DURING_COMMIT
1146+DELETE FROM t2 where a=2;
1147+--error ER_ERROR_DURING_COMMIT
1148+DELETE FROM t2 where a=1;
1149+--error ER_ERROR_DURING_COMMIT
1150+REPLACE INTO t2 values (2,3);
1151+--error ER_ERROR_DURING_COMMIT
1152+REPLACE INTO t2 VALUES (1,1);
1153+--error ER_ERROR_DURING_COMMIT
1154+REPLACE INTO t2 VALUES (1,2);
1155+
1156+# Test with transactions
1157+BEGIN;
1158+SELECT * FROM t2;
1159+--error ER_ERROR_DURING_COMMIT
1160+COMMIT;
1161+
1162+BEGIN;
1163+INSERT INTO t2 VALUES (2,2);
1164+--error ER_ERROR_DURING_COMMIT
1165+COMMIT;
1166+
1167+BEGIN;
1168+UPDATE t2 SET b=0 where a=1;
1169+--error ER_ERROR_DURING_COMMIT
1170+COMMIT;
1171+
1172+BEGIN;
1173+UPDATE t2 SET b=0 where a=2;
1174+--error ER_ERROR_DURING_COMMIT
1175+COMMIT;
1176+
1177+BEGIN;
1178+DELETE FROM t2 where b=2;
1179+--error ER_ERROR_DURING_COMMIT
1180+COMMIT;
1181+
1182+BEGIN;
1183+DELETE FROM t2 where b=1;
1184+--error ER_ERROR_DURING_COMMIT
1185+COMMIT;
1186+
1187+BEGIN;
1188+DELETE FROM t2 where a=2;
1189+--error ER_ERROR_DURING_COMMIT
1190+COMMIT;
1191+
1192+BEGIN;
1193+DELETE FROM t2 where a=1;
1194+--error ER_ERROR_DURING_COMMIT
1195+COMMIT;
1196+
1197+BEGIN;
1198+REPLACE INTO t2 values (2,3);
1199+--error ER_ERROR_DURING_COMMIT
1200+COMMIT;
1201+
1202+BEGIN;
1203+REPLACE INTO t2 VALUES (1,1);
1204+--error ER_ERROR_DURING_COMMIT
1205+COMMIT;
1206+
1207+BEGIN;
1208+REPLACE INTO t2 VALUES (1,2);
1209+--error ER_ERROR_DURING_COMMIT
1210+COMMIT;
1211+
1212+# Confirm that duplicate key errors are OK
1213+BEGIN;
1214+REPLACE INTO t2 VALUES (1,2);
1215+SELECT * from t2;
1216+REPLACE INTO t2 VALUES (1,1);
1217+SELECT * from t2;
1218+ROLLBACK;
1219+
1220+BEGIN;
1221+--error ER_DUP_ENTRY
1222+INSERT INTO t2 VALUES (1,1);
1223+--error ER_DUP_ENTRY
1224+INSERT INTO t2 VALUES (1,2);
1225+ROLLBACK;
1226+
1227+--error ER_ERROR_DURING_COMMIT
1228+INSERT INTO t2 VALUES (1,1) ON DUPLICATE KEY UPDATE b=2;
1229+--error ER_ERROR_DURING_COMMIT
1230+INSERT INTO t2 VALUES (1,1) ON DUPLICATE KEY UPDATE b=b+10;
1231+--error ER_ERROR_DURING_COMMIT
1232+INSERT INTO t2 VALUES (1,2) ON DUPLICATE KEY UPDATE b=b+10;
1233+--error ER_ERROR_DURING_COMMIT
1234+CREATE INDEX bx ON t2(b);
1235+
1236+--source include/stop_fake_changes.inc
1237+
1238+DROP TABLE t2;
1239+
1240+#
1241+# Test TEXT
1242+#
1243+CREATE TABLE t3 (a INT PRIMARY KEY, B TEXT) ENGINE=InnoDB;
1244+INSERT INTO t3 VALUES (1, '');
1245+
1246+--let $fake_changes_table=t3
1247+--source include/start_fake_changes.inc
1248+
1249+# Test with autocommit
1250+--error ER_ERROR_DURING_COMMIT
1251+SELECT * FROM t3;
1252+--error ER_ERROR_DURING_COMMIT
1253+INSERT INTO t3 VALUES (2,lpad('a',10000, 'b'));
1254+--error ER_ERROR_DURING_COMMIT
1255+UPDATE t3 SET a=0 where a=1;
1256+--error ER_ERROR_DURING_COMMIT
1257+DELETE FROM t3 where a=2;
1258+--error ER_ERROR_DURING_COMMIT
1259+DELETE FROM t3 where a=1;
1260+--error ER_ERROR_DURING_COMMIT
1261+REPLACE INTO t3 values (2,lpad('a',9000,'q'));
1262+--error ER_ERROR_DURING_COMMIT
1263+INSERT INTO t3 VALUES (1,1) ON DUPLICATE KEY UPDATE b=lpad('b',11000,'c');
1264+
1265+# Test with transactions
1266+BEGIN;
1267+SELECT * FROM t3;
1268+--error ER_ERROR_DURING_COMMIT
1269+COMMIT;
1270+
1271+BEGIN;
1272+INSERT INTO t3 VALUES (2,lpad('a',10000, 'b'));
1273+--error ER_ERROR_DURING_COMMIT
1274+COMMIT;
1275+
1276+BEGIN;
1277+UPDATE t3 SET a=0 where a=1;
1278+--error ER_ERROR_DURING_COMMIT
1279+COMMIT;
1280+
1281+BEGIN;
1282+DELETE FROM t3 where a=2;
1283+--error ER_ERROR_DURING_COMMIT
1284+COMMIT;
1285+
1286+BEGIN;
1287+DELETE FROM t3 where a=1;
1288+--error ER_ERROR_DURING_COMMIT
1289+COMMIT;
1290+
1291+BEGIN;
1292+REPLACE INTO t3 values (2,lpad('a',9000,'q'));
1293+--error ER_ERROR_DURING_COMMIT
1294+COMMIT;
1295+
1296+BEGIN;
1297+INSERT INTO t3 VALUES (1,1) ON DUPLICATE KEY UPDATE b=lpad('b',11000,'c');
1298+--error ER_ERROR_DURING_COMMIT
1299+COMMIT;
1300+
1301+--source include/stop_fake_changes.inc
1302+
1303+DROP TABLE t3;
1304
1305 --echo # DDL must result in error
1306 CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
1307-SET autocommit=0;
1308-SET innodb_fake_changes=1;
1309+
1310+--let $fake_changes_table=t1
1311+--source include/start_fake_changes.inc
1312+
1313 BEGIN;
1314 --error 1005
1315 CREATE TABLE t2 (a INT) ENGINE=InnoDB;
1316 --error 1051
1317 DROP TABLE t1;
1318---error 1180
1319+--error 1031
1320 TRUNCATE TABLE t1;
1321 --error 1180
1322 ALTER TABLE t1 ENGINE=MyISAM;
1323 ROLLBACK;
1324
1325+--source include/stop_fake_changes.inc
1326+
1327 # Test stat counters foreign key constraints
1328-SET innodb_fake_changes=0;
1329 INSERT INTO t1 VALUES (1), (2);
1330-COMMIT;
1331+
1332 CREATE TABLE t2 (a INT PRIMARY KEY, b INT, INDEX b_ind (b),
1333 FOREIGN KEY (b) REFERENCES t1(a) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;
1334 INSERT INTO t2 VALUES (1, 1);
1335 INSERT INTO t2 VALUES (2, 2);
1336-COMMIT;
1337-
1338-let $t2_checksum_1= `CHECKSUM TABLE t2 EXTENDED`;
1339-let $innodb_rows_deleted_1= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted'`;
1340-let $innodb_rows_updated_1= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated'`;
1341-let $table_rows_estimate_1= `SELECT ROWS FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2'`;
1342-let $table_rows_changed_1= `SELECT ROWS_CHANGED FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2'`;
1343-let $table_rows_changed_x_indexes_1= `SELECT ROWS_CHANGED_X_INDEXES FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2'`;
1344-
1345-SET innodb_fake_changes=1;
1346+
1347+--let $fake_changes_table=t1
1348+--source include/start_fake_changes.inc
1349+
1350+BEGIN;
1351 DELETE FROM t1 WHERE a=1;
1352 UPDATE t1 SET a=3 WHERE a=2;
1353 --error 1180
1354 COMMIT;
1355
1356-let $t2_checksum_2= `CHECKSUM TABLE t2 EXTENDED`;
1357-let $innodb_rows_deleted_2= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted'`;
1358-let $innodb_rows_updated_2= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated'`;
1359-let $table_rows_estimate_2= `SELECT ROWS FROM INFORMATION_SCHEMA.INNODB_TABLE_STATS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2'`;
1360-let $table_rows_changed_2= `SELECT ROWS_CHANGED FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2'`;
1361-let $table_rows_changed_x_indexes_2= `SELECT ROWS_CHANGED_X_INDEXES FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2'`;
1362-
1363---disable_query_log
1364-eval SELECT "$t2_checksum_1" LIKE "$t2_checksum_2" AS should_be_1;
1365-eval SELECT "$innodb_rows_deleted_2" - "$innodb_rows_deleted_1" AS should_be_0;
1366-eval SELECT "$innodb_rows_updated_2" - "$innodb_rows_updated_1" AS should_be_0;
1367-eval SELECT "$table_rows_estimate_2" - "$table_rows_estimate_1" AS should_be_0;
1368-eval SELECT "$table_rows_changed_2" - "$table_rows_changed_1" AS should_be_0;
1369-eval SELECT "$table_rows_changed_x_indexes_2" - "$table_rows_changed_x_indexes_1" AS should_be_0;
1370---enable_query_log
1371-
1372-SET innodb_fake_changes=0;
1373+--source include/stop_fake_changes.inc
1374+
1375 DROP TABLE t2;
1376
1377 # Test for bug 890404: uninitialized value warning in btr_cur_pessimistic_update
1378 CREATE TABLE t3 (a INT primary key, b text) ENGINE=InnoDB;
1379 INSERT INTO t3 VALUES (1,'');
1380-COMMIT;
1381 let $t3_checksum_1= `CHECKSUM TABLE t3 EXTENDED`;
1382-SET innodb_fake_changes=1;
1383-
1384+
1385+--let $fake_changes_table=t3
1386+--source include/start_fake_changes.inc
1387+
1388+BEGIN;
1389 UPDATE t3 set b=lpad('b',11000,'c') where a=1;
1390 --error ER_ERROR_DURING_COMMIT
1391 COMMIT;
1392
1393-SET innodb_fake_changes=default;
1394---echo # Verify that the fake changes to t3 did not leak through
1395-CHECK TABLE t3;
1396-let $t3_checksum_2= `CHECKSUM TABLE t3 EXTENDED`;
1397---disable_query_log
1398-eval SELECT "$t3_checksum_1" LIKE "$t3_checksum_2" AS should_be_1;
1399---enable_query_log
1400+--source include/stop_fake_changes.inc
1401+
1402 DROP TABLE t1, t3;
1403
1404 SET @@GLOBAL.userstat= default;
1405
1406=== modified file 'Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_898306.test'
1407--- Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_898306.test 2012-10-17 11:30:19 +0000
1408+++ Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_898306.test 2013-07-15 16:19:41 +0000
1409@@ -7,11 +7,15 @@
1410 DROP TABLE IF EXISTS t1;
1411 --enable_warnings
1412
1413+SET @@GLOBAL.userstat=ON;
1414+
1415 CREATE TABLE t1 (a INT primary key, b int, unique key (b)) ENGINE=InnoDB;
1416 INSERT INTO t1 VALUES (1,1);
1417
1418 SET autocommit=1;
1419-SET innodb_fake_changes=1;
1420+
1421+--let $fake_changes_table=t1
1422+--source include/start_fake_changes.inc
1423
1424 --echo # Confirm that duplicate key errors on REPLACE works
1425
1426@@ -52,8 +56,8 @@
1427 --error ER_ERROR_DURING_COMMIT
1428 INSERT INTO t1 VALUES (1,2) ON DUPLICATE KEY UPDATE b=b+10;
1429
1430-SET innodb_fake_changes=0;
1431-SELECT * from t1;
1432-CHECK TABLE t1;
1433+--source include/stop_fake_changes.inc
1434
1435 DROP TABLE t1;
1436+
1437+SET @@GLOBAL.userstat=default;
1438
1439=== modified file 'Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_917942.test'
1440--- Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_917942.test 2012-10-17 11:30:19 +0000
1441+++ Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_917942.test 2013-07-15 16:19:41 +0000
1442@@ -7,6 +7,8 @@
1443 DROP TABLE IF EXISTS t1;
1444 --enable_warnings
1445
1446+SET @@GLOBAL.userstat=ON;
1447+
1448 #
1449 # Confirm that cursor->tree_height is initialized when calling btr_cur_pessimistic_update
1450 # for transactions with innodb_fake_changes set
1451@@ -16,30 +18,25 @@
1452 CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB KEY_BLOCK_SIZE=8;
1453
1454 INSERT INTO t1 VALUES(NULL, LPAD("v", 2, "b"), LPAD("a", 100, "b"));
1455-let $t1_checksum_1= `CHECKSUM TABLE t1 EXTENDED`;
1456
1457-SET innodb_fake_changes=1;
1458+--let $fake_changes_table=t1
1459+--source include/start_fake_changes.inc
1460
1461 --error 1180
1462 INSERT INTO t1 VALUES(1, "foo", LPAD("a", 4600, "b")) ON DUPLICATE KEY UPDATE T = VALUES(T);
1463 --error 1180
1464 UPDATE t1 SET T = LPAD("A", 4600, "b");
1465
1466-SET innodb_fake_changes=0;
1467-CHECK TABLE t1;
1468-let $t1_checksum_2= `CHECKSUM TABLE t1 EXTENDED`;
1469---disable_query_log
1470-eval SELECT "$t1_checksum_1" LIKE "$t1_checksum_2" AS should_be_1;
1471---enable_query_log
1472+--source include/stop_fake_changes.inc
1473+
1474 DROP TABLE t1;
1475
1476 --echo Test for uncompressed
1477 CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB;
1478
1479 INSERT INTO t1 VALUES(NULL, LPAD("v", 2, "b"), LPAD("a", 100, "b"));
1480-let $t1_checksum_1= `CHECKSUM TABLE t1 EXTENDED`;
1481
1482-SET innodb_fake_changes=1;
1483+--source include/start_fake_changes.inc
1484
1485 --disable_query_log
1486 let $x = 50;
1487@@ -53,12 +50,8 @@
1488 }
1489 --enable_query_log
1490
1491-SET innodb_fake_changes=0;
1492-CHECK TABLE t1;
1493-let $t1_checksum_2= `CHECKSUM TABLE t1 EXTENDED`;
1494---disable_query_log
1495-eval SELECT "$t1_checksum_1" LIKE "$t1_checksum_2" AS should_be_1;
1496---enable_query_log
1497+--source include/stop_fake_changes.inc
1498+
1499 DROP TABLE t1;
1500
1501 #
1502@@ -69,19 +62,14 @@
1503 CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB KEY_BLOCK_SIZE=8;
1504
1505 INSERT INTO t1 VALUES(2, LPAD("v", 2, "b"), LPAD("a", 200, "b"));
1506-let $t1_checksum_1= `CHECKSUM TABLE t1 EXTENDED`;
1507
1508-SET innodb_fake_changes=1;
1509+--source include/start_fake_changes.inc
1510
1511 --error 1180
1512 INSERT INTO t1 VALUES (3, "foo", LPAD("a", 4600, "b"));
1513
1514-SET innodb_fake_changes=0;
1515-CHECK TABLE t1;
1516-let $t1_checksum_2= `CHECKSUM TABLE t1 EXTENDED`;
1517---disable_query_log
1518-eval SELECT "$t1_checksum_1" LIKE "$t1_checksum_2" AS should_be_1;
1519---enable_query_log
1520+--source include/stop_fake_changes.inc
1521+
1522 DROP TABLE t1;
1523
1524 CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB;
1525@@ -101,3 +89,5 @@
1526 eval SELECT "$t1_checksum_1" LIKE "$t1_checksum_2" AS should_be_1;
1527 --enable_query_log
1528 DROP TABLE t1;
1529+
1530+SET @@GLOBAL.userstat=default;
1531
1532=== modified file 'Percona-Server/mysql-test/t/percona_innodb_fake_changes_locks.test'
1533--- Percona-Server/mysql-test/t/percona_innodb_fake_changes_locks.test 2012-10-11 14:18:34 +0000
1534+++ Percona-Server/mysql-test/t/percona_innodb_fake_changes_locks.test 2013-07-15 16:19:41 +0000
1535@@ -16,6 +16,7 @@
1536 --connection conn1
1537 --echo # Verifying that X_LOCK not acquired
1538 SET autocommit=0;
1539+# Cannot use start_fake_changes.inc as conn2 issues real workload before reverting
1540 SET innodb_fake_changes=1;
1541 BEGIN;
1542 SELECT * FROM t1 FOR UPDATE;
1543
1544=== modified file 'Percona-Server/sql/sql_insert.cc'
1545--- Percona-Server/sql/sql_insert.cc 2013-06-27 15:35:20 +0000
1546+++ Percona-Server/sql/sql_insert.cc 2013-07-15 16:19:41 +0000
1547@@ -1758,7 +1758,7 @@
1548 2) do nothing on fake delete
1549 3) goto #1
1550 */
1551- if (table->file->is_fake_change_enabled(thd))
1552+ if (unlikely(table->file->is_fake_change_enabled(thd)))
1553 goto ok_or_after_trg_err;
1554 /* Let us attempt do write_row() once more */
1555 }
1556
1557=== modified file 'Percona-Server/storage/innobase/btr/btr0cur.c'
1558--- Percona-Server/storage/innobase/btr/btr0cur.c 2013-06-27 15:35:20 +0000
1559+++ Percona-Server/storage/innobase/btr/btr0cur.c 2013-07-15 16:19:41 +0000
1560@@ -1189,7 +1189,7 @@
1561 rec_t* rec;
1562 roll_ptr_t roll_ptr;
1563
1564- if (thr && thr_get_trx(thr)->fake_changes) {
1565+ if (UNIV_UNLIKELY(thr && thr_get_trx(thr)->fake_changes)) {
1566 /* skip LOCK, UNDO */
1567 return(DB_SUCCESS);
1568 }
1569@@ -1427,7 +1427,7 @@
1570 goto fail_err;
1571 }
1572
1573- if (thr && thr_get_trx(thr)->fake_changes) {
1574+ if (UNIV_UNLIKELY(thr && thr_get_trx(thr)->fake_changes)) {
1575 /* skip CHANGE, LOG */
1576 *big_rec = big_rec_vec;
1577 return(err); /* == DB_SUCCESS */
1578@@ -1641,7 +1641,7 @@
1579 }
1580 }
1581
1582- if (thr && thr_get_trx(thr)->fake_changes) {
1583+ if (UNIV_UNLIKELY(thr && thr_get_trx(thr)->fake_changes)) {
1584 /* skip CHANGE, LOG */
1585 if (n_extents > 0) {
1586 fil_space_release_free_extents(index->space,
1587@@ -1707,7 +1707,7 @@
1588
1589 ut_ad(cursor && update && thr && roll_ptr);
1590
1591- if (thr && thr_get_trx(thr)->fake_changes) {
1592+ if (UNIV_UNLIKELY(thr && thr_get_trx(thr)->fake_changes)) {
1593 /* skip LOCK, UNDO */
1594 return(DB_SUCCESS);
1595 }
1596@@ -1914,7 +1914,7 @@
1597 return(FALSE);
1598 }
1599
1600- if (trx && trx->fake_changes) {
1601+ if (UNIV_UNLIKELY(trx && trx->fake_changes)) {
1602 /* Don't call page_zip_compress_write_log_no_data as that has
1603 assert which would fail. Assume there won't be a compression
1604 failure. */
1605@@ -2021,7 +2021,7 @@
1606 return(err);
1607 }
1608
1609- if (trx->fake_changes) {
1610+ if (UNIV_UNLIKELY(trx->fake_changes)) {
1611 /* skip CHANGE, LOG */
1612 if (UNIV_LIKELY_NULL(heap)) {
1613 mem_heap_free(heap);
1614@@ -2256,7 +2256,7 @@
1615 goto err_exit;
1616 }
1617
1618- if (thr && thr_get_trx(thr)->fake_changes) {
1619+ if (UNIV_UNLIKELY(thr && thr_get_trx(thr)->fake_changes)) {
1620 /* skip CHANGE, LOG */
1621 goto err_exit; /* == DB_SUCCESS */
1622 }
1623@@ -2552,7 +2552,7 @@
1624 ut_ad(flags & BTR_KEEP_POS_FLAG);
1625 }
1626
1627- if (trx->fake_changes) {
1628+ if (UNIV_UNLIKELY(trx->fake_changes)) {
1629 /* skip CHANGE, LOG */
1630 err = DB_SUCCESS;
1631 goto return_after_reservations;
1632@@ -2888,7 +2888,7 @@
1633 ut_ad(dict_index_is_clust(index));
1634 ut_ad(!rec_get_deleted_flag(rec, rec_offs_comp(offsets)));
1635
1636- if (thr && thr_get_trx(thr)->fake_changes) {
1637+ if (UNIV_UNLIKELY(thr && thr_get_trx(thr)->fake_changes)) {
1638 /* skip LOCK, UNDO, CHANGE, LOG */
1639 return(DB_SUCCESS);
1640 }
1641@@ -3027,7 +3027,7 @@
1642 rec_t* rec;
1643 ulint err;
1644
1645- if (thr && thr_get_trx(thr)->fake_changes) {
1646+ if (UNIV_UNLIKELY(thr && thr_get_trx(thr)->fake_changes)) {
1647 /* skip LOCK, CHANGE, LOG */
1648 return(DB_SUCCESS);
1649 }
1650
1651=== modified file 'Percona-Server/storage/innobase/handler/ha_innodb.cc'
1652--- Percona-Server/storage/innobase/handler/ha_innodb.cc 2013-07-15 16:19:40 +0000
1653+++ Percona-Server/storage/innobase/handler/ha_innodb.cc 2013-07-15 16:19:41 +0000
1654@@ -3605,7 +3605,10 @@
1655 trx_search_latch_release_if_reserved(trx);
1656 }
1657
1658- if (trx->fake_changes && (all || (!thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))) {
1659+ if (UNIV_UNLIKELY(trx->fake_changes
1660+ && (all || (!thd_test_options(thd,
1661+ OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))))) {
1662+
1663 innobase_rollback(hton, thd, all); /* rollback implicitly */
1664 thd->stmt_da->reset_diagnostics_area(); /* because debug assertion code complains, if something left */
1665 DBUG_RETURN(HA_ERR_WRONG_COMMAND);
1666@@ -8169,7 +8172,7 @@
1667
1668 trx = innobase_trx_allocate(thd);
1669
1670- if (trx->fake_changes) {
1671+ if (UNIV_UNLIKELY(trx->fake_changes)) {
1672 innobase_commit_low(trx);
1673 trx_free_for_mysql(trx);
1674 DBUG_RETURN(HA_ERR_WRONG_COMMAND);
1675@@ -8395,7 +8398,7 @@
1676 DBUG_RETURN(HA_ERR_CRASHED);
1677 }
1678
1679- if (prebuilt->trx->fake_changes) {
1680+ if (UNIV_UNLIKELY(prebuilt->trx->fake_changes)) {
1681 DBUG_RETURN(HA_ERR_WRONG_COMMAND);
1682 }
1683
1684@@ -8460,7 +8463,7 @@
1685
1686 trx = innobase_trx_allocate(thd);
1687
1688- if (trx->fake_changes) {
1689+ if (UNIV_UNLIKELY(trx->fake_changes)) {
1690 innobase_commit_low(trx);
1691 trx_free_for_mysql(trx);
1692 DBUG_RETURN(HA_ERR_WRONG_COMMAND);
1693@@ -8552,13 +8555,13 @@
1694 trx->mysql_thd = NULL;
1695 #else
1696 trx = innobase_trx_allocate(thd);
1697- if (trx->fake_changes) {
1698+#endif
1699+ if (UNIV_UNLIKELY(trx->fake_changes)) {
1700 my_free(namebuf);
1701 innobase_commit_low(trx);
1702 trx_free_for_mysql(trx);
1703 return; /* ignore */
1704 }
1705-#endif
1706 row_drop_database_for_mysql(namebuf, trx);
1707 my_free(namebuf);
1708
1709@@ -8671,7 +8674,7 @@
1710 trx_search_latch_release_if_reserved(parent_trx);
1711
1712 trx = innobase_trx_allocate(thd);
1713- if (trx->fake_changes) {
1714+ if (UNIV_UNLIKELY(trx->fake_changes)) {
1715 innobase_commit_low(trx);
1716 trx_free_for_mysql(trx);
1717 DBUG_RETURN(HA_ERR_WRONG_COMMAND);
1718
1719=== modified file 'Percona-Server/storage/innobase/handler/handler0alter.cc'
1720--- Percona-Server/storage/innobase/handler/handler0alter.cc 2013-05-23 08:39:28 +0000
1721+++ Percona-Server/storage/innobase/handler/handler0alter.cc 2013-07-15 16:19:41 +0000
1722@@ -697,7 +697,7 @@
1723 possible adaptive hash latch to avoid deadlocks of threads. */
1724 trx_search_latch_release_if_reserved(prebuilt->trx);
1725
1726- if (prebuilt->trx->fake_changes) {
1727+ if (UNIV_UNLIKELY(prebuilt->trx->fake_changes)) {
1728 DBUG_RETURN(HA_ERR_WRONG_COMMAND);
1729 }
1730
1731@@ -742,7 +742,7 @@
1732 /* Create a background transaction for the operations on
1733 the data dictionary tables. */
1734 trx = innobase_trx_allocate(user_thd);
1735- if (trx->fake_changes) {
1736+ if (UNIV_UNLIKELY(trx->fake_changes)) {
1737 mem_heap_free(heap);
1738 trx_general_rollback_for_mysql(trx, NULL);
1739 trx_free_for_mysql(trx);
1740@@ -1116,7 +1116,7 @@
1741 trx_search_latch_release_if_reserved(prebuilt->trx);
1742 trx = prebuilt->trx;
1743
1744- if (trx->fake_changes) {
1745+ if (UNIV_UNLIKELY(trx->fake_changes)) {
1746 DBUG_RETURN(HA_ERR_WRONG_COMMAND);
1747 }
1748
1749@@ -1328,7 +1328,7 @@
1750 /* Create a background transaction for the operations on
1751 the data dictionary tables. */
1752 trx = innobase_trx_allocate(user_thd);
1753- if (trx->fake_changes) {
1754+ if (UNIV_UNLIKELY(trx->fake_changes)) {
1755 trx_general_rollback_for_mysql(trx, NULL);
1756 trx_free_for_mysql(trx);
1757 DBUG_RETURN(HA_ERR_WRONG_COMMAND);
1758
1759=== modified file 'Percona-Server/storage/innobase/lock/lock0lock.c'
1760--- Percona-Server/storage/innobase/lock/lock0lock.c 2013-06-26 07:01:13 +0000
1761+++ Percona-Server/storage/innobase/lock/lock0lock.c 2013-07-15 16:19:41 +0000
1762@@ -4019,7 +4019,7 @@
1763
1764 trx = thr_get_trx(thr);
1765
1766- if (trx->fake_changes && mode == LOCK_IX) {
1767+ if (UNIV_UNLIKELY(trx->fake_changes && mode == LOCK_IX)) {
1768 mode = LOCK_IS;
1769 }
1770
1771@@ -5268,7 +5268,7 @@
1772
1773 trx = thr_get_trx(thr);
1774
1775- if (trx->fake_changes) {
1776+ if (UNIV_UNLIKELY(trx->fake_changes)) {
1777 return(DB_SUCCESS);
1778 }
1779
1780@@ -5453,7 +5453,7 @@
1781 return(DB_SUCCESS);
1782 }
1783
1784- if (thr && thr_get_trx(thr)->fake_changes) {
1785+ if (UNIV_UNLIKELY(thr && thr_get_trx(thr)->fake_changes)) {
1786 return(DB_SUCCESS);
1787 }
1788
1789@@ -5515,7 +5515,7 @@
1790 return(DB_SUCCESS);
1791 }
1792
1793- if (thr && thr_get_trx(thr)->fake_changes) {
1794+ if (UNIV_UNLIKELY(thr && thr_get_trx(thr)->fake_changes)) {
1795 return(DB_SUCCESS);
1796 }
1797
1798
1799=== modified file 'Percona-Server/storage/innobase/que/que0que.c'
1800--- Percona-Server/storage/innobase/que/que0que.c 2012-05-10 07:49:14 +0000
1801+++ Percona-Server/storage/innobase/que/que0que.c 2013-07-15 16:19:41 +0000
1802@@ -1417,7 +1417,7 @@
1803
1804 ut_a(trx->error_state == DB_SUCCESS);
1805
1806- if (trx->fake_changes) {
1807+ if (UNIV_UNLIKELY(trx->fake_changes)) {
1808 /* fake_changes should not access to system tables */
1809 fprintf(stderr, "InnoDB: ERROR: innodb_fake_changes tried to access to system tables.\n");
1810 return(DB_ERROR);
1811
1812=== modified file 'Percona-Server/storage/innobase/row/row0ins.c'
1813--- Percona-Server/storage/innobase/row/row0ins.c 2013-06-26 07:01:13 +0000
1814+++ Percona-Server/storage/innobase/row/row0ins.c 2013-07-15 16:19:41 +0000
1815@@ -1512,7 +1512,7 @@
1816 mem_heap_free(heap);
1817 }
1818
1819- if (trx->fake_changes) {
1820+ if (UNIV_UNLIKELY(trx->fake_changes)) {
1821 err = DB_SUCCESS;
1822 }
1823
1824@@ -2214,7 +2214,7 @@
1825 rec_t* rec;
1826 ulint* offsets;
1827
1828- if (thr_get_trx(thr)->fake_changes) {
1829+ if (UNIV_UNLIKELY(thr_get_trx(thr)->fake_changes)) {
1830 /* skip store extern */
1831 if (modify) {
1832 dtuple_big_rec_free(big_rec);
1833
1834=== modified file 'Percona-Server/storage/innobase/row/row0upd.c'
1835--- Percona-Server/storage/innobase/row/row0upd.c 2012-10-29 08:53:24 +0000
1836+++ Percona-Server/storage/innobase/row/row0upd.c 2013-07-15 16:19:41 +0000
1837@@ -1854,7 +1854,7 @@
1838 the previous invocation of this function. Mark the
1839 off-page columns in the entry inherited. */
1840
1841- if (!(trx->fake_changes)) {
1842+ if (UNIV_LIKELY(!trx->fake_changes)) {
1843 change_ownership = row_upd_clust_rec_by_insert_inherit(
1844 NULL, NULL, entry, node->update);
1845 ut_a(change_ownership);

Subscribers

People subscribed via source and target branches