mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
A bug with tables with different ref_length's whose order is
changed in table initialization
This commit is contained in:
@@ -50064,6 +50064,9 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}.
|
|||||||
|
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item
|
@item
|
||||||
|
Fixed bug in multi-table delete when tables are re-ordered in table
|
||||||
|
initialization method and ref_length's are of different sizes
|
||||||
|
@item
|
||||||
Fixed bug in query cache initialisation with very small query cache size.
|
Fixed bug in query cache initialisation with very small query cache size.
|
||||||
@item
|
@item
|
||||||
Allow @code{DEFAULT} with @code{INSERT} statement.
|
Allow @code{DEFAULT} with @code{INSERT} statement.
|
||||||
|
@@ -70,3 +70,33 @@ create table t1(id1 int not null primary key, t varchar(100)) pack_keys = 1;
|
|||||||
create table t2(id2 int not null, t varchar(100), index(id2)) pack_keys = 1;
|
create table t2(id2 int not null, t varchar(100), index(id2)) pack_keys = 1;
|
||||||
delete t1 from t1,t2 where t1.id1 = t2.id2 and t1.id1 > 500;
|
delete t1 from t1,t2 where t1.id1 = t2.id2 and t1.id1 > 500;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
DROP TABLE IF EXISTS a,b,c;
|
||||||
|
CREATE TABLE a (
|
||||||
|
id int(11) NOT NULL default '0',
|
||||||
|
name varchar(10) default NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
) TYPE=MyISAM;
|
||||||
|
INSERT INTO a VALUES (1,'aaa'),(2,'aaa'),(3,'aaa');
|
||||||
|
CREATE TABLE b (
|
||||||
|
id int(11) NOT NULL default '0',
|
||||||
|
name varchar(10) default NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
) TYPE=MyISAM;
|
||||||
|
INSERT INTO b VALUES (2,'bbb'),(3,'bbb'),(4,'bbb');
|
||||||
|
CREATE TABLE c (
|
||||||
|
id int(11) NOT NULL default '0',
|
||||||
|
mydate datetime default NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
) TYPE=MyISAM;
|
||||||
|
INSERT INTO c VALUES (1,'2002-02-04 00:00:00'),(3,'2002-05-12 00:00:00'),(5,'2002-05-12 00:00:00'),(6,'2002-06-22
|
||||||
|
00:00:00'),(7,'2002-07-22 00:00:00');
|
||||||
|
delete a,b,c from a,b,c
|
||||||
|
where to_days(now())-to_days(c.mydate)>=30
|
||||||
|
and c.id=a.id and c.id=b.id;
|
||||||
|
select * from c;
|
||||||
|
id mydate
|
||||||
|
1 2002-02-04 00:00:00
|
||||||
|
5 2002-05-12 00:00:00
|
||||||
|
6 2002-06-22 00:00:00
|
||||||
|
7 2002-07-22 00:00:00
|
||||||
|
DROP TABLE IF EXISTS a,b,c;
|
||||||
|
@@ -80,3 +80,28 @@ while ($1)
|
|||||||
enable_query_log;
|
enable_query_log;
|
||||||
delete t1 from t1,t2 where t1.id1 = t2.id2 and t1.id1 > 500;
|
delete t1 from t1,t2 where t1.id1 = t2.id2 and t1.id1 > 500;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
DROP TABLE IF EXISTS a,b,c;
|
||||||
|
CREATE TABLE a (
|
||||||
|
id int(11) NOT NULL default '0',
|
||||||
|
name varchar(10) default NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
) TYPE=MyISAM;
|
||||||
|
INSERT INTO a VALUES (1,'aaa'),(2,'aaa'),(3,'aaa');
|
||||||
|
CREATE TABLE b (
|
||||||
|
id int(11) NOT NULL default '0',
|
||||||
|
name varchar(10) default NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
) TYPE=MyISAM;
|
||||||
|
INSERT INTO b VALUES (2,'bbb'),(3,'bbb'),(4,'bbb');
|
||||||
|
CREATE TABLE c (
|
||||||
|
id int(11) NOT NULL default '0',
|
||||||
|
mydate datetime default NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
) TYPE=MyISAM;
|
||||||
|
INSERT INTO c VALUES (1,'2002-02-04 00:00:00'),(3,'2002-05-12 00:00:00'),(5,'2002-05-12 00:00:00'),(6,'2002-06-22
|
||||||
|
00:00:00'),(7,'2002-07-22 00:00:00');
|
||||||
|
delete a,b,c from a,b,c
|
||||||
|
where to_days(now())-to_days(c.mydate)>=30
|
||||||
|
and c.id=a.id and c.id=b.id;
|
||||||
|
select * from c;
|
||||||
|
DROP TABLE IF EXISTS a,b,c;
|
||||||
|
@@ -215,21 +215,8 @@ multi_delete::multi_delete(THD *thd_arg, TABLE_LIST *dt,
|
|||||||
num_of_tables(num_of_tables_arg), error(0), lock_option(lock_option_arg),
|
num_of_tables(num_of_tables_arg), error(0), lock_option(lock_option_arg),
|
||||||
do_delete(false)
|
do_delete(false)
|
||||||
{
|
{
|
||||||
uint counter=0;
|
|
||||||
not_trans_safe=false;
|
not_trans_safe=false;
|
||||||
tempfiles = (Unique **) sql_calloc(sizeof(Unique *) * (num_of_tables-1));
|
tempfiles = (Unique **) sql_calloc(sizeof(Unique *) * (num_of_tables-1));
|
||||||
|
|
||||||
/* Don't use key read with MULTI-TABLE-DELETE */
|
|
||||||
dt->table->used_keys=0;
|
|
||||||
for (dt=dt->next ; dt ; dt=dt->next,counter++)
|
|
||||||
{
|
|
||||||
TABLE *table=dt->table;
|
|
||||||
table->used_keys=0;
|
|
||||||
tempfiles[counter] = new Unique (refposcmp2,
|
|
||||||
(void *) &table->file->ref_length,
|
|
||||||
table->file->ref_length,
|
|
||||||
MEM_STRIP_BUF_SIZE);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -260,6 +247,7 @@ multi_delete::prepare(List<Item> &values)
|
|||||||
void
|
void
|
||||||
multi_delete::initialize_tables(JOIN *join)
|
multi_delete::initialize_tables(JOIN *join)
|
||||||
{
|
{
|
||||||
|
int counter=0;
|
||||||
TABLE_LIST *walk;
|
TABLE_LIST *walk;
|
||||||
table_map tables_to_delete_from=0;
|
table_map tables_to_delete_from=0;
|
||||||
for (walk= delete_tables ; walk ; walk=walk->next)
|
for (walk= delete_tables ; walk ; walk=walk->next)
|
||||||
@@ -281,6 +269,19 @@ multi_delete::initialize_tables(JOIN *join)
|
|||||||
not_trans_safe=true;
|
not_trans_safe=true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
walk= delete_tables;
|
||||||
|
walk->table->used_keys=0;
|
||||||
|
for (walk=walk->next ; walk ; walk=walk->next, counter++)
|
||||||
|
{
|
||||||
|
tables_to_delete_from|= walk->table->map;
|
||||||
|
TABLE *table=walk->table;
|
||||||
|
/* Don't use key read with MULTI-TABLE-DELETE */
|
||||||
|
table->used_keys=0;
|
||||||
|
tempfiles[counter] = new Unique (refposcmp2,
|
||||||
|
(void *) &table->file->ref_length,
|
||||||
|
table->file->ref_length,
|
||||||
|
MEM_STRIP_BUF_SIZE);
|
||||||
|
}
|
||||||
init_ftfuncs(thd,1);
|
init_ftfuncs(thd,1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user