summaryrefslogtreecommitdiff
path: root/sql/item_strfunc.cc
diff options
context:
space:
mode:
authorunknown <ram@ram.(none)>2002-08-08 20:25:53 +0500
committerunknown <ram@ram.(none)>2002-08-08 20:25:53 +0500
commit744a4f95d9c581588ffb11cce01ca15310d734da (patch)
tree4a9a6bb08d5e22e59a72992adf73586c7f810ecd /sql/item_strfunc.cc
parent028cfaba9ba0fcbba30511e6951daab6a1829f20 (diff)
downloadmariadb-git-744a4f95d9c581588ffb11cce01ca15310d734da.tar.gz
new QUOTE() fuction has been added
BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
Diffstat (limited to 'sql/item_strfunc.cc')
-rw-r--r--sql/item_strfunc.cc53
1 files changed, 53 insertions, 0 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index f074629e376..30968faa9b8 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -2070,3 +2070,56 @@ String* Item_func_inet_ntoa::val_str(String* str)
str->length(str->length()-1); // Remove last '.';
return str;
}
+
+String *Item_func_quote::val_str(String *str)
+{
+ String *arg= args[0]->val_str(str);
+ char *strptr, *argptr, *end, *arglast;
+ uint delta= 2; /* for beginning and ending ' signs */
+
+ for (argptr= (char*) arg->ptr(), end= argptr + arg->length(); argptr < end;
+ argptr++)
+ {
+ switch (*argptr) {
+ case '\'':
+ case '\\':
+ case 0:
+ case '\032':
+ delta++;
+ }
+ }
+ if (str->alloc(arg->length() + delta))
+ {
+ null_value= 1;
+ return 0;
+ }
+ strptr= (char*) str->ptr() + arg->length() + delta - 1;
+ *strptr= '\'';
+ for (end= (char*) arg->ptr(), arglast= end + arg->length(),
+ argptr= arglast - 1; argptr >= end; argptr--)
+ {
+ switch (*argptr) {
+ case '\'':
+ case '\\':
+ case 0:
+ case '\032':
+ strptr-= arglast - argptr;
+ memmove(strptr, argptr, arglast - argptr);
+ arglast= argptr;
+ *--strptr= '\\';
+ }
+ }
+ if (arglast != end)
+ {
+ strptr-= arglast - end;
+ memmove(strptr, end, arglast - end);
+ }
+ *--strptr= '\'';
+ str->length(arg->length() + delta);
+ return str;
+}
+
+void Item_func_quote::fix_length_and_dec()
+{
+ max_length= args[0]->max_length * 2 + 2;
+}