summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2017-09-25 22:05:56 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2017-09-25 22:05:56 +0300
commit4a32e2395e1ff6cf7274d0567282b1747031108b (patch)
treef20565057eebcd25fda9292e66695bbf8a409f41
parentb773270c397a97425abc506e7d7fbc5fedb99d9c (diff)
parent86c3ba65aa39e1e81c52f3455a1bcf187906dffc (diff)
downloadmariadb-git-4a32e2395e1ff6cf7274d0567282b1747031108b.tar.gz
Merge bb-10.2-ext into 10.3
-rw-r--r--.gitignore1
-rw-r--r--CMakeLists.txt5
-rw-r--r--README.md6
-rw-r--r--cmake/CMakeLis.txt0
-rw-r--r--cmake/systemd.cmake5
-rw-r--r--mysql-test/extra/rpl_tests/rpl_cant_read_event_incident.inc2
-rw-r--r--mysql-test/extra/rpl_tests/rpl_checksum.inc2
-rw-r--r--mysql-test/extra/rpl_tests/rpl_init_slave_errors.inc2
-rw-r--r--mysql-test/extra/rpl_tests/rpl_loaddata.test2
-rw-r--r--mysql-test/extra/rpl_tests/rpl_packet.inc3
-rw-r--r--mysql-test/extra/rpl_tests/rpl_skip_replication.inc2
-rw-r--r--mysql-test/extra/rpl_tests/rpl_stm_relay_ign_space.inc2
-rw-r--r--mysql-test/extra/rpl_tests/rpl_sync.inc2
-rw-r--r--mysql-test/r/explain_json.result6
-rw-r--r--mysql-test/r/insert.result6
-rw-r--r--mysql-test/r/locale.result71
-rw-r--r--mysql-test/r/myisam.result8
-rw-r--r--mysql-test/r/old-mode.result53
-rw-r--r--mysql-test/suite/engines/funcs/t/rpl_insert.test2
-rw-r--r--mysql-test/suite/innodb/r/innodb-table-online.result8
-rw-r--r--mysql-test/suite/innodb/r/truncate_debug.result6
-rw-r--r--mysql-test/suite/innodb/t/innodb-index-online.test1
-rw-r--r--mysql-test/suite/innodb/t/innodb-table-online.test8
-rw-r--r--mysql-test/suite/innodb/t/truncate_debug.test9
-rw-r--r--mysql-test/suite/maria/maria.result8
-rw-r--r--mysql-test/suite/maria/maria.test13
-rw-r--r--mysql-test/suite/parts/t/rpl_partition.test2
-rw-r--r--mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.test2
-rw-r--r--mysql-test/suite/rpl/r/rpl_temporal_format_mariadb53_to_mysql56_dst.result32
-rw-r--r--mysql-test/suite/rpl/t/rpl_alter_extra_persistent.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_auto_increment_bug45679.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_begin_commit_rollback.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_blackhole.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_concurrency_error.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_conditional_comments.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_empty_master_host.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_extra_col_master_innodb.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_flush_logs.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_geometry.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_grant.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_gtid_mdev4484.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_heartbeat_debug.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_innodb_bug68220.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_insert.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_invoked_features.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_loaddata_symlink.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_mdev-11092.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_mdev8193.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_mixed_binlog_max_cache_size.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_mixed_implicit_commit_binlog.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_mixed_mixing_engines.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_non_direct_mixed_mixing_engines.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_not_null_innodb.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_not_null_myisam.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_performance_schema.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_read_only.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_report_port.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_binlog_max_cache_size.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_colSize.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_corruption.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_create_table.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_find_row.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_implicit_commit_binlog.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_index_choice.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_merge_engine.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_show_relaylog_events.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_trunc_temp.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_utf16.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_row_wide_table.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_savepoint.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_server_id_ignore.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_set_null_innodb.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_skip_error.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_skip_incident.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_slave_skip.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_slow_query_log.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_stm_binlog_max_cache_size.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_stm_drop_create_temp_table.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_stm_implicit_commit_binlog.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_stm_loadfile.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_stm_start_stop_slave.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_stm_user_variables.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test2
-rw-r--r--mysql-test/suite/rpl/t/rpl_temporal_format_mariadb53_to_mysql56_dst.test37
-rw-r--r--mysql-test/suite/rpl/t/rpl_temporary_errors.test2
-rw-r--r--mysql-test/suite/rpl/t/sec_behind_master-5114.test2
-rw-r--r--mysql-test/suite/vcol/r/vcol_blocked_sql_funcs.result2
-rw-r--r--mysql-test/suite/vcol/r/vcol_supported_sql_funcs.result15
-rw-r--r--mysql-test/suite/vcol/t/vcol_blocked_sql_funcs_main.inc3
-rw-r--r--mysql-test/suite/vcol/t/vcol_supported_sql_funcs_main.inc6
-rw-r--r--mysql-test/t/create_or_replace2.test2
-rw-r--r--mysql-test/t/insert.test10
-rw-r--r--mysql-test/t/locale.test28
-rw-r--r--mysql-test/t/myisam.test13
-rw-r--r--mysql-test/t/old-mode.test36
-rw-r--r--mysql-test/t/stat_tables_repl.test2
-rw-r--r--scripts/galera_recovery.sh2
-rw-r--r--scripts/mysqld_safe.sh6
-rw-r--r--sql/CMakeLists.txt13
-rw-r--r--sql/field.cc97
-rw-r--r--sql/field.h42
-rw-r--r--sql/field_conv.cc17
-rw-r--r--sql/item.cc19
-rw-r--r--sql/item.h15
-rw-r--r--sql/item_create.cc27
-rw-r--r--sql/item_func.h10
-rw-r--r--sql/item_strfunc.cc24
-rw-r--r--sql/item_strfunc.h9
-rw-r--r--sql/item_timefunc.cc44
-rw-r--r--sql/item_timefunc.h28
-rw-r--r--sql/lex.h1
-rw-r--r--sql/sql_alloc.h6
-rw-r--r--sql/sql_class.h23
-rw-r--r--sql/sql_error.h5
-rw-r--r--sql/sql_join_cache.cc3
-rw-r--r--sql/sql_lex.h8
-rw-r--r--sql/sql_string.h28
-rw-r--r--sql/sql_time.h2
-rw-r--r--sql/sql_type.cc33
-rw-r--r--sql/sql_type.h5
-rw-r--r--sql/sql_yacc.yy16
-rw-r--r--sql/sql_yacc_ora.yy16
-rw-r--r--sql/table.cc39
-rw-r--r--storage/connect/CMakeLists.txt4
-rw-r--r--storage/connect/preparse.h2
-rw-r--r--storage/connect/tabmysql.h2
-rw-r--r--storage/connect/tabutil.cpp4
-rw-r--r--storage/innobase/include/page0page.h4
-rw-r--r--storage/innobase/page/page0cur.cc6
-rw-r--r--storage/innobase/rem/rem0rec.cc14
-rw-r--r--storage/innobase/row/row0import.cc12
-rw-r--r--storage/innobase/row/row0log.cc8
-rw-r--r--storage/maria/ha_maria.cc2
-rw-r--r--storage/maria/ma_create.c41
-rw-r--r--storage/mroonga/CMakeLists.txt3
140 files changed, 860 insertions, 325 deletions
diff --git a/.gitignore b/.gitignore
index c4109b63dc2..255759e76dd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -69,6 +69,7 @@ include/sql_state.h
include/probes_mysql.d
include/probes_mysql_dtrace.h
include/probes_mysql_nodtrace.h
+include/source_revision.h
info_macros.cmake
libmysql*/libmysql*_exports_file.cc
libmysql*/merge_archives_mysql*.cmake
diff --git a/CMakeLists.txt b/CMakeLists.txt
index aefc6711fbc..b16105a710b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -115,12 +115,14 @@ FOREACH(_base
ENDIF()
ENDFOREACH()
-FOREACH(tool gtar tar git)
+FOREACH(tool gtar tar)
STRING(TOUPPER ${tool} TOOL)
FIND_PROGRAM(${TOOL}_EXECUTABLE ${tool} DOC "path to the executable")
MARK_AS_ADVANCED(${TOOL}_EXECUTABLE)
ENDFOREACH()
+FIND_PACKAGE(Git)
+
# Following autotools tradition, add preprocessor definitions
# specified in environment variable CPPFLAGS
IF(DEFINED ENV{CPPFLAGS})
@@ -443,7 +445,6 @@ CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/include/mysql_version.h.in
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/sql/sql_builtin.cc.in
${CMAKE_BINARY_DIR}/sql/sql_builtin.cc)
-FIND_PACKAGE(Git)
IF(GIT_EXECUTABLE)
EXECUTE_PROCESS(
COMMAND ${GIT_EXECUTABLE} rev-parse HEAD
diff --git a/README.md b/README.md
index 58e08f89ca0..f46888e4b2f 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@ see the Credits appendix. You can also run 'SHOW authors' to get a
list of active contributors.
A description of the MariaDB project and a manual can be found at:
-http://mariadb.org/
+https://mariadb.org/
https://mariadb.com/kb/en/
https://mariadb.com/kb/en/mariadb-vs-mysql-features/
https://mariadb.com/kb/en/mariadb-versus-mysql-features/
@@ -55,9 +55,9 @@ Bug Reports:
------------
Bug and/or error reports regarding MariaDB should be submitted at
-http://mariadb.org/jira
+https://mariadb.org/jira
-Bugs in the MySQL code can also be submitted at http://bugs.mysql.com
+Bugs in the MySQL code can also be submitted at https://bugs.mysql.com
The code for MariaDB, including all revision history, can be found at:
https://github.com/MariaDB/server
diff --git a/cmake/CMakeLis.txt b/cmake/CMakeLis.txt
deleted file mode 100644
index e69de29bb2d..00000000000
--- a/cmake/CMakeLis.txt
+++ /dev/null
diff --git a/cmake/systemd.cmake b/cmake/systemd.cmake
index 6986cb748ce..f7365066ef6 100644
--- a/cmake/systemd.cmake
+++ b/cmake/systemd.cmake
@@ -13,11 +13,10 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-INCLUDE(FindPkgConfig)
-# http://www.cmake.org/cmake/help/v3.0/module/FindPkgConfig.html
-
MACRO(CHECK_SYSTEMD)
IF(UNIX)
+ INCLUDE(FindPkgConfig)
+ # http://www.cmake.org/cmake/help/v3.0/module/FindPkgConfig.html
SET(WITH_SYSTEMD "auto" CACHE STRING "Enable systemd scripts and notification support")
IF(WITH_SYSTEMD STREQUAL "yes" OR WITH_SYSTEMD STREQUAL "auto")
IF(PKG_CONFIG_FOUND)
diff --git a/mysql-test/extra/rpl_tests/rpl_cant_read_event_incident.inc b/mysql-test/extra/rpl_tests/rpl_cant_read_event_incident.inc
index a9534a999e2..7dfef023947 100644
--- a/mysql-test/extra/rpl_tests/rpl_cant_read_event_incident.inc
+++ b/mysql-test/extra/rpl_tests/rpl_cant_read_event_incident.inc
@@ -18,8 +18,8 @@
# and replication is started from it.
#
---source include/master-slave.inc
--source include/have_binlog_format_mixed.inc
+--source include/master-slave.inc
--connection slave
# Make sure the slave is stopped while we are messing with master.
diff --git a/mysql-test/extra/rpl_tests/rpl_checksum.inc b/mysql-test/extra/rpl_tests/rpl_checksum.inc
index 28d16658a7c..b5e70abe4d0 100644
--- a/mysql-test/extra/rpl_tests/rpl_checksum.inc
+++ b/mysql-test/extra/rpl_tests/rpl_checksum.inc
@@ -7,9 +7,9 @@
# WL2540 replication events checksum
# Testing configuration parameters
---source include/master-slave.inc
--source include/have_debug.inc
--source include/have_binlog_format_mixed.inc
+--source include/master-slave.inc
call mtr.add_suppression('Slave can not handle replication events with the checksum that master is configured to log');
call mtr.add_suppression('Replication event checksum verification failed');
diff --git a/mysql-test/extra/rpl_tests/rpl_init_slave_errors.inc b/mysql-test/extra/rpl_tests/rpl_init_slave_errors.inc
index a8ac4e3cd6e..4fdea651edd 100644
--- a/mysql-test/extra/rpl_tests/rpl_init_slave_errors.inc
+++ b/mysql-test/extra/rpl_tests/rpl_init_slave_errors.inc
@@ -35,8 +35,8 @@
# Configuring the Environment
######################################################################
source include/have_debug.inc;
-source include/master-slave.inc;
source include/have_log_bin.inc;
+source include/master-slave.inc;
connection slave;
diff --git a/mysql-test/extra/rpl_tests/rpl_loaddata.test b/mysql-test/extra/rpl_tests/rpl_loaddata.test
index e1942dad239..f0933c1023f 100644
--- a/mysql-test/extra/rpl_tests/rpl_loaddata.test
+++ b/mysql-test/extra/rpl_tests/rpl_loaddata.test
@@ -11,8 +11,8 @@
# check if START SLAVE, RESET SLAVE, CHANGE MASTER reset Last_slave_error and
# Last_slave_errno in SHOW SLAVE STATUS (1st and 3rd commands did not: bug 986)
--- source include/master-slave.inc
source include/have_innodb.inc;
+source include/master-slave.inc;
--disable_query_log
CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
diff --git a/mysql-test/extra/rpl_tests/rpl_packet.inc b/mysql-test/extra/rpl_tests/rpl_packet.inc
index 41bb374b802..cbde486bcbb 100644
--- a/mysql-test/extra/rpl_tests/rpl_packet.inc
+++ b/mysql-test/extra/rpl_tests/rpl_packet.inc
@@ -15,8 +15,9 @@
# BUG#55322: SHOW BINLOG EVENTS increases @@SESSION.MAX_ALLOWED_PACKET
# max-out size db name
-source include/master-slave.inc;
source include/have_binlog_format_row.inc;
+source include/master-slave.inc;
+
call mtr.add_suppression("Slave I/O: Got a packet bigger than 'slave_max_allowed_packet' bytes, .*error.* 1153");
call mtr.add_suppression("Log entry on master is longer than slave_max_allowed_packet");
let $db= DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
diff --git a/mysql-test/extra/rpl_tests/rpl_skip_replication.inc b/mysql-test/extra/rpl_tests/rpl_skip_replication.inc
index 14e3339ff5e..ac0beef414d 100644
--- a/mysql-test/extra/rpl_tests/rpl_skip_replication.inc
+++ b/mysql-test/extra/rpl_tests/rpl_skip_replication.inc
@@ -16,8 +16,8 @@
# so if it is needed, it should be set explicitly before each call.
#
---source include/master-slave.inc
--source include/have_innodb.inc
+--source include/master-slave.inc
connection slave;
# Test that SUPER is required to change @@replicate_events_marked_for_skip.
diff --git a/mysql-test/extra/rpl_tests/rpl_stm_relay_ign_space.inc b/mysql-test/extra/rpl_tests/rpl_stm_relay_ign_space.inc
index 82c4b1881bf..41339f539f8 100644
--- a/mysql-test/extra/rpl_tests/rpl_stm_relay_ign_space.inc
+++ b/mysql-test/extra/rpl_tests/rpl_stm_relay_ign_space.inc
@@ -25,8 +25,8 @@
# IO thread does not do it in an uncontrolled manner.
--source include/have_binlog_format_statement.inc
---source include/master-slave.inc
--source include/have_innodb.inc
+--source include/master-slave.inc
--disable_query_log
CREATE TABLE t1 (c1 TEXT) engine=InnoDB;
diff --git a/mysql-test/extra/rpl_tests/rpl_sync.inc b/mysql-test/extra/rpl_tests/rpl_sync.inc
index ede3c3c515f..1e2ec2ca83b 100644
--- a/mysql-test/extra/rpl_tests/rpl_sync.inc
+++ b/mysql-test/extra/rpl_tests/rpl_sync.inc
@@ -32,12 +32,12 @@
# Configuring the environment
########################################################################################
--echo =====Configuring the enviroment=======;
---source include/master-slave.inc
--source include/not_embedded.inc
--source include/not_valgrind.inc
--source include/have_debug.inc
--source include/have_innodb.inc
--source include/not_crashrep.inc
+--source include/master-slave.inc
call mtr.add_suppression('Attempting backtrace');
call mtr.add_suppression("Recovery from master pos .* and file master-bin.000001");
diff --git a/mysql-test/r/explain_json.result b/mysql-test/r/explain_json.result
index a64d4af5890..d7cdeac499e 100644
--- a/mysql-test/r/explain_json.result
+++ b/mysql-test/r/explain_json.result
@@ -1525,12 +1525,12 @@ ANALYZE
"key_length": "5",
"used_key_parts": ["a"],
"ref": ["test.t3.a"],
- "r_loops": 0,
+ "r_loops": 1,
"rows": 1,
- "r_rows": null,
+ "r_rows": 10,
"r_total_time_ms": "REPLACED",
"filtered": 100,
- "r_filtered": null,
+ "r_filtered": 100,
"index_condition_bka": "t4.b + 1 <= t3.b + 1"
},
"buffer_type": "flat",
diff --git a/mysql-test/r/insert.result b/mysql-test/r/insert.result
index 8e572c5fede..736aa917cae 100644
--- a/mysql-test/r/insert.result
+++ b/mysql-test/r/insert.result
@@ -745,3 +745,9 @@ f1 f2
drop view v1;
drop table t1;
SET @@sql_mode= @save_mode;
+CREATE TABLE t1 (f INT);
+CREATE VIEW v1 AS SELECT * FROM t1 WHERE f <=> 'foo' WITH CHECK OPTION;
+REPLACE INTO v1 SET f = NULL;
+ERROR 22007: Truncated incorrect DOUBLE value: 'foo'
+DROP VIEW v1;
+DROP TABLE t1;
diff --git a/mysql-test/r/locale.result b/mysql-test/r/locale.result
index a02e80ed21e..b750d038205 100644
--- a/mysql-test/r/locale.result
+++ b/mysql-test/r/locale.result
@@ -229,15 +229,80 @@ SET lc_time_names=@old_50915_lc_time_names;
# End of 10.1 tests
#
create view v1 as select
+date_format('2001-10-02', '%c %b %M') as a,
+date_format('2001-10-02', '%c %b %M', 'ru_RU') as a1,
format(123456789,2) as b,
format(123456789,2,'rm_CH') as b1;
select * from v1;
-b b1
-123,456,789.00 123'456'789,00
+a a1 b b1
+10 Oct October 10 Окт Октября 123,456,789.00 123'456'789,00
show create view v1;
View Create View character_set_client collation_connection
-v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select format(123456789,2) AS `b`,format(123456789,2,'rm_CH') AS `b1` utf8 utf8_general_ci
+v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select date_format('2001-10-02','%c %b %M') AS `a`,date_format('2001-10-02','%c %b %M','ru_RU') AS `a1`,format(123456789,2) AS `b`,format(123456789,2,'rm_CH') AS `b1` utf8 utf8_general_ci
drop view v1;
#
# End of 10.2 tests
#
+select date_format('2001-01-01', '%w %a %W', 'ro_RO');
+date_format('2001-01-01', '%w %a %W', 'ro_RO')
+1 Lu Luni
+select date_format('2001-01-03', '%w %a %W', 'ro_RO');
+date_format('2001-01-03', '%w %a %W', 'ro_RO')
+3 Mi Miercuri
+select date_format('2001-01-05', '%w %a %W', 'ro_RO');
+date_format('2001-01-05', '%w %a %W', 'ro_RO')
+5 Vi Vineri
+select date_format('2001-01-07', '%w %a %W', 'ro_RO');
+date_format('2001-01-07', '%w %a %W', 'ro_RO')
+0 Du Duminică
+select date_format('2001-01-01', '%w %a %W', 'de_AT');
+date_format('2001-01-01', '%w %a %W', 'de_AT')
+1 Mon Montag
+select date_format('2001-02-01', '%w %a %W', 'de_AT');
+date_format('2001-02-01', '%w %a %W', 'de_AT')
+4 Don Donnerstag
+select date_format('2001-03-01', '%w %a %W', 'de_AT');
+date_format('2001-03-01', '%w %a %W', 'de_AT')
+4 Don Donnerstag
+select date_format('2001-01-01', '%w %a %W', 'en_US');
+date_format('2001-01-01', '%w %a %W', 'en_US')
+1 Mon Monday
+select date_format('2001-03-01', '%c %b %M', 'en_US');
+date_format('2001-03-01', '%c %b %M', 'en_US')
+3 Mar March
+select date_format('2001-01-01', '%w %a %W', 'rm_CH');
+date_format('2001-01-01', '%w %a %W', 'rm_CH')
+1 gli glindesdi
+select date_format('2001-01-03', '%w %a %W', 'rm_CH');
+date_format('2001-01-03', '%w %a %W', 'rm_CH')
+3 me mesemna
+select date_format('2001-01-05', '%w %a %W', 'rm_CH');
+date_format('2001-01-05', '%w %a %W', 'rm_CH')
+5 ve venderdi
+select date_format('2001-01-07', '%w %a %W', 'rm_CH');
+date_format('2001-01-07', '%w %a %W', 'rm_CH')
+0 du dumengia
+select date_format('2001-02-01', '%c %b %M', 'rm_CH');
+date_format('2001-02-01', '%c %b %M', 'rm_CH')
+2 favr favrer
+select date_format('2001-04-01', '%c %b %M', 'rm_CH');
+date_format('2001-04-01', '%c %b %M', 'rm_CH')
+4 avr avrigl
+select date_format('2001-06-01', '%c %b %M', 'rm_CH');
+date_format('2001-06-01', '%c %b %M', 'rm_CH')
+6 zercl zercladur
+select date_format('2001-08-01', '%c %b %M', 'rm_CH');
+date_format('2001-08-01', '%c %b %M', 'rm_CH')
+8 avust avust
+select date_format('2001-10-01', '%c %b %M', 'rm_CH');
+date_format('2001-10-01', '%c %b %M', 'rm_CH')
+10 oct october
+select date_format('2001-12-01', '%c %b %M', 'rm_CH');
+date_format('2001-12-01', '%c %b %M', 'rm_CH')
+12 dec december
+select date_format('2001-01-06', '%w %a %W', 'de_CH');
+date_format('2001-01-06', '%w %a %W', 'de_CH')
+6 Sa Samstag
+select date_format('2001-09-01', '%c %b %M', 'de_CH');
+date_format('2001-09-01', '%c %b %M', 'de_CH')
+9 Sep September
diff --git a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result
index 5b41b35c1ba..78eb374b142 100644
--- a/mysql-test/r/myisam.result
+++ b/mysql-test/r/myisam.result
@@ -2569,6 +2569,14 @@ OPTIMIZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 optimize status OK
DROP TABLE t1;
+CREATE TABLE t1(a INT, b CHAR(10), KEY(a), KEY(b)) engine=myisam;
+INSERT INTO t1 VALUES(1,'0'),(2,'0'),(3,'0'),(4,'0'),(5,'0'),
+(6,'0'),(7,'0');
+flush tables test.t1 for export;
+insert into t1 values (8,'0');
+ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
+unlock tables;
+drop table t1;
show variables like 'myisam_block_size';
Variable_name Value
myisam_block_size 1024
diff --git a/mysql-test/r/old-mode.result b/mysql-test/r/old-mode.result
index c61e30ef85c..73ad613048a 100644
--- a/mysql-test/r/old-mode.result
+++ b/mysql-test/r/old-mode.result
@@ -127,3 +127,56 @@ Warning 1264 Out of range value for column 'a' at row 1
Warning 1264 Out of range value for column 'b' at row 1
DROP TABLE t1;
SET @@global.mysql56_temporal_format=DEFAULT;
+set time_zone='Europe/Moscow';
+set global mysql56_temporal_format=false;
+create table t1 (a timestamp);
+set timestamp=1288477526;
+insert t1 values (null);
+insert t1 values ();
+set timestamp=1288481126;
+insert t1 values (null);
+insert t1 values ();
+select a, unix_timestamp(a) from t1;
+a unix_timestamp(a)
+2010-10-31 02:25:26 1288477526
+2010-10-31 02:25:26 1288477526
+2010-10-31 02:25:26 1288481126
+2010-10-31 02:25:26 1288481126
+set global mysql56_temporal_format=true;
+select a, unix_timestamp(a) from t1;
+a unix_timestamp(a)
+2010-10-31 02:25:26 1288477526
+2010-10-31 02:25:26 1288477526
+2010-10-31 02:25:26 1288481126
+2010-10-31 02:25:26 1288481126
+alter table t1 modify a timestamp;
+select a, unix_timestamp(a) from t1;
+a unix_timestamp(a)
+2010-10-31 02:25:26 1288477526
+2010-10-31 02:25:26 1288477526
+2010-10-31 02:25:26 1288481126
+2010-10-31 02:25:26 1288481126
+drop table t1;
+set global mysql56_temporal_format=false;
+create table t1 (a timestamp);
+set timestamp=1288477526;
+insert t1 values (null);
+set timestamp=1288481126;
+insert t1 values (null);
+select a, unix_timestamp(a) from t1;
+a unix_timestamp(a)
+2010-10-31 02:25:26 1288477526
+2010-10-31 02:25:26 1288481126
+set global mysql56_temporal_format=true;
+select a, unix_timestamp(a) from t1;
+a unix_timestamp(a)
+2010-10-31 02:25:26 1288477526
+2010-10-31 02:25:26 1288481126
+create table t2 (a timestamp);
+insert t2 select a from t1;
+select a, unix_timestamp(a) from t2;
+a unix_timestamp(a)
+2010-10-31 02:25:26 1288477526
+2010-10-31 02:25:26 1288481126
+drop table t1, t2;
+set time_zone=DEFAULT;
diff --git a/mysql-test/suite/engines/funcs/t/rpl_insert.test b/mysql-test/suite/engines/funcs/t/rpl_insert.test
index 763a484ea5d..f57a6e226d1 100644
--- a/mysql-test/suite/engines/funcs/t/rpl_insert.test
+++ b/mysql-test/suite/engines/funcs/t/rpl_insert.test
@@ -2,9 +2,9 @@
--echo # Bug#20821: INSERT DELAYED fails to write some rows to binlog
--echo #
---source include/master-slave.inc
--source include/not_embedded.inc
--source include/not_windows.inc
+--source include/master-slave.inc
--disable_warnings
CREATE SCHEMA IF NOT EXISTS mysqlslap;
diff --git a/mysql-test/suite/innodb/r/innodb-table-online.result b/mysql-test/suite/innodb/r/innodb-table-online.result
index ec5199e4f52..d6a0d4785f5 100644
--- a/mysql-test/suite/innodb/r/innodb-table-online.result
+++ b/mysql-test/suite/innodb/r/innodb-table-online.result
@@ -167,7 +167,8 @@ ROLLBACK;
connection con1;
KILL QUERY @id;
ERROR 70100: Query execution was interrupted
-SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt WAIT_FOR kill_done';
+SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt WAIT_FOR dml_done';
+SET DEBUG_SYNC = 'row_log_table_apply2_before SIGNAL applied WAIT_FOR kill_done';
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
# session default
connection default;
@@ -180,6 +181,10 @@ ddl_online_create_index 1
ddl_pending_alter_table 1
ddl_sort_file_alter_table 0
ddl_log_file_alter_table 0
+BEGIN;
+INSERT INTO t1 VALUES(7,4,2);
+ROLLBACK;
+SET DEBUG_SYNC = 'now SIGNAL dml_done WAIT_FOR applied';
KILL QUERY @id;
SET DEBUG_SYNC = 'now SIGNAL kill_done';
# session con1
@@ -227,6 +232,7 @@ t1 CREATE TABLE `t1` (
`c3` char(255) NOT NULL,
PRIMARY KEY (`c1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
+ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt2 WAIT_FOR dml2_done';
SET lock_wait_timeout = 10;
ALTER TABLE t1 ROW_FORMAT=COMPACT, ALGORITHM = INPLACE;
diff --git a/mysql-test/suite/innodb/r/truncate_debug.result b/mysql-test/suite/innodb/r/truncate_debug.result
index eb4e9cfbc85..c04b83dbbe8 100644
--- a/mysql-test/suite/innodb/r/truncate_debug.result
+++ b/mysql-test/suite/innodb/r/truncate_debug.result
@@ -1,6 +1,9 @@
#
# Bug #23070734 CONCURRENT TRUNCATE TABLES CAUSE STALLS
#
+SET @ahi= @@global.innodb_adaptive_hash_index;
+SET GLOBAL innodb_adaptive_hash_index=OFF;
+SET GLOBAL innodb_adaptive_hash_index=ON;
Test_1 :- Check if DDL operations are possible on
table being truncated. Also check if
DDL operations on other tables succeed.
@@ -81,6 +84,5 @@ connection con2;
disconnect con2;
connection default;
SET DEBUG_SYNC= 'RESET';
-SET session lock_wait_timeout=default;
-set global innodb_adaptive_hash_index=on;
+SET GLOBAL innodb_adaptive_hash_index=@ahi;
drop table t1,t2,t3;
diff --git a/mysql-test/suite/innodb/t/innodb-index-online.test b/mysql-test/suite/innodb/t/innodb-index-online.test
index efd700498c6..5509d985edc 100644
--- a/mysql-test/suite/innodb/t/innodb-index-online.test
+++ b/mysql-test/suite/innodb/t/innodb-index-online.test
@@ -1,5 +1,6 @@
--source include/innodb_page_size_small.inc
--source include/innodb_encrypt_log.inc
+--source include/have_debug.inc
--source include/have_debug_sync.inc
let $innodb_metrics_select=
diff --git a/mysql-test/suite/innodb/t/innodb-table-online.test b/mysql-test/suite/innodb/t/innodb-table-online.test
index 51f5445693e..d3fbeffd19f 100644
--- a/mysql-test/suite/innodb/t/innodb-table-online.test
+++ b/mysql-test/suite/innodb/t/innodb-table-online.test
@@ -158,7 +158,8 @@ let $ID= `SELECT @id := CONNECTION_ID()`;
--error ER_QUERY_INTERRUPTED
KILL QUERY @id;
-SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt WAIT_FOR kill_done';
+SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt WAIT_FOR dml_done';
+SET DEBUG_SYNC = 'row_log_table_apply2_before SIGNAL applied WAIT_FOR kill_done';
--send
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
@@ -166,6 +167,10 @@ ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
connection default;
SET DEBUG_SYNC = 'now WAIT_FOR rebuilt';
eval $innodb_metrics_select;
+BEGIN;
+INSERT INTO t1 VALUES(7,4,2);
+ROLLBACK;
+SET DEBUG_SYNC = 'now SIGNAL dml_done WAIT_FOR applied';
let $ignore= `SELECT @id := $ID`;
KILL QUERY @id;
SET DEBUG_SYNC = 'now SIGNAL kill_done';
@@ -201,6 +206,7 @@ WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
--echo # session con1
connection con1;
SHOW CREATE TABLE t1;
+ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
# Exceed the configured innodb_online_alter_log_max_size.
# The actual limit is a multiple of innodb_sort_buf_size,
diff --git a/mysql-test/suite/innodb/t/truncate_debug.test b/mysql-test/suite/innodb/t/truncate_debug.test
index 915688ed354..5fee9174d98 100644
--- a/mysql-test/suite/innodb/t/truncate_debug.test
+++ b/mysql-test/suite/innodb/t/truncate_debug.test
@@ -8,6 +8,12 @@
--echo # Bug #23070734 CONCURRENT TRUNCATE TABLES CAUSE STALLS
--echo #
+SET @ahi= @@global.innodb_adaptive_hash_index;
+# Ensure that there is no adaptive hash index on any system tables,
+# or any other tables than the ones that we are creating below.
+SET GLOBAL innodb_adaptive_hash_index=OFF;
+SET GLOBAL innodb_adaptive_hash_index=ON;
+
--echo Test_1 :- Check if DDL operations are possible on
--echo table being truncated. Also check if
--echo DDL operations on other tables succeed.
@@ -115,8 +121,7 @@ disconnect con2;
connection default;
SET DEBUG_SYNC= 'RESET';
-SET session lock_wait_timeout=default;
-set global innodb_adaptive_hash_index=on;
+SET GLOBAL innodb_adaptive_hash_index=@ahi;
drop table t1,t2,t3;
--source include/wait_until_count_sessions.inc
diff --git a/mysql-test/suite/maria/maria.result b/mysql-test/suite/maria/maria.result
index 88f39827f27..b5fbcbe113d 100644
--- a/mysql-test/suite/maria/maria.result
+++ b/mysql-test/suite/maria/maria.result
@@ -2790,3 +2790,11 @@ test.t1 check status OK
SET aria_repair_threads=@@global.aria_repair_threads;
SET aria_sort_buffer_size=@@global.aria_sort_buffer_size;
DROP TABLE t1;
+CREATE TABLE t1(a INT, b CHAR(10), KEY(a), KEY(b));
+INSERT INTO t1 VALUES(1,'0'),(2,'0'),(3,'0'),(4,'0'),(5,'0'),
+(6,'0'),(7,'0');
+flush tables test.t1 for export;
+insert into t1 values (8,'0');
+ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
+unlock tables;
+drop table t1;
diff --git a/mysql-test/suite/maria/maria.test b/mysql-test/suite/maria/maria.test
index 1b930a22c35..e710f32ef80 100644
--- a/mysql-test/suite/maria/maria.test
+++ b/mysql-test/suite/maria/maria.test
@@ -2019,6 +2019,19 @@ SET aria_sort_buffer_size=@@global.aria_sort_buffer_size;
DROP TABLE t1;
#
+# Check FLUSH FOR EXPORT
+#
+
+CREATE TABLE t1(a INT, b CHAR(10), KEY(a), KEY(b));
+INSERT INTO t1 VALUES(1,'0'),(2,'0'),(3,'0'),(4,'0'),(5,'0'),
+ (6,'0'),(7,'0');
+flush tables test.t1 for export;
+--error ER_TABLE_NOT_LOCKED_FOR_WRITE
+insert into t1 values (8,'0');
+unlock tables;
+drop table t1;
+
+#
# End of test
#
# Set defaults back
diff --git a/mysql-test/suite/parts/t/rpl_partition.test b/mysql-test/suite/parts/t/rpl_partition.test
index 529d94b2b31..85b3f348921 100644
--- a/mysql-test/suite/parts/t/rpl_partition.test
+++ b/mysql-test/suite/parts/t/rpl_partition.test
@@ -1,7 +1,7 @@
--source include/have_partition.inc
--source include/have_innodb.inc
---source include/master-slave.inc
--source include/big_test.inc
+--source include/master-slave.inc
--vertical_results
diff --git a/mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.test b/mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.test
index 6a6c4f2a756..10e5e938884 100644
--- a/mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.test
+++ b/mysql-test/suite/roles/rpl_grant_revoke_current_role-8638.test
@@ -1,5 +1,5 @@
---source include/master-slave.inc
--source include/have_binlog_format_mixed.inc
+--source include/master-slave.inc
--enable_connect_log
diff --git a/mysql-test/suite/rpl/r/rpl_temporal_format_mariadb53_to_mysql56_dst.result b/mysql-test/suite/rpl/r/rpl_temporal_format_mariadb53_to_mysql56_dst.result
new file mode 100644
index 00000000000..4072376a120
--- /dev/null
+++ b/mysql-test/suite/rpl/r/rpl_temporal_format_mariadb53_to_mysql56_dst.result
@@ -0,0 +1,32 @@
+include/master-slave.inc
+[connection master]
+connection slave;
+set global time_zone='Europe/Moscow';
+set time_zone='UTC';
+stop slave;
+start slave;
+connection master;
+set global mysql56_temporal_format=false;
+set global time_zone='Europe/Moscow';
+set time_zone='UTC';
+create table t1 (pk int primary key, t timestamp not null);
+set timestamp = 1288477526;
+insert into t1 values (1,null);
+set timestamp = 1288481126;
+insert into t1 values (2,null);
+connection slave;
+select pk, t, unix_timestamp(t) from t1;
+pk t unix_timestamp(t)
+1 2010-10-30 22:25:26 1288477526
+2 2010-10-30 23:25:26 1288481126
+set time_zone=default;
+select pk, t, unix_timestamp(t) from t1;
+pk t unix_timestamp(t)
+1 2010-10-31 02:25:26 1288477526
+2 2010-10-31 02:25:26 1288481126
+set global time_zone=default;
+connection master;
+drop table t1;
+set global time_zone=default;
+set global mysql56_temporal_format=default;
+include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/t/rpl_alter_extra_persistent.test b/mysql-test/suite/rpl/t/rpl_alter_extra_persistent.test
index 3b2fff1cb13..4e604787c70 100644
--- a/mysql-test/suite/rpl/t/rpl_alter_extra_persistent.test
+++ b/mysql-test/suite/rpl/t/rpl_alter_extra_persistent.test
@@ -1,5 +1,5 @@
---source include/master-slave.inc
--source include/have_binlog_format_row.inc
+--source include/master-slave.inc
--enable_connect_log
--connection master
diff --git a/mysql-test/suite/rpl/t/rpl_auto_increment_bug45679.test b/mysql-test/suite/rpl/t/rpl_auto_increment_bug45679.test
index 6996e1c73c7..32f08be7c4d 100644
--- a/mysql-test/suite/rpl/t/rpl_auto_increment_bug45679.test
+++ b/mysql-test/suite/rpl/t/rpl_auto_increment_bug45679.test
@@ -5,9 +5,9 @@
# is replication unsafe.
#
-source include/master-slave.inc;
source include/have_binlog_format_mixed.inc;
source include/have_innodb.inc;
+source include/master-slave.inc;
call mtr.add_suppression('Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.');
diff --git a/mysql-test/suite/rpl/t/rpl_begin_commit_rollback.test b/mysql-test/suite/rpl/t/rpl_begin_commit_rollback.test
index f0ed5dc0123..659f074e8e4 100644
--- a/mysql-test/suite/rpl/t/rpl_begin_commit_rollback.test
+++ b/mysql-test/suite/rpl/t/rpl_begin_commit_rollback.test
@@ -1,6 +1,6 @@
-source include/master-slave.inc;
source include/have_innodb.inc;
source include/have_binlog_format_statement.inc;
+source include/master-slave.inc;
connection slave;
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
diff --git a/mysql-test/suite/rpl/t/rpl_blackhole.test b/mysql-test/suite/rpl/t/rpl_blackhole.test
index 5f9b955aaa4..76b2e2421c9 100644
--- a/mysql-test/suite/rpl/t/rpl_blackhole.test
+++ b/mysql-test/suite/rpl/t/rpl_blackhole.test
@@ -15,8 +15,8 @@
# primary key lookup), and index/key with multiple matches (forcing an
# index search).
-source include/master-slave.inc;
source include/have_blackhole.inc;
+source include/master-slave.inc;
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
diff --git a/mysql-test/suite/rpl/t/rpl_concurrency_error.test b/mysql-test/suite/rpl/t/rpl_concurrency_error.test
index 37a05064641..72179ef263a 100644
--- a/mysql-test/suite/rpl/t/rpl_concurrency_error.test
+++ b/mysql-test/suite/rpl/t/rpl_concurrency_error.test
@@ -17,9 +17,9 @@
# log, the error is ignored and only the non-transactional tables are changed.
###############################################################################
---source include/master-slave.inc
--source include/have_innodb.inc
--source include/have_binlog_format_statement.inc
+--source include/master-slave.inc
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
diff --git a/mysql-test/suite/rpl/t/rpl_conditional_comments.test b/mysql-test/suite/rpl/t/rpl_conditional_comments.test
index 0e2c108bf6e..bcc964a92c7 100644
--- a/mysql-test/suite/rpl/t/rpl_conditional_comments.test
+++ b/mysql-test/suite/rpl/t/rpl_conditional_comments.test
@@ -8,8 +8,8 @@
# will be binlogged as
# 'INSERT INTO t1 VALUES (1) /*!10000, (2)*/ /* 99999 ,(3)*/'.
###############################################################################
-source include/master-slave.inc;
source include/have_binlog_format_statement.inc;
+source include/master-slave.inc;
CREATE TABLE t1(c1 INT);
source include/show_binlog_events.inc;
diff --git a/mysql-test/suite/rpl/t/rpl_empty_master_host.test b/mysql-test/suite/rpl/t/rpl_empty_master_host.test
index 66d30375a59..0fc2d11a29d 100644
--- a/mysql-test/suite/rpl/t/rpl_empty_master_host.test
+++ b/mysql-test/suite/rpl/t/rpl_empty_master_host.test
@@ -16,8 +16,8 @@
# along the way if error/no error is thrown and/or if replication starts
# working when expected.
---source include/master-slave.inc
--source include/have_binlog_format_mixed.inc
+--source include/master-slave.inc
connection slave;
STOP SLAVE;
diff --git a/mysql-test/suite/rpl/t/rpl_extra_col_master_innodb.test b/mysql-test/suite/rpl/t/rpl_extra_col_master_innodb.test
index f48880b5dfa..201392346be 100644
--- a/mysql-test/suite/rpl/t/rpl_extra_col_master_innodb.test
+++ b/mysql-test/suite/rpl/t/rpl_extra_col_master_innodb.test
@@ -2,8 +2,8 @@
# Purpose: To test having extra columns on the master WL#3915
#############################################################
-- source include/have_binlog_format_row.inc
--- source include/master-slave.inc
-- source include/have_innodb.inc
+-- source include/master-slave.inc
let $engine_type = 'InnoDB';
--source extra/rpl_tests/rpl_extra_col_master.test
diff --git a/mysql-test/suite/rpl/t/rpl_flush_logs.test b/mysql-test/suite/rpl/t/rpl_flush_logs.test
index 1d19576d47c..6dad588f217 100644
--- a/mysql-test/suite/rpl/t/rpl_flush_logs.test
+++ b/mysql-test/suite/rpl/t/rpl_flush_logs.test
@@ -4,8 +4,8 @@
# works fine.
#
---source include/master-slave.inc
--source include/have_binlog_format_statement.inc
+--source include/master-slave.inc
connection master;
# Test 'flush error logs' statement.
diff --git a/mysql-test/suite/rpl/t/rpl_geometry.test b/mysql-test/suite/rpl/t/rpl_geometry.test
index 769c49c96b1..415732a0228 100644
--- a/mysql-test/suite/rpl/t/rpl_geometry.test
+++ b/mysql-test/suite/rpl/t/rpl_geometry.test
@@ -1,5 +1,5 @@
-source include/master-slave.inc;
source include/have_binlog_format_row.inc;
+source include/master-slave.inc;
#
# Bug#48776, Bug#43784
diff --git a/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test b/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test
index 17417a55b8c..dca32c30a94 100644
--- a/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test
+++ b/mysql-test/suite/rpl/t/rpl_get_master_version_and_clock.test
@@ -8,9 +8,9 @@
# Finish the following tests by calling its common test script:
# extra/rpl_tests/rpl_get_master_version_and_clock.test.
-source include/master-slave.inc;
source include/have_debug.inc;
source include/have_debug_sync.inc;
+source include/master-slave.inc;
#
# The test is not supposed to have any binglog affairs.
diff --git a/mysql-test/suite/rpl/t/rpl_grant.test b/mysql-test/suite/rpl/t/rpl_grant.test
index a1afa28847e..0220645380a 100644
--- a/mysql-test/suite/rpl/t/rpl_grant.test
+++ b/mysql-test/suite/rpl/t/rpl_grant.test
@@ -1,7 +1,7 @@
# Tests of grants and users
-source include/master-slave.inc;
source include/not_embedded.inc;
+source include/master-slave.inc;
connection master;
diff --git a/mysql-test/suite/rpl/t/rpl_gtid_mdev4484.test b/mysql-test/suite/rpl/t/rpl_gtid_mdev4484.test
index 57f78530b01..e1f5696f5a1 100644
--- a/mysql-test/suite/rpl/t/rpl_gtid_mdev4484.test
+++ b/mysql-test/suite/rpl/t/rpl_gtid_mdev4484.test
@@ -1,6 +1,6 @@
---source include/master-slave.inc
--source include/have_innodb.inc
--source include/have_debug.inc
+--source include/master-slave.inc
--connection slave
--source include/stop_slave.inc
diff --git a/mysql-test/suite/rpl/t/rpl_heartbeat_debug.test b/mysql-test/suite/rpl/t/rpl_heartbeat_debug.test
index 7cdf67d6532..6a426ed1e9f 100644
--- a/mysql-test/suite/rpl/t/rpl_heartbeat_debug.test
+++ b/mysql-test/suite/rpl/t/rpl_heartbeat_debug.test
@@ -1,7 +1,7 @@
# Testing master to slave heartbeat protocol, test cases that need debug build.
---source include/master-slave.inc
--source include/have_debug.inc
+--source include/master-slave.inc
connection slave;
--source include/stop_slave.inc
diff --git a/mysql-test/suite/rpl/t/rpl_innodb_bug68220.test b/mysql-test/suite/rpl/t/rpl_innodb_bug68220.test
index 76e7c60fd59..1e4f40a0019 100644
--- a/mysql-test/suite/rpl/t/rpl_innodb_bug68220.test
+++ b/mysql-test/suite/rpl/t/rpl_innodb_bug68220.test
@@ -1,6 +1,6 @@
--source include/have_innodb.inc
---source include/master-slave.inc
--source include/have_binlog_format_row.inc
+--source include/master-slave.inc
#
# Bug#68220: innodb_rows_updated is misleading on slave when *info_repository=TABLE
diff --git a/mysql-test/suite/rpl/t/rpl_insert.test b/mysql-test/suite/rpl/t/rpl_insert.test
index 2a29139ac48..48814508818 100644
--- a/mysql-test/suite/rpl/t/rpl_insert.test
+++ b/mysql-test/suite/rpl/t/rpl_insert.test
@@ -2,9 +2,9 @@
--echo # Bug#20821: INSERT DELAYED fails to write some rows to binlog
--echo #
---source include/master-slave.inc
--source include/not_embedded.inc
--source include/not_windows.inc
+--source include/master-slave.inc
disable_query_log;
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
diff --git a/mysql-test/suite/rpl/t/rpl_invoked_features.test b/mysql-test/suite/rpl/t/rpl_invoked_features.test
index 7770c36c397..91391cf8372 100644
--- a/mysql-test/suite/rpl/t/rpl_invoked_features.test
+++ b/mysql-test/suite/rpl/t/rpl_invoked_features.test
@@ -5,8 +5,8 @@
# Features for Replication.
#########################################
---source include/master-slave.inc
--source include/have_innodb.inc
+--source include/master-slave.inc
disable_query_log;
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
diff --git a/mysql-test/suite/rpl/t/rpl_loaddata_symlink.test b/mysql-test/suite/rpl/t/rpl_loaddata_symlink.test
index c73fa2897f3..e5ee400d231 100644
--- a/mysql-test/suite/rpl/t/rpl_loaddata_symlink.test
+++ b/mysql-test/suite/rpl/t/rpl_loaddata_symlink.test
@@ -4,8 +4,8 @@
# if the path of the load data file is a symbolic link.
#
--source include/not_windows.inc
---source include/master-slave.inc
--source include/have_binlog_format_statement.inc
+--source include/master-slave.inc
create table t1(a int not null auto_increment, b int, primary key(a) );
load data infile '../../std_data/rpl_loaddata.dat' into table t1;
diff --git a/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test b/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test
index a8a6d562ee5..ed26e61d9b6 100644
--- a/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test
+++ b/mysql-test/suite/rpl/t/rpl_mariadb_slave_capability.test
@@ -1,8 +1,8 @@
---source include/master-slave.inc
--source include/have_debug.inc
--source include/have_debug_sync.inc
--source include/have_binlog_format_row.inc
--source include/have_innodb.inc
+--source include/master-slave.inc
connection master;
diff --git a/mysql-test/suite/rpl/t/rpl_mdev-11092.test b/mysql-test/suite/rpl/t/rpl_mdev-11092.test
index c8b2b7f2ad1..31a385b40e6 100644
--- a/mysql-test/suite/rpl/t/rpl_mdev-11092.test
+++ b/mysql-test/suite/rpl/t/rpl_mdev-11092.test
@@ -1,8 +1,8 @@
--source include/have_innodb.inc
---source include/master-slave.inc
--source include/not_embedded.inc
--source include/not_windows.inc
--source include/have_binlog_format_row.inc
+--source include/master-slave.inc
########################################################################################
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
diff --git a/mysql-test/suite/rpl/t/rpl_mdev8193.test b/mysql-test/suite/rpl/t/rpl_mdev8193.test
index 29c26bb3da4..dcad3e5f9b0 100644
--- a/mysql-test/suite/rpl/t/rpl_mdev8193.test
+++ b/mysql-test/suite/rpl/t/rpl_mdev8193.test
@@ -1,5 +1,5 @@
---source include/master-slave.inc
--source include/have_binlog_format_statement.inc
+--source include/master-slave.inc
--connection slave
diff --git a/mysql-test/suite/rpl/t/rpl_mixed_binlog_max_cache_size.test b/mysql-test/suite/rpl/t/rpl_mixed_binlog_max_cache_size.test
index 3850a84cbf1..81b01cc9140 100644
--- a/mysql-test/suite/rpl/t/rpl_mixed_binlog_max_cache_size.test
+++ b/mysql-test/suite/rpl/t/rpl_mixed_binlog_max_cache_size.test
@@ -1,8 +1,8 @@
--source include/have_innodb.inc
---source include/master-slave.inc
--source include/not_embedded.inc
--source include/not_windows.inc
--source include/have_binlog_format_mixed.inc
+--source include/master-slave.inc
--source extra/rpl_tests/rpl_binlog_max_cache_size.test
--source include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/t/rpl_mixed_implicit_commit_binlog.test b/mysql-test/suite/rpl/t/rpl_mixed_implicit_commit_binlog.test
index b2e8308b34d..fa948f8f5fe 100644
--- a/mysql-test/suite/rpl/t/rpl_mixed_implicit_commit_binlog.test
+++ b/mysql-test/suite/rpl/t/rpl_mixed_implicit_commit_binlog.test
@@ -3,8 +3,8 @@
################################################################################
--source include/have_udf.inc
--source include/have_binlog_format_mixed.inc
---source include/master-slave.inc
--source include/have_innodb.inc
+--source include/master-slave.inc
--let $engine=Innodb
set session storage_engine=innodb;
diff --git a/mysql-test/suite/rpl/t/rpl_mixed_mixing_engines.test b/mysql-test/suite/rpl/t/rpl_mixed_mixing_engines.test
index 747374b89c2..a9c8f6fe3e1 100644
--- a/mysql-test/suite/rpl/t/rpl_mixed_mixing_engines.test
+++ b/mysql-test/suite/rpl/t/rpl_mixed_mixing_engines.test
@@ -3,8 +3,8 @@
# tables. For further details, please, read WL#2687 and WL#5072.
###################################################################################
--source include/have_binlog_format_mixed.inc
---source include/master-slave.inc
--source include/have_innodb.inc
+--source include/master-slave.inc
let $engine_type=Innodb;
let $database_name=test;
diff --git a/mysql-test/suite/rpl/t/rpl_non_direct_mixed_mixing_engines.test b/mysql-test/suite/rpl/t/rpl_non_direct_mixed_mixing_engines.test
index 8092ff141db..93ec9acf5ea 100644
--- a/mysql-test/suite/rpl/t/rpl_non_direct_mixed_mixing_engines.test
+++ b/mysql-test/suite/rpl/t/rpl_non_direct_mixed_mixing_engines.test
@@ -3,8 +3,8 @@
# tables. For further details, please, read WL#2687 and WL#5072.
###################################################################################
--source include/have_binlog_format_mixed.inc
---source include/master-slave.inc
--source include/have_innodb.inc
+--source include/master-slave.inc
--disable_query_log
SET SESSION binlog_direct_non_transactional_updates = OFF;
diff --git a/mysql-test/suite/rpl/t/rpl_not_null_innodb.test b/mysql-test/suite/rpl/t/rpl_not_null_innodb.test
index 1e67ba4eda1..6a1cc341060 100644
--- a/mysql-test/suite/rpl/t/rpl_not_null_innodb.test
+++ b/mysql-test/suite/rpl/t/rpl_not_null_innodb.test
@@ -11,9 +11,9 @@
# 3 - NULL --> NOT NULL ( sql-mode != STRICT and no failures)
#
#################################################################################
---source include/master-slave.inc
--source include/have_innodb.inc
--source include/have_binlog_format_row.inc
+--source include/master-slave.inc
let $engine=Innodb;
--source extra/rpl_tests/rpl_not_null.test
diff --git a/mysql-test/suite/rpl/t/rpl_not_null_myisam.test b/mysql-test/suite/rpl/t/rpl_not_null_myisam.test
index dcfaf006dad..6ef0b65d5ff 100644
--- a/mysql-test/suite/rpl/t/rpl_not_null_myisam.test
+++ b/mysql-test/suite/rpl/t/rpl_not_null_myisam.test
@@ -11,8 +11,8 @@
# 3 - NULL --> NOT NULL ( sql-mode != STRICT and no failures)
#
#################################################################################
---source include/master-slave.inc
--source include/have_binlog_format_row.inc
+--source include/master-slave.inc
let $engine=MyISAM;
--source extra/rpl_tests/rpl_not_null.test
diff --git a/mysql-test/suite/rpl/t/rpl_performance_schema.test b/mysql-test/suite/rpl/t/rpl_performance_schema.test
index 0562b0ea658..18aabe5272d 100644
--- a/mysql-test/suite/rpl/t/rpl_performance_schema.test
+++ b/mysql-test/suite/rpl/t/rpl_performance_schema.test
@@ -1,6 +1,6 @@
---source include/master-slave.inc
--source include/have_perfschema.inc
--source include/have_binlog_format_mixed.inc
+--source include/master-slave.inc
UPDATE performance_schema.setup_instruments SET ENABLED="NO";
diff --git a/mysql-test/suite/rpl/t/rpl_read_only.test b/mysql-test/suite/rpl/t/rpl_read_only.test
index fb92803847a..c4781bbbb3b 100644
--- a/mysql-test/suite/rpl/t/rpl_read_only.test
+++ b/mysql-test/suite/rpl/t/rpl_read_only.test
@@ -1,6 +1,6 @@
# Test case for BUG #11733
--- source include/master-slave.inc
-- source include/have_innodb.inc
+-- source include/master-slave.inc
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
diff --git a/mysql-test/suite/rpl/t/rpl_report_port.test b/mysql-test/suite/rpl/t/rpl_report_port.test
index 6e728a678ad..2a14d278d48 100644
--- a/mysql-test/suite/rpl/t/rpl_report_port.test
+++ b/mysql-test/suite/rpl/t/rpl_report_port.test
@@ -17,8 +17,8 @@
# case on doing SHOW SLAVE HOSTS on the master, we get the actual port number
# of the slave (ie. SLAVE_PORT).
-source include/master-slave.inc;
source include/have_binlog_format_mixed.inc;
+source include/master-slave.inc;
connection master;
diff --git a/mysql-test/suite/rpl/t/rpl_row_binlog_max_cache_size.test b/mysql-test/suite/rpl/t/rpl_row_binlog_max_cache_size.test
index 9c8489658f8..cc031d382e0 100644
--- a/mysql-test/suite/rpl/t/rpl_row_binlog_max_cache_size.test
+++ b/mysql-test/suite/rpl/t/rpl_row_binlog_max_cache_size.test
@@ -1,8 +1,8 @@
--source include/have_innodb.inc
---source include/master-slave.inc
--source include/not_embedded.inc
--source include/not_windows.inc
--source include/have_binlog_format_row.inc
+--source include/master-slave.inc
--source extra/rpl_tests/rpl_binlog_max_cache_size.test
--source include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/t/rpl_row_colSize.test b/mysql-test/suite/rpl/t/rpl_row_colSize.test
index cdffe2e333b..21c68b55e92 100644
--- a/mysql-test/suite/rpl/t/rpl_row_colSize.test
+++ b/mysql-test/suite/rpl/t/rpl_row_colSize.test
@@ -6,8 +6,8 @@
# having columns that are smaller (shorter) than the slave. #
##################################################################
--- source include/master-slave.inc
-- source include/have_binlog_format_row.inc
+-- source include/master-slave.inc
--disable_warnings
DROP TABLE IF EXISTS t1;
diff --git a/mysql-test/suite/rpl/t/rpl_row_corruption.test b/mysql-test/suite/rpl/t/rpl_row_corruption.test
index e05273a2f9c..acf3964f0c5 100644
--- a/mysql-test/suite/rpl/t/rpl_row_corruption.test
+++ b/mysql-test/suite/rpl/t/rpl_row_corruption.test
@@ -1,7 +1,7 @@
#
---source include/master-slave.inc
--source include/have_debug.inc
--source include/have_binlog_format_row.inc
+--source include/master-slave.inc
# BUG#11753004: 44360: REPLICATION FAILED
diff --git a/mysql-test/suite/rpl/t/rpl_row_create_table.test b/mysql-test/suite/rpl/t/rpl_row_create_table.test
index 38e4c5a5e63..65f14295c19 100644
--- a/mysql-test/suite/rpl/t/rpl_row_create_table.test
+++ b/mysql-test/suite/rpl/t/rpl_row_create_table.test
@@ -1,8 +1,8 @@
# Testing table creations for row-based replication.
--source include/have_binlog_format_row.inc
---source include/master-slave.inc
--source include/have_innodb.inc
+--source include/master-slave.inc
connection slave;
--source include/have_innodb.inc
connection master;
diff --git a/mysql-test/suite/rpl/t/rpl_row_find_row.test b/mysql-test/suite/rpl/t/rpl_row_find_row.test
index 7f633c5aa97..444706aca7f 100644
--- a/mysql-test/suite/rpl/t/rpl_row_find_row.test
+++ b/mysql-test/suite/rpl/t/rpl_row_find_row.test
@@ -16,8 +16,8 @@
# has been fixed.
#
--- source include/master-slave.inc
-- source include/have_binlog_format_row.inc
+-- source include/master-slave.inc
#
# Case #1: master has key, but slave has not.
diff --git a/mysql-test/suite/rpl/t/rpl_row_implicit_commit_binlog.test b/mysql-test/suite/rpl/t/rpl_row_implicit_commit_binlog.test
index 2b35f68ff63..6fdcd885930 100644
--- a/mysql-test/suite/rpl/t/rpl_row_implicit_commit_binlog.test
+++ b/mysql-test/suite/rpl/t/rpl_row_implicit_commit_binlog.test
@@ -3,8 +3,8 @@
################################################################################
--source include/have_udf.inc
--source include/have_binlog_format_row.inc
---source include/master-slave.inc
--source include/have_innodb.inc
+--source include/master-slave.inc
--let $engine=Innodb
set session storage_engine=innodb;
diff --git a/mysql-test/suite/rpl/t/rpl_row_index_choice.test b/mysql-test/suite/rpl/t/rpl_row_index_choice.test
index 6d4053f9737..0ad9b315d66 100644
--- a/mysql-test/suite/rpl/t/rpl_row_index_choice.test
+++ b/mysql-test/suite/rpl/t/rpl_row_index_choice.test
@@ -1,7 +1,7 @@
--source include/have_binlog_format_row.inc
---source include/master-slave.inc
--source include/have_debug.inc
--source include/have_innodb.inc
+--source include/master-slave.inc
# Bug#58997: Row-based replication breaks on table with only fulltext index:
connection master;
diff --git a/mysql-test/suite/rpl/t/rpl_row_merge_engine.test b/mysql-test/suite/rpl/t/rpl_row_merge_engine.test
index dcbb8b891d8..c28d4a89651 100644
--- a/mysql-test/suite/rpl/t/rpl_row_merge_engine.test
+++ b/mysql-test/suite/rpl/t/rpl_row_merge_engine.test
@@ -12,8 +12,8 @@
# deletes their contents through the merge table. Finally, the slave
# is synchronized with the master and (after the fix) it won't crash.
#
---source include/master-slave.inc
--source include/have_binlog_format_row.inc
+--source include/master-slave.inc
--connection master
CREATE TABLE t1 (a int) ENGINE=MyISAM;
diff --git a/mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test b/mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test
index 57d67c5c71b..b3808680db2 100644
--- a/mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test
+++ b/mysql-test/suite/rpl/t/rpl_row_rec_comp_innodb.test
@@ -1,6 +1,6 @@
-- source include/have_binlog_format_row.inc
--- source include/master-slave.inc
-- source include/have_innodb.inc
+-- source include/master-slave.inc
#
# BUG#52868 Wrong handling of NULL value during update, replication out of sync
diff --git a/mysql-test/suite/rpl/t/rpl_row_show_relaylog_events.test b/mysql-test/suite/rpl/t/rpl_row_show_relaylog_events.test
index a78f7ad4271..0882d603203 100644
--- a/mysql-test/suite/rpl/t/rpl_row_show_relaylog_events.test
+++ b/mysql-test/suite/rpl/t/rpl_row_show_relaylog_events.test
@@ -12,8 +12,8 @@
# This test issues SHOW [BINLOG|RELAYLOG] EVENTS both on master and slave after
# some statements have been issued.
--- source include/master-slave.inc
-- source include/have_binlog_format_row.inc
+-- source include/master-slave.inc
-- source extra/rpl_tests/rpl_show_relaylog_events.inc
--source include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test b/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test
index 4c306d9ab30..b0588cb2d58 100644
--- a/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test
+++ b/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test
@@ -26,9 +26,9 @@
# with mysqlbinlog reporting that it was unable to succeed in
# reading the event.
--- source include/master-slave.inc
-- source include/have_innodb.inc
-- source include/have_binlog_format_row.inc
+-- source include/master-slave.inc
-- disable_warnings
DROP TABLE IF EXISTS `t1`;
diff --git a/mysql-test/suite/rpl/t/rpl_row_trunc_temp.test b/mysql-test/suite/rpl/t/rpl_row_trunc_temp.test
index 394bf949f72..a8d7f77d930 100644
--- a/mysql-test/suite/rpl/t/rpl_row_trunc_temp.test
+++ b/mysql-test/suite/rpl/t/rpl_row_trunc_temp.test
@@ -6,8 +6,8 @@
# table was binlogged in RBR.
#
---source include/master-slave.inc
--source include/have_binlog_format_row.inc
+--source include/master-slave.inc
#This statement is not binlogged in RBR.
CREATE TEMPORARY TABLE t1(c1 INTEGER);
diff --git a/mysql-test/suite/rpl/t/rpl_row_utf16.test b/mysql-test/suite/rpl/t/rpl_row_utf16.test
index a48a36189ae..d5dcdc4233d 100644
--- a/mysql-test/suite/rpl/t/rpl_row_utf16.test
+++ b/mysql-test/suite/rpl/t/rpl_row_utf16.test
@@ -1,6 +1,6 @@
--- source include/master-slave.inc
-- source include/have_binlog_format_row.inc
-- source include/have_utf16.inc
+-- source include/master-slave.inc
#
# BUG#51716: Char column with utf16 character set gives wrong padding on slave
diff --git a/mysql-test/suite/rpl/t/rpl_row_wide_table.test b/mysql-test/suite/rpl/t/rpl_row_wide_table.test
index b1d16133096..01473f991bf 100644
--- a/mysql-test/suite/rpl/t/rpl_row_wide_table.test
+++ b/mysql-test/suite/rpl/t/rpl_row_wide_table.test
@@ -8,8 +8,8 @@
# in corrupt binlog
##################################################################
--- source include/master-slave.inc
-- source include/have_binlog_format_row.inc
+-- source include/master-slave.inc
--disable_warnings
DROP TABLE IF EXISTS t300;
diff --git a/mysql-test/suite/rpl/t/rpl_savepoint.test b/mysql-test/suite/rpl/t/rpl_savepoint.test
index 6cd7a7a2d39..31af6151728 100644
--- a/mysql-test/suite/rpl/t/rpl_savepoint.test
+++ b/mysql-test/suite/rpl/t/rpl_savepoint.test
@@ -1,5 +1,5 @@
---source include/master-slave.inc
--source include/have_innodb.inc
+--source include/master-slave.inc
--echo #
--echo # Bug#50124 Rpl failure on DROP table with concurrent txn/non-txn
diff --git a/mysql-test/suite/rpl/t/rpl_server_id_ignore.test b/mysql-test/suite/rpl/t/rpl_server_id_ignore.test
index 1e6d46c9d40..537978f1701 100644
--- a/mysql-test/suite/rpl/t/rpl_server_id_ignore.test
+++ b/mysql-test/suite/rpl/t/rpl_server_id_ignore.test
@@ -17,8 +17,8 @@
# b. nullifying the list and resuming of taking binlog from the very beginning with
# executing events this time
-source include/master-slave.inc;
source include/have_binlog_format_mixed.inc;
+source include/master-slave.inc;
connection slave;
diff --git a/mysql-test/suite/rpl/t/rpl_set_null_innodb.test b/mysql-test/suite/rpl/t/rpl_set_null_innodb.test
index 2d0c34e1d0a..5ef10263498 100644
--- a/mysql-test/suite/rpl/t/rpl_set_null_innodb.test
+++ b/mysql-test/suite/rpl/t/rpl_set_null_innodb.test
@@ -1,6 +1,6 @@
-- source include/have_binlog_format_mixed_or_row.inc
--- source include/master-slave.inc
-- source include/have_innodb.inc
+-- source include/master-slave.inc
-- let $engine= InnoDB
-- source extra/rpl_tests/rpl_set_null.test
diff --git a/mysql-test/suite/rpl/t/rpl_skip_error.test b/mysql-test/suite/rpl/t/rpl_skip_error.test
index 1144d6a1a7c..fa8eeb73fba 100644
--- a/mysql-test/suite/rpl/t/rpl_skip_error.test
+++ b/mysql-test/suite/rpl/t/rpl_skip_error.test
@@ -23,8 +23,8 @@
# bug in this test: BUG#30594: rpl.rpl_skip_error is nondeterministic:
# BUG#39393: slave-skip-errors does not work when using ROW based replication
-source include/master-slave.inc;
source include/have_innodb.inc;
+source include/master-slave.inc;
--echo ==== Test Without sql_mode=strict_trans_tables ====
diff --git a/mysql-test/suite/rpl/t/rpl_skip_incident.test b/mysql-test/suite/rpl/t/rpl_skip_incident.test
index c6db5ef61d1..704854aeed8 100644
--- a/mysql-test/suite/rpl/t/rpl_skip_incident.test
+++ b/mysql-test/suite/rpl/t/rpl_skip_incident.test
@@ -1,5 +1,5 @@
---source include/master-slave.inc
--source include/have_debug.inc
+--source include/master-slave.inc
connection master;
SET GLOBAL BINLOG_CHECKSUM=NONE;
diff --git a/mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test b/mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test
index b1af6e92c29..69319bad4a0 100644
--- a/mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test
+++ b/mysql-test/suite/rpl/t/rpl_slave_load_remove_tmpfile.test
@@ -20,9 +20,9 @@
--source include/have_binlog_format_statement.inc
--source include/have_innodb.inc
--source include/have_debug.inc
---source include/master-slave.inc
--source include/not_embedded.inc
--source include/not_var_link.inc
+--source include/master-slave.inc
##########################################################################
# Loading data
diff --git a/mysql-test/suite/rpl/t/rpl_slave_skip.test b/mysql-test/suite/rpl/t/rpl_slave_skip.test
index 09ecccaf193..2ec80758486 100644
--- a/mysql-test/suite/rpl/t/rpl_slave_skip.test
+++ b/mysql-test/suite/rpl/t/rpl_slave_skip.test
@@ -4,8 +4,8 @@
# test for MIXED mode.
source include/have_binlog_format_mixed.inc;
-source include/master-slave.inc;
source include/have_innodb.inc;
+source include/master-slave.inc;
connection slave;
source include/have_innodb.inc;
diff --git a/mysql-test/suite/rpl/t/rpl_slow_query_log.test b/mysql-test/suite/rpl/t/rpl_slow_query_log.test
index 3505883c58e..df88d42ed68 100644
--- a/mysql-test/suite/rpl/t/rpl_slow_query_log.test
+++ b/mysql-test/suite/rpl/t/rpl_slow_query_log.test
@@ -25,8 +25,8 @@
# Note that due to the sleep() command the insert is written to the binary
# log in row format.
-source include/master-slave.inc;
source include/have_binlog_format_statement.inc;
+source include/master-slave.inc;
CALL mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
diff --git a/mysql-test/suite/rpl/t/rpl_stm_binlog_max_cache_size.test b/mysql-test/suite/rpl/t/rpl_stm_binlog_max_cache_size.test
index 352213304b6..93cc06111e4 100644
--- a/mysql-test/suite/rpl/t/rpl_stm_binlog_max_cache_size.test
+++ b/mysql-test/suite/rpl/t/rpl_stm_binlog_max_cache_size.test
@@ -1,8 +1,8 @@
--source include/have_innodb.inc
---source include/master-slave.inc
--source include/not_embedded.inc
--source include/not_windows.inc
--source include/have_binlog_format_statement.inc
+--source include/master-slave.inc
--source extra/rpl_tests/rpl_binlog_max_cache_size.test
--source include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/t/rpl_stm_drop_create_temp_table.test b/mysql-test/suite/rpl/t/rpl_stm_drop_create_temp_table.test
index 7770fc77748..b395654a714 100644
--- a/mysql-test/suite/rpl/t/rpl_stm_drop_create_temp_table.test
+++ b/mysql-test/suite/rpl/t/rpl_stm_drop_create_temp_table.test
@@ -5,8 +5,8 @@
###################################################################################
--source include/big_test.inc
--source include/have_binlog_format_statement.inc
---source include/master-slave.inc
--source include/have_innodb.inc
+--source include/master-slave.inc
--source extra/rpl_tests/rpl_drop_create_temp_table.test
--source include/rpl_end.inc
diff --git a/mysql-test/suite/rpl/t/rpl_stm_implicit_commit_binlog.test b/mysql-test/suite/rpl/t/rpl_stm_implicit_commit_binlog.test
index 1e66b76abc8..774c87f551e 100644
--- a/mysql-test/suite/rpl/t/rpl_stm_implicit_commit_binlog.test
+++ b/mysql-test/suite/rpl/t/rpl_stm_implicit_commit_binlog.test
@@ -3,8 +3,8 @@
################################################################################
--source include/have_udf.inc
--source include/have_binlog_format_statement.inc
---source include/master-slave.inc
--source include/have_innodb.inc
+--source include/master-slave.inc
--let $engine=Innodb
set session storage_engine=innodb;
diff --git a/mysql-test/suite/rpl/t/rpl_stm_loadfile.test b/mysql-test/suite/rpl/t/rpl_stm_loadfile.test
index e82c951ce0c..016d3ed6090 100644
--- a/mysql-test/suite/rpl/t/rpl_stm_loadfile.test
+++ b/mysql-test/suite/rpl/t/rpl_stm_loadfile.test
@@ -12,8 +12,8 @@
##########
# Includes
--- source include/master-slave.inc
-- source include/have_binlog_format_statement.inc
+-- source include/master-slave.inc
disable_query_log;
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
diff --git a/mysql-test/suite/rpl/t/rpl_stm_start_stop_slave.test b/mysql-test/suite/rpl/t/rpl_stm_start_stop_slave.test
index dfe2e49bb90..76b2aed3f24 100644
--- a/mysql-test/suite/rpl/t/rpl_stm_start_stop_slave.test
+++ b/mysql-test/suite/rpl/t/rpl_stm_start_stop_slave.test
@@ -1,9 +1,9 @@
################################################################################
# Please, check ./extra/rpl_tests/rpl_start_stop_slave.test
################################################################################
---source include/master-slave.inc
--source include/have_binlog_format_statement.inc
--source include/have_innodb.inc
+--source include/master-slave.inc
# make innodb updates run fast
--connection slave
diff --git a/mysql-test/suite/rpl/t/rpl_stm_user_variables.test b/mysql-test/suite/rpl/t/rpl_stm_user_variables.test
index 493ea4cd967..18b90658b31 100644
--- a/mysql-test/suite/rpl/t/rpl_stm_user_variables.test
+++ b/mysql-test/suite/rpl/t/rpl_stm_user_variables.test
@@ -2,8 +2,8 @@
# BUG#49562: SBR out of sync when using numeric data types + user variable
#
--- source include/master-slave.inc
-- source include/have_binlog_format_statement.inc
+-- source include/master-slave.inc
## Setup user variables for several numeric types, so that we get
## coverage on the User_var_log_event different val types
diff --git a/mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test b/mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test
index 070e5189949..cbbf4c5ffa7 100644
--- a/mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test
+++ b/mysql-test/suite/rpl/t/rpl_temp_table_mix_row.test
@@ -9,9 +9,9 @@
# 4: sync to slave and check the number of temp tables on slave.
#
-source include/master-slave.inc;
source include/have_binlog_format_mixed.inc;
source include/have_innodb.inc;
+source include/master-slave.inc;
--echo ==== Initialize ====
diff --git a/mysql-test/suite/rpl/t/rpl_temporal_format_mariadb53_to_mysql56_dst.test b/mysql-test/suite/rpl/t/rpl_temporal_format_mariadb53_to_mysql56_dst.test
new file mode 100644
index 00000000000..511bdc15184
--- /dev/null
+++ b/mysql-test/suite/rpl/t/rpl_temporal_format_mariadb53_to_mysql56_dst.test
@@ -0,0 +1,37 @@
+#
+# MDEV-12672 Replicated TIMESTAMP fields given wrong value near DST change
+#
+source include/have_binlog_format_row.inc;
+source include/master-slave.inc;
+
+connection slave;
+set global time_zone='Europe/Moscow';
+set time_zone='UTC';
+stop slave;
+start slave;
+
+connection master;
+set global mysql56_temporal_format=false;
+set global time_zone='Europe/Moscow';
+set time_zone='UTC';
+
+create table t1 (pk int primary key, t timestamp not null);
+set timestamp = 1288477526;
+insert into t1 values (1,null);
+set timestamp = 1288481126;
+insert into t1 values (2,null);
+
+sync_slave_with_master;
+
+select pk, t, unix_timestamp(t) from t1;
+set time_zone=default;
+select pk, t, unix_timestamp(t) from t1;
+
+set global time_zone=default;
+
+connection master;
+drop table t1;
+set global time_zone=default;
+set global mysql56_temporal_format=default;
+
+source include/rpl_end.inc;
diff --git a/mysql-test/suite/rpl/t/rpl_temporary_errors.test b/mysql-test/suite/rpl/t/rpl_temporary_errors.test
index ab050cdc076..6392fb90b9b 100644
--- a/mysql-test/suite/rpl/t/rpl_temporary_errors.test
+++ b/mysql-test/suite/rpl/t/rpl_temporary_errors.test
@@ -1,6 +1,6 @@
source include/have_binlog_format_row.inc;
-source include/master-slave.inc;
source include/have_innodb.inc;
+source include/master-slave.inc;
call mtr.add_suppression("Deadlock found");
call mtr.add_suppression("Can't find record in 't.'");
diff --git a/mysql-test/suite/rpl/t/sec_behind_master-5114.test b/mysql-test/suite/rpl/t/sec_behind_master-5114.test
index ff8cab54c4f..d1d21bfa766 100644
--- a/mysql-test/suite/rpl/t/sec_behind_master-5114.test
+++ b/mysql-test/suite/rpl/t/sec_behind_master-5114.test
@@ -1,5 +1,5 @@
-source include/master-slave.inc;
source include/have_binlog_format_statement.inc;
+source include/master-slave.inc;
call mtr.add_suppression("Unsafe statement written to the binary log");
diff --git a/mysql-test/suite/vcol/r/vcol_blocked_sql_funcs.result b/mysql-test/suite/vcol/r/vcol_blocked_sql_funcs.result
index 6605f7c99b4..2d5bcfe553d 100644
--- a/mysql-test/suite/vcol/r/vcol_blocked_sql_funcs.result
+++ b/mysql-test/suite/vcol/r/vcol_blocked_sql_funcs.result
@@ -247,3 +247,5 @@ ERROR HY000: Expression in the GENERATED ALWAYS AS clause is too big
# Constant expression
create or replace table t1 (a int as (PI()) PERSISTENT);
drop table if exists t1;
+create table t1 (a timestamp, b varchar(255) as (date_format(a, '%w %a %m %b')) stored);
+ERROR HY000: Function or expression 'date_format()' cannot be used in the GENERATED ALWAYS AS clause of `b`
diff --git a/mysql-test/suite/vcol/r/vcol_supported_sql_funcs.result b/mysql-test/suite/vcol/r/vcol_supported_sql_funcs.result
index 3fa4f6e1431..10ab32f9486 100644
--- a/mysql-test/suite/vcol/r/vcol_supported_sql_funcs.result
+++ b/mysql-test/suite/vcol/r/vcol_supported_sql_funcs.result
@@ -2894,6 +2894,21 @@ a b
2012-12-12 Wednesday Wed December Dec
drop table t1;
set sql_warnings = 0;
+# DATE_FORMAT() STORED
+set sql_warnings = 1;
+create table t1 (a date, b varchar(100) as (date_format(a, '%W %a %M %b', 'de_DE')) STORED);
+show create table t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `a` date DEFAULT NULL,
+ `b` varchar(100) GENERATED ALWAYS AS (date_format(`a`,'%W %a %M %b','de_DE')) STORED
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+insert into t1 values ('2012-12-12',default);
+select * from t1;
+a b
+2012-12-12 Mittwoch Mi Dezember Dez
+drop table t1;
+set sql_warnings = 0;
# CURRENT_USER()
set sql_warnings = 1;
create table t1 (a char, b varchar(32) as (current_user()));
diff --git a/mysql-test/suite/vcol/t/vcol_blocked_sql_funcs_main.inc b/mysql-test/suite/vcol/t/vcol_blocked_sql_funcs_main.inc
index 766d0c7410c..37de02a2b29 100644
--- a/mysql-test/suite/vcol/t/vcol_blocked_sql_funcs_main.inc
+++ b/mysql-test/suite/vcol/t/vcol_blocked_sql_funcs_main.inc
@@ -354,3 +354,6 @@ eval create or replace table t1 (a int, b varchar(16384) as (concat(a,'$tmp_long
create or replace table t1 (a int as (PI()) PERSISTENT);
drop table if exists t1;
+
+--error ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED
+create table t1 (a timestamp, b varchar(255) as (date_format(a, '%w %a %m %b')) stored);
diff --git a/mysql-test/suite/vcol/t/vcol_supported_sql_funcs_main.inc b/mysql-test/suite/vcol/t/vcol_supported_sql_funcs_main.inc
index dafc42098dd..fa2162e5981 100644
--- a/mysql-test/suite/vcol/t/vcol_supported_sql_funcs_main.inc
+++ b/mysql-test/suite/vcol/t/vcol_supported_sql_funcs_main.inc
@@ -1197,6 +1197,12 @@ let $values1 = '2012-12-12',default;
let $rows = 1;
--source suite/vcol/inc/vcol_supported_sql_funcs.inc
+--echo # DATE_FORMAT() STORED
+let $cols = a date, b varchar(100) as (date_format(a, '%W %a %M %b', 'de_DE')) STORED;
+let $values1 = '2012-12-12',default;
+let $rows = 1;
+--source suite/vcol/inc/vcol_supported_sql_funcs.inc
+
--echo # CURRENT_USER()
let $cols = a char, b varchar(32) as (current_user());
let $values1 = 'a', default;
diff --git a/mysql-test/t/create_or_replace2.test b/mysql-test/t/create_or_replace2.test
index 6cee7fac2e9..199e5523811 100644
--- a/mysql-test/t/create_or_replace2.test
+++ b/mysql-test/t/create_or_replace2.test
@@ -3,9 +3,9 @@
#
--source include/have_debug.inc
---source include/master-slave.inc
--source include/have_binlog_format_row.inc
--source include/have_innodb.inc
+--source include/master-slave.inc
--disable_warnings
drop table if exists t1;
diff --git a/mysql-test/t/insert.test b/mysql-test/t/insert.test
index 80caefa5a0f..d57e9051e3f 100644
--- a/mysql-test/t/insert.test
+++ b/mysql-test/t/insert.test
@@ -602,3 +602,13 @@ remove_file $MYSQLD_DATADIR/test/t1.txt;
drop view v1;
drop table t1;
SET @@sql_mode= @save_mode;
+
+#
+# MDEV-13861 Assertion `0' failed in Protocol::end_statement
+#
+CREATE TABLE t1 (f INT);
+CREATE VIEW v1 AS SELECT * FROM t1 WHERE f <=> 'foo' WITH CHECK OPTION;
+--error ER_TRUNCATED_WRONG_VALUE
+REPLACE INTO v1 SET f = NULL;
+DROP VIEW v1;
+DROP TABLE t1;
diff --git a/mysql-test/t/locale.test b/mysql-test/t/locale.test
index 4570b968ecf..a9a507bc387 100644
--- a/mysql-test/t/locale.test
+++ b/mysql-test/t/locale.test
@@ -144,6 +144,8 @@ SET lc_time_names=@old_50915_lc_time_names;
# Item::print
create view v1 as select
+ date_format('2001-10-02', '%c %b %M') as a,
+ date_format('2001-10-02', '%c %b %M', 'ru_RU') as a1,
format(123456789,2) as b,
format(123456789,2,'rm_CH') as b1;
select * from v1;
@@ -153,3 +155,29 @@ drop view v1;
--echo #
--echo # End of 10.2 tests
--echo #
+
+#
+# MDEV-11553 Can't restore a PERSISTENT column that uses DATE_FORMAT()
+#
+# 3-argument syntax for DATE_FORMAT()
+select date_format('2001-01-01', '%w %a %W', 'ro_RO');
+select date_format('2001-01-03', '%w %a %W', 'ro_RO');
+select date_format('2001-01-05', '%w %a %W', 'ro_RO');
+select date_format('2001-01-07', '%w %a %W', 'ro_RO');
+select date_format('2001-01-01', '%w %a %W', 'de_AT');
+select date_format('2001-02-01', '%w %a %W', 'de_AT');
+select date_format('2001-03-01', '%w %a %W', 'de_AT');
+select date_format('2001-01-01', '%w %a %W', 'en_US');
+select date_format('2001-03-01', '%c %b %M', 'en_US');
+select date_format('2001-01-01', '%w %a %W', 'rm_CH');
+select date_format('2001-01-03', '%w %a %W', 'rm_CH');
+select date_format('2001-01-05', '%w %a %W', 'rm_CH');
+select date_format('2001-01-07', '%w %a %W', 'rm_CH');
+select date_format('2001-02-01', '%c %b %M', 'rm_CH');
+select date_format('2001-04-01', '%c %b %M', 'rm_CH');
+select date_format('2001-06-01', '%c %b %M', 'rm_CH');
+select date_format('2001-08-01', '%c %b %M', 'rm_CH');
+select date_format('2001-10-01', '%c %b %M', 'rm_CH');
+select date_format('2001-12-01', '%c %b %M', 'rm_CH');
+select date_format('2001-01-06', '%w %a %W', 'de_CH');
+select date_format('2001-09-01', '%c %b %M', 'de_CH');
diff --git a/mysql-test/t/myisam.test b/mysql-test/t/myisam.test
index 572fa55e70f..0da542e499e 100644
--- a/mysql-test/t/myisam.test
+++ b/mysql-test/t/myisam.test
@@ -1770,6 +1770,19 @@ OPTIMIZE TABLE t1;
DROP TABLE t1;
#
+# Check FLUSH FOR EXPORT
+#
+
+CREATE TABLE t1(a INT, b CHAR(10), KEY(a), KEY(b)) engine=myisam;
+INSERT INTO t1 VALUES(1,'0'),(2,'0'),(3,'0'),(4,'0'),(5,'0'),
+ (6,'0'),(7,'0');
+flush tables test.t1 for export;
+--error ER_TABLE_NOT_LOCKED_FOR_WRITE
+insert into t1 values (8,'0');
+unlock tables;
+drop table t1;
+
+#
# Check some variables
#
show variables like 'myisam_block_size';
diff --git a/mysql-test/t/old-mode.test b/mysql-test/t/old-mode.test
index b9012a96713..d7e8ce8ee55 100644
--- a/mysql-test/t/old-mode.test
+++ b/mysql-test/t/old-mode.test
@@ -83,3 +83,39 @@ SELECT TO_DAYS(a), TO_DAYS(b) FROM t1;
DROP TABLE t1;
SET @@global.mysql56_temporal_format=DEFAULT;
+#
+# MDEV-12672 Replicated TIMESTAMP fields given wrong value near DST change
+#
+
+# Copy_field
+set time_zone='Europe/Moscow';
+set global mysql56_temporal_format=false;
+create table t1 (a timestamp);
+set timestamp=1288477526;
+insert t1 values (null);
+insert t1 values ();
+set timestamp=1288481126;
+insert t1 values (null);
+insert t1 values ();
+select a, unix_timestamp(a) from t1;
+set global mysql56_temporal_format=true;
+select a, unix_timestamp(a) from t1;
+alter table t1 modify a timestamp;
+select a, unix_timestamp(a) from t1;
+drop table t1;
+
+# field_conv_incompatible()
+set global mysql56_temporal_format=false;
+create table t1 (a timestamp);
+set timestamp=1288477526;
+insert t1 values (null);
+set timestamp=1288481126;
+insert t1 values (null);
+select a, unix_timestamp(a) from t1;
+set global mysql56_temporal_format=true;
+select a, unix_timestamp(a) from t1;
+create table t2 (a timestamp);
+insert t2 select a from t1;
+select a, unix_timestamp(a) from t2;
+drop table t1, t2;
+set time_zone=DEFAULT;
diff --git a/mysql-test/t/stat_tables_repl.test b/mysql-test/t/stat_tables_repl.test
index 999c49d37cf..ac24c9dcbd7 100644
--- a/mysql-test/t/stat_tables_repl.test
+++ b/mysql-test/t/stat_tables_repl.test
@@ -1,6 +1,6 @@
--source include/have_stat_tables.inc
---source include/master-slave.inc
--source include/have_binlog_format_row.inc
+--source include/master-slave.inc
--echo #
--echo # Bug mdev-485: unexpected failure with replication of DROP/ALTER table
diff --git a/scripts/galera_recovery.sh b/scripts/galera_recovery.sh
index d734ceb7ac7..de2e653c497 100644
--- a/scripts/galera_recovery.sh
+++ b/scripts/galera_recovery.sh
@@ -69,7 +69,7 @@ parse_arguments() {
wsrep_recover_position() {
# Redirect server's error log to the log file.
eval /usr/sbin/mysqld $cmdline_args --user=$user --wsrep_recover \
- --log-error="$log_file"
+ --disable-log-error 2> "$log_file"
ret=$?
if [ $ret -ne 0 ]; then
# Something went wrong, let us also print the error log so that it
diff --git a/scripts/mysqld_safe.sh b/scripts/mysqld_safe.sh
index 48baf61be3a..3a06f7e4858 100644
--- a/scripts/mysqld_safe.sh
+++ b/scripts/mysqld_safe.sh
@@ -245,7 +245,7 @@ wsrep_recover_position() {
local euid=$(id -u)
local ret=0
- local wr_logfile=$(mktemp $DATADIR/wsrep_recovery.XXXXXX)
+ local wr_logfile=$(mktemp wsrep_recovery.XXXXXX)
# safety checks
if [ -z $wr_logfile ]; then
@@ -263,11 +263,11 @@ wsrep_recover_position() {
local wr_pidfile="$DATADIR/"`@HOSTNAME@`"-recover.pid"
- local wr_options="--log_error='$wr_logfile' --pid-file='$wr_pidfile'"
+ local wr_options="--disable-log-error --pid-file='$wr_pidfile'"
log_notice "WSREP: Running position recovery with $wr_options"
- eval_log_error "$mysqld_cmd --wsrep_recover $wr_options"
+ eval_log_error "$mysqld_cmd --wsrep_recover $wr_options 2> $wr_logfile"
local rp="$(grep 'WSREP: Recovered position:' $wr_logfile)"
if [ -z "$rp" ]; then
diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt
index 0940b394d54..329682fb8b4 100644
--- a/sql/CMakeLists.txt
+++ b/sql/CMakeLists.txt
@@ -389,18 +389,9 @@ ADD_CUSTOM_TARGET(
SET_TARGET_PROPERTIES(GenServerSource PROPERTIES EXCLUDE_FROM_ALL TRUE)
IF(WIN32 OR HAVE_DLOPEN AND NOT DISABLE_SHARED)
- ADD_LIBRARY(udf_example MODULE udf_example.c)
+ ADD_LIBRARY(udf_example MODULE udf_example.c udf_example.def)
SET_TARGET_PROPERTIES(udf_example PROPERTIES PREFIX "")
- # udf_example depends on strings
- IF(WIN32)
- IF(MSVC)
- SET_TARGET_PROPERTIES(udf_example PROPERTIES LINK_FLAGS "/DEF:${CMAKE_CURRENT_SOURCE_DIR}/udf_example.def")
- ENDIF()
- TARGET_LINK_LIBRARIES(udf_example strings)
- ELSE()
- # udf_example is using safemutex exported by mysqld
- TARGET_LINK_LIBRARIES(udf_example mysqld)
- ENDIF()
+ TARGET_LINK_LIBRARIES(udf_example strings)
ENDIF()
CONFIGURE_FILE(
diff --git a/sql/field.cc b/sql/field.cc
index 4449d0ecf31..363c3bbf73b 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -1713,6 +1713,33 @@ int Field::store(const char *to, uint length, CHARSET_INFO *cs,
}
+static int timestamp_to_TIME(THD *thd, MYSQL_TIME *ltime, my_time_t ts,
+ ulong sec_part, ulonglong fuzzydate)
+{
+ thd->time_zone_used= 1;
+ if (ts == 0 && sec_part == 0)
+ {
+ if (fuzzydate & TIME_NO_ZERO_DATE)
+ return 1;
+ set_zero_time(ltime, MYSQL_TIMESTAMP_DATETIME);
+ }
+ else
+ {
+ thd->variables.time_zone->gmt_sec_to_TIME(ltime, ts);
+ ltime->second_part= sec_part;
+ }
+ return 0;
+}
+
+
+int Field::store_timestamp(my_time_t ts, ulong sec_part)
+{
+ MYSQL_TIME ltime;
+ THD *thd= get_thd();
+ timestamp_to_TIME(thd, &ltime, ts, sec_part, 0);
+ return store_time_dec(&ltime, decimals());
+}
+
/**
Pack the field into a format suitable for storage and transfer.
@@ -4810,6 +4837,13 @@ Field_timestamp::Field_timestamp(uchar *ptr_arg, uint32 len_arg,
}
+int Field_timestamp::save_in_field(Field *to)
+{
+ ulong sec_part;
+ my_time_t ts= get_timestamp(&sec_part);
+ return to->store_timestamp(ts, sec_part);
+}
+
my_time_t Field_timestamp::get_timestamp(const uchar *pos,
ulong *sec_part) const
{
@@ -4936,6 +4970,22 @@ int Field_timestamp::store(longlong nr, bool unsigned_val)
}
+int Field_timestamp::store_timestamp(my_time_t ts, ulong sec_part)
+{
+ store_TIME(ts, sec_part);
+ if (ts == 0 && sec_part == 0 &&
+ get_thd()->variables.sql_mode & TIME_NO_ZERO_DATE)
+ {
+ ErrConvString s(
+ STRING_WITH_LEN("0000-00-00 00:00:00.000000") - (decimals() ? 6 - decimals() : 7),
+ system_charset_info);
+ set_datetime_warning(WARN_DATA_TRUNCATED, &s, MYSQL_TIMESTAMP_DATETIME, 1);
+ return 1;
+ }
+ return 0;
+}
+
+
double Field_timestamp::val_real(void)
{
return (double) Field_timestamp::val_int();
@@ -5039,22 +5089,9 @@ Field_timestamp::validate_value_in_record(THD *thd, const uchar *record) const
bool Field_timestamp::get_date(MYSQL_TIME *ltime, ulonglong fuzzydate)
{
- THD *thd= get_thd();
- thd->time_zone_used= 1;
ulong sec_part;
- my_time_t temp= get_timestamp(&sec_part);
- if (temp == 0 && sec_part == 0)
- { /* Zero time is "000000" */
- if (fuzzydate & TIME_NO_ZERO_DATE)
- return 1;
- set_zero_time(ltime, MYSQL_TIMESTAMP_DATETIME);
- }
- else
- {
- thd->variables.time_zone->gmt_sec_to_TIME(ltime, (my_time_t)temp);
- ltime->second_part= sec_part;
- }
- return 0;
+ my_time_t ts= get_timestamp(&sec_part);
+ return timestamp_to_TIME(get_thd(), ltime, ts, sec_part, fuzzydate);
}
@@ -5104,36 +5141,6 @@ int Field_timestamp::set_time()
return 0;
}
-/**
- Mark the field as having an explicit default value.
-
- @param value if available, the value that the field is being set to
- @returns whether the explicit default bit was set
-
- @note
- Fields that have an explicit default value should not be updated
- automatically via the DEFAULT or ON UPDATE functions. The functions
- that deal with data change functionality (INSERT/UPDATE/LOAD),
- determine if there is an explicit value for each field before performing
- the data change, and call this method to mark the field.
-
- For timestamp columns, the only case where a column is not marked
- as been given a value are:
- - It's explicitly assigned with DEFAULT
- - We assign NULL to a timestamp field that is defined as NOT NULL.
- This is how MySQL has worked since it's start.
-*/
-
-bool Field_timestamp::set_explicit_default(Item *value)
-{
- if (((value->type() == Item::DEFAULT_VALUE_ITEM &&
- !((Item_default_value*)value)->arg) ||
- (!maybe_null() && value->null_value)))
- return false;
- set_has_explicit_value();
- return true;
-}
-
#ifdef NOT_USED
static void store_native(ulonglong num, uchar *to, uint bytes)
{
diff --git a/sql/field.h b/sql/field.h
index 73a0ec8bbd3..7ad47df3909 100644
--- a/sql/field.h
+++ b/sql/field.h
@@ -213,7 +213,8 @@ protected:
CHARSET_INFO *cs, const char *str, size_t length,
my_decimal *buf)
{
- m_error= str2my_decimal(mask, str, length, cs,
+ DBUG_ASSERT(length < UINT_MAX32);
+ m_error= str2my_decimal(mask, str, (uint) length, cs,
buf, (const char **) &m_end_of_num);
// E_DEC_TRUNCATED means a very minor truncation: '1e-100' -> 0
m_edom= m_error && m_error != E_DEC_TRUNCATED;
@@ -657,12 +658,16 @@ protected:
static void do_field_real(Copy_field *copy);
static void do_field_string(Copy_field *copy);
static void do_field_temporal(Copy_field *copy);
+ static void do_field_timestamp(Copy_field *copy);
static void do_field_decimal(Copy_field *copy);
public:
static void *operator new(size_t size, MEM_ROOT *mem_root) throw ()
{ return alloc_root(mem_root, size); }
static void *operator new(size_t size) throw ()
- { return thd_alloc(current_thd, size); }
+ {
+ DBUG_ASSERT(size < UINT_MAX32);
+ return thd_alloc(current_thd, (uint) size);
+ }
static void operator delete(void *ptr_arg, size_t size) { TRASH(ptr_arg, size); }
static void operator delete(void *ptr, MEM_ROOT *mem_root)
{ DBUG_ASSERT(0); }
@@ -812,16 +817,26 @@ public:
virtual int store(longlong nr, bool unsigned_val)=0;
virtual int store_decimal(const my_decimal *d)=0;
virtual int store_time_dec(MYSQL_TIME *ltime, uint dec);
+ virtual int store_timestamp(my_time_t timestamp, ulong sec_part);
int store_time(MYSQL_TIME *ltime)
{ return store_time_dec(ltime, TIME_SECOND_PART_DIGITS); }
int store(const char *to, uint length, CHARSET_INFO *cs,
enum_check_fields check_level);
int store(const LEX_STRING *ls, CHARSET_INFO *cs)
- { return store(ls->str, ls->length, cs); }
+ {
+ DBUG_ASSERT(ls->length < UINT_MAX32);
+ return store(ls->str, (uint) ls->length, cs);
+ }
int store(const LEX_CSTRING *ls, CHARSET_INFO *cs)
- { return store(ls->str, ls->length, cs); }
+ {
+ DBUG_ASSERT(ls->length < UINT_MAX32);
+ return store(ls->str, (uint) ls->length, cs);
+ }
int store(const LEX_CSTRING &ls, CHARSET_INFO *cs)
- { return store(ls.str, ls.length, cs); }
+ {
+ DBUG_ASSERT(ls.length < UINT_MAX32);
+ return store(ls.str, (uint) ls.length, cs);
+ }
virtual double val_real(void)=0;
virtual longlong val_int(void)=0;
virtual bool val_bool(void)= 0;
@@ -982,7 +997,7 @@ public:
{
return bitmap_is_set(&table->has_value_set, field_index);
}
- virtual bool set_explicit_default(Item *value);
+ bool set_explicit_default(Item *value);
/**
Evaluates the @c UPDATE default function, if one exists, and stores the
@@ -2385,11 +2400,14 @@ public:
TABLE_SHARE *share);
const Type_handler *type_handler() const { return &type_handler_timestamp; }
enum ha_base_keytype key_type() const { return HA_KEYTYPE_ULONG_INT; }
+ Copy_func *get_copy_func(const Field *from) const;
int store(const char *to,uint length,CHARSET_INFO *charset);
int store(double nr);
int store(longlong nr, bool unsigned_val);
int store_time_dec(MYSQL_TIME *ltime, uint dec);
int store_decimal(const my_decimal *);
+ int store_timestamp(my_time_t timestamp, ulong sec_part);
+ int save_in_field(Field *to);
double val_real(void);
longlong val_int(void);
String *val_str(String*,String *);
@@ -2400,7 +2418,6 @@ public:
void sql_type(String &str) const;
bool zero_pack() const { return 0; }
int set_time();
- bool set_explicit_default(Item *value);
int evaluate_update_default_function()
{
int res= 0;
@@ -2509,7 +2526,7 @@ public:
class Field_timestampf :public Field_timestamp_with_dec {
int save_field_metadata(uchar *metadata_ptr)
{
- *metadata_ptr= decimals();
+ *metadata_ptr= (uchar) decimals();
return 1;
}
public:
@@ -2777,7 +2794,7 @@ class Field_timef :public Field_time_with_dec {
void store_TIME(MYSQL_TIME *ltime);
int save_field_metadata(uchar *metadata_ptr)
{
- *metadata_ptr= decimals();
+ *metadata_ptr= (uchar) decimals();
return 1;
}
public:
@@ -2939,7 +2956,7 @@ class Field_datetimef :public Field_datetime_with_dec {
bool get_TIME(MYSQL_TIME *ltime, const uchar *pos, ulonglong fuzzydate) const;
int save_field_metadata(uchar *metadata_ptr)
{
- *metadata_ptr= decimals();
+ *metadata_ptr= (uchar) decimals();
return 1;
}
public:
@@ -3582,7 +3599,7 @@ public:
enum storage_type { GEOM_STORAGE_WKB= 0, GEOM_STORAGE_BINARY= 1};
enum storage_type storage;
- Field_geom(uchar *ptr_arg, uchar *null_ptr_arg, uint null_bit_arg,
+ Field_geom(uchar *ptr_arg, uchar *null_ptr_arg, uchar null_bit_arg,
enum utype unireg_check_arg, const LEX_CSTRING *field_name_arg,
TABLE_SHARE *share, uint blob_pack_length,
enum geometry_type geom_type_arg, uint field_srid)
@@ -3988,7 +4005,8 @@ class Column_definition: public Sql_alloc,
*pos ; pos++, len++)
{
size_t length= charset->cset->numchars(charset, *pos, *pos + *len);
- *tot_length+= length;
+ DBUG_ASSERT(length < UINT_MAX32);
+ *tot_length+= (uint) length;
set_if_bigger(*max_length, (uint32)length);
}
}
diff --git a/sql/field_conv.cc b/sql/field_conv.cc
index d97c9f1fd04..a817db51569 100644
--- a/sql/field_conv.cc
+++ b/sql/field_conv.cc
@@ -417,6 +417,13 @@ void Field::do_field_decimal(Copy_field *copy)
}
+void Field::do_field_timestamp(Copy_field *copy)
+{
+ // XXX why couldn't we do it everywhere?
+ copy->from_field->save_in_field(copy->to_field);
+}
+
+
void Field::do_field_temporal(Copy_field *copy)
{
MYSQL_TIME ltime;
@@ -706,6 +713,16 @@ void Copy_field::set(Field *to,Field *from,bool save)
}
+Field::Copy_func *Field_timestamp::get_copy_func(const Field *from) const
+{
+ Field::Copy_func *copy= Field_temporal::get_copy_func(from);
+ if (copy == do_field_temporal && from->type() == MYSQL_TYPE_TIMESTAMP)
+ return do_field_timestamp;
+ else
+ return copy;
+}
+
+
Field::Copy_func *Field_temporal::get_copy_func(const Field *from) const
{
/* If types are not 100 % identical then convert trough get_date() */
diff --git a/sql/item.cc b/sql/item.cc
index 8e77a731400..92459bd6f7f 100644
--- a/sql/item.cc
+++ b/sql/item.cc
@@ -1450,6 +1450,25 @@ bool Item::get_seconds(ulonglong *sec, ulong *sec_part)
return my_decimal2seconds(dec, sec, sec_part);
}
+const MY_LOCALE *Item::locale_from_val_str()
+{
+ StringBuffer<MAX_FIELD_WIDTH> tmp;
+ String *locale_name= val_str_ascii(&tmp);
+ const MY_LOCALE *lc;
+ if (!locale_name ||
+ !(lc= my_locale_by_name(locale_name->c_ptr_safe())))
+ {
+ THD *thd= current_thd;
+ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
+ ER_UNKNOWN_LOCALE,
+ ER_THD(thd, ER_UNKNOWN_LOCALE),
+ locale_name ? locale_name->c_ptr_safe() : "NULL");
+ lc= &my_locale_en_US;
+ }
+ return lc;
+}
+
+
CHARSET_INFO *Item::default_charset()
{
return current_thd->variables.collation_connection;
diff --git a/sql/item.h b/sql/item.h
index 2dba7890d3b..e823d327441 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -491,6 +491,8 @@ struct find_selective_predicates_list_processor_data
List<st_cond_statistic> list;
};
+class MY_LOCALE;
+
class Item_equal;
class COND_EQUAL;
@@ -644,6 +646,8 @@ public:
*/
String *val_str() { return val_str(&str_value); }
+ const MY_LOCALE *locale_from_val_str();
+
LEX_CSTRING name; /* Name of item */
/* Original item name (if it was renamed)*/
const char *orig_name;
@@ -3549,7 +3553,7 @@ public:
{
str_value.set_or_copy_aligned(str, length, cs);
fix_from_value(dv, Metadata(&str_value));
- set_name(thd, name_par, safe_strlen(name_par), system_charset_info);
+ set_name(thd, name_par, (uint) safe_strlen(name_par), system_charset_info);
}
Item_string(THD *thd, const char *name_par, const char *str, uint length,
CHARSET_INFO *cs, Derivation dv, uint repertoire):
@@ -3557,7 +3561,7 @@ public:
{
str_value.set_or_copy_aligned(str, length, cs);
fix_from_value(dv, Metadata(&str_value, repertoire));
- set_name(thd, name_par, safe_strlen(name_par), system_charset_info);
+ set_name(thd, name_par, (uint) safe_strlen(name_par), system_charset_info);
}
void print_value(String *to) const
{
@@ -3679,7 +3683,7 @@ public:
Item_string(thd, str, length, system_charset_info)
{ }
Item_string_sys(THD *thd, const char *str):
- Item_string(thd, str, strlen(str), system_charset_info)
+ Item_string(thd, str, (uint) strlen(str), system_charset_info)
{ }
};
@@ -3692,7 +3696,7 @@ public:
DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII)
{ }
Item_string_ascii(THD *thd, const char *str):
- Item_string(thd, str, strlen(str), &my_charset_latin1,
+ Item_string(thd, str, (uint) strlen(str), &my_charset_latin1,
DERIVATION_COERCIBLE, MY_REPERTOIRE_ASCII)
{ }
};
@@ -3769,7 +3773,8 @@ class Item_blob :public Item_partition_func_safe_string
{
public:
Item_blob(THD *thd, const char *name_arg, uint length):
- Item_partition_func_safe_string(thd, name_arg, safe_strlen(name_arg), &my_charset_bin)
+ Item_partition_func_safe_string(thd, name_arg, (uint) safe_strlen(name_arg),
+ &my_charset_bin)
{ max_length= length; }
enum Type type() const { return TYPE_HOLDER; }
const Type_handler *type_handler() const
diff --git a/sql/item_create.cc b/sql/item_create.cc
index 8bde2dcc53a..32f47ae5b23 100644
--- a/sql/item_create.cc
+++ b/sql/item_create.cc
@@ -783,19 +783,6 @@ protected:
#endif
-class Create_func_date_format : public Create_func_arg2
-{
-public:
- virtual Item *create_2_arg(THD *thd, Item *arg1, Item *arg2);
-
- static Create_func_date_format s_singleton;
-
-protected:
- Create_func_date_format() {}
- virtual ~Create_func_date_format() {}
-};
-
-
class Create_func_datediff : public Create_func_arg2
{
public:
@@ -4051,15 +4038,6 @@ Create_func_crosses::create_2_arg(THD *thd, Item *arg1, Item *arg2)
#endif
-Create_func_date_format Create_func_date_format::s_singleton;
-
-Item*
-Create_func_date_format::create_2_arg(THD *thd, Item *arg1, Item *arg2)
-{
- return new (thd->mem_root) Item_func_date_format(thd, arg1, arg2, 0);
-}
-
-
Create_func_datediff Create_func_datediff::s_singleton;
Item*
@@ -4558,7 +4536,7 @@ Create_func_from_unixtime::create_native(THD *thd, LEX_CSTRING *name,
Item *param_1= item_list->pop();
Item *param_2= item_list->pop();
Item *ut= new (thd->mem_root) Item_func_from_unixtime(thd, param_1);
- func= new (thd->mem_root) Item_func_date_format(thd, ut, param_2, 0);
+ func= new (thd->mem_root) Item_func_date_format(thd, ut, param_2);
break;
}
default:
@@ -6511,7 +6489,7 @@ Create_func_time_format Create_func_time_format::s_singleton;
Item*
Create_func_time_format::create_2_arg(THD *thd, Item *arg1, Item *arg2)
{
- return new (thd->mem_root) Item_func_date_format(thd, arg1, arg2, 1);
+ return new (thd->mem_root) Item_func_time_format(thd, arg1, arg2);
}
@@ -6872,7 +6850,6 @@ static Native_func_registry func_array[] =
{ { C_STRING_WITH_LEN("CRC32") }, BUILDER(Create_func_crc32)},
{ { C_STRING_WITH_LEN("CROSSES") }, GEOM_BUILDER(Create_func_crosses)},
{ { C_STRING_WITH_LEN("DATEDIFF") }, BUILDER(Create_func_datediff)},
- { { C_STRING_WITH_LEN("DATE_FORMAT") }, BUILDER(Create_func_date_format)},
{ { C_STRING_WITH_LEN("DAYNAME") }, BUILDER(Create_func_dayname)},
{ { C_STRING_WITH_LEN("DAYOFMONTH") }, BUILDER(Create_func_dayofmonth)},
{ { C_STRING_WITH_LEN("DAYOFWEEK") }, BUILDER(Create_func_dayofweek)},
diff --git a/sql/item_func.h b/sql/item_func.h
index a25d9aed4d7..04045eefafb 100644
--- a/sql/item_func.h
+++ b/sql/item_func.h
@@ -928,7 +928,8 @@ class Item_decimal_typecast :public Item_func
{
my_decimal decimal_value;
public:
- Item_decimal_typecast(THD *thd, Item *a, int len, int dec): Item_func(thd, a)
+ Item_decimal_typecast(THD *thd, Item *a, uint len, uint dec)
+ :Item_func(thd, a)
{
decimals= (uint8) dec;
collation.set_numeric();
@@ -956,7 +957,7 @@ public:
class Item_double_typecast :public Item_real_func
{
public:
- Item_double_typecast(THD *thd, Item *a, int len, int dec):
+ Item_double_typecast(THD *thd, Item *a, uint len, uint dec):
Item_real_func(thd, a)
{
decimals= (uint8) dec;
@@ -2398,7 +2399,10 @@ class Item_user_var_as_out_param :public Item
public:
Item_user_var_as_out_param(THD *thd, const LEX_CSTRING *a)
:Item(thd), name(*a)
- { set_name(thd, a->str, a->length, system_charset_info); }
+ {
+ DBUG_ASSERT(a->length < UINT_MAX32);
+ set_name(thd, a->str, (uint) a->length, system_charset_info);
+ }
/* We should return something different from FIELD_ITEM here */
enum Type type() const { return STRING_ITEM;}
double val_real();
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index cb05516964c..cc3c421f185 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -2668,24 +2668,6 @@ String *Item_func_soundex::val_str(String *str)
const int FORMAT_MAX_DECIMALS= 30;
-MY_LOCALE *Item_func_format::get_locale(Item *item)
-{
- DBUG_ASSERT(arg_count == 3);
- String tmp, *locale_name= args[2]->val_str_ascii(&tmp);
- MY_LOCALE *lc;
- if (!locale_name ||
- !(lc= my_locale_by_name(locale_name->c_ptr_safe())))
- {
- THD *thd= current_thd;
- push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
- ER_UNKNOWN_LOCALE,
- ER_THD(thd, ER_UNKNOWN_LOCALE),
- locale_name ? locale_name->c_ptr_safe() : "NULL");
- lc= &my_locale_en_US;
- }
- return lc;
-}
-
void Item_func_format::fix_length_and_dec()
{
uint32 char_length= args[0]->max_char_length();
@@ -2693,7 +2675,7 @@ void Item_func_format::fix_length_and_dec()
collation.set(default_charset());
fix_char_length(char_length + max_sep_count + decimals);
if (arg_count == 3)
- locale= args[2]->basic_const_item() ? get_locale(args[2]) : NULL;
+ locale= args[2]->basic_const_item() ? args[2]->locale_from_val_str() : NULL;
else
locale= &my_locale_en_US; /* Two arguments */
}
@@ -2712,7 +2694,7 @@ String *Item_func_format::val_str_ascii(String *str)
int dec;
/* Number of characters used to represent the decimals, including '.' */
uint32 dec_length;
- MY_LOCALE *lc;
+ const MY_LOCALE *lc;
DBUG_ASSERT(fixed == 1);
dec= (int) args[1]->val_int();
@@ -2722,7 +2704,7 @@ String *Item_func_format::val_str_ascii(String *str)
return NULL;
}
- lc= locale ? locale : get_locale(args[2]);
+ lc= locale ? locale : args[2]->locale_from_val_str();
dec= set_zone(dec, 0, FORMAT_MAX_DECIMALS);
dec_length= dec ? dec+1 : 0;
diff --git a/sql/item_strfunc.h b/sql/item_strfunc.h
index 685a64816be..d73bd0b76d7 100644
--- a/sql/item_strfunc.h
+++ b/sql/item_strfunc.h
@@ -27,8 +27,6 @@
extern size_t username_char_length;
-class MY_LOCALE;
-
class Item_str_func :public Item_func
{
protected:
@@ -825,7 +823,7 @@ public:
bool fix_fields(THD *thd, Item **ref);
void fix_length_and_dec()
{
- max_length= (username_char_length +
+ max_length= (uint32) (username_char_length +
HOSTNAME_LENGTH + 1) * SYSTEM_CHARSET_MBMAXLEN;
}
const char *func_name() const { return "user"; }
@@ -867,7 +865,7 @@ public:
Item_func_sysconst(thd), context(context_arg) {}
bool fix_fields(THD *thd, Item **ref);
void fix_length_and_dec()
- { max_length= username_char_length * SYSTEM_CHARSET_MBMAXLEN; }
+ { max_length= (uint32) username_char_length * SYSTEM_CHARSET_MBMAXLEN; }
int save_in_field(Field *field, bool no_conversions)
{ return save_str_value_in_field(field, &str_value); }
const char *func_name() const { return "current_role"; }
@@ -932,14 +930,13 @@ public:
class Item_func_format :public Item_str_ascii_func
{
- MY_LOCALE *locale;
+ const MY_LOCALE *locale;
public:
Item_func_format(THD *thd, Item *org, Item *dec):
Item_str_ascii_func(thd, org, dec) {}
Item_func_format(THD *thd, Item *org, Item *dec, Item *lang):
Item_str_ascii_func(thd, org, dec, lang) {}
- MY_LOCALE *get_locale(Item *item);
String *val_str_ascii(String *);
void fix_length_and_dec();
const char *func_name() const { return "format"; }
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc
index 0657d483408..f1f69d0723b 100644
--- a/sql/item_timefunc.cc
+++ b/sql/item_timefunc.cc
@@ -455,7 +455,8 @@ err:
*/
static bool make_date_time(DATE_TIME_FORMAT *format, MYSQL_TIME *l_time,
- timestamp_type type, MY_LOCALE *locale, String *str)
+ timestamp_type type, const MY_LOCALE *locale,
+ String *str)
{
char intbuff[15];
uint hours_i;
@@ -1706,6 +1707,25 @@ void Item_func_now::print(String *str, enum_query_type query_type)
str->append(')');
}
+
+int Item_func_now_local::save_in_field(Field *field, bool no_conversions)
+{
+ if (field->type() == MYSQL_TYPE_TIMESTAMP)
+ {
+ THD *thd= field->get_thd();
+ my_time_t ts= thd->query_start();
+ uint dec= MY_MIN(decimals, field->decimals());
+ ulong sec_part= dec ? thd->query_start_sec_part() : 0;
+ sec_part-= my_time_fraction_remainder(sec_part, dec);
+ field->set_notnull();
+ ((Field_timestamp*)field)->store_TIME(ts, sec_part);
+ return 0;
+ }
+ else
+ return Item_temporal_func::save_in_field(field, no_conversions);
+}
+
+
/**
Converts current time in my_time_t to MYSQL_TIME represenatation for local
time zone. Defines time zone (local) used for whole NOW function.
@@ -1814,7 +1834,14 @@ overflow:
void Item_func_date_format::fix_length_and_dec()
{
THD* thd= current_thd;
- locale= thd->variables.lc_time_names;
+ if (!is_time_format)
+ {
+ if (arg_count < 3)
+ locale= thd->variables.lc_time_names;
+ else
+ if (args[2]->basic_const_item())
+ locale= args[2]->locale_from_val_str();
+ }
/*
Must use this_item() in case it's a local SP variable
@@ -1856,6 +1883,8 @@ bool Item_func_date_format::eq(const Item *item, bool binary_cmp) const
if (this == item)
return 1;
item_func= (Item_func_date_format*) item;
+ if (arg_count != item_func->arg_count)
+ return 0;
if (!args[0]->eq(item_func->args[0], binary_cmp))
return 0;
/*
@@ -1865,6 +1894,8 @@ bool Item_func_date_format::eq(const Item *item, bool binary_cmp) const
*/
if (!args[1]->eq(item_func->args[1], 1))
return 0;
+ if (arg_count > 2 && !args[2]->eq(item_func->args[2], 1))
+ return 0;
return 1;
}
@@ -1948,15 +1979,18 @@ String *Item_func_date_format::val_str(String *str)
String *format;
MYSQL_TIME l_time;
uint size;
- int is_time_flag = is_time_format ? TIME_TIME_ONLY : 0;
+ const MY_LOCALE *lc= 0;
DBUG_ASSERT(fixed == 1);
- if (get_arg0_date(&l_time, is_time_flag))
+ if (get_arg0_date(&l_time, is_time_format ? TIME_TIME_ONLY : 0))
return 0;
if (!(format = args[1]->val_str(str)) || !format->length())
goto null_date;
+ if (!is_time_format && !(lc= locale) && !(lc= args[2]->locale_from_val_str()))
+ goto null_date; // invalid locale
+
if (fixed_length)
size=max_length;
else
@@ -1979,7 +2013,7 @@ String *Item_func_date_format::val_str(String *str)
if (!make_date_time(&date_time_format, &l_time,
is_time_format ? MYSQL_TIMESTAMP_TIME :
MYSQL_TIMESTAMP_DATE,
- locale, str))
+ lc, str))
return str;
null_date:
diff --git a/sql/item_timefunc.h b/sql/item_timefunc.h
index a752c160557..20ecb4774b3 100644
--- a/sql/item_timefunc.h
+++ b/sql/item_timefunc.h
@@ -729,6 +729,7 @@ class Item_func_now_local :public Item_func_now
public:
Item_func_now_local(THD *thd, uint dec): Item_func_now(thd, dec) {}
const char *func_name() const { return "current_timestamp"; }
+ int save_in_field(Field *field, bool no_conversions);
virtual void store_now_in_TIME(THD *thd, MYSQL_TIME *now_time);
virtual enum Functype functype() const { return NOW_FUNC; }
Item *get_copy(THD *thd, MEM_ROOT *mem_root)
@@ -796,22 +797,24 @@ public:
class Item_func_date_format :public Item_str_func
{
- MY_LOCALE *locale;
+ const MY_LOCALE *locale;
int fixed_length;
- const bool is_time_format;
String value;
+protected:
+ bool is_time_format;
public:
- Item_func_date_format(THD *thd, Item *a, Item *b, bool is_time_format_arg):
- Item_str_func(thd, a, b), is_time_format(is_time_format_arg) {}
+ Item_func_date_format(THD *thd, Item *a, Item *b):
+ Item_str_func(thd, a, b), locale(0), is_time_format(false) {}
+ Item_func_date_format(THD *thd, Item *a, Item *b, Item *c):
+ Item_str_func(thd, a, b, c), locale(0), is_time_format(false) {}
String *val_str(String *str);
- const char *func_name() const
- { return is_time_format ? "time_format" : "date_format"; }
+ const char *func_name() const { return "date_format"; }
void fix_length_and_dec();
uint format_length(const String *format);
bool eq(const Item *item, bool binary_cmp) const;
bool check_vcol_func_processor(void *arg)
{
- if (is_time_format)
+ if (arg_count > 2)
return false;
return mark_unsupported_function(func_name(), "()", arg, VCOL_SESSION_FUNC);
}
@@ -819,6 +822,17 @@ public:
{ return get_item_copy<Item_func_date_format>(thd, mem_root, this); }
};
+class Item_func_time_format: public Item_func_date_format
+{
+public:
+ Item_func_time_format(THD *thd, Item *a, Item *b):
+ Item_func_date_format(thd, a, b) { is_time_format= true; }
+ const char *func_name() const { return "time_format"; }
+ bool check_vcol_func_processor(void *arg) { return false; }
+ Item *get_copy(THD *thd, MEM_ROOT *mem_root)
+ { return get_item_copy<Item_func_time_format>(thd, mem_root, this); }
+};
+
class Item_func_from_unixtime :public Item_datetimefunc
{
diff --git a/sql/lex.h b/sql/lex.h
index 17dd45f9c0b..ef03afb7a32 100644
--- a/sql/lex.h
+++ b/sql/lex.h
@@ -727,6 +727,7 @@ static SYMBOL sql_functions[] = {
{ "CURTIME", SYM(CURTIME)},
{ "DATE_ADD", SYM(DATE_ADD_INTERVAL)},
{ "DATE_SUB", SYM(DATE_SUB_INTERVAL)},
+ { "DATE_FORMAT", SYM(DATE_FORMAT_SYM)},
{ "DECODE", SYM(DECODE_SYM)},
{ "DENSE_RANK", SYM(DENSE_RANK_SYM)},
{ "EXTRACT", SYM(EXTRACT_SYM)},
diff --git a/sql/sql_alloc.h b/sql/sql_alloc.h
index 36fe665c475..4db12964f0a 100644
--- a/sql/sql_alloc.h
+++ b/sql/sql_alloc.h
@@ -27,11 +27,13 @@ class Sql_alloc
public:
static void *operator new(size_t size) throw ()
{
- return thd_alloc(thd_get_current_thd(), size);
+ DBUG_ASSERT(size < UINT_MAX32);
+ return thd_alloc(thd_get_current_thd(), uint(size));
}
static void *operator new[](size_t size) throw ()
{
- return thd_alloc(thd_get_current_thd(), size);
+ DBUG_ASSERT(size < UINT_MAX32);
+ return thd_alloc(thd_get_current_thd(), uint(size));
}
static void *operator new[](size_t size, MEM_ROOT *mem_root) throw ()
{ return alloc_root(mem_root, size); }
diff --git a/sql/sql_class.h b/sql/sql_class.h
index bbe074d9288..2bbcf3cd436 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -1654,6 +1654,29 @@ public:
/**
+ Implements the trivial error handler which counts errors as they happen.
+*/
+
+class Counting_error_handler : public Internal_error_handler
+{
+public:
+ int errors;
+ bool handle_condition(THD *thd,
+ uint sql_errno,
+ const char* sqlstate,
+ Sql_condition::enum_warning_level *level,
+ const char* msg,
+ Sql_condition ** cond_hdl)
+ {
+ if (*level == Sql_condition::WARN_LEVEL_ERROR)
+ errors++;
+ return false;
+ }
+ Counting_error_handler() : errors(0) {}
+};
+
+
+/**
This class is an internal error handler implementation for
DROP TABLE statements. The thing is that there may be warnings during
execution of these statements, which should not be exposed to the user.
diff --git a/sql/sql_error.h b/sql/sql_error.h
index 12344ccf78c..f8b8adc805a 100644
--- a/sql/sql_error.h
+++ b/sql/sql_error.h
@@ -837,7 +837,10 @@ public:
ErrConvString(const String *s)
: ErrConv(), str(s->ptr()), len(s->length()), cs(s->charset()) {}
const char *ptr() const
- { return err_conv(err_buffer, sizeof(err_buffer), str, len, cs); }
+ {
+ DBUG_ASSERT(len < UINT_MAX32);
+ return err_conv(err_buffer, (uint) sizeof(err_buffer), str, (uint) len, cs);
+ }
};
class ErrConvInteger : public ErrConv
diff --git a/sql/sql_join_cache.cc b/sql/sql_join_cache.cc
index 581a9cb8d1d..5b3d46fc747 100644
--- a/sql/sql_join_cache.cc
+++ b/sql/sql_join_cache.cc
@@ -3863,6 +3863,7 @@ int JOIN_TAB_SCAN_MRR::open()
/* Dynamic range access is never used with BKA */
DBUG_ASSERT(join_tab->use_quick != 2);
+ join_tab->tracker->r_scans++;
save_or_restore_used_tabs(join_tab, FALSE);
init_mrr_buff();
@@ -3906,6 +3907,8 @@ int JOIN_TAB_SCAN_MRR::next()
int rc= join_tab->table->file->multi_range_read_next((range_id_t*)ptr) ? -1 : 0;
if (!rc)
{
+ join_tab->tracker->r_rows++;
+ join_tab->tracker->r_rows_after_where++;
/*
If a record in in an incremental cache contains no fields then the
association for the last record in cache will be equal to cache->end_pos
diff --git a/sql/sql_lex.h b/sql/sql_lex.h
index 87891c87344..245e995bc2d 100644
--- a/sql/sql_lex.h
+++ b/sql/sql_lex.h
@@ -3424,9 +3424,13 @@ public:
Item_param *add_placeholder(THD *thd, const LEX_CSTRING *name,
uint pos_in_query, uint len_in_query);
Item_param *add_placeholder(THD *thd, const LEX_CSTRING *name,
- const char *pos, const char *end)
+ const char *start, const char *end)
{
- return add_placeholder(thd, name, pos - substatement_query(thd), end - pos);
+ size_t pos= start - substatement_query(thd);
+ size_t len= end - start;
+ DBUG_ASSERT(pos < UINT_MAX32);
+ DBUG_ASSERT(len < UINT_MAX32);
+ return add_placeholder(thd, name, (uint) pos, (uint) len);
}
/* Integer range FOR LOOP methods */
diff --git a/sql/sql_string.h b/sql/sql_string.h
index 5dbb110135f..af3765443c5 100644
--- a/sql/sql_string.h
+++ b/sql/sql_string.h
@@ -469,9 +469,21 @@ public:
}
bool append(const String &s);
bool append(const char *s);
- bool append(const LEX_STRING *ls) { return append(ls->str, ls->length); }
- bool append(const LEX_CSTRING *ls) { return append(ls->str, ls->length); }
- bool append(const LEX_CSTRING &ls) { return append(ls.str, ls.length); }
+ bool append(const LEX_STRING *ls)
+ {
+ DBUG_ASSERT(ls->length < UINT_MAX32);
+ return append(ls->str, (uint32) ls->length);
+ }
+ bool append(const LEX_CSTRING *ls)
+ {
+ DBUG_ASSERT(ls->length < UINT_MAX32);
+ return append(ls->str, (uint32) ls->length);
+ }
+ bool append(const LEX_CSTRING &ls)
+ {
+ DBUG_ASSERT(ls.length < UINT_MAX32);
+ return append(ls.str, (uint32) ls.length);
+ }
bool append(const char *s, uint32 arg_length);
bool append(const char *s, uint32 arg_length, CHARSET_INFO *cs);
bool append_ulonglong(ulonglong val);
@@ -563,7 +575,8 @@ public:
}
void q_append(const LEX_CSTRING *ls)
{
- q_append(ls->str, ls->length);
+ DBUG_ASSERT(ls->length < UINT_MAX32);
+ q_append(ls->str, (uint32) ls->length);
}
void write_at_position(int position, uint32 value)
@@ -647,7 +660,9 @@ public:
}
bool append_for_single_quote(const char *st)
{
- return append_for_single_quote(st, strlen(st));
+ size_t len= strlen(st);
+ DBUG_ASSERT(len < UINT_MAX32);
+ return append_for_single_quote(st, (uint32) len);
}
/* Swap two string objects. Efficient way to exchange data without memcpy. */
@@ -691,10 +706,11 @@ public:
}
void q_net_store_data(const uchar *from, size_t length)
{
+ DBUG_ASSERT(length < UINT_MAX32);
DBUG_ASSERT(Alloced_length >= (str_length + length +
net_length_size(length)));
q_net_store_length(length);
- q_append((const char *)from, length);
+ q_append((const char *)from, (uint32) length);
}
};
diff --git a/sql/sql_time.h b/sql/sql_time.h
index c6462c93e21..91a026512c1 100644
--- a/sql/sql_time.h
+++ b/sql/sql_time.h
@@ -105,7 +105,7 @@ inline void datetime_to_date(MYSQL_TIME *ltime)
DBUG_ASSERT(ltime->time_type == MYSQL_TIMESTAMP_DATE ||
ltime->time_type == MYSQL_TIMESTAMP_DATETIME);
DBUG_ASSERT(ltime->neg == 0);
- ltime->hour= ltime->minute= ltime->second= ltime->second_part= 0;
+ ltime->second_part= ltime->hour= ltime->minute= ltime->second= 0;
ltime->time_type= MYSQL_TIMESTAMP_DATE;
}
inline void date_to_datetime(MYSQL_TIME *ltime)
diff --git a/sql/sql_type.cc b/sql/sql_type.cc
index 3f6ba89fb50..df79a55f8e6 100644
--- a/sql/sql_type.cc
+++ b/sql/sql_type.cc
@@ -160,7 +160,7 @@ void Type_std_attributes::count_decimal_length(Item **item, uint nitems)
}
int precision= MY_MIN(max_int_part + decimals, DECIMAL_MAX_PRECISION);
fix_char_length(my_decimal_precision_to_length_no_truncation(precision,
- decimals,
+ (uint8) decimals,
unsigned_flag));
}
@@ -998,7 +998,8 @@ Type_handler::make_num_distinct_aggregator_field(MEM_ROOT *mem_root,
Field_double(NULL, item->max_length,
(uchar *) (item->maybe_null ? "" : 0),
item->maybe_null ? 1 : 0, Field::NONE,
- &item->name, item->decimals, 0, item->unsigned_flag);
+ &item->name, (uint8) item->decimals,
+ 0, item->unsigned_flag);
}
@@ -1011,7 +1012,8 @@ Type_handler_float::make_num_distinct_aggregator_field(MEM_ROOT *mem_root,
Field_float(NULL, item->max_length,
(uchar *) (item->maybe_null ? "" : 0),
item->maybe_null ? 1 : 0, Field::NONE,
- &item->name, item->decimals, 0, item->unsigned_flag);
+ &item->name, (uint8) item->decimals,
+ 0, item->unsigned_flag);
}
@@ -1026,7 +1028,8 @@ Type_handler_decimal_result::make_num_distinct_aggregator_field(
Field_new_decimal(NULL, item->max_length,
(uchar *) (item->maybe_null ? "" : 0),
item->maybe_null ? 1 : 0, Field::NONE,
- &item->name, item->decimals, 0, item->unsigned_flag);
+ &item->name, (uint8) item->decimals,
+ 0, item->unsigned_flag);
}
@@ -1143,7 +1146,7 @@ Field *Type_handler_newdecimal::make_conversion_table_field(TABLE *table,
const
{
int precision= metadata >> 8;
- uint decimals= metadata & 0x00ff;
+ uint8 decimals= metadata & 0x00ff;
uint32 max_length= my_decimal_precision_to_length(precision, decimals, false);
DBUG_ASSERT(decimals <= DECIMAL_MAX_SCALE);
return new (table->in_use->mem_root)
@@ -2058,7 +2061,7 @@ Field *Type_handler_float::make_table_field(const LEX_CSTRING *name,
Field_float(addr.ptr, attr.max_char_length(),
addr.null_ptr, addr.null_bit,
Field::NONE, name,
- attr.decimals, 0/*zerofill*/, attr.unsigned_flag);
+ (uint8) attr.decimals, 0/*zerofill*/, attr.unsigned_flag);
}
@@ -2071,7 +2074,7 @@ Field *Type_handler_double::make_table_field(const LEX_CSTRING *name,
Field_double(addr.ptr, attr.max_char_length(),
addr.null_ptr, addr.null_bit,
Field::NONE, name,
- attr.decimals, 0/*zerofill*/, attr.unsigned_flag);
+ (uint8) attr.decimals, 0/*zerofill*/, attr.unsigned_flag);
}
@@ -2091,7 +2094,7 @@ Type_handler_olddecimal::make_table_field(const LEX_CSTRING *name,
DBUG_ASSERT(0);
return new (table->in_use->mem_root)
Field_decimal(addr.ptr, attr.max_length, addr.null_ptr, addr.null_bit,
- Field::NONE, name, attr.decimals,
+ Field::NONE, name, (uint8) attr.decimals,
0/*zerofill*/,attr.unsigned_flag);
}
@@ -2102,8 +2105,8 @@ Type_handler_newdecimal::make_table_field(const LEX_CSTRING *name,
const Type_all_attributes &attr,
TABLE *table) const
{
- uint8 dec= attr.decimals;
- uint8 intg= attr.decimal_precision() - dec;
+ uint8 dec= (uint8) attr.decimals;
+ uint8 intg= (uint8) (attr.decimal_precision() - dec);
uint32 len= attr.max_char_length();
/*
@@ -5313,7 +5316,7 @@ static void wrong_precision_error(uint errcode, Item *a,
*/
bool get_length_and_scale(ulonglong length, ulonglong decimals,
- ulong *out_length, uint *out_decimals,
+ uint *out_length, uint *out_decimals,
uint max_precision, uint max_scale,
Item *a)
{
@@ -5330,7 +5333,7 @@ bool get_length_and_scale(ulonglong length, ulonglong decimals,
*out_decimals= (uint) decimals;
my_decimal_trim(&length, out_decimals);
- *out_length= (ulong) length;
+ *out_length= (uint) length;
if (*out_length < *out_decimals)
{
@@ -5396,8 +5399,7 @@ Item *Type_handler_decimal_result::
create_typecast_item(THD *thd, Item *item,
const Type_cast_attributes &attr) const
{
- ulong len;
- uint dec;
+ uint len, dec;
if (get_length_and_scale(attr.length(), attr.decimals(), &len, &dec,
DECIMAL_MAX_PRECISION, DECIMAL_MAX_SCALE, item))
return NULL;
@@ -5409,8 +5411,7 @@ Item *Type_handler_double::
create_typecast_item(THD *thd, Item *item,
const Type_cast_attributes &attr) const
{
- ulong len;
- uint dec;
+ uint len, dec;
if (!attr.length_specified())
return new (thd->mem_root) Item_double_typecast(thd, item,
DBL_DIG + 7,
diff --git a/sql/sql_type.h b/sql/sql_type.h
index 4b23daeeb11..d71c48fb7a2 100644
--- a/sql/sql_type.h
+++ b/sql/sql_type.h
@@ -227,7 +227,7 @@ static inline uint32
char_to_byte_length_safe(size_t char_length_arg, uint32 mbmaxlen_arg)
{
ulonglong tmp= ((ulonglong) char_length_arg) * mbmaxlen_arg;
- return tmp > UINT_MAX32 ? UINT_MAX32 : static_cast<uint32>(tmp);
+ return tmp > UINT_MAX32 ? (uint32) UINT_MAX32 : static_cast<uint32>(tmp);
}
/**
@@ -531,11 +531,12 @@ class Name: private LEX_CSTRING
public:
Name(const char *str_arg, uint length_arg)
{
+ DBUG_ASSERT(length_arg < UINT_MAX32);
LEX_CSTRING::str= str_arg;
LEX_CSTRING::length= length_arg;
}
const char *ptr() const { return LEX_CSTRING::str; }
- uint length() const { return LEX_CSTRING::length; }
+ uint length() const { return (uint) LEX_CSTRING::length; }
};
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 5543a3e2597..e4555ddeb11 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -875,7 +875,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
Comments for TOKENS.
For each token, please include in the same line a comment that contains
the following tags:
- SQL-2011-N : Non Reserved keywird as per SQL-2011
+ SQL-2011-N : Non Reserved keyword as per SQL-2011
SQL-2003-R : Reserved keyword as per SQL-2003
SQL-2003-N : Non Reserved keyword as per SQL-2003
SQL-1999-R : Reserved keyword as per SQL-1999
@@ -1010,6 +1010,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token DATA_SYM /* SQL-2003-N */
%token DATETIME
%token DATE_ADD_INTERVAL /* MYSQL-FUNC */
+%token DATE_FORMAT_SYM /* MYSQL-FUNC */
%token DATE_SUB_INTERVAL /* MYSQL-FUNC */
%token DATE_SYM /* SQL-2003-R */
%token DAY_HOUR_SYM
@@ -9818,6 +9819,18 @@ function_call_nonkeyword:
if ($$ == NULL)
MYSQL_YYABORT;
}
+ | DATE_FORMAT_SYM '(' expr ',' expr ')'
+ {
+ $$= new (thd->mem_root) Item_func_date_format(thd, $3, $5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
+ | DATE_FORMAT_SYM '(' expr ',' expr ',' expr ')'
+ {
+ $$= new (thd->mem_root) Item_func_date_format(thd, $3, $5, $7);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| DECODE_SYM '(' expr ',' expr ')'
{
$$= new (thd->mem_root) Item_func_decode(thd, $3, $5);
@@ -14737,6 +14750,7 @@ keyword_sp_not_data_type:
| CYCLE_SYM {}
| DATA_SYM {}
| DATAFILE_SYM {}
+ | DATE_FORMAT_SYM {}
| DAY_SYM {}
| DECODE_SYM {}
| DEFINER_SYM {}
diff --git a/sql/sql_yacc_ora.yy b/sql/sql_yacc_ora.yy
index 1a3ce0ab372..a430512f3a1 100644
--- a/sql/sql_yacc_ora.yy
+++ b/sql/sql_yacc_ora.yy
@@ -284,7 +284,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
Comments for TOKENS.
For each token, please include in the same line a comment that contains
the following tags:
- SQL-2011-N : Non Reserved keywird as per SQL-2011
+ SQL-2011-N : Non Reserved keyword as per SQL-2011
SQL-2003-R : Reserved keyword as per SQL-2003
SQL-2003-N : Non Reserved keyword as per SQL-2003
SQL-1999-R : Reserved keyword as per SQL-1999
@@ -419,6 +419,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token DATA_SYM /* SQL-2003-N */
%token DATETIME
%token DATE_ADD_INTERVAL /* MYSQL-FUNC */
+%token DATE_FORMAT_SYM /* MYSQL-FUNC */
%token DATE_SUB_INTERVAL /* MYSQL-FUNC */
%token DATE_SYM /* SQL-2003-R */
%token DAY_HOUR_SYM
@@ -9463,6 +9464,18 @@ column_default_non_parenthesized_expr:
if ($$ == NULL)
MYSQL_YYABORT;
}
+ | DATE_FORMAT_SYM '(' expr ',' expr ')'
+ {
+ $$= new (thd->mem_root) Item_func_date_format(thd, $3, $5);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
+ | DATE_FORMAT_SYM '(' expr ',' expr ',' expr ')'
+ {
+ $$= new (thd->mem_root) Item_func_date_format(thd, $3, $5, $7);
+ if ($$ == NULL)
+ MYSQL_YYABORT;
+ }
| DECODE_SYM '(' expr ',' decode_when_list ')'
{
$5->push_front($3, thd->mem_root);
@@ -14900,6 +14913,7 @@ keyword_sp_not_data_type:
| CYCLE_SYM {}
| DATA_SYM {}
| DATAFILE_SYM {}
+ | DATE_FORMAT_SYM {}
| DAY_SYM {}
| DECODE_SYM {}
| DEFINER_SYM {}
diff --git a/sql/table.cc b/sql/table.cc
index eb9e848d549..7dd93d5107d 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -5066,23 +5066,28 @@ void TABLE_LIST::cleanup_items()
int TABLE_LIST::view_check_option(THD *thd, bool ignore_failure)
{
- /* VIEW's CHECK OPTION CLAUSE */
- if (check_option && check_option->val_int() == 0)
- {
- TABLE_LIST *main_view= top_table();
- const char *name_db= (main_view->view ? main_view->view_db.str :
- main_view->db);
- const char *name_table= (main_view->view ? main_view->view_name.str :
- main_view->table_name);
- my_error(ER_VIEW_CHECK_FAILED, MYF(ignore_failure ? ME_JUST_WARNING : 0),
- name_db, name_table);
- return ignore_failure ? VIEW_CHECK_SKIP : VIEW_CHECK_ERROR;
- }
- int result= table->verify_constraints(ignore_failure);
- /* We check thd->error() because it can be set by conversion problem. */
- if (thd->is_error())
- return(VIEW_CHECK_ERROR);
- return result;
+ if (check_option)
+ {
+ /* VIEW's CHECK OPTION CLAUSE */
+ Counting_error_handler ceh;
+ thd->push_internal_handler(&ceh);
+ bool res= check_option->val_int() == 0;
+ thd->pop_internal_handler();
+ if (ceh.errors)
+ return(VIEW_CHECK_ERROR);
+ if (res)
+ {
+ TABLE_LIST *main_view= top_table();
+ const char *name_db= (main_view->view ? main_view->view_db.str :
+ main_view->db);
+ const char *name_table= (main_view->view ? main_view->view_name.str :
+ main_view->table_name);
+ my_error(ER_VIEW_CHECK_FAILED, MYF(ignore_failure ? ME_JUST_WARNING : 0),
+ name_db, name_table);
+ return ignore_failure ? VIEW_CHECK_SKIP : VIEW_CHECK_ERROR;
+ }
+ }
+ return table->verify_constraints(ignore_failure);
}
diff --git a/storage/connect/CMakeLists.txt b/storage/connect/CMakeLists.txt
index a1594f8797c..d422b076fc2 100644
--- a/storage/connect/CMakeLists.txt
+++ b/storage/connect/CMakeLists.txt
@@ -247,7 +247,7 @@ ENDIF(CONNECT_WITH_ODBC)
#
# JDBC with MongoDB Java Driver included but disabled
#
-OPTION(CONNECT_WITH_MONGO "Compile CONNECT storage engine with MONGO support" ON)
+#OPTION(CONNECT_WITH_MONGO "Compile CONNECT storage engine with MONGO support" ON)
OPTION(CONNECT_WITH_JDBC "Compile CONNECT storage engine with JDBC support" ON)
IF(CONNECT_WITH_JDBC)
@@ -303,7 +303,7 @@ IF(CONNECT_WITH_MONGO)
C:/mongo-c-driver/lib
D:/mongo-c-driver/lib)
ENDIF(WIN32)
- FIND_PACKAGE(libmongoc-1.0 1.7)
+ FIND_PACKAGE(libmongoc-1.0 1.7 QUIET)
IF (libmongoc-1.0_FOUND)
INCLUDE_DIRECTORIES(${MONGOC_INCLUDE_DIRS})
SET(MONGOC_LIBRARY ${MONGOC_LIBRARIES})
diff --git a/storage/connect/preparse.h b/storage/connect/preparse.h
index f16624548fb..3db7a2af1cd 100644
--- a/storage/connect/preparse.h
+++ b/storage/connect/preparse.h
@@ -8,7 +8,7 @@
/***********************************************************************/
typedef struct _datpar {
const char *Format; // Points to format to decode
- char *Curp; // Points to current parsing position
+ const char *Curp; // Points to current parsing position
char *InFmt; // Start of input format
char *OutFmt; // Start of output format
int Index[8]; // Indexes of date values
diff --git a/storage/connect/tabmysql.h b/storage/connect/tabmysql.h
index 39fba87bcc9..4b61c7eb762 100644
--- a/storage/connect/tabmysql.h
+++ b/storage/connect/tabmysql.h
@@ -135,7 +135,7 @@ class TDBMYSQL : public TDBEXT {
int m_Rc; // Return code from command
//int AftRows; // The number of affected rows
int N; // The current table index
- int Port; // MySQL port number (0 = default)
+ unsigned Port; // MySQL port number (0 = default)
//int Nparm; // The number of statement parameters
//int Quoted; // The identifier quoting level
}; // end of class TDBMYSQL
diff --git a/storage/connect/tabutil.cpp b/storage/connect/tabutil.cpp
index 9ab3d5e8806..e17e092661f 100644
--- a/storage/connect/tabutil.cpp
+++ b/storage/connect/tabutil.cpp
@@ -120,7 +120,7 @@ PQRYRES TabColumns(PGLOBAL g, THD *thd, const char *db,
FLD_REM, FLD_NO, FLD_CHARSET};
unsigned int length[] = {0, 4, 16, 4, 4, 4, 4, 4, 0, 32, 32};
PCSZ fmt;
- char *pn, *tn, *fld, *colname, *chset, v;
+ char *pn, *tn, *fld, *colname, v; //, *chset;
int i, n, ncol = sizeof(buftyp) / sizeof(int);
int prec, len, type, scale;
int zconv = GetConvSize();
@@ -185,7 +185,7 @@ PQRYRES TabColumns(PGLOBAL g, THD *thd, const char *db,
colname = (char *)fp->field_name.str;
crp->Kdata->SetValue(colname, i);
- chset = (char *)fp->charset()->name;
+// chset = (char *)fp->charset()->name;
// v = (!strcmp(chset, "binary")) ? 'B' : 0;
v = 0;
diff --git a/storage/innobase/include/page0page.h b/storage/innobase/include/page0page.h
index 3b6a0215249..53a58de229d 100644
--- a/storage/innobase/include/page0page.h
+++ b/storage/innobase/include/page0page.h
@@ -328,10 +328,10 @@ bool
page_rec_is_leaf(const page_t* rec)
{
const page_t* page = page_align(rec);
- ut_ad(rec - page >= page_get_infimum_offset(page));
+ ut_ad(ulint(rec - page) >= page_get_infimum_offset(page));
bool leaf = page_is_leaf(page);
ut_ad(!page_rec_is_comp(rec)
- || !page_rec_is_user_rec_low(rec - page)
+ || !page_rec_is_user_rec_low(ulint(rec - page))
|| leaf == !rec_get_node_ptr_flag(rec));
return leaf;
}
diff --git a/storage/innobase/page/page0cur.cc b/storage/innobase/page/page0cur.cc
index 23a11fcfaa3..113c31e44ae 100644
--- a/storage/innobase/page/page0cur.cc
+++ b/storage/innobase/page/page0cur.cc
@@ -1176,9 +1176,15 @@ page_cur_parse_insert_rec(
ut_memcpy(buf + mismatch_index, ptr, end_seg_len);
if (page_is_comp(page)) {
+ /* Make rec_get_offsets() and rec_offs_make_valid() happy. */
+ ut_d(rec_set_heap_no_new(buf + origin_offset,
+ PAGE_HEAP_NO_USER_LOW));
rec_set_info_and_status_bits(buf + origin_offset,
info_and_status_bits);
} else {
+ /* Make rec_get_offsets() and rec_offs_make_valid() happy. */
+ ut_d(rec_set_heap_no_old(buf + origin_offset,
+ PAGE_HEAP_NO_USER_LOW));
rec_set_info_bits_old(buf + origin_offset,
info_and_status_bits);
}
diff --git a/storage/innobase/rem/rem0rec.cc b/storage/innobase/rem/rem0rec.cc
index d4d1a2bab14..c26614d5eae 100644
--- a/storage/innobase/rem/rem0rec.cc
+++ b/storage/innobase/rem/rem0rec.cc
@@ -589,8 +589,6 @@ rec_get_offsets_func(
infimum and supremum record based on the heap number. */
ut_d(const bool is_user_rec = rec_get_heap_no_old(rec)
>= PAGE_HEAP_NO_USER_LOW);
- ut_ad(n <= ulint(index->n_fields + !leaf) || index->is_dummy
- || dict_index_is_ibuf(index));
/* The infimum and supremum records carry 1 field. */
ut_ad(is_user_rec || n == 1);
ut_ad(!is_user_rec || leaf || index->is_dummy
@@ -1130,17 +1128,14 @@ rec_convert_dtuple_to_rec_old(
/* Calculate the offset of the origin in the physical record */
rec = buf + rec_get_converted_extra_size(data_size, n_fields, n_ext);
-#ifdef UNIV_DEBUG
- /* Suppress Valgrind warnings of ut_ad()
- in mach_write_to_1(), mach_write_to_2() et al. */
- memset(buf, 0xff, rec - buf + data_size);
-#endif /* UNIV_DEBUG */
/* Store the number of fields */
rec_set_n_fields_old(rec, n_fields);
/* Set the info bits of the record */
rec_set_info_bits_old(rec, dtuple_get_info_bits(dtuple)
& REC_INFO_BITS_MASK);
+ /* Make rec_get_offsets() and rec_offs_make_valid() happy. */
+ ut_d(rec_set_heap_no_old(rec, PAGE_HEAP_NO_USER_LOW));
/* Store the data and the offsets */
@@ -1254,6 +1249,8 @@ rec_convert_dtuple_to_rec_comp(
temp = false;
}
} else {
+ /* Make rec_get_offsets() and rec_offs_make_valid() happy. */
+ ut_d(rec_set_heap_no_new(rec, PAGE_HEAP_NO_USER_LOW));
nulls = rec - (REC_N_NEW_EXTRA_BYTES + 1);
switch (UNIV_EXPECT(status, REC_STATUS_ORDINARY)) {
@@ -1570,7 +1567,8 @@ rec_copy_prefix_to_dtuple_func(
ulint* offsets = offsets_;
rec_offs_init(offsets_);
- ut_ad(is_leaf || n_fields <= index->n_uniq + 1);
+ ut_ad(is_leaf || n_fields
+ <= dict_index_get_n_unique_in_tree_nonleaf(index) + 1);
offsets = rec_get_offsets(rec, index, offsets, is_leaf,
n_fields, &heap);
diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc
index c109afe2682..5ebe6cdf619 100644
--- a/storage/innobase/row/row0import.cc
+++ b/storage/innobase/row/row0import.cc
@@ -1716,16 +1716,12 @@ PageConverter::update_records(
m_rec_iter.open(block);
- while (!m_rec_iter.end()) {
+ if (!page_is_leaf(block->frame)) {
+ return DB_SUCCESS;
+ }
+ while (!m_rec_iter.end()) {
rec_t* rec = m_rec_iter.current();
-
- /* FIXME: Move out of the loop */
-
- if (rec_get_status(rec) == REC_STATUS_NODE_PTR) {
- break;
- }
-
ibool deleted = rec_get_deleted_flag(rec, comp);
/* For the clustered index we have to adjust the BLOB
diff --git a/storage/innobase/row/row0log.cc b/storage/innobase/row/row0log.cc
index 58c316c6327..a5dff03c16f 100644
--- a/storage/innobase/row/row0log.cc
+++ b/storage/innobase/row/row0log.cc
@@ -879,7 +879,7 @@ row_log_table_low_redundant(
size = rec_get_converted_size_temp(
index, tuple->fields, tuple->n_fields, &extra_size);
- ulint v_size = ventry
+ ulint v_size = num_v
? rec_get_converted_size_temp_v(index, ventry) : 0;
mrec_size = ROW_LOG_HEADER_SIZE + size + v_size + (extra_size >= 0x80);
@@ -935,12 +935,10 @@ row_log_table_low_redundant(
rec_convert_dtuple_to_temp(
b + extra_size, index, tuple->fields, tuple->n_fields);
b += size;
- if (ventry) {
+ ut_ad(!num_v == !v_size);
+ if (num_v) {
rec_convert_dtuple_to_temp_v(b, new_index, ventry);
b += v_size;
- }
-
- if (num_v) {
if (o_ventry) {
rec_convert_dtuple_to_temp_v(
b, new_index, o_ventry);
diff --git a/storage/maria/ha_maria.cc b/storage/maria/ha_maria.cc
index 84bd1353134..4c078b11e4d 100644
--- a/storage/maria/ha_maria.cc
+++ b/storage/maria/ha_maria.cc
@@ -989,7 +989,7 @@ int_table_flags(HA_NULL_IN_KEY | HA_CAN_FULLTEXT | HA_CAN_SQL_HANDLER |
HA_DUPLICATE_POS | HA_CAN_INDEX_BLOBS | HA_AUTO_PART_KEY |
HA_FILE_BASED | HA_CAN_GEOMETRY | CANNOT_ROLLBACK_FLAG |
HA_CAN_BIT_FIELD | HA_CAN_RTREEKEYS | HA_CAN_REPAIR |
- HA_CAN_VIRTUAL_COLUMNS |
+ HA_CAN_VIRTUAL_COLUMNS | HA_CAN_EXPORT |
HA_HAS_RECORDS | HA_STATS_RECORDS_IS_EXACT |
HA_CAN_TABLES_WITHOUT_ROLLBACK),
can_enable_indexes(1), bulk_insert_single_undo(BULK_INSERT_NONE)
diff --git a/storage/maria/ma_create.c b/storage/maria/ma_create.c
index 44436de0445..80626bff6d5 100644
--- a/storage/maria/ma_create.c
+++ b/storage/maria/ma_create.c
@@ -660,11 +660,24 @@ int maria_create(const char *name, enum data_file_type datafile_type,
if (length > max_key_length)
max_key_length= length;
- tot_length+= ((max_rows/(ulong) (((uint) maria_block_size -
+
+ if (tot_length == ULLONG_MAX)
+ continue;
+
+ ulonglong tot_length_part= (max_rows/(ulong) (((uint) maria_block_size -
MAX_KEYPAGE_HEADER_SIZE -
KEYPAGE_CHECKSUM_SIZE)/
- (length*2))) *
- maria_block_size);
+ (length*2)));
+ if (tot_length_part >= (ULLONG_MAX / maria_block_size +
+ ULLONG_MAX % maria_block_size))
+ tot_length= ULLONG_MAX;
+ else
+ {
+ if (tot_length > ULLONG_MAX - tot_length_part * maria_block_size)
+ tot_length= ULLONG_MAX;
+ else
+ tot_length+= tot_length_part * maria_block_size;
+ }
}
unique_key_parts=0;
@@ -673,11 +686,24 @@ int maria_create(const char *name, enum data_file_type datafile_type,
uniquedef->key=keys+i;
unique_key_parts+=uniquedef->keysegs;
share.state.key_root[keys+i]= HA_OFFSET_ERROR;
- tot_length+= (max_rows/(ulong) (((uint) maria_block_size -
+
+ if (tot_length == ULLONG_MAX)
+ continue;
+ ulonglong tot_length_part= (max_rows/(ulong) (((uint) maria_block_size -
MAX_KEYPAGE_HEADER_SIZE -
KEYPAGE_CHECKSUM_SIZE) /
- ((MARIA_UNIQUE_HASH_LENGTH + pointer)*2)))*
- (ulong) maria_block_size;
+ ((MARIA_UNIQUE_HASH_LENGTH + pointer)*2)));
+
+ if (tot_length_part >= (ULLONG_MAX / maria_block_size +
+ ULLONG_MAX % maria_block_size))
+ tot_length= ULLONG_MAX;
+ else
+ {
+ if (tot_length > ULLONG_MAX - tot_length_part * maria_block_size)
+ tot_length= ULLONG_MAX;
+ else
+ tot_length+= tot_length_part * maria_block_size;
+ }
}
keys+=uniques; /* Each unique has 1 key */
key_segs+=uniques; /* Each unique has 1 key seg */
@@ -746,8 +772,7 @@ int maria_create(const char *name, enum data_file_type datafile_type,
Get estimate for index file length (this may be wrong for FT keys)
This is used for pointers to other key pages.
*/
- tmp= (tot_length + maria_block_size * keys *
- MARIA_INDEX_BLOCK_MARGIN) / maria_block_size;
+ tmp= (tot_length / maria_block_size + keys * MARIA_INDEX_BLOCK_MARGIN);
/*
use maximum of key_file_length we calculated and key_file_length value we
diff --git a/storage/mroonga/CMakeLists.txt b/storage/mroonga/CMakeLists.txt
index be14e73bd65..39dad9ce16b 100644
--- a/storage/mroonga/CMakeLists.txt
+++ b/storage/mroonga/CMakeLists.txt
@@ -293,6 +293,9 @@ link_directories(
if(MRN_BUNDLED)
target_link_libraries(mroonga ${MRN_LIBRARIES})
+ if(NOT TARGET mroonga)
+ return()
+ endif()
else()
add_library(mroonga MODULE ${MRN_ALL_SOURCES})