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
|
4
|
||||||
5
|
5
|
||||||
DROP TABLE bug14672;
|
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;
|
DROP TABLE bug14672;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# 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 definitions are found in hanler.h
|
||||||
These are not probably completely right.
|
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 */
|
/* Set our original buffers from pre-allocated memory */
|
||||||
buffer.set(byte_buffer, IO_SIZE, system_charset_info);
|
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)
|
if (get_mmap(share, 0) > 0)
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
|
records++;
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -668,6 +670,7 @@ int ha_tina::rnd_init(bool scan)
|
||||||
|
|
||||||
current_position= next_position= 0;
|
current_position= next_position= 0;
|
||||||
records= 0;
|
records= 0;
|
||||||
|
records_is_known= 0;
|
||||||
chain_ptr= chain;
|
chain_ptr= chain;
|
||||||
#ifdef HAVE_MADVISE
|
#ifdef HAVE_MADVISE
|
||||||
if (scan)
|
if (scan)
|
||||||
|
@ -745,7 +748,7 @@ void ha_tina::info(uint flag)
|
||||||
{
|
{
|
||||||
DBUG_ENTER("ha_tina::info");
|
DBUG_ENTER("ha_tina::info");
|
||||||
/* This is a lie, but you don't want the optimizer to see zero or 1 */
|
/* 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;
|
records= 2;
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
@ -780,6 +783,8 @@ int ha_tina::rnd_end()
|
||||||
{
|
{
|
||||||
DBUG_ENTER("ha_tina::rnd_end");
|
DBUG_ENTER("ha_tina::rnd_end");
|
||||||
|
|
||||||
|
records_is_known= 1;
|
||||||
|
|
||||||
/* First position will be truncate position, second will be increment */
|
/* First position will be truncate position, second will be increment */
|
||||||
if ((chain_ptr - chain) > 0)
|
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()
|
int ha_tina::delete_all_rows()
|
||||||
{
|
{
|
||||||
DBUG_ENTER("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));
|
int rc= my_chsize(share->data_file, 0, 0, MYF(MY_WME));
|
||||||
|
|
||||||
if (get_mmap(share, 0) > 0)
|
if (get_mmap(share, 0) > 0)
|
||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
|
|
||||||
|
records=0;
|
||||||
DBUG_RETURN(rc);
|
DBUG_RETURN(rc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,7 @@ class ha_tina: public handler
|
||||||
tina_set *chain_ptr;
|
tina_set *chain_ptr;
|
||||||
byte chain_alloced;
|
byte chain_alloced;
|
||||||
uint32 chain_size;
|
uint32 chain_size;
|
||||||
|
bool records_is_known;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ha_tina(TABLE *table_arg);
|
ha_tina(TABLE *table_arg);
|
||||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue