mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into serg.mylan:/usr/home/serg/Abk/mysql-5.0
This commit is contained in:
commit
419d82f8c2
5 changed files with 353 additions and 114 deletions
|
@ -4976,3 +4976,27 @@ c1
|
|||
4
|
||||
5
|
||||
DROP TABLE bug14672;
|
||||
create table t1 (a int) engine=csv;
|
||||
insert t1 values (1);
|
||||
delete from t1;
|
||||
affected rows: 1
|
||||
delete from t1;
|
||||
affected rows: 0
|
||||
insert t1 values (1),(2);
|
||||
delete from t1;
|
||||
affected rows: 2
|
||||
insert t1 values (1),(2),(3);
|
||||
flush tables;
|
||||
delete from t1;
|
||||
affected rows: 3
|
||||
insert t1 values (1),(2),(3),(4);
|
||||
flush tables;
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
4
|
||||
delete from t1;
|
||||
affected rows: 4
|
||||
insert t1 values (1),(2),(3),(4),(5);
|
||||
truncate table t1;
|
||||
affected rows: 0
|
||||
drop table t1;
|
||||
|
|
|
@ -1352,3 +1352,35 @@ SELECT * FROM bug14672;
|
|||
DROP TABLE bug14672;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
#
|
||||
# BUG#13406 - incorrect amount of "records deleted"
|
||||
#
|
||||
|
||||
create table t1 (a int) engine=csv;
|
||||
insert t1 values (1);
|
||||
--enable_info
|
||||
delete from t1; -- delete_row
|
||||
delete from t1; -- delete_all_rows
|
||||
--disable_info
|
||||
insert t1 values (1),(2);
|
||||
--enable_info
|
||||
delete from t1; -- delete_all_rows
|
||||
--disable_info
|
||||
insert t1 values (1),(2),(3);
|
||||
flush tables;
|
||||
--enable_info
|
||||
delete from t1; -- delete_row
|
||||
--disable_info
|
||||
insert t1 values (1),(2),(3),(4);
|
||||
flush tables;
|
||||
select count(*) from t1;
|
||||
--enable_info
|
||||
delete from t1; -- delete_all_rows
|
||||
--disable_info
|
||||
insert t1 values (1),(2),(3),(4),(5);
|
||||
--enable_info
|
||||
truncate table t1; -- truncate
|
||||
--disable_info
|
||||
drop table t1;
|
||||
|
||||
|
|
|
@ -274,7 +274,8 @@ ha_tina::ha_tina(TABLE *table_arg)
|
|||
These definitions are found in hanler.h
|
||||
These are not probably completely right.
|
||||
*/
|
||||
current_position(0), next_position(0), chain_alloced(0), chain_size(DEFAULT_CHAIN_LENGTH)
|
||||
current_position(0), next_position(0), chain_alloced(0),
|
||||
chain_size(DEFAULT_CHAIN_LENGTH), records_is_known(0)
|
||||
{
|
||||
/* Set our original buffers from pre-allocated memory */
|
||||
buffer.set(byte_buffer, IO_SIZE, system_charset_info);
|
||||
|
@ -504,6 +505,7 @@ int ha_tina::write_row(byte * buf)
|
|||
*/
|
||||
if (get_mmap(share, 0) > 0)
|
||||
DBUG_RETURN(-1);
|
||||
records++;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
|
@ -668,6 +670,7 @@ int ha_tina::rnd_init(bool scan)
|
|||
|
||||
current_position= next_position= 0;
|
||||
records= 0;
|
||||
records_is_known= 0;
|
||||
chain_ptr= chain;
|
||||
#ifdef HAVE_MADVISE
|
||||
if (scan)
|
||||
|
@ -745,7 +748,7 @@ void ha_tina::info(uint flag)
|
|||
{
|
||||
DBUG_ENTER("ha_tina::info");
|
||||
/* This is a lie, but you don't want the optimizer to see zero or 1 */
|
||||
if (records < 2)
|
||||
if (!records_is_known && records < 2)
|
||||
records= 2;
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
@ -780,6 +783,8 @@ int ha_tina::rnd_end()
|
|||
{
|
||||
DBUG_ENTER("ha_tina::rnd_end");
|
||||
|
||||
records_is_known= 1;
|
||||
|
||||
/* First position will be truncate position, second will be increment */
|
||||
if ((chain_ptr - chain) > 0)
|
||||
{
|
||||
|
@ -824,17 +829,21 @@ int ha_tina::rnd_end()
|
|||
}
|
||||
|
||||
/*
|
||||
Truncate table and others of its ilk call this.
|
||||
DELETE without WHERE calls it
|
||||
*/
|
||||
int ha_tina::delete_all_rows()
|
||||
{
|
||||
DBUG_ENTER("ha_tina::delete_all_rows");
|
||||
|
||||
if (!records_is_known)
|
||||
return (my_errno=HA_ERR_WRONG_COMMAND);
|
||||
|
||||
int rc= my_chsize(share->data_file, 0, 0, MYF(MY_WME));
|
||||
|
||||
if (get_mmap(share, 0) > 0)
|
||||
DBUG_RETURN(-1);
|
||||
|
||||
records=0;
|
||||
DBUG_RETURN(rc);
|
||||
}
|
||||
|
||||
|
|
|
@ -48,6 +48,7 @@ class ha_tina: public handler
|
|||
tina_set *chain_ptr;
|
||||
byte chain_alloced;
|
||||
uint32 chain_size;
|
||||
bool records_is_known;
|
||||
|
||||
public:
|
||||
ha_tina(TABLE *table_arg);
|
||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue