Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
e41f5cc4
Commit
e41f5cc4
authored
Feb 21, 2006
by
unknown
Browse files
Options
Browse Files
Download
Plain Diff
manual merge
sql/event.cc: Auto merged sql/event.h: Auto merged sql/sql_show.cc: Auto merged
parents
b3673095
203b37ef
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
299 additions
and
5 deletions
+299
-5
mysql-test/r/events_bugs.result
mysql-test/r/events_bugs.result
+149
-0
mysql-test/t/events_bugs.test
mysql-test/t/events_bugs.test
+121
-0
sql/event.cc
sql/event.cc
+8
-0
sql/event.h
sql/event.h
+0
-1
sql/event_timed.cc
sql/event_timed.cc
+10
-1
sql/sql_show.cc
sql/sql_show.cc
+11
-3
No files found.
mysql-test/r/events_bugs.result
0 → 100644
View file @
e41f5cc4
create database if not exists events_test;
use events_test;
set global event_scheduler=0;
"Wait a bit to settle down"
delete from mysql.event;
set global event_scheduler= 1;
set @old_sql_mode:=@@sql_mode;
set sql_mode=ansi;
select get_lock('test_bug16407', 60);
get_lock('test_bug16407', 60)
1
create event e_16407 on schedule every 60 second do
begin
select get_lock('test_bug16407', 60);
drop table "hashed_num";
end|
"Now if everything is fine the event has compiled and is locked
show processlist;
Id User Host db Command Time State Info
# root localhost events_test Query # NULL show processlist
# event_scheduler NULL Connect # Sleeping NULL
# root events_test Connect # User lock select get_lock('test_bug16407', 60)
select release_lock('test_bug16407');
release_lock('test_bug16407')
1
set global event_scheduler= 0;
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
event_schema event_name sql_mode
events_test e_16407 REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI
"Let's check whether we change the sql_mode on ALTER EVENT"
set sql_mode='traditional';
alter event e_16407 do select 1;
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
event_schema event_name sql_mode
events_test e_16407 STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER
drop event e_16407;
"Another sql_mode test"
set sql_mode="traditional";
create table events_smode_test(ev_name char(10), a date) engine=myisam;
"This should never insert something"
create event ee_16407_2 on schedule every 60 second do
begin
select get_lock('ee_16407_2', 60);
insert into events_test.events_smode_test values('ee_16407_2','1980-19-02');
end|
insert into events_smode_test values ('test','1980-19-02')|
ERROR 22007: Incorrect date value: '1980-19-02' for column 'a' at row 1
"This is ok"
create event ee_16407_3 on schedule every 60 second do
begin
select get_lock('ee_16407_2', 60);
insert into events_test.events_smode_test values ('ee_16407_3','1980-02-19');
insert into events_test.events_smode_test values ('ee_16407_3','1980-02-29');
end|
set sql_mode=""|
"This will insert rows but they will be truncated"
create event ee_16407_4 on schedule every 60 second do
begin
select get_lock('ee_16407_2', 60);
insert into events_test.events_smode_test values ('ee_16407_4','10-11-1956');
end|
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
event_schema event_name sql_mode
events_test ee_16407_2 STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER
events_test ee_16407_3 STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER
events_test ee_16407_4
set sql_mode="ansi";
select get_lock('ee_16407_2', 60);
get_lock('ee_16407_2', 60)
1
set global event_scheduler= 1;
show processlist;
Id User Host db Command Time State Info
# root localhost events_test Query # NULL show processlist
# event_scheduler NULL Connect # Sleeping NULL
# root events_test Connect # User lock select get_lock('ee_16407_2', 60)
# root events_test Connect # User lock select get_lock('ee_16407_2', 60)
# root events_test Connect # User lock select get_lock('ee_16407_2', 60)
select release_lock('ee_16407_2');
release_lock('ee_16407_2')
1
show processlist;
Id User Host db Command Time State Info
# root localhost events_test Query # NULL show processlist
# event_scheduler NULL Connect # Sleeping NULL
set global event_scheduler= 0;
select * from events_smode_test order by ev_name, a;
ev_name a
ee_16407_3 1980-02-19
ee_16407_3 1980-02-29
ee_16407_4 0000-00-00
"OK, last check before we drop them"
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
event_schema event_name sql_mode
events_test ee_16407_2 STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER
events_test ee_16407_3 STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER
events_test ee_16407_4
drop event ee_16407_2;
drop event ee_16407_3;
drop event ee_16407_4;
"And now one last test regarding sql_mode and call of SP from an event"
delete from events_smode_test;
set sql_mode='traditional';
create procedure ee_16407_5_pendant() begin insert into events_test.events_smode_test values('ee_16407_5','2001-02-29'); end|
create procedure ee_16407_6_pendant() begin insert into events_test.events_smode_test values('ee_16407_6','2004-02-29'); end|
create event ee_16407_5 on schedule every 60 second do
begin
select get_lock('ee_16407_5', 60);
call events_test.ee_16407_5_pendant();
end|
create event ee_16407_6 on schedule every 60 second do
begin
select get_lock('ee_16407_5', 60);
call events_test.ee_16407_6_pendant();
end|
set sql_mode='ansi';
select get_lock('ee_16407_5', 60);
get_lock('ee_16407_5', 60)
1
set global event_scheduler= 1;
show processlist;
Id User Host db Command Time State Info
# root localhost events_test Query # NULL show processlist
# event_scheduler NULL Connect # Sleeping NULL
# root events_test Connect # User lock select get_lock('ee_16407_5', 60)
# root events_test Connect # User lock select get_lock('ee_16407_5', 60)
select release_lock('ee_16407_5');
release_lock('ee_16407_5')
1
show processlist;
Id User Host db Command Time State Info
# root localhost events_test Query # NULL show processlist
# event_scheduler NULL Connect # Sleeping NULL
select * from events_smode_test order by ev_name, a;
ev_name a
ee_16407_6 2004-02-29
"And here we check one more time before we drop the events"
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
event_schema event_name sql_mode
events_test ee_16407_5 STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER
events_test ee_16407_6 STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER
drop event ee_16407_5;
drop event ee_16407_6;
drop procedure ee_16407_5_pendant;
drop procedure ee_16407_6_pendant;
set global event_scheduler= 0;
drop table events_smode_test;
set sql_mode=@old_sql_mode;
drop database events_test;
mysql-test/t/events_bugs.test
0 → 100644
View file @
e41f5cc4
create
database
if
not
exists
events_test
;
use
events_test
;
#
# Start - 16407: Events: Changes in sql_mode won't be taken into account
#
set
global
event_scheduler
=
0
;
--
echo
"Wait a bit to settle down"
--
sleep
1
delete
from
mysql
.
event
;
set
global
event_scheduler
=
1
;
set
@
old_sql_mode
:=@@
sql_mode
;
set
sql_mode
=
ansi
;
select
get_lock
(
'test_bug16407'
,
60
);
delimiter
|
;
create
event
e_16407
on
schedule
every
60
second
do
begin
select
get_lock
(
'test_bug16407'
,
60
);
drop
table
"hashed_num"
;
end
|
delimiter
;
|
--
sleep
1
--
echo
"Now if everything is fine the event has compiled and is locked
--replace_column 1 # 6 #
show processlist;
select release_lock('test_bug16407');
set global event_scheduler= 0;
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
--echo "
Let
's check whether we change the sql_mode on ALTER EVENT"
set sql_mode='
traditional
';
alter event e_16407 do select 1;
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
drop event e_16407;
--echo "Another sql_mode test"
set sql_mode="traditional";
create table events_smode_test(ev_name char(10), a date) engine=myisam;
--echo "This should never insert something"
delimiter |;
create event ee_16407_2 on schedule every 60 second do
begin
select get_lock('
ee_16407_2
', 60);
insert into events_test.events_smode_test values('
ee_16407_2
','
1980
-
19
-
02
');
end|
--error 1292
insert into events_smode_test values ('
test
','
1980
-
19
-
02
')|
--echo "This is ok"
create event ee_16407_3 on schedule every 60 second do
begin
select get_lock('
ee_16407_2
', 60);
insert into events_test.events_smode_test values ('
ee_16407_3
','
1980
-
02
-
19
');
insert into events_test.events_smode_test values ('
ee_16407_3
','
1980
-
02
-
29
');
end|
set sql_mode=""|
--echo "This will insert rows but they will be truncated"
create event ee_16407_4 on schedule every 60 second do
begin
select get_lock('
ee_16407_2
', 60);
insert into events_test.events_smode_test values ('
ee_16407_4
','
10
-
11
-
1956
');
end|
delimiter ;|
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
set sql_mode="ansi";
select get_lock('
ee_16407_2
', 60);
set global event_scheduler= 1;
--sleep 1
--replace_column 1 # 6 #
show processlist;
select release_lock('
ee_16407_2
');
--sleep 3
--replace_column 1 # 6 #
show processlist;
set global event_scheduler= 0;
select * from events_smode_test order by ev_name, a;
--echo "OK, last check before we drop them"
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
drop event ee_16407_2;
drop event ee_16407_3;
drop event ee_16407_4;
--echo "And now one last test regarding sql_mode and call of SP from an event"
delete from events_smode_test;
set sql_mode='
traditional
';
delimiter |;
create procedure ee_16407_5_pendant() begin insert into events_test.events_smode_test values('
ee_16407_5
','
2001
-
02
-
29
'); end|
create procedure ee_16407_6_pendant() begin insert into events_test.events_smode_test values('
ee_16407_6
','
2004
-
02
-
29
'); end|
create event ee_16407_5 on schedule every 60 second do
begin
select get_lock('
ee_16407_5
', 60);
call events_test.ee_16407_5_pendant();
end|
create event ee_16407_6 on schedule every 60 second do
begin
select get_lock('
ee_16407_5
', 60);
call events_test.ee_16407_6_pendant();
end|
delimiter ;|
set sql_mode='
ansi
';
select get_lock('
ee_16407_5
', 60);
set global event_scheduler= 1;
--sleep 1
--replace_column 1 # 6 #
show processlist;
select release_lock('
ee_16407_5
');
--sleep 3
--replace_column 1 # 6 #
show processlist;
select * from events_smode_test order by ev_name, a;
--echo "And here we check one more time before we drop the events"
select event_schema, event_name, sql_mode from information_schema.events order by event_schema, event_name;
drop event ee_16407_5;
drop event ee_16407_6;
drop procedure ee_16407_5_pendant;
drop procedure ee_16407_6_pendant;
set global event_scheduler= 0;
drop table events_smode_test;
set sql_mode=@old_sql_mode;
#
# End - 16407: Events: Changes in sql_mode won'
t
be
taken
into
account
#
drop
database
events_test
;
sql/event.cc
View file @
e41f5cc4
...
...
@@ -623,10 +623,18 @@ evex_fill_row(THD *thd, TABLE *table, event_timed *et, my_bool is_update)
table
->
field
[
EVEX_FIELD_STATUS
]
->
store
((
longlong
)
et
->
status
);
/*
Change the SQL_MODE only if body was present in an ALTER EVENT and of course
always during CREATE EVENT.
*/
if
(
et
->
body
.
str
)
{
table
->
field
[
EVEX_FIELD_SQL_MODE
]
->
store
((
longlong
)
thd
->
variables
.
sql_mode
);
if
(
table
->
field
[
field_num
=
EVEX_FIELD_BODY
]
->
store
(
et
->
body
.
str
,
et
->
body
.
length
,
system_charset_info
))
goto
trunc_err
;
}
if
(
et
->
starts
.
year
)
{
...
...
sql/event.h
View file @
e41f5cc4
...
...
@@ -112,7 +112,6 @@ class event_timed
enum
enum_event_status
status
;
sp_head
*
sphead
;
ulong
sql_mode
;
const
uchar
*
body_begin
;
bool
dropped
;
...
...
sql/event_timed.cc
View file @
e41f5cc4
...
...
@@ -45,6 +45,8 @@ event_timed::init()
definer_user
.
str
=
definer_host
.
str
=
0
;
definer_user
.
length
=
definer_host
.
length
=
0
;
sql_mode
=
0
;
DBUG_VOID_RETURN
;
}
...
...
@@ -580,6 +582,9 @@ event_timed::load_from_row(MEM_ROOT *mem_root, TABLE *table)
else
et
->
comment
.
length
=
0
;
et
->
sql_mode
=
(
ulong
)
table
->
field
[
EVEX_FIELD_SQL_MODE
]
->
val_int
();
DBUG_RETURN
(
0
);
error:
DBUG_RETURN
(
EVEX_GET_FIELD_FAILED
);
...
...
@@ -1232,6 +1237,7 @@ event_timed::compile(THD *thd, MEM_ROOT *mem_root)
char
*
old_query
;
uint
old_query_len
;
st_sp_chistics
*
p
;
ulong
old_sql_mode
=
thd
->
variables
.
sql_mode
;
char
create_buf
[
2048
];
String
show_create
(
create_buf
,
sizeof
(
create_buf
),
system_charset_info
);
CHARSET_INFO
*
old_character_set_client
,
...
...
@@ -1251,6 +1257,8 @@ event_timed::compile(THD *thd, MEM_ROOT *mem_root)
thd
->
update_charset
();
DBUG_ENTER
(
"event_timed::compile"
);
DBUG_PRINT
(
"info"
,(
"old_sql_mode=%d new_sql_mode=%d"
,
old_sql_mode
,
sql_mode
));
thd
->
variables
.
sql_mode
=
this
->
sql_mode
;
/* Change the memory root for the execution time */
if
(
mem_root
)
{
...
...
@@ -1302,7 +1310,7 @@ event_timed::compile(THD *thd, MEM_ROOT *mem_root)
TODO: Handle sql_mode!!
*/
sphead
->
set_definer
(
definer
.
str
,
definer
.
length
);
sphead
->
set_info
(
0
,
0
,
&
lex
.
sp_chistics
,
0
/*sql_mode*/
);
sphead
->
set_info
(
0
,
0
,
&
lex
.
sp_chistics
,
sql_mode
);
sphead
->
optimize
();
ret
=
0
;
done:
...
...
@@ -1316,6 +1324,7 @@ event_timed::compile(THD *thd, MEM_ROOT *mem_root)
thd
->
query_length
=
old_query_len
;
thd
->
db
=
old_db
;
thd
->
variables
.
sql_mode
=
old_sql_mode
;
thd
->
variables
.
character_set_client
=
old_character_set_client
;
thd
->
variables
.
character_set_results
=
old_character_set_results
;
thd
->
variables
.
collation_connection
=
old_collation_connection
;
...
...
sql/sql_show.cc
View file @
e41f5cc4
...
...
@@ -3954,8 +3954,16 @@ fill_events_copy_to_schema_table(THD *thd, TABLE *sch_table, TABLE *event_table)
sch_table
->
field
[
3
]
->
store
(
et
.
definer
.
str
,
et
.
definer
.
length
,
scs
);
sch_table
->
field
[
4
]
->
store
(
et
.
body
.
str
,
et
.
body
.
length
,
scs
);
// [9] is SQL_MODE and is NULL for now, will be fixed later
sch_table
->
field
[
9
]
->
set_null
();
// [9] is SQL_MODE
{
const
char
*
sql_mode_str
=
""
;
ulong
sql_mode_len
=
0
;
sql_mode_str
=
sys_var_thd_sql_mode
::
symbolic_mode_representation
(
thd
,
et
.
sql_mode
,
&
sql_mode_len
);
sch_table
->
field
[
9
]
->
store
((
const
char
*
)
sql_mode_str
,
sql_mode_len
,
scs
);
}
if
(
et
.
expression
)
{
String
show_str
;
...
...
@@ -4802,7 +4810,7 @@ ST_FIELD_INFO events_fields_info[]=
{
"EXECUTE_AT"
,
0
,
MYSQL_TYPE_TIMESTAMP
,
0
,
1
,
"Execute at"
},
{
"INTERVAL_VALUE"
,
256
,
MYSQL_TYPE_STRING
,
0
,
1
,
"Interval value"
},
{
"INTERVAL_FIELD"
,
18
,
MYSQL_TYPE_STRING
,
0
,
1
,
"Interval field"
},
{
"SQL_MODE"
,
65535
,
MYSQL_TYPE_STRING
,
0
,
1
,
0
},
{
"SQL_MODE"
,
65535
,
MYSQL_TYPE_STRING
,
0
,
0
,
0
},
{
"STARTS"
,
0
,
MYSQL_TYPE_TIMESTAMP
,
0
,
1
,
"Starts"
},
{
"ENDS"
,
0
,
MYSQL_TYPE_TIMESTAMP
,
0
,
1
,
"Ends"
},
{
"STATUS"
,
8
,
MYSQL_TYPE_STRING
,
0
,
0
,
"Status"
},
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment