List:Internals« Previous MessageNext Message »
From:vva Date:July 9 2004 12:36pm
Subject:bk commit into 5.0 tree (vva:1.1705)
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of vva. When vva does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://www.mysql.com/doc/I/n/Installing_source_tree.html

ChangeSet
  1.1705 04/07/09 17:36:42 vva@stripped +6 -0
  patch for task WL 1941 "NO_C_ESCAPE sql_mode"

  sql/sql_yacc.yy
    1.287 04/07/09 17:36:11 vva@stripped +5 -1
    added using of "" as escape by default
    in LIKE function if MODE_NO_BACKSLASH_ESCAPES

  sql/sql_lex.cc
    1.116 04/07/09 17:36:11 vva@stripped +2 -1
    added test for MODE_NO_BACKSLASH_ESCAPES when testing escaped character

  sql/mysqld.cc
    1.385 04/07/09 17:36:11 vva@stripped +1 -1
    added mode NO_BACKSLASH_ESCAPES

  sql/mysql_priv.h
    1.225 04/07/09 17:36:11 vva@stripped +1 -0
    added MODE_NO_BACKSLASH_ESCAPES

  mysql-test/t/sql_mode.test
    1.6 04/07/09 17:36:11 vva@stripped +95 -0
    added test for WL 1941 "NO_C_ESCAPE sql_mode"

  mysql-test/r/sql_mode.result
    1.9 04/07/09 17:36:11 vva@stripped +249 -0
    added test for WL 1941 "NO_C_ESCAPE sql_mode"

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	vva
# Host:	eagle.mysql.r18.ru
# Root:	/home/vva/work/WL_1941/mysql-sap2-5.0

--- 1.224/sql/mysql_priv.h	Fri Jun 18 13:31:32 2004
+++ 1.225/sql/mysql_priv.h	Fri Jul  9 17:36:11 2004
@@ -272,6 +272,7 @@
 #define MODE_MYSQL40                   (MODE_MYSQL323*2)
 #define MODE_ANSI	               (MODE_MYSQL40*2)
 #define MODE_NO_AUTO_VALUE_ON_ZERO     (MODE_ANSI*2)
+#define MODE_NO_BACKSLASH_ESCAPES      (MODE_NO_AUTO_VALUE_ON_ZERO*2)
 
 #define RAID_BLOCK_SIZE 1024
 

--- 1.384/sql/mysqld.cc	Sun Jun 13 02:19:43 2004
+++ 1.385/sql/mysqld.cc	Fri Jul  9 17:36:11 2004
@@ -223,7 +223,7 @@
   "NO_DIR_IN_CREATE",
   "POSTGRESQL", "ORACLE", "MSSQL", "DB2", "MAXDB", "NO_KEY_OPTIONS",
   "NO_TABLE_OPTIONS", "NO_FIELD_OPTIONS", "MYSQL323", "MYSQL40", "ANSI",
-  "NO_AUTO_VALUE_ON_ZERO", NullS
+  "NO_AUTO_VALUE_ON_ZERO", "NO_BACKSLASH_ESCAPES", NullS
 };
 TYPELIB sql_mode_typelib= { array_elements(sql_mode_names)-1,"",
 			    sql_mode_names };

--- 1.115/sql/sql_lex.cc	Sun Jun 13 20:13:26 2004
+++ 1.116/sql/sql_lex.cc	Fri Jul  9 17:36:11 2004
@@ -250,7 +250,8 @@
 	continue;
     }
 #endif
-    if (c == '\\')
+    if (c == '\\' &&
+	!(lex->thd->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES))
     {					// Escaped character
       found_escape=1;
       if (lex->ptr == lex->end_of_query)

--- 1.286/sql/sql_yacc.yy	Tue Jun  8 21:00:06 2004
+++ 1.287/sql/sql_yacc.yy	Fri Jul  9 17:36:11 2004
@@ -4735,7 +4735,11 @@
 
 opt_escape:
 	ESCAPE_SYM TEXT_STRING_literal	{ $$= $2.str; }
-	| /* empty */			{ $$= (char*) "\\"; };
+	| /* empty */			
+	{
+          $$= (char*) ((YYTHD->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES)
+                       ? "" : "\\"); 
+        };
 
 
 /*

--- 1.8/mysql-test/r/sql_mode.result	Sat Mar 20 14:31:15 2004
+++ 1.9/mysql-test/r/sql_mode.result	Fri Jul  9 17:36:11 2004
@@ -85,3 +85,252 @@
   UNIQUE KEY "email" ("email")
 )
 drop table t1;
+SET @OLD_SQL_MODE=@@SQL_MODE, @@SQL_MODE='';
+show local variables like 'SQL_MODE';
+Variable_name	Value
+sql_mode	
+CREATE TABLE t1 (p int not null auto_increment, a varchar(20), primary key(p));
+INSERT t1 (a) VALUES 
+('\\'),
+('\n'),
+('\b'),
+('\r'),
+('\t'),
+('\x'),
+('\a'),
+('\aa'),
+('\\a'),
+('\\aa'),
+('_'),
+('\_'),
+('\\_'),
+('\\\_'),
+('\\\\_'),
+('%'),
+('\%'),
+('\\%'),
+('\\\%'),
+('\\\\%')
+;
+SELECT p, hex(a) FROM t1;
+p	hex(a)
+1	5C
+2	0A
+3	08
+4	0D
+5	09
+6	78
+7	61
+8	6161
+9	5C61
+10	5C6161
+11	5F
+12	5C5F
+13	5C5F
+14	5C5C5F
+15	5C5C5F
+16	25
+17	5C25
+18	5C25
+19	5C5C25
+20	5C5C25
+delete from t1 where a in ('\n','\r','\t', '\b');
+select
+masks.p,
+masks.a as mask,
+examples.a as example
+from
+t1 as masks
+left join t1 as examples on examples.a LIKE masks.a
+order by masks.p, example;
+p	mask	example
+1	\	\
+6	x	x
+7	a	a
+8	aa	aa
+9	\a	a
+10	\aa	aa
+11	_	%
+11	_	a
+11	_	x
+11	_	\
+11	_	_
+12	\_	_
+13	\_	_
+14	\\_	\%
+14	\\_	\%
+14	\\_	\a
+14	\\_	\_
+14	\\_	\_
+15	\\_	\%
+15	\\_	\%
+15	\\_	\a
+15	\\_	\_
+15	\\_	\_
+16	%	%
+16	%	a
+16	%	aa
+16	%	x
+16	%	\
+16	%	\%
+16	%	\%
+16	%	\a
+16	%	\aa
+16	%	\\%
+16	%	\\%
+16	%	\\_
+16	%	\\_
+16	%	\_
+16	%	\_
+16	%	_
+17	\%	%
+18	\%	%
+19	\\%	\
+19	\\%	\%
+19	\\%	\%
+19	\\%	\a
+19	\\%	\aa
+19	\\%	\\%
+19	\\%	\\%
+19	\\%	\\_
+19	\\%	\\_
+19	\\%	\_
+19	\\%	\_
+20	\\%	\
+20	\\%	\%
+20	\\%	\%
+20	\\%	\a
+20	\\%	\aa
+20	\\%	\\%
+20	\\%	\\%
+20	\\%	\\_
+20	\\%	\\_
+20	\\%	\_
+20	\\%	\_
+DROP TABLE t1;
+SET @@SQL_MODE='NO_BACKSLASH_ESCAPES';
+show local variables like 'SQL_MODE';
+Variable_name	Value
+sql_mode	NO_BACKSLASH_ESCAPES
+CREATE TABLE t1 (p int not null auto_increment, a varchar(20), primary key(p));
+INSERT t1 (a) VALUES 
+('\\'),
+('\n'),
+('\b'),
+('\r'),
+('\t'),
+('\x'),
+('\a'),
+('\aa'),
+('\\a'),
+('\\aa'),
+('_'),
+('\_'),
+('\\_'),
+('\\\_'),
+('\\\\_'),
+('%'),
+('\%'),
+('\\%'),
+('\\\%'),
+('\\\\%')
+;
+SELECT p, hex(a) FROM t1;
+p	hex(a)
+1	5C5C
+2	5C6E
+3	5C62
+4	5C72
+5	5C74
+6	5C78
+7	5C61
+8	5C6161
+9	5C5C61
+10	5C5C6161
+11	5F
+12	5C5F
+13	5C5C5F
+14	5C5C5C5F
+15	5C5C5C5C5F
+16	25
+17	5C25
+18	5C5C25
+19	5C5C5C25
+20	5C5C5C5C25
+delete from t1 where a in ('\n','\r','\t', '\b');
+select 
+masks.p,
+masks.a as mask,
+examples.a as example
+from
+t1 as masks
+left join t1 as examples on examples.a LIKE masks.a
+order by masks.p, example;
+p	mask	example
+1	\\	\\
+6	\x	\x
+7	\a	\a
+8	\aa	\aa
+9	\\a	\\a
+10	\\aa	\\aa
+11	_	%
+11	_	_
+12	\_	\%
+12	\_	\a
+12	\_	\x
+12	\_	\\
+12	\_	\_
+13	\\_	\\%
+13	\\_	\\a
+13	\\_	\\_
+14	\\\_	\\\%
+14	\\\_	\\\_
+15	\\\\_	\\\\%
+15	\\\\_	\\\\_
+16	%	%
+16	%	\%
+16	%	\a
+16	%	\aa
+16	%	\x
+16	%	\\
+16	%	\\%
+16	%	\\a
+16	%	\\aa
+16	%	\\\%
+16	%	\\\\%
+16	%	\\\\_
+16	%	\\\_
+16	%	\\_
+16	%	\_
+16	%	_
+17	\%	\%
+17	\%	\a
+17	\%	\aa
+17	\%	\x
+17	\%	\\
+17	\%	\\%
+17	\%	\\a
+17	\%	\\aa
+17	\%	\\\%
+17	\%	\\\\%
+17	\%	\\\\_
+17	\%	\\\_
+17	\%	\\_
+17	\%	\_
+18	\\%	\\
+18	\\%	\\%
+18	\\%	\\a
+18	\\%	\\aa
+18	\\%	\\\%
+18	\\%	\\\\%
+18	\\%	\\\\_
+18	\\%	\\\_
+18	\\%	\\_
+19	\\\%	\\\%
+19	\\\%	\\\\%
+19	\\\%	\\\\_
+19	\\\%	\\\_
+20	\\\\%	\\\\%
+20	\\\\%	\\\\_
+DROP TABLE t1;
+SET @@SQL_MODE=@OLD_SQL_MODE;

--- 1.5/mysql-test/t/sql_mode.test	Sat Mar 20 14:29:41 2004
+++ 1.6/mysql-test/t/sql_mode.test	Fri Jul  9 17:36:11 2004
@@ -28,3 +28,98 @@
 select @@sql_mode;
 show create table t1;
 drop table t1;
+
+#
+# test for 
+#  WL 1941 "NO_C_ESCAPES sql_mode"
+#
+# an sql_mode to disable \n, \r, \b, etc escapes in string literals. actually, to
+# disable special meaning of backslash completely. It's not in the SQL standard
+# and it causes some R/3 tests to fail.
+#
+
+SET @OLD_SQL_MODE=@@SQL_MODE, @@SQL_MODE='';
+show local variables like 'SQL_MODE';
+
+CREATE TABLE t1 (p int not null auto_increment, a varchar(20), primary key(p));
+INSERT t1 (a) VALUES 
+('\\'),
+('\n'),
+('\b'),
+('\r'),
+('\t'),
+('\x'),
+('\a'),
+('\aa'),
+('\\a'),
+('\\aa'),
+('_'),
+('\_'),
+('\\_'),
+('\\\_'),
+('\\\\_'),
+('%'),
+('\%'),
+('\\%'),
+('\\\%'),
+('\\\\%')
+;
+
+SELECT p, hex(a) FROM t1;
+
+delete from t1 where a in ('\n','\r','\t', '\b');
+
+select
+  masks.p,
+  masks.a as mask,
+  examples.a as example
+from
+            t1 as masks
+  left join t1 as examples on examples.a LIKE masks.a
+order by masks.p, example;
+
+DROP TABLE t1;
+
+SET @@SQL_MODE='NO_BACKSLASH_ESCAPES';
+show local variables like 'SQL_MODE';
+
+CREATE TABLE t1 (p int not null auto_increment, a varchar(20), primary key(p));
+INSERT t1 (a) VALUES 
+('\\'),
+('\n'),
+('\b'),
+('\r'),
+('\t'),
+('\x'),
+('\a'),
+('\aa'),
+('\\a'),
+('\\aa'),
+('_'),
+('\_'),
+('\\_'),
+('\\\_'),
+('\\\\_'),
+('%'),
+('\%'),
+('\\%'),
+('\\\%'),
+('\\\\%')
+;
+
+SELECT p, hex(a) FROM t1;
+
+delete from t1 where a in ('\n','\r','\t', '\b');
+
+select 
+  masks.p,
+  masks.a as mask,
+  examples.a as example
+from
+            t1 as masks
+  left join t1 as examples on examples.a LIKE masks.a
+order by masks.p, example;
+
+DROP TABLE t1;
+
+SET @@SQL_MODE=@OLD_SQL_MODE;
Thread
bk commit into 5.0 tree (vva:1.1705)vva9 Jul