mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge mysql.com:/home/mydev/mysql-4.1-bug14980
into mysql.com:/home/mydev/mysql-5.0-bug14980 include/my_base.h: Auto merged myisam/mi_delete.c: Auto merged myisam/mi_key.c: Auto merged myisam/mi_rnext_same.c: Auto merged myisam/mi_unique.c: Auto merged myisam/mi_update.c: Auto merged myisam/mi_write.c: Auto merged mysql-test/r/myisam.result: SCCS merged mysql-test/t/myisam.test: SCCS merged
This commit is contained in:
@ -399,7 +399,7 @@ enum ha_base_keytype {
|
|||||||
#define HA_STATE_BUFF_SAVED 512 /* If current keybuff is info->buff */
|
#define HA_STATE_BUFF_SAVED 512 /* If current keybuff is info->buff */
|
||||||
#define HA_STATE_ROW_CHANGED 1024 /* To invalide ROW cache */
|
#define HA_STATE_ROW_CHANGED 1024 /* To invalide ROW cache */
|
||||||
#define HA_STATE_EXTEND_BLOCK 2048
|
#define HA_STATE_EXTEND_BLOCK 2048
|
||||||
#define HA_STATE_RNEXT_SAME 4096 /* rnext_same was called */
|
#define HA_STATE_RNEXT_SAME 4096 /* rnext_same occupied lastkey2 */
|
||||||
|
|
||||||
/* myisampack expects no more than 32 field types. */
|
/* myisampack expects no more than 32 field types. */
|
||||||
enum en_fieldtype {
|
enum en_fieldtype {
|
||||||
|
@ -88,6 +88,8 @@ int mi_delete(MI_INFO *info,const byte *record)
|
|||||||
_mi_make_key(info,i,old_key,record,info->lastpos)))
|
_mi_make_key(info,i,old_key,record,info->lastpos)))
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
/* The above changed info->lastkey2. Inform mi_rnext_same(). */
|
||||||
|
info->update&= ~HA_STATE_RNEXT_SAME;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -444,6 +444,10 @@ static int _mi_put_key_in_record(register MI_INFO *info, uint keynr,
|
|||||||
(char*) &blob_ptr,sizeof(char*));
|
(char*) &blob_ptr,sizeof(char*));
|
||||||
memcpy(blob_ptr,key,length);
|
memcpy(blob_ptr,key,length);
|
||||||
blob_ptr+=length;
|
blob_ptr+=length;
|
||||||
|
|
||||||
|
/* The above changed info->lastkey2. Inform mi_rnext_same(). */
|
||||||
|
info->update&= ~HA_STATE_RNEXT_SAME;
|
||||||
|
|
||||||
_my_store_blob_length(record+keyseg->start,
|
_my_store_blob_length(record+keyseg->start,
|
||||||
(uint) keyseg->bit_start,length);
|
(uint) keyseg->bit_start,length);
|
||||||
key+=length;
|
key+=length;
|
||||||
|
@ -102,4 +102,4 @@ int mi_rnext_same(MI_INFO *info, byte *buf)
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
DBUG_RETURN(my_errno);
|
DBUG_RETURN(my_errno);
|
||||||
} /* mi_rnext */
|
} /* mi_rnext_same */
|
||||||
|
@ -30,6 +30,9 @@ my_bool mi_check_unique(MI_INFO *info, MI_UNIQUEDEF *def, byte *record,
|
|||||||
mi_unique_store(record+key->seg->start, unique_hash);
|
mi_unique_store(record+key->seg->start, unique_hash);
|
||||||
_mi_make_key(info,def->key,key_buff,record,0);
|
_mi_make_key(info,def->key,key_buff,record,0);
|
||||||
|
|
||||||
|
/* The above changed info->lastkey2. Inform mi_rnext_same(). */
|
||||||
|
info->update&= ~HA_STATE_RNEXT_SAME;
|
||||||
|
|
||||||
if (_mi_search(info,info->s->keyinfo+def->key,key_buff,MI_UNIQUE_HASH_LENGTH,
|
if (_mi_search(info,info->s->keyinfo+def->key,key_buff,MI_UNIQUE_HASH_LENGTH,
|
||||||
SEARCH_FIND,info->s->state.key_root[def->key]))
|
SEARCH_FIND,info->s->state.key_root[def->key]))
|
||||||
{
|
{
|
||||||
|
@ -111,6 +111,10 @@ int mi_update(register MI_INFO *info, const byte *oldrec, byte *newrec)
|
|||||||
{
|
{
|
||||||
uint new_length=_mi_make_key(info,i,new_key,newrec,pos);
|
uint new_length=_mi_make_key(info,i,new_key,newrec,pos);
|
||||||
uint old_length=_mi_make_key(info,i,old_key,oldrec,pos);
|
uint old_length=_mi_make_key(info,i,old_key,oldrec,pos);
|
||||||
|
|
||||||
|
/* The above changed info->lastkey2. Inform mi_rnext_same(). */
|
||||||
|
info->update&= ~HA_STATE_RNEXT_SAME;
|
||||||
|
|
||||||
if (new_length != old_length ||
|
if (new_length != old_length ||
|
||||||
memcmp((byte*) old_key,(byte*) new_key,new_length))
|
memcmp((byte*) old_key,(byte*) new_key,new_length))
|
||||||
{
|
{
|
||||||
|
@ -132,6 +132,10 @@ int mi_write(MI_INFO *info, byte *record)
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The above changed info->lastkey2. Inform mi_rnext_same(). */
|
||||||
|
info->update&= ~HA_STATE_RNEXT_SAME;
|
||||||
|
|
||||||
if (local_lock_tree)
|
if (local_lock_tree)
|
||||||
rw_unlock(&share->key_root_lock[i]);
|
rw_unlock(&share->key_root_lock[i]);
|
||||||
}
|
}
|
||||||
|
@ -729,6 +729,24 @@ select * from t1 where bob is null and cip=1;
|
|||||||
cip time score bob
|
cip time score bob
|
||||||
1 00:01:00 0 NULL
|
1 00:01:00 0 NULL
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (
|
||||||
|
id1 int not null auto_increment,
|
||||||
|
id2 int not null default '0',
|
||||||
|
t text not null,
|
||||||
|
primary key (id1),
|
||||||
|
key x (id2, t(32))
|
||||||
|
) engine=myisam;
|
||||||
|
insert into t1 (id2, t) values
|
||||||
|
(10, 'abc'), (10, 'abc'), (10, 'abc'),
|
||||||
|
(20, 'abc'), (20, 'abc'), (20, 'def'),
|
||||||
|
(10, 'abc'), (10, 'abc');
|
||||||
|
select count(*) from t1 where id2 = 10;
|
||||||
|
count(*)
|
||||||
|
5
|
||||||
|
select count(id1) from t1 where id2 = 10;
|
||||||
|
count(id1)
|
||||||
|
5
|
||||||
|
drop table t1;
|
||||||
set storage_engine=MyISAM;
|
set storage_engine=MyISAM;
|
||||||
drop table if exists t1,t2,t3;
|
drop table if exists t1,t2,t3;
|
||||||
--- Testing varchar ---
|
--- Testing varchar ---
|
||||||
|
@ -678,6 +678,25 @@ select * from t1 where bob is null and cip=1;
|
|||||||
create index bug on t1 (bob(22), cip, time);
|
create index bug on t1 (bob(22), cip, time);
|
||||||
select * from t1 where bob is null and cip=1;
|
select * from t1 where bob is null and cip=1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#14980 - COUNT(*) incorrect on MyISAM table with certain INDEX
|
||||||
|
#
|
||||||
|
create table t1 (
|
||||||
|
id1 int not null auto_increment,
|
||||||
|
id2 int not null default '0',
|
||||||
|
t text not null,
|
||||||
|
primary key (id1),
|
||||||
|
key x (id2, t(32))
|
||||||
|
) engine=myisam;
|
||||||
|
insert into t1 (id2, t) values
|
||||||
|
(10, 'abc'), (10, 'abc'), (10, 'abc'),
|
||||||
|
(20, 'abc'), (20, 'abc'), (20, 'def'),
|
||||||
|
(10, 'abc'), (10, 'abc');
|
||||||
|
select count(*) from t1 where id2 = 10;
|
||||||
|
select count(id1) from t1 where id2 = 10;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
#
|
#
|
||||||
|
Reference in New Issue
Block a user