summaryrefslogtreecommitdiffstats
path: root/mysql-test/suite/innodb/t/autoinc_import.test
blob: e137413dfb538d9b3eefb7c6b9e3afe5482de336 (plain)
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
162
163
164
165
166
167
168
--source include/have_innodb.inc

CREATE TABLE t1 (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
INSERT INTO t1 VALUES(42);
CREATE TABLE t1b LIKE t1;
INSERT INTO t1b VALUES(3);
CREATE TABLE t1z LIKE t1;
CREATE TABLE t1t (id TINYINT AUTO_INCREMENT PRIMARY KEY) ENGINE=InnoDB;
CREATE TABLE t0t LIKE t1t;
INSERT INTO t1t VALUES(123);
--let DATADIR=`select @@datadir`
--let PAGE_SIZE=`select @@innodb_page_size`
FLUSH TABLES t1,t1b,t1t FOR EXPORT;
--copy_file $DATADIR/test/t1.ibd $DATADIR/test/t.ibd
--copy_file $DATADIR/test/t1.ibd $DATADIR/test/tz.ibd
--copy_file $DATADIR/test/t1b.ibd $DATADIR/test/tb.ibd
--copy_file $DATADIR/test/t1t.ibd $DATADIR/test/tt.ibd
UNLOCK TABLES;
CREATE TABLE t5_7 LIKE t1;
CREATE TABLE t5_7b LIKE t1b;
CREATE TABLE t10_1 LIKE t1;
CREATE TABLE t10_1b LIKE t1b;
ALTER TABLE t1 DISCARD TABLESPACE;
ALTER TABLE t1b DISCARD TABLESPACE;
ALTER TABLE t1z DISCARD TABLESPACE;
ALTER TABLE t1t DISCARD TABLESPACE;
ALTER TABLE t0t DISCARD TABLESPACE;
ALTER TABLE t5_7 DISCARD TABLESPACE;
ALTER TABLE t5_7b DISCARD TABLESPACE;
ALTER TABLE t10_1 DISCARD TABLESPACE;
ALTER TABLE t10_1b DISCARD TABLESPACE;
FLUSH TABLES;

# Update the PAGE_ROOT_AUTO_INC field of a few files.
perl;
do "$ENV{MTR_SUITE_DIR}/include/crc32.pl";
sub update_autoinc
{
    my ($file, $value) = @_;
    open(FILE, "+<$file") || die "Unable to open $file";
    binmode FILE;
    my $ps= $ENV{PAGE_SIZE};
    my $page;
    die "Unable to read $file" unless sysread(FILE, $page, $ps) == $ps;
    my $full_crc32 = unpack("N",substr($page,54,4)) & 0x10; # FIL_SPACE_FLAGS
    sysseek(FILE, 3*$ps, 0) || die "Unable to seek $file\n";
    die "Unable to read $file" unless sysread(FILE, $page, $ps) == $ps;
    substr($page,56,8)=pack("NN",0,$value);
    my $polynomial = 0x82f63b78; # CRC-32C
    if ($full_crc32) {
        my $ck = mycrc32(substr($page, 0, $ps-4), 0, $polynomial);
        substr($page, $ps-4, 4) = pack("N", $ck);
    }
    else
    {
        my $ck= pack("N",mycrc32(substr($page, 4, 22), 0, $polynomial) ^
                     mycrc32(substr($page, 38, $ps - 38 - 8), 0, $polynomial));
        substr($page,0,4)=$ck;
        substr($page,$ps-8,4)=$ck;
    }
    sysseek(FILE, 3*$ps, 0) || die "Unable to rewind $file\n";
    syswrite(FILE, $page, $ps)==$ps || die "Unable to write $file\n";
    close(FILE) || die "Unable to close $file";
}
update_autoinc("$ENV{DATADIR}/test/tz.ibd", 0);
update_autoinc("$ENV{DATADIR}/test/t.ibd", 3);
update_autoinc("$ENV{DATADIR}/test/tb.ibd", 346);
update_autoinc("$ENV{DATADIR}/test/tt.ibd", 128);
EOF

--remove_file $DATADIR/test/t5_7.frm
--remove_file $DATADIR/test/t5_7b.frm
--copy_file $MYSQL_TEST_DIR/std_data/autoinc_import_57.frm $DATADIR/test/t5_7.frm
--copy_file $MYSQL_TEST_DIR/std_data/autoinc_import_57.frm $DATADIR/test/t5_7b.frm
--remove_file $DATADIR/test/t10_1.frm
--remove_file $DATADIR/test/t10_1b.frm
--copy_file $MYSQL_TEST_DIR/std_data/autoinc_import_101.frm $DATADIR/test/t10_1.frm
--copy_file $MYSQL_TEST_DIR/std_data/autoinc_import_101.frm $DATADIR/test/t10_1b.frm
--copy_file $DATADIR/test/t.ibd $DATADIR/test/t5_7.ibd
--copy_file $DATADIR/test/tb.ibd $DATADIR/test/t5_7b.ibd
--copy_file $DATADIR/test/t.ibd $DATADIR/test/t10_1.ibd
--copy_file $DATADIR/test/tb.ibd $DATADIR/test/t10_1b.ibd
--move_file $DATADIR/test/t.ibd $DATADIR/test/t1.ibd
--move_file $DATADIR/test/tb.ibd $DATADIR/test/t1b.ibd
--copy_file $DATADIR/test/tt.ibd $DATADIR/test/t0t.ibd
--move_file $DATADIR/test/tt.ibd $DATADIR/test/t1t.ibd
--move_file $DATADIR/test/tz.ibd $DATADIR/test/t1z.ibd

ALTER TABLE t0t IMPORT TABLESPACE;
INSERT INTO t0t VALUES(NULL);
SELECT * FROM t0t;
DROP TABLE t0t;
ALTER TABLE t1 IMPORT TABLESPACE;
ALTER TABLE t1b IMPORT TABLESPACE;
ALTER TABLE t1z IMPORT TABLESPACE;
ALTER TABLE t1t IMPORT TABLESPACE;
ALTER TABLE t5_7 IMPORT TABLESPACE;
ALTER TABLE t5_7b IMPORT TABLESPACE;
ALTER TABLE t10_1 IMPORT TABLESPACE;
ALTER TABLE t10_1b IMPORT TABLESPACE;

--let SEARCH_FILE= $MYSQLTEST_VARDIR/log/mysqld.1.err
--let SEARCH_PATTERN= InnoDB: Resetting PAGE_ROOT_AUTO_INC from 128 to 123 on table `test`\.`t0t`
--source include/search_pattern_in_file.inc
--let SEARCH_PATTERN= InnoDB: Resetting PAGE_ROOT_AUTO_INC from 0 to 42 on table `test`\.`t1z`
--source include/search_pattern_in_file.inc
--let SEARCH_PATTERN= InnoDB: Resetting PAGE_ROOT_AUTO_INC from 128 to 123 on table `test`\.`t1t`
--source include/search_pattern_in_file.inc
--let SEARCH_PATTERN= InnoDB: Resetting PAGE_ROOT_AUTO_INC from 3 to 42 on table `test`\.`t5_7` \(created with version 50744\)
--source include/search_pattern_in_file.inc
--let SEARCH_PATTERN= InnoDB: Resetting PAGE_ROOT_AUTO_INC from 3 to 42 on table `test`\.`t10_1` \(created with version 100149\)
--source include/search_pattern_in_file.inc
--let SEARCH_PATTERN= InnoDB: Resetting PAGE_ROOT_AUTO_INC
--source include/search_pattern_in_file.inc

# Restart, so that the InnoDB tables will be loaded into the data dictionary.
--let $restart_parameters=--read-only
--source include/restart_mysqld.inc

CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b;
CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b FOR UPGRADE;

--let $restart_parameters=--innodb-read-only --read-only
--source include/restart_mysqld.inc

CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b;
CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b FOR UPGRADE;

--let $restart_parameters=--innodb-read-only
--source include/restart_mysqld.inc

CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b;
CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b FOR UPGRADE;

SELECT COUNT(*) FROM t1;
SELECT COUNT(*) FROM t1b;
SELECT COUNT(*) FROM t1t;
SELECT COUNT(*) FROM t1z;
SELECT COUNT(*) FROM t5_7;
SELECT COUNT(*) FROM t5_7b;
SELECT COUNT(*) FROM t10_1;
SELECT COUNT(*) FROM t10_1b;

--let $restart_parameters=
--source include/restart_mysqld.inc

CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b FOR UPGRADE;

INSERT INTO t1 VALUES(NULL);
INSERT INTO t1b VALUES(NULL);
INSERT INTO t1t VALUES(NULL);
INSERT INTO t1z VALUES(NULL);
INSERT INTO t5_7 VALUES(NULL);
INSERT INTO t5_7b VALUES(NULL);
INSERT INTO t10_1 VALUES(NULL);
INSERT INTO t10_1b VALUES(NULL);

CHECK TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b FOR UPGRADE;

SELECT * FROM t1;
SELECT * FROM t1b;
SELECT * FROM t1t;
SELECT * FROM t1z;
SELECT * FROM t5_7;
SELECT * FROM t5_7b;
SELECT * FROM t10_1;
SELECT * FROM t10_1b;
DROP TABLE t1, t1b, t1t, t1z, t5_7, t5_7b, t10_1, t10_1b;