diff --git a/VC++Files/storage/example/example.vcproj b/VC++Files/storage/example/example.vcproj
index 257a1e77b71..81353cb759b 100644
--- a/VC++Files/storage/example/example.vcproj
+++ b/VC++Files/storage/example/example.vcproj
@@ -23,7 +23,7 @@
Optimization="2"
InlineFunctionExpansion="1"
OptimizeForProcessor="2"
- AdditionalIncludeDirectories="../../include,../../regex,../../sql"
+ AdditionalIncludeDirectories="../../include,../../regex,../../sql,../../extra/yassl/include"
PreprocessorDefinitions="DBUG_OFF;_WINDOWS;NDEBUG;WITH_PARTITION_STORAGE_ENGINE"
StringPooling="TRUE"
RuntimeLibrary="0"
@@ -72,7 +72,7 @@
Name="VCCLCompilerTool"
Optimization="0"
OptimizeForProcessor="2"
- AdditionalIncludeDirectories="../../include,../../regex,../../sql"
+ AdditionalIncludeDirectories="../../include,../../regex,../../sql,../../extra/yassl/include"
PreprocessorDefinitions="_DEBUG;SAFEMALLOC;SAFE_MUTEX;_WINDOWS;USE_TLS;WITH_PARTITION_STORAGE_ENGINE"
StringPooling="TRUE"
RuntimeLibrary="1"
@@ -122,7 +122,7 @@
Optimization="2"
InlineFunctionExpansion="1"
OptimizeForProcessor="2"
- AdditionalIncludeDirectories="../../include,../../regex,../../sql"
+ AdditionalIncludeDirectories="../../include,../../regex,../../sql,../../extra/yassl/include"
PreprocessorDefinitions="DBUG_OFF;_WINDOWS;NDEBUG;USE_TLS;WITH_PARTITION_STORAGE_ENGINE"
StringPooling="TRUE"
RuntimeLibrary="0"
@@ -171,7 +171,7 @@
Name="VCCLCompilerTool"
Optimization="0"
OptimizeForProcessor="2"
- AdditionalIncludeDirectories="../../include,../../regex,../../sql"
+ AdditionalIncludeDirectories="../../include,../../regex,../../sql,../../extra/yassl/include"
PreprocessorDefinitions="_DEBUG;SAFEMALLOC;SAFE_MUTEX;_WINDOWS;WITH_PARTITION_STORAGE_ENGINE"
StringPooling="TRUE"
RuntimeLibrary="1"
diff --git a/win/cmakefiles/client b/client/cmakelists.txt
similarity index 86%
rename from win/cmakefiles/client
rename to client/cmakelists.txt
index 5da9189b0ae..26cc36c7f6f 100644
--- a/win/cmakefiles/client
+++ b/client/cmakelists.txt
@@ -51,30 +51,30 @@ ADD_LIBRARY(mysqlclient ../mysys/array.c ../strings/bchange.c ../strings/bmove.c
ADD_DEPENDENCIES(mysqlclient GenError)
ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc sql_string.cc)
LINK_DIRECTORIES(${MYSQL_BINARY_DIR}/mysys ${MYSQL_BINARY_DIR}/zlib)
-TARGET_LINK_LIBRARIES(mysql mysqlclient mysys yassl zlib dbug yassl taocrypt wsock32)
+TARGET_LINK_LIBRARIES(mysql mysqlclient mysys yassl taocrypt zlib dbug wsock32)
ADD_EXECUTABLE(mysqltest mysqltest.c)
-TARGET_LINK_LIBRARIES(mysqltest mysqlclient mysys yassl zlib dbug regex wsock32)
+TARGET_LINK_LIBRARIES(mysqltest mysqlclient mysys yassl taocrypt zlib dbug regex wsock32)
ADD_EXECUTABLE(mysqlcheck mysqlcheck.c)
-TARGET_LINK_LIBRARIES(mysqlcheck mysqlclient dbug yassl zlib wsock32)
+TARGET_LINK_LIBRARIES(mysqlcheck mysqlclient dbug yassl taocrypt zlib wsock32)
ADD_EXECUTABLE(mysqldump mysqldump.c ../sql-common/my_user.c)
-TARGET_LINK_LIBRARIES(mysqldump mysqlclient mysys dbug yassl zlib wsock32)
+TARGET_LINK_LIBRARIES(mysqldump mysqlclient mysys dbug yassl taocrypt zlib wsock32)
ADD_EXECUTABLE(mysqlimport mysqlimport.c)
-TARGET_LINK_LIBRARIES(mysqlimport mysqlclient mysys dbug yassl zlib wsock32)
+TARGET_LINK_LIBRARIES(mysqlimport mysqlclient mysys dbug yassl taocrypt zlib wsock32)
ADD_EXECUTABLE(mysqlshow mysqlshow.c)
-TARGET_LINK_LIBRARIES(mysqlshow mysqlclient mysys dbug yassl zlib wsock32)
+TARGET_LINK_LIBRARIES(mysqlshow mysqlclient mysys dbug yassl taocrypt zlib wsock32)
ADD_EXECUTABLE(mysqlbinlog mysqlbinlog.cc ../mysys/mf_tempdir.c ../mysys/my_new.cc
../mysys/my_bit.c ../mysys/my_bitmap.c ../mysys/my_vle.c
../mysys/base64.c)
-TARGET_LINK_LIBRARIES(mysqlbinlog mysqlclient dbug yassl zlib wsock32)
+TARGET_LINK_LIBRARIES(mysqlbinlog mysqlclient dbug yassl taocrypt zlib wsock32)
ADD_EXECUTABLE(mysqladmin mysqladmin.cc)
-TARGET_LINK_LIBRARIES(mysqladmin mysqlclient mysys dbug yassl zlib wsock32)
+TARGET_LINK_LIBRARIES(mysqladmin mysqlclient mysys dbug yassl taocrypt zlib wsock32)
ADD_EXECUTABLE(mysqlslap mysqlslap.c)
-TARGET_LINK_LIBRARIES(mysqlslap mysqlclient mysys zlib wsock32 dbug)
+TARGET_LINK_LIBRARIES(mysqlslap mysqlclient mysys yassl taocrypt zlib wsock32 dbug)
diff --git a/win/cmakefiles/base b/cmakelists.txt
similarity index 100%
rename from win/cmakefiles/base
rename to cmakelists.txt
diff --git a/win/cmakefiles/dbug b/dbug/cmakelists.txt
similarity index 100%
rename from win/cmakefiles/dbug
rename to dbug/cmakelists.txt
diff --git a/extra/cmakelists.txt b/extra/cmakelists.txt
new file mode 100644
index 00000000000..50e0f04eb14
--- /dev/null
+++ b/extra/cmakelists.txt
@@ -0,0 +1,32 @@
+SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
+SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
+
+ADD_EXECUTABLE(comp_err comp_err.c)
+TARGET_LINK_LIBRARIES(comp_err dbug mysys strings wsock32)
+
+GET_TARGET_PROPERTY(COMP_ERR_EXE comp_err LOCATION)
+
+ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_SOURCE_DIR}/include/mysqld_error.h
+ COMMAND ${COMP_ERR_EXE}
+ --charset=${PROJECT_SOURCE_DIR}/sql/share/charsets
+ --out-dir=${PROJECT_SOURCE_DIR}/sql/share/
+ --header_file=${PROJECT_SOURCE_DIR}/include/mysqld_error.h
+ --name_file=${PROJECT_SOURCE_DIR}/include/mysqld_ername.h
+ --state_file=${PROJECT_SOURCE_DIR}/include/sql_state.h
+ --in_file=${PROJECT_SOURCE_DIR}/sql/share/errmsg.txt
+ DEPENDS comp_err ${PROJECT_SOURCE_DIR}/sql/share/errmsg.txt)
+
+ADD_CUSTOM_TARGET(GenError
+ ALL
+ DEPENDS ${PROJECT_SOURCE_DIR}/include/mysqld_error.h)
+
+ADD_EXECUTABLE(my_print_defaults my_print_defaults.c)
+TARGET_LINK_LIBRARIES(my_print_defaults strings mysys dbug taocrypt odbc32 odbccp32 wsock32)
+
+ADD_EXECUTABLE(perror perror.c)
+TARGET_LINK_LIBRARIES(perror strings mysys dbug wsock32)
+
+ADD_EXECUTABLE(replace replace.c)
+TARGET_LINK_LIBRARIES(replace strings mysys dbug wsock32)
diff --git a/win/cmakefiles/yassl b/extra/yassl/cmakelists.txt
similarity index 100%
rename from win/cmakefiles/yassl
rename to extra/yassl/cmakelists.txt
diff --git a/win/cmakefiles/taocrypt b/extra/yassl/taocrypt/cmakelists.txt
similarity index 100%
rename from win/cmakefiles/taocrypt
rename to extra/yassl/taocrypt/cmakelists.txt
diff --git a/include/config-win.h b/include/config-win.h
index fb7aeb82e83..a7bce21b3a1 100644
--- a/include/config-win.h
+++ b/include/config-win.h
@@ -429,8 +429,8 @@ inline double ulonglong2double(ulonglong value)
#define HAVE_RTREE_KEYS 1
#define HAVE_ROW_BASED_REPLICATION 1
-/* #undef HAVE_OPENSSL */
-/* #undef HAVE_YASSL */
+#define HAVE_OPENSSL 1
+#define HAVE_YASSL 1
/* Define charsets you want */
/* #undef HAVE_CHARSET_armscii8 */
diff --git a/win/cmakefiles/libmysql b/libmysql/cmakelists.txt
similarity index 98%
rename from win/cmakefiles/libmysql
rename to libmysql/cmakelists.txt
index cb3453fc222..006eac2fbb9 100644
--- a/win/cmakefiles/libmysql
+++ b/libmysql/cmakelists.txt
@@ -45,7 +45,7 @@ ADD_LIBRARY(libmysql MODULE dll.c libmysql.def
../strings/strtoll.c ../strings/strtoull.c ../strings/strxmov.c ../strings/strxnmov.c
../mysys/thr_mutex.c ../mysys/typelib.c ../vio/vio.c ../vio/viosocket.c
../vio/viossl.c ../vio/viosslfactories.c ../strings/xml.c)
-ADD_DEPENDENCIES(libmysql dbug vio mysys strings GenError zlib)
+ADD_DEPENDENCIES(libmysql dbug vio mysys strings GenError zlib yassl taocrypt)
TARGET_LINK_LIBRARIES(libmysql mysys strings wsock32)
# ToDo: We should move the mytest.c program out in libmysql/
diff --git a/mysql-test/lib/mtr_timer.pl b/mysql-test/lib/mtr_timer.pl
index 709cebd6407..a85ab8c6122 100644
--- a/mysql-test/lib/mtr_timer.pl
+++ b/mysql-test/lib/mtr_timer.pl
@@ -78,6 +78,12 @@ sub mtr_timer_start($$$) {
{
# Child, redirect output and exec
# FIXME do we need to redirect streams?
+
+ # Don't do the ^C cleanup in the timeout child processes!
+ # There is actually a race here, if we get ^C after fork(), but before
+ # clearing the signal handler.
+ $SIG{INT}= 'DEFAULT';
+
$0= "mtr_timer(timers,$name,$duration)";
sleep($duration);
exit(0);
diff --git a/mysql-test/r/events.result b/mysql-test/r/events.result
index ecaf1ec252e..3da724448bf 100644
--- a/mysql-test/r/events.result
+++ b/mysql-test/r/events.result
@@ -116,80 +116,80 @@ set names utf8;
CREATE EVENT root6 ON SCHEDULE EVERY '10:20' MINUTE_SECOND ON COMPLETION PRESERVE ENABLE COMMENT 'some comment' DO select 1;
SHOW CREATE EVENT root6;
Event sql_mode Create Event
-root6 CREATE EVENT `events_test`.`root6` ON SCHEDULE EVERY '10:20' MINUTE_SECOND ON COMPLETION PRESERVE ENABLE COMMENT 'some comment' DO select 1
+root6 CREATE EVENT `root6` ON SCHEDULE EVERY '10:20' MINUTE_SECOND ON COMPLETION PRESERVE ENABLE COMMENT 'some comment' DO select 1
create event root7 on schedule every 2 year do select 1;
SHOW CREATE EVENT root7;
Event sql_mode Create Event
-root7 CREATE EVENT `events_test`.`root7` ON SCHEDULE EVERY 2 YEAR ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root7 CREATE EVENT `root7` ON SCHEDULE EVERY 2 YEAR ON COMPLETION NOT PRESERVE ENABLE DO select 1
create event root8 on schedule every '2:5' year_month do select 1;
SHOW CREATE EVENT root8;
Event sql_mode Create Event
-root8 CREATE EVENT `events_test`.`root8` ON SCHEDULE EVERY '2-5' YEAR_MONTH ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root8 CREATE EVENT `root8` ON SCHEDULE EVERY '2-5' YEAR_MONTH ON COMPLETION NOT PRESERVE ENABLE DO select 1
create event root8_1 on schedule every '2:15' year_month do select 1;
SHOW CREATE EVENT root8_1;
Event sql_mode Create Event
-root8_1 CREATE EVENT `events_test`.`root8_1` ON SCHEDULE EVERY '3-3' YEAR_MONTH ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root8_1 CREATE EVENT `root8_1` ON SCHEDULE EVERY '3-3' YEAR_MONTH ON COMPLETION NOT PRESERVE ENABLE DO select 1
create event root9 on schedule every 2 week ON COMPLETION PRESERVE DISABLE COMMENT 'коментар на кирилица' do select 1;
SHOW CREATE EVENT root9;
Event sql_mode Create Event
-root9 CREATE EVENT `events_test`.`root9` ON SCHEDULE EVERY 2 WEEK ON COMPLETION PRESERVE DISABLE COMMENT 'коментар на кирилица' DO select 1
+root9 CREATE EVENT `root9` ON SCHEDULE EVERY 2 WEEK ON COMPLETION PRESERVE DISABLE COMMENT 'коментар на кирилица' DO select 1
create event root10 on schedule every '20:5' day_hour do select 1;
SHOW CREATE EVENT root10;
Event sql_mode Create Event
-root10 CREATE EVENT `events_test`.`root10` ON SCHEDULE EVERY '20 5' DAY_HOUR ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root10 CREATE EVENT `root10` ON SCHEDULE EVERY '20 5' DAY_HOUR ON COMPLETION NOT PRESERVE ENABLE DO select 1
create event root11 on schedule every '20:25' day_hour do select 1;
SHOW CREATE EVENT root11;
Event sql_mode Create Event
-root11 CREATE EVENT `events_test`.`root11` ON SCHEDULE EVERY '21 1' DAY_HOUR ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root11 CREATE EVENT `root11` ON SCHEDULE EVERY '21 1' DAY_HOUR ON COMPLETION NOT PRESERVE ENABLE DO select 1
create event root12 on schedule every '20:25' hour_minute do select 1;
SHOW CREATE EVENT root12;
Event sql_mode Create Event
-root12 CREATE EVENT `events_test`.`root12` ON SCHEDULE EVERY '20:25' HOUR_MINUTE ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root12 CREATE EVENT `root12` ON SCHEDULE EVERY '20:25' HOUR_MINUTE ON COMPLETION NOT PRESERVE ENABLE DO select 1
create event root13 on schedule every '25:25' hour_minute do select 1;
SHOW CREATE EVENT root13;
Event sql_mode Create Event
-root13 CREATE EVENT `events_test`.`root13` ON SCHEDULE EVERY '25:25' HOUR_MINUTE ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root13 CREATE EVENT `root13` ON SCHEDULE EVERY '25:25' HOUR_MINUTE ON COMPLETION NOT PRESERVE ENABLE DO select 1
create event root13_1 on schedule every '11:65' hour_minute do select 1;
SHOW CREATE EVENT root13_1;
Event sql_mode Create Event
-root13_1 CREATE EVENT `events_test`.`root13_1` ON SCHEDULE EVERY '12:5' HOUR_MINUTE ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root13_1 CREATE EVENT `root13_1` ON SCHEDULE EVERY '12:5' HOUR_MINUTE ON COMPLETION NOT PRESERVE ENABLE DO select 1
create event root14 on schedule every '35:35' minute_second do select 1;
SHOW CREATE EVENT root14;
Event sql_mode Create Event
-root14 CREATE EVENT `events_test`.`root14` ON SCHEDULE EVERY '35:35' MINUTE_SECOND ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root14 CREATE EVENT `root14` ON SCHEDULE EVERY '35:35' MINUTE_SECOND ON COMPLETION NOT PRESERVE ENABLE DO select 1
create event root15 on schedule every '35:66' minute_second do select 1;
SHOW CREATE EVENT root15;
Event sql_mode Create Event
-root15 CREATE EVENT `events_test`.`root15` ON SCHEDULE EVERY '36:6' MINUTE_SECOND ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root15 CREATE EVENT `root15` ON SCHEDULE EVERY '36:6' MINUTE_SECOND ON COMPLETION NOT PRESERVE ENABLE DO select 1
create event root16 on schedule every '35:56' day_minute do select 1;
SHOW CREATE EVENT root16;
Event sql_mode Create Event
-root16 CREATE EVENT `events_test`.`root16` ON SCHEDULE EVERY '1 11:56' DAY_MINUTE ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root16 CREATE EVENT `root16` ON SCHEDULE EVERY '1 11:56' DAY_MINUTE ON COMPLETION NOT PRESERVE ENABLE DO select 1
create event root17 on schedule every '35:12:45' day_minute do select 1;
SHOW CREATE EVENT root17;
Event sql_mode Create Event
-root17 CREATE EVENT `events_test`.`root17` ON SCHEDULE EVERY '35 12:45' DAY_MINUTE ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root17 CREATE EVENT `root17` ON SCHEDULE EVERY '35 12:45' DAY_MINUTE ON COMPLETION NOT PRESERVE ENABLE DO select 1
create event root17_1 on schedule every '35:25:65' day_minute do select 1;
SHOW CREATE EVENT root17_1;
Event sql_mode Create Event
-root17_1 CREATE EVENT `events_test`.`root17_1` ON SCHEDULE EVERY '36 2:5' DAY_MINUTE ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root17_1 CREATE EVENT `root17_1` ON SCHEDULE EVERY '36 2:5' DAY_MINUTE ON COMPLETION NOT PRESERVE ENABLE DO select 1
create event root18 on schedule every '35:12:45' hour_second do select 1;
SHOW CREATE EVENT root18;
Event sql_mode Create Event
-root18 CREATE EVENT `events_test`.`root18` ON SCHEDULE EVERY '35:12:45' HOUR_SECOND ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root18 CREATE EVENT `root18` ON SCHEDULE EVERY '35:12:45' HOUR_SECOND ON COMPLETION NOT PRESERVE ENABLE DO select 1
create event root19 on schedule every '15:59:85' hour_second do select 1;
SHOW CREATE EVENT root19;
Event sql_mode Create Event
-root19 CREATE EVENT `events_test`.`root19` ON SCHEDULE EVERY '16:0:25' HOUR_SECOND ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root19 CREATE EVENT `root19` ON SCHEDULE EVERY '16:0:25' HOUR_SECOND ON COMPLETION NOT PRESERVE ENABLE DO select 1
create event root20 on schedule every '50:20:12:45' day_second do select 1;
SHOW CREATE EVENT root20;
Event sql_mode Create Event
-root20 CREATE EVENT `events_test`.`root20` ON SCHEDULE EVERY '50 20:12:45' DAY_SECOND ON COMPLETION NOT PRESERVE ENABLE DO select 1
+root20 CREATE EVENT `root20` ON SCHEDULE EVERY '50 20:12:45' DAY_SECOND ON COMPLETION NOT PRESERVE ENABLE DO select 1
set names cp1251;
create event ðóóò21 on schedule every '50:23:59:95' day_second COMMENT 'òîâà å 1251 êîìåíòàð' do select 1;
SHOW CREATE EVENT ðóóò21;
Event sql_mode Create Event
-ðóóò21 CREATE EVENT `events_test`.`ðóóò21` ON SCHEDULE EVERY '51 0:0:35' DAY_SECOND ON COMPLETION NOT PRESERVE ENABLE COMMENT 'òîâà å 1251 êîìåíòàð' DO select 1
+ðóóò21 CREATE EVENT `ðóóò21` ON SCHEDULE EVERY '51 0:0:35' DAY_SECOND ON COMPLETION NOT PRESERVE ENABLE COMMENT 'òîâà å 1251 êîìåíòàð' DO select 1
insert into mysql.event (db, name, body, definer, interval_value, interval_field) values (database(), "root22", "select 1", user(), 100, "SECOND_MICROSECOND");
show create event root22;
ERROR 42000: This version of MySQL doesn't yet support 'MICROSECOND'
@@ -260,8 +260,10 @@ ALTER TABLE mysql.event MODIFY db char(64) character set utf8 collate utf8_bin d
"This should work"
SHOW EVENTS;
Db Name Definer Type Execute at Interval value Interval field Starts Ends Status
-events_test intact_check root@localhost RECURRING NULL 10 HOUR # # ENABLED
+events_test intact_check root@localhost RECURRING NULL 10 HOUR # # ENABLED
ALTER TABLE mysql.event MODIFY db char(64) character set cp1251 default '';
+Warnings:
+Warning 1265 Data truncated for column 'db' at row 1
SELECT event_name FROM INFORMATION_SCHEMA.EVENTS;
ERROR HY000: Cannot load from mysql.event. Table probably corrupted. See error log.
ALTER TABLE mysql.event MODIFY db varchar(64) character set utf8 collate utf8_bin default '';
@@ -465,4 +467,10 @@ select event_schema, event_name, definer, event_body from information_schema.eve
event_schema event_name definer event_body
events_test white_space root@localhost select 3
drop event white_space;
+create event e1 on schedule every 1 year do set @a = 5;
+create table t1 (s1 int);
+create trigger t1_ai after insert on t1 for each row show create event e1;
+ERROR 0A000: Not allowed to return a result set from a trigger
+drop table t1;
+drop event e1;
drop database events_test;
diff --git a/mysql-test/r/events_bugs.result b/mysql-test/r/events_bugs.result
index 0b554f97b9a..53f7cdfd0ee 100644
--- a/mysql-test/r/events_bugs.result
+++ b/mysql-test/r/events_bugs.result
@@ -1,5 +1,25 @@
create database if not exists events_test;
use events_test;
+set @a=3;
+CREATE PROCEDURE p_16 () CREATE EVENT e_16 ON SCHEDULE EVERY @a SECOND DO SET @a=5;
+call p_16();
+"Here we used to crash!"
+call p_16();
+ERROR HY000: Event 'e_16' already exists
+call p_16();
+ERROR HY000: Event 'e_16' already exists
+DROP EVENT e_16;
+CALL p_16();
+CALL p_16();
+ERROR HY000: Event 'e_16' already exists
+DROP PROCEDURE p_16;
+DROP EVENT e_16;
+create event e_55 on schedule at 99990101000000 do drop table t;
+ERROR HY000: Incorrect AT value: '99990101000000'
+create event e_55 on schedule every 10 hour starts 99990101000000 do drop table t;
+ERROR HY000: Incorrect STARTS value: '99990101000000'
+create event e_55 on schedule every 10 minute ends 99990101000000 do drop table t;
+ERROR HY000: ENDS is either invalid or before STARTS
set global event_scheduler=0;
"Wait a bit to settle down"
delete from mysql.event;
diff --git a/mysql-test/r/partition.result b/mysql-test/r/partition.result
index feed5483827..f31692bea0a 100644
--- a/mysql-test/r/partition.result
+++ b/mysql-test/r/partition.result
@@ -546,4 +546,15 @@ t1 CREATE TABLE `t1` (
`b` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 PARTITION BY LIST (a) (PARTITION p1 VALUES IN (1) ENGINE = MyISAM, PARTITION p2 VALUES IN (2) ENGINE = MyISAM)
drop table t1;
+create table t1 (a int unsigned not null auto_increment primary key)
+partition by key(a);
+alter table t1 rename t2, add c char(10), comment "no comment";
+show create table t2;
+Table Create Table
+t2 CREATE TABLE `t2` (
+ `a` int(10) unsigned NOT NULL AUTO_INCREMENT,
+ `c` char(10) DEFAULT NULL,
+ PRIMARY KEY (`a`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='no comment' PARTITION BY KEY (a)
+drop table t2;
End of 5.1 tests
diff --git a/mysql-test/r/sp-error.result b/mysql-test/r/sp-error.result
index 5ab8779782a..40fe0b09814 100644
--- a/mysql-test/r/sp-error.result
+++ b/mysql-test/r/sp-error.result
@@ -1166,3 +1166,10 @@ drop procedure bug15091;
drop function if exists bug16896;
create aggregate function bug16896() returns int return 1;
ERROR 42000: AGGREGATE is not supported for stored functions
+drop function if exists bug16164;
+create function bug16164() returns int
+begin
+show authors;
+return 42;
+end|
+ERROR 0A000: Not allowed to return a result set from a function
diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result
index 7def4cdcf9d..34f5e529260 100644
--- a/mysql-test/r/subselect.result
+++ b/mysql-test/r/subselect.result
@@ -3156,3 +3156,10 @@ id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 9 Using where
2 DEPENDENT SUBQUERY t1 index NULL a 8 NULL 9 Using filesort
DROP TABLE t1;
+create table t1( f1 int,f2 int);
+insert into t1 values (1,1),(2,2);
+select tt.t from (select 'crash1' as t, f2 from t1) as tt left join t1 on tt.t = 'crash2' and tt.f2 = t1.f2 where tt.t = 'crash1';
+t
+crash1
+crash1
+drop table t1;
diff --git a/mysql-test/r/xml.result b/mysql-test/r/xml.result
index bb7a158593c..d213ef98885 100644
--- a/mysql-test/r/xml.result
+++ b/mysql-test/r/xml.result
@@ -609,3 +609,7 @@ extractvalue('Jack','/a[contains(../a,"j")]' collate latin1_bin)
select extractvalue('Jack' collate latin1_bin,'/a[contains(../a,"j")]');
extractvalue('Jack' collate latin1_bin,'/a[contains(../a,"j")]')
+select extractValue('1','position()');
+ERROR HY000: XPATH syntax error: ''
+select extractValue('1','last()');
+ERROR HY000: XPATH syntax error: ''
diff --git a/mysql-test/t/disabled.def b/mysql-test/t/disabled.def
index 69f916b92d5..2c6973b4558 100644
--- a/mysql-test/t/disabled.def
+++ b/mysql-test/t/disabled.def
@@ -23,21 +23,20 @@ partition_03ndb : Bug#16385
ps_7ndb : dbug assert in RBR mode when executing test suite
#rpl_bit_npk : Bug#13418
rpl_ddl : Bug#15963 SBR does not show "Definer" correctly
-rpl_ndb_2innodb : Bugs#17400: delete & update of rows in table without pk fails
-rpl_ndb_2myisam : Bugs#17400: delete & update of rows in table without pk fails
+rpl_ndb_2innodb : Assert failure in ha_partition::extra()
+rpl_ndb_2myisam : Assert failure in ha_partition::extra()
rpl_ndb_auto_inc : Bug#17086
#rpl_ndb_basic : Bug#16228 [IN REVIEW]
rpl_ndb_blob : interferes with following tests, causing hang
rpl_ndb_blob2 : interferes with following tests, causing hang
-rpl_ndb_ddl : Bug#17400: delete & update of rows in table without pk fails
-rpl_ndb_delete_nowhere : Bug#17400: delete & update of rows in table without pk fails
-rpl_ndb_innodb2ndb : Bugs#17400: delete & update of rows in table without pk fails
+rpl_ndb_ddl : master hangs
+#rpl_ndb_delete_nowhere : Bug#17400: delete & update of rows in table without pk fails
+rpl_ndb_innodb2ndb : Bug#18261: Cluster Replication: tests rpl_ndb_xxx2ndb fails
rpl_ndb_insert_ignore : Bugs: #17431: INSERT IGNORE INTO returns failed: 1296
-rpl_ndb_myisam2ndb : Bugs#17400: delete & update of rows in table without pk fails
+rpl_ndb_myisam2ndb : Bug#18261: Cluster Replication: tests rpl_ndb_xxx2ndb fails
#rpl_ndb_log : result not deterministic
rpl_ndb_relay_space : Bug#16993
-rpl_ndb_multi_update2 : BUG#17738 In progress
-rpl_ndb_multi_update3 : Bug#17400: delete & update of rows in table without pk fails
+#rpl_ndb_multi_update3 : Bug#17400: delete & update of rows in table without pk fails
rpl_ndb_sp007 : Bug #17290
rpl_row_inexist_tbl : Disabled since patch makes this test wait forever
rpl_sp : Bug#16456
diff --git a/mysql-test/t/events.test b/mysql-test/t/events.test
index a261b3c0c11..6036dcb3000 100644
--- a/mysql-test/t/events.test
+++ b/mysql-test/t/events.test
@@ -190,10 +190,10 @@ CREATE EVENT intact_check ON SCHEDULE EVERY 10 HOUR DO SELECT "nothing";
--replace_column 8 # 9 #
SHOW EVENTS;
ALTER TABLE mysql.event ADD dummy INT FIRST;
---error 1525
+--error ER_COL_COUNT_DOESNT_MATCH_CORRUPTED
SHOW EVENTS;
ALTER TABLE mysql.event DROP dummy, ADD dummy2 VARCHAR(64) FIRST;
---error 1525
+--error ER_COL_COUNT_DOESNT_MATCH_CORRUPTED
SHOW EVENTS;
ALTER TABLE mysql.event DROP dummy2;
--replace_column 8 # 9 #
@@ -206,7 +206,7 @@ ALTER TABLE mysql.event MODIFY db char(20) character set utf8 collate utf8_bin d
#wait a bit or we won't see the difference because of seconds resolution
--sleep 1
SHOW CREATE TABLE mysql.event;
---error 1526
+--error ER_CANNOT_LOAD_FROM_TABLE
SELECT event_name FROM INFORMATION_SCHEMA.EVENTS;
--sleep 1
ALTER TABLE mysql.event MODIFY db char(64) character set utf8 collate utf8_bin default '';
@@ -216,16 +216,16 @@ ALTER TABLE mysql.event MODIFY db char(64) character set utf8 collate utf8_bin d
SHOW EVENTS;
--sleep 1
ALTER TABLE mysql.event MODIFY db char(64) character set cp1251 default '';
---error 1526
+--error ER_CANNOT_LOAD_FROM_TABLE
SELECT event_name FROM INFORMATION_SCHEMA.EVENTS;
--sleep 1
ALTER TABLE mysql.event MODIFY db varchar(64) character set utf8 collate utf8_bin default '';
---error 1526
+--error ER_CANNOT_LOAD_FROM_TABLE
SELECT event_name FROM INFORMATION_SCHEMA.EVENTS;
--sleep 1
ALTER TABLE mysql.event DROP comment, DROP starts;
--sleep 1
---error 1525
+--error ER_COL_COUNT_DOESNT_MATCH_CORRUPTED
SELECT event_name FROM INFORMATION_SCHEMA.EVENTS;
DROP TABLE mysql.event;
CREATE TABLE mysql.event like event_like;
@@ -317,9 +317,9 @@ drop event one_event;
create event e_26 on schedule at '2017-01-01 00:00:00' disable do set @a = 5;
select db, name, body, definer, convert_tz(execute_at, 'UTC', 'SYSTEM'), on_completion from mysql.event;
drop event e_26;
---error 1503
+--error 1504
create event e_26 on schedule at NULL disabled do set @a = 5;
---error 1503
+--error 1504
create event e_26 on schedule at 'definitely not a datetime' disabled do set @a = 5;
set names utf8;
@@ -427,6 +427,16 @@ drop event white_space;
# END: BUG #17453: Creating Event crash the server
#
+#
+# Bug#17403 "Events: packets out of order with show create event"
+#
+create event e1 on schedule every 1 year do set @a = 5;
+create table t1 (s1 int);
+--error ER_SP_NO_RETSET
+create trigger t1_ai after insert on t1 for each row show create event e1;
+drop table t1;
+drop event e1;
+
##set global event_scheduler=1;
##select get_lock("test_lock3", 20);
##create event закачка on schedule every 10 hour do select get_lock("test_lock3", 20);
diff --git a/mysql-test/t/events_bugs.test b/mysql-test/t/events_bugs.test
index 2d4374dcb41..384b648761a 100644
--- a/mysql-test/t/events_bugs.test
+++ b/mysql-test/t/events_bugs.test
@@ -1,5 +1,39 @@
create database if not exists events_test;
use events_test;
+#
+# START - BUG#16408: Events: crash for an event in a procedure
+#
+set @a=3;
+CREATE PROCEDURE p_16 () CREATE EVENT e_16 ON SCHEDULE EVERY @a SECOND DO SET @a=5;
+call p_16();
+--echo "Here we used to crash!"
+--error 1516
+call p_16();
+--error 1516
+call p_16();
+DROP EVENT e_16;
+CALL p_16();
+--error 1516
+CALL p_16();
+DROP PROCEDURE p_16;
+DROP EVENT e_16;
+#
+# END - BUG#16408: Events: crash for an event in a procedure
+#
+
+#
+# Start - 16396: Events: Distant-future dates become past dates
+#
+--error 1504
+create event e_55 on schedule at 99990101000000 do drop table t;
+--error 1504
+create event e_55 on schedule every 10 hour starts 99990101000000 do drop table t;
+--error ER_EVENT_ENDS_BEFORE_STARTS
+create event e_55 on schedule every 10 minute ends 99990101000000 do drop table t;
+#
+# End - 16396: Events: Distant-future dates become past dates
+#
+
#
# Start - 16407: Events: Changes in sql_mode won't be taken into account
#
diff --git a/mysql-test/t/partition.test b/mysql-test/t/partition.test
index bac8b6573e6..73949733426 100644
--- a/mysql-test/t/partition.test
+++ b/mysql-test/t/partition.test
@@ -697,4 +697,21 @@ alter table t1 add primary key (b);
show create table t1;
drop table t1;
+############################################
+#
+# Author: Mikael Ronstrom
+# Date: 2006-03-01
+# Purpose
+# Bug 17772: Crash at ALTER TABLE with rename
+# and add column + comment on
+# partitioned table
+#
+############################################
+create table t1 (a int unsigned not null auto_increment primary key)
+partition by key(a);
+alter table t1 rename t2, add c char(10), comment "no comment";
+show create table t2;
+
+drop table t2;
+
--echo End of 5.1 tests
diff --git a/mysql-test/t/rpl_ndb_multi_update2.test b/mysql-test/t/rpl_ndb_multi_update2.test
index d337ddfe88a..df4f0eec39d 100644
--- a/mysql-test/t/rpl_ndb_multi_update2.test
+++ b/mysql-test/t/rpl_ndb_multi_update2.test
@@ -3,5 +3,10 @@
# to reuse test code between engine runs #
############################################################
-- source include/have_ndb.inc
+
+# Run this only for row based replication, as replication of
+# auto_increment values are not supported with NDB as storage engine
+-- source include/have_binlog_format_row.inc
+
let $engine_type=NDB;
--source extra/rpl_tests/rpl_multi_update2.test
diff --git a/mysql-test/t/sp-error.test b/mysql-test/t/sp-error.test
index 4b307de2ad0..da40cdf643a 100644
--- a/mysql-test/t/sp-error.test
+++ b/mysql-test/t/sp-error.test
@@ -1691,6 +1691,24 @@ drop function if exists bug16896;
--error ER_SP_NO_AGGREGATE
create aggregate function bug16896() returns int return 1;
+#
+# End of 5.0 tests
+#
+
+#
+# Bug#16164 "Easter egg": check that SHOW AUTHORS is disabled in
+# stored functions/triggers
+#
+--disable_warnings
+drop function if exists bug16164;
+--enable_warnings
+delimiter |;
+--error ER_SP_NO_RETSET
+create function bug16164() returns int
+begin
+ show authors;
+ return 42;
+end|
#
# BUG#NNNN: New bug synopsis
diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test
index 733403f482e..368020dd721 100644
--- a/mysql-test/t/subselect.test
+++ b/mysql-test/t/subselect.test
@@ -2067,3 +2067,10 @@ SELECT * FROM t1 WHERE (a,b) = ANY (SELECT a, max(b) FROM t1 GROUP BY a);
DROP TABLE t1;
+#
+# Bug#17366: Unchecked Item_int results in server crash
+#
+create table t1( f1 int,f2 int);
+insert into t1 values (1,1),(2,2);
+select tt.t from (select 'crash1' as t, f2 from t1) as tt left join t1 on tt.t = 'crash2' and tt.f2 = t1.f2 where tt.t = 'crash1';
+drop table t1;
diff --git a/mysql-test/t/xml.test b/mysql-test/t/xml.test
index 831867937e4..ae1c9cf3b6b 100644
--- a/mysql-test/t/xml.test
+++ b/mysql-test/t/xml.test
@@ -277,3 +277,12 @@ select extractvalue('Jack','/a[contains(../a,"J")]');
select extractvalue('Jack','/a[contains(../a,"j")]');
select extractvalue('Jack','/a[contains(../a,"j")]' collate latin1_bin);
select extractvalue('Jack' collate latin1_bin,'/a[contains(../a,"j")]');
+
+#
+# Bug #18171 XML: ExtractValue: the XPath position()
+# function crashes the server!
+#
+--error 1105
+select extractValue('1','position()');
+--error 1105
+select extractValue('1','last()');
diff --git a/win/cmakefiles/mysys b/mysys/cmakelists.txt
similarity index 100%
rename from win/cmakefiles/mysys
rename to mysys/cmakelists.txt
diff --git a/win/cmakefiles/regex b/regex/cmakelists.txt
similarity index 100%
rename from win/cmakefiles/regex
rename to regex/cmakelists.txt
diff --git a/win/cmakefiles/im b/server-tools/instance-manager/cmakelists.txt
similarity index 93%
rename from win/cmakefiles/im
rename to server-tools/instance-manager/cmakelists.txt
index 32f243b43d9..c20b9c7f9df 100644
--- a/win/cmakefiles/im
+++ b/server-tools/instance-manager/cmakelists.txt
@@ -2,7 +2,8 @@ SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
ADD_DEFINITIONS(-DMYSQL_SERVER -DMYSQL_INSTANCE_MANAGER)
-INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/sql)
+INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/sql
+ ${PROJECT_SOURCE_DIR}/extra/yassl/include)
ADD_EXECUTABLE(mysqlmanager buffer.cc command.cc commands.cc guardian.cc instance.cc instance_map.cc
instance_options.cc listener.cc log.cc manager.cc messages.cc mysql_connection.cc
diff --git a/win/cmakefiles/sql b/sql/cmakelists.txt
similarity index 96%
rename from win/cmakefiles/sql
rename to sql/cmakelists.txt
index 72a71cbf14f..2099ef94996 100644
--- a/win/cmakefiles/sql
+++ b/sql/cmakelists.txt
@@ -38,7 +38,7 @@ ADD_EXECUTABLE(mysqld ../sql-common/client.c derror.cc des_key_file.cc discover.
sql_lex.cc sql_list.cc sql_load.cc sql_manager.cc sql_map.cc sql_parse.cc sql_partition.cc
sql_plugin.cc sql_prepare.cc sql_rename.cc sql_repl.cc sql_select.cc sql_show.cc
sql_state.c sql_string.cc sql_table.cc sql_test.cc sql_trigger.cc sql_udf.cc sql_union.cc
- sql_update.cc sql_view.cc sql_yacc.h sql_yacc.cc strfunc.cc table.cc thr_malloc.cc time.cc tztime.cc
+ sql_update.cc sql_view.cc strfunc.cc table.cc thr_malloc.cc time.cc tztime.cc
uniques.cc unireg.cc item_xmlfunc.cc rpl_tblmap.cc sql_binlog.cc event_executor.cc
event_timed.cc sql_tablespace.cc event.cc ../sql-common/my_user.c partition_info.cc
${PROJECT_SOURCE_DIR}/sql/sql_yacc.cc
@@ -56,7 +56,7 @@ ADD_DEPENDENCIES(mysqld GenError)
ADD_CUSTOM_COMMAND(
SOURCE ${PROJECT_SOURCE_DIR}/sql/sql_yacc.yy
OUTPUT ${PROJECT_SOURCE_DIR}/sql/sql_yacc.cc
- COMMAND bison.exe ARGS --defines=sql_yacc.h --output=sql_yacc.cc sql_yacc.yy
+ COMMAND bison.exe ARGS -y -p MYSQL --defines=sql_yacc.h --output=sql_yacc.cc sql_yacc.yy
DEPENDS ${PROJECT_SOURCE_DIR}/sql/sql_yacc.yy)
ADD_CUSTOM_COMMAND(
diff --git a/sql/event.h b/sql/event.h
index d070f93c575..27de8b46e32 100644
--- a/sql/event.h
+++ b/sql/event.h
@@ -40,7 +40,6 @@
#define EVENT_EXEC_NO_MORE (1L << 0)
#define EVENT_NOT_USED (1L << 1)
-
extern ulong opt_event_executor;
enum enum_event_on_completion
@@ -122,6 +121,39 @@ public:
bool free_sphead_on_delete;
uint flags;//all kind of purposes
+ static void *operator new(size_t size)
+ {
+ void *p;
+ DBUG_ENTER("Event_timed::new(size)");
+ p= my_malloc(size, MYF(0));
+ DBUG_PRINT("info", ("alloc_ptr=0x%lx", p));
+ DBUG_RETURN(p);
+ }
+
+ static void *operator new(size_t size, MEM_ROOT *mem_root)
+ { return (void*) alloc_root(mem_root, (uint) size); }
+
+ static void operator delete(void *ptr, size_t size)
+ {
+ DBUG_ENTER("Event_timed::delete(ptr,size)");
+ DBUG_PRINT("enter", ("free_ptr=0x%lx", ptr));
+ TRASH(ptr, size);
+ my_free((gptr) ptr, MYF(0));
+ DBUG_VOID_RETURN;
+ }
+
+ static void operator delete(void *ptr, MEM_ROOT *mem_root)
+ {
+ /*
+ Don't free the memory it will be done by the mem_root but
+ we need to call the destructor because we free other resources
+ which are not allocated on the root but on the heap, or we
+ deinit mutexes.
+ */
+ DBUG_ASSERT(0);
+ }
+
+
Event_timed():in_spawned_thread(0),locked_by_thread_id(0),
running(0), status_changed(false),
last_executed_changed(false), expression(0), created(0),
@@ -136,15 +168,21 @@ public:
}
~Event_timed()
- {
- pthread_mutex_destroy(&this->LOCK_running);
- if (free_sphead_on_delete)
- free_sp();
- }
+ {
+ deinit_mutexes();
+ if (free_sphead_on_delete)
+ free_sp();
+ }
void
init();
+
+ void
+ deinit_mutexes()
+ {
+ pthread_mutex_destroy(&this->LOCK_running);
+ }
int
init_definer(THD *thd);
diff --git a/sql/event_timed.cc b/sql/event_timed.cc
index 8348a75914e..eb97d6c87d6 100644
--- a/sql/event_timed.cc
+++ b/sql/event_timed.cc
@@ -151,6 +151,7 @@ Event_timed::init_execute_at(THD *thd, Item *expr)
{
my_bool not_used;
TIME ltime;
+ my_time_t t;
TIME time_tmp;
DBUG_ENTER("Event_timed::init_execute_at");
@@ -174,12 +175,18 @@ Event_timed::init_execute_at(THD *thd, Item *expr)
TIME_to_ulonglong_datetime(&time_tmp))
DBUG_RETURN(EVEX_BAD_PARAMS);
-
/*
This may result in a 1970-01-01 date if ltime is > 2037-xx-xx.
CONVERT_TZ has similar problem.
+ mysql_priv.h currently lists
+ #define TIMESTAMP_MAX_YEAR 2038 (see TIME_to_timestamp())
*/
- my_tz_UTC->gmt_sec_to_TIME(<ime, TIME_to_timestamp(thd,<ime, ¬_used));
+ my_tz_UTC->gmt_sec_to_TIME(<ime,t=TIME_to_timestamp(thd,<ime,¬_used));
+ if (!t)
+ {
+ DBUG_PRINT("error", ("Execute AT after year 2037"));
+ DBUG_RETURN(ER_WRONG_VALUE);
+ }
execute_at_null= FALSE;
execute_at= ltime;
@@ -302,6 +309,7 @@ Event_timed::init_interval(THD *thd, Item *expr, interval_type new_interval)
RETURNS
0 OK
EVEX_PARSE_ERROR fix_fields failed
+ EVEX_BAD_PARAMS starts before now
*/
int
@@ -309,6 +317,7 @@ Event_timed::init_starts(THD *thd, Item *new_starts)
{
my_bool not_used;
TIME ltime, time_tmp;
+ my_time_t t;
DBUG_ENTER("Event_timed::init_starts");
@@ -329,10 +338,17 @@ Event_timed::init_starts(THD *thd, Item *new_starts)
DBUG_RETURN(EVEX_BAD_PARAMS);
/*
- This may result in a 1970-01-01 date if ltime is > 2037-xx-xx
- CONVERT_TZ has similar problem
+ This may result in a 1970-01-01 date if ltime is > 2037-xx-xx.
+ CONVERT_TZ has similar problem.
+ mysql_priv.h currently lists
+ #define TIMESTAMP_MAX_YEAR 2038 (see TIME_to_timestamp())
*/
- my_tz_UTC->gmt_sec_to_TIME(<ime, TIME_to_timestamp(thd, <ime, ¬_used));
+ my_tz_UTC->gmt_sec_to_TIME(<ime,t=TIME_to_timestamp(thd, <ime, ¬_used));
+ if (!t)
+ {
+ DBUG_PRINT("error", ("STARTS after year 2037"));
+ DBUG_RETURN(EVEX_BAD_PARAMS);
+ }
starts= ltime;
starts_null= FALSE;
@@ -359,6 +375,7 @@ Event_timed::init_starts(THD *thd, Item *new_starts)
RETURNS
0 OK
EVEX_PARSE_ERROR fix_fields failed
+ ER_WRONG_VALUE starts distant date (after year 2037)
EVEX_BAD_PARAMS ENDS before STARTS
*/
@@ -367,6 +384,7 @@ Event_timed::init_ends(THD *thd, Item *new_ends)
{
TIME ltime, ltime_now;
my_bool not_used;
+ my_time_t t;
DBUG_ENTER("Event_timed::init_ends");
@@ -378,11 +396,18 @@ Event_timed::init_ends(THD *thd, Item *new_ends)
DBUG_RETURN(EVEX_BAD_PARAMS);
/*
- This may result in a 1970-01-01 date if ltime is > 2037-xx-xx ?
- CONVERT_TZ has similar problem ?
+ This may result in a 1970-01-01 date if ltime is > 2037-xx-xx.
+ CONVERT_TZ has similar problem.
+ mysql_priv.h currently lists
+ #define TIMESTAMP_MAX_YEAR 2038 (see TIME_to_timestamp())
*/
DBUG_PRINT("info", ("get the UTC time"));
- my_tz_UTC->gmt_sec_to_TIME(<ime, TIME_to_timestamp(thd, <ime, ¬_used));
+ my_tz_UTC->gmt_sec_to_TIME(<ime,t=TIME_to_timestamp(thd, <ime, ¬_used));
+ if (!t)
+ {
+ DBUG_PRINT("error", ("ENDS after year 2037"));
+ DBUG_RETURN(EVEX_BAD_PARAMS);
+ }
/* Check whether ends is after starts */
DBUG_PRINT("info", ("ENDS after STARTS?"));
@@ -1228,12 +1253,12 @@ Event_timed::change_security_context(THD *thd, Security_context *s_ctx,
definer_host.str, dbname.str))
{
my_error(ER_NO_SUCH_USER, MYF(0), definer_user.str, definer_host.str);
- DBUG_RETURN(TRUE);
+ DBUG_RETURN(true);
}
*backup= thd->security_ctx;
thd->security_ctx= s_ctx;
#endif
- DBUG_RETURN(FALSE);
+ DBUG_RETURN(false);
}
@@ -1368,7 +1393,8 @@ Event_timed::compile(THD *thd, MEM_ROOT *mem_root)
ret= 0;
done:
lex.et->free_sphead_on_delete= false;
- delete lex.et;
+ lex.et->deinit_mutexes();
+
lex_end(&lex);
DBUG_PRINT("note", ("return old data on its place. set back NAMES"));
diff --git a/sql/item_xmlfunc.cc b/sql/item_xmlfunc.cc
index 7378be0ac4c..da39c1e4409 100644
--- a/sql/item_xmlfunc.cc
+++ b/sql/item_xmlfunc.cc
@@ -1141,13 +1141,15 @@ static Item *create_func_round(MY_XPATH *xpath, Item **args, uint nargs)
static Item *create_func_last(MY_XPATH *xpath, Item **args, uint nargs)
{
- return new Item_func_xpath_count(xpath->context, xpath->pxml);
+ return xpath->context ?
+ new Item_func_xpath_count(xpath->context, xpath->pxml) : NULL;
}
static Item *create_func_position(MY_XPATH *xpath, Item **args, uint nargs)
{
- return new Item_func_xpath_position(xpath->context, xpath->pxml);
+ return xpath->context ?
+ new Item_func_xpath_position(xpath->context, xpath->pxml) : NULL;
}
diff --git a/sql/sp_head.cc b/sql/sp_head.cc
index d97dcc390ca..ea2f67b3ba5 100644
--- a/sql/sp_head.cc
+++ b/sql/sp_head.cc
@@ -176,6 +176,7 @@ sp_get_flags_for_command(LEX *lex)
case SQLCOM_SHOW_CREATE_DB:
case SQLCOM_SHOW_CREATE_FUNC:
case SQLCOM_SHOW_CREATE_PROC:
+ case SQLCOM_SHOW_CREATE_EVENT:
case SQLCOM_SHOW_DATABASES:
case SQLCOM_SHOW_ERRORS:
case SQLCOM_SHOW_FIELDS:
@@ -200,6 +201,7 @@ sp_get_flags_for_command(LEX *lex)
case SQLCOM_SHOW_WARNS:
case SQLCOM_SHOW_PROC_CODE:
case SQLCOM_SHOW_FUNC_CODE:
+ case SQLCOM_SHOW_AUTHORS:
case SQLCOM_REPAIR:
case SQLCOM_BACKUP_TABLE:
case SQLCOM_RESTORE_TABLE:
diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc
index 34947e35b17..f4186120766 100644
--- a/sql/sql_delete.cc
+++ b/sql/sql_delete.cc
@@ -82,8 +82,9 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
table->file->info(HA_STATUS_VARIABLE | HA_STATUS_NO_LOCK);
ha_rows const maybe_deleted= table->file->records;
/*
- If all rows shall be deleted, we always log this statement-based
- (see [binlog], below), so we set this flag and test it below.
+ If all rows shall be deleted, we (almost) always log this
+ statement-based (see [binlog], below), so we set this flag and
+ test it below.
*/
ha_delete_all_rows= 1;
if (!(error=table->file->delete_all_rows()))
@@ -330,12 +331,13 @@ cleanup:
thd->clear_error();
/*
- [binlog]: If 'handler::delete_all_rows()' was called, we
- replicate statement-based; otherwise, 'ha_delete_row()' was
- used to delete specific rows which we might log row-based.
+ [binlog]: If 'handler::delete_all_rows()' was called and the
+ storage engine does not inject the rows itself, we replicate
+ statement-based; otherwise, 'ha_delete_row()' was used to
+ delete specific rows which we might log row-based.
*/
THD::enum_binlog_query_type const
- query_type(ha_delete_all_rows ?
+ query_type(ha_delete_all_rows && !table->file->is_injective() ?
THD::STMT_QUERY_TYPE :
THD::ROW_QUERY_TYPE);
int log_result= thd->binlog_query(query_type,
diff --git a/sql/sql_lex.h b/sql/sql_lex.h
index 59ebdd2a1cc..5e67b60cb85 100644
--- a/sql/sql_lex.h
+++ b/sql/sql_lex.h
@@ -53,6 +53,11 @@ class Event_timed;
/*
When a command is added here, be sure it's also added in mysqld.cc
in "struct show_var_st status_vars[]= {" ...
+
+ If the command returns a result set or is not allowed in stored
+ functions or triggers, please also make sure that
+ sp_get_flags_for_command (sp_head.cc) returns proper flags for the
+ added SQLCOM_.
*/
enum enum_sql_command {
@@ -761,6 +766,7 @@ typedef struct st_lex
const uchar *tok_start_prev, *tok_end_prev;
char *length,*dec,*change,*name;
+ Table_ident *like_name;
char *help_arg;
char *backup_dir; /* For RESTORE/BACKUP */
char* to_log; /* For PURGE MASTER LOGS TO */
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 871c8bdff9f..77dfcfe862a 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -2897,9 +2897,9 @@ mysql_execute_command(THD *thd)
else
{
/* regular create */
- if (lex->name)
+ if (lex->like_name)
res= mysql_create_like_table(thd, create_table, &lex->create_info,
- (Table_ident *)lex->name);
+ lex->like_name);
else
{
res= mysql_create_table(thd, create_table->db,
@@ -3803,10 +3803,14 @@ end_with_restore_list:
send_ok(thd, rows_affected);
/* lex->unit.cleanup() is called outside, no need to call it here */
- } while (0);
- lex->et->free_sphead_on_delete= true;
- delete lex->et;
- lex->et= 0;
+ } while (0);
+ if (!thd->spcont)
+ {
+ lex->et->free_sphead_on_delete= true;
+ lex->et->free_sp();
+ lex->et->deinit_mutexes();
+ }
+
break;
}
case SQLCOM_SHOW_CREATE_EVENT:
@@ -5845,7 +5849,9 @@ void mysql_parse(THD *thd, char *inBuf, uint length)
if (thd->lex->et)
{
thd->lex->et->free_sphead_on_delete= true;
- delete thd->lex->et;
+ /* alloced on thd->mem_root so no real memory free but dtor call */
+ thd->lex->et->free_sp();
+ thd->lex->et->deinit_mutexes();
thd->lex->et= NULL;
}
}
@@ -5886,7 +5892,8 @@ void mysql_parse(THD *thd, char *inBuf, uint length)
if (thd->lex->et)
{
thd->lex->et->free_sphead_on_delete= true;
- delete thd->lex->et;
+ lex->et->free_sp();
+ lex->et->deinit_mutexes();
thd->lex->et= NULL;
}
}
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index 18793d43016..03fa046094a 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -3741,14 +3741,14 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf,
ha_legacy_type(default_db_type)));
if (is_create_table_ind)
{
- if (old_lex->name)
+ if (old_lex->like_name)
{
/*
This code is executed when we do a CREATE TABLE t1 LIKE t2
- old_lex->name contains the t2 and the table we are opening has
+ old_lex->like_name contains the t2 and the table we are opening has
name t1.
*/
- Table_ident *table_ident= (Table_ident *)old_lex->name;
+ Table_ident *table_ident= old_lex->like_name;
char *src_db= table_ident->db.str ? table_ident->db.str : thd->db;
char *src_table= table_ident->table.str;
char buf[FN_REFLEN];
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 7695001cd67..59c7436d85c 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -7114,7 +7114,10 @@ static Item *eliminate_item_equal(COND *cond, COND_EQUAL *upper_levels,
if (!cond)
cond= new Item_cond_and(eq_list);
else
+ {
+ DBUG_ASSERT(cond->type() == Item::COND_ITEM);
((Item_cond *) cond)->add_at_head(&eq_list);
+ }
cond->quick_fix_field();
cond->update_used_tables();
@@ -7199,6 +7202,11 @@ static COND* substitute_for_best_equal_field(COND *cond,
while ((item_equal= it++))
{
cond= eliminate_item_equal(cond, cond_equal->upper_levels, item_equal);
+ // This occurs when eliminate_item_equal() founds that cond is
+ // always false and substitues it with Item_int 0.
+ // Due to this, value of item_equal will be 0, so just return it.
+ if (cond->type() != Item::COND_ITEM)
+ break;
}
}
}
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index c5b7acb5eb3..9accacbd7b4 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -1214,7 +1214,8 @@ create:
lex->create_info.options=$2 | $4;
lex->create_info.db_type= lex->thd->variables.table_type;
lex->create_info.default_table_charset= NULL;
- lex->name=0;
+ lex->name= 0;
+ lex->like_name= 0;
}
create2
{ Lex->current_select= &Lex->select_lex; }
@@ -1274,7 +1275,7 @@ create:
lex->create_info.options= $3;
- if (!(lex->et= new Event_timed())) // implicitly calls Event_timed::init()
+ if (!(lex->et= new(YYTHD->mem_root) Event_timed())) // implicitly calls Event_timed::init()
YYABORT;
/*
@@ -3272,13 +3273,13 @@ create2:
| LIKE table_ident
{
LEX *lex=Lex;
- if (!(lex->name= (char *)$2))
+ if (!(lex->like_name= $2))
YYABORT;
}
| '(' LIKE table_ident ')'
{
LEX *lex=Lex;
- if (!(lex->name= (char *)$3))
+ if (!(lex->like_name= $3))
YYABORT;
}
;
@@ -4712,8 +4713,8 @@ alter:
{
THD *thd= YYTHD;
LEX *lex= thd->lex;
+ lex->name= 0;
lex->sql_command= SQLCOM_ALTER_TABLE;
- lex->name= 0;
lex->duplicates= DUP_ERROR;
if (!lex->select_lex.add_table_to_list(thd, $4, NULL,
TL_OPTION_UPDATING))
@@ -4722,7 +4723,8 @@ alter:
lex->key_list.empty();
lex->col_list.empty();
lex->select_lex.init_order();
- lex->select_lex.db=lex->name=0;
+ lex->select_lex.db=lex->name= 0;
+ lex->like_name= 0;
bzero((char*) &lex->create_info,sizeof(lex->create_info));
lex->create_info.db_type= (handlerton*) &default_hton;
lex->create_info.default_table_charset= NULL;
@@ -4811,7 +4813,7 @@ alter:
}
lex->spname= 0;//defensive programming
- if (!(et= new Event_timed()))// implicitly calls Event_timed::init()
+ if (!(et= new (YYTHD->mem_root) Event_timed()))// implicitly calls Event_timed::init()
YYABORT;
lex->et = et;
@@ -7715,7 +7717,7 @@ drop:
YYABORT;
}
- if (!(lex->et= new Event_timed()))
+ if (!(lex->et= new (YYTHD->mem_root) Event_timed()))
YYABORT;
if (!lex->et_compile_phase)
@@ -8439,7 +8441,7 @@ show_param:
{
Lex->sql_command = SQLCOM_SHOW_CREATE_EVENT;
Lex->spname= $3;
- Lex->et= new Event_timed();
+ Lex->et= new (YYTHD->mem_root) Event_timed();
if (!Lex->et)
YYABORT;
Lex->et->init_definer(YYTHD);
diff --git a/win/cmakefiles/bdb b/storage/bdb/cmakelists.txt
similarity index 100%
rename from win/cmakefiles/bdb
rename to storage/bdb/cmakelists.txt
diff --git a/win/cmakefiles/heap b/storage/heap/cmakelists.txt
similarity index 100%
rename from win/cmakefiles/heap
rename to storage/heap/cmakelists.txt
diff --git a/win/cmakefiles/innobase b/storage/innobase/cmakelists.txt
similarity index 100%
rename from win/cmakefiles/innobase
rename to storage/innobase/cmakelists.txt
diff --git a/win/cmakefiles/myisam b/storage/myisam/cmakelists.txt
similarity index 100%
rename from win/cmakefiles/myisam
rename to storage/myisam/cmakelists.txt
diff --git a/win/cmakefiles/myisammrg b/storage/myisammrg/cmakelists.txt
similarity index 100%
rename from win/cmakefiles/myisammrg
rename to storage/myisammrg/cmakelists.txt
diff --git a/win/cmakefiles/strings b/strings/cmakelists.txt
similarity index 100%
rename from win/cmakefiles/strings
rename to strings/cmakelists.txt
diff --git a/win/cmakefiles/tests b/tests/cmakelists.txt
similarity index 77%
rename from win/cmakefiles/tests
rename to tests/cmakelists.txt
index 1b627329028..c9b0b8735a2 100644
--- a/win/cmakefiles/tests
+++ b/tests/cmakelists.txt
@@ -6,4 +6,4 @@ ADD_DEFINITIONS("-DMYSQL_CLIENT")
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
ADD_EXECUTABLE(mysql_client_test mysql_client_test.c)
-TARGET_LINK_LIBRARIES(mysql_client_test dbug mysqlclient zlib wsock32)
+TARGET_LINK_LIBRARIES(mysql_client_test dbug mysqlclient yassl taocrypt zlib wsock32)
diff --git a/win/cmakefiles/vio b/vio/cmakelists.txt
similarity index 100%
rename from win/cmakefiles/vio
rename to vio/cmakelists.txt
diff --git a/win/README b/win/README
new file mode 100644
index 00000000000..27c7e5c5762
--- /dev/null
+++ b/win/README
@@ -0,0 +1,70 @@
+Windows building readme
+======================================
+
+----------------IMPORTANT----------------------------
+This readme outlines the instructions for building
+MySQL for Windows staring from version 5.1.
+This readme does not apply to MySQL versions 5.0
+or ealier.
+-----------------------------------------------------
+
+The Windows build system uses a tool named CMake to generate build files for
+a variety of project systems. This tool is combined with a set of jscript
+files to enable building of MySQL for Windows directly out of a bk clone.
+The steps required are below.
+
+Step 1
+------
+Download and install CMake. It can be downloaded from http://www.cmake.org.
+Once it is installed, modify your path to make sure you can execute
+the cmake binary.
+
+Step 2
+------
+Download and install bison for Windows. It can be downloaded from
+http://gnuwin32.sourceforge.net/packages/bison.htm. Please download using
+the link named "Complete package, excluding sources". This includes an
+installer that will install bison. After the installer finishes, modify
+your path so that you can execute bison.
+
+Step 3
+------
+Clone your bk tree to any location you like.
+
+Step 4
+------
+From the root of your bk clone, execute the command: win\configure .
+The options right now are WITH_INNODB and WITH_PARTITION. So the command line
+would look like:
+
+win\configure WITH_INNODB WITH_PARTITION
+
+These are the only two flags supported right now. Others will come later.
+
+Step 5
+------
+From the root of your bk clone, execute one of the batch files to generate the type
+of project files you desire.
+
+For Visual Studio 8, do win\build-vs8.
+For Visual Studio 7.1, do win\build-vs71.
+
+We will support building with nmake in the near future.
+
+Step 6
+------
+From the root of your bk clone, start your build.
+
+For Visual Studio, simply execute mysql.sln. This will start the IDE and you can
+click the build solution menu option.
+
+Current issues
+--------------
+1. Not all configurations are currently available. i.e. Classic, Pro, Max.
+Currently, only debug and release are available. This will change in the near
+future.
+
+2. The definitions set for features (partitioning, blackhole, etc) are not
+changed based on the options given with configure. This will soon be fixed
+as well.
+
diff --git a/win/build-vs71.bat b/win/build-vs71.bat
index db92d9c3b72..46f3bc32f6e 100644
--- a/win/build-vs71.bat
+++ b/win/build-vs71.bat
@@ -1,10 +1,5 @@
@echo off
-REM - First we need to copy all the cmakelists to the proper folders
-cd win\cmakefiles
-call deploy.bat
-cd ..\..
-
del cmakecache.txt
copy win\vs71cache.txt cmakecache.txt
cmake -G "Visual Studio 7 .NET 2003"
diff --git a/win/build-vs8.bat b/win/build-vs8.bat
index 54789b16503..349c3e78628 100644
--- a/win/build-vs8.bat
+++ b/win/build-vs8.bat
@@ -1,10 +1,5 @@
@echo off
-REM - First we need to copy all the cmakelists to the proper folders
-cd win\cmakefiles
-call deploy.bat
-cd ..\..
-
del cmakecache.txt
copy win\vs8cache.txt cmakecache.txt
cmake -G "Visual Studio 8 2005"
diff --git a/win/cmakefiles/deploy.bat b/win/cmakefiles/deploy.bat
deleted file mode 100644
index 44ecb2d55fb..00000000000
--- a/win/cmakefiles/deploy.bat
+++ /dev/null
@@ -1,21 +0,0 @@
-@echo off
-copy base ..\..\cmakelists.txt
-copy client ..\..\client\cmakelists.txt
-copy dbug ..\..\dbug\cmakelists.txt
-copy extra ..\..\extra\cmakelists.txt
-copy mysys ..\..\mysys\cmakelists.txt
-copy regex ..\..\regex\cmakelists.txt
-copy sql ..\..\sql\cmakelists.txt
-copy strings ..\..\strings\cmakelists.txt
-copy vio ..\..\vio\cmakelists.txt
-copy zlib ..\..\zlib\cmakelists.txt
-copy yassl ..\..\extra\yassl\cmakelists.txt
-copy taocrypt ..\..\extra\yassl\taocrypt\cmakelists.txt
-copy bdb ..\..\storage\bdb\cmakelists.txt
-copy heap ..\..\storage\heap\cmakelists.txt
-copy innobase ..\..\storage\innobase\cmakelists.txt
-copy myisam ..\..\storage\myisam\cmakelists.txt
-copy myisammrg ..\..\storage\myisammrg\cmakelists.txt
-copy im ..\..\server-tools\instance-manager\cmakelists.txt
-copy libmysql ..\..\libmysql\cmakelists.txt
-copy tests ..\..\tests\cmakelists.txt
diff --git a/win/cmakefiles/extra b/win/cmakefiles/extra
deleted file mode 100644
index d31779fca63..00000000000
--- a/win/cmakefiles/extra
+++ /dev/null
@@ -1,29 +0,0 @@
-SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
-SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DSAFEMALLOC -DSAFE_MUTEX")
-
-INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include)
-
-ADD_EXECUTABLE(comp_err comp_err.c)
-TARGET_LINK_LIBRARIES(comp_err dbug mysys strings wsock32)
-
-GET_TARGET_PROPERTY(COMP_ERR_EXE comp_err LOCATION)
-
-ADD_CUSTOM_TARGET(GenError
- ${COMP_ERR_EXE} --charset=${PROJECT_SOURCE_DIR}/sql/share/charsets
- --out-dir=${PROJECT_SOURCE_DIR}/sql/share/
- --header_file=${PROJECT_SOURCE_DIR}/include/mysqld_error.h
- --name_file=${PROJECT_SOURCE_DIR}/include/mysqld_ername.h
- --state_file=${PROJECT_SOURCE_DIR}/include/sql_state.h
- --in_file=${PROJECT_SOURCE_DIR}/sql/share/errmsg.txt
- DEPENDS comp_err ${PROJECT_SOURCE_DIR}/sql/share/errmsg.txt)
-
-
-
-ADD_EXECUTABLE(my_print_defaults my_print_defaults.c)
-TARGET_LINK_LIBRARIES(my_print_defaults strings mysys dbug taocrypt odbc32 odbccp32 wsock32)
-
-ADD_EXECUTABLE(perror perror.c)
-TARGET_LINK_LIBRARIES(perror strings mysys dbug wsock32)
-
-ADD_EXECUTABLE(replace replace.c)
-TARGET_LINK_LIBRARIES(replace strings mysys dbug wsock32)
diff --git a/win/cmakefiles/zlib b/zlib/cmakelists.txt
similarity index 100%
rename from win/cmakefiles/zlib
rename to zlib/cmakelists.txt