~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/transaction_log/tests/t/savepoint.test

  • Committer: Brian Aker
  • Date: 2010-12-19 06:20:54 UTC
  • mfrom: (2005.1.1 bug673105)
  • Revision ID: brian@tangent.org-20101219062054-1kt0l3dxs4z2z8md
Merge Dave.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Ignore startup/shutdown events
 
2
--disable_query_log
 
3
--source ../plugin/transaction_log/tests/t/truncate_log.inc
 
4
--enable_query_log
 
5
 
 
6
--disable_warnings
 
7
DROP TABLE IF EXISTS t1;
 
8
DROP TABLE IF EXISTS t2;
 
9
--enable_warnings
 
10
 
 
11
CREATE TABLE t1(a INT NOT NULL AUTO_INCREMENT, b VARCHAR(10), c VARCHAR(10), PRIMARY KEY(a));
 
12
CREATE TABLE t2(a INT NOT NULL AUTO_INCREMENT, b VARCHAR(10), c VARCHAR(10), PRIMARY KEY(a));
 
13
CREATE TABLE t3(a INT NOT NULL AUTO_INCREMENT, b VARCHAR(10), c VARCHAR(10), PRIMARY KEY(a));
 
14
 
 
15
INSERT INTO t1 (b,c) VALUES ('1','ok'), ('3','ok');
 
16
INSERT INTO t2 (b,c) VALUES ('2','ok'), ('4','ok');
 
17
INSERT INTO t3 (b,c) VALUES ('1','ok'), ('2','ok'), ('3','ok'), ('4','ok'), ('5','ok'), ('6','ok'), ('7','ok'), ('8','ok'), ('9','ok'), ('10','ok');
 
18
 
 
19
--source ../plugin/transaction_log/tests/t/truncate_log.inc
 
20
--echo
 
21
 
 
22
--echo Test deadlock
 
23
--echo
 
24
 
 
25
# To create a deadlock (without a lock wait timeout), we need two
 
26
# connections dependent on each other:
 
27
#   con1> lock t1;
 
28
#   con2> lock t2;
 
29
#   con2> lock t1;  <-- a deadlock that would timeout
 
30
#   con1> lock t2;  <-- a deadlock causing InnoDB to choose a trx to rollback
 
31
 
 
32
connect (con1, localhost, root, , test);
 
33
connect (con2, localhost, root, , test);
 
34
 
 
35
connection con1;
 
36
SET AUTOCOMMIT=OFF;
 
37
START TRANSACTION;
 
38
UPDATE t1 SET c = 'trx1' WHERE a > 0;
 
39
SAVEPOINT A;
 
40
--echo
 
41
--echo Should have one savepoint: A
 
42
SELECT * FROM DATA_DICTIONARY.USER_DEFINED_SAVEPOINTS;
 
43
--echo
 
44
 
 
45
connection con2;
 
46
SET AUTOCOMMIT=OFF;
 
47
START TRANSACTION;
 
48
UPDATE t2 SET a = a*3;
 
49
send UPDATE t1 SET b = 'trx2' WHERE a > 0;
 
50
sleep 1;
 
51
 
 
52
connection con1;
 
53
--ERROR 1213
 
54
DELETE FROM t2 WHERE a > 0;
 
55
 
 
56
--echo
 
57
--echo Should have no savepoints
 
58
SELECT * FROM DATA_DICTIONARY.USER_DEFINED_SAVEPOINTS;
 
59
 
 
60
--echo
 
61
SAVEPOINT A;
 
62
UPDATE t3 SET c = 'TRX1a' WHERE a < 10 ORDER BY b LIMIT 4;
 
63
UPDATE t3 SET b = 'TRX1b' WHERE a < 10 ORDER BY c LIMIT 4;
 
64
ROLLBACK TO SAVEPOINT A;
 
65
SAVEPOINT A;
 
66
ROLLBACK;
 
67
 
 
68
START TRANSACTION;
 
69
--echo
 
70
--echo Definitely should have no savepoints
 
71
SELECT * FROM DATA_DICTIONARY.USER_DEFINED_SAVEPOINTS;
 
72
--echo
 
73
UPDATE t3 SET b = 'TRX1c' WHERE a > 7;
 
74
--ERROR 1305
 
75
ROLLBACK TO SAVEPOINT A;
 
76
COMMIT;
 
77
 
 
78
connection con2;
 
79
reap;
 
80
COMMIT;
 
81
 
 
82
disconnect con1;
 
83
disconnect con2;
 
84
 
 
85
connection default;
 
86
 
 
87
--echo
 
88
SELECT * FROM t1;
 
89
--echo
 
90
SELECT * FROM t2;
 
91
--echo
 
92
SELECT * FROM t3;
 
93
 
 
94
--echo
 
95
--replace_regex /start_timestamp: [0-9]+/START_TIMESTAMP/g /end_timestamp: [0-9]+/END_TIMESTAMP/g /creation_timestamp: [0-9]+/CREATE_TIMESTAMP/ /update_timestamp: [0-9]+/UPDATE_TIMESTAMP/ /transaction_id: [0-9]+/TRANSACTION_ID/
 
96
SELECT PRINT_TRANSACTION_MESSAGE('transaction.log', ENTRY_OFFSET) FROM DATA_DICTIONARY.TRANSACTION_LOG_TRANSACTIONS;
 
97
 
 
98
DROP TABLE t1, t2;
 
99
 
 
100
--source ../plugin/transaction_log/tests/t/truncate_log.inc