Commit 01cad639 authored by unknown's avatar unknown
Browse files

Merge pchardin@bk-internal.mysql.com:/home/bk/mysql-4.1

into  mysql.com:/home/cps/mysql/trees/mysql-4.1

parents 0e878d7e b0829011
Loading
Loading
Loading
Loading
+47 −0
Original line number Diff line number Diff line
@@ -4929,3 +4929,50 @@ Warnings:
Note	1051	Unknown table 't2'
Note	1051	Unknown table 't3'
Note	1051	Unknown table 't4'
DROP TABLE IF EXISTS bug13894;
CREATE TABLE bug13894 ( val integer ) ENGINE = CSV;
INSERT INTO bug13894 VALUES (5);
INSERT INTO bug13894 VALUES (10);
INSERT INTO bug13894 VALUES (11);
INSERT INTO bug13894 VALUES (10);
SELECT * FROM bug13894;
val
5
10
11
10
UPDATE  bug13894 SET val=6 WHERE val=10;
SELECT * FROM bug13894;
val
5
11
6
6
DROP TABLE bug13894;
DROP TABLE IF EXISTS bug14672;
CREATE TABLE bug14672 (c1 integer) engine = CSV;
INSERT INTO bug14672 VALUES (1), (2), (3);
SELECT * FROM bug14672;
c1
1
2
3
DELETE FROM bug14672 WHERE c1 = 2;
SELECT * FROM bug14672;
c1
1
3
INSERT INTO bug14672 VALUES (4);
SELECT * FROM bug14672;
c1
1
3
4
INSERT INTO bug14672 VALUES (5);
SELECT * FROM bug14672;
c1
1
3
4
5
DROP TABLE bug14672;
+37 −0
Original line number Diff line number Diff line
@@ -1314,4 +1314,41 @@ select period from t1;

drop table if exists t1,t2,t3,t4;

#
# Bug #13894    Server crashes on update of CSV table
#

--disable_warnings
DROP TABLE IF EXISTS bug13894;
--enable_warnings

CREATE TABLE bug13894 ( val integer ) ENGINE = CSV;
INSERT INTO bug13894 VALUES (5);
INSERT INTO bug13894 VALUES (10);
INSERT INTO bug13894 VALUES (11);
INSERT INTO bug13894 VALUES (10);
SELECT * FROM bug13894;
UPDATE  bug13894 SET val=6 WHERE val=10;
SELECT * FROM bug13894;
DROP TABLE bug13894;

#
# Bug #14672    Bug in deletion
#

--disable_warnings
DROP TABLE IF EXISTS bug14672;
--enable_warnings

CREATE TABLE bug14672 (c1 integer) engine = CSV;   
INSERT INTO bug14672 VALUES (1), (2), (3);
SELECT * FROM bug14672;  
DELETE FROM bug14672 WHERE c1 = 2;   
SELECT * FROM bug14672;  
INSERT INTO bug14672 VALUES (4);   
SELECT * FROM bug14672;  
INSERT INTO bug14672 VALUES (5);   
SELECT * FROM bug14672;  
DROP TABLE bug14672;

# End of 4.1 tests
+11 −11
Original line number Diff line number Diff line
@@ -59,11 +59,15 @@ static int tina_init= 0;
 *****************************************************************************/

/*
  Used for sorting  chains.
  Used for sorting chains with qsort().
*/
int sort_set (tina_set *a, tina_set *b)
{
  return ( a->begin > b->begin ? 1 : ( a->begin < b->begin ? -1 : 0 ) );
  /*
    We assume that intervals do not intersect. So, it is enought to compare
    any two points. Here we take start of intervals for comparison.
  */
  return ( a->begin > b->begin ? -1 : ( a->begin < b->begin ? 1 : 0 ) );
}

static byte* tina_get_key(TINA_SHARE *share,uint *length,
@@ -162,7 +166,8 @@ static TINA_SHARE *get_share(const char *table_name, TABLE *table)
    thr_lock_init(&share->lock);
    pthread_mutex_init(&share->mutex,MY_MUTEX_INIT_FAST);

    if ((share->data_file= my_open(data_file_name, O_RDWR, MYF(0))) == -1)
    if ((share->data_file= my_open(data_file_name, O_RDWR|O_APPEND,
                                   MYF(0))) == -1)
      goto error2;

    /* We only use share->data_file for writing, so we scan to the end to append */
@@ -739,13 +744,8 @@ int ha_tina::rnd_end()
    qsort(chain, (size_t)(chain_ptr - chain), sizeof(tina_set), (qsort_cmp)sort_set);
    for (ptr= chain; ptr < chain_ptr; ptr++)
    {
      /* We peek a head to see if this is the last chain */
      if (ptr+1 == chain_ptr)
      memmove(share->mapped_file + ptr->begin, share->mapped_file + ptr->end,
              length - (size_t)ptr->end);
      else
        memmove((caddr_t)share->mapped_file + ptr->begin, (caddr_t)share->mapped_file + ptr->end,
                (size_t)((ptr++)->begin - ptr->end));
      length= length - (size_t)(ptr->end - ptr->begin);
    }