Commit df2af6cd authored by unknown's avatar unknown

Merge quant.(none):/ext/mysql/bkroot/mysql-5.0-rpl

into  quant.(none):/ext/mysql/bk/mysql-5.0-bug24507


client/mysqlbinlog.cc:
  Auto merged
client/mysqldump.c:
  Auto merged
mysql-test/t/disabled.def:
  Auto merged
sql/item_timefunc.cc:
  Auto merged
sql/log_event.cc:
  Auto merged
sql/mysql_priv.h:
  Auto merged
sql/sql_parse.cc:
  Auto merged
parents 9f37ea45 b93baf48
...@@ -94,8 +94,10 @@ static bool stop_passed= 0; ...@@ -94,8 +94,10 @@ static bool stop_passed= 0;
*/ */
Format_description_log_event* description_event; Format_description_log_event* description_event;
static int dump_local_log_entries(const char* logname); static int dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
static int dump_remote_log_entries(const char* logname); const char* logname);
static int dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
const char* logname);
static int dump_log_entries(const char* logname); static int dump_log_entries(const char* logname);
static int dump_remote_file(NET* net, const char* fname); static int dump_remote_file(NET* net, const char* fname);
static void die(const char* fmt, ...); static void die(const char* fmt, ...);
...@@ -950,8 +952,22 @@ static MYSQL* safe_connect() ...@@ -950,8 +952,22 @@ static MYSQL* safe_connect()
static int dump_log_entries(const char* logname) static int dump_log_entries(const char* logname)
{ {
return (remote_opt ? dump_remote_log_entries(logname) : int rc;
dump_local_log_entries(logname)); PRINT_EVENT_INFO print_event_info;
/*
Set safe delimiter, to dump things
like CREATE PROCEDURE safely
*/
fprintf(result_file, "DELIMITER /*!*/;\n");
strcpy(print_event_info.delimiter, "/*!*/;");
rc= (remote_opt ? dump_remote_log_entries(&print_event_info, logname) :
dump_local_log_entries(&print_event_info, logname));
/* Set delimiter back to semicolon */
fprintf(result_file, "DELIMITER ;\n");
strcpy(print_event_info.delimiter, ";");
return rc;
} }
...@@ -1016,11 +1032,11 @@ static int check_master_version(MYSQL* mysql, ...@@ -1016,11 +1032,11 @@ static int check_master_version(MYSQL* mysql,
} }
static int dump_remote_log_entries(const char* logname) static int dump_remote_log_entries(PRINT_EVENT_INFO *print_event_info,
const char* logname)
{ {
char buf[128]; char buf[128];
PRINT_EVENT_INFO print_event_info;
ulong len; ulong len;
uint logname_len; uint logname_len;
NET* net; NET* net;
...@@ -1143,7 +1159,7 @@ could be out of memory"); ...@@ -1143,7 +1159,7 @@ could be out of memory");
len= 1; // fake Rotate, so don't increment old_off len= 1; // fake Rotate, so don't increment old_off
} }
} }
if ((error= process_event(&print_event_info, ev, old_off))) if ((error= process_event(print_event_info, ev, old_off)))
{ {
error= ((error < 0) ? 0 : 1); error= ((error < 0) ? 0 : 1);
goto err; goto err;
...@@ -1162,7 +1178,7 @@ could be out of memory"); ...@@ -1162,7 +1178,7 @@ could be out of memory");
goto err; goto err;
} }
if ((error= process_event(&print_event_info, ev, old_off))) if ((error= process_event(print_event_info, ev, old_off)))
{ {
my_close(file,MYF(MY_WME)); my_close(file,MYF(MY_WME));
error= ((error < 0) ? 0 : 1); error= ((error < 0) ? 0 : 1);
...@@ -1288,11 +1304,11 @@ at offset %lu ; this could be a log format error or read error", ...@@ -1288,11 +1304,11 @@ at offset %lu ; this could be a log format error or read error",
} }
static int dump_local_log_entries(const char* logname) static int dump_local_log_entries(PRINT_EVENT_INFO *print_event_info,
const char* logname)
{ {
File fd = -1; File fd = -1;
IO_CACHE cache,*file= &cache; IO_CACHE cache,*file= &cache;
PRINT_EVENT_INFO print_event_info;
byte tmp_buff[BIN_LOG_HEADER_SIZE]; byte tmp_buff[BIN_LOG_HEADER_SIZE];
int error= 0; int error= 0;
...@@ -1364,7 +1380,7 @@ static int dump_local_log_entries(const char* logname) ...@@ -1364,7 +1380,7 @@ static int dump_local_log_entries(const char* logname)
// file->error == 0 means EOF, that's OK, we break in this case // file->error == 0 means EOF, that's OK, we break in this case
break; break;
} }
if ((error= process_event(&print_event_info, ev, old_off))) if ((error= process_event(print_event_info, ev, old_off)))
{ {
if (error < 0) if (error < 0)
error= 0; error= 0;
......
...@@ -41,6 +41,6 @@ IN ind DECIMAL(10,2)) ...@@ -41,6 +41,6 @@ IN ind DECIMAL(10,2))
BEGIN BEGIN
INSERT INTO t4 VALUES (ins1, ins2, ind); INSERT INTO t4 VALUES (ins1, ins2, ind);
END END
master-bin.000001 801 Query 1 1006 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1'Foo\'s a Bar'), NAME_CONST('ins2',_cp932 0xED40ED41ED42), NAME_CONST('ind',47.93)) master-bin.000001 801 Query 1 1017 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172), NAME_CONST('ins2',_cp932 0xED40ED41ED42), NAME_CONST('ind',47.93))
master-bin.000001 1006 Query 1 1092 use `test`; DROP PROCEDURE bug18293 master-bin.000001 1017 Query 1 1103 use `test`; DROP PROCEDURE bug18293
master-bin.000001 1092 Query 1 1168 use `test`; DROP TABLE t4 master-bin.000001 1103 Query 1 1179 use `test`; DROP TABLE t4
...@@ -9,15 +9,17 @@ master-bin.000001 98 User var 1 138 @`v`=_ucs2 0x006100620063 COLLATE ucs2_gener ...@@ -9,15 +9,17 @@ master-bin.000001 98 User var 1 138 @`v`=_ucs2 0x006100620063 COLLATE ucs2_gener
master-bin.000001 138 Query 1 227 use `test`; insert into t2 values (@v) master-bin.000001 138 Query 1 227 use `test`; insert into t2 values (@v)
/*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
ROLLBACK; DELIMITER /*!*/;
SET @`v`:=_ucs2 0x006100620063 COLLATE `ucs2_general_ci`; ROLLBACK/*!*/;
use test; SET @`v`:=_ucs2 0x006100620063 COLLATE `ucs2_general_ci`/*!*/;
SET TIMESTAMP=10000; use test/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET TIMESTAMP=10000/*!*/;
SET @@session.sql_mode=0; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
/*!\C latin1 */; SET @@session.sql_mode=0/*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; /*!\C latin1 *//*!*/;
insert into t2 values (@v); SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
insert into t2 values (@v)/*!*/;
DELIMITER ;
# End of log file # End of log file
ROLLBACK /* added by mysqlbinlog */; ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
......
...@@ -124,12 +124,34 @@ create table t1 select date_format("2004-01-19 10:10:10", "%Y-%m-%d"); ...@@ -124,12 +124,34 @@ create table t1 select date_format("2004-01-19 10:10:10", "%Y-%m-%d");
show create table t1; show create table t1;
Table Create Table Table Create Table
t1 CREATE TABLE `t1` ( t1 CREATE TABLE `t1` (
`date_format("2004-01-19 10:10:10", "%Y-%m-%d")` varbinary(10) default NULL `date_format("2004-01-19 10:10:10", "%Y-%m-%d")` varchar(10) character set utf8 default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ) ENGINE=MyISAM DEFAULT CHARSET=latin1
select * from t1; select * from t1;
date_format("2004-01-19 10:10:10", "%Y-%m-%d") date_format("2004-01-19 10:10:10", "%Y-%m-%d")
2004-01-19 2004-01-19
drop table t1; drop table t1;
set names utf8;
set LC_TIME_NAMES='fr_FR';
create table t1 (s1 char(20) character set latin1);
insert into t1 values (date_format('2004-02-02','%M'));
select hex(s1) from t1;
hex(s1)
66E97672696572
drop table t1;
create table t1 (s1 char(20) character set koi8r);
set LC_TIME_NAMES='ru_RU';
insert into t1 values (date_format('2004-02-02','%M'));
insert into t1 values (date_format('2004-02-02','%b'));
insert into t1 values (date_format('2004-02-02','%W'));
insert into t1 values (date_format('2004-02-02','%a'));
select hex(s1), s1 from t1;
hex(s1) s1
E6C5D7D2C1CCD1 Февраля
E6C5D7 Фев
F0CFCEC5C4C5CCD8CEC9CB Понедельник
F0CEC4 Пнд
drop table t1;
set LC_TIME_NAMES='en_US';
set names koi8r; set names koi8r;
create table t1 (s1 char(1) character set utf8); create table t1 (s1 char(1) character set utf8);
insert into t1 values (_koi8r''); insert into t1 values (_koi8r'');
......
...@@ -275,8 +275,8 @@ is not null; ...@@ -275,8 +275,8 @@ is not null;
is not null is not null
1 1
select select
@a like "%#%error_code=0%ROLLBACK;%ROLLBACK /* added by mysqlbinlog */;%", @a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
@a not like "%#%error_code=%error_code=%"; @a not like "%#%error_code=%error_code=%";
@a like "%#%error_code=0%ROLLBACK;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%" @a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
1 1 1 1
drop table t1, t2; drop table t1, t2;
This diff is collapsed.
This diff is collapsed.
...@@ -1786,6 +1786,78 @@ CREATE TABLE `t1` ( ...@@ -1786,6 +1786,78 @@ CREATE TABLE `t1` (
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
drop table t1; drop table t1;
#
# BUG#13926: --order-by-primary fails if PKEY contains quote character
#
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`a b` INT,
`c"d` INT,
`e``f` INT,
PRIMARY KEY (`a b`, `c"d`, `e``f`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
insert into t1 values (0815, 4711, 2006);
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO,ANSI' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
DROP TABLE IF EXISTS "t1";
CREATE TABLE "t1" (
"a b" int(11) NOT NULL default '0',
"c""d" int(11) NOT NULL default '0',
"e`f" int(11) NOT NULL default '0',
PRIMARY KEY ("a b","c""d","e`f")
);
LOCK TABLES "t1" WRITE;
/*!40000 ALTER TABLE "t1" DISABLE KEYS */;
INSERT INTO "t1" VALUES (815,4711,2006);
/*!40000 ALTER TABLE "t1" ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`a b` int(11) NOT NULL default '0',
`c"d` int(11) NOT NULL default '0',
`e``f` int(11) NOT NULL default '0',
PRIMARY KEY (`a b`,`c"d`,`e``f`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
LOCK TABLES `t1` WRITE;
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
INSERT INTO `t1` VALUES (815,4711,2006);
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
DROP TABLE `t1`;
End of 4.1 tests End of 4.1 tests
# #
# Bug #10213 mysqldump crashes when dumping VIEWs(on MacOS X) # Bug #10213 mysqldump crashes when dumping VIEWs(on MacOS X)
...@@ -3124,78 +3196,6 @@ drop user myDB_User; ...@@ -3124,78 +3196,6 @@ drop user myDB_User;
drop database mysqldump_myDB; drop database mysqldump_myDB;
use test; use test;
# #
# BUG#13926: --order-by-primary fails if PKEY contains quote character
#
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`a b` INT,
`c"d` INT,
`e``f` INT,
PRIMARY KEY (`a b`, `c"d`, `e``f`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
insert into t1 values (0815, 4711, 2006);
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO,ANSI' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
DROP TABLE IF EXISTS "t1";
CREATE TABLE "t1" (
"a b" int(11) NOT NULL default '0',
"c""d" int(11) NOT NULL default '0',
"e`f" int(11) NOT NULL default '0',
PRIMARY KEY ("a b","c""d","e`f")
);
LOCK TABLES "t1" WRITE;
/*!40000 ALTER TABLE "t1" DISABLE KEYS */;
INSERT INTO "t1" VALUES (815,4711,2006);
/*!40000 ALTER TABLE "t1" ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`a b` int(11) NOT NULL default '0',
`c"d` int(11) NOT NULL default '0',
`e``f` int(11) NOT NULL default '0',
PRIMARY KEY (`a b`,`c"d`,`e``f`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
LOCK TABLES `t1` WRITE;
/*!40000 ALTER TABLE `t1` DISABLE KEYS */;
INSERT INTO `t1` VALUES (815,4711,2006);
/*!40000 ALTER TABLE `t1` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
DROP TABLE `t1`;
#
# Bug #19745: mysqldump --xml produces invalid xml # Bug #19745: mysqldump --xml produces invalid xml
# #
DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t1;
......
...@@ -176,84 +176,86 @@ hex(c1) hex(c2) ...@@ -176,84 +176,86 @@ hex(c1) hex(c2)
CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3 CDF32C20E7E020F0FBE1E0EBEAF3
/*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
ROLLBACK; DELIMITER /*!*/;
SET TIMESTAMP=1000000000; ROLLBACK/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET TIMESTAMP=1000000000/*!*/;
SET @@session.sql_mode=0; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
/*!\C latin1 */; SET @@session.sql_mode=0/*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; /*!\C latin1 *//*!*/;
drop database if exists mysqltest2; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
SET TIMESTAMP=1000000000; drop database if exists mysqltest2/*!*/;
drop database if exists mysqltest3; SET TIMESTAMP=1000000000/*!*/;
SET TIMESTAMP=1000000000; drop database if exists mysqltest3/*!*/;
create database mysqltest2 character set latin2; SET TIMESTAMP=1000000000/*!*/;
SET TIMESTAMP=1000000000; create database mysqltest2 character set latin2/*!*/;
/*!\C latin1 */; SET TIMESTAMP=1000000000/*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=30; /*!\C latin1 *//*!*/;
create database mysqltest3; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=30/*!*/;
SET TIMESTAMP=1000000000; create database mysqltest3/*!*/;
/*!\C latin1 */; SET TIMESTAMP=1000000000/*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=64; /*!\C latin1 *//*!*/;
drop database mysqltest3; SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=64/*!*/;
SET TIMESTAMP=1000000000; drop database mysqltest3/*!*/;
create database mysqltest3; SET TIMESTAMP=1000000000/*!*/;
use mysqltest2; create database mysqltest3/*!*/;
SET TIMESTAMP=1000000000; use mysqltest2/*!*/;
create table t1 (a int auto_increment primary key, b varchar(100)); SET TIMESTAMP=1000000000/*!*/;
SET INSERT_ID=1; create table t1 (a int auto_increment primary key, b varchar(100))/*!*/;
SET TIMESTAMP=1000000000; SET INSERT_ID=1/*!*/;
/*!\C cp850 */; SET TIMESTAMP=1000000000/*!*/;
SET @@session.character_set_client=4,@@session.collation_connection=27,@@session.collation_server=64; /*!\C cp850 *//*!*/;
insert into t1 (b) values(@@character_set_server); SET @@session.character_set_client=4,@@session.collation_connection=27,@@session.collation_server=64/*!*/;
SET INSERT_ID=2; insert into t1 (b) values(@@character_set_server)/*!*/;
SET TIMESTAMP=1000000000; SET INSERT_ID=2/*!*/;
insert into t1 (b) values(@@collation_server); SET TIMESTAMP=1000000000/*!*/;
SET INSERT_ID=3; insert into t1 (b) values(@@collation_server)/*!*/;
SET TIMESTAMP=1000000000; SET INSERT_ID=3/*!*/;
insert into t1 (b) values(@@character_set_client); SET TIMESTAMP=1000000000/*!*/;
SET INSERT_ID=4; insert into t1 (b) values(@@character_set_client)/*!*/;
SET TIMESTAMP=1000000000; SET INSERT_ID=4/*!*/;
insert into t1 (b) values(@@character_set_connection); SET TIMESTAMP=1000000000/*!*/;
SET INSERT_ID=5; insert into t1 (b) values(@@character_set_connection)/*!*/;
SET TIMESTAMP=1000000000; SET INSERT_ID=5/*!*/;
insert into t1 (b) values(@@collation_connection); SET TIMESTAMP=1000000000/*!*/;
SET TIMESTAMP=1000000000; insert into t1 (b) values(@@collation_connection)/*!*/;
/*!\C latin1 */; SET TIMESTAMP=1000000000/*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=5,@@session.collation_server=64; /*!\C latin1 *//*!*/;
truncate table t1; SET @@session.character_set_client=8,@@session.collation_connection=5,@@session.collation_server=64/*!*/;
SET INSERT_ID=1; truncate table t1/*!*/;
SET TIMESTAMP=1000000000; SET INSERT_ID=1/*!*/;
insert into t1 (b) values(@@collation_connection); SET TIMESTAMP=1000000000/*!*/;
SET INSERT_ID=2; insert into t1 (b) values(@@collation_connection)/*!*/;
SET TIMESTAMP=1000000000; SET INSERT_ID=2/*!*/;
insert into t1 (b) values(LEAST("Mller","Muffler")); SET TIMESTAMP=1000000000/*!*/;
SET INSERT_ID=3; insert into t1 (b) values(LEAST("Mller","Muffler"))/*!*/;
SET TIMESTAMP=1000000000; SET INSERT_ID=3/*!*/;
/*!\C latin1 */; SET TIMESTAMP=1000000000/*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=31,@@session.collation_server=64; /*!\C latin1 *//*!*/;
insert into t1 (b) values(@@collation_connection); SET @@session.character_set_client=8,@@session.collation_connection=31,@@session.collation_server=64/*!*/;
SET INSERT_ID=4; insert into t1 (b) values(@@collation_connection)/*!*/;
SET TIMESTAMP=1000000000; SET INSERT_ID=4/*!*/;
insert into t1 (b) values(LEAST("Mller","Muffler")); SET TIMESTAMP=1000000000/*!*/;
SET TIMESTAMP=1000000000; insert into t1 (b) values(LEAST("Mller","Muffler"))/*!*/;
truncate table t1; SET TIMESTAMP=1000000000/*!*/;
SET INSERT_ID=1; truncate table t1/*!*/;
SET @`a`:=_cp850 0x4DFC6C6C6572 COLLATE `cp850_general_ci`; SET INSERT_ID=1/*!*/;
SET TIMESTAMP=1000000000; SET @`a`:=_cp850 0x4DFC6C6C6572 COLLATE `cp850_general_ci`/*!*/;
insert into t1 (b) values(collation(@a)); SET TIMESTAMP=1000000000/*!*/;
SET TIMESTAMP=1000000000; insert into t1 (b) values(collation(@a))/*!*/;
drop database mysqltest2; SET TIMESTAMP=1000000000/*!*/;
SET TIMESTAMP=1000000000; drop database mysqltest2/*!*/;
drop database mysqltest3; SET TIMESTAMP=1000000000/*!*/;
use test; drop database mysqltest3/*!*/;
SET TIMESTAMP=1000000000; use test/*!*/;
/*!\C latin1 */; SET TIMESTAMP=1000000000/*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=30; /*!\C latin1 *//*!*/;
CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255)); SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=30/*!*/;
SET TIMESTAMP=1000000000; CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255))/*!*/;
/*!\C koi8r */; SET TIMESTAMP=1000000000/*!*/;
SET @@session.character_set_client=7,@@session.collation_connection=51,@@session.collation_server=30; /*!\C koi8r *//*!*/;
INSERT INTO t1 (c1, c2) VALUES (', ',', '); SET @@session.character_set_client=7,@@session.collation_connection=51,@@session.collation_server=30/*!*/;
INSERT INTO t1 (c1, c2) VALUES (', ',', ')/*!*/;
DELIMITER ;
# End of log file # End of log file
ROLLBACK /* added by mysqlbinlog */; ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
......
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
drop table if exists t1;
drop procedure if exists p1;
create table t1 (a varchar(255) character set sjis);
create procedure p1 (in a varchar(255) character set sjis) insert into t1 values (a);
SET NAMES binary;
CALL p1 ('–\\');
select "--- on master ---";
--- on master ---
--- on master ---
select hex(a) from t1 ;
hex(a)
965C
select "--- on slave ---";
--- on slave ---
--- on slave ---
select hex(a) from t1;
hex(a)
965C
drop table t1;
drop procedure p1;
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
create table t1 (s1 char(10));
set lc_time_names= 'de_DE';
insert into t1 values (date_format('2001-01-01','%W'));
select * from t1;
s1
Montag
select * from t1;
s1
Montag
drop table t1;
...@@ -43,27 +43,29 @@ t ...@@ -43,27 +43,29 @@ t
2004-06-11 09:39:02 2004-06-11 09:39:02
/*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
ROLLBACK; DELIMITER /*!*/;
use test; ROLLBACK/*!*/;
SET TIMESTAMP=100000000; use test/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET TIMESTAMP=100000000/*!*/;
SET @@session.sql_mode=0; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
/*!\C latin1 */; SET @@session.sql_mode=0/*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; /*!\C latin1 *//*!*/;
create table t1 (t timestamp); SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
SET TIMESTAMP=100000000; create table t1 (t timestamp)/*!*/;
create table t2 (t char(32)); SET TIMESTAMP=100000000/*!*/;
SET TIMESTAMP=100000000; create table t2 (t char(32))/*!*/;
SET @@session.time_zone='Europe/Moscow'; SET TIMESTAMP=100000000/*!*/;
insert into t1 values ('20050101000000'), ('20050611093902'); SET @@session.time_zone='Europe/Moscow'/*!*/;
SET TIMESTAMP=100000000; insert into t1 values ('20050101000000'), ('20050611093902')/*!*/;
SET @@session.time_zone='UTC'; SET TIMESTAMP=100000000/*!*/;
insert into t1 values ('20040101000000'), ('20040611093902'); SET @@session.time_zone='UTC'/*!*/;
SET TIMESTAMP=100000000; insert into t1 values ('20040101000000'), ('20040611093902')/*!*/;
delete from t1; SET TIMESTAMP=100000000/*!*/;
SET TIMESTAMP=100000000; delete from t1/*!*/;
SET @@session.time_zone='Europe/Moscow'; SET TIMESTAMP=100000000/*!*/;
insert into t1 values ('20040101000000'), ('20040611093902'); SET @@session.time_zone='Europe/Moscow'/*!*/;
insert into t1 values ('20040101000000'), ('20040611093902')/*!*/;
DELIMITER ;
# End of log file # End of log file
ROLLBACK /* added by mysqlbinlog */; ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
......
...@@ -15,19 +15,21 @@ master-bin.000001 273 User var 1 311 @`var2`=_binary 0x61 COLLATE binary ...@@ -15,19 +15,21 @@ master-bin.000001 273 User var 1 311 @`var2`=_binary 0x61 COLLATE binary
master-bin.000001 311 Query 1 411 use `test`; insert into t1 values (@var1),(@var2) master-bin.000001 311 Query 1 411 use `test`; insert into t1 values (@var1),(@var2)
/*!40019 SET @@session.max_insert_delayed_threads=0*/; /*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
ROLLBACK; DELIMITER /*!*/;
SET @`a b`:=_latin1 0x68656C6C6F COLLATE `latin1_swedish_ci`; ROLLBACK/*!*/;
use test; SET @`a b`:=_latin1 0x68656C6C6F COLLATE `latin1_swedish_ci`/*!*/;
SET TIMESTAMP=10000; use test/*!*/;
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1; SET TIMESTAMP=10000/*!*/;
SET @@session.sql_mode=0; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1, @@session.unique_checks=1/*!*/;
/*!\C latin1 */; SET @@session.sql_mode=0/*!*/;
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8; /*!\C latin1 *//*!*/;
INSERT INTO t1 VALUES(@`a b`); SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
SET @`var1`:=_latin1 0x273B616161 COLLATE `latin1_swedish_ci`; INSERT INTO t1 VALUES(@`a b`)/*!*/;
SET @`var2`:=_binary 0x61 COLLATE `binary`; SET @`var1`:=_latin1 0x273B616161 COLLATE `latin1_swedish_ci`/*!*/;
SET TIMESTAMP=10000; SET @`var2`:=_binary 0x61 COLLATE `binary`/*!*/;
insert into t1 values (@var1),(@var2); SET TIMESTAMP=10000/*!*/;
insert into t1 values (@var1),(@var2)/*!*/;
DELIMITER ;
# End of log file # End of log file
ROLLBACK /* added by mysqlbinlog */; ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
......
...@@ -580,6 +580,63 @@ set names latin1; ...@@ -580,6 +580,63 @@ set names latin1;
select @@have_innodb; select @@have_innodb;
@@have_innodb @@have_innodb
# #
*** Various tests with LC_TIME_NAMES
*** LC_TIME_NAMES: testing case insensitivity
set @@lc_time_names='ru_ru';
select @@lc_time_names;
@@lc_time_names
ru_RU
*** LC_TIME_NAMES: testing with a user variable
set @lc='JA_JP';
set @@lc_time_names=@lc;
select @@lc_time_names;
@@lc_time_names
ja_JP
*** LC_TIME_NAMES: testing with string expressions
set lc_time_names=concat('de','_','DE');
select @@lc_time_names;
@@lc_time_names
de_DE
set lc_time_names=concat('de','+','DE');
ERROR HY000: Unknown locale: 'de+DE'
select @@lc_time_names;
@@lc_time_names
de_DE
LC_TIME_NAMES: testing with numeric expressions
set @@lc_time_names=1+2;
select @@lc_time_names;
@@lc_time_names
sv_SE
set @@lc_time_names=1/0;
ERROR 42000: Incorrect argument type to variable 'lc_time_names'
select @@lc_time_names;
@@lc_time_names
sv_SE
set lc_time_names=en_US;
LC_TIME_NAMES: testing NULL and a negative number:
set lc_time_names=NULL;
ERROR 42000: Variable 'lc_time_names' can't be set to the value of 'NULL'
set lc_time_names=-1;
ERROR HY000: Unknown locale: '-1'
select @@lc_time_names;
@@lc_time_names
en_US
LC_TIME_NAMES: testing locale with the last ID:
set lc_time_names=108;
select @@lc_time_names;
@@lc_time_names
zh_HK
LC_TIME_NAMES: testing a number beyond the valid ID range:
set lc_time_names=109;
ERROR HY000: Unknown locale: '109'
select @@lc_time_names;
@@lc_time_names
zh_HK
LC_TIME_NAMES: testing that 0 is en_US:
set lc_time_names=0;
select @@lc_time_names;
@@lc_time_names
en_US
set @test = @@query_prealloc_size; set @test = @@query_prealloc_size;
set @@query_prealloc_size = @test; set @@query_prealloc_size = @test;
select @@query_prealloc_size = @test; select @@query_prealloc_size = @test;
......
...@@ -93,6 +93,26 @@ show create table t1; ...@@ -93,6 +93,26 @@ show create table t1;
select * from t1; select * from t1;
drop table t1; drop table t1;
#
# Bug#22646 LC_TIME_NAMES: Assignment to non-UTF8 target fails
#
set names utf8;
set LC_TIME_NAMES='fr_FR';
create table t1 (s1 char(20) character set latin1);
insert into t1 values (date_format('2004-02-02','%M'));
select hex(s1) from t1;
drop table t1;
create table t1 (s1 char(20) character set koi8r);
set LC_TIME_NAMES='ru_RU';
insert into t1 values (date_format('2004-02-02','%M'));
insert into t1 values (date_format('2004-02-02','%b'));
insert into t1 values (date_format('2004-02-02','%W'));
insert into t1 values (date_format('2004-02-02','%a'));
select hex(s1), s1 from t1;
drop table t1;
set LC_TIME_NAMES='en_US';
# #
# Bug #2366 Wrong utf8 behaviour when data is truncated # Bug #2366 Wrong utf8 behaviour when data is truncated
# #
......
...@@ -11,4 +11,5 @@ ...@@ -11,4 +11,5 @@
############################################################################## ##############################################################################
ndb_load : Bug#17233 ndb_load : Bug#17233
rpl_locale : Bug#22645
user_limits : Bug#23921 random failure of user_limits.test user_limits : Bug#23921 random failure of user_limits.test
...@@ -290,6 +290,6 @@ eval select ...@@ -290,6 +290,6 @@ eval select
is not null; is not null;
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR --replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
eval select eval select
@a like "%#%error_code=0%ROLLBACK;%ROLLBACK /* added by mysqlbinlog */;%", @a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
@a not like "%#%error_code=%error_code=%"; @a not like "%#%error_code=%error_code=%";
drop table t1, t2; drop table t1, t2;
...@@ -134,6 +134,30 @@ flush logs; ...@@ -134,6 +134,30 @@ flush logs;
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000006 | $MYSQL --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000006 | $MYSQL
select * from t5 /* must be (1),(1) */; select * from t5 /* must be (1),(1) */;
#
# Bug#20396 Bin Log does not get DELIMETER cmd - Recover StoredProc fails
#
--disable_warnings
drop procedure if exists p1;
--enable_warnings
flush logs;
delimiter //;
create procedure p1()
begin
select 1;
end;
//
delimiter ;//
flush logs;
call p1();
drop procedure p1;
--error 1305
call p1();
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000007
--exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000007 | $MYSQL
call p1();
drop procedure p1;
# clean up # clean up
drop table t1, t2, t03, t04, t3, t4, t5; drop table t1, t2, t03, t04, t3, t4, t5;
......
...@@ -713,6 +713,25 @@ create table t1 (a int); ...@@ -713,6 +713,25 @@ create table t1 (a int);
--exec $MYSQL_DUMP --skip-comments --force test t1 --where='xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 2>&1 --exec $MYSQL_DUMP --skip-comments --force test t1 --where='xx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' 2>&1
drop table t1; drop table t1;
--echo #
--echo # BUG#13926: --order-by-primary fails if PKEY contains quote character
--echo #
--disable_warnings
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`a b` INT,
`c"d` INT,
`e``f` INT,
PRIMARY KEY (`a b`, `c"d`, `e``f`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
insert into t1 values (0815, 4711, 2006);
--exec $MYSQL_DUMP --skip-comments --compatible=ansi --order-by-primary test t1
--exec $MYSQL_DUMP --skip-comments --order-by-primary test t1
DROP TABLE `t1`;
--enable_warnings
--echo End of 4.1 tests --echo End of 4.1 tests
--echo # --echo #
...@@ -1393,25 +1412,6 @@ drop user myDB_User; ...@@ -1393,25 +1412,6 @@ drop user myDB_User;
drop database mysqldump_myDB; drop database mysqldump_myDB;
use test; use test;
--echo #
--echo # BUG#13926: --order-by-primary fails if PKEY contains quote character
--echo #
--disable_warnings
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`a b` INT,
`c"d` INT,
`e``f` INT,
PRIMARY KEY (`a b`, `c"d`, `e``f`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
insert into t1 values (0815, 4711, 2006);
--exec $MYSQL_DUMP --skip-comments --compatible=ansi --order-by-primary test t1
--exec $MYSQL_DUMP --skip-comments --order-by-primary test t1
DROP TABLE `t1`;
--enable_warnings
--echo # --echo #
--echo # Bug #19745: mysqldump --xml produces invalid xml --echo # Bug #19745: mysqldump --xml produces invalid xml
--echo # --echo #
......
source include/have_sjis.inc;
source include/master-slave.inc;
--disable_warnings
drop table if exists t1;
drop procedure if exists p1;
--enable_warnings
create table t1 (a varchar(255) character set sjis);
create procedure p1 (in a varchar(255) character set sjis) insert into t1 values (a);
SET NAMES binary;
CALL p1 ('\\');
select "--- on master ---";
select hex(a) from t1 ;
sync_slave_with_master;
connection slave;
select "--- on slave ---";
select hex(a) from t1;
connection master;
drop table t1;
drop procedure p1;
sync_slave_with_master;
connection master;
# End of 5.0 tests
# Replication of locale variables
source include/master-slave.inc;
#
# Bug#22645 LC_TIME_NAMES: Statement not replicated
#
connection master;
create table t1 (s1 char(10));
set lc_time_names= 'de_DE';
insert into t1 values (date_format('2001-01-01','%W'));
select * from t1;
sync_slave_with_master;
connection slave;
select * from t1;
connection master;
drop table t1;
sync_slave_with_master;
# End of 4.1 tests
...@@ -460,6 +460,50 @@ set names latin1; ...@@ -460,6 +460,50 @@ set names latin1;
--replace_column 1 # --replace_column 1 #
select @@have_innodb; select @@have_innodb;
#
# Tests for lc_time_names
# Note, when adding new locales, please fix ID accordingly:
# - to test the last ID (currently 108)
# - and the next after the last (currently 109)
#
--echo *** Various tests with LC_TIME_NAMES
--echo *** LC_TIME_NAMES: testing case insensitivity
set @@lc_time_names='ru_ru';
select @@lc_time_names;
--echo *** LC_TIME_NAMES: testing with a user variable
set @lc='JA_JP';
set @@lc_time_names=@lc;
select @@lc_time_names;
--echo *** LC_TIME_NAMES: testing with string expressions
set lc_time_names=concat('de','_','DE');
select @@lc_time_names;
--error 1105
set lc_time_names=concat('de','+','DE');
select @@lc_time_names;
--echo LC_TIME_NAMES: testing with numeric expressions
set @@lc_time_names=1+2;
select @@lc_time_names;
--error 1232
set @@lc_time_names=1/0;
select @@lc_time_names;
set lc_time_names=en_US;
--echo LC_TIME_NAMES: testing NULL and a negative number:
--error 1231
set lc_time_names=NULL;
--error 1105
set lc_time_names=-1;
select @@lc_time_names;
--echo LC_TIME_NAMES: testing locale with the last ID:
set lc_time_names=108;
select @@lc_time_names;
--echo LC_TIME_NAMES: testing a number beyond the valid ID range:
--error 1105
set lc_time_names=109;
select @@lc_time_names;
--echo LC_TIME_NAMES: testing that 0 is en_US:
set lc_time_names=0;
select @@lc_time_names;
# #
# Bug #13334: query_prealloc_size default less than minimum # Bug #13334: query_prealloc_size default less than minimum
# #
......
...@@ -609,16 +609,10 @@ bool make_date_time(DATE_TIME_FORMAT *format, TIME *l_time, ...@@ -609,16 +609,10 @@ bool make_date_time(DATE_TIME_FORMAT *format, TIME *l_time,
uint weekday; uint weekday;
ulong length; ulong length;
const char *ptr, *end; const char *ptr, *end;
MY_LOCALE *locale;
THD *thd= current_thd; THD *thd= current_thd;
char buf[STRING_BUFFER_USUAL_SIZE]; MY_LOCALE *locale= thd->variables.lc_time_names;
String tmp(buf, sizeof(buf), thd->variables.character_set_results);
uint errors= 0;
tmp.length(0);
str->length(0); str->length(0);
str->set_charset(&my_charset_bin);
locale = thd->variables.lc_time_names;
if (l_time->neg) if (l_time->neg)
str->append('-'); str->append('-');
...@@ -634,38 +628,34 @@ bool make_date_time(DATE_TIME_FORMAT *format, TIME *l_time, ...@@ -634,38 +628,34 @@ bool make_date_time(DATE_TIME_FORMAT *format, TIME *l_time,
case 'M': case 'M':
if (!l_time->month) if (!l_time->month)
return 1; return 1;
tmp.copy(locale->month_names->type_names[l_time->month-1], str->append(locale->month_names->type_names[l_time->month-1],
strlen(locale->month_names->type_names[l_time->month-1]), strlen(locale->month_names->type_names[l_time->month-1]),
system_charset_info, tmp.charset(), &errors); system_charset_info);
str->append(tmp.ptr(), tmp.length());
break; break;
case 'b': case 'b':
if (!l_time->month) if (!l_time->month)
return 1; return 1;
tmp.copy(locale->ab_month_names->type_names[l_time->month-1], str->append(locale->ab_month_names->type_names[l_time->month-1],
strlen(locale->ab_month_names->type_names[l_time->month-1]), strlen(locale->ab_month_names->type_names[l_time->month-1]),
system_charset_info, tmp.charset(), &errors); system_charset_info);
str->append(tmp.ptr(), tmp.length());
break; break;
case 'W': case 'W':
if (type == MYSQL_TIMESTAMP_TIME) if (type == MYSQL_TIMESTAMP_TIME)
return 1; return 1;
weekday= calc_weekday(calc_daynr(l_time->year,l_time->month, weekday= calc_weekday(calc_daynr(l_time->year,l_time->month,
l_time->day),0); l_time->day),0);
tmp.copy(locale->day_names->type_names[weekday], str->append(locale->day_names->type_names[weekday],
strlen(locale->day_names->type_names[weekday]), strlen(locale->day_names->type_names[weekday]),
system_charset_info, tmp.charset(), &errors); system_charset_info);
str->append(tmp.ptr(), tmp.length());
break; break;
case 'a': case 'a':
if (type == MYSQL_TIMESTAMP_TIME) if (type == MYSQL_TIMESTAMP_TIME)
return 1; return 1;
weekday=calc_weekday(calc_daynr(l_time->year,l_time->month, weekday=calc_weekday(calc_daynr(l_time->year,l_time->month,
l_time->day),0); l_time->day),0);
tmp.copy(locale->ab_day_names->type_names[weekday], str->append(locale->ab_day_names->type_names[weekday],
strlen(locale->ab_day_names->type_names[weekday]), strlen(locale->ab_day_names->type_names[weekday]),
system_charset_info, tmp.charset(), &errors); system_charset_info);
str->append(tmp.ptr(), tmp.length());
break; break;
case 'D': case 'D':
if (type == MYSQL_TIMESTAMP_TIME) if (type == MYSQL_TIMESTAMP_TIME)
...@@ -1710,6 +1700,7 @@ longlong Item_func_sec_to_time::val_int() ...@@ -1710,6 +1700,7 @@ longlong Item_func_sec_to_time::val_int()
void Item_func_date_format::fix_length_and_dec() void Item_func_date_format::fix_length_and_dec()
{ {
THD* thd= current_thd;
/* /*
Must use this_item() in case it's a local SP variable Must use this_item() in case it's a local SP variable
(for ->max_length and ->str_value) (for ->max_length and ->str_value)
...@@ -1717,22 +1708,18 @@ void Item_func_date_format::fix_length_and_dec() ...@@ -1717,22 +1708,18 @@ void Item_func_date_format::fix_length_and_dec()
Item *arg1= args[1]->this_item(); Item *arg1= args[1]->this_item();
decimals=0; decimals=0;
collation.set(&my_charset_bin); collation.set(thd->variables.collation_connection);
if (arg1->type() == STRING_ITEM) if (arg1->type() == STRING_ITEM)
{ // Optimize the normal case { // Optimize the normal case
fixed_length=1; fixed_length=1;
max_length= format_length(&arg1->str_value) *
/* collation.collation->mbmaxlen;
The result is a binary string (no reason to use collation->mbmaxlen
This is becasue make_date_time() only returns binary strings
*/
max_length= format_length(&arg1->str_value);
} }
else else
{ {
fixed_length=0; fixed_length=0;
/* The result is a binary string (no reason to use collation->mbmaxlen */ max_length=min(arg1->max_length, MAX_BLOB_WIDTH) * 10 *
max_length=min(arg1->max_length, MAX_BLOB_WIDTH) * 10; collation.collation->mbmaxlen;
set_if_smaller(max_length,MAX_BLOB_WIDTH); set_if_smaller(max_length,MAX_BLOB_WIDTH);
} }
maybe_null=1; // If wrong date maybe_null=1; // If wrong date
...@@ -1877,6 +1864,7 @@ String *Item_func_date_format::val_str(String *str) ...@@ -1877,6 +1864,7 @@ String *Item_func_date_format::val_str(String *str)
date_time_format.format.length= format->length(); date_time_format.format.length= format->length();
/* Create the result string */ /* Create the result string */
str->set_charset(collation.collation);
if (!make_date_time(&date_time_format, &l_time, if (!make_date_time(&date_time_format, &l_time,
is_time_format ? MYSQL_TIMESTAMP_TIME : is_time_format ? MYSQL_TIMESTAMP_TIME :
MYSQL_TIMESTAMP_DATE, MYSQL_TIMESTAMP_DATE,
......
...@@ -261,7 +261,7 @@ append_query_string(CHARSET_INFO *csinfo, ...@@ -261,7 +261,7 @@ append_query_string(CHARSET_INFO *csinfo,
else else
{ {
*ptr++= '\''; *ptr++= '\'';
ptr+= escape_string_for_mysql(from->charset(), ptr, 0, ptr+= escape_string_for_mysql(csinfo, ptr, 0,
from->ptr(), from->length()); from->ptr(), from->length());
*ptr++='\''; *ptr++='\'';
} }
...@@ -1507,15 +1507,16 @@ void Query_log_event::print_query_header(FILE* file, ...@@ -1507,15 +1507,16 @@ void Query_log_event::print_query_header(FILE* file,
if (different_db= memcmp(print_event_info->db, db, db_len + 1)) if (different_db= memcmp(print_event_info->db, db, db_len + 1))
memcpy(print_event_info->db, db, db_len + 1); memcpy(print_event_info->db, db, db_len + 1);
if (db[0] && different_db) if (db[0] && different_db)
fprintf(file, "use %s;\n", db); fprintf(file, "use %s%s\n", db, print_event_info->delimiter);
} }
end=int10_to_str((long) when, strmov(buff,"SET TIMESTAMP="),10); end=int10_to_str((long) when, strmov(buff,"SET TIMESTAMP="),10);
*end++=';'; end= strmov(end, print_event_info->delimiter);
*end++='\n'; *end++='\n';
my_fwrite(file, (byte*) buff, (uint) (end-buff),MYF(MY_NABP | MY_WME)); my_fwrite(file, (byte*) buff, (uint) (end-buff),MYF(MY_NABP | MY_WME));
if (flags & LOG_EVENT_THREAD_SPECIFIC_F) if (flags & LOG_EVENT_THREAD_SPECIFIC_F)
fprintf(file,"SET @@session.pseudo_thread_id=%lu;\n",(ulong)thread_id); fprintf(file,"SET @@session.pseudo_thread_id=%lu%s\n",
(ulong)thread_id, print_event_info->delimiter);
/* /*
If flags2_inited==0, this is an event from 3.23 or 4.0; nothing to If flags2_inited==0, this is an event from 3.23 or 4.0; nothing to
...@@ -1544,7 +1545,7 @@ void Query_log_event::print_query_header(FILE* file, ...@@ -1544,7 +1545,7 @@ void Query_log_event::print_query_header(FILE* file,
"@@session.sql_auto_is_null", &need_comma); "@@session.sql_auto_is_null", &need_comma);
print_set_option(file, tmp, OPTION_RELAXED_UNIQUE_CHECKS, ~flags2, print_set_option(file, tmp, OPTION_RELAXED_UNIQUE_CHECKS, ~flags2,
"@@session.unique_checks", &need_comma); "@@session.unique_checks", &need_comma);
fprintf(file,";\n"); fprintf(file,"%s\n", print_event_info->delimiter);
print_event_info->flags2= flags2; print_event_info->flags2= flags2;
} }
} }
...@@ -1572,15 +1573,17 @@ void Query_log_event::print_query_header(FILE* file, ...@@ -1572,15 +1573,17 @@ void Query_log_event::print_query_header(FILE* file,
} }
if (unlikely(print_event_info->sql_mode != sql_mode)) if (unlikely(print_event_info->sql_mode != sql_mode))
{ {
fprintf(file,"SET @@session.sql_mode=%lu;\n",(ulong)sql_mode); fprintf(file,"SET @@session.sql_mode=%lu%s\n",
(ulong)sql_mode, print_event_info->delimiter);
print_event_info->sql_mode= sql_mode; print_event_info->sql_mode= sql_mode;
} }
} }
if (print_event_info->auto_increment_increment != auto_increment_increment || if (print_event_info->auto_increment_increment != auto_increment_increment ||
print_event_info->auto_increment_offset != auto_increment_offset) print_event_info->auto_increment_offset != auto_increment_offset)
{ {
fprintf(file,"SET @@session.auto_increment_increment=%lu, @@session.auto_increment_offset=%lu;\n", fprintf(file,"SET @@session.auto_increment_increment=%lu, @@session.auto_increment_offset=%lu%s\n",
auto_increment_increment,auto_increment_offset); auto_increment_increment,auto_increment_offset,
print_event_info->delimiter);
print_event_info->auto_increment_increment= auto_increment_increment; print_event_info->auto_increment_increment= auto_increment_increment;
print_event_info->auto_increment_offset= auto_increment_offset; print_event_info->auto_increment_offset= auto_increment_offset;
} }
...@@ -1599,16 +1602,19 @@ void Query_log_event::print_query_header(FILE* file, ...@@ -1599,16 +1602,19 @@ void Query_log_event::print_query_header(FILE* file,
CHARSET_INFO *cs_info= get_charset(uint2korr(charset), MYF(MY_WME)); CHARSET_INFO *cs_info= get_charset(uint2korr(charset), MYF(MY_WME));
if (cs_info) if (cs_info)
{ {
fprintf(file, "/*!\\C %s */;\n", cs_info->csname); /* for mysql client */ /* for mysql client */
fprintf(file, "/*!\\C %s */%s\n",
cs_info->csname, print_event_info->delimiter);
} }
fprintf(file,"SET " fprintf(file,"SET "
"@@session.character_set_client=%d," "@@session.character_set_client=%d,"
"@@session.collation_connection=%d," "@@session.collation_connection=%d,"
"@@session.collation_server=%d" "@@session.collation_server=%d"
";\n", "%s\n",
uint2korr(charset), uint2korr(charset),
uint2korr(charset+2), uint2korr(charset+2),
uint2korr(charset+4)); uint2korr(charset+4),
print_event_info->delimiter);
memcpy(print_event_info->charset, charset, 6); memcpy(print_event_info->charset, charset, 6);
} }
} }
...@@ -1616,7 +1622,8 @@ void Query_log_event::print_query_header(FILE* file, ...@@ -1616,7 +1622,8 @@ void Query_log_event::print_query_header(FILE* file,
{ {
if (bcmp(print_event_info->time_zone_str, time_zone_str, time_zone_len+1)) if (bcmp(print_event_info->time_zone_str, time_zone_str, time_zone_len+1))
{ {
fprintf(file,"SET @@session.time_zone='%s';\n", time_zone_str); fprintf(file,"SET @@session.time_zone='%s'%s\n",
time_zone_str, print_event_info->delimiter);
memcpy(print_event_info->time_zone_str, time_zone_str, time_zone_len+1); memcpy(print_event_info->time_zone_str, time_zone_str, time_zone_len+1);
} }
} }
...@@ -1627,7 +1634,7 @@ void Query_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) ...@@ -1627,7 +1634,7 @@ void Query_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
{ {
print_query_header(file, print_event_info); print_query_header(file, print_event_info);
my_fwrite(file, (byte*) query, q_len, MYF(MY_NABP | MY_WME)); my_fwrite(file, (byte*) query, q_len, MYF(MY_NABP | MY_WME));
fputs(";\n", file); fprintf(file, "%s\n", print_event_info->delimiter);
} }
#endif /* MYSQL_CLIENT */ #endif /* MYSQL_CLIENT */
...@@ -1981,9 +1988,9 @@ void Start_log_event_v3::print(FILE* file, PRINT_EVENT_INFO* print_event_info) ...@@ -1981,9 +1988,9 @@ void Start_log_event_v3::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
and rollback unfinished transaction. and rollback unfinished transaction.
Probably this can be done with RESET CONNECTION (syntax to be defined). Probably this can be done with RESET CONNECTION (syntax to be defined).
*/ */
fprintf(file,"RESET CONNECTION;\n"); fprintf(file,"RESET CONNECTION%s\n", print_event_info->delimiter);
#else #else
fprintf(file,"ROLLBACK;\n"); fprintf(file,"ROLLBACK%s\n", print_event_info->delimiter);
#endif #endif
} }
fflush(file); fflush(file);
...@@ -2717,13 +2724,14 @@ void Load_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info, ...@@ -2717,13 +2724,14 @@ void Load_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info,
} }
if (db && db[0] && different_db) if (db && db[0] && different_db)
fprintf(file, "%suse %s;\n", fprintf(file, "%suse %s%s\n",
commented ? "# " : "", commented ? "# " : "",
db); db, print_event_info->delimiter);
if (flags & LOG_EVENT_THREAD_SPECIFIC_F) if (flags & LOG_EVENT_THREAD_SPECIFIC_F)
fprintf(file,"%sSET @@session.pseudo_thread_id=%lu;\n", fprintf(file,"%sSET @@session.pseudo_thread_id=%lu%s\n",
commented ? "# " : "", (ulong)thread_id); commented ? "# " : "", (ulong)thread_id,
print_event_info->delimiter);
fprintf(file, "%sLOAD DATA ", fprintf(file, "%sLOAD DATA ",
commented ? "# " : ""); commented ? "# " : "");
if (check_fname_outside_temp_buf()) if (check_fname_outside_temp_buf())
...@@ -2775,7 +2783,7 @@ void Load_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info, ...@@ -2775,7 +2783,7 @@ void Load_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info,
fputc(')', file); fputc(')', file);
} }
fprintf(file, ";\n"); fprintf(file, "%s\n", print_event_info->delimiter);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
#endif /* MYSQL_CLIENT */ #endif /* MYSQL_CLIENT */
...@@ -3352,7 +3360,8 @@ void Intvar_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) ...@@ -3352,7 +3360,8 @@ void Intvar_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
msg="INVALID_INT"; msg="INVALID_INT";
break; break;
} }
fprintf(file, "%s=%s;\n", msg, llstr(val,llbuff)); fprintf(file, "%s=%s%s\n",
msg, llstr(val,llbuff), print_event_info->delimiter);
fflush(file); fflush(file);
} }
#endif #endif
...@@ -3427,8 +3436,9 @@ void Rand_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) ...@@ -3427,8 +3436,9 @@ void Rand_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
print_header(file, print_event_info); print_header(file, print_event_info);
fprintf(file, "\tRand\n"); fprintf(file, "\tRand\n");
} }
fprintf(file, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s;\n", fprintf(file, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s%s\n",
llstr(seed1, llbuff),llstr(seed2, llbuff2)); llstr(seed1, llbuff),llstr(seed2, llbuff2),
print_event_info->delimiter);
fflush(file); fflush(file);
} }
#endif /* MYSQL_CLIENT */ #endif /* MYSQL_CLIENT */
...@@ -3500,7 +3510,7 @@ void Xid_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) ...@@ -3500,7 +3510,7 @@ void Xid_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
fprintf(file, "\tXid = %s\n", buf); fprintf(file, "\tXid = %s\n", buf);
fflush(file); fflush(file);
} }
fprintf(file, "COMMIT;\n"); fprintf(file, "COMMIT%s\n", print_event_info->delimiter);
} }
#endif /* MYSQL_CLIENT */ #endif /* MYSQL_CLIENT */
...@@ -3701,7 +3711,7 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) ...@@ -3701,7 +3711,7 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
if (is_null) if (is_null)
{ {
fprintf(file, ":=NULL;\n"); fprintf(file, ":=NULL%s\n", print_event_info->delimiter);
} }
else else
{ {
...@@ -3709,12 +3719,12 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) ...@@ -3709,12 +3719,12 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
case REAL_RESULT: case REAL_RESULT:
double real_val; double real_val;
float8get(real_val, val); float8get(real_val, val);
fprintf(file, ":=%.14g;\n", real_val); fprintf(file, ":=%.14g%s\n", real_val, print_event_info->delimiter);
break; break;
case INT_RESULT: case INT_RESULT:
char int_buf[22]; char int_buf[22];
longlong10_to_str(uint8korr(val), int_buf, -10); longlong10_to_str(uint8korr(val), int_buf, -10);
fprintf(file, ":=%s;\n", int_buf); fprintf(file, ":=%s%s\n", int_buf, print_event_info->delimiter);
break; break;
case DECIMAL_RESULT: case DECIMAL_RESULT:
{ {
...@@ -3730,7 +3740,7 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) ...@@ -3730,7 +3740,7 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
bin2decimal(val+2, &dec, precision, scale); bin2decimal(val+2, &dec, precision, scale);
decimal2string(&dec, str_buf, &str_len, 0, 0, 0); decimal2string(&dec, str_buf, &str_len, 0, 0, 0);
str_buf[str_len]= 0; str_buf[str_len]= 0;
fprintf(file, ":=%s;\n",str_buf); fprintf(file, ":=%s%s\n",str_buf, print_event_info->delimiter);
break; break;
} }
case STRING_RESULT: case STRING_RESULT:
...@@ -3766,9 +3776,10 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info) ...@@ -3766,9 +3776,10 @@ void User_var_log_event::print(FILE* file, PRINT_EVENT_INFO* print_event_info)
Generate an unusable command (=> syntax error) is probably the best Generate an unusable command (=> syntax error) is probably the best
thing we can do here. thing we can do here.
*/ */
fprintf(file, ":=???;\n"); fprintf(file, ":=???%s\n", print_event_info->delimiter);
else else
fprintf(file, ":=_%s %s COLLATE `%s`;\n", cs->csname, hex_str, cs->name); fprintf(file, ":=_%s %s COLLATE `%s`%s\n",
cs->csname, hex_str, cs->name, print_event_info->delimiter);
my_afree(hex_str); my_afree(hex_str);
} }
break; break;
...@@ -4867,12 +4878,12 @@ void Execute_load_query_log_event::print(FILE* file, ...@@ -4867,12 +4878,12 @@ void Execute_load_query_log_event::print(FILE* file,
fprintf(file, " INTO"); fprintf(file, " INTO");
my_fwrite(file, (byte*) query + fn_pos_end, q_len-fn_pos_end, my_fwrite(file, (byte*) query + fn_pos_end, q_len-fn_pos_end,
MYF(MY_NABP | MY_WME)); MYF(MY_NABP | MY_WME));
fprintf(file, ";\n"); fprintf(file, "%s\n", print_event_info->delimiter);
} }
else else
{ {
my_fwrite(file, (byte*) query, q_len, MYF(MY_NABP | MY_WME)); my_fwrite(file, (byte*) query, q_len, MYF(MY_NABP | MY_WME));
fprintf(file, ";\n"); fprintf(file, "%s\n", print_event_info->delimiter);
} }
if (!print_event_info->short_form) if (!print_event_info->short_form)
......
...@@ -519,12 +519,14 @@ typedef struct st_print_event_info ...@@ -519,12 +519,14 @@ typedef struct st_print_event_info
bzero(db, sizeof(db)); bzero(db, sizeof(db));
bzero(charset, sizeof(charset)); bzero(charset, sizeof(charset));
bzero(time_zone_str, sizeof(time_zone_str)); bzero(time_zone_str, sizeof(time_zone_str));
strcpy(delimiter, ";");
} }
/* Settings on how to print the events */ /* Settings on how to print the events */
bool short_form; bool short_form;
my_off_t hexdump_from; my_off_t hexdump_from;
uint8 common_header_len; uint8 common_header_len;
char delimiter[16];
} PRINT_EVENT_INFO; } PRINT_EVENT_INFO;
#endif #endif
......
...@@ -109,6 +109,7 @@ enum Derivation ...@@ -109,6 +109,7 @@ enum Derivation
typedef struct my_locale_st typedef struct my_locale_st
{ {
uint number;
const char *name; const char *name;
const char *description; const char *description;
const bool is_ascii; const bool is_ascii;
...@@ -117,9 +118,11 @@ typedef struct my_locale_st ...@@ -117,9 +118,11 @@ typedef struct my_locale_st
TYPELIB *day_names; TYPELIB *day_names;
TYPELIB *ab_day_names; TYPELIB *ab_day_names;
#ifdef __cplusplus #ifdef __cplusplus
my_locale_st(const char *name_par, const char *descr_par, bool is_ascii_par, my_locale_st(uint number_par,
const char *name_par, const char *descr_par, bool is_ascii_par,
TYPELIB *month_names_par, TYPELIB *ab_month_names_par, TYPELIB *month_names_par, TYPELIB *ab_month_names_par,
TYPELIB *day_names_par, TYPELIB *ab_day_names_par) : TYPELIB *day_names_par, TYPELIB *ab_day_names_par) :
number(number_par),
name(name_par), description(descr_par), is_ascii(is_ascii_par), name(name_par), description(descr_par), is_ascii(is_ascii_par),
month_names(month_names_par), ab_month_names(ab_month_names_par), month_names(month_names_par), ab_month_names(ab_month_names_par),
day_names(day_names_par), ab_day_names(ab_day_names_par) day_names(day_names_par), ab_day_names(ab_day_names_par)
...@@ -131,6 +134,7 @@ extern MY_LOCALE my_locale_en_US; ...@@ -131,6 +134,7 @@ extern MY_LOCALE my_locale_en_US;
extern MY_LOCALE *my_locales[]; extern MY_LOCALE *my_locales[];
MY_LOCALE *my_locale_by_name(const char *name); MY_LOCALE *my_locale_by_name(const char *name);
MY_LOCALE *my_locale_by_number(uint number);
/*************************************************************************** /***************************************************************************
Configuration parameters Configuration parameters
......
...@@ -2782,17 +2782,39 @@ byte *sys_var_max_user_conn::value_ptr(THD *thd, enum_var_type type, ...@@ -2782,17 +2782,39 @@ byte *sys_var_max_user_conn::value_ptr(THD *thd, enum_var_type type,
return (byte*) &(max_user_connections); return (byte*) &(max_user_connections);
} }
bool sys_var_thd_lc_time_names::check(THD *thd, set_var *var) bool sys_var_thd_lc_time_names::check(THD *thd, set_var *var)
{ {
char *locale_str =var->value->str_value.c_ptr(); MY_LOCALE *locale_match;
MY_LOCALE *locale_match= my_locale_by_name(locale_str);
if (locale_match == NULL) if (var->value->result_type() == INT_RESULT)
{
if (!(locale_match= my_locale_by_number((uint) var->value->val_int())))
{
char buf[20];
int10_to_str((int) var->value->val_int(), buf, -10);
my_printf_error(ER_UNKNOWN_ERROR, "Unknown locale: '%s'", MYF(0), buf);
return 1;
}
}
else // STRING_RESULT
{
char buff[6];
String str(buff, sizeof(buff), &my_charset_latin1), *res;
if (!(res=var->value->val_str(&str)))
{
my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), name, "NULL");
return 1;
}
const char *locale_str= res->c_ptr();
if (!(locale_match= my_locale_by_name(locale_str)))
{ {
my_printf_error(ER_UNKNOWN_ERROR, my_printf_error(ER_UNKNOWN_ERROR,
"Unknown locale: '%s'", MYF(0), locale_str); "Unknown locale: '%s'", MYF(0), locale_str);
return 1; return 1;
} }
}
var->save_result.locale_value= locale_match; var->save_result.locale_value= locale_match;
return 0; return 0;
} }
......
...@@ -820,12 +820,16 @@ class sys_var_thd_lc_time_names :public sys_var_thd ...@@ -820,12 +820,16 @@ class sys_var_thd_lc_time_names :public sys_var_thd
public: public:
sys_var_thd_lc_time_names(const char *name_arg): sys_var_thd_lc_time_names(const char *name_arg):
sys_var_thd(name_arg) sys_var_thd(name_arg)
{} {
#if MYSQL_VERSION_ID < 50000
no_support_one_shot= 0;
#endif
}
bool check(THD *thd, set_var *var); bool check(THD *thd, set_var *var);
SHOW_TYPE type() { return SHOW_CHAR; } SHOW_TYPE type() { return SHOW_CHAR; }
bool check_update_type(Item_result type) bool check_update_type(Item_result type)
{ {
return type != STRING_RESULT; /* Only accept strings */ return ((type != STRING_RESULT) && (type != INT_RESULT));
} }
bool check_default(enum_var_type type) { return 0; } bool check_default(enum_var_type type) { return 0; }
bool update(THD *thd, set_var *var); bool update(THD *thd, set_var *var);
......
...@@ -93,7 +93,7 @@ sp_map_item_type(enum enum_field_types type) ...@@ -93,7 +93,7 @@ sp_map_item_type(enum enum_field_types type)
*/ */
static String * static String *
sp_get_item_value(Item *item, String *str) sp_get_item_value(THD *thd, Item *item, String *str)
{ {
Item_result result_type= item->result_type(); Item_result result_type= item->result_type();
...@@ -113,15 +113,16 @@ sp_get_item_value(Item *item, String *str) ...@@ -113,15 +113,16 @@ sp_get_item_value(Item *item, String *str)
{ {
char buf_holder[STRING_BUFFER_USUAL_SIZE]; char buf_holder[STRING_BUFFER_USUAL_SIZE];
String buf(buf_holder, sizeof(buf_holder), result->charset()); String buf(buf_holder, sizeof(buf_holder), result->charset());
CHARSET_INFO *cs= thd->variables.character_set_client;
/* We must reset length of the buffer, because of String specificity. */ /* We must reset length of the buffer, because of String specificity. */
buf.length(0); buf.length(0);
buf.append('_'); buf.append('_');
buf.append(result->charset()->csname); buf.append(result->charset()->csname);
if (result->charset()->escape_with_backslash_is_dangerous) if (cs->escape_with_backslash_is_dangerous)
buf.append(' '); buf.append(' ');
append_query_string(result->charset(), result, &buf); append_query_string(cs, result, &buf);
str->copy(buf); str->copy(buf);
return str; return str;
...@@ -862,7 +863,7 @@ subst_spvars(THD *thd, sp_instr *instr, LEX_STRING *query_str) ...@@ -862,7 +863,7 @@ subst_spvars(THD *thd, sp_instr *instr, LEX_STRING *query_str)
val= (*splocal)->this_item(); val= (*splocal)->this_item();
DBUG_PRINT("info", ("print %p", val)); DBUG_PRINT("info", ("print %p", val));
str_value= sp_get_item_value(val, &str_value_holder); str_value= sp_get_item_value(thd, val, &str_value_holder);
if (str_value) if (str_value)
res|= qbuf.append(*str_value); res|= qbuf.append(*str_value);
else else
...@@ -1456,7 +1457,7 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount, ...@@ -1456,7 +1457,7 @@ sp_head::execute_function(THD *thd, Item **argp, uint argcount,
if (arg_no) if (arg_no)
binlog_buf.append(','); binlog_buf.append(',');
str_value= sp_get_item_value(nctx->get_item(arg_no), str_value= sp_get_item_value(thd, nctx->get_item(arg_no),
&str_value_holder); &str_value_holder);
if (str_value) if (str_value)
......
This diff is collapsed.
...@@ -2385,6 +2385,7 @@ static void reset_one_shot_variables(THD *thd) ...@@ -2385,6 +2385,7 @@ static void reset_one_shot_variables(THD *thd)
thd->update_charset(); thd->update_charset();
thd->variables.time_zone= thd->variables.time_zone=
global_system_variables.time_zone; global_system_variables.time_zone;
thd->variables.lc_time_names= &my_locale_en_US;
thd->one_shot_set= 0; thd->one_shot_set= 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment