mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
Merge chilla.local:/home/mydev/mysql-5.0-amain
into chilla.local:/home/mydev/mysql-5.0-axmrg configure.in: Auto merged
This commit is contained in:
commit
84910c5a87
26 changed files with 281 additions and 133 deletions
|
@ -46,7 +46,6 @@ typedef struct st_key_cache
|
|||
my_bool key_cache_inited;
|
||||
my_bool resize_in_flush; /* true during flush of resize operation */
|
||||
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 */
|
||||
uint key_cache_block_size; /* size of the page buffer of a cache block */
|
||||
ulong min_warm_blocks; /* min number of warm blocks; */
|
||||
|
|
|
@ -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_mi_read_record(MI_INFO *info, byte *buf);
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C"
|
||||
#endif
|
||||
void myrg_print_wrong_table(const char *table_name);
|
||||
|
|
|
@ -90,6 +90,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))))
|
||||
{
|
||||
my_errno= HA_ERR_WRONG_MRG_TABLE_DEF;
|
||||
if (handle_locking & HA_OPEN_FOR_REPAIR)
|
||||
{
|
||||
myrg_print_wrong_table(buff);
|
||||
continue;
|
||||
}
|
||||
goto err;
|
||||
}
|
||||
if (!m_info) /* First file */
|
||||
|
@ -118,6 +123,11 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
|
|||
if (m_info->reclength != isam->s->base.reclength)
|
||||
{
|
||||
my_errno=HA_ERR_WRONG_MRG_TABLE_DEF;
|
||||
if (handle_locking & HA_OPEN_FOR_REPAIR)
|
||||
{
|
||||
myrg_print_wrong_table(buff);
|
||||
continue;
|
||||
}
|
||||
goto err;
|
||||
}
|
||||
m_info->options|= isam->s->options;
|
||||
|
@ -131,6 +141,8 @@ MYRG_INFO *myrg_open(const char *name, int mode, int handle_locking)
|
|||
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),
|
||||
MYF(MY_WME | MY_ZEROFILL))))
|
||||
goto err;
|
||||
|
|
|
@ -4,18 +4,16 @@ create table t4(n int);
|
|||
backup table t4 to '../bogus';
|
||||
Table Op Msg_type Msg_text
|
||||
test.t4 backup error Failed copying .frm file (errno: X)
|
||||
test.t4 backup Error Can't create/write to file 'MYSQLTEST_VARDIR/bogus/t4.frm' (Errcode: X)
|
||||
test.t4 backup status Operation failed
|
||||
Warnings:
|
||||
Error 1 Can't create/write to file 'MYSQLTEST_VARDIR/bogus/t4.frm' (Errcode: X)
|
||||
backup table t4 to '../tmp';
|
||||
Table Op Msg_type Msg_text
|
||||
test.t4 backup status OK
|
||||
backup table t4 to '../tmp';
|
||||
Table Op Msg_type Msg_text
|
||||
test.t4 backup error Failed copying .frm file (errno: X)
|
||||
test.t4 backup Error Can't create/write to file 'MYSQLTEST_VARDIR/tmp/t4.frm' (Errcode: X)
|
||||
test.t4 backup status Operation failed
|
||||
Warnings:
|
||||
Error 1 Can't create/write to file 'MYSQLTEST_VARDIR/tmp/t4.frm' (Errcode: X)
|
||||
drop table t4;
|
||||
restore table t4 from '../tmp';
|
||||
Table Op Msg_type Msg_text
|
||||
|
|
|
@ -191,10 +191,8 @@ cache index t1 in unknown_key_cache;
|
|||
ERROR HY000: Unknown key cache 'unknown_key_cache'
|
||||
cache index t1 key (unknown_key) in keycache1;
|
||||
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
|
||||
Warnings:
|
||||
Error 1176 Key 'unknown_key' doesn't exist in table 't1'
|
||||
select @@keycache2.key_buffer_size;
|
||||
@@keycache2.key_buffer_size
|
||||
4194304
|
||||
|
@ -341,3 +339,30 @@ Warning 1438 Cannot drop default keycache
|
|||
select @@global.key_buffer_size;
|
||||
@@global.key_buffer_size
|
||||
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;
|
||||
check table t2;
|
||||
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;
|
||||
ERROR HY000: Table 't1' was not locked with LOCK TABLES
|
||||
unlock tables;
|
||||
|
|
|
@ -844,4 +844,36 @@ insert into t1 values (1);
|
|||
ERROR HY000: Table 't1' is read only
|
||||
drop table t2;
|
||||
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
|
||||
|
|
|
@ -143,10 +143,9 @@ Key_read_requests 0
|
|||
Key_reads 0
|
||||
load index into cache t3, t2 key (primary,b) ;
|
||||
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
|
||||
Warnings:
|
||||
Error 1146 Table 'test.t3' doesn't exist
|
||||
show status like "key_read%";
|
||||
Variable_name Value
|
||||
Key_read_requests 478
|
||||
|
@ -159,12 +158,10 @@ Key_read_requests 0
|
|||
Key_reads 0
|
||||
load index into cache t3 key (b), t2 key (c) ;
|
||||
Table Op Msg_type Msg_text
|
||||
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 Table 'test.t3' doesn't exist
|
||||
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
|
||||
Warnings:
|
||||
Error 1146 Table 'test.t3' doesn't exist
|
||||
Error 1176 Key 'c' doesn't exist in table 't2'
|
||||
show status like "key_read%";
|
||||
Variable_name Value
|
||||
Key_read_requests 0
|
||||
|
|
|
@ -1378,45 +1378,39 @@ prepare stmt from "repair table t1, t4, t3";
|
|||
execute stmt;
|
||||
Table Op Msg_type Msg_text
|
||||
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
|
||||
Warnings:
|
||||
Error 1146 Table 'test.t4' doesn't exist
|
||||
execute stmt;
|
||||
Table Op Msg_type Msg_text
|
||||
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
|
||||
Warnings:
|
||||
Error 1146 Table 'test.t4' doesn't exist
|
||||
prepare stmt from "optimize table t1, t3, t4";
|
||||
execute stmt;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 optimize status OK
|
||||
test.t3 optimize status OK
|
||||
test.t4 optimize error Table 'test.t4' doesn't exist
|
||||
Warnings:
|
||||
Error 1146 Table 'test.t4' doesn't exist
|
||||
test.t4 optimize Error Table 'test.t4' doesn't exist
|
||||
test.t4 optimize error Corrupt
|
||||
execute stmt;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 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
|
||||
Warnings:
|
||||
Error 1146 Table 'test.t4' doesn't exist
|
||||
test.t4 optimize Error Table 'test.t4' doesn't exist
|
||||
test.t4 optimize error Corrupt
|
||||
prepare stmt from "analyze table t4, t1";
|
||||
execute stmt;
|
||||
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
|
||||
Warnings:
|
||||
Error 1146 Table 'test.t4' doesn't exist
|
||||
execute stmt;
|
||||
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
|
||||
Warnings:
|
||||
Error 1146 Table 'test.t4' doesn't exist
|
||||
deallocate prepare stmt;
|
||||
drop table t1, t2, t3;
|
||||
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;
|
||||
repair table t1 use_frm;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair error Table 'test.t1' doesn't exist
|
||||
Warnings:
|
||||
Error 1146 Table 'test.t1' doesn't exist
|
||||
test.t1 repair Error Table 'test.t1' doesn't exist
|
||||
test.t1 repair error Corrupt
|
||||
create table t1 engine=myisam SELECT 1,"table 1";
|
||||
flush tables;
|
||||
repair table t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair error Incorrect file format 't1'
|
||||
Warnings:
|
||||
Error 130 Incorrect file format 't1'
|
||||
test.t1 repair Error Incorrect file format 't1'
|
||||
test.t1 repair error Corrupt
|
||||
repair table t1 use_frm;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair warning Number of rows changed from 0 to 1
|
||||
|
|
|
@ -15,7 +15,6 @@ Warnings:
|
|||
Error 1205 Lock wait timeout exceeded; try restarting transaction
|
||||
OPTIMIZE TABLE non_existing;
|
||||
Table Op Msg_type Msg_text
|
||||
test.non_existing optimize error Table 'test.non_existing' doesn't exist
|
||||
Warnings:
|
||||
Error 1146 Table 'test.non_existing' doesn't exist
|
||||
test.non_existing optimize Error Table 'test.non_existing' doesn't exist
|
||||
test.non_existing optimize error Corrupt
|
||||
drop table t1;
|
||||
|
|
|
@ -4409,55 +4409,58 @@ Table Op Msg_type Msg_text
|
|||
test.t1 repair status OK
|
||||
test.t2 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
|
||||
test.t1 optimize status OK
|
||||
test.t2 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
|
||||
test.t1 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.v1 analyze error 'test.v1' is not BASE TABLE
|
||||
Warnings:
|
||||
Error 1347 'test.v1' is not BASE TABLE
|
||||
test.v1 analyze Error 'test.v1' is not BASE TABLE
|
||||
test.v1 analyze error Corrupt
|
||||
call bug13012()|
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair status OK
|
||||
test.t2 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
|
||||
test.t1 optimize status OK
|
||||
test.t2 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
|
||||
test.t1 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.v1 analyze error 'test.v1' is not BASE TABLE
|
||||
Warnings:
|
||||
Error 1347 'test.v1' is not BASE TABLE
|
||||
test.v1 analyze Error 'test.v1' is not BASE TABLE
|
||||
test.v1 analyze error Corrupt
|
||||
call bug13012()|
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 repair status OK
|
||||
test.t2 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
|
||||
test.t1 optimize status OK
|
||||
test.t2 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
|
||||
test.t1 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.v1 analyze error 'test.v1' is not BASE TABLE
|
||||
Warnings:
|
||||
Error 1347 'test.v1' is not BASE TABLE
|
||||
test.v1 analyze Error 'test.v1' is not BASE TABLE
|
||||
test.v1 analyze error Corrupt
|
||||
drop procedure bug13012|
|
||||
drop view v1;
|
||||
select * from t1|
|
||||
|
|
|
@ -1377,7 +1377,9 @@ test.t1 check status OK
|
|||
drop table t1;
|
||||
check table v1;
|
||||
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;
|
||||
create table t1 (a int);
|
||||
create table t2 (a int);
|
||||
|
@ -1901,11 +1903,17 @@ CREATE VIEW v6 AS SELECT CONVERT_TZ(col1,'GMT','MET') FROM t2;
|
|||
DROP TABLE t1;
|
||||
CHECK TABLE v1, v2, v3, v4, v5, v6;
|
||||
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.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.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
|
||||
drop view v1, v2, v3, v4, v5, v6;
|
||||
drop table t2;
|
||||
|
@ -1925,11 +1933,17 @@ CREATE VIEW v6 AS SELECT f2() FROM t3;
|
|||
drop function f1;
|
||||
CHECK TABLE v1, v2, v3, v4, v5, v6;
|
||||
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.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.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
|
||||
create function f1 () returns int return (select max(col1) from t1);
|
||||
DROP TABLE t1;
|
||||
|
@ -2376,35 +2390,29 @@ CREATE TABLE t1(id INT);
|
|||
CREATE VIEW v1 AS SELECT id FROM t1;
|
||||
OPTIMIZE TABLE v1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.v1 optimize error 'test.v1' is not BASE TABLE
|
||||
Warnings:
|
||||
Error 1347 'test.v1' is not BASE TABLE
|
||||
test.v1 optimize Error 'test.v1' is not BASE TABLE
|
||||
test.v1 optimize error Corrupt
|
||||
ANALYZE TABLE v1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.v1 analyze error 'test.v1' is not BASE TABLE
|
||||
Warnings:
|
||||
Error 1347 'test.v1' is not BASE TABLE
|
||||
test.v1 analyze Error 'test.v1' is not BASE TABLE
|
||||
test.v1 analyze error Corrupt
|
||||
REPAIR TABLE v1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.v1 repair error 'test.v1' is not BASE TABLE
|
||||
Warnings:
|
||||
Error 1347 'test.v1' is not BASE TABLE
|
||||
test.v1 repair Error 'test.v1' is not BASE TABLE
|
||||
test.v1 repair error Corrupt
|
||||
DROP TABLE t1;
|
||||
OPTIMIZE TABLE v1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.v1 optimize error 'test.v1' is not BASE TABLE
|
||||
Warnings:
|
||||
Error 1347 'test.v1' is not BASE TABLE
|
||||
test.v1 optimize Error 'test.v1' is not BASE TABLE
|
||||
test.v1 optimize error Corrupt
|
||||
ANALYZE TABLE v1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.v1 analyze error 'test.v1' is not BASE TABLE
|
||||
Warnings:
|
||||
Error 1347 'test.v1' is not BASE TABLE
|
||||
test.v1 analyze Error 'test.v1' is not BASE TABLE
|
||||
test.v1 analyze error Corrupt
|
||||
REPAIR TABLE v1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.v1 repair error 'test.v1' is not BASE TABLE
|
||||
Warnings:
|
||||
Error 1347 'test.v1' is not BASE TABLE
|
||||
test.v1 repair Error 'test.v1' is not BASE TABLE
|
||||
test.v1 repair error Corrupt
|
||||
DROP VIEW v1;
|
||||
create definer = current_user() sql security invoker view v1 as select 1;
|
||||
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;
|
||||
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
|
||||
|
|
|
@ -486,4 +486,25 @@ insert into t1 values (1);
|
|||
drop table t2;
|
||||
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
|
||||
|
|
|
@ -173,7 +173,7 @@ static void test_key_cache(KEY_CACHE *keycache,
|
|||
#endif
|
||||
|
||||
#define KEYCACHE_HASH(f, pos) \
|
||||
(((ulong) ((pos) >> keycache->key_cache_shift)+ \
|
||||
(((ulong) ((pos) / keycache->key_cache_block_size) + \
|
||||
(ulong) (f)) & (keycache->hash_entries-1))
|
||||
#define FILE_HASH(f) ((uint) (f) & (CHANGED_BLOCKS_HASH-1))
|
||||
|
||||
|
@ -329,7 +329,6 @@ int init_key_cache(KEY_CACHE *keycache, uint key_cache_block_size,
|
|||
|
||||
keycache->key_cache_mem_size= use_mem;
|
||||
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",
|
||||
key_cache_block_size));
|
||||
|
||||
|
@ -352,7 +351,7 @@ int init_key_cache(KEY_CACHE *keycache, uint key_cache_block_size,
|
|||
ALIGN_SIZE(hash_links * sizeof(HASH_LINK)) +
|
||||
ALIGN_SIZE(sizeof(HASH_LINK*) *
|
||||
keycache->hash_entries))) +
|
||||
((ulong) blocks << keycache->key_cache_shift) > use_mem)
|
||||
((ulong) blocks * keycache->key_cache_block_size) > use_mem)
|
||||
blocks--;
|
||||
/* Allocate memory for cache page buffers */
|
||||
if ((keycache->block_mem=
|
||||
|
@ -1807,7 +1806,7 @@ byte *key_cache_read(KEY_CACHE *keycache,
|
|||
uint status;
|
||||
int page_st;
|
||||
|
||||
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 */
|
||||
do
|
||||
{
|
||||
|
@ -1946,7 +1945,7 @@ int key_cache_insert(KEY_CACHE *keycache,
|
|||
int error;
|
||||
uint offset;
|
||||
|
||||
offset= (uint) (filepos & (keycache->key_cache_block_size-1));
|
||||
offset= (uint) (filepos % keycache->key_cache_block_size);
|
||||
do
|
||||
{
|
||||
keycache_pthread_mutex_lock(&keycache->cache_lock);
|
||||
|
@ -2081,7 +2080,7 @@ int key_cache_write(KEY_CACHE *keycache,
|
|||
int page_st;
|
||||
uint offset;
|
||||
|
||||
offset= (uint) (filepos & (keycache->key_cache_block_size-1));
|
||||
offset= (uint) (filepos % keycache->key_cache_block_size);
|
||||
do
|
||||
{
|
||||
keycache_pthread_mutex_lock(&keycache->cache_lock);
|
||||
|
|
|
@ -88,6 +88,7 @@ my_off_t my_tell(File fd, myf MyFlags __attribute__((unused)))
|
|||
os_off_t pos;
|
||||
DBUG_ENTER("my_tell");
|
||||
DBUG_PRINT("my",("Fd: %d MyFlags: %d",fd, MyFlags));
|
||||
DBUG_ASSERT(fd >= 0);
|
||||
#ifdef HAVE_TELL
|
||||
pos=tell(fd);
|
||||
#else
|
||||
|
|
|
@ -109,6 +109,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) -
|
||||
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->store(name, length, system_charset_info);
|
||||
protocol->store(param->op_name, system_charset_info);
|
||||
|
@ -1138,11 +1146,7 @@ int ha_myisam::assign_to_keycache(THD* thd, HA_CHECK_OPT *check_opt)
|
|||
/* We only come here when the user did specify an index map */
|
||||
key_map kmap;
|
||||
if (get_key_map_from_key_list(&kmap, table, table_list->use_index))
|
||||
{
|
||||
errmsg= thd->net.last_error;
|
||||
error= HA_ADMIN_FAILED;
|
||||
goto err;
|
||||
}
|
||||
DBUG_RETURN(HA_ADMIN_FAILED);
|
||||
map= kmap.to_ulonglong();
|
||||
}
|
||||
|
||||
|
@ -1155,7 +1159,6 @@ int ha_myisam::assign_to_keycache(THD* thd, HA_CHECK_OPT *check_opt)
|
|||
error= HA_ADMIN_CORRUPT;
|
||||
}
|
||||
|
||||
err:
|
||||
if (error != HA_ADMIN_OK)
|
||||
{
|
||||
/* Send error to user */
|
||||
|
@ -1192,11 +1195,7 @@ int ha_myisam::preload_keys(THD* thd, HA_CHECK_OPT *check_opt)
|
|||
key_map kmap;
|
||||
get_key_map_from_key_list(&kmap, table, table_list->use_index);
|
||||
if (kmap.is_set_all())
|
||||
{
|
||||
errmsg= thd->net.last_error;
|
||||
error= HA_ADMIN_FAILED;
|
||||
goto err;
|
||||
}
|
||||
DBUG_RETURN(HA_ADMIN_FAILED);
|
||||
if (!kmap.is_clear_all())
|
||||
map= kmap.to_ulonglong();
|
||||
}
|
||||
|
|
|
@ -72,6 +72,13 @@ extern int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo,
|
|||
uint t1_keys, uint t1_recs,
|
||||
MI_KEYDEF *t2_keyinfo, MI_COLUMNDEF *t2_recinfo,
|
||||
uint t2_keys, uint t2_recs, bool strict);
|
||||
extern "C" void myrg_print_wrong_table(const char *table_name)
|
||||
{
|
||||
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
|
||||
ER_ADMIN_WRONG_MRG_TABLE, ER(ER_ADMIN_WRONG_MRG_TABLE),
|
||||
table_name);
|
||||
}
|
||||
|
||||
|
||||
const char **ha_myisammrg::bas_ext() const
|
||||
{
|
||||
|
@ -121,6 +128,8 @@ int ha_myisammrg::open(const char *name, int mode, uint test_if_locked)
|
|||
{
|
||||
DBUG_PRINT("error",("reclength: %lu mean_rec_length: %lu",
|
||||
table->s->reclength, 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;
|
||||
goto err;
|
||||
}
|
||||
|
@ -139,12 +148,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.fields, false))
|
||||
{
|
||||
my_free((gptr) recinfo, MYF(0));
|
||||
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((gptr) recinfo, MYF(0));
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
}
|
||||
my_free((gptr) recinfo, MYF(0));
|
||||
if (error == HA_ERR_WRONG_MRG_TABLE_DEF)
|
||||
goto err;
|
||||
#if !defined(BIG_TABLES) || SIZEOF_OFF_T == 4
|
||||
/* Merge table has more than 2G rows */
|
||||
if (table->s->crashed)
|
||||
|
@ -597,3 +613,9 @@ void ha_myisammrg::append_create_info(String *packet)
|
|||
}
|
||||
packet->append(')');
|
||||
}
|
||||
|
||||
|
||||
int ha_myisammrg::check(THD* thd, HA_CHECK_OPT* check_opt)
|
||||
{
|
||||
return HA_ADMIN_OK;
|
||||
}
|
||||
|
|
|
@ -81,4 +81,5 @@ class ha_myisammrg: public handler
|
|||
void update_create_info(HA_CREATE_INFO *create_info);
|
||||
void append_create_info(String *packet);
|
||||
MYRG_INFO *myrg_info() { return file; }
|
||||
int check(THD* thd, HA_CHECK_OPT* check_opt);
|
||||
};
|
||||
|
|
|
@ -178,6 +178,13 @@ MYSQL_LOCK *mysql_lock_tables(THD *thd, TABLE **tables, uint count,
|
|||
}
|
||||
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
|
||||
sql_lock->lock_count= 0; // Locks are already freed
|
||||
}
|
||||
|
|
|
@ -5827,7 +5827,7 @@ log and this option does nothing anymore.",
|
|||
(gptr*) &dflt_key_cache_var.param_block_size,
|
||||
(gptr*) 0,
|
||||
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,
|
||||
"The minimum percentage of warm blocks in key cache",
|
||||
(gptr*) &dflt_key_cache_var.param_division_limit,
|
||||
|
|
|
@ -5633,4 +5633,5 @@ ER_WRONG_STRING_LENGTH
|
|||
eng "String '%-.70s' is too long for %s (should be no longer than %d)"
|
||||
ER_NON_INSERTABLE_TABLE
|
||||
eng "The target table %-.100s of the %s is not insertable-into"
|
||||
|
||||
ER_ADMIN_WRONG_MRG_TABLE
|
||||
eng "Table '%-.64s' is differently defined or of non-MyISAM type or doesn't exist"
|
||||
|
|
|
@ -205,8 +205,8 @@ void push_warning_printf(THD *thd, MYSQL_ERROR::enum_warning_level level,
|
|||
TRUE Error sending data to client
|
||||
*/
|
||||
|
||||
static const char *warning_level_names[]= {"Note", "Warning", "Error", "?"};
|
||||
static int warning_level_length[]= { 4, 7, 5, 1 };
|
||||
const char *warning_level_names[]= {"Note", "Warning", "Error", "?"};
|
||||
int warning_level_length[]= { 4, 7, 5, 1 };
|
||||
|
||||
bool mysqld_show_warnings(THD *thd, ulong levels_to_show)
|
||||
{
|
||||
|
|
|
@ -39,3 +39,5 @@ void push_warning_printf(THD *thd, MYSQL_ERROR::enum_warning_level level,
|
|||
uint code, const char *format, ...);
|
||||
void mysql_reset_errors(THD *thd, bool force);
|
||||
bool mysqld_show_warnings(THD *thd, ulong levels_to_show);
|
||||
extern const char *warning_level_names[];
|
||||
extern int warning_level_length[];
|
||||
|
|
|
@ -2284,33 +2284,16 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
|
|||
*/
|
||||
if (!table->table)
|
||||
{
|
||||
char buf[ERRMSGSIZE+ERRMSGSIZE+2];
|
||||
const char *err_msg;
|
||||
protocol->prepare_for_resend();
|
||||
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 (!thd->warn_list.elements)
|
||||
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
|
||||
ER_CHECK_NO_SUCH_TABLE, ER(ER_CHECK_NO_SUCH_TABLE));
|
||||
/* if it was a view will check md5 sum */
|
||||
if (table->view &&
|
||||
view_checksum(thd, table) == HA_ADMIN_WRONG_CHECKSUM)
|
||||
{
|
||||
strxmov(buf, err_msg, "; ", ER(ER_VIEW_CHECKSUM), NullS);
|
||||
err_msg= (const char *)buf;
|
||||
}
|
||||
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
|
||||
*/
|
||||
close_thread_tables(thd);
|
||||
lex->reset_query_tables_list(FALSE);
|
||||
if (protocol->write())
|
||||
goto err;
|
||||
continue;
|
||||
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_ERROR,
|
||||
ER_VIEW_CHECKSUM, ER(ER_VIEW_CHECKSUM));
|
||||
result_code= HA_ADMIN_CORRUPT;
|
||||
goto send_result;
|
||||
}
|
||||
|
||||
if (table->view)
|
||||
|
@ -2392,6 +2375,22 @@ send_result:
|
|||
|
||||
lex->cleanup_after_one_table_open();
|
||||
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],
|
||||
warning_level_length[err->level], 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->store(table_name, system_charset_info);
|
||||
protocol->store(operator_name, system_charset_info);
|
||||
|
@ -2918,7 +2917,7 @@ bool mysql_check_table(THD* thd, TABLE_LIST* tables,HA_CHECK_OPT* check_opt)
|
|||
DBUG_ENTER("mysql_check_table");
|
||||
DBUG_RETURN(mysql_admin_table(thd, tables, check_opt,
|
||||
"check", lock_type,
|
||||
0, HA_OPEN_FOR_REPAIR, 0, 0,
|
||||
0, 0, HA_OPEN_FOR_REPAIR, 0,
|
||||
&handler::ha_check, &view_checksum));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue