2001-06-24 21:11:00 +02:00
|
|
|
#
|
2002-11-30 23:48:35 +01:00
|
|
|
# Test of update statement that uses many tables.
|
2001-06-24 21:11:00 +02:00
|
|
|
#
|
|
|
|
|
2005-04-04 21:43:58 +02:00
|
|
|
# Requires grants, so won't work with embedded server test
|
|
|
|
-- source include/not_embedded.inc
|
|
|
|
|
2003-01-06 00:48:59 +01:00
|
|
|
--disable_warnings
|
2001-06-12 01:28:26 +02:00
|
|
|
drop table if exists t1,t2,t3;
|
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-07 23:16:17 +02:00
|
|
|
drop database if exists mysqltest;
|
2004-12-30 23:44:00 +01:00
|
|
|
drop view if exists v1;
|
2004-12-31 11:04:35 +01:00
|
|
|
--error 0,1141,1147
|
2004-10-07 09:50:13 +02:00
|
|
|
revoke all privileges on mysqltest.t1 from mysqltest_1@localhost;
|
2004-12-31 11:04:35 +01:00
|
|
|
--error 0,1141,1147
|
2004-10-07 09:50:13 +02:00
|
|
|
revoke all privileges on mysqltest.* from mysqltest_1@localhost;
|
|
|
|
delete from mysql.user where user=_binary'mysqltest_1';
|
2003-01-06 00:48:59 +01:00
|
|
|
--enable_warnings
|
|
|
|
|
2001-06-12 01:28:26 +02:00
|
|
|
create table t1(id1 int not null auto_increment primary key, t char(12));
|
2001-07-01 12:20:53 +02:00
|
|
|
create table t2(id2 int not null, t char(12));
|
2001-06-12 01:28:26 +02:00
|
|
|
create table t3(id3 int not null, t char(12), index(id3));
|
2001-09-28 07:05:54 +02:00
|
|
|
disable_query_log;
|
2001-12-26 15:49:10 +01:00
|
|
|
let $1 = 100;
|
2001-06-12 01:28:26 +02:00
|
|
|
while ($1)
|
|
|
|
{
|
2001-06-16 12:58:01 +02:00
|
|
|
let $2 = 5;
|
2001-06-12 01:28:26 +02:00
|
|
|
eval insert into t1(t) values ('$1');
|
|
|
|
while ($2)
|
|
|
|
{
|
|
|
|
eval insert into t2(id2,t) values ($1,'$2');
|
2001-06-16 12:58:01 +02:00
|
|
|
let $3 = 10;
|
|
|
|
while ($3)
|
|
|
|
{
|
|
|
|
eval insert into t3(id3,t) values ($1,'$2');
|
|
|
|
dec $3;
|
|
|
|
}
|
2001-06-12 01:28:26 +02:00
|
|
|
dec $2;
|
|
|
|
}
|
|
|
|
dec $1;
|
|
|
|
}
|
2001-09-28 07:05:54 +02:00
|
|
|
enable_query_log;
|
2002-03-16 02:44:44 +01:00
|
|
|
|
|
|
|
select count(*) from t1 where id1 > 95;
|
|
|
|
select count(*) from t2 where id2 > 95;
|
|
|
|
select count(*) from t3 where id3 > 95;
|
|
|
|
|
2001-12-26 15:49:10 +01:00
|
|
|
update t1,t2,t3 set t1.t="aaa", t2.t="bbb", t3.t="cc" where t1.id1 = t2.id2 and t2.id2 = t3.id3 and t1.id1 > 90;
|
2002-03-16 02:44:44 +01:00
|
|
|
select count(*) from t1 where t = "aaa";
|
|
|
|
select count(*) from t1 where id1 > 90;
|
|
|
|
select count(*) from t2 where t = "bbb";
|
|
|
|
select count(*) from t2 where id2 > 90;
|
|
|
|
select count(*) from t3 where t = "cc";
|
|
|
|
select count(*) from t3 where id3 > 90;
|
2001-12-26 15:49:10 +01:00
|
|
|
delete t1.*, t2.*, t3.* from t1,t2,t3 where t1.id1 = t2.id2 and t2.id2 = t3.id3 and t1.id1 > 95;
|
2001-06-16 12:58:01 +02:00
|
|
|
|
|
|
|
check table t1, t2, t3;
|
|
|
|
|
2001-12-26 15:49:10 +01:00
|
|
|
select count(*) from t1 where id1 > 95;
|
|
|
|
select count(*) from t2 where id2 > 95;
|
|
|
|
select count(*) from t3 where id3 > 95;
|
2001-06-16 12:58:01 +02:00
|
|
|
|
2001-12-26 15:49:10 +01:00
|
|
|
delete t1, t2, t3 from t1,t2,t3 where t1.id1 = t2.id2 and t2.id2 = t3.id3 and t1.id1 > 5;
|
|
|
|
select count(*) from t1 where id1 > 5;
|
|
|
|
select count(*) from t2 where id2 > 5;
|
|
|
|
select count(*) from t3 where id3 > 5;
|
2001-06-24 21:11:00 +02:00
|
|
|
|
2001-12-26 15:49:10 +01:00
|
|
|
delete from t1, t2, t3 using t1,t2,t3 where t1.id1 = t2.id2 and t2.id2 = t3.id3 and t1.id1 > 0;
|
2001-06-24 21:11:00 +02:00
|
|
|
|
|
|
|
# These queries will force a scan of the table
|
|
|
|
select count(*) from t1 where id1;
|
|
|
|
select count(*) from t2 where id2;
|
|
|
|
select count(*) from t3 where id3;
|
|
|
|
drop table t1,t2,t3;
|
2003-12-19 15:25:50 +01:00
|
|
|
|
2002-06-11 21:45:51 +02:00
|
|
|
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;
|
2002-06-04 19:34:13 +02:00
|
|
|
disable_query_log;
|
|
|
|
let $1 = 1000;
|
|
|
|
while ($1)
|
|
|
|
{
|
|
|
|
let $2 = 5;
|
2002-06-11 21:45:51 +02:00
|
|
|
eval insert into t1 values ($1,'aaaaaaaaaaaaaaaaaaaa');
|
2002-06-04 19:34:13 +02:00
|
|
|
while ($2)
|
|
|
|
{
|
|
|
|
eval insert into t2(id2,t) values ($1,'bbbbbbbbbbbbbbbbb');
|
|
|
|
dec $2;
|
|
|
|
}
|
|
|
|
dec $1;
|
|
|
|
}
|
|
|
|
enable_query_log;
|
2002-06-11 21:45:51 +02:00
|
|
|
delete t1 from t1,t2 where t1.id1 = t2.id2 and t1.id1 > 500;
|
2002-06-04 19:34:13 +02:00
|
|
|
drop table t1,t2;
|
2002-11-29 15:40:18 +01:00
|
|
|
|
|
|
|
CREATE TABLE t1 (
|
2002-07-31 18:53:06 +02:00
|
|
|
id int(11) NOT NULL default '0',
|
|
|
|
name varchar(10) default NULL,
|
|
|
|
PRIMARY KEY (id)
|
2003-12-10 05:31:42 +01:00
|
|
|
) ENGINE=MyISAM;
|
2002-11-29 15:40:18 +01:00
|
|
|
INSERT INTO t1 VALUES (1,'aaa'),(2,'aaa'),(3,'aaa');
|
|
|
|
CREATE TABLE t2 (
|
2002-07-31 18:53:06 +02:00
|
|
|
id int(11) NOT NULL default '0',
|
|
|
|
name varchar(10) default NULL,
|
|
|
|
PRIMARY KEY (id)
|
2003-12-10 05:31:42 +01:00
|
|
|
) ENGINE=MyISAM;
|
2002-11-29 15:40:18 +01:00
|
|
|
INSERT INTO t2 VALUES (2,'bbb'),(3,'bbb'),(4,'bbb');
|
|
|
|
CREATE TABLE t3 (
|
2002-07-31 18:53:06 +02:00
|
|
|
id int(11) NOT NULL default '0',
|
|
|
|
mydate datetime default NULL,
|
|
|
|
PRIMARY KEY (id)
|
2003-12-10 05:31:42 +01:00
|
|
|
) ENGINE=MyISAM;
|
2002-11-29 15:40:18 +01:00
|
|
|
INSERT INTO t3 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
|
2002-07-31 18:53:06 +02:00
|
|
|
00:00:00'),(7,'2002-07-22 00:00:00');
|
2002-11-29 15:40:18 +01:00
|
|
|
delete t1,t2,t3 from t1,t2,t3 where to_days(now())-to_days(t3.mydate)>=30 and t3.id=t1.id and t3.id=t2.id;
|
|
|
|
select * from t3;
|
2003-01-06 00:48:59 +01:00
|
|
|
DROP TABLE t1,t2,t3;
|
2002-11-29 15:40:18 +01:00
|
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS `t1` (
|
2002-08-06 20:24:12 +02:00
|
|
|
`id` int(11) NOT NULL auto_increment,
|
|
|
|
`tst` text,
|
|
|
|
`tst1` text,
|
|
|
|
PRIMARY KEY (`id`)
|
2003-12-10 05:31:42 +01:00
|
|
|
) ENGINE=MyISAM;
|
2002-08-06 20:24:12 +02:00
|
|
|
|
2002-11-29 15:40:18 +01:00
|
|
|
CREATE TABLE IF NOT EXISTS `t2` (
|
2002-08-06 20:24:12 +02:00
|
|
|
`ID` int(11) NOT NULL auto_increment,
|
|
|
|
`ParId` int(11) default NULL,
|
|
|
|
`tst` text,
|
|
|
|
`tst1` text,
|
|
|
|
PRIMARY KEY (`ID`),
|
2002-11-29 15:40:18 +01:00
|
|
|
KEY `IX_ParId_t2` (`ParId`),
|
|
|
|
FOREIGN KEY (`ParId`) REFERENCES `t1` (`id`)
|
2003-12-10 05:31:42 +01:00
|
|
|
) ENGINE=MyISAM;
|
2002-08-06 20:24:12 +02:00
|
|
|
|
2002-11-29 15:40:18 +01:00
|
|
|
INSERT INTO t1(tst,tst1) VALUES("MySQL","MySQL AB"), ("MSSQL","Microsoft"), ("ORACLE","ORACLE");
|
2002-08-06 20:24:12 +02:00
|
|
|
|
2002-11-29 15:40:18 +01:00
|
|
|
INSERT INTO t2(ParId) VALUES(1), (2), (3);
|
2002-08-06 20:24:12 +02:00
|
|
|
|
2002-11-29 15:40:18 +01:00
|
|
|
select * from t2;
|
2002-08-06 20:24:12 +02:00
|
|
|
|
2002-11-29 15:40:18 +01:00
|
|
|
UPDATE t2, t1 SET t2.tst = t1.tst, t2.tst1 = t1.tst1 WHERE t2.ParId = t1.Id;
|
2002-08-06 20:24:12 +02:00
|
|
|
|
2002-11-29 15:40:18 +01:00
|
|
|
select * from t2;
|
2003-01-06 00:48:59 +01:00
|
|
|
drop table t1, t2 ;
|
2002-11-29 15:40:18 +01:00
|
|
|
|
2002-10-12 20:36:39 +02:00
|
|
|
create table t1 (n numeric(10));
|
|
|
|
create table t2 (n numeric(10));
|
|
|
|
insert into t2 values (1),(2),(4),(8),(16),(32);
|
|
|
|
select * from t2 left outer join t1 using (n);
|
|
|
|
delete t1,t2 from t2 left outer join t1 using (n);
|
|
|
|
select * from t2 left outer join t1 using (n);
|
2002-11-16 19:19:10 +01:00
|
|
|
drop table t1,t2 ;
|
|
|
|
|
|
|
|
#
|
|
|
|
# Test with locking
|
|
|
|
#
|
|
|
|
|
|
|
|
create table t1 (n int(10) not null primary key, d int(10));
|
|
|
|
create table t2 (n int(10) not null primary key, d int(10));
|
|
|
|
insert into t1 values(1,1);
|
|
|
|
insert into t2 values(1,10),(2,20);
|
|
|
|
LOCK TABLES t1 write, t2 read;
|
|
|
|
--error 1099
|
|
|
|
DELETE t1.*, t2.* FROM t1,t2 where t1.n=t2.n;
|
|
|
|
--error 1099
|
|
|
|
UPDATE t1,t2 SET t1.d=t2.d,t2.d=30 WHERE t1.n=t2.n;
|
|
|
|
UPDATE t1,t2 SET t1.d=t2.d WHERE t1.n=t2.n;
|
|
|
|
unlock tables;
|
|
|
|
LOCK TABLES t1 write, t2 write;
|
|
|
|
UPDATE t1,t2 SET t1.d=t2.d WHERE t1.n=t2.n;
|
|
|
|
select * from t1;
|
|
|
|
DELETE t1.*, t2.* FROM t1,t2 where t1.n=t2.n;
|
|
|
|
select * from t1;
|
|
|
|
select * from t2;
|
|
|
|
unlock tables;
|
|
|
|
drop table t1,t2;
|
2002-11-30 23:48:35 +01:00
|
|
|
|
|
|
|
#
|
|
|
|
# Test safe updates and timestamps
|
|
|
|
#
|
|
|
|
set sql_safe_updates=1;
|
|
|
|
create table t1 (n int(10), d int(10));
|
|
|
|
create table t2 (n int(10), d int(10));
|
|
|
|
insert into t1 values(1,1);
|
|
|
|
insert into t2 values(1,10),(2,20);
|
|
|
|
--error 1175
|
|
|
|
UPDATE t1,t2 SET t1.d=t2.d WHERE t1.n=t2.n;
|
|
|
|
set sql_safe_updates=0;
|
|
|
|
drop table t1,t2;
|
|
|
|
set timestamp=1038401397;
|
|
|
|
create table t1 (n int(10) not null primary key, d int(10), t timestamp);
|
|
|
|
create table t2 (n int(10) not null primary key, d int(10), t timestamp);
|
|
|
|
insert into t1 values(1,1,NULL);
|
|
|
|
insert into t2 values(1,10,NULL),(2,20,NULL);
|
|
|
|
set timestamp=1038000000;
|
|
|
|
UPDATE t1,t2 SET t1.d=t2.d WHERE t1.n=t2.n;
|
2002-12-06 20:11:27 +01:00
|
|
|
select n,d,unix_timestamp(t) from t1;
|
|
|
|
select n,d,unix_timestamp(t) from t2;
|
2002-11-30 23:48:35 +01:00
|
|
|
--error 1064
|
|
|
|
UPDATE t1,t2 SET 1=2 WHERE t1.n=t2.n;
|
|
|
|
drop table t1,t2;
|
|
|
|
set timestamp=0;
|
|
|
|
set sql_safe_updates=0;
|
|
|
|
create table t1 (n int(10) not null primary key, d int(10));
|
|
|
|
create table t2 (n int(10) not null primary key, d int(10));
|
|
|
|
insert into t1 values(1,1), (3,3);
|
|
|
|
insert into t2 values(1,10),(2,20);
|
|
|
|
UPDATE t2 left outer join t1 on t1.n=t2.n SET t1.d=t2.d;
|
|
|
|
select * from t1;
|
|
|
|
select * from t2;
|
|
|
|
drop table t1,t2;
|
|
|
|
create table t1 (n int(10), d int(10));
|
|
|
|
create table t2 (n int(10), d int(10));
|
|
|
|
insert into t1 values(1,1),(1,2);
|
|
|
|
insert into t2 values(1,10),(2,20);
|
|
|
|
UPDATE t1,t2 SET t1.d=t2.d,t2.d=30 WHERE t1.n=t2.n;
|
|
|
|
select * from t1;
|
|
|
|
select * from t2;
|
|
|
|
drop table t1,t2;
|
|
|
|
create table t1 (n int(10), d int(10));
|
|
|
|
create table t2 (n int(10), d int(10));
|
|
|
|
insert into t1 values(1,1),(3,2);
|
|
|
|
insert into t2 values(1,10),(1,20);
|
|
|
|
UPDATE t1,t2 SET t1.d=t2.d,t2.d=30 WHERE t1.n=t2.n;
|
|
|
|
select * from t1;
|
|
|
|
select * from t2;
|
2002-12-28 20:34:17 +01:00
|
|
|
UPDATE t1 a ,t2 b SET a.d=b.d,b.d=30 WHERE a.n=b.n;
|
2002-12-24 12:58:07 +01:00
|
|
|
select * from t1;
|
|
|
|
select * from t2;
|
2004-01-20 18:16:18 +01:00
|
|
|
DELETE a, b FROM t1 a,t2 b where a.n=b.n;
|
2002-12-24 12:58:07 +01:00
|
|
|
select * from t1;
|
|
|
|
select * from t2;
|
2002-11-30 23:48:35 +01:00
|
|
|
drop table t1,t2;
|
2003-01-06 00:48:59 +01:00
|
|
|
|
2003-12-10 05:31:42 +01:00
|
|
|
CREATE TABLE t1 ( broj int(4) unsigned NOT NULL default '0', naziv char(25) NOT NULL default 'NEPOZNAT', PRIMARY KEY (broj)) ENGINE=MyISAM;
|
2002-12-18 18:00:00 +01:00
|
|
|
INSERT INTO t1 VALUES (1,'jedan'),(2,'dva'),(3,'tri'),(4,'xxxxxxxxxx'),(5,'a'),(10,''),(11,''),(12,''),(13,'');
|
2003-12-10 05:31:42 +01:00
|
|
|
CREATE TABLE t2 ( broj int(4) unsigned NOT NULL default '0', naziv char(25) NOT NULL default 'NEPOZNAT', PRIMARY KEY (broj)) ENGINE=MyISAM;
|
2002-12-18 18:00:00 +01:00
|
|
|
INSERT INTO t2 VALUES (1,'jedan'),(2,'dva'),(3,'tri'),(4,'xxxxxxxxxx'),(5,'a');
|
2003-12-10 05:31:42 +01:00
|
|
|
CREATE TABLE t3 ( broj int(4) unsigned NOT NULL default '0', naziv char(25) NOT NULL default 'NEPOZNAT', PRIMARY KEY (broj)) ENGINE=MyISAM;
|
2002-12-18 18:00:00 +01:00
|
|
|
INSERT INTO t3 VALUES (1,'jedan'),(2,'dva');
|
|
|
|
update t1,t2 set t1.naziv="aaaa" where t1.broj=t2.broj;
|
|
|
|
update t1,t2,t3 set t1.naziv="bbbb", t2.naziv="aaaa" where t1.broj=t2.broj and t2.broj=t3.broj;
|
2003-01-06 00:48:59 +01:00
|
|
|
drop table t1,t2,t3;
|
2003-03-18 23:45:44 +01:00
|
|
|
|
|
|
|
#
|
|
|
|
# Test multi update with different join methods
|
|
|
|
#
|
|
|
|
|
|
|
|
CREATE TABLE t1 (a int not null primary key, b int not null, key (b));
|
|
|
|
CREATE TABLE t2 (a int not null primary key, b int not null, key (b));
|
|
|
|
INSERT INTO t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
|
|
|
|
INSERT INTO t2 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
|
|
|
|
|
|
|
|
# Full join, without key
|
|
|
|
update t1,t2 set t1.a=t1.a+100;
|
|
|
|
select * from t1;
|
|
|
|
|
|
|
|
# unique key
|
|
|
|
update t1,t2 set t1.a=t1.a+100 where t1.a=101;
|
|
|
|
select * from t1;
|
|
|
|
|
|
|
|
# ref key
|
|
|
|
update t1,t2 set t1.b=t1.b+10 where t1.b=2;
|
|
|
|
select * from t1;
|
|
|
|
|
|
|
|
# Range key (in t1)
|
2003-04-23 20:52:16 +02:00
|
|
|
update t1,t2 set t1.b=t1.b+2,t2.b=t1.b+10 where t1.b between 3 and 5 and t2.a=t1.a-100;
|
2003-03-18 23:45:44 +01:00
|
|
|
select * from t1;
|
|
|
|
select * from t2;
|
|
|
|
|
2004-05-04 22:04:05 +02:00
|
|
|
# test for non-updating table which is also used in sub-select
|
|
|
|
|
|
|
|
update t1,t2 set t1.b=t2.b, t1.a=t2.a where t1.a=t2.a and not exists (select * from t2 where t2.a > 10);
|
|
|
|
|
2003-03-18 23:45:44 +01:00
|
|
|
drop table t1,t2;
|
2003-12-10 05:31:42 +01:00
|
|
|
CREATE TABLE t3 ( KEY1 varchar(50) NOT NULL default '', PARAM_CORR_DISTANCE_RUSH double default NULL, PARAM_CORR_DISTANCE_GEM double default NULL, PARAM_AVG_TARE double default NULL, PARAM_AVG_NB_DAYS double default NULL, PARAM_DEFAULT_PROP_GEM_SRVC varchar(50) default NULL, PARAM_DEFAULT_PROP_GEM_NO_ETIK varchar(50) default NULL, PARAM_SCENARIO_COSTS varchar(50) default NULL, PARAM_DEFAULT_WAGON_COST double default NULL, tmp int(11) default NULL, PRIMARY KEY (KEY1)) ENGINE=MyISAM;
|
2003-04-02 16:05:34 +02:00
|
|
|
INSERT INTO t3 VALUES ('A',1,1,22,3.2,'R','R','BASE2',0.24,NULL);
|
|
|
|
create table t1 (A varchar(1));
|
|
|
|
insert into t1 values ("A") ,("B"),("C"),("D");
|
|
|
|
create table t2(Z varchar(15));
|
|
|
|
insert into t2(Z) select concat(a.a,b.a,c.a,d.a) from t1 as a, t1 as b, t1 as c, t1 as d;
|
|
|
|
update t2,t3 set Z =param_scenario_costs;
|
|
|
|
drop table t1,t2,t3;
|
2003-08-20 14:33:21 +02:00
|
|
|
create table t1 (a int, b int);
|
|
|
|
create table t2 (a int, b int);
|
|
|
|
insert into t1 values (1,1),(2,1),(3,1);
|
|
|
|
insert into t2 values (1,1), (3,1);
|
|
|
|
update t1 left join t2 on t1.a=t2.a set t1.b=2, t2.b=2 where t1.b=1 and t2.b=1 or t2.a is NULL;
|
|
|
|
select t1.a, t1.b,t2.a, t2.b from t1 left join t2 on t1.a=t2.a where t1.b=1 and t2.b=1 or t2.a is NULL;
|
|
|
|
drop table t1,t2;
|
2003-11-18 15:04:52 +01:00
|
|
|
|
2003-12-12 21:26:58 +01:00
|
|
|
#
|
|
|
|
# Test reuse of same table
|
|
|
|
#
|
|
|
|
|
|
|
|
create table t1 (a int not null auto_increment primary key, b int not null);
|
|
|
|
insert into t1 (b) values (1),(2),(3),(4);
|
|
|
|
update t1, t1 as t2 set t1.b=t2.b+1 where t1.a=t2.a;
|
|
|
|
select * from t1;
|
|
|
|
drop table t1;
|
2003-12-13 03:04:38 +01:00
|
|
|
|
2003-12-11 23:55:48 +01:00
|
|
|
# Test multi-update and multi-delete with impossible where
|
|
|
|
|
|
|
|
create table t1(id1 smallint(5), field char(5));
|
|
|
|
create table t2(id2 smallint(5), field char(5));
|
|
|
|
|
|
|
|
insert into t1 values (1, 'a'), (2, 'aa');
|
|
|
|
insert into t2 values (1, 'b'), (2, 'bb');
|
|
|
|
|
|
|
|
select * from t1;
|
|
|
|
select * from t2;
|
|
|
|
|
|
|
|
update t2 inner join t1 on t1.id1=t2.id2
|
|
|
|
set t2.field=t1.field
|
|
|
|
where 0=1;
|
|
|
|
update t2, t1 set t2.field=t1.field
|
|
|
|
where t1.id1=t2.id2 and 0=1;
|
|
|
|
|
|
|
|
delete t1, t2 from t2 inner join t1 on t1.id1=t2.id2
|
|
|
|
where 0=1;
|
|
|
|
delete t1, t2 from t2,t1
|
|
|
|
where t1.id1=t2.id2 and 0=1;
|
|
|
|
|
|
|
|
drop table t1,t2;
|
|
|
|
|
2003-11-18 15:04:52 +01:00
|
|
|
#
|
|
|
|
# Test for bug #1820.
|
|
|
|
#
|
|
|
|
|
|
|
|
create table t1 ( a int not null, b int not null) ;
|
|
|
|
--disable_query_log
|
|
|
|
insert into t1 values (1,1),(2,2),(3,3),(4,4);
|
|
|
|
let $1=19;
|
|
|
|
set @d=4;
|
|
|
|
while ($1)
|
|
|
|
{
|
|
|
|
eval insert into t1 select a+@d,b+@d from t1;
|
|
|
|
eval set @d=@d*2;
|
|
|
|
dec $1;
|
|
|
|
}
|
|
|
|
|
|
|
|
--enable_query_log
|
|
|
|
alter table t1 add index i1(a);
|
|
|
|
delete from t1 where a > 2000000;
|
|
|
|
create table t2 like t1;
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
|
|
|
select 't2 rows before small delete', count(*) from t1;
|
|
|
|
delete t1,t2 from t1,t2 where t1.b=t2.a and t1.a < 2;
|
|
|
|
select 't2 rows after small delete', count(*) from t2;
|
|
|
|
select 't1 rows after small delete', count(*) from t1;
|
|
|
|
|
|
|
|
## Try deleting many rows
|
|
|
|
|
|
|
|
delete t1,t2 from t1,t2 where t1.b=t2.a and t1.a < 100*1000;
|
|
|
|
select 't2 rows after big delete', count(*) from t2;
|
|
|
|
select 't1 rows after big delete', count(*) from t1;
|
|
|
|
|
2003-12-02 19:20:51 +01:00
|
|
|
drop table t1,t2;
|
|
|
|
|
2004-03-10 12:46:11 +01:00
|
|
|
#
|
|
|
|
# Test alias (this is not correct in 4.0)
|
|
|
|
#
|
|
|
|
|
|
|
|
CREATE TABLE t1 ( a int );
|
|
|
|
CREATE TABLE t2 ( a int );
|
|
|
|
DELETE t1 FROM t1, t2 AS t3;
|
|
|
|
DELETE t4 FROM t1, t1 AS t4;
|
|
|
|
DELETE t3 FROM t1 AS t3, t1 AS t4;
|
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-07 23:16:17 +02:00
|
|
|
--error 1109
|
2004-03-10 12:46:11 +01:00
|
|
|
DELETE t1 FROM t1 AS t3, t2 AS t4;
|
|
|
|
INSERT INTO t1 values (1),(2);
|
|
|
|
INSERT INTO t2 values (1),(2);
|
|
|
|
DELETE t1 FROM t1 AS t2, t2 AS t1 where t1.a=t2.a and t1.a=1;
|
|
|
|
SELECT * from t1;
|
|
|
|
SELECT * from t2;
|
|
|
|
DELETE t2 FROM t1 AS t2, t2 AS t1 where t1.a=t2.a and t1.a=2;
|
|
|
|
SELECT * from t1;
|
|
|
|
SELECT * from t2;
|
|
|
|
DROP TABLE t1,t2;
|
2004-03-11 21:26:03 +01:00
|
|
|
|
|
|
|
#
|
|
|
|
# Test update with const tables
|
|
|
|
#
|
2004-03-16 01:59:39 +01:00
|
|
|
create table `t1` (`p_id` int(10) unsigned NOT NULL auto_increment, `p_code` varchar(20) NOT NULL default '', `p_active` tinyint(1) unsigned NOT NULL default '1', PRIMARY KEY (`p_id`) );
|
|
|
|
create table `t2` (`c2_id` int(10) unsigned NULL auto_increment, `c2_p_id` int(10) unsigned NOT NULL default '0', `c2_note` text NOT NULL, `c2_active` tinyint(1) unsigned NOT NULL default '1', PRIMARY KEY (`c2_id`), KEY `c2_p_id` (`c2_p_id`) );
|
|
|
|
insert into t1 values (0,'A01-Comp',1);
|
|
|
|
insert into t1 values (0,'B01-Comp',1);
|
|
|
|
insert into t2 values (0,1,'A Note',1);
|
2004-03-11 21:26:03 +01:00
|
|
|
update t1 left join t2 on p_id = c2_p_id set c2_note = 'asdf-1' where p_id = 2;
|
|
|
|
select * from t1;
|
|
|
|
select * from t2;
|
|
|
|
drop table t1, t2;
|
2004-04-07 19:07:44 +02:00
|
|
|
|
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-07 23:16:17 +02:00
|
|
|
#
|
2004-10-07 09:50:13 +02:00
|
|
|
# privilege check for multiupdate with other tables
|
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-07 23:16:17 +02:00
|
|
|
#
|
|
|
|
|
2004-07-15 03:19:07 +02:00
|
|
|
connect (root,localhost,root,,test,$MASTER_MYPORT,$MASTER_MYSOCK);
|
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-07 23:16:17 +02:00
|
|
|
connection root;
|
|
|
|
--disable_warnings
|
|
|
|
create database mysqltest;
|
|
|
|
--enable_warnings
|
|
|
|
create table mysqltest.t1 (a int, b int, primary key (a));
|
|
|
|
create table mysqltest.t2 (a int, b int, primary key (a));
|
|
|
|
create table mysqltest.t3 (a int, b int, primary key (a));
|
|
|
|
grant select on mysqltest.* to mysqltest_1@localhost;
|
|
|
|
grant update on mysqltest.t1 to mysqltest_1@localhost;
|
2004-07-15 03:19:07 +02:00
|
|
|
connect (user1,localhost,mysqltest_1,,mysqltest,$MASTER_MYPORT,$MASTER_MYSOCK);
|
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-07 23:16:17 +02:00
|
|
|
connection user1;
|
|
|
|
update t1, t2 set t1.b=1 where t1.a=t2.a;
|
|
|
|
update t1, t2 set t1.b=(select t3.b from t3 where t1.a=t3.a) where t1.a=t2.a;
|
|
|
|
connection root;
|
|
|
|
revoke all privileges on mysqltest.t1 from mysqltest_1@localhost;
|
2004-05-28 20:31:51 +02:00
|
|
|
revoke all privileges on mysqltest.* from mysqltest_1@localhost;
|
2004-07-08 15:54:07 +02:00
|
|
|
delete from mysql.user where user=_binary'mysqltest_1';
|
new error for unsupported command in PS
fixed IN subselect with basic constant left expression
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
unchecked commands now is rejected by PS protocol to avoid serever crash
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
include/mysqld_error.h:
new error for unsupported command in PS
mysql-test/r/multi_update.result:
test sutes (BUG#3408, BUG#3411)
mysql-test/t/multi_update.test:
test sutes (BUG#3408, BUG#3411)
sql/item_cmpfunc.cc:
fixed IN subselect with basic constant left expression
sql/mysql_priv.h:
some function frop sql_parse.h become public
sql/set_var.cc:
check for SET command via PS
sql/set_var.h:
check for SET command via PS
sql/share/czech/errmsg.txt:
new error for unsupported command in PS
sql/share/danish/errmsg.txt:
new error for unsupported command in PS
sql/share/dutch/errmsg.txt:
new error for unsupported command in PS
sql/share/english/errmsg.txt:
new error for unsupported command in PS
sql/share/estonian/errmsg.txt:
new error for unsupported command in PS
sql/share/french/errmsg.txt:
new error for unsupported command in PS
sql/share/german/errmsg.txt:
new error for unsupported command in PS
sql/share/greek/errmsg.txt:
new error for unsupported command in PS
sql/share/hungarian/errmsg.txt:
new error for unsupported command in PS
sql/share/italian/errmsg.txt:
new error for unsupported command in PS
sql/share/japanese/errmsg.txt:
new error for unsupported command in PS
sql/share/korean/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian-ny/errmsg.txt:
new error for unsupported command in PS
sql/share/norwegian/errmsg.txt:
new error for unsupported command in PS
sql/share/polish/errmsg.txt:
new error for unsupported command in PS
sql/share/portuguese/errmsg.txt:
new error for unsupported command in PS
sql/share/romanian/errmsg.txt:
new error for unsupported command in PS
sql/share/russian/errmsg.txt:
new error for unsupported command in PS
sql/share/serbian/errmsg.txt:
new error for unsupported command in PS
sql/share/slovak/errmsg.txt:
new error for unsupported command in PS
sql/share/spanish/errmsg.txt:
new error for unsupported command in PS
sql/share/swedish/errmsg.txt:
new error for unsupported command in PS
sql/share/ukrainian/errmsg.txt:
new error for unsupported command in PS
sql/sql_lex.cc:
first table unlincking procedures for CREATE command
sql/sql_lex.h:
first table unlincking procedures for CREATE command
sql/sql_parse.cc:
used function to exclude first table from list
SQLCOM_CREATE_TABLE, SQLCOM_UPDATE_MULTI, SQLCOM_REPLACE_SELECT, SQLCOM_INSERT_SELECT, QLCOM_DELETE_MULTI fixed to be compatible with PS (BUG#3398, BUG#3406)
fixed multiupdate privelege check (BUG#3408)
fixed multiupdate tables check (BUG#3411)
sql/sql_prepare.cc:
fixed a lot of commands to be compatible with PS
unchecked commands now is rejected to avoid serever crash
sql/sql_select.cc:
allow empty result for PS preparing
sql/sql_union.cc:
fixed cleunup procedure to be compatible sith DO/SET (BUG#3393)
sql/sql_update.cc:
fixed update to use correct tables lists (BUG#3408)
sql/table.h:
flag to support multi update tables check (BUG#3408)
tests/client_test.c:
removed unsupported tables
fixed show table test
added new tests
2004-04-07 23:16:17 +02:00
|
|
|
drop database mysqltest;
|
|
|
|
|
|
|
|
#
|
|
|
|
# multi delete wrong table check
|
|
|
|
#
|
|
|
|
create table t1 (a int, primary key (a));
|
|
|
|
create table t2 (a int, primary key (a));
|
|
|
|
create table t3 (a int, primary key (a));
|
|
|
|
-- error 1109
|
|
|
|
delete t1,t3 from t1,t2 where t1.a=t2.a and t2.a=(select t3.a from t3 where t1.a=t3.a);
|
|
|
|
drop table t1, t2, t3;
|
2004-05-07 18:52:06 +02:00
|
|
|
|
2004-09-08 12:39:15 +02:00
|
|
|
#
|
|
|
|
# multi* unique updating table check
|
|
|
|
#
|
|
|
|
create table t1 (col1 int);
|
|
|
|
create table t2 (col1 int);
|
2004-11-05 16:29:47 +01:00
|
|
|
-- error 1093
|
2004-09-08 12:39:15 +02:00
|
|
|
update t1,t2 set t1.col1 = (select max(col1) from t1) where t1.col1 = t2.col1;
|
|
|
|
-- error 1093
|
|
|
|
delete t1 from t1,t2 where t1.col1 < (select max(col1) from t1) and t1.col1 = t2.col1;
|
|
|
|
drop table t1,t2;
|
2004-10-29 18:26:52 +02:00
|
|
|
|
2004-12-11 13:51:52 +01:00
|
|
|
# Test for BUG#5837 - delete with outer join and const tables
|
2004-12-31 11:52:14 +01:00
|
|
|
--disable_warnings
|
2004-12-11 14:36:12 +01:00
|
|
|
create table t1 (
|
|
|
|
aclid bigint not null primary key,
|
|
|
|
status tinyint(1) not null
|
|
|
|
) engine = innodb;
|
|
|
|
|
|
|
|
create table t2 (
|
|
|
|
refid bigint not null primary key,
|
|
|
|
aclid bigint, index idx_acl(aclid)
|
|
|
|
) engine = innodb;
|
2004-12-31 11:52:14 +01:00
|
|
|
--enable_warnings
|
2004-12-11 13:51:52 +01:00
|
|
|
insert into t2 values(1,null);
|
2004-12-11 14:36:12 +01:00
|
|
|
delete t2, t1 from t2 left join t1 on (t2.aclid=t1.aclid) where t2.refid='1';
|
2004-12-11 13:51:52 +01:00
|
|
|
drop table t1, t2;
|
|
|
|
|
2005-07-28 02:22:47 +02:00
|
|
|
# End of 4.1 tests
|
2005-07-28 16:09:54 +02:00
|
|
|
|
2003-12-02 19:20:51 +01:00
|
|
|
#
|
|
|
|
# Test for bug #1980.
|
|
|
|
#
|
|
|
|
--disable_warnings
|
2005-01-03 23:22:22 +01:00
|
|
|
create table t1 ( c char(8) not null ) engine=innodb;
|
2003-12-02 19:20:51 +01:00
|
|
|
--enable_warnings
|
|
|
|
|
|
|
|
insert into t1 values ('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9');
|
|
|
|
insert into t1 values ('A'),('B'),('C'),('D'),('E'),('F');
|
|
|
|
|
|
|
|
alter table t1 add b char(8) not null;
|
|
|
|
alter table t1 add a char(8) not null;
|
|
|
|
alter table t1 add primary key (a,b,c);
|
|
|
|
update t1 set a=c, b=c;
|
|
|
|
|
|
|
|
create table t2 like t1;
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
|
|
|
delete t1,t2 from t2,t1 where t1.a<'B' and t2.b=t1.b;
|
|
|
|
|
|
|
|
drop table t1,t2;
|
|
|
|
|
|
|
|
--disable_warnings
|
2005-01-03 23:22:22 +01:00
|
|
|
create table t1 ( c char(8) not null ) engine=bdb;
|
2003-12-02 19:20:51 +01:00
|
|
|
--enable_warnings
|
|
|
|
|
|
|
|
insert into t1 values ('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9');
|
|
|
|
insert into t1 values ('A'),('B'),('C'),('D'),('E'),('F');
|
|
|
|
|
|
|
|
alter table t1 add b char(8) not null;
|
|
|
|
alter table t1 add a char(8) not null;
|
|
|
|
alter table t1 add primary key (a,b,c);
|
|
|
|
update t1 set a=c, b=c;
|
|
|
|
|
|
|
|
create table t2 like t1;
|
|
|
|
insert into t2 select * from t1;
|
|
|
|
|
|
|
|
delete t1,t2 from t2,t1 where t1.a<'B' and t2.b=t1.b;
|
|
|
|
|
|
|
|
drop table t1,t2;
|
2004-11-08 00:54:23 +01:00
|
|
|
|
Table definition cache, part 2
The table opening process now works the following way:
- Create common TABLE_SHARE object
- Read the .frm file and unpack it into the TABLE_SHARE object
- Create a TABLE object based on the information in the TABLE_SHARE
object and open a handler to the table object
Other noteworthy changes:
- In TABLE_SHARE the most common strings are now LEX_STRING's
- Better error message when table is not found
- Variable table_cache is now renamed 'table_open_cache'
- New variable 'table_definition_cache' that is the number of table defintions that will be cached
- strxnmov() calls are now fixed to avoid overflows
- strxnmov() will now always add one end \0 to result
- engine objects are now created with a TABLE_SHARE object instead of a TABLE object.
- After creating a field object one must call field->init(table) before using it
- For a busy system this change will give you:
- Less memory usage for table object
- Faster opening of tables (if it's has been in use or is in table definition cache)
- Allow you to cache many table definitions objects
- Faster drop of table
mysql-test/mysql-test-run.sh:
Fixed some problems with --gdb option
Test both with socket and tcp/ip port that all old servers are killed
mysql-test/r/flush_table.result:
More tests with lock table with 2 threads + flush table
mysql-test/r/information_schema.result:
Removed old (now wrong) result
mysql-test/r/innodb.result:
Better error messages (thanks to TDC patch)
mysql-test/r/merge.result:
Extra flush table test
mysql-test/r/ndb_bitfield.result:
Better error messages (thanks to TDC patch)
mysql-test/r/ndb_partition_error.result:
Better error messages (thanks to TDC patch)
mysql-test/r/query_cache.result:
Remove tables left from old tests
mysql-test/r/temp_table.result:
Test truncate with temporary tables
mysql-test/r/variables.result:
Table_cache -> Table_open_cache
mysql-test/t/flush_table.test:
More tests with lock table with 2 threads + flush table
mysql-test/t/merge.test:
Extra flush table test
mysql-test/t/multi_update.test:
Added 'sleep' to make test predictable
mysql-test/t/query_cache.test:
Remove tables left from old tests
mysql-test/t/temp_table.test:
Test truncate with temporary tables
mysql-test/t/variables.test:
Table_cache -> Table_open_cache
mysql-test/valgrind.supp:
Remove warning that may happens becasue threads dies in different order
mysys/hash.c:
Fixed wrong DBUG_PRINT
mysys/mf_dirname.c:
More DBUG
mysys/mf_pack.c:
Better comment
mysys/mf_tempdir.c:
More DBUG
Ensure that we call cleanup_dirname() on all temporary directory paths.
If we don't do this, we will get a failure when comparing temporary table
names as in some cases the temporary table name is run through convert_dirname())
mysys/my_alloc.c:
Indentation fix
sql/examples/ha_example.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/examples/ha_example.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/examples/ha_tina.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/examples/ha_tina.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/field.cc:
Update for table definition cache:
- Field creation now takes TABLE_SHARE instead of TABLE as argument
(This is becasue field definitions are now cached in TABLE_SHARE)
When a field is created, one now must call field->init(TABLE) before using it
- Use s->db instead of s->table_cache_key
- Added Field::clone() to create a field in TABLE from a field in TABLE_SHARE
- make_field() takes TABLE_SHARE as argument instead of TABLE
- move_field() -> move_field_offset()
sql/field.h:
Update for table definition cache:
- Field creation now takes TABLE_SHARE instead of TABLE as argument
(This is becasue field definitions are now cached in TABLE_SHARE)
When a field is created, one now must call field->init(TABLE) before using it
- Added Field::clone() to create a field in TABLE from a field in TABLE_SHARE
- make_field() takes TABLE_SHARE as argument instead of TABLE
- move_field() -> move_field_offset()
sql/ha_archive.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_archive.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_berkeley.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Changed name of argument create() to not hide internal 'table' variable.
table->s -> table_share
sql/ha_berkeley.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_blackhole.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_blackhole.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_federated.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Fixed comments
Remove index variable and replace with pointers (simple optimization)
move_field() -> move_field_offset()
Removed some strlen() calls
sql/ha_federated.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_heap.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Simplify delete_table() and create() as the given file names are now without extension
sql/ha_heap.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_innodb.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_innodb.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_myisam.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Remove not needed fn_format()
Fixed for new table->s structure
sql/ha_myisam.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_myisammrg.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Don't set 'is_view' for MERGE tables
Use new interface to find_temporary_table()
sql/ha_myisammrg.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Added flag HA_NO_COPY_ON_ALTER
sql/ha_ndbcluster.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Fixed wrong calls to strxnmov()
Give error HA_ERR_TABLE_DEF_CHANGED if table definition has changed
drop_table -> intern_drop_table()
table->s -> table_share
Move part_info to TABLE
Fixed comments & DBUG print's
New arguments to print_error()
sql/ha_ndbcluster.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_partition.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
We can't set up or use part_info when creating handler as there is not yet any table object
New ha_intialise() to work with TDC (Done by Mikael)
sql/ha_partition.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Got set_part_info() from Mikael
sql/handler.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
ha_delete_table() now also takes database as an argument
handler::ha_open() now takes TABLE as argument
ha_open() now calls ha_allocate_read_write_set()
Simplify ha_allocate_read_write_set()
Remove ha_deallocate_read_write_set()
Use table_share (Cached by table definition cache)
sql/handler.h:
New table flag: HA_NO_COPY_ON_ALTER (used by merge tables)
Remove ha_deallocate_read_write_set()
get_new_handler() now takes TABLE_SHARE as argument
ha_delete_table() now gets database as argument
sql/item.cc:
table_name and db are now LEX_STRING objects
When creating fields, we have now have to call field->init(table)
move_field -> move_field_offset()
sql/item.h:
tmp_table_field_from_field_type() now takes an extra paramenter 'fixed_length' to allow one to force usage of CHAR
instead of BLOB
sql/item_cmpfunc.cc:
Fixed call to tmp_table_field_from_field_type()
sql/item_create.cc:
Assert if new not handled cast type
sql/item_func.cc:
When creating fields, we have now have to call field->init(table)
dummy_table used by 'sp' now needs a TABLE_SHARE object
sql/item_subselect.cc:
Trivial code cleanups
sql/item_sum.cc:
When creating fields, we have now have to call field->init(table)
sql/item_timefunc.cc:
Item_func_str_to_date::tmp_table_field() now replaced by call to
tmp_table_field_from_field_type() (see item_timefunc.h)
sql/item_timefunc.h:
Simply tmp_table_field()
sql/item_uniq.cc:
When creating fields, we have now have to call field->init(table)
sql/key.cc:
Added 'KEY' argument to 'find_ref_key' to simplify code
sql/lock.cc:
More debugging
Use create_table_def_key() to create key for table cache
Allocate TABLE_SHARE properly when creating name lock
Fix that locked_table_name doesn't test same table twice
sql/mysql_priv.h:
New functions for table definition cache
New interfaces to a lot of functions.
New faster interface to find_temporary_table() and close_temporary_table()
sql/mysqld.cc:
Added support for table definition cache of size 'table_def_size'
Fixed som calls to strnmov()
Changed name of 'table_cache' to 'table_open_cache'
sql/opt_range.cc:
Use new interfaces
Fixed warnings from valgrind
sql/parse_file.cc:
Safer calls to strxnmov()
Fixed typo
sql/set_var.cc:
Added variable 'table_definition_cache'
Variable table_cache renamed to 'table_open_cache'
sql/slave.cc:
Use new interface
sql/sp.cc:
Proper use of TABLE_SHARE
sql/sp_head.cc:
Remove compiler warnings
We have now to call field->init(table)
sql/sp_head.h:
Pointers to parsed strings are now const
sql/sql_acl.cc:
table_name is now a LEX_STRING
sql/sql_base.cc:
Main implementation of table definition cache
(The #ifdef's are there for the future when table definition cache will replace open table cache)
Now table definitions are cached indepndent of open tables, which will speed up things when a table is in use at once from several places
Views are not yet cached; For the moment we only cache if a table is a view or not.
Faster implementation of find_temorary_table()
Replace 'wait_for_refresh()' with the more general function 'wait_for_condition()'
Drop table is slightly faster as we can use the table definition cache to know the type of the table
sql/sql_cache.cc:
table_cache_key and table_name are now LEX_STRING
'sDBUG print fixes
sql/sql_class.cc:
table_cache_key is now a LEX_STRING
safer strxnmov()
sql/sql_class.h:
Added number of open table shares (table definitions)
sql/sql_db.cc:
safer strxnmov()
sql/sql_delete.cc:
Use new interface to find_temporary_table()
sql/sql_derived.cc:
table_name is now a LEX_STRING
sql/sql_handler.cc:
TABLE_SHARE->db and TABLE_SHARE->table_name are now LEX_STRING's
sql/sql_insert.cc:
TABLE_SHARE->db and TABLE_SHARE->table_name are now LEX_STRING's
sql/sql_lex.cc:
Make parsed string a const (to quickly find out if anything is trying to change the query string)
sql/sql_lex.h:
Make parsed string a const (to quickly find out if anything is trying to change the query string)
sql/sql_load.cc:
Safer strxnmov()
sql/sql_parse.cc:
Better error if wrong DB name
sql/sql_partition.cc:
part_info moved to TABLE from TABLE_SHARE
Indentation changes
sql/sql_select.cc:
Indentation fixes
Call field->init(TABLE) for new created fields
Update create_tmp_table() to use TABLE_SHARE properly
sql/sql_select.h:
Call field->init(TABLE) for new created fields
sql/sql_show.cc:
table_name is now a LEX_STRING
part_info moved to TABLE
sql/sql_table.cc:
Use table definition cache to speed up delete of tables
Fixed calls to functions with new interfaces
Don't use 'share_not_to_be_used'
Instead of doing openfrm() when doing repair, we now have to call
get_table_share() followed by open_table_from_share().
Replace some fn_format() with faster unpack_filename().
Safer strxnmov()
part_info is now in TABLE
Added Mikaels patch for partition and ALTER TABLE
Instead of using 'TABLE_SHARE->is_view' use 'table_flags() & HA_NO_COPY_ON_ALTER
sql/sql_test.cc:
table_name and table_cache_key are now LEX_STRING's
sql/sql_trigger.cc:
TABLE_SHARE->db and TABLE_SHARE->table_name are now LEX_STRING's
safer strxnmov()
Removed compiler warnings
sql/sql_update.cc:
Call field->init(TABLE) after field is created
sql/sql_view.cc:
safer strxnmov()
Create common TABLE_SHARE object for views to allow us to cache if table is a view
sql/structs.h:
Added SHOW_TABLE_DEFINITIONS
sql/table.cc:
Creation and destruct of TABLE_SHARE objects that are common for many TABLE objects
The table opening process now works the following way:
- Create common TABLE_SHARE object
- Read the .frm file and unpack it into the TABLE_SHARE object
- Create a TABLE object based on the information in the TABLE_SHARE
object and open a handler to the table object
open_table_def() is written in such a way that it should be trival to add parsing of the .frm files in new formats
sql/table.h:
TABLE objects for the same database table now share a common TABLE_SHARE object
In TABLE_SHARE the most common strings are now LEX_STRING's
sql/unireg.cc:
Changed arguments to rea_create_table() to have same order as other functions
Call field->init(table) for new created fields
sql/unireg.h:
Added OPEN_VIEW
strings/strxnmov.c:
Change strxnmov() to always add end \0
This makes usage of strxnmov() safer as most of MySQL code assumes that strxnmov() will create a null terminated string
2005-11-23 21:45:02 +01:00
|
|
|
#
|
|
|
|
# Test alter table and a concurrent multi update
|
|
|
|
# (This will force update to reopen tables)
|
|
|
|
#
|
|
|
|
|
2004-11-08 00:54:23 +01:00
|
|
|
create table t1 (a int, b int);
|
|
|
|
insert into t1 values (1, 2), (2, 3), (3, 4);
|
|
|
|
create table t2 (a int);
|
|
|
|
insert into t2 values (10), (20), (30);
|
|
|
|
create view v1 as select a as b, a/10 as a from t2;
|
|
|
|
|
|
|
|
connect (locker,localhost,root,,test);
|
|
|
|
connection locker;
|
|
|
|
lock table t1 write;
|
|
|
|
|
|
|
|
connect (changer,localhost,root,,test);
|
|
|
|
connection changer;
|
|
|
|
send alter table t1 add column c int default 100 after a;
|
|
|
|
|
|
|
|
connect (updater,localhost,root,,test);
|
|
|
|
connection updater;
|
Table definition cache, part 2
The table opening process now works the following way:
- Create common TABLE_SHARE object
- Read the .frm file and unpack it into the TABLE_SHARE object
- Create a TABLE object based on the information in the TABLE_SHARE
object and open a handler to the table object
Other noteworthy changes:
- In TABLE_SHARE the most common strings are now LEX_STRING's
- Better error message when table is not found
- Variable table_cache is now renamed 'table_open_cache'
- New variable 'table_definition_cache' that is the number of table defintions that will be cached
- strxnmov() calls are now fixed to avoid overflows
- strxnmov() will now always add one end \0 to result
- engine objects are now created with a TABLE_SHARE object instead of a TABLE object.
- After creating a field object one must call field->init(table) before using it
- For a busy system this change will give you:
- Less memory usage for table object
- Faster opening of tables (if it's has been in use or is in table definition cache)
- Allow you to cache many table definitions objects
- Faster drop of table
mysql-test/mysql-test-run.sh:
Fixed some problems with --gdb option
Test both with socket and tcp/ip port that all old servers are killed
mysql-test/r/flush_table.result:
More tests with lock table with 2 threads + flush table
mysql-test/r/information_schema.result:
Removed old (now wrong) result
mysql-test/r/innodb.result:
Better error messages (thanks to TDC patch)
mysql-test/r/merge.result:
Extra flush table test
mysql-test/r/ndb_bitfield.result:
Better error messages (thanks to TDC patch)
mysql-test/r/ndb_partition_error.result:
Better error messages (thanks to TDC patch)
mysql-test/r/query_cache.result:
Remove tables left from old tests
mysql-test/r/temp_table.result:
Test truncate with temporary tables
mysql-test/r/variables.result:
Table_cache -> Table_open_cache
mysql-test/t/flush_table.test:
More tests with lock table with 2 threads + flush table
mysql-test/t/merge.test:
Extra flush table test
mysql-test/t/multi_update.test:
Added 'sleep' to make test predictable
mysql-test/t/query_cache.test:
Remove tables left from old tests
mysql-test/t/temp_table.test:
Test truncate with temporary tables
mysql-test/t/variables.test:
Table_cache -> Table_open_cache
mysql-test/valgrind.supp:
Remove warning that may happens becasue threads dies in different order
mysys/hash.c:
Fixed wrong DBUG_PRINT
mysys/mf_dirname.c:
More DBUG
mysys/mf_pack.c:
Better comment
mysys/mf_tempdir.c:
More DBUG
Ensure that we call cleanup_dirname() on all temporary directory paths.
If we don't do this, we will get a failure when comparing temporary table
names as in some cases the temporary table name is run through convert_dirname())
mysys/my_alloc.c:
Indentation fix
sql/examples/ha_example.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/examples/ha_example.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/examples/ha_tina.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/examples/ha_tina.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/field.cc:
Update for table definition cache:
- Field creation now takes TABLE_SHARE instead of TABLE as argument
(This is becasue field definitions are now cached in TABLE_SHARE)
When a field is created, one now must call field->init(TABLE) before using it
- Use s->db instead of s->table_cache_key
- Added Field::clone() to create a field in TABLE from a field in TABLE_SHARE
- make_field() takes TABLE_SHARE as argument instead of TABLE
- move_field() -> move_field_offset()
sql/field.h:
Update for table definition cache:
- Field creation now takes TABLE_SHARE instead of TABLE as argument
(This is becasue field definitions are now cached in TABLE_SHARE)
When a field is created, one now must call field->init(TABLE) before using it
- Added Field::clone() to create a field in TABLE from a field in TABLE_SHARE
- make_field() takes TABLE_SHARE as argument instead of TABLE
- move_field() -> move_field_offset()
sql/ha_archive.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_archive.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_berkeley.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Changed name of argument create() to not hide internal 'table' variable.
table->s -> table_share
sql/ha_berkeley.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_blackhole.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_blackhole.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_federated.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Fixed comments
Remove index variable and replace with pointers (simple optimization)
move_field() -> move_field_offset()
Removed some strlen() calls
sql/ha_federated.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_heap.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Simplify delete_table() and create() as the given file names are now without extension
sql/ha_heap.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_innodb.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_innodb.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_myisam.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Remove not needed fn_format()
Fixed for new table->s structure
sql/ha_myisam.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_myisammrg.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Don't set 'is_view' for MERGE tables
Use new interface to find_temporary_table()
sql/ha_myisammrg.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Added flag HA_NO_COPY_ON_ALTER
sql/ha_ndbcluster.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Fixed wrong calls to strxnmov()
Give error HA_ERR_TABLE_DEF_CHANGED if table definition has changed
drop_table -> intern_drop_table()
table->s -> table_share
Move part_info to TABLE
Fixed comments & DBUG print's
New arguments to print_error()
sql/ha_ndbcluster.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
sql/ha_partition.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
We can't set up or use part_info when creating handler as there is not yet any table object
New ha_intialise() to work with TDC (Done by Mikael)
sql/ha_partition.h:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
Got set_part_info() from Mikael
sql/handler.cc:
We new use TABLE_SHARE instead of TABLE when creating engine handlers
ha_delete_table() now also takes database as an argument
handler::ha_open() now takes TABLE as argument
ha_open() now calls ha_allocate_read_write_set()
Simplify ha_allocate_read_write_set()
Remove ha_deallocate_read_write_set()
Use table_share (Cached by table definition cache)
sql/handler.h:
New table flag: HA_NO_COPY_ON_ALTER (used by merge tables)
Remove ha_deallocate_read_write_set()
get_new_handler() now takes TABLE_SHARE as argument
ha_delete_table() now gets database as argument
sql/item.cc:
table_name and db are now LEX_STRING objects
When creating fields, we have now have to call field->init(table)
move_field -> move_field_offset()
sql/item.h:
tmp_table_field_from_field_type() now takes an extra paramenter 'fixed_length' to allow one to force usage of CHAR
instead of BLOB
sql/item_cmpfunc.cc:
Fixed call to tmp_table_field_from_field_type()
sql/item_create.cc:
Assert if new not handled cast type
sql/item_func.cc:
When creating fields, we have now have to call field->init(table)
dummy_table used by 'sp' now needs a TABLE_SHARE object
sql/item_subselect.cc:
Trivial code cleanups
sql/item_sum.cc:
When creating fields, we have now have to call field->init(table)
sql/item_timefunc.cc:
Item_func_str_to_date::tmp_table_field() now replaced by call to
tmp_table_field_from_field_type() (see item_timefunc.h)
sql/item_timefunc.h:
Simply tmp_table_field()
sql/item_uniq.cc:
When creating fields, we have now have to call field->init(table)
sql/key.cc:
Added 'KEY' argument to 'find_ref_key' to simplify code
sql/lock.cc:
More debugging
Use create_table_def_key() to create key for table cache
Allocate TABLE_SHARE properly when creating name lock
Fix that locked_table_name doesn't test same table twice
sql/mysql_priv.h:
New functions for table definition cache
New interfaces to a lot of functions.
New faster interface to find_temporary_table() and close_temporary_table()
sql/mysqld.cc:
Added support for table definition cache of size 'table_def_size'
Fixed som calls to strnmov()
Changed name of 'table_cache' to 'table_open_cache'
sql/opt_range.cc:
Use new interfaces
Fixed warnings from valgrind
sql/parse_file.cc:
Safer calls to strxnmov()
Fixed typo
sql/set_var.cc:
Added variable 'table_definition_cache'
Variable table_cache renamed to 'table_open_cache'
sql/slave.cc:
Use new interface
sql/sp.cc:
Proper use of TABLE_SHARE
sql/sp_head.cc:
Remove compiler warnings
We have now to call field->init(table)
sql/sp_head.h:
Pointers to parsed strings are now const
sql/sql_acl.cc:
table_name is now a LEX_STRING
sql/sql_base.cc:
Main implementation of table definition cache
(The #ifdef's are there for the future when table definition cache will replace open table cache)
Now table definitions are cached indepndent of open tables, which will speed up things when a table is in use at once from several places
Views are not yet cached; For the moment we only cache if a table is a view or not.
Faster implementation of find_temorary_table()
Replace 'wait_for_refresh()' with the more general function 'wait_for_condition()'
Drop table is slightly faster as we can use the table definition cache to know the type of the table
sql/sql_cache.cc:
table_cache_key and table_name are now LEX_STRING
'sDBUG print fixes
sql/sql_class.cc:
table_cache_key is now a LEX_STRING
safer strxnmov()
sql/sql_class.h:
Added number of open table shares (table definitions)
sql/sql_db.cc:
safer strxnmov()
sql/sql_delete.cc:
Use new interface to find_temporary_table()
sql/sql_derived.cc:
table_name is now a LEX_STRING
sql/sql_handler.cc:
TABLE_SHARE->db and TABLE_SHARE->table_name are now LEX_STRING's
sql/sql_insert.cc:
TABLE_SHARE->db and TABLE_SHARE->table_name are now LEX_STRING's
sql/sql_lex.cc:
Make parsed string a const (to quickly find out if anything is trying to change the query string)
sql/sql_lex.h:
Make parsed string a const (to quickly find out if anything is trying to change the query string)
sql/sql_load.cc:
Safer strxnmov()
sql/sql_parse.cc:
Better error if wrong DB name
sql/sql_partition.cc:
part_info moved to TABLE from TABLE_SHARE
Indentation changes
sql/sql_select.cc:
Indentation fixes
Call field->init(TABLE) for new created fields
Update create_tmp_table() to use TABLE_SHARE properly
sql/sql_select.h:
Call field->init(TABLE) for new created fields
sql/sql_show.cc:
table_name is now a LEX_STRING
part_info moved to TABLE
sql/sql_table.cc:
Use table definition cache to speed up delete of tables
Fixed calls to functions with new interfaces
Don't use 'share_not_to_be_used'
Instead of doing openfrm() when doing repair, we now have to call
get_table_share() followed by open_table_from_share().
Replace some fn_format() with faster unpack_filename().
Safer strxnmov()
part_info is now in TABLE
Added Mikaels patch for partition and ALTER TABLE
Instead of using 'TABLE_SHARE->is_view' use 'table_flags() & HA_NO_COPY_ON_ALTER
sql/sql_test.cc:
table_name and table_cache_key are now LEX_STRING's
sql/sql_trigger.cc:
TABLE_SHARE->db and TABLE_SHARE->table_name are now LEX_STRING's
safer strxnmov()
Removed compiler warnings
sql/sql_update.cc:
Call field->init(TABLE) after field is created
sql/sql_view.cc:
safer strxnmov()
Create common TABLE_SHARE object for views to allow us to cache if table is a view
sql/structs.h:
Added SHOW_TABLE_DEFINITIONS
sql/table.cc:
Creation and destruct of TABLE_SHARE objects that are common for many TABLE objects
The table opening process now works the following way:
- Create common TABLE_SHARE object
- Read the .frm file and unpack it into the TABLE_SHARE object
- Create a TABLE object based on the information in the TABLE_SHARE
object and open a handler to the table object
open_table_def() is written in such a way that it should be trival to add parsing of the .frm files in new formats
sql/table.h:
TABLE objects for the same database table now share a common TABLE_SHARE object
In TABLE_SHARE the most common strings are now LEX_STRING's
sql/unireg.cc:
Changed arguments to rea_create_table() to have same order as other functions
Call field->init(table) for new created fields
sql/unireg.h:
Added OPEN_VIEW
strings/strxnmov.c:
Change strxnmov() to always add end \0
This makes usage of strxnmov() safer as most of MySQL code assumes that strxnmov() will create a null terminated string
2005-11-23 21:45:02 +01:00
|
|
|
sleep 2;
|
2004-11-08 00:54:23 +01:00
|
|
|
send update t1, v1 set t1.b=t1.a+t1.b+v1.b where t1.a=v1.a;
|
|
|
|
|
|
|
|
connection locker;
|
|
|
|
sleep 2;
|
|
|
|
unlock tables;
|
|
|
|
|
|
|
|
connection changer;
|
|
|
|
reap;
|
|
|
|
|
|
|
|
connection updater;
|
|
|
|
reap;
|
|
|
|
select * from t1;
|
|
|
|
select * from t2;
|
|
|
|
drop view v1;
|
|
|
|
drop table t1, t2;
|