Commit baf1c89e authored by unknown's avatar unknown
Browse files

A fix (bug #6564: QUOTE(NULL) returns NULL, not the string 'NULL')

parent ce62fb28
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -167,6 +167,9 @@ length(quote(concat(char(0),"test")))
select hex(quote(concat(char(224),char(227),char(230),char(231),char(232),char(234),char(235))));
hex(quote(concat(char(224),char(227),char(230),char(231),char(232),char(234),char(235))))
27E0E3E6E7E8EAEB27
select concat('a', quote(NULL));
concat('a', quote(NULL))
aNULL
select reverse("");
reverse("")

@@ -278,7 +281,7 @@ insert into t1 values ('one'),(NULL),('two'),('four');
select a, quote(a), isnull(quote(a)), quote(a) is null, ifnull(quote(a), 'n') from t1;
a	quote(a)	isnull(quote(a))	quote(a) is null	ifnull(quote(a), 'n')
one	'one'	0	0	'one'
NULL	NULL	1	1	n
NULL	NULL	0	0	NULL
two	'two'	0	0	'two'
four	'four'	0	0	'four'
drop table t1;
+6 −0
Original line number Diff line number Diff line
@@ -69,6 +69,12 @@ select quote(1/0), quote('\0\Z');
select length(quote(concat(char(0),"test")));
select hex(quote(concat(char(224),char(227),char(230),char(231),char(232),char(234),char(235))));

#
# Bug #6564: QUOTE(NULL
#

select concat('a', quote(NULL));

#
# Wrong usage of functions
#
+11 −3
Original line number Diff line number Diff line
@@ -2142,9 +2142,12 @@ String* Item_func_inet_ntoa::val_str(String* str)

    This function is very useful when you want to generate SQL statements

  NOTE
    QUOTE(NULL) returns the string 'NULL' (4 letters, without quotes).

  RETURN VALUES
    str		Quoted string
    NULL	Argument to QUOTE() was NULL or out of memory.
    NULL	Out of memory.
*/

#define get_esc_bit(mask, num) (1 & (*((mask) + ((num) >> 3))) >> ((num) & 7))
@@ -2168,7 +2171,12 @@ String *Item_func_quote::val_str(String *str)
  String *arg= args[0]->val_str(str);
  uint arg_length, new_length;
  if (!arg)					// Null argument
    goto null;
  {
    str->copy("NULL", 4);			// Return the string 'NULL'
    null_value= 0;
    return str;
  }

  arg_length= arg->length();
  new_length= arg_length+2; /* for beginning and ending ' signs */