mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
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
This commit is contained in:
parent
036c5b28d7
commit
7eebb75132
7 changed files with 49 additions and 0 deletions
|
@ -59,3 +59,14 @@ t1 CREATE TABLE `t1` (
|
|||
`length(uuid())` int(10) NOT NULL default '0'
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
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;
|
|||
create table t1 as select uuid(), length(uuid());
|
||||
show create 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)
|
|||
return new Item_func_sha(a);
|
||||
}
|
||||
|
||||
Item *create_func_sleep(Item* a)
|
||||
{
|
||||
return new Item_func_sleep(a);
|
||||
}
|
||||
|
||||
Item *create_func_space(Item *a)
|
||||
{
|
||||
CHARSET_INFO *cs= current_thd->variables.collation_connection;
|
||||
|
|
|
@ -83,6 +83,7 @@ Item *create_func_sec_to_time(Item* a);
|
|||
Item *create_func_sign(Item* a);
|
||||
Item *create_func_sin(Item* a);
|
||||
Item *create_func_sha(Item* a);
|
||||
Item *create_func_sleep(Item* a);
|
||||
Item *create_func_soundex(Item* a);
|
||||
Item *create_func_space(Item *);
|
||||
Item *create_func_sqrt(Item* a);
|
||||
|
|
|
@ -3259,6 +3259,17 @@ void Item_func_benchmark::print(String *str)
|
|||
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)
|
||||
|
||||
static user_var_entry *get_variable(HASH *hash, LEX_STRING &name,
|
||||
|
|
|
@ -874,6 +874,7 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
|
||||
class Item_func_benchmark :public Item_int_func
|
||||
{
|
||||
ulong loop_count;
|
||||
|
@ -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
|
||||
|
||||
class Item_udf_func :public Item_func
|
||||
|
|
|
@ -734,6 +734,7 @@ static SYMBOL sql_functions[] = {
|
|||
{ "SIN", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sin)},
|
||||
{ "SHA", 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)},
|
||||
{ "SPACE", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_space)},
|
||||
{ "SQRT", F_SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_sqrt)},
|
||||
|
|
Loading…
Reference in a new issue