mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-5.0
into sanja.is.com.ua:/home/bell/mysql/bk/work-trigger-5.0 mysql-test/r/information_schema.result: Auto merged mysql-test/t/mysqldump.test: Auto merged sql/mysqld.cc: Auto merged sql/set_var.cc: Auto merged sql/sql_show.cc: Auto merged mysql-test/r/mysqldump.result: merge sql/sql_trigger.cc: merge
This commit is contained in:
@ -713,6 +713,7 @@ information_schema ROUTINES SQL_MODE
|
||||
information_schema VIEWS VIEW_DEFINITION
|
||||
information_schema TRIGGERS ACTION_CONDITION
|
||||
information_schema TRIGGERS ACTION_STATEMENT
|
||||
information_schema TRIGGERS SQL_MODE
|
||||
select table_name, column_name, data_type from information_schema.columns
|
||||
where data_type = 'datetime';
|
||||
table_name column_name data_type
|
||||
@ -790,45 +791,45 @@ set @fired:= "Yes";
|
||||
end if;
|
||||
end|
|
||||
show triggers;
|
||||
Trigger Event Table Statement Timing Created
|
||||
Trigger Event Table Statement Timing Created sql_mode
|
||||
trg1 INSERT t1
|
||||
begin
|
||||
if new.j > 10 then
|
||||
set new.j := 10;
|
||||
end if;
|
||||
end BEFORE NULL
|
||||
end BEFORE NULL
|
||||
trg2 UPDATE t1
|
||||
begin
|
||||
if old.i % 2 = 0 then
|
||||
set new.j := -1;
|
||||
end if;
|
||||
end BEFORE NULL
|
||||
end BEFORE NULL
|
||||
trg3 UPDATE t1
|
||||
begin
|
||||
if new.j = -1 then
|
||||
set @fired:= "Yes";
|
||||
end if;
|
||||
end AFTER NULL
|
||||
end AFTER NULL
|
||||
select * from information_schema.triggers;
|
||||
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED
|
||||
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE
|
||||
NULL test trg1 INSERT NULL test t1 0 NULL
|
||||
begin
|
||||
if new.j > 10 then
|
||||
set new.j := 10;
|
||||
end if;
|
||||
end ROW BEFORE NULL NULL OLD NEW NULL
|
||||
end ROW BEFORE NULL NULL OLD NEW NULL
|
||||
NULL test trg2 UPDATE NULL test t1 0 NULL
|
||||
begin
|
||||
if old.i % 2 = 0 then
|
||||
set new.j := -1;
|
||||
end if;
|
||||
end ROW BEFORE NULL NULL OLD NEW NULL
|
||||
end ROW BEFORE NULL NULL OLD NEW NULL
|
||||
NULL test trg3 UPDATE NULL test t1 0 NULL
|
||||
begin
|
||||
if new.j = -1 then
|
||||
set @fired:= "Yes";
|
||||
end if;
|
||||
end ROW AFTER NULL NULL OLD NEW NULL
|
||||
end ROW AFTER NULL NULL OLD NEW NULL
|
||||
drop trigger trg1;
|
||||
drop trigger trg2;
|
||||
drop trigger trg3;
|
||||
|
@ -1685,6 +1685,7 @@ end|
|
||||
create trigger trg2 before update on t1 for each row begin
|
||||
if old.a % 2 = 0 then set new.b := 12; end if;
|
||||
end|
|
||||
set sql_mode="traditional"|
|
||||
create trigger trg3 after update on t1 for each row
|
||||
begin
|
||||
if new.a = -1 then
|
||||
@ -1697,24 +1698,25 @@ if new.a > 10 then
|
||||
set @fired:= "No";
|
||||
end if;
|
||||
end|
|
||||
set sql_mode=default|
|
||||
show triggers like "t1";
|
||||
Trigger Event Table Statement Timing Created
|
||||
Trigger Event Table Statement Timing Created sql_mode
|
||||
trg1 INSERT t1
|
||||
begin
|
||||
if new.a > 10 then
|
||||
set new.a := 10;
|
||||
set new.a := 11;
|
||||
end if;
|
||||
end BEFORE 0000-00-00 00:00:00
|
||||
end BEFORE 0000-00-00 00:00:00
|
||||
trg2 UPDATE t1 begin
|
||||
if old.a % 2 = 0 then set new.b := 12; end if;
|
||||
end BEFORE 0000-00-00 00:00:00
|
||||
end BEFORE 0000-00-00 00:00:00
|
||||
trg3 UPDATE t1
|
||||
begin
|
||||
if new.a = -1 then
|
||||
set @fired:= "Yes";
|
||||
end if;
|
||||
end AFTER 0000-00-00 00:00:00
|
||||
end AFTER 0000-00-00 00:00:00 STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER
|
||||
INSERT INTO t1 (a) VALUES (1),(2),(3),(22);
|
||||
update t1 set a = 4 where a=3;
|
||||
|
||||
@ -1736,30 +1738,32 @@ CREATE TABLE `t1` (
|
||||
`b` bigint(20) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
|
||||
/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;
|
||||
DELIMITER //;
|
||||
CREATE TRIGGER `trg1` BEFORE INSERT ON `t1`
|
||||
FOR EACH ROW
|
||||
/*!50003 SET SESSION SQL_MODE=""*/ //
|
||||
/*!50003 CREATE TRIGGER `trg1` BEFORE INSERT ON `t1` FOR EACH ROW
|
||||
begin
|
||||
if new.a > 10 then
|
||||
set new.a := 10;
|
||||
set new.a := 11;
|
||||
end if;
|
||||
end//
|
||||
end*/ //
|
||||
|
||||
CREATE TRIGGER `trg2` BEFORE UPDATE ON `t1`
|
||||
FOR EACH ROW begin
|
||||
/*!50003 SET SESSION SQL_MODE=""*/ //
|
||||
/*!50003 CREATE TRIGGER `trg2` BEFORE UPDATE ON `t1` FOR EACH ROW begin
|
||||
if old.a % 2 = 0 then set new.b := 12; end if;
|
||||
end//
|
||||
end*/ //
|
||||
|
||||
CREATE TRIGGER `trg3` AFTER UPDATE ON `t1`
|
||||
FOR EACH ROW
|
||||
/*!50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER"*/ //
|
||||
/*!50003 CREATE TRIGGER `trg3` AFTER UPDATE ON `t1` FOR EACH ROW
|
||||
begin
|
||||
if new.a = -1 then
|
||||
set @fired:= "Yes";
|
||||
end if;
|
||||
end//
|
||||
end*/ //
|
||||
|
||||
DELIMITER ;//
|
||||
/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE*/;
|
||||
|
||||
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
|
||||
LOCK TABLES `t1` WRITE;
|
||||
@ -1771,16 +1775,18 @@ CREATE TABLE `t2` (
|
||||
`a` int(11) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
|
||||
|
||||
/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;
|
||||
DELIMITER //;
|
||||
CREATE TRIGGER `trg4` BEFORE INSERT ON `t2`
|
||||
FOR EACH ROW
|
||||
/*!50003 SET SESSION SQL_MODE="STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER"*/ //
|
||||
/*!50003 CREATE TRIGGER `trg4` BEFORE INSERT ON `t2` FOR EACH ROW
|
||||
begin
|
||||
if new.a > 10 then
|
||||
set @fired:= "No";
|
||||
end if;
|
||||
end//
|
||||
end*/ //
|
||||
|
||||
DELIMITER ;//
|
||||
/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE*/;
|
||||
|
||||
/*!40000 ALTER TABLE `t2` DISABLE KEYS */;
|
||||
LOCK TABLES `t2` WRITE;
|
||||
@ -1844,4 +1850,28 @@ show tables;
|
||||
Tables_in_test
|
||||
t1
|
||||
t2
|
||||
show triggers;
|
||||
Trigger Event Table Statement Timing Created sql_mode
|
||||
trg1 INSERT t1
|
||||
begin
|
||||
if new.a > 10 then
|
||||
set new.a := 10;
|
||||
set new.a := 11;
|
||||
end if;
|
||||
end BEFORE #
|
||||
trg2 UPDATE t1 begin
|
||||
if old.a % 2 = 0 then set new.b := 12; end if;
|
||||
end BEFORE #
|
||||
trg3 UPDATE t1
|
||||
begin
|
||||
if new.a = -1 then
|
||||
set @fired:= "Yes";
|
||||
end if;
|
||||
end AFTER # STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER
|
||||
trg4 INSERT t2
|
||||
begin
|
||||
if new.a > 10 then
|
||||
set @fired:= "No";
|
||||
end if;
|
||||
end BEFORE # STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER
|
||||
DROP TABLE t1, t2;
|
||||
|
@ -2658,20 +2658,20 @@ call avg ()|
|
||||
drop procedure avg|
|
||||
drop procedure if exists bug6129|
|
||||
set @old_mode= @@sql_mode;
|
||||
set @@sql_mode= "";
|
||||
set @@sql_mode= "ERROR_FOR_DIVISION_BY_ZERO";
|
||||
create procedure bug6129()
|
||||
select @@sql_mode|
|
||||
call bug6129()|
|
||||
@@sql_mode
|
||||
|
||||
ERROR_FOR_DIVISION_BY_ZERO
|
||||
set @@sql_mode= "NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO"|
|
||||
call bug6129()|
|
||||
@@sql_mode
|
||||
NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO
|
||||
ERROR_FOR_DIVISION_BY_ZERO
|
||||
set @@sql_mode= "NO_ZERO_IN_DATE"|
|
||||
call bug6129()|
|
||||
@@sql_mode
|
||||
NO_ZERO_IN_DATE
|
||||
ERROR_FOR_DIVISION_BY_ZERO
|
||||
set @@sql_mode=@old_mode;
|
||||
drop procedure bug6129|
|
||||
drop procedure if exists bug9856|
|
||||
|
@ -595,3 +595,50 @@ update t1 set col2 = 4;
|
||||
ERROR 42000: FUNCTION test.bug5893 does not exist
|
||||
drop trigger t1_bu;
|
||||
drop table t1;
|
||||
set sql_mode='ansi';
|
||||
create table t1 ("t1 column" int);
|
||||
create trigger t1_bi before insert on t1 for each row set new."t1 column" = 5;
|
||||
set sql_mode=default;
|
||||
insert into t1 values (0);
|
||||
create trigger t1_af after insert on t1 for each row set @a=10;
|
||||
insert into t1 values (0);
|
||||
select * from t1;
|
||||
t1 column
|
||||
5
|
||||
5
|
||||
select @a;
|
||||
@a
|
||||
10
|
||||
show triggers;
|
||||
Trigger Event Table Statement Timing Created sql_mode
|
||||
t1_bi INSERT t1 set new."t1 column" = 5 BEFORE # REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI
|
||||
t1_af INSERT t1 set @a=10 AFTER #
|
||||
select * from information_schema.triggers;
|
||||
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE
|
||||
NULL test t1_bi INSERT NULL test t1 0 NULL set new."t1 column" = 5 ROW BEFORE NULL NULL OLD NEW # REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI
|
||||
NULL test t1_af INSERT NULL test t1 0 NULL set @a=10 ROW AFTER NULL NULL OLD NEW #
|
||||
drop table t1;
|
||||
set sql_mode="traditional";
|
||||
create table t1 (a date);
|
||||
insert into t1 values ('2004-01-00');
|
||||
ERROR 22007: Incorrect date value: '2004-01-00' for column 'a' at row 1
|
||||
set sql_mode="";
|
||||
create trigger t1_bi before insert on t1 for each row set new.a = '2004-01-00';
|
||||
set sql_mode="traditional";
|
||||
insert into t1 values ('2004-01-01');
|
||||
select * from t1;
|
||||
a
|
||||
2004-01-00
|
||||
set sql_mode=default;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`a` date default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
show triggers;
|
||||
Trigger Event Table Statement Timing Created sql_mode
|
||||
t1_bi INSERT t1 set new.a = '2004-01-00' BEFORE #
|
||||
select * from information_schema.triggers;
|
||||
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE
|
||||
NULL test t1_bi INSERT NULL test t1 0 NULL set new.a = '2004-01-00' ROW BEFORE NULL NULL OLD NEW #
|
||||
drop table t1;
|
||||
|
@ -729,6 +729,7 @@ end|
|
||||
create trigger trg2 before update on t1 for each row begin
|
||||
if old.a % 2 = 0 then set new.b := 12; end if;
|
||||
end|
|
||||
set sql_mode="traditional"|
|
||||
create trigger trg3 after update on t1 for each row
|
||||
begin
|
||||
if new.a = -1 then
|
||||
@ -741,6 +742,7 @@ begin
|
||||
set @fired:= "No";
|
||||
end if;
|
||||
end|
|
||||
set sql_mode=default|
|
||||
delimiter ;|
|
||||
--replace_column 6 '0000-00-00 00:00:00'
|
||||
show triggers like "t1";
|
||||
@ -756,4 +758,6 @@ drop table t1;
|
||||
--exec $MYSQL test < var/tmp/mysqldump.sql
|
||||
# Check that tables have been reloaded
|
||||
show tables;
|
||||
--replace_column 6 #
|
||||
show triggers;
|
||||
DROP TABLE t1, t2;
|
||||
|
@ -3378,7 +3378,7 @@ drop procedure avg|
|
||||
drop procedure if exists bug6129|
|
||||
--enable_warnings
|
||||
set @old_mode= @@sql_mode;
|
||||
set @@sql_mode= "";
|
||||
set @@sql_mode= "ERROR_FOR_DIVISION_BY_ZERO";
|
||||
create procedure bug6129()
|
||||
select @@sql_mode|
|
||||
call bug6129()|
|
||||
|
@ -610,3 +610,39 @@ update t1 set col2 = 4;
|
||||
# This should not crash server too.
|
||||
drop trigger t1_bu;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# storing and restoring parsing modes for triggers (BUG#5891)
|
||||
#
|
||||
set sql_mode='ansi';
|
||||
create table t1 ("t1 column" int);
|
||||
create trigger t1_bi before insert on t1 for each row set new."t1 column" = 5;
|
||||
set sql_mode=default;
|
||||
insert into t1 values (0);
|
||||
# create trigger with different sql_mode
|
||||
create trigger t1_af after insert on t1 for each row set @a=10;
|
||||
insert into t1 values (0);
|
||||
select * from t1;
|
||||
select @a;
|
||||
--replace_column 6 #
|
||||
show triggers;
|
||||
--replace_column 17 #
|
||||
select * from information_schema.triggers;
|
||||
drop table t1;
|
||||
# check that rigger preserve sql_mode during execution
|
||||
set sql_mode="traditional";
|
||||
create table t1 (a date);
|
||||
-- error 1292
|
||||
insert into t1 values ('2004-01-00');
|
||||
set sql_mode="";
|
||||
create trigger t1_bi before insert on t1 for each row set new.a = '2004-01-00';
|
||||
set sql_mode="traditional";
|
||||
insert into t1 values ('2004-01-01');
|
||||
select * from t1;
|
||||
set sql_mode=default;
|
||||
show create table t1;
|
||||
--replace_column 6 #
|
||||
show triggers;
|
||||
--replace_column 17 #
|
||||
select * from information_schema.triggers;
|
||||
drop table t1;
|
||||
|
Reference in New Issue
Block a user