Commit 16213b21 authored by unknown's avatar unknown
Browse files

Merge bk-internal.mysql.com:/home/bk/mysql-5.0

into serg.mylan:/usr/home/serg/Abk/mysql-5.0


sql/share/errmsg.txt:
  Auto merged
parents 57e1c5aa 3a84f6e2
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -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;
+32 −0
Original line number Diff line number Diff line
@@ -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;
+12 −3
Original line number Diff line number Diff line
@@ -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);
}

+1 −0
Original line number Diff line number Diff line
@@ -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);
+284 −111

File changed.

Preview size limit exceeded, changes collapsed.