Commit deaec7b0 authored by ram@ram.(none)'s avatar ram@ram.(none)

QUOTE() code cleanup

parent 8f7f648d
...@@ -148,7 +148,7 @@ decode(encode("abcdef","monty"),"monty")="abcdef" ...@@ -148,7 +148,7 @@ decode(encode("abcdef","monty"),"monty")="abcdef"
1 1
select quote('\'\"\\test'); select quote('\'\"\\test');
quote('\'\"\\test') quote('\'\"\\test')
'\'\"\\test' '\'"\\test'
select quote(concat('abc\'', '\\cba')); select quote(concat('abc\'', '\\cba'));
quote(concat('abc\'', '\\cba')) quote(concat('abc\'', '\\cba'))
'abc\'\\cba' 'abc\'\\cba'
......
...@@ -2071,13 +2071,15 @@ String* Item_func_inet_ntoa::val_str(String* str) ...@@ -2071,13 +2071,15 @@ String* Item_func_inet_ntoa::val_str(String* str)
return str; return str;
} }
#define get_esc_bit(mask, num) (1 & (*((mask) + ((num) >> 3))) >> ((num) & 7))
/* /*
QUOTE() function returns argument string in single quotes, QUOTE() function returns argument string in single quotes,
also adds a \ before \, ' CHAR(0) and CHAR(24) also adds a \ before \, ' CHAR(0) and CHAR(24)
*/ */
String *Item_func_quote::val_str(String *str) 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, 0x10, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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) ...@@ -2089,10 +2091,8 @@ String *Item_func_quote::val_str(String *str)
goto null; goto null;
for (from= (char*) arg->ptr(), end= from + arg->length(); from < end; from++) for (from= (char*) arg->ptr(), end= from + arg->length(); from < end; from++)
{ delta+= get_esc_bit(escmask, *from);
if (*(escmask + (*from >> 3)) and (1 << (*from & 7)))
delta++;
}
if (str->alloc(arg->length() + delta)) if (str->alloc(arg->length() + delta))
goto null; goto null;
to= (char*) str->ptr() + arg->length() + delta - 1; to= (char*) str->ptr() + arg->length() + delta - 1;
...@@ -2101,7 +2101,7 @@ String *Item_func_quote::val_str(String *str) ...@@ -2101,7 +2101,7 @@ String *Item_func_quote::val_str(String *str)
from--, to--) from--, to--)
{ {
*to= *from; *to= *from;
if (*(escmask + (*from >> 3)) and (1 << (*from & 7))) if (get_esc_bit(escmask, *from))
*--to= '\\'; *--to= '\\';
} }
*to= '\''; *to= '\'';
......
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