Merge ppcg5.local:/Users/antony/Work/p2-bug25800.6
into ppcg5.local:/Users/antony/Work/p2-bug25800.6.merge
This commit is contained in:
commit
21c233440d
@ -47,7 +47,6 @@ typedef struct st_key_cache
|
|||||||
my_bool in_resize; /* true during resize operation */
|
my_bool in_resize; /* true during resize operation */
|
||||||
my_bool resize_in_flush; /* true during flush of resize operation */
|
my_bool resize_in_flush; /* true during flush of resize operation */
|
||||||
my_bool can_be_used; /* usage of cache for read/write is allowed */
|
my_bool can_be_used; /* usage of cache for read/write is allowed */
|
||||||
uint key_cache_shift;
|
|
||||||
ulong key_cache_mem_size; /* specified size of the cache memory */
|
ulong key_cache_mem_size; /* specified size of the cache memory */
|
||||||
uint key_cache_block_size; /* size of the page buffer of a cache block */
|
uint key_cache_block_size; /* size of the page buffer of a cache block */
|
||||||
ulong min_warm_blocks; /* min number of warm blocks; */
|
ulong min_warm_blocks; /* min number of warm blocks; */
|
||||||
|
@ -4,28 +4,24 @@ create table t4(n int);
|
|||||||
backup table t4 to '../bogus';
|
backup table t4 to '../bogus';
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t4 backup error Failed copying .frm file (errno: X)
|
test.t4 backup error Failed copying .frm file (errno: X)
|
||||||
|
test.t4 backup Warning The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
||||||
|
test.t4 backup Error Can't create/write to file 'MYSQLTEST_VARDIR/bogus/t4.frm' (Errcode: X)
|
||||||
test.t4 backup status Operation failed
|
test.t4 backup status Operation failed
|
||||||
Warnings:
|
|
||||||
Warning 1543 The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
|
||||||
Error 1 Can't create/write to file 'MYSQLTEST_VARDIR/bogus/t4.frm' (Errcode: X)
|
|
||||||
backup table t4 to '../tmp';
|
backup table t4 to '../tmp';
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
|
test.t4 backup Warning The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
||||||
test.t4 backup status OK
|
test.t4 backup status OK
|
||||||
Warnings:
|
|
||||||
Warning 1543 The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
|
||||||
backup table t4 to '../tmp';
|
backup table t4 to '../tmp';
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t4 backup error Failed copying .frm file (errno: X)
|
test.t4 backup error Failed copying .frm file (errno: X)
|
||||||
|
test.t4 backup Warning The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
||||||
|
test.t4 backup Error Can't create/write to file 'MYSQLTEST_VARDIR/tmp/t4.frm' (Errcode: X)
|
||||||
test.t4 backup status Operation failed
|
test.t4 backup status Operation failed
|
||||||
Warnings:
|
|
||||||
Warning 1543 The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
|
||||||
Error 1 Can't create/write to file 'MYSQLTEST_VARDIR/tmp/t4.frm' (Errcode: X)
|
|
||||||
drop table t4;
|
drop table t4;
|
||||||
restore table t4 from '../tmp';
|
restore table t4 from '../tmp';
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
|
test.t4 restore Warning The syntax 'RESTORE TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
||||||
test.t4 restore status OK
|
test.t4 restore status OK
|
||||||
Warnings:
|
|
||||||
Warning 1543 The syntax 'RESTORE TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
|
||||||
select count(*) from t4;
|
select count(*) from t4;
|
||||||
count(*)
|
count(*)
|
||||||
0
|
0
|
||||||
@ -33,9 +29,8 @@ create table t1(n int);
|
|||||||
insert into t1 values (23),(45),(67);
|
insert into t1 values (23),(45),(67);
|
||||||
backup table t1 to '../tmp';
|
backup table t1 to '../tmp';
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 backup Warning The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
||||||
test.t1 backup status OK
|
test.t1 backup status OK
|
||||||
Warnings:
|
|
||||||
Warning 1543 The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
restore table t1 from '../bogus';
|
restore table t1 from '../bogus';
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
@ -45,9 +40,8 @@ Warning 1543 The syntax 'RESTORE TABLE' is deprecated and will be removed in MyS
|
|||||||
Error 29 File 'MYSQLTEST_VARDIR/bogus/t1.frm' not found (Errcode: X)
|
Error 29 File 'MYSQLTEST_VARDIR/bogus/t1.frm' not found (Errcode: X)
|
||||||
restore table t1 from '../tmp';
|
restore table t1 from '../tmp';
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 restore Warning The syntax 'RESTORE TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
||||||
test.t1 restore status OK
|
test.t1 restore status OK
|
||||||
Warnings:
|
|
||||||
Warning 1543 The syntax 'RESTORE TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
|
||||||
select n from t1;
|
select n from t1;
|
||||||
n
|
n
|
||||||
23
|
23
|
||||||
@ -59,18 +53,16 @@ insert into t2 values (123),(145),(167);
|
|||||||
insert into t3 values (223),(245),(267);
|
insert into t3 values (223),(245),(267);
|
||||||
backup table t2,t3 to '../tmp';
|
backup table t2,t3 to '../tmp';
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
|
test.t2 backup Warning The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
||||||
test.t2 backup status OK
|
test.t2 backup status OK
|
||||||
test.t3 backup status OK
|
test.t3 backup status OK
|
||||||
Warnings:
|
|
||||||
Warning 1543 The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
|
||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
restore table t1,t2,t3 from '../tmp';
|
restore table t1,t2,t3 from '../tmp';
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 restore Warning The syntax 'RESTORE TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
||||||
test.t1 restore status OK
|
test.t1 restore status OK
|
||||||
test.t2 restore status OK
|
test.t2 restore status OK
|
||||||
test.t3 restore status OK
|
test.t3 restore status OK
|
||||||
Warnings:
|
|
||||||
Warning 1543 The syntax 'RESTORE TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
|
||||||
select n from t1;
|
select n from t1;
|
||||||
n
|
n
|
||||||
23
|
23
|
||||||
@ -89,32 +81,28 @@ k
|
|||||||
drop table t1,t2,t3,t4;
|
drop table t1,t2,t3,t4;
|
||||||
restore table t1 from '../tmp';
|
restore table t1 from '../tmp';
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 restore Warning The syntax 'RESTORE TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
||||||
test.t1 restore status OK
|
test.t1 restore status OK
|
||||||
Warnings:
|
|
||||||
Warning 1543 The syntax 'RESTORE TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
|
||||||
rename table t1 to t5;
|
rename table t1 to t5;
|
||||||
lock tables t5 write;
|
lock tables t5 write;
|
||||||
backup table t5 to '../tmp';
|
backup table t5 to '../tmp';
|
||||||
unlock tables;
|
unlock tables;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
|
test.t5 backup Warning The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
||||||
test.t5 backup status OK
|
test.t5 backup status OK
|
||||||
Warnings:
|
|
||||||
Warning 1543 The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
|
||||||
drop table t5;
|
drop table t5;
|
||||||
DROP TABLE IF EXISTS `t+1`;
|
DROP TABLE IF EXISTS `t+1`;
|
||||||
CREATE TABLE `t+1` (c1 INT);
|
CREATE TABLE `t+1` (c1 INT);
|
||||||
INSERT INTO `t+1` VALUES (1), (2), (3);
|
INSERT INTO `t+1` VALUES (1), (2), (3);
|
||||||
BACKUP TABLE `t+1` TO '../tmp';
|
BACKUP TABLE `t+1` TO '../tmp';
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
|
test.t+1 backup Warning The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
||||||
test.t+1 backup status OK
|
test.t+1 backup status OK
|
||||||
Warnings:
|
|
||||||
Warning 1543 The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
|
||||||
DROP TABLE `t+1`;
|
DROP TABLE `t+1`;
|
||||||
RESTORE TABLE `t+1` FROM '../tmp';
|
RESTORE TABLE `t+1` FROM '../tmp';
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
|
test.t+1 restore Warning The syntax 'RESTORE TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
||||||
test.t+1 restore status OK
|
test.t+1 restore status OK
|
||||||
Warnings:
|
|
||||||
Warning 1543 The syntax 'RESTORE TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
|
||||||
SELECT * FROM `t+1`;
|
SELECT * FROM `t+1`;
|
||||||
c1
|
c1
|
||||||
1
|
1
|
||||||
|
@ -191,10 +191,8 @@ cache index t1 in unknown_key_cache;
|
|||||||
ERROR HY000: Unknown key cache 'unknown_key_cache'
|
ERROR HY000: Unknown key cache 'unknown_key_cache'
|
||||||
cache index t1 key (unknown_key) in keycache1;
|
cache index t1 key (unknown_key) in keycache1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 assign_to_keycache error Key 'unknown_key' doesn't exist in table 't1'
|
test.t1 assign_to_keycache Error Key 'unknown_key' doesn't exist in table 't1'
|
||||||
test.t1 assign_to_keycache status Operation failed
|
test.t1 assign_to_keycache status Operation failed
|
||||||
Warnings:
|
|
||||||
Error 1176 Key 'unknown_key' doesn't exist in table 't1'
|
|
||||||
select @@keycache2.key_buffer_size;
|
select @@keycache2.key_buffer_size;
|
||||||
@@keycache2.key_buffer_size
|
@@keycache2.key_buffer_size
|
||||||
4194304
|
4194304
|
||||||
@ -341,3 +339,30 @@ Warning 1438 Cannot drop default keycache
|
|||||||
select @@global.key_buffer_size;
|
select @@global.key_buffer_size;
|
||||||
@@global.key_buffer_size
|
@@global.key_buffer_size
|
||||||
2097152
|
2097152
|
||||||
|
SET @bug28478_key_cache_block_size= @@global.key_cache_block_size;
|
||||||
|
SET GLOBAL key_cache_block_size= 1536;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
c1 CHAR(150),
|
||||||
|
c2 CHAR(150),
|
||||||
|
c3 CHAR(150),
|
||||||
|
KEY(c1, c2, c3)
|
||||||
|
) ENGINE= MyISAM;
|
||||||
|
INSERT INTO t1 (c1, c2, c3) VALUES
|
||||||
|
('a', 'b', 'c'), ('b', 'c', 'd'), ('c', 'd', 'e'), ('d', 'e', 'f'),
|
||||||
|
('e', 'f', 'g'), ('f', 'g', 'h'), ('g', 'h', 'i'), ('h', 'i', 'j'),
|
||||||
|
('i', 'j', 'k'), ('j', 'k', 'l'), ('k', 'l', 'm'), ('l', 'm', 'n'),
|
||||||
|
('m', 'n', 'o'), ('n', 'o', 'p'), ('o', 'p', 'q'), ('p', 'q', 'r'),
|
||||||
|
('q', 'r', 's'), ('r', 's', 't'), ('s', 't', 'u'), ('t', 'u', 'v'),
|
||||||
|
('u', 'v', 'w'), ('v', 'w', 'x'), ('w', 'x', 'y'), ('x', 'y', 'z');
|
||||||
|
INSERT INTO t1 (c1, c2, c3) SELECT c1, c2, c3 from t1;
|
||||||
|
INSERT INTO t1 (c1, c2, c3) SELECT c1, c2, c3 from t1;
|
||||||
|
INSERT INTO t1 (c1, c2, c3) SELECT c1, c2, c3 from t1;
|
||||||
|
CHECK TABLE t1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 check status OK
|
||||||
|
SHOW VARIABLES LIKE 'key_cache_block_size';
|
||||||
|
Variable_name Value
|
||||||
|
key_cache_block_size 1536
|
||||||
|
SET GLOBAL key_cache_block_size= @bug28478_key_cache_block_size;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -40,7 +40,8 @@ test.t1 check status OK
|
|||||||
lock tables t1 write;
|
lock tables t1 write;
|
||||||
check table t2;
|
check table t2;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t2 check error Table 't2' was not locked with LOCK TABLES
|
test.t2 check Error Table 't2' was not locked with LOCK TABLES
|
||||||
|
test.t2 check error Corrupt
|
||||||
insert into t1 select index1,nr from t1;
|
insert into t1 select index1,nr from t1;
|
||||||
ERROR HY000: Table 't1' was not locked with LOCK TABLES
|
ERROR HY000: Table 't1' was not locked with LOCK TABLES
|
||||||
unlock tables;
|
unlock tables;
|
||||||
|
@ -847,4 +847,36 @@ insert into t1 values (1);
|
|||||||
ERROR HY000: Table 't1' is read only
|
ERROR HY000: Table 't1' is read only
|
||||||
drop table t2;
|
drop table t2;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE tm1(a INT) ENGINE=MERGE UNION=(t1, t2);
|
||||||
|
SELECT * FROM tm1;
|
||||||
|
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
CHECK TABLE tm1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.tm1 check Error Table 'test.t1' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.tm1 check Error Table 'test.t2' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.tm1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.tm1 check error Corrupt
|
||||||
|
CREATE TABLE t1(a INT);
|
||||||
|
SELECT * FROM tm1;
|
||||||
|
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
CHECK TABLE tm1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.tm1 check Error Table 'test.t2' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.tm1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.tm1 check error Corrupt
|
||||||
|
CREATE TABLE t2(a BLOB);
|
||||||
|
SELECT * FROM tm1;
|
||||||
|
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
CHECK TABLE tm1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.tm1 check Error Table 'test.t2' is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.tm1 check Error Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
|
test.tm1 check error Corrupt
|
||||||
|
ALTER TABLE t2 MODIFY a INT;
|
||||||
|
SELECT * FROM tm1;
|
||||||
|
a
|
||||||
|
CHECK TABLE tm1;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.tm1 check status OK
|
||||||
|
DROP TABLE tm1, t1, t2;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -143,10 +143,9 @@ Key_read_requests 0
|
|||||||
Key_reads 0
|
Key_reads 0
|
||||||
load index into cache t3, t2 key (primary,b) ;
|
load index into cache t3, t2 key (primary,b) ;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t3 preload_keys error Table 'test.t3' doesn't exist
|
test.t3 preload_keys Error Table 'test.t3' doesn't exist
|
||||||
|
test.t3 preload_keys error Corrupt
|
||||||
test.t2 preload_keys status OK
|
test.t2 preload_keys status OK
|
||||||
Warnings:
|
|
||||||
Error 1146 Table 'test.t3' doesn't exist
|
|
||||||
show status like "key_read%";
|
show status like "key_read%";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Key_read_requests 478
|
Key_read_requests 478
|
||||||
@ -159,12 +158,10 @@ Key_read_requests 0
|
|||||||
Key_reads 0
|
Key_reads 0
|
||||||
load index into cache t3 key (b), t2 key (c) ;
|
load index into cache t3 key (b), t2 key (c) ;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t3 preload_keys error Table 'test.t3' doesn't exist
|
test.t3 preload_keys Error Table 'test.t3' doesn't exist
|
||||||
test.t2 preload_keys error Key 'c' doesn't exist in table 't2'
|
test.t3 preload_keys error Corrupt
|
||||||
|
test.t2 preload_keys Error Key 'c' doesn't exist in table 't2'
|
||||||
test.t2 preload_keys status Operation failed
|
test.t2 preload_keys status Operation failed
|
||||||
Warnings:
|
|
||||||
Error 1146 Table 'test.t3' doesn't exist
|
|
||||||
Error 1176 Key 'c' doesn't exist in table 't2'
|
|
||||||
show status like "key_read%";
|
show status like "key_read%";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Key_read_requests 0
|
Key_read_requests 0
|
||||||
|
@ -1386,45 +1386,39 @@ prepare stmt from "repair table t1, t4, t3";
|
|||||||
execute stmt;
|
execute stmt;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 repair status OK
|
test.t1 repair status OK
|
||||||
test.t4 repair error Table 'test.t4' doesn't exist
|
test.t4 repair Error Table 'test.t4' doesn't exist
|
||||||
|
test.t4 repair error Corrupt
|
||||||
test.t3 repair status OK
|
test.t3 repair status OK
|
||||||
Warnings:
|
|
||||||
Error 1146 Table 'test.t4' doesn't exist
|
|
||||||
execute stmt;
|
execute stmt;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 repair status OK
|
test.t1 repair status OK
|
||||||
test.t4 repair error Table 'test.t4' doesn't exist
|
test.t4 repair Error Table 'test.t4' doesn't exist
|
||||||
|
test.t4 repair error Corrupt
|
||||||
test.t3 repair status OK
|
test.t3 repair status OK
|
||||||
Warnings:
|
|
||||||
Error 1146 Table 'test.t4' doesn't exist
|
|
||||||
prepare stmt from "optimize table t1, t3, t4";
|
prepare stmt from "optimize table t1, t3, t4";
|
||||||
execute stmt;
|
execute stmt;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 optimize status OK
|
test.t1 optimize status OK
|
||||||
test.t3 optimize status OK
|
test.t3 optimize status OK
|
||||||
test.t4 optimize error Table 'test.t4' doesn't exist
|
test.t4 optimize Error Table 'test.t4' doesn't exist
|
||||||
Warnings:
|
test.t4 optimize error Corrupt
|
||||||
Error 1146 Table 'test.t4' doesn't exist
|
|
||||||
execute stmt;
|
execute stmt;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 optimize status Table is already up to date
|
test.t1 optimize status Table is already up to date
|
||||||
test.t3 optimize status Table is already up to date
|
test.t3 optimize status Table is already up to date
|
||||||
test.t4 optimize error Table 'test.t4' doesn't exist
|
test.t4 optimize Error Table 'test.t4' doesn't exist
|
||||||
Warnings:
|
test.t4 optimize error Corrupt
|
||||||
Error 1146 Table 'test.t4' doesn't exist
|
|
||||||
prepare stmt from "analyze table t4, t1";
|
prepare stmt from "analyze table t4, t1";
|
||||||
execute stmt;
|
execute stmt;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t4 analyze error Table 'test.t4' doesn't exist
|
test.t4 analyze Error Table 'test.t4' doesn't exist
|
||||||
|
test.t4 analyze error Corrupt
|
||||||
test.t1 analyze status Table is already up to date
|
test.t1 analyze status Table is already up to date
|
||||||
Warnings:
|
|
||||||
Error 1146 Table 'test.t4' doesn't exist
|
|
||||||
execute stmt;
|
execute stmt;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t4 analyze error Table 'test.t4' doesn't exist
|
test.t4 analyze Error Table 'test.t4' doesn't exist
|
||||||
|
test.t4 analyze error Corrupt
|
||||||
test.t1 analyze status Table is already up to date
|
test.t1 analyze status Table is already up to date
|
||||||
Warnings:
|
|
||||||
Error 1146 Table 'test.t4' doesn't exist
|
|
||||||
deallocate prepare stmt;
|
deallocate prepare stmt;
|
||||||
drop table t1, t2, t3;
|
drop table t1, t2, t3;
|
||||||
create database mysqltest_long_database_name_to_thrash_heap;
|
create database mysqltest_long_database_name_to_thrash_heap;
|
||||||
|
@ -26,16 +26,14 @@ t1 1 st_key 1 st A NULL NULL NULL YES BTREE disabled
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
repair table t1 use_frm;
|
repair table t1 use_frm;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 repair error Table 'test.t1' doesn't exist
|
test.t1 repair Error Table 'test.t1' doesn't exist
|
||||||
Warnings:
|
test.t1 repair error Corrupt
|
||||||
Error 1146 Table 'test.t1' doesn't exist
|
|
||||||
create table t1 engine=myisam SELECT 1,"table 1";
|
create table t1 engine=myisam SELECT 1,"table 1";
|
||||||
flush tables;
|
flush tables;
|
||||||
repair table t1;
|
repair table t1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 repair error Incorrect file format 't1'
|
test.t1 repair Error Incorrect file format 't1'
|
||||||
Warnings:
|
test.t1 repair error Corrupt
|
||||||
Error 130 Incorrect file format 't1'
|
|
||||||
repair table t1 use_frm;
|
repair table t1 use_frm;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 repair warning Number of rows changed from 0 to 1
|
test.t1 repair warning Number of rows changed from 0 to 1
|
||||||
|
@ -15,9 +15,8 @@ Warnings:
|
|||||||
Error 1205 Lock wait timeout exceeded; try restarting transaction
|
Error 1205 Lock wait timeout exceeded; try restarting transaction
|
||||||
OPTIMIZE TABLE non_existing;
|
OPTIMIZE TABLE non_existing;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.non_existing optimize error Table 'test.non_existing' doesn't exist
|
test.non_existing optimize Error Table 'test.non_existing' doesn't exist
|
||||||
Warnings:
|
test.non_existing optimize error Corrupt
|
||||||
Error 1146 Table 'test.non_existing' doesn't exist
|
|
||||||
select * from t1;
|
select * from t1;
|
||||||
a
|
a
|
||||||
1
|
1
|
||||||
|
@ -752,4 +752,6 @@ Tables_in_test Table_type
|
|||||||
été BASE TABLE
|
été BASE TABLE
|
||||||
drop table `été`;
|
drop table `été`;
|
||||||
set names latin1;
|
set names latin1;
|
||||||
|
show columns from `#mysql50#????????`;
|
||||||
|
ERROR 42S02: Table 'test.#mysql50#????????' doesn't exist
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -4404,8 +4404,10 @@ call bug13012()|
|
|||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 repair status OK
|
test.t1 repair status OK
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 backup Warning The syntax 'BACKUP TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
||||||
test.t1 backup status OK
|
test.t1 backup status OK
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 restore Warning The syntax 'RESTORE TABLE' is deprecated and will be removed in MySQL 5.2. Please use MySQL Administrator (mysqldump, mysql) instead
|
||||||
test.t1 restore status OK
|
test.t1 restore status OK
|
||||||
drop procedure bug13012|
|
drop procedure bug13012|
|
||||||
create view v1 as select * from t1|
|
create view v1 as select * from t1|
|
||||||
@ -4420,61 +4422,58 @@ Table Op Msg_type Msg_text
|
|||||||
test.t1 repair status OK
|
test.t1 repair status OK
|
||||||
test.t2 repair status OK
|
test.t2 repair status OK
|
||||||
test.t3 repair status OK
|
test.t3 repair status OK
|
||||||
test.v1 repair error 'test.v1' is not BASE TABLE
|
test.v1 repair Error 'test.v1' is not BASE TABLE
|
||||||
|
test.v1 repair error Corrupt
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 optimize status OK
|
test.t1 optimize status OK
|
||||||
test.t2 optimize status OK
|
test.t2 optimize status OK
|
||||||
test.t3 optimize status OK
|
test.t3 optimize status OK
|
||||||
test.v1 optimize error 'test.v1' is not BASE TABLE
|
test.v1 optimize Error 'test.v1' is not BASE TABLE
|
||||||
|
test.v1 optimize error Corrupt
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 analyze status Table is already up to date
|
test.t1 analyze status Table is already up to date
|
||||||
test.t2 analyze status Table is already up to date
|
test.t2 analyze status Table is already up to date
|
||||||
test.t3 analyze status Table is already up to date
|
test.t3 analyze status Table is already up to date
|
||||||
test.v1 analyze error 'test.v1' is not BASE TABLE
|
test.v1 analyze Error 'test.v1' is not BASE TABLE
|
||||||
Warnings:
|
test.v1 analyze error Corrupt
|
||||||
Error 1347 'test.v1' is not BASE TABLE
|
|
||||||
Error 1347 'test.v1' is not BASE TABLE
|
|
||||||
Error 1347 'test.v1' is not BASE TABLE
|
|
||||||
call bug13012()|
|
call bug13012()|
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 repair status OK
|
test.t1 repair status OK
|
||||||
test.t2 repair status OK
|
test.t2 repair status OK
|
||||||
test.t3 repair status OK
|
test.t3 repair status OK
|
||||||
test.v1 repair error 'test.v1' is not BASE TABLE
|
test.v1 repair Error 'test.v1' is not BASE TABLE
|
||||||
|
test.v1 repair error Corrupt
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 optimize status OK
|
test.t1 optimize status OK
|
||||||
test.t2 optimize status OK
|
test.t2 optimize status OK
|
||||||
test.t3 optimize status OK
|
test.t3 optimize status OK
|
||||||
test.v1 optimize error 'test.v1' is not BASE TABLE
|
test.v1 optimize Error 'test.v1' is not BASE TABLE
|
||||||
|
test.v1 optimize error Corrupt
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 analyze status Table is already up to date
|
test.t1 analyze status Table is already up to date
|
||||||
test.t2 analyze status Table is already up to date
|
test.t2 analyze status Table is already up to date
|
||||||
test.t3 analyze status Table is already up to date
|
test.t3 analyze status Table is already up to date
|
||||||
test.v1 analyze error 'test.v1' is not BASE TABLE
|
test.v1 analyze Error 'test.v1' is not BASE TABLE
|
||||||
Warnings:
|
test.v1 analyze error Corrupt
|
||||||
Error 1347 'test.v1' is not BASE TABLE
|
|
||||||
Error 1347 'test.v1' is not BASE TABLE
|
|
||||||
Error 1347 'test.v1' is not BASE TABLE
|
|
||||||
call bug13012()|
|
call bug13012()|
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 repair status OK
|
test.t1 repair status OK
|
||||||
test.t2 repair status OK
|
test.t2 repair status OK
|
||||||
test.t3 repair status OK
|
test.t3 repair status OK
|
||||||
test.v1 repair error 'test.v1' is not BASE TABLE
|
test.v1 repair Error 'test.v1' is not BASE TABLE
|
||||||
|
test.v1 repair error Corrupt
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 optimize status OK
|
test.t1 optimize status OK
|
||||||
test.t2 optimize status OK
|
test.t2 optimize status OK
|
||||||
test.t3 optimize status OK
|
test.t3 optimize status OK
|
||||||
test.v1 optimize error 'test.v1' is not BASE TABLE
|
test.v1 optimize Error 'test.v1' is not BASE TABLE
|
||||||
|
test.v1 optimize error Corrupt
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 analyze status Table is already up to date
|
test.t1 analyze status Table is already up to date
|
||||||
test.t2 analyze status Table is already up to date
|
test.t2 analyze status Table is already up to date
|
||||||
test.t3 analyze status Table is already up to date
|
test.t3 analyze status Table is already up to date
|
||||||
test.v1 analyze error 'test.v1' is not BASE TABLE
|
test.v1 analyze Error 'test.v1' is not BASE TABLE
|
||||||
Warnings:
|
test.v1 analyze error Corrupt
|
||||||
Error 1347 'test.v1' is not BASE TABLE
|
|
||||||
Error 1347 'test.v1' is not BASE TABLE
|
|
||||||
Error 1347 'test.v1' is not BASE TABLE
|
|
||||||
drop procedure bug13012|
|
drop procedure bug13012|
|
||||||
drop view v1|
|
drop view v1|
|
||||||
select * from t1 order by data|
|
select * from t1 order by data|
|
||||||
|
@ -1378,7 +1378,9 @@ test.t1 check status OK
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
check table v1;
|
check table v1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.v1 check error View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
test.v1 check Error Table 'test.t1' doesn't exist
|
||||||
|
test.v1 check Error View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
test.v1 check error Corrupt
|
||||||
drop view v1;
|
drop view v1;
|
||||||
create table t1 (a int);
|
create table t1 (a int);
|
||||||
create table t2 (a int);
|
create table t2 (a int);
|
||||||
@ -1902,11 +1904,17 @@ CREATE VIEW v6 AS SELECT CONVERT_TZ(col1,'GMT','MET') FROM t2;
|
|||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
CHECK TABLE v1, v2, v3, v4, v5, v6;
|
CHECK TABLE v1, v2, v3, v4, v5, v6;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.v1 check error View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
test.v1 check Error Table 'test.t1' doesn't exist
|
||||||
|
test.v1 check Error View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
test.v1 check error Corrupt
|
||||||
test.v2 check status OK
|
test.v2 check status OK
|
||||||
test.v3 check error View 'test.v3' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
test.v3 check Error Table 'test.t1' doesn't exist
|
||||||
|
test.v3 check Error View 'test.v3' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
test.v3 check error Corrupt
|
||||||
test.v4 check status OK
|
test.v4 check status OK
|
||||||
test.v5 check error View 'test.v5' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
test.v5 check Error Table 'test.t1' doesn't exist
|
||||||
|
test.v5 check Error View 'test.v5' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
test.v5 check error Corrupt
|
||||||
test.v6 check status OK
|
test.v6 check status OK
|
||||||
drop view v1, v2, v3, v4, v5, v6;
|
drop view v1, v2, v3, v4, v5, v6;
|
||||||
drop table t2;
|
drop table t2;
|
||||||
@ -1926,11 +1934,17 @@ CREATE VIEW v6 AS SELECT f2() FROM t3;
|
|||||||
drop function f1;
|
drop function f1;
|
||||||
CHECK TABLE v1, v2, v3, v4, v5, v6;
|
CHECK TABLE v1, v2, v3, v4, v5, v6;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.v1 check error View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
test.v1 check Error FUNCTION test.f1 does not exist
|
||||||
|
test.v1 check Error View 'test.v1' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
test.v1 check error Corrupt
|
||||||
test.v2 check status OK
|
test.v2 check status OK
|
||||||
test.v3 check error View 'test.v3' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
test.v3 check Error FUNCTION test.f1 does not exist
|
||||||
|
test.v3 check Error View 'test.v3' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
test.v3 check error Corrupt
|
||||||
test.v4 check status OK
|
test.v4 check status OK
|
||||||
test.v5 check error View 'test.v5' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
test.v5 check Error FUNCTION test.f1 does not exist
|
||||||
|
test.v5 check Error View 'test.v5' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
|
||||||
|
test.v5 check error Corrupt
|
||||||
test.v6 check status OK
|
test.v6 check status OK
|
||||||
create function f1 () returns int return (select max(col1) from t1);
|
create function f1 () returns int return (select max(col1) from t1);
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
@ -2366,35 +2380,29 @@ CREATE TABLE t1(id INT);
|
|||||||
CREATE VIEW v1 AS SELECT id FROM t1;
|
CREATE VIEW v1 AS SELECT id FROM t1;
|
||||||
OPTIMIZE TABLE v1;
|
OPTIMIZE TABLE v1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.v1 optimize error 'test.v1' is not BASE TABLE
|
test.v1 optimize Error 'test.v1' is not BASE TABLE
|
||||||
Warnings:
|
test.v1 optimize error Corrupt
|
||||||
Error 1347 'test.v1' is not BASE TABLE
|
|
||||||
ANALYZE TABLE v1;
|
ANALYZE TABLE v1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.v1 analyze error 'test.v1' is not BASE TABLE
|
test.v1 analyze Error 'test.v1' is not BASE TABLE
|
||||||
Warnings:
|
test.v1 analyze error Corrupt
|
||||||
Error 1347 'test.v1' is not BASE TABLE
|
|
||||||
REPAIR TABLE v1;
|
REPAIR TABLE v1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.v1 repair error 'test.v1' is not BASE TABLE
|
test.v1 repair Error 'test.v1' is not BASE TABLE
|
||||||
Warnings:
|
test.v1 repair error Corrupt
|
||||||
Error 1347 'test.v1' is not BASE TABLE
|
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
OPTIMIZE TABLE v1;
|
OPTIMIZE TABLE v1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.v1 optimize error 'test.v1' is not BASE TABLE
|
test.v1 optimize Error 'test.v1' is not BASE TABLE
|
||||||
Warnings:
|
test.v1 optimize error Corrupt
|
||||||
Error 1347 'test.v1' is not BASE TABLE
|
|
||||||
ANALYZE TABLE v1;
|
ANALYZE TABLE v1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.v1 analyze error 'test.v1' is not BASE TABLE
|
test.v1 analyze Error 'test.v1' is not BASE TABLE
|
||||||
Warnings:
|
test.v1 analyze error Corrupt
|
||||||
Error 1347 'test.v1' is not BASE TABLE
|
|
||||||
REPAIR TABLE v1;
|
REPAIR TABLE v1;
|
||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.v1 repair error 'test.v1' is not BASE TABLE
|
test.v1 repair Error 'test.v1' is not BASE TABLE
|
||||||
Warnings:
|
test.v1 repair error Corrupt
|
||||||
Error 1347 'test.v1' is not BASE TABLE
|
|
||||||
DROP VIEW v1;
|
DROP VIEW v1;
|
||||||
create definer = current_user() sql security invoker view v1 as select 1;
|
create definer = current_user() sql security invoker view v1 as select 1;
|
||||||
show create view v1;
|
show create view v1;
|
||||||
|
@ -219,4 +219,31 @@ set global key_cache_block_size= @my_key_cache_block_size;
|
|||||||
set @@global.key_buffer_size=0;
|
set @@global.key_buffer_size=0;
|
||||||
select @@global.key_buffer_size;
|
select @@global.key_buffer_size;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#28478 - Improper key_cache_block_size corrupts MyISAM tables
|
||||||
|
#
|
||||||
|
SET @bug28478_key_cache_block_size= @@global.key_cache_block_size;
|
||||||
|
SET GLOBAL key_cache_block_size= 1536;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
c1 CHAR(150),
|
||||||
|
c2 CHAR(150),
|
||||||
|
c3 CHAR(150),
|
||||||
|
KEY(c1, c2, c3)
|
||||||
|
) ENGINE= MyISAM;
|
||||||
|
INSERT INTO t1 (c1, c2, c3) VALUES
|
||||||
|
('a', 'b', 'c'), ('b', 'c', 'd'), ('c', 'd', 'e'), ('d', 'e', 'f'),
|
||||||
|
('e', 'f', 'g'), ('f', 'g', 'h'), ('g', 'h', 'i'), ('h', 'i', 'j'),
|
||||||
|
('i', 'j', 'k'), ('j', 'k', 'l'), ('k', 'l', 'm'), ('l', 'm', 'n'),
|
||||||
|
('m', 'n', 'o'), ('n', 'o', 'p'), ('o', 'p', 'q'), ('p', 'q', 'r'),
|
||||||
|
('q', 'r', 's'), ('r', 's', 't'), ('s', 't', 'u'), ('t', 'u', 'v'),
|
||||||
|
('u', 'v', 'w'), ('v', 'w', 'x'), ('w', 'x', 'y'), ('x', 'y', 'z');
|
||||||
|
INSERT INTO t1 (c1, c2, c3) SELECT c1, c2, c3 from t1;
|
||||||
|
INSERT INTO t1 (c1, c2, c3) SELECT c1, c2, c3 from t1;
|
||||||
|
INSERT INTO t1 (c1, c2, c3) SELECT c1, c2, c3 from t1;
|
||||||
|
CHECK TABLE t1;
|
||||||
|
SHOW VARIABLES LIKE 'key_cache_block_size';
|
||||||
|
SET GLOBAL key_cache_block_size= @bug28478_key_cache_block_size;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
@ -490,4 +490,25 @@ insert into t1 values (1);
|
|||||||
drop table t2;
|
drop table t2;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#26976 - Missing table in merge not noted in related error msg + SHOW
|
||||||
|
# CREATE TABLE fails
|
||||||
|
#
|
||||||
|
CREATE TABLE tm1(a INT) ENGINE=MERGE UNION=(t1, t2);
|
||||||
|
--error 1168
|
||||||
|
SELECT * FROM tm1;
|
||||||
|
CHECK TABLE tm1;
|
||||||
|
CREATE TABLE t1(a INT);
|
||||||
|
--error 1168
|
||||||
|
SELECT * FROM tm1;
|
||||||
|
CHECK TABLE tm1;
|
||||||
|
CREATE TABLE t2(a BLOB);
|
||||||
|
--error 1168
|
||||||
|
SELECT * FROM tm1;
|
||||||
|
CHECK TABLE tm1;
|
||||||
|
ALTER TABLE t2 MODIFY a INT;
|
||||||
|
SELECT * FROM tm1;
|
||||||
|
CHECK TABLE tm1;
|
||||||
|
DROP TABLE tm1, t1, t2;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
@ -593,4 +593,10 @@ show full tables;
|
|||||||
drop table `été`;
|
drop table `été`;
|
||||||
set names latin1;
|
set names latin1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#26402 Server crashes with old-style named table
|
||||||
|
#
|
||||||
|
--error ER_NO_SUCH_TABLE
|
||||||
|
show columns from `#mysql50#????????`;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -234,7 +234,7 @@ static void test_key_cache(KEY_CACHE *keycache,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define KEYCACHE_HASH(f, pos) \
|
#define KEYCACHE_HASH(f, pos) \
|
||||||
(((ulong) ((pos) >> keycache->key_cache_shift)+ \
|
(((ulong) ((pos) / keycache->key_cache_block_size) + \
|
||||||
(ulong) (f)) & (keycache->hash_entries-1))
|
(ulong) (f)) & (keycache->hash_entries-1))
|
||||||
#define FILE_HASH(f) ((uint) (f) & (CHANGED_BLOCKS_HASH-1))
|
#define FILE_HASH(f) ((uint) (f) & (CHANGED_BLOCKS_HASH-1))
|
||||||
|
|
||||||
@ -402,7 +402,6 @@ int init_key_cache(KEY_CACHE *keycache, uint key_cache_block_size,
|
|||||||
|
|
||||||
keycache->key_cache_mem_size= use_mem;
|
keycache->key_cache_mem_size= use_mem;
|
||||||
keycache->key_cache_block_size= key_cache_block_size;
|
keycache->key_cache_block_size= key_cache_block_size;
|
||||||
keycache->key_cache_shift= my_bit_log2(key_cache_block_size);
|
|
||||||
DBUG_PRINT("info", ("key_cache_block_size: %u",
|
DBUG_PRINT("info", ("key_cache_block_size: %u",
|
||||||
key_cache_block_size));
|
key_cache_block_size));
|
||||||
|
|
||||||
@ -425,7 +424,7 @@ int init_key_cache(KEY_CACHE *keycache, uint key_cache_block_size,
|
|||||||
ALIGN_SIZE(hash_links * sizeof(HASH_LINK)) +
|
ALIGN_SIZE(hash_links * sizeof(HASH_LINK)) +
|
||||||
ALIGN_SIZE(sizeof(HASH_LINK*) *
|
ALIGN_SIZE(sizeof(HASH_LINK*) *
|
||||||
keycache->hash_entries))) +
|
keycache->hash_entries))) +
|
||||||
((ulong) blocks << keycache->key_cache_shift) > use_mem)
|
((ulong) blocks * keycache->key_cache_block_size) > use_mem)
|
||||||
blocks--;
|
blocks--;
|
||||||
/* Allocate memory for cache page buffers */
|
/* Allocate memory for cache page buffers */
|
||||||
if ((keycache->block_mem=
|
if ((keycache->block_mem=
|
||||||
@ -2561,7 +2560,7 @@ uchar *key_cache_read(KEY_CACHE *keycache,
|
|||||||
inc_counter_for_resize_op(keycache);
|
inc_counter_for_resize_op(keycache);
|
||||||
locked_and_incremented= TRUE;
|
locked_and_incremented= TRUE;
|
||||||
/* Requested data may not always be aligned to cache blocks. */
|
/* Requested data may not always be aligned to cache blocks. */
|
||||||
offset= (uint) (filepos & (keycache->key_cache_block_size-1));
|
offset= (uint) (filepos % keycache->key_cache_block_size);
|
||||||
/* Read data in key_cache_block_size increments */
|
/* Read data in key_cache_block_size increments */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -2759,7 +2758,7 @@ int key_cache_insert(KEY_CACHE *keycache,
|
|||||||
inc_counter_for_resize_op(keycache);
|
inc_counter_for_resize_op(keycache);
|
||||||
locked_and_incremented= TRUE;
|
locked_and_incremented= TRUE;
|
||||||
/* Loaded data may not always be aligned to cache blocks. */
|
/* Loaded data may not always be aligned to cache blocks. */
|
||||||
offset= (uint) (filepos & (keycache->key_cache_block_size-1));
|
offset= (uint) (filepos % keycache->key_cache_block_size);
|
||||||
/* Load data in key_cache_block_size increments. */
|
/* Load data in key_cache_block_size increments. */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
@ -3033,7 +3032,7 @@ int key_cache_write(KEY_CACHE *keycache,
|
|||||||
inc_counter_for_resize_op(keycache);
|
inc_counter_for_resize_op(keycache);
|
||||||
locked_and_incremented= TRUE;
|
locked_and_incremented= TRUE;
|
||||||
/* Requested data may not always be aligned to cache blocks. */
|
/* Requested data may not always be aligned to cache blocks. */
|
||||||
offset= (uint) (filepos & (keycache->key_cache_block_size-1));
|
offset= (uint) (filepos % keycache->key_cache_block_size);
|
||||||
/* Write data in key_cache_block_size increments. */
|
/* Write data in key_cache_block_size increments. */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
@ -88,6 +88,7 @@ my_off_t my_tell(File fd, myf MyFlags __attribute__((unused)))
|
|||||||
os_off_t pos;
|
os_off_t pos;
|
||||||
DBUG_ENTER("my_tell");
|
DBUG_ENTER("my_tell");
|
||||||
DBUG_PRINT("my",("Fd: %d MyFlags: %d",fd, MyFlags));
|
DBUG_PRINT("my",("Fd: %d MyFlags: %d",fd, MyFlags));
|
||||||
|
DBUG_ASSERT(fd >= 0);
|
||||||
#ifdef HAVE_TELL
|
#ifdef HAVE_TELL
|
||||||
pos=tell(fd);
|
pos=tell(fd);
|
||||||
#else
|
#else
|
||||||
|
@ -197,6 +197,13 @@ MYSQL_LOCK *mysql_lock_tables(THD *thd, TABLE **tables, uint count,
|
|||||||
}
|
}
|
||||||
else if (rc == 1) /* aborted */
|
else if (rc == 1) /* aborted */
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
reset_lock_data is required here. If thr_multi_lock fails it
|
||||||
|
resets lock type for tables, which were locked before (and
|
||||||
|
including) one that caused error. Lock type for other tables
|
||||||
|
preserved.
|
||||||
|
*/
|
||||||
|
reset_lock_data(sql_lock);
|
||||||
thd->some_tables_deleted=1; // Try again
|
thd->some_tables_deleted=1; // Try again
|
||||||
sql_lock->lock_count= 0; // Locks are already freed
|
sql_lock->lock_count= 0; // Locks are already freed
|
||||||
}
|
}
|
||||||
|
@ -1920,6 +1920,10 @@ uint filename_to_tablename(const char *from, char *to, uint to_length);
|
|||||||
uint tablename_to_filename(const char *from, char *to, uint to_length);
|
uint tablename_to_filename(const char *from, char *to, uint to_length);
|
||||||
uint build_table_filename(char *buff, size_t bufflen, const char *db,
|
uint build_table_filename(char *buff, size_t bufflen, const char *db,
|
||||||
const char *table, const char *ext, uint flags);
|
const char *table, const char *ext, uint flags);
|
||||||
|
|
||||||
|
#define MYSQL50_TABLE_NAME_PREFIX "#mysql50#"
|
||||||
|
#define MYSQL50_TABLE_NAME_PREFIX_LENGTH 9
|
||||||
|
|
||||||
/* Flags for conversion functions. */
|
/* Flags for conversion functions. */
|
||||||
#define FN_FROM_IS_TMP (1 << 0)
|
#define FN_FROM_IS_TMP (1 << 0)
|
||||||
#define FN_TO_IS_TMP (1 << 1)
|
#define FN_TO_IS_TMP (1 << 1)
|
||||||
|
@ -5931,7 +5931,7 @@ log and this option does nothing anymore.",
|
|||||||
(uchar**) &dflt_key_cache_var.param_block_size,
|
(uchar**) &dflt_key_cache_var.param_block_size,
|
||||||
(uchar**) 0,
|
(uchar**) 0,
|
||||||
0, (GET_ULONG | GET_ASK_ADDR), REQUIRED_ARG,
|
0, (GET_ULONG | GET_ASK_ADDR), REQUIRED_ARG,
|
||||||
KEY_CACHE_BLOCK_SIZE , 512, 1024*16, MALLOC_OVERHEAD, 512, 0},
|
KEY_CACHE_BLOCK_SIZE, 512, 1024 * 16, 0, 512, 0},
|
||||||
{"key_cache_division_limit", OPT_KEY_CACHE_DIVISION_LIMIT,
|
{"key_cache_division_limit", OPT_KEY_CACHE_DIVISION_LIMIT,
|
||||||
"The minimum percentage of warm blocks in key cache",
|
"The minimum percentage of warm blocks in key cache",
|
||||||
(uchar**) &dflt_key_cache_var.param_division_limit,
|
(uchar**) &dflt_key_cache_var.param_division_limit,
|
||||||
|
@ -1500,6 +1500,25 @@ Item *sys_var::item(THD *thd, enum_var_type var_type, LEX_STRING *base)
|
|||||||
pthread_mutex_unlock(&LOCK_global_system_variables);
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
||||||
return new Item_int(value,1);
|
return new Item_int(value,1);
|
||||||
}
|
}
|
||||||
|
case SHOW_CHAR_PTR:
|
||||||
|
{
|
||||||
|
Item *tmp;
|
||||||
|
pthread_mutex_lock(&LOCK_global_system_variables);
|
||||||
|
char *str= *(char**) value_ptr(thd, var_type, base);
|
||||||
|
if (str)
|
||||||
|
{
|
||||||
|
uint length= strlen(str);
|
||||||
|
tmp= new Item_string(thd->strmake(str, length), length,
|
||||||
|
system_charset_info, DERIVATION_SYSCONST);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tmp= new Item_null();
|
||||||
|
tmp->collation.set(system_charset_info, DERIVATION_SYSCONST);
|
||||||
|
}
|
||||||
|
pthread_mutex_unlock(&LOCK_global_system_variables);
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
case SHOW_CHAR:
|
case SHOW_CHAR:
|
||||||
{
|
{
|
||||||
Item *tmp;
|
Item *tmp;
|
||||||
|
@ -6059,3 +6059,5 @@ ER_SLAVE_INCIDENT
|
|||||||
eng "The incident %s occured on the master. Message: %-.64s"
|
eng "The incident %s occured on the master. Message: %-.64s"
|
||||||
ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT
|
ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT
|
||||||
eng "Table has no partition for some existing values"
|
eng "Table has no partition for some existing values"
|
||||||
|
ER_ADMIN_WRONG_MRG_TABLE
|
||||||
|
eng "Table '%-.64s' is differently defined or of non-MyISAM type or doesn't exist"
|
||||||
|
@ -283,7 +283,7 @@ static struct st_plugin_dl *plugin_dl_find(const LEX_STRING *dl)
|
|||||||
DBUG_ENTER("plugin_dl_find");
|
DBUG_ENTER("plugin_dl_find");
|
||||||
for (i= 0; i < plugin_dl_array.elements; i++)
|
for (i= 0; i < plugin_dl_array.elements; i++)
|
||||||
{
|
{
|
||||||
tmp= dynamic_element(&plugin_dl_array, i, struct st_plugin_dl *);
|
tmp= *dynamic_element(&plugin_dl_array, i, struct st_plugin_dl **);
|
||||||
if (tmp->ref_count &&
|
if (tmp->ref_count &&
|
||||||
! my_strnncoll(files_charset_info,
|
! my_strnncoll(files_charset_info,
|
||||||
(const uchar *)dl->str, dl->length,
|
(const uchar *)dl->str, dl->length,
|
||||||
@ -301,17 +301,20 @@ static st_plugin_dl *plugin_dl_insert_or_reuse(struct st_plugin_dl *plugin_dl)
|
|||||||
DBUG_ENTER("plugin_dl_insert_or_reuse");
|
DBUG_ENTER("plugin_dl_insert_or_reuse");
|
||||||
for (i= 0; i < plugin_dl_array.elements; i++)
|
for (i= 0; i < plugin_dl_array.elements; i++)
|
||||||
{
|
{
|
||||||
tmp= dynamic_element(&plugin_dl_array, i, struct st_plugin_dl *);
|
tmp= *dynamic_element(&plugin_dl_array, i, struct st_plugin_dl **);
|
||||||
if (! tmp->ref_count)
|
if (! tmp->ref_count)
|
||||||
{
|
{
|
||||||
memcpy(tmp, plugin_dl, sizeof(struct st_plugin_dl));
|
memcpy(tmp, plugin_dl, sizeof(struct st_plugin_dl));
|
||||||
DBUG_RETURN(tmp);
|
DBUG_RETURN(tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (insert_dynamic(&plugin_dl_array, (uchar*)plugin_dl))
|
if (insert_dynamic(&plugin_dl_array, (uchar*)&plugin_dl))
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
DBUG_RETURN(dynamic_element(&plugin_dl_array, plugin_dl_array.elements - 1,
|
tmp= *dynamic_element(&plugin_dl_array, plugin_dl_array.elements - 1,
|
||||||
struct st_plugin_dl *));
|
struct st_plugin_dl **)=
|
||||||
|
(struct st_plugin_dl *) memdup_root(&plugin_mem_root, (uchar*)plugin_dl,
|
||||||
|
sizeof(struct st_plugin_dl));
|
||||||
|
DBUG_RETURN(tmp);
|
||||||
}
|
}
|
||||||
#endif /* HAVE_DLOPEN */
|
#endif /* HAVE_DLOPEN */
|
||||||
|
|
||||||
@ -521,8 +524,8 @@ static void plugin_dl_del(const LEX_STRING *dl)
|
|||||||
|
|
||||||
for (i= 0; i < plugin_dl_array.elements; i++)
|
for (i= 0; i < plugin_dl_array.elements; i++)
|
||||||
{
|
{
|
||||||
struct st_plugin_dl *tmp= dynamic_element(&plugin_dl_array, i,
|
struct st_plugin_dl *tmp= *dynamic_element(&plugin_dl_array, i,
|
||||||
struct st_plugin_dl *);
|
struct st_plugin_dl **);
|
||||||
if (tmp->ref_count &&
|
if (tmp->ref_count &&
|
||||||
! my_strnncoll(files_charset_info,
|
! my_strnncoll(files_charset_info,
|
||||||
(const uchar *)dl->str, dl->length,
|
(const uchar *)dl->str, dl->length,
|
||||||
@ -670,21 +673,24 @@ plugin_ref plugin_lock_by_name(THD *thd, const LEX_STRING *name, int type
|
|||||||
static st_plugin_int *plugin_insert_or_reuse(struct st_plugin_int *plugin)
|
static st_plugin_int *plugin_insert_or_reuse(struct st_plugin_int *plugin)
|
||||||
{
|
{
|
||||||
uint i;
|
uint i;
|
||||||
|
struct st_plugin_int *tmp;
|
||||||
DBUG_ENTER("plugin_insert_or_reuse");
|
DBUG_ENTER("plugin_insert_or_reuse");
|
||||||
for (i= 0; i < plugin_array.elements; i++)
|
for (i= 0; i < plugin_array.elements; i++)
|
||||||
{
|
{
|
||||||
struct st_plugin_int *tmp= dynamic_element(&plugin_array, i,
|
tmp= *dynamic_element(&plugin_array, i, struct st_plugin_int **);
|
||||||
struct st_plugin_int *);
|
|
||||||
if (tmp->state == PLUGIN_IS_FREED)
|
if (tmp->state == PLUGIN_IS_FREED)
|
||||||
{
|
{
|
||||||
memcpy(tmp, plugin, sizeof(struct st_plugin_int));
|
memcpy(tmp, plugin, sizeof(struct st_plugin_int));
|
||||||
DBUG_RETURN(tmp);
|
DBUG_RETURN(tmp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (insert_dynamic(&plugin_array, (uchar*)plugin))
|
if (insert_dynamic(&plugin_array, (uchar*)&plugin))
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
DBUG_RETURN(dynamic_element(&plugin_array, plugin_array.elements - 1,
|
tmp= *dynamic_element(&plugin_array, plugin_array.elements - 1,
|
||||||
struct st_plugin_int *));
|
struct st_plugin_int **)=
|
||||||
|
(struct st_plugin_int *) memdup_root(&plugin_mem_root, (uchar*)plugin,
|
||||||
|
sizeof(struct st_plugin_int));
|
||||||
|
DBUG_RETURN(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -878,7 +884,7 @@ static void reap_plugins(void)
|
|||||||
|
|
||||||
for (idx= 0; idx < count; idx++)
|
for (idx= 0; idx < count; idx++)
|
||||||
{
|
{
|
||||||
plugin= dynamic_element(&plugin_array, idx, struct st_plugin_int *);
|
plugin= *dynamic_element(&plugin_array, idx, struct st_plugin_int **);
|
||||||
if (plugin->state == PLUGIN_IS_DELETED && !plugin->ref_count)
|
if (plugin->state == PLUGIN_IS_DELETED && !plugin->ref_count)
|
||||||
{
|
{
|
||||||
/* change the status flag to prevent reaping by another thread */
|
/* change the status flag to prevent reaping by another thread */
|
||||||
@ -1101,9 +1107,9 @@ int plugin_init(int *argc, char **argv, int flags)
|
|||||||
pthread_mutex_init(&LOCK_plugin, MY_MUTEX_INIT_FAST);
|
pthread_mutex_init(&LOCK_plugin, MY_MUTEX_INIT_FAST);
|
||||||
|
|
||||||
if (my_init_dynamic_array(&plugin_dl_array,
|
if (my_init_dynamic_array(&plugin_dl_array,
|
||||||
sizeof(struct st_plugin_dl),16,16) ||
|
sizeof(struct st_plugin_dl *),16,16) ||
|
||||||
my_init_dynamic_array(&plugin_array,
|
my_init_dynamic_array(&plugin_array,
|
||||||
sizeof(struct st_plugin_int),16,16))
|
sizeof(struct st_plugin_int *),16,16))
|
||||||
goto err;
|
goto err;
|
||||||
|
|
||||||
for (i= 0; i < MYSQL_MAX_PLUGIN_TYPE_NUM; i++)
|
for (i= 0; i < MYSQL_MAX_PLUGIN_TYPE_NUM; i++)
|
||||||
@ -1190,7 +1196,7 @@ int plugin_init(int *argc, char **argv, int flags)
|
|||||||
|
|
||||||
for (i= 0; i < plugin_array.elements; i++)
|
for (i= 0; i < plugin_array.elements; i++)
|
||||||
{
|
{
|
||||||
plugin_ptr= dynamic_element(&plugin_array, i, struct st_plugin_int *);
|
plugin_ptr= *dynamic_element(&plugin_array, i, struct st_plugin_int **);
|
||||||
if (plugin_ptr->state == PLUGIN_IS_UNINITIALIZED)
|
if (plugin_ptr->state == PLUGIN_IS_UNINITIALIZED)
|
||||||
{
|
{
|
||||||
if (plugin_initialize(plugin_ptr))
|
if (plugin_initialize(plugin_ptr))
|
||||||
@ -1238,11 +1244,13 @@ static bool register_builtin(struct st_mysql_plugin *plugin,
|
|||||||
tmp->ref_count= 0;
|
tmp->ref_count= 0;
|
||||||
tmp->plugin_dl= 0;
|
tmp->plugin_dl= 0;
|
||||||
|
|
||||||
if (insert_dynamic(&plugin_array, (uchar*)tmp))
|
if (insert_dynamic(&plugin_array, (uchar*)&tmp))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
|
|
||||||
*ptr= dynamic_element(&plugin_array, plugin_array.elements - 1,
|
*ptr= *dynamic_element(&plugin_array, plugin_array.elements - 1,
|
||||||
struct st_plugin_int *);
|
struct st_plugin_int **)=
|
||||||
|
(struct st_plugin_int *) memdup_root(&plugin_mem_root, (uchar*)tmp,
|
||||||
|
sizeof(struct st_plugin_int));
|
||||||
|
|
||||||
if (my_hash_insert(&plugin_hash[plugin->type],(uchar*) *ptr))
|
if (my_hash_insert(&plugin_hash[plugin->type],(uchar*) *ptr))
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
@ -1481,7 +1489,7 @@ void plugin_shutdown(void)
|
|||||||
reap_plugins();
|
reap_plugins();
|
||||||
for (i= free_slots= 0; i < count; i++)
|
for (i= free_slots= 0; i < count; i++)
|
||||||
{
|
{
|
||||||
plugin= dynamic_element(&plugin_array, i, struct st_plugin_int *);
|
plugin= *dynamic_element(&plugin_array, i, struct st_plugin_int **);
|
||||||
switch (plugin->state) {
|
switch (plugin->state) {
|
||||||
case PLUGIN_IS_READY:
|
case PLUGIN_IS_READY:
|
||||||
plugin->state= PLUGIN_IS_DELETED;
|
plugin->state= PLUGIN_IS_DELETED;
|
||||||
@ -1513,7 +1521,7 @@ void plugin_shutdown(void)
|
|||||||
*/
|
*/
|
||||||
for (i= 0; i < count; i++)
|
for (i= 0; i < count; i++)
|
||||||
{
|
{
|
||||||
plugins[i]= dynamic_element(&plugin_array, i, struct st_plugin_int *);
|
plugins[i]= *dynamic_element(&plugin_array, i, struct st_plugin_int **);
|
||||||
/* change the state to ensure no reaping races */
|
/* change the state to ensure no reaping races */
|
||||||
if (plugins[i]->state == PLUGIN_IS_DELETED)
|
if (plugins[i]->state == PLUGIN_IS_DELETED)
|
||||||
plugins[i]->state= PLUGIN_IS_DYING;
|
plugins[i]->state= PLUGIN_IS_DYING;
|
||||||
@ -1578,7 +1586,7 @@ void plugin_shutdown(void)
|
|||||||
count= plugin_dl_array.elements;
|
count= plugin_dl_array.elements;
|
||||||
dl= (struct st_plugin_dl **)my_alloca(sizeof(void*) * count);
|
dl= (struct st_plugin_dl **)my_alloca(sizeof(void*) * count);
|
||||||
for (i= 0; i < count; i++)
|
for (i= 0; i < count; i++)
|
||||||
dl[i]= dynamic_element(&plugin_dl_array, i, struct st_plugin_dl *);
|
dl[i]= *dynamic_element(&plugin_dl_array, i, struct st_plugin_dl **);
|
||||||
for (i= 0; i < plugin_dl_array.elements; i++)
|
for (i= 0; i < plugin_dl_array.elements; i++)
|
||||||
free_plugin_mem(dl[i]);
|
free_plugin_mem(dl[i]);
|
||||||
my_afree(dl);
|
my_afree(dl);
|
||||||
@ -1737,7 +1745,7 @@ bool plugin_foreach_with_mask(THD *thd, plugin_foreach_func *func,
|
|||||||
{
|
{
|
||||||
for (idx= 0; idx < total; idx++)
|
for (idx= 0; idx < total; idx++)
|
||||||
{
|
{
|
||||||
plugin= dynamic_element(&plugin_array, idx, struct st_plugin_int *);
|
plugin= *dynamic_element(&plugin_array, idx, struct st_plugin_int **);
|
||||||
plugins[idx]= !(plugin->state & state_mask) ? plugin : NULL;
|
plugins[idx]= !(plugin->state & state_mask) ? plugin : NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3162,7 +3170,7 @@ void my_print_help_inc_plugins(my_option *main_options, uint size)
|
|||||||
if (initialized)
|
if (initialized)
|
||||||
for (uint idx= 0; idx < plugin_array.elements; idx++)
|
for (uint idx= 0; idx < plugin_array.elements; idx++)
|
||||||
{
|
{
|
||||||
p= dynamic_element(&plugin_array, idx, struct st_plugin_int *);
|
p= *dynamic_element(&plugin_array, idx, struct st_plugin_int **);
|
||||||
|
|
||||||
if (!p->plugin->system_vars ||
|
if (!p->plugin->system_vars ||
|
||||||
!(opt= construct_help_options(&mem_root, p)))
|
!(opt= construct_help_options(&mem_root, p)))
|
||||||
|
@ -54,10 +54,6 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
|
|||||||
HA_CREATE_INFO *create_info,
|
HA_CREATE_INFO *create_info,
|
||||||
Alter_info *alter_info);
|
Alter_info *alter_info);
|
||||||
|
|
||||||
#define MYSQL50_TABLE_NAME_PREFIX "#mysql50#"
|
|
||||||
#define MYSQL50_TABLE_NAME_PREFIX_LENGTH 9
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Translate a file name to a table name (WL #1324).
|
Translate a file name to a table name (WL #1324).
|
||||||
|
|
||||||
@ -4072,34 +4068,16 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
|
|||||||
*/
|
*/
|
||||||
if (!table->table)
|
if (!table->table)
|
||||||
{
|
{
|
||||||
char buf[ERRMSGSIZE+ERRMSGSIZE+2];
|
if (!thd->warn_list.elements)
|
||||||
const char *err_msg;
|
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
|
||||||
protocol->prepare_for_resend();
|
ER_CHECK_NO_SUCH_TABLE, ER(ER_CHECK_NO_SUCH_TABLE));
|
||||||
protocol->store(table_name, system_charset_info);
|
|
||||||
protocol->store(operator_name, system_charset_info);
|
|
||||||
protocol->store(STRING_WITH_LEN("error"), system_charset_info);
|
|
||||||
if (!(err_msg=thd->net.last_error))
|
|
||||||
err_msg=ER(ER_CHECK_NO_SUCH_TABLE);
|
|
||||||
/* if it was a view will check md5 sum */
|
/* if it was a view will check md5 sum */
|
||||||
if (table->view &&
|
if (table->view &&
|
||||||
view_checksum(thd, table) == HA_ADMIN_WRONG_CHECKSUM)
|
view_checksum(thd, table) == HA_ADMIN_WRONG_CHECKSUM)
|
||||||
{
|
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
|
||||||
strxmov(buf, err_msg, "; ", ER(ER_VIEW_CHECKSUM), NullS);
|
ER_VIEW_CHECKSUM, ER(ER_VIEW_CHECKSUM));
|
||||||
err_msg= (const char *)buf;
|
result_code= HA_ADMIN_CORRUPT;
|
||||||
}
|
goto send_result;
|
||||||
protocol->store(err_msg, system_charset_info);
|
|
||||||
lex->cleanup_after_one_table_open();
|
|
||||||
thd->clear_error();
|
|
||||||
/*
|
|
||||||
View opening can be interrupted in the middle of process so some
|
|
||||||
tables can be left opening
|
|
||||||
*/
|
|
||||||
ha_autocommit_or_rollback(thd, 1);
|
|
||||||
close_thread_tables(thd);
|
|
||||||
lex->reset_query_tables_list(FALSE);
|
|
||||||
if (protocol->write())
|
|
||||||
goto err;
|
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (table->view)
|
if (table->view)
|
||||||
@ -4185,6 +4163,23 @@ send_result:
|
|||||||
|
|
||||||
lex->cleanup_after_one_table_open();
|
lex->cleanup_after_one_table_open();
|
||||||
thd->clear_error(); // these errors shouldn't get client
|
thd->clear_error(); // these errors shouldn't get client
|
||||||
|
{
|
||||||
|
List_iterator_fast<MYSQL_ERROR> it(thd->warn_list);
|
||||||
|
MYSQL_ERROR *err;
|
||||||
|
while ((err= it++))
|
||||||
|
{
|
||||||
|
protocol->prepare_for_resend();
|
||||||
|
protocol->store(table_name, system_charset_info);
|
||||||
|
protocol->store((char*) operator_name, system_charset_info);
|
||||||
|
protocol->store(warning_level_names[err->level].str,
|
||||||
|
warning_level_names[err->level].length,
|
||||||
|
system_charset_info);
|
||||||
|
protocol->store(err->msg, system_charset_info);
|
||||||
|
if (protocol->write())
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
mysql_reset_errors(thd, true);
|
||||||
|
}
|
||||||
protocol->prepare_for_resend();
|
protocol->prepare_for_resend();
|
||||||
protocol->store(table_name, system_charset_info);
|
protocol->store(table_name, system_charset_info);
|
||||||
protocol->store(operator_name, system_charset_info);
|
protocol->store(operator_name, system_charset_info);
|
||||||
@ -4390,6 +4385,8 @@ send_result_message:
|
|||||||
bool mysql_backup_table(THD* thd, TABLE_LIST* table_list)
|
bool mysql_backup_table(THD* thd, TABLE_LIST* table_list)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("mysql_backup_table");
|
DBUG_ENTER("mysql_backup_table");
|
||||||
|
WARN_DEPRECATED(thd, "5.2", "BACKUP TABLE",
|
||||||
|
"MySQL Administrator (mysqldump, mysql)");
|
||||||
DBUG_RETURN(mysql_admin_table(thd, table_list, 0,
|
DBUG_RETURN(mysql_admin_table(thd, table_list, 0,
|
||||||
"backup", TL_READ, 0, 0, 0, 0,
|
"backup", TL_READ, 0, 0, 0, 0,
|
||||||
&handler::backup, 0));
|
&handler::backup, 0));
|
||||||
@ -4399,6 +4396,8 @@ bool mysql_backup_table(THD* thd, TABLE_LIST* table_list)
|
|||||||
bool mysql_restore_table(THD* thd, TABLE_LIST* table_list)
|
bool mysql_restore_table(THD* thd, TABLE_LIST* table_list)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("mysql_restore_table");
|
DBUG_ENTER("mysql_restore_table");
|
||||||
|
WARN_DEPRECATED(thd, "5.2", "RESTORE TABLE",
|
||||||
|
"MySQL Administrator (mysqldump, mysql)");
|
||||||
DBUG_RETURN(mysql_admin_table(thd, table_list, 0,
|
DBUG_RETURN(mysql_admin_table(thd, table_list, 0,
|
||||||
"restore", TL_WRITE, 1, 1, 0,
|
"restore", TL_WRITE, 1, 1, 0,
|
||||||
&prepare_for_restore,
|
&prepare_for_restore,
|
||||||
@ -4788,7 +4787,7 @@ bool mysql_check_table(THD* thd, TABLE_LIST* tables,HA_CHECK_OPT* check_opt)
|
|||||||
DBUG_ENTER("mysql_check_table");
|
DBUG_ENTER("mysql_check_table");
|
||||||
DBUG_RETURN(mysql_admin_table(thd, tables, check_opt,
|
DBUG_RETURN(mysql_admin_table(thd, tables, check_opt,
|
||||||
"check", lock_type,
|
"check", lock_type,
|
||||||
0, HA_OPEN_FOR_REPAIR, 0, 0,
|
0, 0, HA_OPEN_FOR_REPAIR, 0,
|
||||||
&handler::ha_check, &view_checksum));
|
&handler::ha_check, &view_checksum));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5751,8 +5751,6 @@ restore:
|
|||||||
RESTORE_SYM table_or_tables
|
RESTORE_SYM table_or_tables
|
||||||
{
|
{
|
||||||
Lex->sql_command = SQLCOM_RESTORE_TABLE;
|
Lex->sql_command = SQLCOM_RESTORE_TABLE;
|
||||||
WARN_DEPRECATED(yythd, "5.2", "RESTORE TABLE",
|
|
||||||
"MySQL Administrator (mysqldump, mysql)");
|
|
||||||
}
|
}
|
||||||
table_list FROM TEXT_STRING_sys
|
table_list FROM TEXT_STRING_sys
|
||||||
{
|
{
|
||||||
@ -5763,8 +5761,6 @@ backup:
|
|||||||
BACKUP_SYM table_or_tables
|
BACKUP_SYM table_or_tables
|
||||||
{
|
{
|
||||||
Lex->sql_command = SQLCOM_BACKUP_TABLE;
|
Lex->sql_command = SQLCOM_BACKUP_TABLE;
|
||||||
WARN_DEPRECATED(yythd, "5.2", "BACKUP TABLE",
|
|
||||||
"MySQL Administrator (mysqldump, mysql)");
|
|
||||||
}
|
}
|
||||||
table_list TO_SYM TEXT_STRING_sys
|
table_list TO_SYM TEXT_STRING_sys
|
||||||
{
|
{
|
||||||
|
19
sql/table.cc
19
sql/table.cc
@ -343,10 +343,25 @@ int open_table_def(THD *thd, TABLE_SHARE *share, uint db_flags)
|
|||||||
strxmov(path, share->normalized_path.str, reg_ext, NullS);
|
strxmov(path, share->normalized_path.str, reg_ext, NullS);
|
||||||
if ((file= my_open(path, O_RDONLY | O_SHARE, MYF(0))) < 0)
|
if ((file= my_open(path, O_RDONLY | O_SHARE, MYF(0))) < 0)
|
||||||
{
|
{
|
||||||
if (strchr(share->table_name.str, '@'))
|
/*
|
||||||
|
We don't try to open 5.0 unencoded name, if
|
||||||
|
- non-encoded name contains '@' signs,
|
||||||
|
because '@' can be misinterpreted.
|
||||||
|
It is not clear if '@' is escape character in 5.1,
|
||||||
|
or a normal character in 5.0.
|
||||||
|
|
||||||
|
- non-encoded db or table name contain "#mysql50#" prefix.
|
||||||
|
This kind of tables must have been opened only by the
|
||||||
|
my_open() above.
|
||||||
|
*/
|
||||||
|
if (strchr(share->table_name.str, '@') ||
|
||||||
|
!strncmp(share->db.str, MYSQL50_TABLE_NAME_PREFIX,
|
||||||
|
MYSQL50_TABLE_NAME_PREFIX_LENGTH) ||
|
||||||
|
!strncmp(share->table_name.str, MYSQL50_TABLE_NAME_PREFIX,
|
||||||
|
MYSQL50_TABLE_NAME_PREFIX_LENGTH))
|
||||||
goto err_not_open;
|
goto err_not_open;
|
||||||
|
|
||||||
/* Try unecoded 5.0 name */
|
/* Try unencoded 5.0 name */
|
||||||
uint length;
|
uint length;
|
||||||
strxnmov(path, sizeof(path)-1,
|
strxnmov(path, sizeof(path)-1,
|
||||||
mysql_data_home, "/", share->db.str, "/",
|
mysql_data_home, "/", share->db.str, "/",
|
||||||
|
@ -286,8 +286,8 @@ static int ftb_parse_query_internal(MYSQL_FTPARSER_PARAM *param,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void _ftb_parse_query(FTB *ftb, uchar *query, uint len,
|
static int _ftb_parse_query(FTB *ftb, uchar *query, uint len,
|
||||||
struct st_mysql_ftparser *parser)
|
struct st_mysql_ftparser *parser)
|
||||||
{
|
{
|
||||||
MYSQL_FTPARSER_PARAM *param;
|
MYSQL_FTPARSER_PARAM *param;
|
||||||
MY_FTB_PARAM ftb_param;
|
MY_FTB_PARAM ftb_param;
|
||||||
@ -295,9 +295,9 @@ static void _ftb_parse_query(FTB *ftb, uchar *query, uint len,
|
|||||||
DBUG_ASSERT(parser);
|
DBUG_ASSERT(parser);
|
||||||
|
|
||||||
if (ftb->state != UNINITIALIZED)
|
if (ftb->state != UNINITIALIZED)
|
||||||
DBUG_VOID_RETURN;
|
DBUG_RETURN(0);
|
||||||
if (! (param= ftparser_call_initializer(ftb->info, ftb->keynr, 0)))
|
if (! (param= ftparser_call_initializer(ftb->info, ftb->keynr, 0)))
|
||||||
DBUG_VOID_RETURN;
|
DBUG_RETURN(1);
|
||||||
|
|
||||||
ftb_param.ftb= ftb;
|
ftb_param.ftb= ftb;
|
||||||
ftb_param.depth= 0;
|
ftb_param.depth= 0;
|
||||||
@ -312,8 +312,7 @@ static void _ftb_parse_query(FTB *ftb, uchar *query, uint len,
|
|||||||
param->length= len;
|
param->length= len;
|
||||||
param->flags= 0;
|
param->flags= 0;
|
||||||
param->mode= MYSQL_FTPARSER_FULL_BOOLEAN_INFO;
|
param->mode= MYSQL_FTPARSER_FULL_BOOLEAN_INFO;
|
||||||
parser->parse(param);
|
DBUG_RETURN(parser->parse(param));
|
||||||
DBUG_VOID_RETURN;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -538,9 +537,10 @@ FT_INFO * ft_init_boolean_search(MI_INFO *info, uint keynr, uchar *query,
|
|||||||
ftbe->phrase= NULL;
|
ftbe->phrase= NULL;
|
||||||
ftbe->document= 0;
|
ftbe->document= 0;
|
||||||
ftb->root=ftbe;
|
ftb->root=ftbe;
|
||||||
_ftb_parse_query(ftb, query, query_len, keynr == NO_SUCH_KEY ?
|
if (unlikely(_ftb_parse_query(ftb, query, query_len,
|
||||||
&ft_default_parser :
|
keynr == NO_SUCH_KEY ? &ft_default_parser :
|
||||||
info->s->keyinfo[keynr].parser);
|
info->s->keyinfo[keynr].parser)))
|
||||||
|
goto err;
|
||||||
/*
|
/*
|
||||||
Hack: instead of init_queue, we'll use reinit queue to be able
|
Hack: instead of init_queue, we'll use reinit queue to be able
|
||||||
to alloc queue with alloc_root()
|
to alloc queue with alloc_root()
|
||||||
@ -622,7 +622,7 @@ static int ftb_check_phrase_internal(MYSQL_FTPARSER_PARAM *param,
|
|||||||
{
|
{
|
||||||
param->mysql_add_word(param, word.pos, word.len, 0);
|
param->mysql_add_word(param, word.pos, word.len, 0);
|
||||||
if (phrase_param->match)
|
if (phrase_param->match)
|
||||||
return 1;
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -640,6 +640,7 @@ static int ftb_check_phrase_internal(MYSQL_FTPARSER_PARAM *param,
|
|||||||
|
|
||||||
RETURN VALUE
|
RETURN VALUE
|
||||||
1 is returned if phrase found, 0 else.
|
1 is returned if phrase found, 0 else.
|
||||||
|
-1 is returned if error occurs.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int _ftb_check_phrase(FTB *ftb, const uchar *document, uint len,
|
static int _ftb_check_phrase(FTB *ftb, const uchar *document, uint len,
|
||||||
@ -668,12 +669,13 @@ static int _ftb_check_phrase(FTB *ftb, const uchar *document, uint len,
|
|||||||
param->length= len;
|
param->length= len;
|
||||||
param->flags= 0;
|
param->flags= 0;
|
||||||
param->mode= MYSQL_FTPARSER_WITH_STOPWORDS;
|
param->mode= MYSQL_FTPARSER_WITH_STOPWORDS;
|
||||||
parser->parse(param);
|
if (unlikely(parser->parse(param)))
|
||||||
|
return -1;
|
||||||
DBUG_RETURN(ftb_param.match ? 1 : 0);
|
DBUG_RETURN(ftb_param.match ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void _ftb_climb_the_tree(FTB *ftb, FTB_WORD *ftbw, FT_SEG_ITERATOR *ftsi_orig)
|
static int _ftb_climb_the_tree(FTB *ftb, FTB_WORD *ftbw, FT_SEG_ITERATOR *ftsi_orig)
|
||||||
{
|
{
|
||||||
FT_SEG_ITERATOR ftsi;
|
FT_SEG_ITERATOR ftsi;
|
||||||
FTB_EXPR *ftbe;
|
FTB_EXPR *ftbe;
|
||||||
@ -705,17 +707,19 @@ static void _ftb_climb_the_tree(FTB *ftb, FTB_WORD *ftbw, FT_SEG_ITERATOR *ftsi_
|
|||||||
weight=ftbe->cur_weight*ftbe->weight;
|
weight=ftbe->cur_weight*ftbe->weight;
|
||||||
if (mode && ftbe->phrase)
|
if (mode && ftbe->phrase)
|
||||||
{
|
{
|
||||||
int not_found=1;
|
int found= 0;
|
||||||
|
|
||||||
memcpy(&ftsi, ftsi_orig, sizeof(ftsi));
|
memcpy(&ftsi, ftsi_orig, sizeof(ftsi));
|
||||||
while (_mi_ft_segiterator(&ftsi) && not_found)
|
while (_mi_ft_segiterator(&ftsi) && !found)
|
||||||
{
|
{
|
||||||
if (!ftsi.pos)
|
if (!ftsi.pos)
|
||||||
continue;
|
continue;
|
||||||
not_found = ! _ftb_check_phrase(ftb, ftsi.pos, ftsi.len,
|
found= _ftb_check_phrase(ftb, ftsi.pos, ftsi.len, ftbe, parser);
|
||||||
ftbe, parser);
|
if (unlikely(found < 0))
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
if (not_found) break;
|
if (!found)
|
||||||
|
break;
|
||||||
} /* ftbe->quot */
|
} /* ftbe->quot */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -747,6 +751,7 @@ static void _ftb_climb_the_tree(FTB *ftb, FTB_WORD *ftbw, FT_SEG_ITERATOR *ftsi_
|
|||||||
weight*= ftbe->weight;
|
weight*= ftbe->weight;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -779,7 +784,11 @@ int ft_boolean_read_next(FT_INFO *ftb, char *record)
|
|||||||
{
|
{
|
||||||
while (curdoc == (ftbw=(FTB_WORD *)queue_top(& ftb->queue))->docid[0])
|
while (curdoc == (ftbw=(FTB_WORD *)queue_top(& ftb->queue))->docid[0])
|
||||||
{
|
{
|
||||||
_ftb_climb_the_tree(ftb, ftbw, 0);
|
if (unlikely(_ftb_climb_the_tree(ftb, ftbw, 0)))
|
||||||
|
{
|
||||||
|
my_errno= HA_ERR_OUT_OF_MEM;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
|
|
||||||
/* update queue */
|
/* update queue */
|
||||||
_ft2_search(ftb, ftbw, 0);
|
_ft2_search(ftb, ftbw, 0);
|
||||||
@ -855,7 +864,8 @@ static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param,
|
|||||||
if (ftbw->docid[1] == ftb->info->lastpos)
|
if (ftbw->docid[1] == ftb->info->lastpos)
|
||||||
continue;
|
continue;
|
||||||
ftbw->docid[1]= ftb->info->lastpos;
|
ftbw->docid[1]= ftb->info->lastpos;
|
||||||
_ftb_climb_the_tree(ftb, ftbw, ftb_param->ftsi);
|
if (unlikely(_ftb_climb_the_tree(ftb, ftbw, ftb_param->ftsi)))
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
@ -927,7 +937,8 @@ float ft_boolean_find_relevance(FT_INFO *ftb, uchar *record, uint length)
|
|||||||
continue;
|
continue;
|
||||||
param->doc= (uchar *)ftsi.pos;
|
param->doc= (uchar *)ftsi.pos;
|
||||||
param->length= ftsi.len;
|
param->length= ftsi.len;
|
||||||
parser->parse(param);
|
if (unlikely(parser->parse(param)))
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
ftbe=ftb->root;
|
ftbe=ftb->root;
|
||||||
if (ftbe->docid[1]==docid && ftbe->cur_weight>0 &&
|
if (ftbe->docid[1]==docid && ftbe->cur_weight>0 &&
|
||||||
|
@ -257,8 +257,12 @@ FT_INFO *ft_init_nlq_search(MI_INFO *info, uint keynr, uchar *query,
|
|||||||
{
|
{
|
||||||
info->update|= HA_STATE_AKTIV;
|
info->update|= HA_STATE_AKTIV;
|
||||||
ftparser_param->flags= MYSQL_FTFLAGS_NEED_COPY;
|
ftparser_param->flags= MYSQL_FTFLAGS_NEED_COPY;
|
||||||
_mi_ft_parse(&wtree, info, keynr, record, ftparser_param,
|
if (unlikely(_mi_ft_parse(&wtree, info, keynr, record, ftparser_param,
|
||||||
&wtree.mem_root);
|
&wtree.mem_root)))
|
||||||
|
{
|
||||||
|
delete_queue(&best);
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
delete_queue(&best);
|
delete_queue(&best);
|
||||||
|
@ -84,6 +84,14 @@ static void mi_check_print_msg(MI_CHECK *param, const char* msg_type,
|
|||||||
}
|
}
|
||||||
length=(uint) (strxmov(name, param->db_name,".",param->table_name,NullS) -
|
length=(uint) (strxmov(name, param->db_name,".",param->table_name,NullS) -
|
||||||
name);
|
name);
|
||||||
|
/*
|
||||||
|
TODO: switch from protocol to push_warning here. The main reason we didn't
|
||||||
|
it yet is parallel repair. Due to following trace:
|
||||||
|
mi_check_print_msg/push_warning/sql_alloc/my_pthread_getspecific_ptr.
|
||||||
|
|
||||||
|
Also we likely need to lock mutex here (in both cases with protocol and
|
||||||
|
push_warning).
|
||||||
|
*/
|
||||||
protocol->prepare_for_resend();
|
protocol->prepare_for_resend();
|
||||||
protocol->store(name, length, system_charset_info);
|
protocol->store(name, length, system_charset_info);
|
||||||
protocol->store(param->op_name, system_charset_info);
|
protocol->store(param->op_name, system_charset_info);
|
||||||
@ -1216,11 +1224,7 @@ int ha_myisam::assign_to_keycache(THD* thd, HA_CHECK_OPT *check_opt)
|
|||||||
table->keys_in_use_for_query.clear_all();
|
table->keys_in_use_for_query.clear_all();
|
||||||
|
|
||||||
if (table_list->process_index_hints(table))
|
if (table_list->process_index_hints(table))
|
||||||
{
|
DBUG_RETURN(HA_ADMIN_FAILED);
|
||||||
errmsg= thd->net.last_error;
|
|
||||||
error= HA_ADMIN_FAILED;
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
map= ~(ulonglong) 0;
|
map= ~(ulonglong) 0;
|
||||||
if (!table->keys_in_use_for_query.is_clear_all())
|
if (!table->keys_in_use_for_query.is_clear_all())
|
||||||
/* use all keys if there's no list specified by the user through hints */
|
/* use all keys if there's no list specified by the user through hints */
|
||||||
@ -1235,7 +1239,6 @@ int ha_myisam::assign_to_keycache(THD* thd, HA_CHECK_OPT *check_opt)
|
|||||||
error= HA_ADMIN_CORRUPT;
|
error= HA_ADMIN_CORRUPT;
|
||||||
}
|
}
|
||||||
|
|
||||||
err:
|
|
||||||
if (error != HA_ADMIN_OK)
|
if (error != HA_ADMIN_OK)
|
||||||
{
|
{
|
||||||
/* Send error to user */
|
/* Send error to user */
|
||||||
@ -1270,11 +1273,7 @@ int ha_myisam::preload_keys(THD* thd, HA_CHECK_OPT *check_opt)
|
|||||||
table->keys_in_use_for_query.clear_all();
|
table->keys_in_use_for_query.clear_all();
|
||||||
|
|
||||||
if (table_list->process_index_hints(table))
|
if (table_list->process_index_hints(table))
|
||||||
{
|
DBUG_RETURN(HA_ADMIN_FAILED);
|
||||||
errmsg= thd->net.last_error;
|
|
||||||
error= HA_ADMIN_FAILED;
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
|
|
||||||
map= ~(ulonglong) 0;
|
map= ~(ulonglong) 0;
|
||||||
/* Check validity of the index references */
|
/* Check validity of the index references */
|
||||||
|
@ -52,6 +52,24 @@ extern int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo,
|
|||||||
uint t1_keys, uint t1_recs,
|
uint t1_keys, uint t1_recs,
|
||||||
MI_KEYDEF *t2_keyinfo, MI_COLUMNDEF *t2_recinfo,
|
MI_KEYDEF *t2_keyinfo, MI_COLUMNDEF *t2_recinfo,
|
||||||
uint t2_keys, uint t2_recs, bool strict);
|
uint t2_keys, uint t2_recs, bool strict);
|
||||||
|
static void split_file_name(const char *file_name,
|
||||||
|
LEX_STRING *db, LEX_STRING *name);
|
||||||
|
|
||||||
|
|
||||||
|
extern "C" void myrg_print_wrong_table(const char *table_name)
|
||||||
|
{
|
||||||
|
LEX_STRING db, name;
|
||||||
|
char buf[FN_REFLEN];
|
||||||
|
split_file_name(table_name, &db, &name);
|
||||||
|
memcpy(buf, db.str, db.length);
|
||||||
|
buf[db.length]= '.';
|
||||||
|
memcpy(buf + db.length + 1, name.str, name.length);
|
||||||
|
buf[db.length + name.length + 1]= 0;
|
||||||
|
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
|
||||||
|
ER_ADMIN_WRONG_MRG_TABLE, ER(ER_ADMIN_WRONG_MRG_TABLE),
|
||||||
|
buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
const char **ha_myisammrg::bas_ext() const
|
const char **ha_myisammrg::bas_ext() const
|
||||||
{
|
{
|
||||||
@ -102,6 +120,8 @@ int ha_myisammrg::open(const char *name, int mode, uint test_if_locked)
|
|||||||
{
|
{
|
||||||
DBUG_PRINT("error",("reclength: %lu mean_rec_length: %lu",
|
DBUG_PRINT("error",("reclength: %lu mean_rec_length: %lu",
|
||||||
table->s->reclength, stats.mean_rec_length));
|
table->s->reclength, stats.mean_rec_length));
|
||||||
|
if (test_if_locked & HA_OPEN_FOR_REPAIR)
|
||||||
|
myrg_print_wrong_table(file->open_tables->table->filename);
|
||||||
error= HA_ERR_WRONG_MRG_TABLE_DEF;
|
error= HA_ERR_WRONG_MRG_TABLE_DEF;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
@ -120,12 +140,19 @@ int ha_myisammrg::open(const char *name, int mode, uint test_if_locked)
|
|||||||
u_table->table->s->base.keys,
|
u_table->table->s->base.keys,
|
||||||
u_table->table->s->base.fields, false))
|
u_table->table->s->base.fields, false))
|
||||||
{
|
{
|
||||||
my_free((uchar*) recinfo, MYF(0));
|
|
||||||
error= HA_ERR_WRONG_MRG_TABLE_DEF;
|
error= HA_ERR_WRONG_MRG_TABLE_DEF;
|
||||||
goto err;
|
if (test_if_locked & HA_OPEN_FOR_REPAIR)
|
||||||
|
myrg_print_wrong_table(u_table->table->filename);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
my_free((uchar*) recinfo, MYF(0));
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
my_free((uchar*) recinfo, MYF(0));
|
my_free((uchar*) recinfo, MYF(0));
|
||||||
|
if (error == HA_ERR_WRONG_MRG_TABLE_DEF)
|
||||||
|
goto err;
|
||||||
#if !defined(BIG_TABLES) || SIZEOF_OFF_T == 4
|
#if !defined(BIG_TABLES) || SIZEOF_OFF_T == 4
|
||||||
/* Merge table has more than 2G rows */
|
/* Merge table has more than 2G rows */
|
||||||
if (table->s->crashed)
|
if (table->s->crashed)
|
||||||
@ -593,6 +620,13 @@ bool ha_myisammrg::check_if_incompatible_data(HA_CREATE_INFO *info,
|
|||||||
return COMPATIBLE_DATA_NO;
|
return COMPATIBLE_DATA_NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int ha_myisammrg::check(THD* thd, HA_CHECK_OPT* check_opt)
|
||||||
|
{
|
||||||
|
return HA_ADMIN_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
extern int myrg_panic(enum ha_panic_function flag);
|
extern int myrg_panic(enum ha_panic_function flag);
|
||||||
int myisammrg_panic(handlerton *hton, ha_panic_function flag)
|
int myisammrg_panic(handlerton *hton, ha_panic_function flag)
|
||||||
{
|
{
|
||||||
|
@ -84,4 +84,5 @@ class ha_myisammrg: public handler
|
|||||||
void append_create_info(String *packet);
|
void append_create_info(String *packet);
|
||||||
MYRG_INFO *myrg_info() { return file; }
|
MYRG_INFO *myrg_info() { return file; }
|
||||||
bool check_if_incompatible_data(HA_CREATE_INFO *info, uint table_changes);
|
bool check_if_incompatible_data(HA_CREATE_INFO *info, uint table_changes);
|
||||||
|
int check(THD* thd, HA_CHECK_OPT* check_opt);
|
||||||
};
|
};
|
||||||
|
@ -29,4 +29,7 @@ extern pthread_mutex_t THR_LOCK_open;
|
|||||||
|
|
||||||
int _myrg_init_queue(MYRG_INFO *info,int inx,enum ha_rkey_function search_flag);
|
int _myrg_init_queue(MYRG_INFO *info,int inx,enum ha_rkey_function search_flag);
|
||||||
int _myrg_mi_read_record(MI_INFO *info, uchar *buf);
|
int _myrg_mi_read_record(MI_INFO *info, uchar *buf);
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
void myrg_print_wrong_table(const char *table_name);
|
||||||
|
@ -92,6 +92,11 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
|
|||||||
if (!(isam=mi_open(buff,mode,(handle_locking?HA_OPEN_WAIT_IF_LOCKED:0))))
|
if (!(isam=mi_open(buff,mode,(handle_locking?HA_OPEN_WAIT_IF_LOCKED:0))))
|
||||||
{
|
{
|
||||||
my_errno= HA_ERR_WRONG_MRG_TABLE_DEF;
|
my_errno= HA_ERR_WRONG_MRG_TABLE_DEF;
|
||||||
|
if (handle_locking & HA_OPEN_FOR_REPAIR)
|
||||||
|
{
|
||||||
|
myrg_print_wrong_table(buff);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
if (!m_info) /* First file */
|
if (!m_info) /* First file */
|
||||||
@ -120,6 +125,11 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
|
|||||||
if (m_info->reclength != isam->s->base.reclength)
|
if (m_info->reclength != isam->s->base.reclength)
|
||||||
{
|
{
|
||||||
my_errno=HA_ERR_WRONG_MRG_TABLE_DEF;
|
my_errno=HA_ERR_WRONG_MRG_TABLE_DEF;
|
||||||
|
if (handle_locking & HA_OPEN_FOR_REPAIR)
|
||||||
|
{
|
||||||
|
myrg_print_wrong_table(buff);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
m_info->options|= isam->s->options;
|
m_info->options|= isam->s->options;
|
||||||
@ -133,6 +143,8 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
|
|||||||
m_info->tables);
|
m_info->tables);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (my_errno == HA_ERR_WRONG_MRG_TABLE_DEF)
|
||||||
|
goto err;
|
||||||
if (!m_info && !(m_info= (MYRG_INFO*) my_malloc(sizeof(MYRG_INFO),
|
if (!m_info && !(m_info= (MYRG_INFO*) my_malloc(sizeof(MYRG_INFO),
|
||||||
MYF(MY_WME | MY_ZEROFILL))))
|
MYF(MY_WME | MY_ZEROFILL))))
|
||||||
goto err;
|
goto err;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user