summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <ram@ram.(none)>2002-08-10 15:13:05 +0500
committerunknown <ram@ram.(none)>2002-08-10 15:13:05 +0500
commit6148e5a42f1a6f0ea2a3bd127d2455267d419def (patch)
tree104845d651db094413f7bcb3ef799caeccc31075
parent9b1d739ea140ef89b99d716c5e5a84ab736418d8 (diff)
downloadmariadb-git-6148e5a42f1a6f0ea2a3bd127d2455267d419def.tar.gz
QUOTE() code cleanup
mysql-test/r/func_str.result: cleanup sql/item_strfunc.cc: cleanup
-rw-r--r--mysql-test/r/func_str.result2
-rw-r--r--sql/item_strfunc.cc12
2 files changed, 7 insertions, 7 deletions
diff --git a/mysql-test/r/func_str.result b/mysql-test/r/func_str.result
index 161a1ca447f..56eb9c632f7 100644
--- a/mysql-test/r/func_str.result
+++ b/mysql-test/r/func_str.result
@@ -148,7 +148,7 @@ decode(encode("abcdef","monty"),"monty")="abcdef"
1
select quote('\'\"\\test');
quote('\'\"\\test')
-'\'\"\\test'
+'\'"\\test'
select quote(concat('abc\'', '\\cba'));
quote(concat('abc\'', '\\cba'))
'abc\'\\cba'
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 540026ed680..7b28a9d4550 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -2071,13 +2071,15 @@ String* Item_func_inet_ntoa::val_str(String* str)
return str;
}
+#define get_esc_bit(mask, num) (1 & (*((mask) + ((num) >> 3))) >> ((num) & 7))
+
/*
QUOTE() function returns argument string in single quotes,
also adds a \ before \, ' CHAR(0) and CHAR(24)
*/
String *Item_func_quote::val_str(String *str)
{
- static char escmask[64] = {0x01, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x00,
+ static char escmask[32] = {0x01, 0x00, 0x00, 0x04, 0x80, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
@@ -2089,10 +2091,8 @@ String *Item_func_quote::val_str(String *str)
goto null;
for (from= (char*) arg->ptr(), end= from + arg->length(); from < end; from++)
- {
- if (*(escmask + (*from >> 3)) and (1 << (*from & 7)))
- delta++;
- }
+ delta+= get_esc_bit(escmask, *from);
+
if (str->alloc(arg->length() + delta))
goto null;
to= (char*) str->ptr() + arg->length() + delta - 1;
@@ -2101,7 +2101,7 @@ String *Item_func_quote::val_str(String *str)
from--, to--)
{
*to= *from;
- if (*(escmask + (*from >> 3)) and (1 << (*from & 7)))
+ if (get_esc_bit(escmask, *from))
*--to= '\\';
}
*to= '\'';