File: lob-read-uncommitted.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (130 lines) | stat: -rw-r--r-- 3,746 bytes parent folder | download
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
--source include/have_debug.inc
--source include/count_sessions.inc
--source include/have_innodb_max_16k.inc

--echo #
--echo # Bug #27624990 ASSERTION `FALSE' FAILED AT BOOL WRAPPER_TO_STRING() IN SQL/JSON_DOM.CC
--echo #

--echo #
--echo # Scenario 1: The row format is DYNAMIC (no blob prefix).  The READ
--echo # UNCOMMITTED transaction will see the new value of column f1 but
--echo # old value of column f2.
--echo #

create table t1 (f1 int, f2 longblob) row_format=dynamic;
show create table t1;
insert into t1 values (1, repeat('x', 40000));

SET DEBUG_SYNC = 'blob_write_middle SIGNAL do_select WAIT_FOR continue_insert';
--send update t1 set f1 = 2, f2 = repeat('y', 100000) where f1 = 1;

connect (con1,localhost,root,,);
SET DEBUG_SYNC = 'now WAIT_FOR do_select';
SET SESSION transaction_isolation = 'READ-UNCOMMITTED';
begin;
select f1, f2 from t1;
commit;
SET DEBUG_SYNC = 'now SIGNAL continue_insert';

connection default;
--reap
disconnect con1;

drop table t1;

--source include/wait_until_count_sessions.inc

--echo #
--echo # Scenario 2: The row format is REDUNDANT (no blob prefix).  The READ
--echo # UNCOMMITTED transaction will see only the local prefix of f2.
--echo #

create table t1 (f1 int primary key, f2 longblob) row_format=redundant;
show create table t1;
insert into t1 values (1, repeat('x', 40000));

SET DEBUG_SYNC = 'blob_write_middle SIGNAL do_select WAIT_FOR continue_insert EXECUTE 2';
--send update t1 set f2 = repeat('y', 100000) where f1 = 1;

connect (con1,localhost,root,,);
SET DEBUG_SYNC = 'now WAIT_FOR do_select';
SET DEBUG_SYNC = 'now SIGNAL continue_insert';
SET DEBUG_SYNC = 'now WAIT_FOR do_select';
SET SESSION transaction_isolation = 'READ-UNCOMMITTED';
begin;
select length(f2) from t1 where f1 = 1;
commit;
SET DEBUG_SYNC = 'now SIGNAL continue_insert';

connection default;
--reap
disconnect con1;

drop table t1;

--source include/wait_until_count_sessions.inc

--echo #
--echo # Scenario 3: The row format is REDUNDANT (no blob prefix).  The READ
--echo # UNCOMMITTED transaction will see the local prefix of new blob and
--echo # the external part of the old blob.
--echo #

create table t1 (f1 int primary key, f2 longblob) row_format=redundant;
show create table t1;
insert into t1 values (1, repeat('x', 40000));

SET DEBUG_SYNC = 'blob_write_middle SIGNAL do_select WAIT_FOR continue_insert';
--send update t1 set f2 = repeat('y', 100000) where f1 = 1;

connect (con1,localhost,root,,);
SET DEBUG_SYNC = 'now WAIT_FOR do_select';
SET SESSION transaction_isolation = 'READ-UNCOMMITTED';
begin;
select f2 from t1 where f1 = 1;
commit;
SET DEBUG_SYNC = 'now SIGNAL continue_insert';

connection default;
--reap
disconnect con1;

drop table t1;

--source include/wait_until_count_sessions.inc

--echo #
--echo # Scenario 4: The row format is REDUNDANT (no blob prefix).
--echo # The READ UNCOMMITTED transaction will see the local prefix
--echo # of new blob and external part of old blob.  It is different
--echo # from Scenario 3 because this involves blob operation code
--echo # OPCODE_INSERT_UPDATE.
--echo #

create table t1 (f1 int primary key, f2 longblob) row_format=redundant;
show create table t1;
start transaction;
insert into t1 values (1, repeat('x', 40000));
delete from t1 where f1 = 1;

SET DEBUG_SYNC = 'blob_write_middle SIGNAL do_select WAIT_FOR continue_insert';
--send insert into t1 values (1, repeat('y', 40000));

connect (con1,localhost,root,,);
SET DEBUG_SYNC = 'now WAIT_FOR do_select';
SET SESSION transaction_isolation = 'READ-UNCOMMITTED';
begin;
select f2 from t1 where f1 = 1;
commit;
SET DEBUG_SYNC = 'now SIGNAL continue_insert';

connection default;
--reap
commit;
disconnect con1;

drop table t1;

--source include/wait_until_count_sessions.inc