Commit 7eebb751 authored by unknown's avatar unknown

Add SLEEP(seconds) function, which always returns 0 after the given

number of seconds (which can include microseconds). (Bug #6760)


mysql-test/r/func_misc.result:
  Add new results
mysql-test/t/func_misc.test:
  Add new regression test.
sql/item_create.cc:
  Add create_func_sleep()
sql/item_create.h:
  Add create_func_sleep()
sql/item_func.cc:
  Add sleep() implementation
sql/item_func.h:
  Add class for sleep() function
sql/lex.h:
  Handle SLEEP() function
parent 036c5b28
No related merge requests found
...@@ -59,3 +59,14 @@ t1 CREATE TABLE `t1` ( ...@@ -59,3 +59,14 @@ t1 CREATE TABLE `t1` (
`length(uuid())` int(10) NOT NULL default '0' `length(uuid())` int(10) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1; drop table t1;
create table t1 (a timestamp default '2005-05-05 01:01:01',
b timestamp default '2005-05-05 01:01:01');
insert into t1 set a = now();
select sleep(3);
sleep(3)
0
update t1 set b = now();
select timediff(b, a) >= '00:00:03' from t1;
timediff(b, a) >= '00:00:03'
1
drop table t1;
...@@ -46,3 +46,12 @@ drop table t1; ...@@ -46,3 +46,12 @@ drop table t1;
create table t1 as select uuid(), length(uuid()); create table t1 as select uuid(), length(uuid());
show create table t1; show create table t1;
drop table t1; drop table t1;
# Bug #6760: Add SLEEP() function
create table t1 (a timestamp default '2005-05-05 01:01:01',
b timestamp default '2005-05-05 01:01:01');
insert into t1 set a = now();
select sleep(3);
update t1 set b = now();
select timediff(b, a) >= '00:00:03' from t1;
drop table t1;
...@@ -354,6 +354,11 @@ Item *create_func_sha(Item* a) ...@@ -354,6 +354,11 @@ Item *create_func_sha(Item* a)
return new Item_func_sha(a); return new Item_func_sha(a);
} }
Item *create_func_sleep(Item* a)
{
return new Item_func_sleep(a);
}
Item *create_func_space(Item *a) Item *create_func_space(Item *a)
{ {
CHARSET_INFO *cs= current_thd->variables.collation_connection; CHARSET_INFO *cs= current_thd->variables.collation_connection;
......
...@@ -83,6 +83,7 @@ Item *create_func_sec_to_time(Item* a); ...@@ -83,6 +83,7 @@ Item *create_func_sec_to_time(Item* a);
Item *create_func_sign(Item* a); Item *create_func_sign(Item* a);
Item *create_func_sin(Item* a); Item *create_func_sin(Item* a);
Item *create_func_sha(Item* a); Item *create_func_sha(Item* a);
Item *create_func_sleep(Item* a);
Item *create_func_soundex(Item* a); Item *create_func_soundex(Item* a);
Item *create_func_space(Item *); Item *create_func_space(Item *);
Item *create_func_sqrt(Item* a); Item *create_func_sqrt(Item* a);
......
...@@ -3259,6 +3259,17 @@ void Item_func_benchmark::print(String *str) ...@@ -3259,6 +3259,17 @@ void Item_func_benchmark::print(String *str)
str->append(')'); str->append(')');
} }
/* This function is just used to create tests with time gaps */
longlong Item_func_sleep::val_int()
{
DBUG_ASSERT(fixed == 1);
double time= args[0]->val_real();
my_sleep((ulong)time*1000000L);
return 0;
}
#define extra_size sizeof(double) #define extra_size sizeof(double)
static user_var_entry *get_variable(HASH *hash, LEX_STRING &name, static user_var_entry *get_variable(HASH *hash, LEX_STRING &name,
......
...@@ -874,6 +874,7 @@ public: ...@@ -874,6 +874,7 @@ public:
} }
}; };
class Item_func_benchmark :public Item_int_func class Item_func_benchmark :public Item_int_func
{ {
ulong loop_count; ulong loop_count;
...@@ -888,6 +889,16 @@ public: ...@@ -888,6 +889,16 @@ public:
}; };
class Item_func_sleep :public Item_int_func
{
public:
Item_func_sleep(Item *a) :Item_int_func(a) {}
const char *func_name() const { return "sleep"; }
longlong val_int();
};
#ifdef HAVE_DLOPEN #ifdef HAVE_DLOPEN
class Item_udf_func :public Item_func class Item_udf_func :public Item_func
......
...@@ -734,6 +734,7 @@ static SYMBOL sql_functions[] = { ...@@ -734,6 +734,7 @@ static SYMBOL sql_functions[] = {
{ "SIN", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sin)}, { "SIN", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sin)},
{ "SHA", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sha)}, { "SHA", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sha)},
{ "SHA1", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sha)}, { "SHA1", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sha)},
{ "SLEEP", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sleep)},
{ "SOUNDEX", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_soundex)}, { "SOUNDEX", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_soundex)},
{ "SPACE", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_space)}, { "SPACE", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_space)},
{ "SQRT", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sqrt)}, { "SQRT", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sqrt)},
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment