Merge svojtovich@bk-internal.mysql.com:/home/bk/mysql-5.1
into may.pils.ru:/home/svoj/devel/bk/mysql-5.1-engines sql/sql_update.cc: Auto merged sql/share/errmsg.txt: Auto merged storage/csv/ha_tina.cc: Auto merged storage/myisammrg/ha_myisammrg.cc: Auto merged mysql-test/r/windows.result: Use remote. mysql-test/t/windows.test: Use remote.
This commit is contained in:
commit
b5ae1184d7
@ -5205,3 +5205,22 @@ select * from bug15205;
|
||||
val
|
||||
drop table bug15205;
|
||||
drop table bug15205_2;
|
||||
create table bug22080_1 (id int,string varchar(64)) Engine=CSV;
|
||||
create table bug22080_2 (id int,string varchar(64)) Engine=CSV;
|
||||
create table bug22080_3 (id int,string varchar(64)) Engine=CSV;
|
||||
insert into bug22080_1 values(1,'string');
|
||||
insert into bug22080_1 values(2,'string');
|
||||
insert into bug22080_1 values(3,'string');
|
||||
"1","string"
|
||||
2","string"
|
||||
"3","string"
|
||||
check table bug22080_2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.bug22080_2 check error Corrupt
|
||||
"1","string"
|
||||
"2",string"
|
||||
"3","string"
|
||||
check table bug22080_3;
|
||||
Table Op Msg_type Msg_text
|
||||
test.bug22080_3 check error Corrupt
|
||||
drop tables bug22080_1,bug22080_2,bug22080_3;
|
||||
|
@ -178,12 +178,12 @@ t3 CREATE TABLE `t3` (
|
||||
) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=(`t1`,`t2`)
|
||||
create table t4 (a int not null, b char(10), key(a)) engine=MERGE UNION=(t1,t2);
|
||||
select * from t4;
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||
alter table t4 add column c int;
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||
flush tables;
|
||||
select * from t4;
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||
create database mysqltest;
|
||||
create table mysqltest.t6 (a int not null primary key auto_increment, message char(20));
|
||||
create table t5 (a int not null, b char(20), key(a)) engine=MERGE UNION=(test.t1,mysqltest.t6);
|
||||
@ -780,11 +780,11 @@ DROP TABLE t1, t2;
|
||||
CREATE TABLE t1(a INT) ENGINE=MEMORY;
|
||||
CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t1);
|
||||
SELECT * FROM t2;
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t2(a INT) ENGINE=MERGE UNION=(t3);
|
||||
SELECT * FROM t2;
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||
DROP TABLE t2;
|
||||
create table t1 (b bit(1));
|
||||
create table t2 (b bit(1));
|
||||
|
@ -1582,3 +1582,26 @@ select * from bug15205_2;
|
||||
select * from bug15205;
|
||||
drop table bug15205;
|
||||
drop table bug15205_2;
|
||||
|
||||
#
|
||||
# Bug#22080 "CHECK fails to identify some corruption"
|
||||
#
|
||||
|
||||
create table bug22080_1 (id int,string varchar(64)) Engine=CSV;
|
||||
create table bug22080_2 (id int,string varchar(64)) Engine=CSV;
|
||||
create table bug22080_3 (id int,string varchar(64)) Engine=CSV;
|
||||
insert into bug22080_1 values(1,'string');
|
||||
insert into bug22080_1 values(2,'string');
|
||||
insert into bug22080_1 values(3,'string');
|
||||
|
||||
# Currupt the file as described in the bug report
|
||||
--exec sed -e 's/"2"/2"/' $MYSQLTEST_VARDIR/master-data/test/bug22080_1.CSV > $MYSQLTEST_VARDIR/master-data/test/bug22080_2.CSV
|
||||
--exec sed -e 's/2","/2",/' $MYSQLTEST_VARDIR/master-data/test/bug22080_1.CSV > $MYSQLTEST_VARDIR/master-data/test/bug22080_3.CSV
|
||||
|
||||
--exec cat $MYSQLTEST_VARDIR/master-data/test/bug22080_2.CSV
|
||||
check table bug22080_2;
|
||||
|
||||
--exec cat $MYSQLTEST_VARDIR/master-data/test/bug22080_3.CSV
|
||||
check table bug22080_3;
|
||||
|
||||
drop tables bug22080_1,bug22080_2,bug22080_3;
|
||||
|
@ -3791,7 +3791,7 @@ ER_WRONG_MRG_TABLE
|
||||
cze "V-B¹echny tabulky v MERGE tabulce nejsou definovány stejnì"
|
||||
dan "Tabellerne i MERGE er ikke defineret ens"
|
||||
nla "Niet alle tabellen in de MERGE tabel hebben identieke gedefinities"
|
||||
eng "Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exists"
|
||||
eng "Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist"
|
||||
est "Kõik tabelid MERGE tabeli määratluses ei ole identsed"
|
||||
fre "Toutes les tables de la table de type MERGE n'ont pas la même définition"
|
||||
ger "Nicht alle Tabellen in der MERGE-Tabelle sind gleich definiert"
|
||||
|
@ -1217,6 +1217,8 @@ multi_update::initialize_tables(JOIN *join)
|
||||
TMP_TABLE_PARAM *tmp_param;
|
||||
|
||||
table->mark_columns_needed_for_update();
|
||||
if (ignore)
|
||||
table->file->extra(HA_EXTRA_IGNORE_DUP_KEY);
|
||||
if (table == main_table) // First table in join
|
||||
{
|
||||
if (safe_update_on_fly(join->join_tab))
|
||||
@ -1331,7 +1333,11 @@ multi_update::~multi_update()
|
||||
{
|
||||
TABLE_LIST *table;
|
||||
for (table= update_tables ; table; table= table->next_local)
|
||||
{
|
||||
table->table->no_keyread= table->table->no_cache= 0;
|
||||
if (ignore)
|
||||
table->table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
|
||||
}
|
||||
|
||||
if (tmp_tables)
|
||||
{
|
||||
|
@ -548,7 +548,10 @@ int ha_tina::encode_quote(byte *buf)
|
||||
in the code.
|
||||
*/
|
||||
if ((*field)->is_null())
|
||||
ptr= end_ptr= 0;
|
||||
{
|
||||
buffer.append(STRING_WITH_LEN("\"\","));
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
(*field)->val_str(&attribute,&attribute);
|
||||
@ -649,6 +652,7 @@ int ha_tina::find_current_row(byte *buf)
|
||||
off_t end_offset, curr_offset= current_position;
|
||||
int eoln_len;
|
||||
my_bitmap_map *org_bitmap;
|
||||
int error;
|
||||
DBUG_ENTER("ha_tina::find_current_row");
|
||||
|
||||
/*
|
||||
@ -662,23 +666,23 @@ int ha_tina::find_current_row(byte *buf)
|
||||
|
||||
/* Avoid asserts in ::store() for columns that are not going to be updated */
|
||||
org_bitmap= dbug_tmp_use_all_columns(table, table->write_set);
|
||||
error= HA_ERR_CRASHED_ON_USAGE;
|
||||
|
||||
memset(buf, 0, table->s->null_bytes);
|
||||
|
||||
for (Field **field=table->field ; *field ; field++)
|
||||
{
|
||||
buffer.length(0);
|
||||
if (file_buff->get_value(curr_offset) == '"')
|
||||
if (curr_offset < end_offset &&
|
||||
file_buff->get_value(curr_offset) == '"')
|
||||
curr_offset++; // Incrementpast the first quote
|
||||
else
|
||||
{
|
||||
dbug_tmp_restore_column_map(table->write_set, org_bitmap);
|
||||
DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE);
|
||||
}
|
||||
for(;curr_offset != end_offset; curr_offset++)
|
||||
goto err;
|
||||
for(;curr_offset < end_offset; curr_offset++)
|
||||
{
|
||||
// Need to convert line feeds!
|
||||
if (file_buff->get_value(curr_offset) == '"' &&
|
||||
(((file_buff->get_value(curr_offset + 1) == ',') &&
|
||||
(file_buff->get_value(curr_offset + 2) == '"')) ||
|
||||
((file_buff->get_value(curr_offset + 1) == ',') ||
|
||||
(curr_offset == end_offset -1 )))
|
||||
{
|
||||
curr_offset+= 2; // Move past the , and the "
|
||||
@ -708,10 +712,7 @@ int ha_tina::find_current_row(byte *buf)
|
||||
we are working with a damaged file.
|
||||
*/
|
||||
if (curr_offset == end_offset - 1)
|
||||
{
|
||||
dbug_tmp_restore_column_map(table->write_set, org_bitmap);
|
||||
DBUG_RETURN(HA_ERR_CRASHED_ON_USAGE);
|
||||
}
|
||||
goto err;
|
||||
buffer.append(file_buff->get_value(curr_offset));
|
||||
}
|
||||
}
|
||||
@ -719,11 +720,12 @@ int ha_tina::find_current_row(byte *buf)
|
||||
(*field)->store(buffer.ptr(), buffer.length(), system_charset_info);
|
||||
}
|
||||
next_position= end_offset + eoln_len;
|
||||
/* Maybe use \N for null? */
|
||||
memset(buf, 0, table->s->null_bytes); /* We do not implement nulls! */
|
||||
error= 0;
|
||||
|
||||
err:
|
||||
dbug_tmp_restore_column_map(table->write_set, org_bitmap);
|
||||
|
||||
DBUG_RETURN(0);
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -312,9 +312,22 @@ void ha_myisammrg::info(uint flag)
|
||||
if (flag & HA_STATUS_CONST)
|
||||
{
|
||||
if (table->s->key_parts && info.rec_per_key)
|
||||
{
|
||||
#ifdef HAVE_purify
|
||||
/*
|
||||
valgrind may be unhappy about it, because optimizer may access values
|
||||
between file->keys and table->key_parts, that will be uninitialized.
|
||||
It's safe though, because even if opimizer will decide to use a key
|
||||
with such a number, it'll be an error later anyway.
|
||||
*/
|
||||
bzero((char*) table->key_info[0].rec_per_key,
|
||||
sizeof(table->key_info[0].rec_per_key) * table->key_parts);
|
||||
#endif
|
||||
memcpy((char*) table->key_info[0].rec_per_key,
|
||||
(char*) info.rec_per_key,
|
||||
sizeof(table->key_info[0].rec_per_key)*table->s->key_parts);
|
||||
sizeof(table->key_info[0].rec_per_key) *
|
||||
min(file->keys, table->s->key_parts));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user