summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorjimw@mysql.com <>2005-08-11 18:58:22 -0700
committerjimw@mysql.com <>2005-08-11 18:58:22 -0700
commit898aae5e0f13a3461699e447a559247474a5b2e1 (patch)
tree7938a2593a4978018f3aaa25e99fa2e4c2e47b79 /sql
parent7d1c4bc3c96bccdae1289bf40eb6464c7d1ec2d8 (diff)
downloadmariadb-git-898aae5e0f13a3461699e447a559247474a5b2e1.tar.gz
Add SLEEP(seconds) function, which always returns 0 after the given
number of seconds (which can include microseconds). (Bug #6760)
Diffstat (limited to 'sql')
-rw-r--r--sql/item_create.cc5
-rw-r--r--sql/item_create.h1
-rw-r--r--sql/item_func.cc11
-rw-r--r--sql/item_func.h11
-rw-r--r--sql/lex.h1
5 files changed, 29 insertions, 0 deletions
diff --git a/sql/item_create.cc b/sql/item_create.cc
index b7d8d50f9b3..8798bf889fc 100644
--- a/sql/item_create.cc
+++ b/sql/item_create.cc
@@ -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;
diff --git a/sql/item_create.h b/sql/item_create.h
index 0a9af144ec0..d757318bfc1 100644
--- a/sql/item_create.h
+++ b/sql/item_create.h
@@ -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);
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 71e0f29ffc7..ef1c85f6120 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -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,
diff --git a/sql/item_func.h b/sql/item_func.h
index e8db9d70ae7..1f25b762b70 100644
--- a/sql/item_func.h
+++ b/sql/item_func.h
@@ -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
diff --git a/sql/lex.h b/sql/lex.h
index 122e7040c80..7b6d86e327e 100644
--- a/sql/lex.h
+++ b/sql/lex.h
@@ -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)},