summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--client/mysqldump.c7
-rw-r--r--mysql-test/r/ctype_ucs.result2
-rw-r--r--mysql-test/r/user_var.result13
-rw-r--r--mysql-test/t/user_var.test3
-rw-r--r--sql/log_event.cc2
5 files changed, 19 insertions, 8 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c
index d511dc3bbde..14ebe9ea8f7 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -2200,8 +2200,15 @@ static int start_transaction(MYSQL *mysql_con, my_bool consistent_read_now)
We use BEGIN for old servers. --single-transaction --master-data will fail
on old servers, but that's ok as it was already silently broken (it didn't
do a consistent read, so better tell people frankly, with the error).
+
+ We want the first consistent read to be used for all tables to dump so we
+ need the REPEATABLE READ level (not anything lower, for example READ
+ COMMITTED would give one new consistent read per dumped table).
*/
return (mysql_query_with_error_report(mysql_con, 0,
+ "SET SESSION TRANSACTION ISOLATION "
+ "LEVEL REPEATABLE READ") ||
+ mysql_query_with_error_report(mysql_con, 0,
consistent_read_now ?
"START TRANSACTION "
"WITH CONSISTENT SNAPSHOT" :
diff --git a/mysql-test/r/ctype_ucs.result b/mysql-test/r/ctype_ucs.result
index 47211e67905..3f50d9dfa1b 100644
--- a/mysql-test/r/ctype_ucs.result
+++ b/mysql-test/r/ctype_ucs.result
@@ -520,7 +520,7 @@ Log_name Pos Event_type Server_id Orig_log_pos Info
master-bin.000001 79 User var 1 79 @`v`=_ucs2 0x006100620063 COLLATE ucs2_general_ci
master-bin.000001 119 Query 1 119 use `test`; insert into t2 values (@v)
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
-SET @`v`:=_ucs2 0x006100620063 COLLATE ucs2_general_ci;
+SET @`v`:=_ucs2 0x006100620063 COLLATE `ucs2_general_ci`;
use test;
SET TIMESTAMP=10000;
insert into t2 values (@v);
diff --git a/mysql-test/r/user_var.result b/mysql-test/r/user_var.result
index 4f521143d97..d46d6c7a78a 100644
--- a/mysql-test/r/user_var.result
+++ b/mysql-test/r/user_var.result
@@ -168,21 +168,24 @@ SET TIMESTAMP=10000;
SET @`a b`='hello';
INSERT INTO t1 VALUES(@`a b`);
set @var1= "';aaa";
-insert into t1 values (@var1);
+SET @var2=char(ascii('a'));
+insert into t1 values (@var1),(@var2);
show binlog events from 79;
Log_name Pos Event_type Server_id Orig_log_pos Info
master-bin.000001 79 User var 1 79 @`a b`=_latin1 0x68656C6C6F COLLATE latin1_swedish_ci
master-bin.000001 120 Query 1 120 use `test`; INSERT INTO t1 VALUES(@`a b`)
master-bin.000001 184 User var 1 184 @`var1`=_latin1 0x273B616161 COLLATE latin1_swedish_ci
-master-bin.000001 226 Query 1 226 use `test`; insert into t1 values (@var1)
+master-bin.000001 226 User var 1 226 @`var2`=_binary 0x61 COLLATE binary
+master-bin.000001 264 Query 1 264 use `test`; insert into t1 values (@var1),(@var2)
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
-SET @`a b`:=_latin1 0x68656C6C6F COLLATE latin1_swedish_ci;
+SET @`a b`:=_latin1 0x68656C6C6F COLLATE `latin1_swedish_ci`;
use test;
SET TIMESTAMP=10000;
INSERT INTO t1 VALUES(@`a b`);
-SET @`var1`:=_latin1 0x273B616161 COLLATE latin1_swedish_ci;
+SET @`var1`:=_latin1 0x273B616161 COLLATE `latin1_swedish_ci`;
+SET @`var2`:=_binary 0x61 COLLATE `binary`;
SET TIMESTAMP=10000;
-insert into t1 values (@var1);
+insert into t1 values (@var1),(@var2);
drop table t1;
set @var= NULL ;
select FIELD( @var,'1it','Hit') as my_column;
diff --git a/mysql-test/t/user_var.test b/mysql-test/t/user_var.test
index d985be05b94..81788ce8d73 100644
--- a/mysql-test/t/user_var.test
+++ b/mysql-test/t/user_var.test
@@ -107,7 +107,8 @@ SET TIMESTAMP=10000;
SET @`a b`='hello';
INSERT INTO t1 VALUES(@`a b`);
set @var1= "';aaa";
-insert into t1 values (@var1);
+SET @var2=char(ascii('a'));
+insert into t1 values (@var1),(@var2);
show binlog events from 79;
# more important than SHOW BINLOG EVENTS, mysqlbinlog (where we
# absolutely need variables names to be quoted and strings to be
diff --git a/sql/log_event.cc b/sql/log_event.cc
index 04395f121fd..19113a3b97e 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -2462,7 +2462,7 @@ void User_var_log_event::print(FILE* file, bool short_form, char* last_db)
*/
fprintf(file, ":=???;\n");
else
- fprintf(file, ":=_%s %s COLLATE %s;\n", cs->csname, hex_str, cs->name);
+ fprintf(file, ":=_%s %s COLLATE `%s`;\n", cs->csname, hex_str, cs->name);
my_afree(hex_str);
}
break;