Commit 8056a7df authored by unknown's avatar unknown
Browse files

fix for bug #12595 (Escape character has to be exactly one)


mysql-test/r/select.result:
  results for test of bug 12595
mysql-test/t/select.test:
  test for bug #12595
sql/item_cmpfunc.cc:
  check whether the size of the escape string is exactly 1 (bug #12595)
parent ef5cafdf
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -2739,3 +2739,14 @@ DROP TABLE t1,t2;
select x'10' + 0, X'10' + 0, b'10' + 0, B'10' + 0;
x'10' + 0	X'10' + 0	b'10' + 0	B'10' + 0
16	16	2	2
CREATE TABLE BUG_12595(a varchar(100));
INSERT INTO BUG_12595 VALUES ('hakan%'), ('hakank'), ("ha%an");
SELECT * FROM BUG_12595 WHERE a LIKE 'hakan*%' ESCAPE '*';
a
hakan%
SELECT * FROM BUG_12595 WHERE a LIKE 'hakan**%' ESCAPE '**';
ERROR HY000: Incorrect arguments to ESCAPE
SELECT * FROM BUG_12595 WHERE a LIKE 'ha%%an' ESCAPE '%';
a
ha%an
DROP TABLE BUG_12595;
+11 −0
Original line number Diff line number Diff line
@@ -2350,3 +2350,14 @@ DROP TABLE t1,t2;
#

select x'10' + 0, X'10' + 0, b'10' + 0, B'10' + 0;

#
# BUG #12595
#
CREATE TABLE BUG_12595(a varchar(100));
INSERT INTO BUG_12595 VALUES ('hakan%'), ('hakank'), ("ha%an");
SELECT * FROM BUG_12595 WHERE a LIKE 'hakan*%' ESCAPE '*';
-- error 1210
SELECT * FROM BUG_12595 WHERE a LIKE 'hakan**%' ESCAPE '**';
SELECT * FROM BUG_12595 WHERE a LIKE 'ha%%an' ESCAPE '%';
DROP TABLE BUG_12595;
+7 −1
Original line number Diff line number Diff line
@@ -2792,6 +2792,12 @@ bool Item_func_like::fix_fields(THD *thd, Item **ref)
  {
    /* If we are on execution stage */
    String *escape_str= escape_item->val_str(&tmp_value1);
    /* ESCAPE must be 1 char in length.*/
    if (escape_str && escape_str->numchars() != 1)
    {
      my_error(ER_WRONG_ARGUMENTS,MYF(0),"ESCAPE");
      return TRUE;
    }
    escape= escape_str ? *(escape_str->ptr()) : '\\';
    
    /*