Commit b66ab7f8 authored by unknown's avatar unknown
Browse files

Fix for BUG#24293: '\Z' token is not handled correctly in views.

If SELECT-part of CREATE VIEW statement contains '\Z',
it is not handled correctly.

The problem was in String::print().
Symbol with code 032 (26) is replaced with '\z',
which is not supported by the lexer.

The fix is to replace the symbol with '\Z'.


mysql-test/r/view.result:
  Update result file.
mysql-test/t/view.test:
  Add test case for BUG#24293.
sql/sql_string.cc:
  We should replace 032 with \Z, since lexer does not understand \z.
parent d501b2dd
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -3014,4 +3014,13 @@ i j
6	3
DROP VIEW v1, v2;
DROP TABLE t1;
DROP VIEW IF EXISTS v1;
CREATE VIEW v1 AS SELECT 'The\ZEnd';
SELECT * FROM v1;
TheEnd
TheEnd
SHOW CREATE VIEW v1;
View	Create View
v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select _latin1'The\ZEnd' AS `TheEnd`
DROP VIEW v1;
End of 5.0 tests.
+15 −0
Original line number Diff line number Diff line
@@ -2960,4 +2960,19 @@ DROP VIEW v1, v2;
DROP TABLE t1;


#
# BUG#24293: '\Z' token is not handled correctly in views
#

--disable_warnings
DROP VIEW IF EXISTS v1;
--enable_warnings

CREATE VIEW v1 AS SELECT 'The\ZEnd';
SELECT * FROM v1;

SHOW CREATE VIEW v1;

DROP VIEW v1;

--echo End of 5.0 tests.
+2 −2
Original line number Diff line number Diff line
@@ -1033,8 +1033,8 @@ void String::print(String *str)
    case '\r':
      str->append(STRING_WITH_LEN("\\r"));
      break;
    case 26: //Ctrl-Z
      str->append(STRING_WITH_LEN("\\z"));
    case '\032': // Ctrl-Z
      str->append(STRING_WITH_LEN("\\Z"));
      break;
    default:
      str->append(c);