Commit 8ccfad76 authored by unknown's avatar unknown
Browse files

Fix for a bug #7495


mysql-test/r/func_str.result:
  result for test case for a bug in QUOTE() (Bug #7495)
mysql-test/t/func_str.test:
  test case for a bug in QUOTE() (Bug #7495)
sql/item_strfunc.cc:
  a better fix for a QUOTE() bug (Bug #7495)
parent 74cc635a
Loading
Loading
Loading
Loading
+6 −12
Original line number Diff line number Diff line
@@ -291,15 +291,9 @@ trim(trailing 'foo' from 'foo')
select trim(leading 'foo' from 'foo');
trim(leading 'foo' from 'foo')

create table t1 (a varchar(80), b varchar(80));
insert into t1 values(NULL,"12345");
insert into t1 values(NULL,"chm");
select quote(ltrim(concat('  ',t1.b))) from t1;
quote(ltrim(concat('  ',t1.b)))
'12345'
'chm'
select quote(trim(concat('  ',t1.b))) from t1;
quote(trim(concat('  ',t1.b)))
'12345'
'chm'
drop table t1;
select quote(ltrim(concat('    ', 'a')));
quote(ltrim(concat('    ', 'a')))
'a'
select quote(trim(concat('    ', 'a')));
quote(trim(concat('    ', 'a')))
'a'
+2 −6
Original line number Diff line number Diff line
@@ -191,9 +191,5 @@ select trim(leading 'foo' from 'foo');
# Bug #7495
#

create table t1 (a varchar(80), b varchar(80));
insert into t1 values(NULL,"12345");
insert into t1 values(NULL,"chm");
select quote(ltrim(concat('  ',t1.b))) from t1;
select quote(trim(concat('  ',t1.b))) from t1;
drop table t1;
select quote(ltrim(concat('    ', 'a')));
select quote(trim(concat('    ', 'a')));
+7 −7
Original line number Diff line number Diff line
@@ -1141,7 +1141,7 @@ String *Item_func_ltrim::val_str(String *str)
  }
  if (ptr == res->ptr())
    return res;
  tmp_value.copy(res->ptr() + (ptr - res->ptr()), (uint32) (end - ptr));
  tmp_value.set(*res,(uint) (ptr - res->ptr()),(uint) (end-ptr));
  return &tmp_value;
}

@@ -1266,7 +1266,7 @@ String *Item_func_trim::val_str(String *str)
  }
  if (ptr == res->ptr() && end == ptr+res->length())
    return res;
  tmp_value.copy(res->ptr() + (ptr - res->ptr()), (uint32) (end - ptr));
  tmp_value.set(*res,(uint) (ptr - res->ptr()),(uint) (end-ptr));
  return &tmp_value;
}

@@ -2185,16 +2185,16 @@ String *Item_func_quote::val_str(String *str)

  /*
    We have to use realloc() instead of alloc() as we want to keep the
    old result in str
    old result in arg
  */
  if (str->realloc(new_length))
  if (arg->realloc(new_length))
    goto null;

  /*
    As 'arg' and 'str' may be the same string, we must replace characters
    from the end to the beginning
  */
  to= (char*) str->ptr() + new_length - 1;
  to= (char*) arg->ptr() + new_length - 1;
  *to--= '\'';
  for (start= (char*) arg->ptr(),end= start + arg_length; end-- != start; to--)
  {
@@ -2222,9 +2222,9 @@ String *Item_func_quote::val_str(String *str)
    }
  }
  *to= '\'';
  str->length(new_length);
  arg->length(new_length);
  null_value= 0;
  return str;
  return arg;

null:
  null_value= 1;