summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <jimw@mysql.com>2005-08-18 07:59:43 -0700
committerunknown <jimw@mysql.com>2005-08-18 07:59:43 -0700
commit0b8e774e5faa9650ea13ee9cdb0cbc4475a1de7c (patch)
tree69ed97939d773979c8c0d82bdbaae390a07ed6ec
parent6713cff5fe227f517898e97cac46cbd462ded936 (diff)
parentfc44a776494edfc9ce5f6deb2bc997f003627fae (diff)
downloadmariadb-git-0b8e774e5faa9650ea13ee9cdb0cbc4475a1de7c.tar.gz
Merge bk-internal:/home/bk/mysql-5.0
into mysql.com:/home/jimw/my/mysql-5.0-clean sql/item_strfunc.cc: Auto merged
-rw-r--r--include/my_global.h18
-rw-r--r--mysql-test/r/select.result11
-rw-r--r--mysql-test/t/select.test11
-rw-r--r--sql/item_cmpfunc.cc6
-rw-r--r--sql/item_func.cc30
5 files changed, 45 insertions, 31 deletions
diff --git a/include/my_global.h b/include/my_global.h
index 95763f64e55..2546dde754d 100644
--- a/include/my_global.h
+++ b/include/my_global.h
@@ -927,7 +927,17 @@ typedef char bool; /* Ordinary boolean values 0 1 */
#ifndef set_timespec
#ifdef HAVE_TIMESPEC_TS_SEC
-#define set_timespec(ABSTIME,SEC) { (ABSTIME).ts_sec=time(0) + (time_t) (SEC); (ABSTIME).ts_nsec=0; }
+#define set_timespec(ABSTIME,SEC) \
+{ \
+ (ABSTIME).ts_sec=time(0) + (time_t) (SEC); \
+ (ABSTIME).ts_nsec=0; \
+}
+#define set_timespec_nsec(ABSTIME,NSEC) \
+{\
+ ulonglong now= my_getsystime(); \
+ (ABSTIME).ts_sec= (now / ULL(10000000)) + (NSEC / ULL(1000000000)); \
+ (ABSTIME).ts_nsec= (now % ULL(10000000)) * 100 + (NSEC % ULL(1000000000)); \
+}
#else
#define set_timespec(ABSTIME,SEC) \
{\
@@ -936,6 +946,12 @@ typedef char bool; /* Ordinary boolean values 0 1 */
(ABSTIME).tv_sec=tv.tv_sec+(time_t) (SEC);\
(ABSTIME).tv_nsec=tv.tv_usec*1000;\
}
+#define set_timespec_nsec(ABSTIME,NSEC) \
+{\
+ ulonglong now= my_getsystime(); \
+ (ABSTIME).tv_sec= (now / ULL(10000000)) + (NSEC / ULL(1000000000)); \
+ (ABSTIME).tv_nsec= (now % ULL(10000000)) * 100 + (NSEC % ULL(1000000000)); \
+}
#endif /* HAVE_TIMESPEC_TS_SEC */
#endif /* set_timespec */
diff --git a/mysql-test/r/select.result b/mysql-test/r/select.result
index 1b35df534a0..b20949d4a62 100644
--- a/mysql-test/r/select.result
+++ b/mysql-test/r/select.result
@@ -2756,14 +2756,3 @@ DROP TABLE t1,t2;
select x'10' + 0, X'10' + 0, b'10' + 0, B'10' + 0;
x'10' + 0 X'10' + 0 b'10' + 0 B'10' + 0
16 16 2 2
-CREATE TABLE BUG_12595(a varchar(100));
-INSERT INTO BUG_12595 VALUES ('hakan%'), ('hakank'), ("ha%an");
-SELECT * FROM BUG_12595 WHERE a LIKE 'hakan*%' ESCAPE '*';
-a
-hakan%
-SELECT * FROM BUG_12595 WHERE a LIKE 'hakan**%' ESCAPE '**';
-ERROR HY000: Incorrect arguments to ESCAPE
-SELECT * FROM BUG_12595 WHERE a LIKE 'ha%%an' ESCAPE '%';
-a
-ha%an
-DROP TABLE BUG_12595;
diff --git a/mysql-test/t/select.test b/mysql-test/t/select.test
index 390c4372f16..8e74167852b 100644
--- a/mysql-test/t/select.test
+++ b/mysql-test/t/select.test
@@ -2348,14 +2348,3 @@ DROP TABLE t1,t2;
#
select x'10' + 0, X'10' + 0, b'10' + 0, B'10' + 0;
-
-#
-# BUG #12595
-#
-CREATE TABLE BUG_12595(a varchar(100));
-INSERT INTO BUG_12595 VALUES ('hakan%'), ('hakank'), ("ha%an");
-SELECT * FROM BUG_12595 WHERE a LIKE 'hakan*%' ESCAPE '*';
--- error 1210
-SELECT * FROM BUG_12595 WHERE a LIKE 'hakan**%' ESCAPE '**';
-SELECT * FROM BUG_12595 WHERE a LIKE 'ha%%an' ESCAPE '%';
-DROP TABLE BUG_12595;
diff --git a/sql/item_cmpfunc.cc b/sql/item_cmpfunc.cc
index c305196615a..b513fb26bdb 100644
--- a/sql/item_cmpfunc.cc
+++ b/sql/item_cmpfunc.cc
@@ -2792,12 +2792,6 @@ bool Item_func_like::fix_fields(THD *thd, Item **ref)
{
/* If we are on execution stage */
String *escape_str= escape_item->val_str(&tmp_value1);
- /* ESCAPE must be 1 char in length.*/
- if (escape_str && escape_str->numchars() != 1)
- {
- my_error(ER_WRONG_ARGUMENTS,MYF(0),"ESCAPE");
- return TRUE;
- }
escape= escape_str ? *(escape_str->ptr()) : '\\';
/*
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 61467595424..d3b53db2d54 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -3266,10 +3266,36 @@ void Item_func_benchmark::print(String *str)
longlong Item_func_sleep::val_int()
{
+ THD *thd= current_thd;
+ struct timespec abstime;
+ pthread_cond_t cond;
+ int error;
+
DBUG_ASSERT(fixed == 1);
+
double time= args[0]->val_real();
- my_sleep((ulong)time*1000000L);
- return 0;
+ set_timespec_nsec(abstime, (ulonglong)(time * ULL(1000000000)));
+
+ pthread_cond_init(&cond, NULL);
+ pthread_mutex_lock(&LOCK_user_locks);
+
+ thd->mysys_var->current_mutex= &LOCK_user_locks;
+ thd->mysys_var->current_cond= &cond;
+
+ while (!thd->killed &&
+ (error= pthread_cond_timedwait(&cond, &LOCK_user_locks,
+ &abstime)) != ETIMEDOUT &&
+ error != EINVAL) ;
+
+ pthread_mutex_lock(&thd->mysys_var->mutex);
+ thd->mysys_var->current_mutex= 0;
+ thd->mysys_var->current_cond= 0;
+ pthread_mutex_unlock(&thd->mysys_var->mutex);
+
+ pthread_mutex_unlock(&LOCK_user_locks);
+ pthread_cond_destroy(&cond);
+
+ return (error == ETIMEDOUT) ? 0 : 1;
}