summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2023-02-16 10:25:34 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2023-02-16 10:25:34 +0200
commit0d55914d968fcc557d4429a37c61fbdedd9352a6 (patch)
treec119f75d1aac283025ff379b07cab78b6d8b384d
parent37a46e21815fe1176d211a89283d9bc17fcd39db (diff)
parentb12cd88ce177b475066734b06c1e3a4445a62d86 (diff)
downloadmariadb-git-0d55914d968fcc557d4429a37c61fbdedd9352a6.tar.gz
Merge 10.8 into 10.9
-rw-r--r--client/mysqlbinlog.cc4
-rw-r--r--dbug/dbug.c6
-rwxr-xr-xdebian/autobake-deb.sh7
-rw-r--r--extra/mariabackup/xtrabackup.cc32
-rw-r--r--extra/mariabackup/xtrabackup.h2
-rw-r--r--extra/wolfssl/CMakeLists.txt3
-rw-r--r--include/ilist.h7
-rw-r--r--include/my_atomic_wrapper.h2
-rw-r--r--include/my_counter.h2
-rw-r--r--include/span.h2
-rw-r--r--mysql-test/include/ctype_casefolding.inc18
-rw-r--r--mysql-test/main/ctype_ldml.result51
-rw-r--r--mysql-test/main/ctype_ldml.test28
-rw-r--r--mysql-test/main/ctype_uca.result8
-rw-r--r--mysql-test/main/ctype_utf8_uca.result174
-rw-r--r--mysql-test/main/ctype_utf8_uca.test29
-rw-r--r--mysql-test/main/ctype_utf8mb4_uca.result174
-rw-r--r--mysql-test/main/ctype_utf8mb4_uca.test29
-rw-r--r--mysql-test/main/debug_sync.result59
-rw-r--r--mysql-test/main/debug_sync.test41
-rw-r--r--mysql-test/main/delete.result32
-rw-r--r--mysql-test/main/delete.test41
-rw-r--r--mysql-test/main/empty_table.result58
-rw-r--r--mysql-test/main/empty_table.test36
-rw-r--r--mysql-test/main/fetch_first.result28
-rw-r--r--mysql-test/main/fetch_first.test19
-rw-r--r--mysql-test/main/func_json.result23
-rw-r--r--mysql-test/main/func_json.test24
-rw-r--r--mysql-test/main/multi_update.result120
-rw-r--r--mysql-test/main/multi_update.test70
-rw-r--r--mysql-test/main/update_use_source.result12
-rwxr-xr-xmysql-test/mariadb-test-run.pl25
-rw-r--r--mysql-test/suite/galera/r/MDEV-24143.result23
-rw-r--r--mysql-test/suite/galera/r/galera_backup_start.result6
-rw-r--r--mysql-test/suite/galera/r/galera_bf_abort_get_lock.result18
-rw-r--r--mysql-test/suite/galera/r/galera_locks_funcs.result24
-rw-r--r--mysql-test/suite/galera/t/MDEV-24143.test20
-rw-r--r--mysql-test/suite/galera/t/galera_backup_start.test6
-rw-r--r--mysql-test/suite/galera/t/galera_bf_abort_get_lock.test36
-rw-r--r--mysql-test/suite/galera/t/galera_locks_funcs.test18
-rw-r--r--mysql-test/suite/innodb/r/alter_copy.result2
-rw-r--r--mysql-test/suite/innodb/r/insert_into_empty.result18
-rw-r--r--mysql-test/suite/innodb/r/mdev-14846.result3
-rw-r--r--mysql-test/suite/innodb/r/recovery_memory.result20
-rw-r--r--mysql-test/suite/innodb/t/alter_copy.test2
-rw-r--r--mysql-test/suite/innodb/t/insert_into_empty.opt1
-rw-r--r--mysql-test/suite/innodb/t/insert_into_empty.test19
-rw-r--r--mysql-test/suite/innodb/t/mdev-14846.test3
-rw-r--r--mysql-test/suite/innodb/t/recovery_memory.test30
-rw-r--r--mysql-test/suite/mariabackup/full_backup_win.result12
-rw-r--r--mysql-test/suite/mariabackup/full_backup_win.test24
-rw-r--r--mysql-test/suite/plugins/r/locales.result5
-rw-r--r--mysql-test/suite/plugins/t/locales.test1
-rw-r--r--mysql-test/suite/rpl/r/rpl_delayed_parallel_slave_sbm.result12
-rw-r--r--mysql-test/suite/rpl/t/rpl_delayed_parallel_slave_sbm.test17
-rw-r--r--mysql-test/suite/stress/r/deadlock_drop_table.result3
-rw-r--r--mysql-test/suite/stress/t/deadlock_drop_table.test7
-rw-r--r--mysql-test/suite/sys_vars/r/debug_sync_basic.result6
-rw-r--r--mysql-test/suite/sys_vars/r/sysvars_debug.result2
-rw-r--r--mysys/charset.c2
-rw-r--r--mysys/my_largepage.c2
-rw-r--r--mysys/stacktrace.c8
-rw-r--r--mysys_ssl/my_crypt.cc2
-rw-r--r--plugin/handler_socket/handlersocket/database.cpp8
-rw-r--r--plugin/handler_socket/handlersocket/database.hpp6
-rw-r--r--plugin/handler_socket/handlersocket/hstcpsvr.hpp2
-rw-r--r--plugin/handler_socket/handlersocket/hstcpsvr_worker.hpp2
-rw-r--r--plugin/handler_socket/libhsclient/hstcpcli.hpp2
-rw-r--r--plugin/handler_socket/libhsclient/util.hpp2
-rw-r--r--plugin/query_response_time/query_response_time.cc2
-rw-r--r--plugin/type_inet/sql_type_inet.h4
-rw-r--r--plugin/versioning/versioning.cc8
-rw-r--r--sql/debug_sync.cc230
-rw-r--r--sql/derived_handler.h2
-rw-r--r--sql/event_data_objects.cc8
-rw-r--r--sql/event_db_repository.h2
-rw-r--r--sql/field.h8
-rw-r--r--sql/filesort_utils.h19
-rw-r--r--sql/gcalc_slicescan.h2
-rw-r--r--sql/group_by_handler.h2
-rw-r--r--sql/handler.h24
-rw-r--r--sql/hash_filo.h2
-rw-r--r--sql/hostname.cc3
-rw-r--r--sql/item.h20
-rw-r--r--sql/item_buff.cc2
-rw-r--r--sql/item_cmpfunc.h55
-rw-r--r--sql/item_create.cc729
-rw-r--r--sql/item_create.h32
-rw-r--r--sql/item_func.cc2
-rw-r--r--sql/item_func.h5
-rw-r--r--sql/item_geofunc.cc220
-rw-r--r--sql/item_jsonfunc.cc2
-rw-r--r--sql/item_subselect.cc4
-rw-r--r--sql/item_subselect.h2
-rw-r--r--sql/item_sum.h2
-rw-r--r--sql/log.cc10
-rw-r--r--sql/log.h12
-rw-r--r--sql/log_event.cc6
-rw-r--r--sql/log_event.h31
-rw-r--r--sql/mdl.cc14
-rw-r--r--sql/mdl.h8
-rw-r--r--sql/multi_range_read.h2
-rw-r--r--sql/my_apc.h2
-rw-r--r--sql/my_json_writer.h6
-rw-r--r--sql/mysqld.cc17
-rw-r--r--sql/opt_range.cc23
-rw-r--r--sql/opt_range.h4
-rw-r--r--sql/opt_table_elimination.cc4
-rw-r--r--sql/parse_file.h6
-rw-r--r--sql/partition_element.h2
-rw-r--r--sql/partition_info.h2
-rw-r--r--sql/protocol.h2
-rw-r--r--sql/rowid_filter.h4
-rw-r--r--sql/rpl_injector.cc4
-rw-r--r--sql/rpl_injector.h2
-rw-r--r--sql/semisync_master.h2
-rw-r--r--sql/semisync_master_ack_receiver.h2
-rw-r--r--sql/semisync_slave.h2
-rw-r--r--sql/session_tracker.h2
-rw-r--r--sql/set_var.h6
-rw-r--r--sql/share/errmsg-utf8.txt12
-rw-r--r--sql/slave.cc15
-rw-r--r--sql/sp.h2
-rw-r--r--sql/sp_head.h66
-rw-r--r--sql/spatial.h32
-rw-r--r--sql/sql_acl.cc15
-rw-r--r--sql/sql_acl.h12
-rw-r--r--sql/sql_admin.h24
-rw-r--r--sql/sql_alter.h15
-rw-r--r--sql/sql_base.cc2
-rw-r--r--sql/sql_base.h2
-rw-r--r--sql/sql_bitmap.h2
-rw-r--r--sql/sql_cache.h14
-rw-r--r--sql/sql_class.cc4
-rw-r--r--sql/sql_class.h30
-rw-r--r--sql/sql_cmd.h6
-rw-r--r--sql/sql_crypt.h4
-rw-r--r--sql/sql_cursor.cc4
-rw-r--r--sql/sql_debug.h2
-rw-r--r--sql/sql_error.h10
-rw-r--r--sql/sql_explain.h4
-rw-r--r--sql/sql_expression_cache.h4
-rw-r--r--sql/sql_hset.h13
-rw-r--r--sql/sql_join_cache.h4
-rw-r--r--sql/sql_lex.h24
-rw-r--r--sql/sql_lifo_buffer.h2
-rw-r--r--sql/sql_locale.cc4
-rw-r--r--sql/sql_parse.cc10
-rw-r--r--sql/sql_partition_admin.h21
-rw-r--r--sql/sql_prepare.cc4
-rw-r--r--sql/sql_prepare.h2
-rw-r--r--sql/sql_schema.h2
-rw-r--r--sql/sql_select.cc8
-rw-r--r--sql/sql_select.h4
-rw-r--r--sql/sql_show.cc6
-rw-r--r--sql/sql_signal.h9
-rw-r--r--sql/sql_statistics.cc4
-rw-r--r--sql/sql_string.cc28
-rw-r--r--sql/sql_string.h7
-rw-r--r--sql/sql_table.cc4
-rw-r--r--sql/sql_truncate.h6
-rw-r--r--sql/sql_type.h127
-rw-r--r--sql/sql_type_fixedbin_storage.h4
-rw-r--r--sql/sql_window.cc4
-rw-r--r--sql/sql_window.h2
-rw-r--r--sql/sql_yacc.yy4
-rw-r--r--sql/structs.h4
-rw-r--r--sql/sys_vars_shared.h2
-rw-r--r--sql/table.h21
-rw-r--r--sql/threadpool.h5
-rw-r--r--sql/threadpool_generic.cc3
-rw-r--r--sql/tztime.cc4
-rw-r--r--sql/tztime.h4
-rw-r--r--sql/vers_string.h2
-rw-r--r--sql/win_tzname_data.h3
-rw-r--r--sql/wsrep_client_service.cc40
-rw-r--r--sql/wsrep_condition_variable.h3
-rw-r--r--sql/wsrep_high_priority_service.cc10
-rw-r--r--sql/wsrep_schema.cc7
-rw-r--r--sql/wsrep_server_state.cc3
-rw-r--r--storage/archive/ha_archive.h4
-rw-r--r--storage/blackhole/ha_blackhole.h4
-rw-r--r--storage/connect/blkfil.h12
-rw-r--r--storage/connect/block.h2
-rw-r--r--storage/connect/bson.h4
-rw-r--r--storage/connect/bsonudf.cpp4
-rw-r--r--storage/connect/bsonudf.h2
-rw-r--r--storage/connect/catalog.h2
-rw-r--r--storage/connect/colblk.h6
-rw-r--r--storage/connect/csort.h2
-rw-r--r--storage/connect/filamdbf.h2
-rw-r--r--storage/connect/filter.h2
-rw-r--r--storage/connect/jsonudf.h2
-rw-r--r--storage/connect/tabbson.h2
-rw-r--r--storage/connect/tabdos.h2
-rw-r--r--storage/connect/tabfix.h2
-rw-r--r--storage/connect/tabfmt.h2
-rw-r--r--storage/connect/tabjmg.h2
-rw-r--r--storage/connect/tabjson.h2
-rw-r--r--storage/connect/tabmul.h2
-rw-r--r--storage/connect/taboccur.h4
-rw-r--r--storage/connect/tabpivot.h2
-rw-r--r--storage/connect/tabsys.h4
-rw-r--r--storage/connect/tabutil.h2
-rw-r--r--storage/connect/tabvct.h2
-rw-r--r--storage/connect/tabvir.h4
-rw-r--r--storage/connect/tabxcl.h2
-rw-r--r--storage/connect/tabzip.h4
-rw-r--r--storage/connect/xtable.h2
-rw-r--r--storage/example/ha_example.h4
-rw-r--r--storage/federated/ha_federated.cc2
-rw-r--r--storage/federated/ha_federated.h2
-rw-r--r--storage/federatedx/federatedx_io_null.cc4
-rw-r--r--storage/federatedx/federatedx_pushdown.cc4
-rw-r--r--storage/federatedx/ha_federatedx.cc2
-rw-r--r--storage/federatedx/ha_federatedx.h2
-rw-r--r--storage/heap/ha_heap.h2
-rw-r--r--storage/innobase/CMakeLists.txt6
-rw-r--r--storage/innobase/buf/buf0buf.cc77
-rw-r--r--storage/innobase/buf/buf0lru.cc9
-rw-r--r--storage/innobase/buf/buf0rea.cc3
-rw-r--r--storage/innobase/dict/dict0defrag_bg.cc2
-rw-r--r--storage/innobase/dict/dict0stats.cc4
-rw-r--r--storage/innobase/fil/fil0crypt.cc5
-rw-r--r--storage/innobase/fsp/fsp0fsp.cc2
-rw-r--r--storage/innobase/handler/ha_innodb.cc4
-rw-r--r--storage/innobase/ibuf/ibuf0ibuf.cc4
-rw-r--r--storage/innobase/include/buf0buf.h29
-rw-r--r--storage/innobase/include/dict0types.h2
-rw-r--r--storage/innobase/include/mtr0mtr.h16
-rw-r--r--storage/innobase/include/mtr0types.h4
-rw-r--r--storage/innobase/include/rem0rec.h2
-rw-r--r--storage/innobase/include/row0mysql.h2
-rw-r--r--storage/innobase/include/trx0purge.h2
-rw-r--r--storage/innobase/include/ut0new.h2
-rw-r--r--storage/innobase/include/ut0ut.h2
-rw-r--r--storage/innobase/log/log0recv.cc36
-rw-r--r--storage/innobase/mtr/mtr0mtr.cc19
-rw-r--r--storage/innobase/rem/rem0cmp.cc9
-rw-r--r--storage/innobase/row/row0import.cc6
-rw-r--r--storage/maria/ha_maria.h2
-rw-r--r--storage/maria/ha_s3.cc2
-rw-r--r--storage/maria/s3_func.c6
-rw-r--r--storage/mroonga/lib/mrn_count_skip_checker.cpp3
-rw-r--r--storage/mroonga/lib/mrn_database_repairer.cpp3
-rw-r--r--storage/mroonga/lib/mrn_field_normalizer.cpp3
-rw-r--r--storage/mroonga/lib/mrn_multiple_column_key_codec.cpp3
-rw-r--r--storage/mroonga/lib/mrn_query_parser.cpp3
-rw-r--r--storage/mroonga/lib/mrn_time_converter.cpp6
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/array.hpp2
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/cursor.hpp4
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/dat.hpp10
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/id-cursor.cpp2
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/key.hpp2
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/predictive-cursor.cpp2
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/prefix-cursor.cpp2
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/string.hpp4
-rw-r--r--storage/mroonga/vendor/groonga/lib/dat/trie.cpp2
-rw-r--r--storage/myisam/ha_myisam.h2
-rw-r--r--storage/perfschema/cursor_by_account.h3
-rw-r--r--storage/perfschema/cursor_by_host.h3
-rw-r--r--storage/perfschema/cursor_by_thread.h3
-rw-r--r--storage/perfschema/cursor_by_thread_connect_attr.h3
-rw-r--r--storage/perfschema/cursor_by_user.h3
-rw-r--r--storage/perfschema/ha_perfschema.cc3
-rw-r--r--storage/perfschema/pfs_engine_table.cc6
-rw-r--r--storage/perfschema/pfs_engine_table.h33
-rw-r--r--storage/perfschema/pfs_visitor.cc90
-rw-r--r--storage/perfschema/pfs_visitor.h12
-rw-r--r--storage/perfschema/table_accounts.h3
-rw-r--r--storage/perfschema/table_all_instr.h3
-rw-r--r--storage/perfschema/table_esgs_by_account_by_event_name.h3
-rw-r--r--storage/perfschema/table_esgs_by_host_by_event_name.h3
-rw-r--r--storage/perfschema/table_esgs_by_thread_by_event_name.h3
-rw-r--r--storage/perfschema/table_esgs_by_user_by_event_name.h3
-rw-r--r--storage/perfschema/table_esgs_global_by_event_name.h3
-rw-r--r--storage/perfschema/table_esms_by_account_by_event_name.h3
-rw-r--r--storage/perfschema/table_esms_by_digest.h3
-rw-r--r--storage/perfschema/table_esms_by_host_by_event_name.h3
-rw-r--r--storage/perfschema/table_esms_by_thread_by_event_name.h3
-rw-r--r--storage/perfschema/table_esms_by_user_by_event_name.h3
-rw-r--r--storage/perfschema/table_esms_global_by_event_name.h3
-rw-r--r--storage/perfschema/table_events_stages.h12
-rw-r--r--storage/perfschema/table_events_statements.h12
-rw-r--r--storage/perfschema/table_events_waits.h12
-rw-r--r--storage/perfschema/table_events_waits_summary.h3
-rw-r--r--storage/perfschema/table_ews_by_account_by_event_name.h3
-rw-r--r--storage/perfschema/table_ews_by_host_by_event_name.h3
-rw-r--r--storage/perfschema/table_ews_by_thread_by_event_name.h3
-rw-r--r--storage/perfschema/table_ews_by_user_by_event_name.h3
-rw-r--r--storage/perfschema/table_ews_global_by_event_name.h3
-rw-r--r--storage/perfschema/table_file_instances.h3
-rw-r--r--storage/perfschema/table_file_summary_by_event_name.h3
-rw-r--r--storage/perfschema/table_file_summary_by_instance.h3
-rw-r--r--storage/perfschema/table_host_cache.h3
-rw-r--r--storage/perfschema/table_hosts.h3
-rw-r--r--storage/perfschema/table_os_global_by_type.h3
-rw-r--r--storage/perfschema/table_performance_timers.h3
-rw-r--r--storage/perfschema/table_session_account_connect_attrs.h3
-rw-r--r--storage/perfschema/table_session_connect_attrs.h3
-rw-r--r--storage/perfschema/table_setup_actors.h3
-rw-r--r--storage/perfschema/table_setup_consumers.h3
-rw-r--r--storage/perfschema/table_setup_instruments.h3
-rw-r--r--storage/perfschema/table_setup_objects.h3
-rw-r--r--storage/perfschema/table_setup_timers.h3
-rw-r--r--storage/perfschema/table_socket_instances.h3
-rw-r--r--storage/perfschema/table_socket_summary_by_event_name.h3
-rw-r--r--storage/perfschema/table_socket_summary_by_instance.h3
-rw-r--r--storage/perfschema/table_sync_instances.h9
-rw-r--r--storage/perfschema/table_threads.h3
-rw-r--r--storage/perfschema/table_tiws_by_index_usage.h3
-rw-r--r--storage/perfschema/table_tiws_by_table.h3
-rw-r--r--storage/perfschema/table_tlws_by_table.h3
-rw-r--r--storage/perfschema/table_users.h3
-rw-r--r--storage/rocksdb/build_rocksdb.cmake8
-rw-r--r--storage/rocksdb/ha_rocksdb.cc2
-rw-r--r--storage/rocksdb/ha_rocksdb.h2
-rw-r--r--storage/rocksdb/rdb_compact_filter.h4
-rw-r--r--storage/rocksdb/rdb_datadic.h4
-rw-r--r--storage/rocksdb/rdb_mutex_wrapper.h4
-rw-r--r--storage/rocksdb/rdb_threads.h2
-rw-r--r--storage/sequence/sequence.cc2
-rw-r--r--storage/spider/spd_db_include.h20
-rw-r--r--strings/ctype-uca.c37
-rw-r--r--tpool/aio_linux.cc1
-rw-r--r--win/packaging/heidisql.cmake2
-rw-r--r--win/packaging/heidisql.wxi.in31
327 files changed, 2896 insertions, 1771 deletions
diff --git a/client/mysqlbinlog.cc b/client/mysqlbinlog.cc
index cd5e65c6161..8942ee6d1dc 100644
--- a/client/mysqlbinlog.cc
+++ b/client/mysqlbinlog.cc
@@ -326,8 +326,8 @@ class Load_log_processor
}
public:
- Load_log_processor() {}
- ~Load_log_processor() {}
+ Load_log_processor() = default;
+ ~Load_log_processor() = default;
int init()
{
diff --git a/dbug/dbug.c b/dbug/dbug.c
index 54d4c22ad93..ac645c64454 100644
--- a/dbug/dbug.c
+++ b/dbug/dbug.c
@@ -86,7 +86,7 @@
#include <m_string.h>
#include <errno.h>
#ifdef HAVE_gcov
-extern void __gcov_flush();
+#include <gcov.h>
#endif
#ifndef DBUG_OFF
@@ -2212,7 +2212,7 @@ void _db_suicide_()
fprintf(stderr, "SIGKILL myself\n");
fflush(stderr);
#ifdef HAVE_gcov
- __gcov_flush();
+ __gcov_dump();
#endif
retval= kill(getpid(), SIGKILL);
@@ -2262,7 +2262,7 @@ my_bool _db_my_assert(const char *file, int line, const char *msg)
fprintf(stderr, "%s:%d: assert: %s\n", file, line, msg);
fflush(stderr);
#ifdef HAVE_gcov
- __gcov_flush();
+ __gcov_dump();
#endif
}
return a;
diff --git a/debian/autobake-deb.sh b/debian/autobake-deb.sh
index 36cf47b6b94..fde6cba4532 100755
--- a/debian/autobake-deb.sh
+++ b/debian/autobake-deb.sh
@@ -104,13 +104,6 @@ fi
case "${LSBNAME}"
in
# Debian
- stretch)
- # MDEV-16525 libzstd-dev-1.1.3 minimum version
- sed -e '/libzstd-dev/d' \
- -e 's/libcurl4/libcurl3/g' -i debian/control
- remove_rocksdb_tools
- disable_pmem
- ;&
buster)
disable_libfmt
replace_uring_with_aio
diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc
index 6f5e99449c8..34b345a0dca 100644
--- a/extra/mariabackup/xtrabackup.cc
+++ b/extra/mariabackup/xtrabackup.cc
@@ -1290,7 +1290,7 @@ struct my_option xb_client_options[]= {
{"rsync", OPT_RSYNC,
"Uses the rsync utility to optimize local file "
- "transfers. When this option is specified, innobackupex uses rsync "
+ "transfers. When this option is specified, " XB_TOOL_NAME " uses rsync "
"to copy all non-InnoDB files instead of spawning a separate cp for "
"each file, which can be much faster for servers with a large number "
"of databases or tables. This option cannot be used together with "
@@ -1398,7 +1398,7 @@ struct my_option xb_client_options[]= {
{"ftwrl-wait-query-type", OPT_LOCK_WAIT_QUERY_TYPE,
"This option specifies which types of queries are allowed to complete "
- "before innobackupex will issue the global lock. Default is all.",
+ "before " XB_TOOL_NAME " will issue the global lock. Default is all.",
(uchar *) &opt_lock_wait_query_type, (uchar *) &opt_lock_wait_query_type,
&query_type_typelib, GET_ENUM, REQUIRED_ARG, QUERY_TYPE_ALL, 0, 0, 0, 0,
0},
@@ -1418,26 +1418,26 @@ struct my_option xb_client_options[]= {
NULL, NULL, 0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
{"kill-long-queries-timeout", OPT_KILL_LONG_QUERIES_TIMEOUT,
- "This option specifies the number of seconds innobackupex waits "
+ "This option specifies the number of seconds " XB_TOOL_NAME " waits "
"between starting FLUSH TABLES WITH READ LOCK and killing those "
"queries that block it. Default is 0 seconds, which means "
- "innobackupex will not attempt to kill any queries.",
+ XB_TOOL_NAME " will not attempt to kill any queries.",
(uchar *) &opt_kill_long_queries_timeout,
(uchar *) &opt_kill_long_queries_timeout, 0, GET_UINT, REQUIRED_ARG, 0, 0,
0, 0, 0, 0},
{"ftwrl-wait-timeout", OPT_LOCK_WAIT_TIMEOUT,
- "This option specifies time in seconds that innobackupex should wait "
+ "This option specifies time in seconds that " XB_TOOL_NAME " should wait "
"for queries that would block FTWRL before running it. If there are "
- "still such queries when the timeout expires, innobackupex terminates "
- "with an error. Default is 0, in which case innobackupex does not "
+ "still such queries when the timeout expires, " XB_TOOL_NAME " terminates "
+ "with an error. Default is 0, in which case " XB_TOOL_NAME " does not "
"wait for queries to complete and starts FTWRL immediately.",
(uchar *) &opt_lock_wait_timeout, (uchar *) &opt_lock_wait_timeout, 0,
GET_UINT, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"ftwrl-wait-threshold", OPT_LOCK_WAIT_THRESHOLD,
"This option specifies the query run time threshold which is used by "
- "innobackupex to detect long-running queries with a non-zero value "
+ XB_TOOL_NAME " to detect long-running queries with a non-zero value "
"of --ftwrl-wait-timeout. FTWRL is not started until such "
"long-running queries exist. This option has no effect if "
"--ftwrl-wait-timeout is 0. Default value is 60 seconds.",
@@ -1918,6 +1918,17 @@ xb_get_one_option(const struct my_option *opt,
break;
case OPT_INNODB_FLUSH_METHOD:
+#ifdef _WIN32
+ /* From: storage/innobase/handler/ha_innodb.cc:innodb_init_params */
+ switch (srv_file_flush_method) {
+ case SRV_ALL_O_DIRECT_FSYNC + 1 /* "async_unbuffered"="unbuffered" */:
+ srv_file_flush_method= SRV_ALL_O_DIRECT_FSYNC;
+ break;
+ case SRV_ALL_O_DIRECT_FSYNC + 2 /* "normal"="fsync" */:
+ srv_file_flush_method= SRV_FSYNC;
+ break;
+ }
+#endif
ut_a(srv_file_flush_method
<= IF_WIN(SRV_ALL_O_DIRECT_FSYNC, SRV_O_DIRECT_NO_FSYNC));
ADD_PRINT_PARAM_OPT(innodb_flush_method_names[srv_file_flush_method]);
@@ -3104,7 +3115,8 @@ static bool xtrabackup_copy_logfile()
mysql_mutex_lock(&recv_sys.mutex);
}
- msg(">> log scanned up to (" LSN_PF ")", recv_sys.lsn);
+ if (verbose)
+ msg(">> log scanned up to (" LSN_PF ")", recv_sys.lsn);
return false;
}
@@ -3147,7 +3159,7 @@ static void log_copying_thread()
my_thread_end();
}
-/** whether io_watching_thread() is active; protected by log_sys.mutex */
+/** whether io_watching_thread() is active; protected by recv_sys.mutex */
static bool have_io_watching_thread;
/* io throttle watching (rough) */
diff --git a/extra/mariabackup/xtrabackup.h b/extra/mariabackup/xtrabackup.h
index 11de9eeaf48..6c58d64165d 100644
--- a/extra/mariabackup/xtrabackup.h
+++ b/extra/mariabackup/xtrabackup.h
@@ -27,6 +27,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
#include "changed_page_bitmap.h"
#include <set>
+#define XB_TOOL_NAME "mariadb-backup"
+
struct xb_delta_info_t
{
xb_delta_info_t(ulint page_size, ulint zip_size, uint32_t space_id)
diff --git a/extra/wolfssl/CMakeLists.txt b/extra/wolfssl/CMakeLists.txt
index 5f446663dc8..390a618ac91 100644
--- a/extra/wolfssl/CMakeLists.txt
+++ b/extra/wolfssl/CMakeLists.txt
@@ -12,6 +12,9 @@ IF(MSVC_INTEL)
SET(WOLFSSL_X86_64_BUILD 1)
SET(HAVE_INTEL_RDSEED 1)
SET(HAVE_INTEL_RDRAND 1)
+ELSEIF(CMAKE_ASM_COMPILER_ID MATCHES "Clang" AND CMAKE_VERSION VERSION_LESS 3.16)
+
+ # WolfSSL 5.5.4 bug workaround below does not work, due to some CMake bug
ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64")
SET(WOLFSSL_X86_64_BUILD 1)
IF(CMAKE_C_COMPILER_ID MATCHES GNU AND CMAKE_C_COMPILER_VERSION VERSION_LESS 4.9)
diff --git a/include/ilist.h b/include/ilist.h
index 265f0e2d57e..3349959e17e 100644
--- a/include/ilist.h
+++ b/include/ilist.h
@@ -27,12 +27,11 @@
// Derive your class from this struct to insert to a linked list.
template <class Tag= void> struct ilist_node
{
- ilist_node() noexcept
#ifndef DBUG_OFF
- : next(NULL), prev(NULL)
+ ilist_node() noexcept : next(NULL), prev(NULL) {}
+#else
+ ilist_node() = default;
#endif
- {
- }
ilist_node(ilist_node *next, ilist_node *prev) noexcept
: next(next), prev(prev)
diff --git a/include/my_atomic_wrapper.h b/include/my_atomic_wrapper.h
index e45aba9d22b..7b35b14d3b7 100644
--- a/include/my_atomic_wrapper.h
+++ b/include/my_atomic_wrapper.h
@@ -39,7 +39,7 @@ public:
Atomic_relaxed(const Atomic_relaxed<Type> &rhs)
{ m.store(rhs, std::memory_order_relaxed); }
Atomic_relaxed(Type val) : m(val) {}
- Atomic_relaxed() {}
+ Atomic_relaxed() = default;
Type load(std::memory_order o= std::memory_order_relaxed) const
{ return m.load(o); }
diff --git a/include/my_counter.h b/include/my_counter.h
index c5cbe296df0..f85b8e80bd7 100644
--- a/include/my_counter.h
+++ b/include/my_counter.h
@@ -31,7 +31,7 @@ public:
Atomic_counter(const Atomic_counter<Type> &rhs)
{ m_counter.store(rhs, std::memory_order_relaxed); }
Atomic_counter(Type val): m_counter(val) {}
- Atomic_counter() {}
+ Atomic_counter() = default;
Type operator++(int) { return add(1); }
Type operator--(int) { return sub(1); }
diff --git a/include/span.h b/include/span.h
index 0e8516933c6..4ea200f5494 100644
--- a/include/span.h
+++ b/include/span.h
@@ -81,7 +81,7 @@ public:
span(const span &other) : data_(other.data_), size_(other.size_) {}
- ~span(){};
+ ~span() = default;
span &operator=(const span &other)
{
diff --git a/mysql-test/include/ctype_casefolding.inc b/mysql-test/include/ctype_casefolding.inc
new file mode 100644
index 00000000000..4ee402c95ad
--- /dev/null
+++ b/mysql-test/include/ctype_casefolding.inc
@@ -0,0 +1,18 @@
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+# Uncode code points that have a variable length case mapping in utf8
+# (e.g. LOWER('2-byte-character') -> '3-byte-character'
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+DROP TABLE case_folding;
diff --git a/mysql-test/main/ctype_ldml.result b/mysql-test/main/ctype_ldml.result
index d4b24ad9af3..001ac2f0348 100644
--- a/mysql-test/main/ctype_ldml.result
+++ b/mysql-test/main/ctype_ldml.result
@@ -3039,6 +3039,51 @@ SELECT 'chž'< 'i';
SELECT 'a' COLLATE utf8_czech_test_bad_w2;
ERROR HY000: Unknown collation: 'utf8_czech_test_bad_w2'
#
+# End of 10.2 tests
+#
+#
+# Start of 10.3 tests
+#
+#
+# MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
+#
+SET NAMES utf8mb4 COLLATE utf8mb4_test_520_nopad_ci;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_test_520_nopad_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A E2B1A5 C8BA Ⱥ
+23E E2B1A6 C8BE Ⱦ
+23F C8BF E2B1BE ȿ
+240 C980 E2B1BF ɀ
+250 C990 E2B1AF ɐ
+251 C991 E2B1AD ɑ
+252 C992 E2B1B0 ɒ
+26B C9AB E2B1A2 ɫ
+271 C9B1 E2B1AE ɱ
+27D C9BD E2B1A4 ɽ
+DROP TABLE case_folding;
+#
+# End of 10.3 tests
+#
+#
# MDEV-7947 my_charset_same: strcmp() takes 0.37% in OLTP RO
#
SHOW COLLATION LIKE 'latin1_test_replace';
@@ -3046,6 +3091,9 @@ Collation Charset Id Default Compiled Sortlen
SELECT 'foo' = 'foo ' COLLATE latin1_test_replace;
ERROR HY000: Unknown collation: 'latin1_test_replace'
#
+# End of 10.5 tests
+#
+#
# MDEV-27042 UCA: Resetting contractions to ignorable does not work well
#
CREATE TABLE t1 (
@@ -3079,3 +3127,6 @@ tèl.123 10020E8B0F2E025D0E2A0E2B0E2C
ťèl.123 10020E8B0F2E025D0E2A0E2B0E2C
tex.123 10020E8B105A025D0E2A0E2B0E2C
DROP TABLE t1;
+#
+# End of 10.8 tests
+#
diff --git a/mysql-test/main/ctype_ldml.test b/mysql-test/main/ctype_ldml.test
index 447a9b4565a..c9397d73126 100644
--- a/mysql-test/main/ctype_ldml.test
+++ b/mysql-test/main/ctype_ldml.test
@@ -611,6 +611,27 @@ SELECT 'chž'< 'i';
--error ER_UNKNOWN_COLLATION
SELECT 'a' COLLATE utf8_czech_test_bad_w2;
+--echo #
+--echo # End of 10.2 tests
+--echo #
+
+
+--echo #
+--echo # Start of 10.3 tests
+--echo #
+
+--echo #
+--echo # MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
+--echo #
+
+SET NAMES utf8mb4 COLLATE utf8mb4_test_520_nopad_ci;
+--source include/ctype_casefolding.inc
+
+
+--echo #
+--echo # End of 10.3 tests
+--echo #
+
--echo #
--echo # MDEV-7947 my_charset_same: strcmp() takes 0.37% in OLTP RO
@@ -620,6 +641,9 @@ SHOW COLLATION LIKE 'latin1_test_replace';
--error ER_UNKNOWN_COLLATION
SELECT 'foo' = 'foo ' COLLATE latin1_test_replace;
+--echo #
+--echo # End of 10.5 tests
+--echo #
--echo #
--echo # MDEV-27042 UCA: Resetting contractions to ignorable does not work well
@@ -639,3 +663,7 @@ SELECT * FROM t1 WHERE phone='123' ORDER BY BINARY phone;
SELECT * FROM t1 WHERE phone<>'123' ORDER BY BINARY phone;
SELECT phone, HEX(WEIGHT_STRING(phone)) FROM t1 ORDER BY phone, BINARY phone;
DROP TABLE t1;
+
+--echo #
+--echo # End of 10.8 tests
+--echo #
diff --git a/mysql-test/main/ctype_uca.result b/mysql-test/main/ctype_uca.result
index a2f9822131b..b567137df1e 100644
--- a/mysql-test/main/ctype_uca.result
+++ b/mysql-test/main/ctype_uca.result
@@ -8204,7 +8204,7 @@ INSERT INTO t1 VALUES (_utf32 0x2CEE);
SELECT hex(c), hex(lower(c)), hex(upper(c)), hex(weight_string(c)), c
FROM t1 ORDER BY c, BINARY c;
hex(c) hex(lower(c)) hex(upper(c)) hex(weight_string(c)) c
-C8BA C8BA 1214 Ⱥ
+C8BA E2B1A5 C8BA 1214 Ⱥ
E2B1A5 E2B1A5 C8BA 1214 ⱥ
C680 C680 C983 122D ƀ
C983 C680 C983 122D Ƀ
@@ -8229,7 +8229,7 @@ E2B1AA E2B1AA E2B1A9 1328 ⱪ
C8BD C69A C8BD 133B Ƚ
E2B1A0 E2B1A1 E2B1A0 133F Ⱡ
E2B1A1 E2B1A1 E2B1A0 133F ⱡ
-C9AB C9AB 1340 ɫ
+C9AB C9AB E2B1A2 1340 ɫ
E2B1A2 C9AB E2B1A2 1340 Ɫ
E1B5BD E1B5BD E2B1A3 13B8 ᵽ
E2B1A3 E1B5BD E2B1A3 13B8 Ᵽ
@@ -8237,11 +8237,11 @@ C98A C98B C98A 13D2 Ɋ
C98B C98B C98A 13D2 ɋ
C98C C98D C98C 13E4 Ɍ
C98D C98D C98C 13E4 ɍ
-C9BD C9BD 13FC ɽ
+C9BD C9BD E2B1A4 13FC ɽ
E2B1A4 C9BD E2B1A4 13FC Ɽ
EA9CA8 EA9CA9 EA9CA8 143314AD Ꜩ
EA9CA9 EA9CA9 EA9CA8 143314AD ꜩ
-C8BE C8BE 143C Ⱦ
+C8BE E2B1A6 C8BE 143C Ⱦ
E2B1A6 E2B1A6 C8BE 143C ⱦ
C984 CA89 C984 145B Ʉ
CA89 CA89 C984 145B ʉ
diff --git a/mysql-test/main/ctype_utf8_uca.result b/mysql-test/main/ctype_utf8_uca.result
index b1be3c23bda..d5a2950747e 100644
--- a/mysql-test/main/ctype_utf8_uca.result
+++ b/mysql-test/main/ctype_utf8_uca.result
@@ -587,3 +587,177 @@ DROP TABLE t1;
#
# End of 10.2 tests
#
+#
+# Start of 10.3 tests
+#
+#
+# MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
+#
+SET NAMES utf8mb3 COLLATE utf8mb3_unicode_ci /*Unicode-4.0 folding*/;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A C8BA C8BA Ⱥ
+23E C8BE C8BE Ⱦ
+23F C8BF C8BF ȿ
+240 C980 C980 ɀ
+250 C990 C990 ɐ
+251 C991 C991 ɑ
+252 C992 C992 ɒ
+26B C9AB C9AB ɫ
+271 C9B1 C9B1 ɱ
+27D C9BD C9BD ɽ
+DROP TABLE case_folding;
+SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_ci;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_520_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A E2B1A5 C8BA Ⱥ
+23E E2B1A6 C8BE Ⱦ
+23F C8BF E2B1BE ȿ
+240 C980 E2B1BF ɀ
+250 C990 E2B1AF ɐ
+251 C991 E2B1AD ɑ
+252 C992 E2B1B0 ɒ
+26B C9AB E2B1A2 ɫ
+271 C9B1 E2B1AE ɱ
+27D C9BD E2B1A4 ɽ
+DROP TABLE case_folding;
+SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_nopad_ci;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_unicode_520_nopad_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A E2B1A5 C8BA Ⱥ
+23E E2B1A6 C8BE Ⱦ
+23F C8BF E2B1BE ȿ
+240 C980 E2B1BF ɀ
+250 C990 E2B1AF ɐ
+251 C991 E2B1AD ɑ
+252 C992 E2B1B0 ɒ
+26B C9AB E2B1A2 ɫ
+271 C9B1 E2B1AE ɱ
+27D C9BD E2B1A4 ɽ
+DROP TABLE case_folding;
+SET NAMES utf8mb3 COLLATE utf8mb3_myanmar_ci;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_myanmar_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A E2B1A5 C8BA Ⱥ
+23E E2B1A6 C8BE Ⱦ
+23F C8BF E2B1BE ȿ
+240 C980 E2B1BF ɀ
+250 C990 E2B1AF ɐ
+251 C991 E2B1AD ɑ
+252 C992 E2B1B0 ɒ
+26B C9AB E2B1A2 ɫ
+271 C9B1 E2B1AE ɱ
+27D C9BD E2B1A4 ɽ
+DROP TABLE case_folding;
+SET NAMES utf8mb3 COLLATE utf8mb3_thai_520_w2;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb3 COLLATE utf8mb3_thai_520_w2 DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A E2B1A5 C8BA Ⱥ
+23E E2B1A6 C8BE Ⱦ
+23F C8BF E2B1BE ȿ
+240 C980 E2B1BF ɀ
+250 C990 E2B1AF ɐ
+251 C991 E2B1AD ɑ
+252 C992 E2B1B0 ɒ
+26B C9AB E2B1A2 ɫ
+271 C9B1 E2B1AE ɱ
+27D C9BD E2B1A4 ɽ
+DROP TABLE case_folding;
+#
+# End of 10.3 tests
+#
diff --git a/mysql-test/main/ctype_utf8_uca.test b/mysql-test/main/ctype_utf8_uca.test
index 0879b4d2810..38bcce8f4ba 100644
--- a/mysql-test/main/ctype_utf8_uca.test
+++ b/mysql-test/main/ctype_utf8_uca.test
@@ -21,3 +21,32 @@ SET NAMES utf8 COLLATE utf8_unicode_nopad_ci;
--echo #
--echo # End of 10.2 tests
--echo #
+
+
+--echo #
+--echo # Start of 10.3 tests
+--echo #
+
+--echo #
+--echo # MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
+--echo #
+
+SET NAMES utf8mb3 COLLATE utf8mb3_unicode_ci /*Unicode-4.0 folding*/;
+--source include/ctype_casefolding.inc
+
+SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_ci;
+--source include/ctype_casefolding.inc
+
+SET NAMES utf8mb3 COLLATE utf8mb3_unicode_520_nopad_ci;
+--source include/ctype_casefolding.inc
+
+SET NAMES utf8mb3 COLLATE utf8mb3_myanmar_ci;
+--source include/ctype_casefolding.inc
+
+SET NAMES utf8mb3 COLLATE utf8mb3_thai_520_w2;
+--source include/ctype_casefolding.inc
+
+
+--echo #
+--echo # End of 10.3 tests
+--echo #
diff --git a/mysql-test/main/ctype_utf8mb4_uca.result b/mysql-test/main/ctype_utf8mb4_uca.result
index 8b19412a69b..65d8a07a3f3 100644
--- a/mysql-test/main/ctype_utf8mb4_uca.result
+++ b/mysql-test/main/ctype_utf8mb4_uca.result
@@ -6605,3 +6605,177 @@ SET NAMES utf8mb4;
#
# End of 10.2 tests
#
+#
+# Start of 10.3 tests
+#
+#
+# MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
+#
+SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci /*Unicode-4.0 folding*/;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A C8BA C8BA Ⱥ
+23E C8BE C8BE Ⱦ
+23F C8BF C8BF ȿ
+240 C980 C980 ɀ
+250 C990 C990 ɐ
+251 C991 C991 ɑ
+252 C992 C992 ɒ
+26B C9AB C9AB ɫ
+271 C9B1 C9B1 ɱ
+27D C9BD C9BD ɽ
+DROP TABLE case_folding;
+SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A E2B1A5 C8BA Ⱥ
+23E E2B1A6 C8BE Ⱦ
+23F C8BF E2B1BE ȿ
+240 C980 E2B1BF ɀ
+250 C990 E2B1AF ɐ
+251 C991 E2B1AD ɑ
+252 C992 E2B1B0 ɒ
+26B C9AB E2B1A2 ɫ
+271 C9B1 E2B1AE ɱ
+27D C9BD E2B1A4 ɽ
+DROP TABLE case_folding;
+SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_nopad_ci;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_nopad_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A E2B1A5 C8BA Ⱥ
+23E E2B1A6 C8BE Ⱦ
+23F C8BF E2B1BE ȿ
+240 C980 E2B1BF ɀ
+250 C990 E2B1AF ɐ
+251 C991 E2B1AD ɑ
+252 C992 E2B1B0 ɒ
+26B C9AB E2B1A2 ɫ
+271 C9B1 E2B1AE ɱ
+27D C9BD E2B1A4 ɽ
+DROP TABLE case_folding;
+SET NAMES utf8mb4 COLLATE utf8mb4_myanmar_ci;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_myanmar_ci DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A E2B1A5 C8BA Ⱥ
+23E E2B1A6 C8BE Ⱦ
+23F C8BF E2B1BE ȿ
+240 C980 E2B1BF ɀ
+250 C990 E2B1AF ɐ
+251 C991 E2B1AD ɑ
+252 C992 E2B1B0 ɒ
+26B C9AB E2B1A2 ɫ
+271 C9B1 E2B1AE ɱ
+27D C9BD E2B1A4 ɽ
+DROP TABLE case_folding;
+SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
+CREATE OR REPLACE TABLE case_folding AS SELECT 0 AS code, SPACE(32) AS c LIMIT 0;
+SHOW CREATE TABLE case_folding;
+Table Create Table
+case_folding CREATE TABLE `case_folding` (
+ `code` int(1) NOT NULL,
+ `c` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_thai_520_w2 DEFAULT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+INSERT INTO case_folding (code) VALUES
+(0x23A),
+(0x23E),
+(0x23F),
+(0x240),
+(0x250),
+(0x251),
+(0x252),
+(0x26B),
+(0x271),
+(0x27D);
+UPDATE case_folding SET c=CHAR(code USING ucs2);
+SELECT HEX(code), HEX(LOWER(c)), HEX(UPPER(c)), c FROM case_folding;
+HEX(code) HEX(LOWER(c)) HEX(UPPER(c)) c
+23A E2B1A5 C8BA Ⱥ
+23E E2B1A6 C8BE Ⱦ
+23F C8BF E2B1BE ȿ
+240 C980 E2B1BF ɀ
+250 C990 E2B1AF ɐ
+251 C991 E2B1AD ɑ
+252 C992 E2B1B0 ɒ
+26B C9AB E2B1A2 ɫ
+271 C9B1 E2B1AE ɱ
+27D C9BD E2B1A4 ɽ
+DROP TABLE case_folding;
+#
+# End of 10.3 tests
+#
diff --git a/mysql-test/main/ctype_utf8mb4_uca.test b/mysql-test/main/ctype_utf8mb4_uca.test
index 7a95da8468c..81f07d7e03f 100644
--- a/mysql-test/main/ctype_utf8mb4_uca.test
+++ b/mysql-test/main/ctype_utf8mb4_uca.test
@@ -108,3 +108,32 @@ SET NAMES utf8mb4;
--echo #
--echo # End of 10.2 tests
--echo #
+
+
+--echo #
+--echo # Start of 10.3 tests
+--echo #
+
+--echo #
+--echo # MDEV-30556 UPPER() returns an empty string for U+0251 in Unicode-5.2.0+ collations for utf8
+--echo #
+
+SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci /*Unicode-4.0 folding*/;
+--source include/ctype_casefolding.inc
+
+SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_ci;
+--source include/ctype_casefolding.inc
+
+SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_nopad_ci;
+--source include/ctype_casefolding.inc
+
+SET NAMES utf8mb4 COLLATE utf8mb4_myanmar_ci;
+--source include/ctype_casefolding.inc
+
+SET NAMES utf8mb4 COLLATE utf8mb4_thai_520_w2;
+--source include/ctype_casefolding.inc
+
+
+--echo #
+--echo # End of 10.3 tests
+--echo #
diff --git a/mysql-test/main/debug_sync.result b/mysql-test/main/debug_sync.result
index bb9ae1a417d..4c1711a6d6b 100644
--- a/mysql-test/main/debug_sync.result
+++ b/mysql-test/main/debug_sync.result
@@ -2,7 +2,7 @@ SET DEBUG_SYNC= 'RESET';
DROP TABLE IF EXISTS t1;
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: ''
+debug_sync ON - current signals: ''
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2 HIT_LIMIT 3';
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 EXECUTE 2';
SET DEBUG_SYNC='p0 SIGNAL s1 WAIT_FOR s2 TIMEOUT 6 HIT_LIMIT 3';
@@ -150,34 +150,34 @@ SET @myvar= 'now SIGNAL from_myvar';
SET DEBUG_SYNC= @myvar;
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: 'from_myvar'
+debug_sync ON - current signals: 'from_myvar'
SET DEBUG_SYNC= LEFT('now SIGNAL from_function_cut_here', 24);
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: 'from_function'
+debug_sync ON - current signals: 'from_myvar,from_function'
SET DEBUG_SYNC= 'now SIGNAL something';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: 'something'
+debug_sync ON - current signals: 'something,from_function,from_myvar'
SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0';
Warnings:
Warning #### debug sync point wait timed out
SET DEBUG_SYNC= 'now SIGNAL nothing';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: 'nothing'
+debug_sync ON - current signals: 'something,from_function,nothing,from_myvar'
SET DEBUG_SYNC= 'now WAIT_FOR nothing TIMEOUT 0';
SET DEBUG_SYNC= 'now SIGNAL something EXECUTE 0';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: 'nothing'
+debug_sync ON - current signals: 'something,from_function,from_myvar'
SET DEBUG_SYNC= 'now WAIT_FOR anotherthing TIMEOUT 0 EXECUTE 0';
SET DEBUG_SYNC= 'now HIT_LIMIT 1';
ERROR HY000: debug sync point hit limit reached
SET DEBUG_SYNC= 'RESET';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: ''
+debug_sync ON - current signals: ''
SET DEBUG_SYNC= 'p1abcd SIGNAL s1 EXECUTE 2';
SET DEBUG_SYNC= 'p2abc SIGNAL s2 EXECUTE 2';
SET DEBUG_SYNC= 'p9abcdef SIGNAL s9 EXECUTE 2';
@@ -190,23 +190,30 @@ SET DEBUG_SYNC= 'p3abcdef SIGNAL s3 EXECUTE 2';
SET DEBUG_SYNC= 'p4a TEST';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: 's4'
+debug_sync ON - current signals: 's4'
SET DEBUG_SYNC= 'p1abcd TEST';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: 's1'
+debug_sync ON - current signals: 's4,s1'
SET DEBUG_SYNC= 'p7 TEST';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: 's7'
+debug_sync ON - current signals: 's1,s7,s4'
SET DEBUG_SYNC= 'p9abcdef TEST';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: 's9'
+debug_sync ON - current signals: 's1,s7,s4,s9'
SET DEBUG_SYNC= 'p3abcdef TEST';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: 's3'
+debug_sync ON - current signals: 's1,s3,s4,s9,s7'
+SET DEBUG_SYNC= 'now WAIT_FOR s9';
+SET DEBUG_SYNC= 'now WAIT_FOR s1';
+SET DEBUG_SYNC= 'now WAIT_FOR s4';
+SET DEBUG_SYNC= 'now WAIT_FOR s7';
+SHOW VARIABLES LIKE 'DEBUG_SYNC';
+Variable_name Value
+debug_sync ON - current signals: 's3'
SET DEBUG_SYNC= 'p1abcd CLEAR';
SET DEBUG_SYNC= 'p2abc CLEAR';
SET DEBUG_SYNC= 'p5abcde CLEAR';
@@ -219,19 +226,19 @@ SET DEBUG_SYNC= 'p7 CLEAR';
SET DEBUG_SYNC= 'p1abcd TEST';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: 's3'
+debug_sync ON - current signals: 's3'
SET DEBUG_SYNC= 'p7 TEST';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: 's3'
+debug_sync ON - current signals: 's3'
SET DEBUG_SYNC= 'p9abcdef TEST';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: 's3'
+debug_sync ON - current signals: 's3'
SET DEBUG_SYNC= 'RESET';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
Variable_name Value
-debug_sync ON - current signal: ''
+debug_sync ON - current signals: ''
CREATE USER mysqltest_1@localhost;
GRANT SUPER ON *.* TO mysqltest_1@localhost;
connect con1,localhost,mysqltest_1,,;
@@ -292,4 +299,24 @@ disconnect con1;
disconnect con2;
connection default;
DROP TABLE t1;
+#
+# Test NO_CLEAR_EVENT flag. The signal should still be visible after
+# the wait has completed succesfully.
+#
+SET DEBUG_SYNC= 'now SIGNAL s1';
+SHOW VARIABLES LIKE 'DEBUG_SYNC';
+Variable_name Value
+debug_sync ON - current signals: 's1'
+SET DEBUG_SYNC= 'now WAIT_FOR s1 NO_CLEAR_EVENT';
+SHOW VARIABLES LIKE 'DEBUG_SYNC';
+Variable_name Value
+debug_sync ON - current signals: 's1'
+SET DEBUG_SYNC= 'now WAIT_FOR s1';
+SHOW VARIABLES LIKE 'DEBUG_SYNC';
+Variable_name Value
+debug_sync ON - current signals: ''
+SET DEBUG_SYNC= 'now SIGNAL s1,s2,s5,s7';
+SHOW VARIABLES LIKE 'DEBUG_SYNC';
+Variable_name Value
+debug_sync ON - current signals: 's2,s7,s1,s5'
SET DEBUG_SYNC= 'RESET';
diff --git a/mysql-test/main/debug_sync.test b/mysql-test/main/debug_sync.test
index 89414939f59..6e75ba9624c 100644
--- a/mysql-test/main/debug_sync.test
+++ b/mysql-test/main/debug_sync.test
@@ -231,15 +231,12 @@ SHOW VARIABLES LIKE 'DEBUG_SYNC';
# immediately after setting of the DEBUG_SYNC variable.
# So it is executed before the SET statement ends.
#
-# NOTE: There is only one global signal (say "signal post" or "flag mast").
-# A SIGNAL action writes its signal into it ("sets a flag").
-# The signal persists until explicitly overwritten.
+# NOTE: There can be multiple active signals at the same time.
+# A SIGNAL action appends its signal into signals set.
+# The signal persists until waited on.
# To avoid confusion for later tests, it is recommended to clear
-# the signal by signalling "empty" ("setting the 'empty' flag"):
-# SET DEBUG_SYNC= 'now SIGNAL empty';
-# Preferably you can reset the whole facility with:
+# the signal set by running
# SET DEBUG_SYNC= 'RESET';
-# The signal is then '' (really empty) which connot be done otherwise.
#
#
@@ -298,6 +295,16 @@ SET DEBUG_SYNC= 'p9abcdef TEST';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
SET DEBUG_SYNC= 'p3abcdef TEST';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
+
+#
+# Wait for all signals currently active except s3.
+#
+SET DEBUG_SYNC= 'now WAIT_FOR s9';
+SET DEBUG_SYNC= 'now WAIT_FOR s1';
+SET DEBUG_SYNC= 'now WAIT_FOR s4';
+SET DEBUG_SYNC= 'now WAIT_FOR s7';
+SHOW VARIABLES LIKE 'DEBUG_SYNC';
+
#
# Clear the actions.
#
@@ -320,7 +327,7 @@ SHOW VARIABLES LIKE 'DEBUG_SYNC';
SET DEBUG_SYNC= 'p9abcdef TEST';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
#
-# Now cleanup. Actions are clear already, but signal needs to be cleared.
+# Now cleanup. Actions are clear already, but s3 signal needs to be cleared.
#
SET DEBUG_SYNC= 'RESET';
SHOW VARIABLES LIKE 'DEBUG_SYNC';
@@ -418,10 +425,24 @@ disconnect con2;
connection default;
DROP TABLE t1;
+--echo #
+--echo # Test NO_CLEAR_EVENT flag. The signal should still be visible after
+--echo # the wait has completed succesfully.
+--echo #
+SET DEBUG_SYNC= 'now SIGNAL s1';
+SHOW VARIABLES LIKE 'DEBUG_SYNC';
+SET DEBUG_SYNC= 'now WAIT_FOR s1 NO_CLEAR_EVENT';
+SHOW VARIABLES LIKE 'DEBUG_SYNC';
+SET DEBUG_SYNC= 'now WAIT_FOR s1';
+SHOW VARIABLES LIKE 'DEBUG_SYNC';
+
+SET DEBUG_SYNC= 'now SIGNAL s1,s2,s5,s7';
+SHOW VARIABLES LIKE 'DEBUG_SYNC';
+
+
#
# Cleanup after test case.
-# Otherwise signal would contain 'flushed' here,
-# which could confuse the next test.
+# Otherwise signal would confuse the next test.
#
SET DEBUG_SYNC= 'RESET';
diff --git a/mysql-test/main/delete.result b/mysql-test/main/delete.result
index ed3683d52f9..7a9963abc71 100644
--- a/mysql-test/main/delete.result
+++ b/mysql-test/main/delete.result
@@ -525,3 +525,35 @@ DELETE v2 FROM v2;
ERROR HY000: Can not delete from join view 'test.v2'
DROP VIEW v2, v1;
DROP TABLE t1, t2;
+End of 5.5 tests
+#
+# MDEV-30586: DELETE with WHERE containing nested subquery
+# with set function aggregated in outer subquery
+#
+create table t1 (a int);
+insert into t1 values (3), (7), (1);
+create table t2 (b int);
+insert into t2 values (2), (1), (4), (7);
+create table t3 (a int, b int);
+insert into t3 values (2,10), (7,30), (2,30), (1,10), (7,40);
+select * from t1
+where t1.a in (select t3.a from t3 group by t3.a
+having t3.a > any (select t2.b from t2
+where t2.b*10 < sum(t3.b)));
+a
+7
+delete from t1
+where t1.a in (select t3.a from t3 group by t3.a
+having t3.a > any (select t2.b from t2
+where t2.b*10 < sum(t3.b)));
+select * from t1
+where t1.a in (select t3.a from t3 group by t3.a
+having t3.a > any (select t2.b from t2
+where t2.b*10 < sum(t3.b)));
+a
+update t1 set t1.a=t1.a+10
+where t1.a in (select t3.a from t3 group by t3.a
+having t3.a > any (select t2.b from t2
+where t2.b*10 < sum(t3.b)));
+drop table t1,t2,t3;
+End of 10.4 tests
diff --git a/mysql-test/main/delete.test b/mysql-test/main/delete.test
index c82420640c2..6d898ec769d 100644
--- a/mysql-test/main/delete.test
+++ b/mysql-test/main/delete.test
@@ -582,3 +582,44 @@ DELETE v2 FROM v2;
DROP VIEW v2, v1;
DROP TABLE t1, t2;
+
+--echo End of 5.5 tests
+
+--echo #
+--echo # MDEV-30586: DELETE with WHERE containing nested subquery
+--echo # with set function aggregated in outer subquery
+--echo #
+
+create table t1 (a int);
+insert into t1 values (3), (7), (1);
+
+create table t2 (b int);
+insert into t2 values (2), (1), (4), (7);
+
+create table t3 (a int, b int);
+insert into t3 values (2,10), (7,30), (2,30), (1,10), (7,40);
+
+let $c=
+ t1.a in (select t3.a from t3 group by t3.a
+ having t3.a > any (select t2.b from t2
+ where t2.b*10 < sum(t3.b)));
+
+eval
+select * from t1
+ where $c;
+
+eval
+delete from t1
+ where $c;
+
+eval
+select * from t1
+ where $c;
+
+eval
+update t1 set t1.a=t1.a+10
+ where $c;
+
+drop table t1,t2,t3;
+
+--echo End of 10.4 tests
diff --git a/mysql-test/main/empty_table.result b/mysql-test/main/empty_table.result
index 2bca3e792fa..90aec2eda3b 100644
--- a/mysql-test/main/empty_table.result
+++ b/mysql-test/main/empty_table.result
@@ -16,3 +16,61 @@ ERROR 42S02: Table 'test.t2' doesn't exist
show status like "Empty_queries";
Variable_name Value
Empty_queries 2
+# End of 4.1 tests
+#
+# MDEV-30333 Wrong result with not_null_range_scan and LEFT JOIN with empty table
+#
+set @save_optimizer_switch=@@optimizer_switch;
+CREATE TABLE t1 (a INT, b INT) ENGINE=MyISAM;
+INSERT INTO t1 (b) VALUES (1),(2);
+CREATE TABLE t2 (c INT) ENGINE=MyISAM;
+SET optimizer_switch= 'not_null_range_scan=off';
+explain extended SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t2 system NULL NULL NULL NULL 0 0.00 Const row not found
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where; Using filesort
+Warnings:
+Note 1003 select `test`.`t1`.`b` AS `b` from `test`.`t1` where `test`.`t1`.`a` is null order by `test`.`t1`.`b`
+SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
+b
+1
+2
+SET optimizer_switch = 'not_null_range_scan=on';
+explain extended SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
+id select_type table type possible_keys key key_len ref rows filtered Extra
+1 SIMPLE t2 system NULL NULL NULL NULL 0 0.00 Const row not found
+1 SIMPLE t1 ALL NULL NULL NULL NULL 2 100.00 Using where; Using filesort
+Warnings:
+Note 1003 select `test`.`t1`.`b` AS `b` from `test`.`t1` where `test`.`t1`.`a` is null order by `test`.`t1`.`b`
+SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
+b
+1
+2
+flush tables;
+SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
+b
+1
+2
+drop table t1,t2;
+# Second test in MDEV-30333
+CREATE TABLE t1 (a int, b varchar(10)) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (69,'foo'),(71,'bar');
+CREATE TABLE t2 (c int) ENGINE=MyISAM;
+INSERT INTO t2 VALUES (1),(2);
+CREATE TABLE t3 (d int, e int, KEY(e)) ENGINE=MyISAM;
+SELECT * FROM t1 LEFT JOIN t2 LEFT JOIN t3 ON t3.e = t3.d ON 1;
+a b c d e
+69 foo 1 NULL NULL
+71 bar 1 NULL NULL
+69 foo 2 NULL NULL
+71 bar 2 NULL NULL
+SET optimizer_switch = 'not_null_range_scan=on';
+SELECT * FROM t1 LEFT JOIN t2 LEFT JOIN t3 ON t3.e = t3.d ON 1;
+a b c d e
+69 foo 1 NULL NULL
+71 bar 1 NULL NULL
+69 foo 2 NULL NULL
+71 bar 2 NULL NULL
+DROP TABLE t1, t2, t3;
+set @@optimizer_switch=@save_optimizer_switch;
+End of 10.5 tests
diff --git a/mysql-test/main/empty_table.test b/mysql-test/main/empty_table.test
index 754671868ba..a17b0c897d5 100644
--- a/mysql-test/main/empty_table.test
+++ b/mysql-test/main/empty_table.test
@@ -21,4 +21,38 @@ drop table t1;
select * from t2;
show status like "Empty_queries";
-# End of 4.1 tests
+--echo # End of 4.1 tests
+
+--echo #
+--echo # MDEV-30333 Wrong result with not_null_range_scan and LEFT JOIN with empty table
+--echo #
+
+set @save_optimizer_switch=@@optimizer_switch;
+CREATE TABLE t1 (a INT, b INT) ENGINE=MyISAM;
+INSERT INTO t1 (b) VALUES (1),(2);
+CREATE TABLE t2 (c INT) ENGINE=MyISAM;
+SET optimizer_switch= 'not_null_range_scan=off'; # Default
+explain extended SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
+SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
+SET optimizer_switch = 'not_null_range_scan=on';
+explain extended SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
+SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
+flush tables;
+SELECT b FROM t1 LEFT JOIN t2 ON t2.c = a WHERE a IS NULL ORDER BY b;
+drop table t1,t2;
+
+--echo # Second test in MDEV-30333
+
+CREATE TABLE t1 (a int, b varchar(10)) ENGINE=MyISAM;
+INSERT INTO t1 VALUES (69,'foo'),(71,'bar');
+CREATE TABLE t2 (c int) ENGINE=MyISAM;
+INSERT INTO t2 VALUES (1),(2);
+CREATE TABLE t3 (d int, e int, KEY(e)) ENGINE=MyISAM;
+SELECT * FROM t1 LEFT JOIN t2 LEFT JOIN t3 ON t3.e = t3.d ON 1;
+SET optimizer_switch = 'not_null_range_scan=on';
+SELECT * FROM t1 LEFT JOIN t2 LEFT JOIN t3 ON t3.e = t3.d ON 1;
+DROP TABLE t1, t2, t3;
+set @@optimizer_switch=@save_optimizer_switch;
+
+--echo End of 10.5 tests
+
diff --git a/mysql-test/main/fetch_first.result b/mysql-test/main/fetch_first.result
index 69a0336d722..df182381d1c 100644
--- a/mysql-test/main/fetch_first.result
+++ b/mysql-test/main/fetch_first.result
@@ -1378,3 +1378,31 @@ a
bar
foo
DROP TABLE t;
+#
+# MDEV-30324: Wrong result upon SELECT DISTINCT .. WITH TIES using index
+#
+CREATE TABLE t1 (a int, b char(3), KEY (a));
+INSERT INTO t1 VALUES (2,'foo'),(3,'bar'),(3,'bar'),(3,'zzz');
+EXPLAIN SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 1 ROWS WITH TIES;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 index NULL a 5 NULL 1 Using temporary
+SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 1 ROWS WITH TIES;
+a b
+2 foo
+EXPLAIN SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 2 ROWS WITH TIES;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 index NULL a 5 NULL 2 Using temporary
+SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 2 ROWS WITH TIES;
+a b
+2 foo
+3 bar
+3 zzz
+EXPLAIN SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 3 ROWS WITH TIES;
+id select_type table type possible_keys key key_len ref rows Extra
+1 SIMPLE t1 ALL NULL NULL NULL NULL 4 Using temporary; Using filesort
+SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 3 ROWS WITH TIES;
+a b
+2 foo
+3 bar
+3 zzz
+DROP TABLE t1;
diff --git a/mysql-test/main/fetch_first.test b/mysql-test/main/fetch_first.test
index 62cdd717f81..98bbf1ca06b 100644
--- a/mysql-test/main/fetch_first.test
+++ b/mysql-test/main/fetch_first.test
@@ -1059,3 +1059,22 @@ SELECT a FROM t ORDER BY a FETCH FIRST 2 ROWS WITH TIES;
# Cleanup
DROP TABLE t;
+
+--echo #
+--echo # MDEV-30324: Wrong result upon SELECT DISTINCT .. WITH TIES using index
+--echo #
+CREATE TABLE t1 (a int, b char(3), KEY (a));
+INSERT INTO t1 VALUES (2,'foo'),(3,'bar'),(3,'bar'),(3,'zzz');
+
+EXPLAIN SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 1 ROWS WITH TIES;
+--sorted_result
+SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 1 ROWS WITH TIES;
+EXPLAIN SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 2 ROWS WITH TIES;
+--sorted_result
+SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 2 ROWS WITH TIES;
+EXPLAIN SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 3 ROWS WITH TIES;
+--sorted_result
+SELECT DISTINCT a, b FROM t1 ORDER BY a FETCH FIRST 3 ROWS WITH TIES;
+
+# Cleanup
+DROP TABLE t1;
diff --git a/mysql-test/main/func_json.result b/mysql-test/main/func_json.result
index 8456b71c4dc..213cc798a6d 100644
--- a/mysql-test/main/func_json.result
+++ b/mysql-test/main/func_json.result
@@ -1623,6 +1623,21 @@ id doc
{"$oid":"611c0a463b150154132f6636"} { "_id" : { "$oid" : "611c0a463b150154132f6636" }, "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : [ { "a" : 1.0 } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] }
DROP TABLE arrNestTest;
#
+# MDEV-30412 JSON_OBJECTAGG doesn't escape double quote in key
+#
+SELECT JSON_OBJECTAGG('"', 1);
+JSON_OBJECTAGG('"', 1)
+{"\"":1}
+SELECT JSON_OBJECTAGG('\"', 1);
+JSON_OBJECTAGG('\"', 1)
+{"\"":1}
+SELECT JSON_OBJECTAGG('\\', 1);
+JSON_OBJECTAGG('\\', 1)
+{"\\":1}
+#
+# End of 10.5 tests
+#
+#
# MDEV-26054 Server crashes in Item_func_json_arrayagg::get_str_from_field
#
CREATE TABLE t (a VARCHAR(8));
@@ -1649,7 +1664,7 @@ JSON_INSERT(JSON_OBJECT(l1, l2, l3, l4), '$.k3', 'v3') JSON_SET(JSON_OBJECT(l1,
{"k1": "v1", "k2": "v2", "k3": "v3"} {"k1": "v1", "k2": "new v2"} {"k1": "v1", "k2": "new v2"}
DROP TABLE t;
#
-# End of 10.5 tests
+# End of 10.6 tests
#
#
# Beginning of 10.9 tests
@@ -2536,9 +2551,6 @@ JSON_EXTRACT(j, '$[*]')
[{"key1": 3, "key2": 3}, {"key3": 3, "key4": 3}, {"key5": 3}]
DROP TABLE t1;
#
-# End of 10.9 Test
-#
-#
# MDEV-29381: JSON paths containing dashes are reported as syntax errors in procedures
#
SELECT JSON_EXTRACT('{ "my-key": 1 }', '$."my-key"');
@@ -2547,3 +2559,6 @@ JSON_EXTRACT('{ "my-key": 1 }', '$."my-key"')
SELECT JSON_EXTRACT('{ "my-key": 1 }', '$.my-key');
JSON_EXTRACT('{ "my-key": 1 }', '$.my-key')
1
+#
+# End of 10.9 Test
+#
diff --git a/mysql-test/main/func_json.test b/mysql-test/main/func_json.test
index d00ceeb83e2..93d8c2a7d6a 100644
--- a/mysql-test/main/func_json.test
+++ b/mysql-test/main/func_json.test
@@ -1068,6 +1068,18 @@ SELECT * FROM arrNestTest;
DROP TABLE arrNestTest;
--echo #
+--echo # MDEV-30412 JSON_OBJECTAGG doesn't escape double quote in key
+--echo #
+
+SELECT JSON_OBJECTAGG('"', 1);
+SELECT JSON_OBJECTAGG('\"', 1);
+SELECT JSON_OBJECTAGG('\\', 1);
+
+--echo #
+--echo # End of 10.5 tests
+--echo #
+
+--echo #
--echo # MDEV-26054 Server crashes in Item_func_json_arrayagg::get_str_from_field
--echo #
@@ -1078,7 +1090,6 @@ SELECT JSON_ARRAYAGG(a) AS f FROM v;
DROP VIEW v;
DROP TABLE t;
-
--echo #
--echo # MDEV-29264 JSON functions overflow error based ON LONGTEXT field
--echo #
@@ -1090,8 +1101,9 @@ SELECT JSON_INSERT(JSON_OBJECT(l1, l2, l3, l4), '$.k3', 'v3'),JSON_SET(JSON_OBJE
DROP TABLE t;
--echo #
---echo # End of 10.5 tests
+--echo # End of 10.6 tests
--echo #
+
--echo #
--echo # Beginning of 10.9 tests
--echo #
@@ -1734,12 +1746,12 @@ SELECT JSON_EXTRACT(j, '$[*]') FROM t1 ;
DROP TABLE t1;
--echo #
---echo # End of 10.9 Test
---echo #
-
---echo #
--echo # MDEV-29381: JSON paths containing dashes are reported as syntax errors in procedures
--echo #
SELECT JSON_EXTRACT('{ "my-key": 1 }', '$."my-key"');
SELECT JSON_EXTRACT('{ "my-key": 1 }', '$.my-key');
+
+--echo #
+--echo # End of 10.9 Test
+--echo #
diff --git a/mysql-test/main/multi_update.result b/mysql-test/main/multi_update.result
index 674dc79fe12..2112c6d5480 100644
--- a/mysql-test/main/multi_update.result
+++ b/mysql-test/main/multi_update.result
@@ -1269,3 +1269,123 @@ EXPLAIN
}
}
DROP TABLES t1, t2;
+# End of 10.3 tests
+#
+# MDEV-28538: multi-table UPDATE/DELETE with possible exists-to-in
+#
+create table t1 (c1 int, c2 int, c3 int, index idx(c2));
+insert into t1 values
+(1,1,1),(3,2,2),(1,3,3),
+(2,1,4),(2,2,5),(4,3,6),
+(2,4,7),(2,5,8);
+create table t2 (c1 int, c2 int, c3 int, index idx(c2));
+insert into t2 values
+(1,7,1),(1,8,2),(1,3,3),
+(2,1,4),(2,2,5),(2,3,6),
+(2,4,7),(2,5,8);
+create table t3 (c1 int, c2 int, c3 int, index idx(c2));
+insert into t3 values
+(1,1,1),(1,2,2),(1,3,3),
+(2,1,4),(2,2,5),(2,3,6),
+(2,4,7),(2,5,8);
+insert into t3 select c1+1, c2+2, c3 from t3;
+insert into t3 select c1, c2+2, c3 from t3;
+analyze table t1,t2,t3 persistent for all;
+Table Op Msg_type Msg_text
+test.t1 analyze status Engine-independent statistics collected
+test.t1 analyze status OK
+test.t2 analyze status Engine-independent statistics collected
+test.t2 analyze status OK
+test.t3 analyze status Engine-independent statistics collected
+test.t3 analyze status OK
+explain select * from t1,t3
+where t1.c2 = t3.c2 and
+t1.c1 > 1 and
+exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL idx NULL NULL NULL 8 Using where
+1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
+1 PRIMARY t3 ref idx idx 5 test.t1.c2 3
+2 MATERIALIZED t2 range idx idx 5 NULL 3 Using index condition; Using where
+explain delete from t1 using t1,t3
+where t1.c2 = t3.c2 and
+t1.c1 > 1 and
+exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL idx NULL NULL NULL 8 Using where
+1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
+1 PRIMARY t3 ref idx idx 5 test.t1.c2 3 Using index
+2 MATERIALIZED t2 range idx idx 5 NULL 3 Using where
+explain update t1,t3 set t1.c1 = t1.c1+10
+where t1.c2 = t3.c2 and
+t1.c1 > 1 and
+exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
+id select_type table type possible_keys key key_len ref rows Extra
+1 PRIMARY t1 ALL idx NULL NULL NULL 8 Using where
+1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
+1 PRIMARY t3 ref idx idx 5 test.t1.c2 3 Using index
+2 MATERIALIZED t2 range idx idx 5 NULL 3 Using where
+create table t as select * from t1;
+select * from t1,t3
+where t1.c2 = t3.c2 and
+t1.c1 > 1 and
+exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
+c1 c2 c3 c1 c2 c3
+2 1 4 1 1 1
+2 1 4 2 1 4
+2 2 5 1 2 2
+2 2 5 2 2 5
+2 4 7 2 4 7
+2 4 7 2 4 2
+2 4 7 3 4 5
+2 4 7 1 4 2
+2 4 7 2 4 5
+2 5 8 2 5 8
+2 5 8 2 5 3
+2 5 8 3 5 6
+2 5 8 1 5 3
+2 5 8 2 5 6
+2 5 8 2 5 1
+2 5 8 3 5 4
+select * from t1;
+c1 c2 c3
+1 1 1
+3 2 2
+1 3 3
+2 1 4
+2 2 5
+4 3 6
+2 4 7
+2 5 8
+delete from t1 using t1,t3
+where t1.c2 = t3.c2 and
+t1.c1 > 1 and
+exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
+select * from t1;
+c1 c2 c3
+1 1 1
+3 2 2
+1 3 3
+4 3 6
+truncate table t1;
+insert into t1 select * from t;
+analyze table t1 persistent for all;
+Table Op Msg_type Msg_text
+test.t1 analyze status Engine-independent statistics collected
+test.t1 analyze status Table is already up to date
+update t1,t3 set t1.c1 = t1.c1+10
+where t1.c2 = t3.c2 and
+t1.c1 > 1 and
+exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
+select * from t1;
+c1 c2 c3
+1 1 1
+3 2 2
+1 3 3
+12 1 4
+12 2 5
+4 3 6
+12 4 7
+12 5 8
+drop table t1,t2,t3,t;
+# End of 10.4 tests
diff --git a/mysql-test/main/multi_update.test b/mysql-test/main/multi_update.test
index 54c64918e03..48e6250393b 100644
--- a/mysql-test/main/multi_update.test
+++ b/mysql-test/main/multi_update.test
@@ -1130,3 +1130,73 @@ EXPLAIN FORMAT=JSON UPDATE t2 JOIN t1 USING(a) SET t2.part=2 WHERE t2.part=1 AND
EXPLAIN FORMAT=JSON UPDATE t2 JOIN t1 USING(a) SET t2.part=3 WHERE t2.part=2 AND t1.part=2;
DROP TABLES t1, t2;
+
+--echo # End of 10.3 tests
+
+--echo #
+--echo # MDEV-28538: multi-table UPDATE/DELETE with possible exists-to-in
+--echo #
+
+create table t1 (c1 int, c2 int, c3 int, index idx(c2));
+insert into t1 values
+(1,1,1),(3,2,2),(1,3,3),
+(2,1,4),(2,2,5),(4,3,6),
+(2,4,7),(2,5,8);
+
+create table t2 (c1 int, c2 int, c3 int, index idx(c2));
+insert into t2 values
+(1,7,1),(1,8,2),(1,3,3),
+(2,1,4),(2,2,5),(2,3,6),
+(2,4,7),(2,5,8);
+
+create table t3 (c1 int, c2 int, c3 int, index idx(c2));
+insert into t3 values
+(1,1,1),(1,2,2),(1,3,3),
+(2,1,4),(2,2,5),(2,3,6),
+(2,4,7),(2,5,8);
+insert into t3 select c1+1, c2+2, c3 from t3;
+insert into t3 select c1, c2+2, c3 from t3;
+
+analyze table t1,t2,t3 persistent for all;
+
+let $c=
+ t1.c2 = t3.c2 and
+ t1.c1 > 1 and
+ exists (select 'X' from t2 where t2.c1 = t1.c1 and t2.c2 > 4);
+
+let $q1=
+select * from t1,t3
+where $c;
+
+eval explain $q1;
+
+let $q2=
+delete from t1 using t1,t3
+where $c;
+
+eval explain $q2;
+
+let $q3=
+update t1,t3 set t1.c1 = t1.c1+10
+where $c;
+
+eval explain $q3;
+
+create table t as select * from t1;
+
+eval $q1;
+select * from t1;
+
+eval $q2;
+select * from t1;
+
+truncate table t1;
+insert into t1 select * from t;
+analyze table t1 persistent for all;
+
+eval $q3;
+select * from t1;
+
+drop table t1,t2,t3,t;
+
+--echo # End of 10.4 tests
diff --git a/mysql-test/main/update_use_source.result b/mysql-test/main/update_use_source.result
index 2774e7ee92d..5a9e0a7750c 100644
--- a/mysql-test/main/update_use_source.result
+++ b/mysql-test/main/update_use_source.result
@@ -76,7 +76,8 @@ rollback;
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 8 Using where
-2 DEPENDENT SUBQUERY a ALL NULL NULL NULL NULL 8 Using where
+1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
+2 MATERIALIZED a ALL NULL NULL NULL NULL 8
start transaction;
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
affected rows: 4
@@ -317,7 +318,8 @@ rollback;
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 range t1_c2 t1_c2 5 NULL 2 Using where
-2 DEPENDENT SUBQUERY a ref t1_c2 t1_c2 5 test.t1.c2 4 Using index
+1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
+2 MATERIALIZED a range t1_c2 t1_c2 5 NULL 2 Using where; Using index
start transaction;
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
affected rows: 4
@@ -558,7 +560,8 @@ rollback;
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 range t1_c2 t1_c2 5 NULL 2 Using where
-2 DEPENDENT SUBQUERY a ref t1_c2 t1_c2 5 test.t1.c2 1 Using index
+1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
+2 MATERIALIZED a range t1_c2 t1_c2 5 NULL 2 Using where; Using index
start transaction;
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
affected rows: 4
@@ -800,7 +803,8 @@ rollback;
explain update t1 set c1=0 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 > 3;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 range t1_c2 t1_c2 5 NULL 2 Using where
-2 DEPENDENT SUBQUERY a ref t1_c2 t1_c2 5 test.t1.c2 1 Using index
+1 PRIMARY <subquery2> eq_ref distinct_key distinct_key 4 func 1
+2 MATERIALIZED a range t1_c2 t1_c2 5 NULL 2 Using where; Using index
start transaction;
update t1 set c1=c1+10 where exists (select 'X' from t1 a where a.c2 = t1.c2) and c2 >= 3;
affected rows: 4
diff --git a/mysql-test/mariadb-test-run.pl b/mysql-test/mariadb-test-run.pl
index 46a51d2fa58..670f63a990f 100755
--- a/mysql-test/mariadb-test-run.pl
+++ b/mysql-test/mariadb-test-run.pl
@@ -145,6 +145,7 @@ my $opt_start_exit;
my $start_only;
my $file_wsrep_provider;
my $num_saved_cores= 0; # Number of core files saved in vardir/log/ so far.
+my $test_name_for_report;
our @global_suppressions;
@@ -515,13 +516,13 @@ sub main {
}
if ( not @$completed ) {
- my $test_name= mtr_grab_file($path_testlog);
- $test_name =~ s/^CURRENT_TEST:\s//;
- chomp($test_name);
- my $tinfo = My::Test->new(name => $test_name);
- $tinfo->{result}= 'MTR_RES_FAILED';
- $tinfo->{comment}=' ';
- mtr_report_test($tinfo);
+ if ($test_name_for_report)
+ {
+ my $tinfo = My::Test->new(name => $test_name_for_report);
+ $tinfo->{result}= 'MTR_RES_FAILED';
+ $tinfo->{comment}=' ';
+ mtr_report_test($tinfo);
+ }
mtr_error("Test suite aborted");
}
@@ -3740,8 +3741,8 @@ sub resfile_report_test ($) {
sub run_testcase ($$) {
my ($tinfo, $server_socket)= @_;
my $print_freq=20;
-
- mtr_verbose("Running test:", $tinfo->{name});
+ $test_name_for_report= $tinfo->{name};
+ mtr_verbose("Running test:", $test_name_for_report);
$ENV{'MTR_TEST_NAME'} = $tinfo->{name};
resfile_report_test($tinfo) if $opt_resfile;
@@ -5130,12 +5131,10 @@ sub mysqld_start ($$) {
if (!$rc)
{
# Report failure about the last test case before exit
- my $test_name= mtr_grab_file($path_current_testlog);
- $test_name =~ s/^CURRENT_TEST:\s//;
- my $tinfo = My::Test->new(name => $test_name);
+ my $tinfo = My::Test->new(name => $test_name_for_report);
$tinfo->{result}= 'MTR_RES_FAILED';
$tinfo->{failures}= 1;
- $tinfo->{logfile}=get_log_from_proc($mysqld->{'proc'}, $tinfo->{name});
+ $tinfo->{logfile}=get_log_from_proc($mysqld->{'proc'}, $test_name_for_report);
report_option('verbose', 1);
mtr_report_test($tinfo);
}
diff --git a/mysql-test/suite/galera/r/MDEV-24143.result b/mysql-test/suite/galera/r/MDEV-24143.result
deleted file mode 100644
index 860d8a35834..00000000000
--- a/mysql-test/suite/galera/r/MDEV-24143.result
+++ /dev/null
@@ -1,23 +0,0 @@
-connection node_2;
-connection node_1;
-CREATE TABLE t1 (c1 BIGINT NOT NULL PRIMARY KEY, c2 BINARY (10), c3 DATETIME);
-SELECT get_lock ('test2', 0);
-get_lock ('test2', 0)
-1
-DROP TABLE t1;
-CREATE TABLE t1 (c1 SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY);
-INSERT INTO t1 VALUES (1);
-SET SESSION wsrep_trx_fragment_size=10;
-SET SESSION autocommit=0;
-SELECT * FROM t1 WHERE c1 <=0 ORDER BY c1 DESC;
-c1
-INSERT INTO t1 VALUES (4),(3),(1),(2);
-ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
-CREATE TABLE t1 (pk INT PRIMARY KEY, b INT) ENGINE=SEQUENCE;
-ERROR 42S01: Table 't1' already exists
-ALTER TABLE t1 DROP COLUMN c2;
-ERROR 42000: Can't DROP COLUMN `c2`; check that it exists
-SELECT get_lock ('test', 1.5);
-get_lock ('test', 1.5)
-1
-DROP TABLE t1;
diff --git a/mysql-test/suite/galera/r/galera_backup_start.result b/mysql-test/suite/galera/r/galera_backup_start.result
new file mode 100644
index 00000000000..253a0ce7416
--- /dev/null
+++ b/mysql-test/suite/galera/r/galera_backup_start.result
@@ -0,0 +1,6 @@
+connection node_2;
+connection node_1;
+BACKUP STAGE START;
+START TRANSACTION;
+COMMIT;
+BACKUP STAGE END;
diff --git a/mysql-test/suite/galera/r/galera_bf_abort_get_lock.result b/mysql-test/suite/galera/r/galera_bf_abort_get_lock.result
deleted file mode 100644
index 0ef2a1a72c6..00000000000
--- a/mysql-test/suite/galera/r/galera_bf_abort_get_lock.result
+++ /dev/null
@@ -1,18 +0,0 @@
-connection node_2;
-connection node_1;
-CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
-connection node_2a;
-SELECT GET_LOCK("foo", 1000);
-GET_LOCK("foo", 1000)
-1
-connection node_2;
-SET AUTOCOMMIT=OFF;
-INSERT INTO t1 VALUES (1);
-SELECT GET_LOCK("foo", 1000);;
-connection node_1;
-INSERT INTO t1 VALUES (1);
-connection node_2;
-ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
-wsrep_local_aborts_increment
-1
-DROP TABLE t1;
diff --git a/mysql-test/suite/galera/r/galera_locks_funcs.result b/mysql-test/suite/galera/r/galera_locks_funcs.result
new file mode 100644
index 00000000000..25d3bbe28f5
--- /dev/null
+++ b/mysql-test/suite/galera/r/galera_locks_funcs.result
@@ -0,0 +1,24 @@
+connection node_2;
+connection node_1;
+CREATE TABLE t (c DOUBLE,c2 INT,PRIMARY KEY(c)) ENGINE=InnoDB;
+INSERT INTO t values (1,1);
+SELECT GET_LOCK('a',1);
+ERROR 42000: This version of MariaDB doesn't yet support 'GET_LOCK in cluster (WSREP_ON=ON)'
+SHOW WARNINGS;
+Level Code Message
+Error 1235 This version of MariaDB doesn't yet support 'GET_LOCK in cluster (WSREP_ON=ON)'
+SELECT * FROM t;
+c c2
+1 1
+SELECT RELEASE_LOCK('a');
+ERROR 42000: This version of MariaDB doesn't yet support 'RELEASE_LOCK in cluster (WSREP_ON=ON)'
+SHOW WARNINGS;
+Level Code Message
+Error 1235 This version of MariaDB doesn't yet support 'RELEASE_LOCK in cluster (WSREP_ON=ON)'
+SELECT RELEASE_ALL_LOCKS();
+ERROR 42000: This version of MariaDB doesn't yet support 'RELEASE_ALL_LOCKS in cluster (WSREP_ON=ON)'
+SHOW WARNINGS;
+Level Code Message
+Error 1235 This version of MariaDB doesn't yet support 'RELEASE_ALL_LOCKS in cluster (WSREP_ON=ON)'
+COMMIT;
+DROP TABLE t;
diff --git a/mysql-test/suite/galera/t/MDEV-24143.test b/mysql-test/suite/galera/t/MDEV-24143.test
deleted file mode 100644
index e58f147cb7c..00000000000
--- a/mysql-test/suite/galera/t/MDEV-24143.test
+++ /dev/null
@@ -1,20 +0,0 @@
---source include/galera_cluster.inc
---source include/have_sequence.inc
-
-CREATE TABLE t1 (c1 BIGINT NOT NULL PRIMARY KEY, c2 BINARY (10), c3 DATETIME);
-SELECT get_lock ('test2', 0);
-DROP TABLE t1;
-CREATE TABLE t1 (c1 SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY);
-INSERT INTO t1 VALUES (1);
-SET SESSION wsrep_trx_fragment_size=10;
-SET SESSION autocommit=0;
-SELECT * FROM t1 WHERE c1 <=0 ORDER BY c1 DESC;
---error ER_LOCK_DEADLOCK
-INSERT INTO t1 VALUES (4),(3),(1),(2);
---error ER_TABLE_EXISTS_ERROR
-CREATE TABLE t1 (pk INT PRIMARY KEY, b INT) ENGINE=SEQUENCE;
---error ER_CANT_DROP_FIELD_OR_KEY
-ALTER TABLE t1 DROP COLUMN c2;
-SELECT get_lock ('test', 1.5);
-DROP TABLE t1;
-
diff --git a/mysql-test/suite/galera/t/galera_backup_start.test b/mysql-test/suite/galera/t/galera_backup_start.test
new file mode 100644
index 00000000000..4489e9ff582
--- /dev/null
+++ b/mysql-test/suite/galera/t/galera_backup_start.test
@@ -0,0 +1,6 @@
+--source include/galera_cluster.inc
+
+BACKUP STAGE START;
+START TRANSACTION;
+COMMIT;
+BACKUP STAGE END;
diff --git a/mysql-test/suite/galera/t/galera_bf_abort_get_lock.test b/mysql-test/suite/galera/t/galera_bf_abort_get_lock.test
deleted file mode 100644
index 72fc1c5b583..00000000000
--- a/mysql-test/suite/galera/t/galera_bf_abort_get_lock.test
+++ /dev/null
@@ -1,36 +0,0 @@
---source include/galera_cluster.inc
---source include/have_innodb.inc
-
-#
-# Test a local transaction being aborted by a slave one while it is running a GET_LOCK()
-#
-
-CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
-
---let $galera_connection_name = node_2a
---let $galera_server_number = 2
---source include/galera_connect.inc
---connection node_2a
-SELECT GET_LOCK("foo", 1000);
-
---connection node_2
-SET AUTOCOMMIT=OFF;
---let $wsrep_local_bf_aborts_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'`
-INSERT INTO t1 VALUES (1);
---send SELECT GET_LOCK("foo", 1000);
-
---connection node_1
-INSERT INTO t1 VALUES (1);
-
---connection node_2
---error ER_LOCK_DEADLOCK
---reap
-
---let $wsrep_local_bf_aborts_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'`
-
-# Check that wsrep_local_bf_aborts has been incremented by exactly 1
---disable_query_log
---eval SELECT $wsrep_local_bf_aborts_after - $wsrep_local_bf_aborts_before = 1 AS wsrep_local_aborts_increment;
---enable_query_log
-
-DROP TABLE t1;
diff --git a/mysql-test/suite/galera/t/galera_locks_funcs.test b/mysql-test/suite/galera/t/galera_locks_funcs.test
new file mode 100644
index 00000000000..42838e9585c
--- /dev/null
+++ b/mysql-test/suite/galera/t/galera_locks_funcs.test
@@ -0,0 +1,18 @@
+--source include/galera_cluster.inc
+
+CREATE TABLE t (c DOUBLE,c2 INT,PRIMARY KEY(c)) ENGINE=InnoDB;
+INSERT INTO t values (1,1);
+--error ER_NOT_SUPPORTED_YET
+SELECT GET_LOCK('a',1);
+SHOW WARNINGS;
+SELECT * FROM t;
+--error ER_NOT_SUPPORTED_YET
+SELECT RELEASE_LOCK('a');
+SHOW WARNINGS;
+# New in 10.5
+--error ER_NOT_SUPPORTED_YET
+SELECT RELEASE_ALL_LOCKS();
+SHOW WARNINGS;
+COMMIT;
+DROP TABLE t;
+
diff --git a/mysql-test/suite/innodb/r/alter_copy.result b/mysql-test/suite/innodb/r/alter_copy.result
index 72ae28e9652..8c9e5966b2e 100644
--- a/mysql-test/suite/innodb/r/alter_copy.result
+++ b/mysql-test/suite/innodb/r/alter_copy.result
@@ -51,7 +51,7 @@ ADD INDEX(a,b,d), ADD INDEX(a,d,b), ADD INDEX(b,c,d), ADD INDEX(b,d,c),
ALGORITHM=COPY;
connection default;
SET DEBUG_SYNC='now WAIT_FOR hung';
-# restart: --innodb-force-recovery=3
+# restart: --innodb-force-recovery=3 --debug_dbug=+d,recv_ran_out_of_buffer
disconnect hang;
FTS_INDEX_1.ibd
FTS_INDEX_2.ibd
diff --git a/mysql-test/suite/innodb/r/insert_into_empty.result b/mysql-test/suite/innodb/r/insert_into_empty.result
index 429e0174f9d..eedfb681929 100644
--- a/mysql-test/suite/innodb/r/insert_into_empty.result
+++ b/mysql-test/suite/innodb/r/insert_into_empty.result
@@ -405,3 +405,21 @@ nb_corrupted_rows
0
DROP TABLE t1;
# End of 10.7 tests
+#
+# MDEV-30426 Assertion !rec_offs_nth_extern(offsets2, n)
+# during bulk insert
+#
+CREATE TABLE t1(f1 TEXT NOT NULL, f2 TEXT NOT NULL,
+f3 TEXT NOT NULL, f4 TEXT NOT NULL,
+f5 TEXT NOT NULL, f6 TEXT NOT NULL,
+PRIMARY KEY(f6(10)))ENGINE=InnoDB;
+BEGIN;
+INSERT INTO t1 VALUES
+(repeat('a', 200), repeat('b', 200), repeat('c', 200),
+repeat('d', 200), repeat('e', 200), repeat('f', 200)),
+(repeat('b', 20000), repeat('c', 16000), repeat('d', 12000),
+repeat('e', 12000), repeat('f', 12000), repeat('f', 12000));
+ERROR HY000: Got error 1 "Operation not permitted" during COMMIT
+COMMIT;
+DROP TABLE t1;
+# End of 10.8 tests
diff --git a/mysql-test/suite/innodb/r/mdev-14846.result b/mysql-test/suite/innodb/r/mdev-14846.result
index 219bd718feb..a1ccfb6bb4d 100644
--- a/mysql-test/suite/innodb/r/mdev-14846.result
+++ b/mysql-test/suite/innodb/r/mdev-14846.result
@@ -31,11 +31,12 @@ pk f1 f2 f3
3 t q 1
5 z t NULL
SET DEBUG_SYNC='now SIGNAL default_dml';
+SET DEBUG_SYNC='now SIGNAL con2_dml';
connection default;
SET DEBUG_SYNC='now WAIT_FOR default_dml';
UPDATE t3 AS alias1 LEFT JOIN t3 AS alias2 ON ( alias1.f1 <> alias1.f2 ) SET alias1.f3 = 59 WHERE ( EXISTS ( SELECT t1.f3 FROM t1 WHERE t1.f1 = alias1.f1 ) ) OR alias2.f1 = 'h';
connect con2,localhost,root,,test;
-set debug_sync='now WAIT_FOR default_dml';
+set debug_sync='now WAIT_FOR con2_dml';
SET DEBUG_SYNC='now SIGNAL con1_dml2';
disconnect con2;
connection con1;
diff --git a/mysql-test/suite/innodb/r/recovery_memory.result b/mysql-test/suite/innodb/r/recovery_memory.result
index 4fa31009130..9aba9bccdb3 100644
--- a/mysql-test/suite/innodb/r/recovery_memory.result
+++ b/mysql-test/suite/innodb/r/recovery_memory.result
@@ -1,3 +1,7 @@
+call mtr.add_suppression("InnoDB: The change buffer is corrupted");
+call mtr.add_suppression("InnoDB: Plugin initialization aborted at srv0start.cc");
+call mtr.add_suppression("Plugin 'InnoDB' init function returned error");
+call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed.");
CREATE TABLE t1(c TEXT, KEY(c(3072)))ENGINE=InnoDB;
CREATE PROCEDURE dorepeat()
LOOP
@@ -10,3 +14,19 @@ CALL dorepeat();
connection default;
# restart: --innodb_buffer_pool_size=5242880
DROP TABLE t1;
+DROP PROCEDURE dorepeat;
+#
+# MDEV-30552 InnoDB recovery crashes when error
+# handling scenario
+#
+SET DEBUG_DBUG="+d,ib_log_checkpoint_avoid_hard";
+CREATE TABLE t1(f1 INT NOT NULL)ENGINE=InnoDB;
+INSERT INTO t1 SELECT * FROM seq_1_to_65536;
+# restart: with restart_parameters
+# restart
+SHOW CREATE TABLE t1;
+Table Create Table
+t1 CREATE TABLE `t1` (
+ `f1` int(11) NOT NULL
+) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
+DROP TABLE t1;
diff --git a/mysql-test/suite/innodb/t/alter_copy.test b/mysql-test/suite/innodb/t/alter_copy.test
index 90f2171d10b..b62f812f4b7 100644
--- a/mysql-test/suite/innodb/t/alter_copy.test
+++ b/mysql-test/suite/innodb/t/alter_copy.test
@@ -57,7 +57,7 @@ ALTER TABLE t ADD INDEX(b,c,d,a),ADD INDEX(b,c,a,d),ADD INDEX(b,a,c,d),ADD INDEX
connection default;
SET DEBUG_SYNC='now WAIT_FOR hung';
let $shutdown_timeout=0;
---let $restart_parameters= --innodb-force-recovery=3
+--let $restart_parameters= --innodb-force-recovery=3 --debug_dbug="+d,recv_ran_out_of_buffer"
--source include/restart_mysqld.inc
disconnect hang;
let $shutdown_timeout=;
diff --git a/mysql-test/suite/innodb/t/insert_into_empty.opt b/mysql-test/suite/innodb/t/insert_into_empty.opt
new file mode 100644
index 00000000000..c856c2d215a
--- /dev/null
+++ b/mysql-test/suite/innodb/t/insert_into_empty.opt
@@ -0,0 +1 @@
+--innodb_sort_buffer_size=65536
diff --git a/mysql-test/suite/innodb/t/insert_into_empty.test b/mysql-test/suite/innodb/t/insert_into_empty.test
index 64043e383dc..ee32a2d7cac 100644
--- a/mysql-test/suite/innodb/t/insert_into_empty.test
+++ b/mysql-test/suite/innodb/t/insert_into_empty.test
@@ -424,3 +424,22 @@ SELECT COUNT(*) AS nb_corrupted_rows FROM t1 WHERE data != REPEAT('X', @@innodb_
DROP TABLE t1;
--echo # End of 10.7 tests
+
+--echo #
+--echo # MDEV-30426 Assertion !rec_offs_nth_extern(offsets2, n)
+--echo # during bulk insert
+--echo #
+CREATE TABLE t1(f1 TEXT NOT NULL, f2 TEXT NOT NULL,
+ f3 TEXT NOT NULL, f4 TEXT NOT NULL,
+ f5 TEXT NOT NULL, f6 TEXT NOT NULL,
+ PRIMARY KEY(f6(10)))ENGINE=InnoDB;
+BEGIN;
+--error ER_ERROR_DURING_COMMIT
+INSERT INTO t1 VALUES
+ (repeat('a', 200), repeat('b', 200), repeat('c', 200),
+ repeat('d', 200), repeat('e', 200), repeat('f', 200)),
+ (repeat('b', 20000), repeat('c', 16000), repeat('d', 12000),
+ repeat('e', 12000), repeat('f', 12000), repeat('f', 12000));
+COMMIT;
+DROP TABLE t1;
+--echo # End of 10.8 tests
diff --git a/mysql-test/suite/innodb/t/mdev-14846.test b/mysql-test/suite/innodb/t/mdev-14846.test
index adcefecd52f..b1f32302591 100644
--- a/mysql-test/suite/innodb/t/mdev-14846.test
+++ b/mysql-test/suite/innodb/t/mdev-14846.test
@@ -35,6 +35,7 @@ SET DEBUG_SYNC='now WAIT_FOR con1_dml';
begin;
SELECT * FROM t1 for update; # Holds x lock of all records in the table t1
SET DEBUG_SYNC='now SIGNAL default_dml';
+SET DEBUG_SYNC='now SIGNAL con2_dml';
--connection default
SET DEBUG_SYNC='now WAIT_FOR default_dml';
@@ -42,7 +43,7 @@ SET DEBUG_SYNC='now WAIT_FOR default_dml';
# It holds the lock of all record in t3 and tries to acquire record lock for the table t1.
--connect (con2,localhost,root,,test)
-set debug_sync='now WAIT_FOR default_dml';
+set debug_sync='now WAIT_FOR con2_dml';
let $wait_condition=
select count(*) > 0 from information_schema.innodb_lock_waits;
--source include/wait_condition.inc
diff --git a/mysql-test/suite/innodb/t/recovery_memory.test b/mysql-test/suite/innodb/t/recovery_memory.test
index d9afd52c499..145b39d56f6 100644
--- a/mysql-test/suite/innodb/t/recovery_memory.test
+++ b/mysql-test/suite/innodb/t/recovery_memory.test
@@ -1,5 +1,11 @@
--source include/have_innodb.inc
--source include/big_test.inc
+--source include/have_sequence.inc
+--source include/maybe_debug.inc
+call mtr.add_suppression("InnoDB: The change buffer is corrupted");
+call mtr.add_suppression("InnoDB: Plugin initialization aborted at srv0start.cc");
+call mtr.add_suppression("Plugin 'InnoDB' init function returned error");
+call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed.");
CREATE TABLE t1(c TEXT, KEY(c(3072)))ENGINE=InnoDB;
DELIMITER |;
@@ -19,3 +25,27 @@ let $shutdown_timeout=0;
let $restart_parameters=--innodb_buffer_pool_size=5242880;
--source include/restart_mysqld.inc
DROP TABLE t1;
+DROP PROCEDURE dorepeat;
+
+--echo #
+--echo # MDEV-30552 InnoDB recovery crashes when error
+--echo # handling scenario
+--echo #
+if ($have_debug) {
+SET DEBUG_DBUG="+d,ib_log_checkpoint_avoid_hard";
+let $restart_parameters=--innodb_buffer_pool_size=5242880 --debug_dbug="+d,ibuf_init_corrupt";
+}
+if (!$have_debug) {
+--echo SET DEBUG_DBUG="+d,ib_log_checkpoint_avoid_hard";
+let $restart_parameters=--innodb_buffer_pool_size=5242880;
+}
+CREATE TABLE t1(f1 INT NOT NULL)ENGINE=InnoDB;
+INSERT INTO t1 SELECT * FROM seq_1_to_65536;
+let $restart_noprint=1;
+let $shutdown_timeout=0;
+--source include/restart_mysqld.inc
+let $restart_noprint=0;
+let $restart_parameters=;
+--source include/restart_mysqld.inc
+SHOW CREATE TABLE t1;
+DROP TABLE t1;
diff --git a/mysql-test/suite/mariabackup/full_backup_win.result b/mysql-test/suite/mariabackup/full_backup_win.result
new file mode 100644
index 00000000000..940c7056d3f
--- /dev/null
+++ b/mysql-test/suite/mariabackup/full_backup_win.result
@@ -0,0 +1,12 @@
+#
+# MDEV-30492 Crash when use mariabackup.exe with config 'innodb_flush_method=async_unbuffered'
+#
+# xtrabackup backup
+# xtrabackup prepare
+# shutdown server
+# remove datadir
+# xtrabackup move back
+# restart
+#
+# End of 10.4 tests
+#
diff --git a/mysql-test/suite/mariabackup/full_backup_win.test b/mysql-test/suite/mariabackup/full_backup_win.test
new file mode 100644
index 00000000000..5a1d1c38026
--- /dev/null
+++ b/mysql-test/suite/mariabackup/full_backup_win.test
@@ -0,0 +1,24 @@
+--source include/windows.inc
+
+let $targetdir=$MYSQLTEST_VARDIR/tmp/backup;
+
+--echo #
+--echo # MDEV-30492 Crash when use mariabackup.exe with config 'innodb_flush_method=async_unbuffered'
+--echo #
+
+echo # xtrabackup backup;
+--disable_result_log
+exec $XTRABACKUP --defaults-file=$MYSQLTEST_VARDIR/my.cnf --innodb_flush_method=normal --backup --target-dir=$targetdir;
+--enable_result_log
+
+echo # xtrabackup prepare;
+--disable_result_log
+exec $XTRABACKUP --prepare --innodb-flush-method=async_unbuffered --target-dir=$targetdir;
+-- source include/restart_and_restore.inc
+--enable_result_log
+
+rmdir $targetdir;
+
+--echo #
+--echo # End of 10.4 tests
+--echo #
diff --git a/mysql-test/suite/plugins/r/locales.result b/mysql-test/suite/plugins/r/locales.result
index 2ea88493705..e906d27c21e 100644
--- a/mysql-test/suite/plugins/r/locales.result
+++ b/mysql-test/suite/plugins/r/locales.result
@@ -1,3 +1,4 @@
+SET names utf8;
select * from information_schema.locales;
ID NAME DESCRIPTION MAX_MONTH_NAME_LENGTH MAX_DAY_NAME_LENGTH DECIMAL_POINT THOUSAND_SEP ERROR_MESSAGE_LANGUAGE
0 en_US English - United States 9 9 . , english
@@ -52,7 +53,7 @@ ID NAME DESCRIPTION MAX_MONTH_NAME_LENGTH MAX_DAY_NAME_LENGTH DECIMAL_POINT THOU
49 ta_IN Tamil - India 10 8 . , english
50 te_IN Telugu - India 10 9 . , english
51 th_TH Thai - Thailand 10 8 . , english
-52 tr_TR Turkish - Turkey 7 9 , . english
+52 tr_TR Turkish - Türkiye 7 9 , . english
53 uk_UA Ukrainian - Ukraine 8 9 , . ukrainian
54 ur_PK Urdu - Pakistan 6 6 . , english
55 vi_VN Vietnamese - Vietnam 16 11 , . english
@@ -165,7 +166,7 @@ Id Name Description Error_Message_Language
49 ta_IN Tamil - India english
50 te_IN Telugu - India english
51 th_TH Thai - Thailand english
-52 tr_TR Turkish - Turkey english
+52 tr_TR Turkish - Türkiye english
53 uk_UA Ukrainian - Ukraine ukrainian
54 ur_PK Urdu - Pakistan english
55 vi_VN Vietnamese - Vietnam english
diff --git a/mysql-test/suite/plugins/t/locales.test b/mysql-test/suite/plugins/t/locales.test
index a3afe75046f..2b4d56433d9 100644
--- a/mysql-test/suite/plugins/t/locales.test
+++ b/mysql-test/suite/plugins/t/locales.test
@@ -2,6 +2,7 @@ if (`select count(*) = 0 from information_schema.plugins where plugin_name = 'lo
{
--skip LOCALES plugin is not active
}
+SET names utf8;
select * from information_schema.locales;
show locales;
diff --git a/mysql-test/suite/rpl/r/rpl_delayed_parallel_slave_sbm.result b/mysql-test/suite/rpl/r/rpl_delayed_parallel_slave_sbm.result
index f783b1e0783..b00a8a5e1d7 100644
--- a/mysql-test/suite/rpl/r/rpl_delayed_parallel_slave_sbm.result
+++ b/mysql-test/suite/rpl/r/rpl_delayed_parallel_slave_sbm.result
@@ -35,9 +35,19 @@ connection master;
insert into t1 values (1);
# Sleep 3 to create gap between events
insert into t1 values (2);
+include/save_master_pos.inc
connection slave;
LOCK TABLES t1 WRITE;
+SET @@global.debug_dbug="+d,pause_sql_thread_on_next_event";
START SLAVE IO_THREAD;
+# Before we start processing the events, we ensure both transactions
+# were written into the relay log. Otherwise, if the IO thread takes too
+# long to queue the events, the sql thread can think it has caught up
+# too quickly.
+SET DEBUG_SYNC='now WAIT_FOR paused_on_event';
+include/sync_io_with_master.inc
+SET @@global.debug_dbug="-d,pause_sql_thread_on_next_event";
+SET DEBUG_SYNC='now SIGNAL sql_thread_continue';
# Wait for first transaction to complete SQL delay and begin execution..
# Validate SBM calculation doesn't use the second transaction because SQL thread shouldn't have gone idle..
# ..and that SBM wasn't calculated using prior committed transactions
@@ -50,6 +60,8 @@ UNLOCK TABLES;
include/stop_slave.inc
CHANGE MASTER TO master_delay=0;
set @@GLOBAL.slave_parallel_threads=4;
+SET @@global.debug_dbug="";
+SET DEBUG_SYNC='RESET';
include/start_slave.inc
connection master;
DROP TABLE t1;
diff --git a/mysql-test/suite/rpl/t/rpl_delayed_parallel_slave_sbm.test b/mysql-test/suite/rpl/t/rpl_delayed_parallel_slave_sbm.test
index 4bcb7ad9e3f..1ac1bc14468 100644
--- a/mysql-test/suite/rpl/t/rpl_delayed_parallel_slave_sbm.test
+++ b/mysql-test/suite/rpl/t/rpl_delayed_parallel_slave_sbm.test
@@ -12,9 +12,12 @@
#
--source include/master-slave.inc
+--source include/have_debug.inc
+--source include/have_debug_sync.inc
--connection slave
--source include/stop_slave.inc
+--let $old_debug_dbug= `SELECT @@global.debug_dbug`
--let $master_delay= 3
--eval change master to master_delay=$master_delay, master_use_gtid=Slave_Pos
--let $old_slave_threads= `SELECT @@GLOBAL.slave_parallel_threads`
@@ -82,12 +85,24 @@ sleep 3;
--eval insert into t1 values ($insert_ctr)
--inc $insert_ctr
--let $ts_trx_after_ins= `SELECT UNIX_TIMESTAMP()`
+--source include/save_master_pos.inc
--connection slave
LOCK TABLES t1 WRITE;
+SET @@global.debug_dbug="+d,pause_sql_thread_on_next_event";
+
START SLAVE IO_THREAD;
+--echo # Before we start processing the events, we ensure both transactions
+--echo # were written into the relay log. Otherwise, if the IO thread takes too
+--echo # long to queue the events, the sql thread can think it has caught up
+--echo # too quickly.
+SET DEBUG_SYNC='now WAIT_FOR paused_on_event';
+--source include/sync_io_with_master.inc
+SET @@global.debug_dbug="-d,pause_sql_thread_on_next_event";
+SET DEBUG_SYNC='now SIGNAL sql_thread_continue';
+
--echo # Wait for first transaction to complete SQL delay and begin execution..
--let $wait_condition= SELECT count(*) FROM information_schema.processlist WHERE state LIKE 'Waiting for table metadata lock%' AND command LIKE 'Slave_Worker';
--source include/wait_condition.inc
@@ -120,6 +135,8 @@ UNLOCK TABLES;
--source include/stop_slave.inc
--eval CHANGE MASTER TO master_delay=0
--eval set @@GLOBAL.slave_parallel_threads=$old_slave_threads
+--eval SET @@global.debug_dbug="$old_debug_dbug"
+SET DEBUG_SYNC='RESET';
--source include/start_slave.inc
--connection master
diff --git a/mysql-test/suite/stress/r/deadlock_drop_table.result b/mysql-test/suite/stress/r/deadlock_drop_table.result
index 326f694e8d9..7e549157c81 100644
--- a/mysql-test/suite/stress/r/deadlock_drop_table.result
+++ b/mysql-test/suite/stress/r/deadlock_drop_table.result
@@ -19,11 +19,12 @@ a b c
1 NULL NULL
set debug_sync='now SIGNAL go';
set debug_sync='now WAIT_FOR parked2';
-set debug_sync='before_wait_for_refs SIGNAL waiting WAIT_FOR go2';
+set debug_sync='before_wait_for_refs SIGNAL waiting WAIT_FOR go3';
drop table t1;;
connection con2;
set debug_sync='now WAIT_FOR waiting';
set debug_sync='now SIGNAL go2';
+set debug_sync='now SIGNAL go3';
connection default;
connection con1;
connection default;
diff --git a/mysql-test/suite/stress/t/deadlock_drop_table.test b/mysql-test/suite/stress/t/deadlock_drop_table.test
index 0ec19f87389..b4f8f2201e0 100644
--- a/mysql-test/suite/stress/t/deadlock_drop_table.test
+++ b/mysql-test/suite/stress/t/deadlock_drop_table.test
@@ -20,15 +20,12 @@ set debug_sync='now WAIT_FOR parked';
select * from t1;
set debug_sync='now SIGNAL go';
set debug_sync='now WAIT_FOR parked2';
-set debug_sync='before_wait_for_refs SIGNAL waiting WAIT_FOR go2';
+set debug_sync='before_wait_for_refs SIGNAL waiting WAIT_FOR go3';
--send drop table t1;
--connection con2
set debug_sync='now WAIT_FOR waiting';
set debug_sync='now SIGNAL go2';
-
-# Write out show processlist if the debug sync point times out
-let $wait_condition= select count(*)=0 from information_schema.processlist where state like "%debug%";
-source include/wait_condition.inc;
+set debug_sync='now SIGNAL go3';
--connection default
--reap
diff --git a/mysql-test/suite/sys_vars/r/debug_sync_basic.result b/mysql-test/suite/sys_vars/r/debug_sync_basic.result
index 6ebb46dd662..11506cac2c2 100644
--- a/mysql-test/suite/sys_vars/r/debug_sync_basic.result
+++ b/mysql-test/suite/sys_vars/r/debug_sync_basic.result
@@ -2,17 +2,17 @@ select @@global.debug_sync;
ERROR HY000: Variable 'debug_sync' is a SESSION variable
select @@session.debug_sync;
@@session.debug_sync
-ON - current signal: ''
+ON - current signals: ''
show global variables like "debug_sync";
Variable_name Value
show session variables like "debug_sync";
Variable_name Value
-debug_sync ON - current signal: ''
+debug_sync ON - current signals: ''
select * from information_schema.global_variables where variable_name="debug_sync";
VARIABLE_NAME VARIABLE_VALUE
select * from information_schema.session_variables where variable_name="debug_sync";
VARIABLE_NAME VARIABLE_VALUE
-DEBUG_SYNC ON - current signal: ''
+DEBUG_SYNC ON - current signals: ''
set @@session.debug_sync=1;
ERROR 42000: Incorrect argument type to variable 'debug_sync'
set @@session.debug_sync=1.1;
diff --git a/mysql-test/suite/sys_vars/r/sysvars_debug.result b/mysql-test/suite/sys_vars/r/sysvars_debug.result
index 0d77b0211a1..fc04ac83210 100644
--- a/mysql-test/suite/sys_vars/r/sysvars_debug.result
+++ b/mysql-test/suite/sys_vars/r/sysvars_debug.result
@@ -77,7 +77,7 @@ READ_ONLY YES
COMMAND_LINE_ARGUMENT OPTIONAL
GLOBAL_VALUE_PATH NULL
VARIABLE_NAME DEBUG_SYNC
-SESSION_VALUE ON - current signal: ''
+SESSION_VALUE ON - current signals: ''
GLOBAL_VALUE NULL
GLOBAL_VALUE_ORIGIN COMPILE-TIME
DEFAULT_VALUE
diff --git a/mysys/charset.c b/mysys/charset.c
index da6180dccba..560c713a361 100644
--- a/mysys/charset.c
+++ b/mysys/charset.c
@@ -393,6 +393,8 @@ static int add_collation(struct charset_info_st *cs)
&my_charset_utf8mb4_unicode_ci,
cs);
newcs->m_ctype= my_charset_utf8mb4_unicode_ci.m_ctype;
+ if (init_state_maps(newcs))
+ return MY_XML_ERROR;
newcs->state|= MY_CS_AVAILABLE | MY_CS_LOADED;
#endif
}
diff --git a/mysys/my_largepage.c b/mysys/my_largepage.c
index 9cc1e19772b..b5193a9cd8e 100644
--- a/mysys/my_largepage.c
+++ b/mysys/my_largepage.c
@@ -376,7 +376,7 @@ uchar *my_large_malloc(size_t *size, myf my_flags)
ptr= NULL;
if (my_flags & MY_WME)
{
- if (large_page_size)
+ if (large_page_size && errno == ENOMEM)
{
my_printf_error(EE_OUTOFMEMORY,
"Couldn't allocate %zu bytes (Large/HugeTLB memory "
diff --git a/mysys/stacktrace.c b/mysys/stacktrace.c
index 844d8a0b28f..f203bba4d8d 100644
--- a/mysys/stacktrace.c
+++ b/mysys/stacktrace.c
@@ -34,6 +34,9 @@
#include <execinfo.h>
#endif
+#ifdef HAVE_gcov
+#include <gcov.h>
+#endif
/**
Default handler for printing stacktrace
*/
@@ -409,9 +412,6 @@ end:
/* Produce a core for the thread */
void my_write_core(int sig)
{
-#ifdef HAVE_gcov
- extern void __gcov_flush(void);
-#endif
signal(sig, SIG_DFL);
#ifdef HAVE_gcov
/*
@@ -419,7 +419,7 @@ void my_write_core(int sig)
information from this process, causing gcov output to be incomplete.
So we force the writing of coverage information here before terminating.
*/
- __gcov_flush();
+ __gcov_dump();
#endif
pthread_kill(pthread_self(), sig);
#if defined(P_MYID) && !defined(SCO)
diff --git a/mysys_ssl/my_crypt.cc b/mysys_ssl/my_crypt.cc
index 4d7ebc7bd27..00447e73d79 100644
--- a/mysys_ssl/my_crypt.cc
+++ b/mysys_ssl/my_crypt.cc
@@ -101,7 +101,7 @@ public:
uchar source_tail[MY_AES_BLOCK_SIZE];
MyCTX_nopad() : MyCTX() { }
- ~MyCTX_nopad() { }
+ ~MyCTX_nopad() = default;
int init(const EVP_CIPHER *cipher, int encrypt, const uchar *key, uint klen,
const uchar *iv, uint ivlen)
diff --git a/plugin/handler_socket/handlersocket/database.cpp b/plugin/handler_socket/handlersocket/database.cpp
index 937b1177ae4..db24e33a141 100644
--- a/plugin/handler_socket/handlersocket/database.cpp
+++ b/plugin/handler_socket/handlersocket/database.cpp
@@ -189,9 +189,7 @@ database::database(const config& c)
{
}
-database::~database()
-{
-}
+database::~database() = default;
dbcontext_ptr
database::create_context(bool for_write) volatile
@@ -226,9 +224,7 @@ dbcontext::dbcontext(volatile database *d, bool for_write)
user_level_lock_timeout = d->get_conf().get_int("wrlock_timeout", 12);
}
-dbcontext::~dbcontext()
-{
-}
+dbcontext::~dbcontext() = default;
namespace {
diff --git a/plugin/handler_socket/handlersocket/database.hpp b/plugin/handler_socket/handlersocket/database.hpp
index a4aee0874c7..ed5d00800d9 100644
--- a/plugin/handler_socket/handlersocket/database.hpp
+++ b/plugin/handler_socket/handlersocket/database.hpp
@@ -27,7 +27,7 @@ struct dbcontext_i;
typedef std::auto_ptr<dbcontext_i> dbcontext_ptr;
struct database_i {
- virtual ~database_i() { }
+ virtual ~database_i() = default;
virtual dbcontext_ptr create_context(bool for_write) volatile = 0;
virtual void stop() volatile = 0;
virtual const config& get_conf() const volatile = 0;
@@ -57,7 +57,7 @@ struct prep_stmt {
};
struct dbcallback_i {
- virtual ~dbcallback_i () { }
+ virtual ~dbcallback_i() = default;
virtual void dbcb_set_prep_stmt(size_t pst_id, const prep_stmt& v) = 0;
virtual const prep_stmt *dbcb_get_prep_stmt(size_t pst_id) const = 0;
virtual void dbcb_resp_short(uint32_t code, const char *msg) = 0;
@@ -111,7 +111,7 @@ struct cmd_exec_args {
};
struct dbcontext_i {
- virtual ~dbcontext_i() { }
+ virtual ~dbcontext_i() = default;
virtual void init_thread(const void *stack_bottom,
volatile int& shutdown_flag) = 0;
virtual void term_thread() = 0;
diff --git a/plugin/handler_socket/handlersocket/hstcpsvr.hpp b/plugin/handler_socket/handlersocket/hstcpsvr.hpp
index 811bfa25613..5fbed92402b 100644
--- a/plugin/handler_socket/handlersocket/hstcpsvr.hpp
+++ b/plugin/handler_socket/handlersocket/hstcpsvr.hpp
@@ -47,7 +47,7 @@ struct hstcpsvr_i;
typedef std::auto_ptr<hstcpsvr_i> hstcpsvr_ptr;
struct hstcpsvr_i {
- virtual ~hstcpsvr_i() { }
+ virtual ~hstcpsvr_i() = default;
virtual std::string start_listen() = 0;
static hstcpsvr_ptr create(const config& conf);
};
diff --git a/plugin/handler_socket/handlersocket/hstcpsvr_worker.hpp b/plugin/handler_socket/handlersocket/hstcpsvr_worker.hpp
index 497581c27a7..25612adec0f 100644
--- a/plugin/handler_socket/handlersocket/hstcpsvr_worker.hpp
+++ b/plugin/handler_socket/handlersocket/hstcpsvr_worker.hpp
@@ -24,7 +24,7 @@ struct hstcpsvr_worker_arg {
};
struct hstcpsvr_worker_i {
- virtual ~hstcpsvr_worker_i() { }
+ virtual ~hstcpsvr_worker_i() = default;
virtual void run() = 0;
static hstcpsvr_worker_ptr create(const hstcpsvr_worker_arg& arg);
};
diff --git a/plugin/handler_socket/libhsclient/hstcpcli.hpp b/plugin/handler_socket/libhsclient/hstcpcli.hpp
index 11dec8ebb0b..fa0d4db1742 100644
--- a/plugin/handler_socket/libhsclient/hstcpcli.hpp
+++ b/plugin/handler_socket/libhsclient/hstcpcli.hpp
@@ -33,7 +33,7 @@ struct hstcpcli_i;
typedef std::auto_ptr<hstcpcli_i> hstcpcli_ptr;
struct hstcpcli_i {
- virtual ~hstcpcli_i() { }
+ virtual ~hstcpcli_i() = default;
virtual void close() = 0;
virtual int reconnect() = 0;
virtual bool stable_point() = 0;
diff --git a/plugin/handler_socket/libhsclient/util.hpp b/plugin/handler_socket/libhsclient/util.hpp
index 93d78cc7dc0..60b5441703d 100644
--- a/plugin/handler_socket/libhsclient/util.hpp
+++ b/plugin/handler_socket/libhsclient/util.hpp
@@ -13,7 +13,7 @@ namespace dena {
/* boost::noncopyable */
struct noncopyable {
- noncopyable() { }
+ noncopyable() = default;
private:
noncopyable(const noncopyable&);
noncopyable& operator =(const noncopyable&);
diff --git a/plugin/query_response_time/query_response_time.cc b/plugin/query_response_time/query_response_time.cc
index a669f7d4236..e344f45b392 100644
--- a/plugin/query_response_time/query_response_time.cc
+++ b/plugin/query_response_time/query_response_time.cc
@@ -153,7 +153,7 @@ class time_collector
public:
time_collector(utility& u): m_utility(&u) { flush(); }
- ~time_collector() { }
+ ~time_collector() = default;
uint32_t count(uint index) { return m_count[index]; }
uint64_t total(uint index) { return m_total[index]; }
void flush()
diff --git a/plugin/type_inet/sql_type_inet.h b/plugin/type_inet/sql_type_inet.h
index b0560f1ffe0..69836ca215b 100644
--- a/plugin/type_inet/sql_type_inet.h
+++ b/plugin/type_inet/sql_type_inet.h
@@ -73,8 +73,8 @@ protected:
memcpy(m_buffer, str, length);
return false;
}
- // Non-initializing constructor
- Inet4() { }
+
+ Inet4() = default;
public:
void to_binary(char *dst, size_t dstsize) const
{
diff --git a/plugin/versioning/versioning.cc b/plugin/versioning/versioning.cc
index 6d8f77550f6..c970a9d6561 100644
--- a/plugin/versioning/versioning.cc
+++ b/plugin/versioning/versioning.cc
@@ -36,8 +36,8 @@ public:
static Create_func_trt<TRT_FIELD> s_singleton;
protected:
- Create_func_trt<TRT_FIELD>() {}
- virtual ~Create_func_trt<TRT_FIELD>() {}
+ Create_func_trt<TRT_FIELD>() = default;
+ virtual ~Create_func_trt<TRT_FIELD>() = default;
};
template<TR_table::field_id_t TRT_FIELD>
@@ -132,8 +132,8 @@ public:
static Create_func_trt_trx_sees<Item_func_trt_trx_seesX> s_singleton;
protected:
- Create_func_trt_trx_sees<Item_func_trt_trx_seesX>() {}
- virtual ~Create_func_trt_trx_sees<Item_func_trt_trx_seesX>() {}
+ Create_func_trt_trx_sees<Item_func_trt_trx_seesX>() = default;
+ virtual ~Create_func_trt_trx_sees<Item_func_trt_trx_seesX>() = default;
};
template<class X>
diff --git a/sql/debug_sync.cc b/sql/debug_sync.cc
index 55523a728f8..eac111d32d7 100644
--- a/sql/debug_sync.cc
+++ b/sql/debug_sync.cc
@@ -18,6 +18,7 @@
#include "mariadb.h"
#include "debug_sync.h"
+#include <cstring>
#if defined(ENABLED_DEBUG_SYNC)
@@ -48,6 +49,8 @@ struct st_debug_sync_action
String wait_for; /* signal to wait for */
String sync_point; /* sync point name */
bool need_sort; /* if new action, array needs sort */
+ bool clear_event; /* do not clear signal when waited
+ for if false. */
};
/* Debug sync control. Referenced by THD. */
@@ -67,21 +70,99 @@ struct st_debug_sync_control
};
+
+
/**
Definitions for the debug sync facility.
- 1. Global string variable to hold a "signal" ("signal post", "flag mast").
+ 1. Global string variable to hold a set of of "signals".
2. Global condition variable for signaling and waiting.
3. Global mutex to synchronize access to the above.
*/
struct st_debug_sync_globals
{
- String ds_signal; /* signal variable */
+ Hash_set<LEX_CSTRING> ds_signal_set; /* A set of active signals */
mysql_cond_t ds_cond; /* condition variable */
mysql_mutex_t ds_mutex; /* mutex variable */
ulonglong dsp_hits; /* statistics */
ulonglong dsp_executed; /* statistics */
ulonglong dsp_max_active; /* statistics */
+
+ st_debug_sync_globals() : ds_signal_set(PSI_NOT_INSTRUMENTED, signal_key) {};
+ ~st_debug_sync_globals()
+ {
+ clear_set();
+ }
+
+ void clear_set()
+ {
+ Hash_set<LEX_CSTRING>::Iterator it{ds_signal_set};
+ LEX_CSTRING *s;
+ while ((s= it++))
+ my_free(s);
+ ds_signal_set.clear();
+ }
+
+ /* Hash key function for ds_signal_set. */
+ static uchar *signal_key(const LEX_CSTRING *str, size_t *klen, my_bool)
+ {
+ *klen= str->length;
+ return (uchar*) str->str;
+ }
+
+ /**
+ Return true if the signal is found in global signal list.
+
+ @param signal_name Signal name identifying the signal.
+
+ @note
+ If signal is found in the global signal set, it means that the
+ signal thread has signalled to the waiting thread. This method
+ must be called with the debug_sync_global.ds_mutex held.
+
+ @retval true if signal is found in the global signal list.
+ @retval false otherwise.
+ */
+
+ inline bool is_signalled(const char *signal_name, size_t length)
+ {
+ return ds_signal_set.find(signal_name, length);
+ }
+
+ void clear_signal(const String &signal_name)
+ {
+ DBUG_ENTER("clear_signal");
+ LEX_CSTRING *record= ds_signal_set.find(signal_name.ptr(),
+ signal_name.length());
+ if (record)
+ {
+ ds_signal_set.remove(record);
+ my_free(record);
+ }
+ DBUG_VOID_RETURN;
+ }
+
+ bool set_signal(const char *signal_name, size_t length)
+ {
+ /* Need to check if the signal is already in the hash set, because
+ Hash_set doesn't differentiate between OOM and key already in. */
+ if (is_signalled(signal_name, length))
+ return FALSE;
+ /* LEX_CSTRING and the string allocated with only one malloc. */
+ LEX_CSTRING *s= (LEX_CSTRING *) my_malloc(PSI_NOT_INSTRUMENTED,
+ sizeof(LEX_CSTRING) + length + 1,
+ MYF(0));
+ char *str= (char *)(s + 1);
+ memcpy(str, signal_name, length);
+ str[length]= '\0';
+
+ s->length= length;
+ s->str= str;
+ if (ds_signal_set.insert(s))
+ return TRUE;
+ return FALSE;
+ }
};
+
static st_debug_sync_globals debug_sync_global; /* All globals in one object */
/**
@@ -161,7 +242,7 @@ int debug_sync_init(void)
int rc;
/* Initialize the global variables. */
- debug_sync_global.ds_signal.length(0);
+ debug_sync_global.clear_set();
if ((rc= mysql_cond_init(key_debug_sync_globals_ds_cond,
&debug_sync_global.ds_cond, NULL)) ||
(rc= mysql_mutex_init(key_debug_sync_globals_ds_mutex,
@@ -195,7 +276,7 @@ void debug_sync_end(void)
debug_sync_C_callback_ptr= NULL;
/* Destroy the global variables. */
- debug_sync_global.ds_signal.free();
+ debug_sync_global.clear_set();
mysql_cond_destroy(&debug_sync_global.ds_cond);
mysql_mutex_destroy(&debug_sync_global.ds_mutex);
@@ -272,6 +353,40 @@ void debug_sync_init_thread(THD *thd)
/**
+ Returns an allocated buffer containing a comma-separated C string of all
+ active signals.
+
+ Buffer must be freed by the caller.
+*/
+static const char *get_signal_set_as_string()
+{
+ mysql_mutex_assert_owner(&debug_sync_global.ds_mutex);
+ size_t req_size= 1; // In case of empty set for the end '\0' char.
+
+ for (size_t i= 0; i < debug_sync_global.ds_signal_set.size(); i++)
+ req_size+= debug_sync_global.ds_signal_set.at(i)->length + 1;
+
+ char *buf= (char *) my_malloc(PSI_NOT_INSTRUMENTED, req_size, MYF(0));
+ if (!buf)
+ return nullptr;
+ memset(buf, '\0', req_size);
+
+ char *cur_pos= buf;
+ for (size_t i= 0; i < debug_sync_global.ds_signal_set.size(); i++)
+ {
+ const LEX_CSTRING *signal= debug_sync_global.ds_signal_set.at(i);
+ memcpy(cur_pos, signal->str, signal->length);
+ if (i != debug_sync_global.ds_signal_set.size() - 1)
+ cur_pos[signal->length]= ',';
+ else
+ cur_pos[signal->length] = '\0';
+ cur_pos+= signal->length + 1;
+ }
+ return buf;
+}
+
+
+/**
End the debug sync facility at thread end.
@param[in] thd thread handle
@@ -554,7 +669,7 @@ static void debug_sync_reset(THD *thd)
/* Clear the global signal. */
mysql_mutex_lock(&debug_sync_global.ds_mutex);
- debug_sync_global.ds_signal.length(0);
+ debug_sync_global.clear_set();
mysql_mutex_unlock(&debug_sync_global.ds_mutex);
DBUG_VOID_RETURN;
@@ -1175,6 +1290,7 @@ static bool debug_sync_eval_action(THD *thd, char *action_str, char *action_end)
/* Set default for EXECUTE and TIMEOUT options. */
action->execute= 1;
action->timeout= opt_debug_sync_timeout;
+ action->clear_event= true;
/* Get next token. If none follows, set action. */
if (!(ptr= debug_sync_token(&token, &token_length, ptr, action_end)))
@@ -1226,6 +1342,16 @@ static bool debug_sync_eval_action(THD *thd, char *action_str, char *action_end)
}
/*
+ Try NO_CLEAR_EVENT.
+ */
+ if (!my_strcasecmp(system_charset_info, token, "NO_CLEAR_EVENT"))
+ {
+ action->clear_event= false;
+ /* Get next token. If none follows, set action. */
+ if (!(ptr = debug_sync_token(&token, &token_length, ptr, action_end))) goto set_action;
+ }
+
+ /*
Try HIT_LIMIT.
*/
if (!my_strcasecmp(system_charset_info, token, "HIT_LIMIT"))
@@ -1325,13 +1451,19 @@ uchar *debug_sync_value_ptr(THD *thd)
if (opt_debug_sync_timeout)
{
- static char on[]= "ON - current signal: '";
+ static char on[]= "ON - current signals: '";
// Ensure exclusive access to debug_sync_global.ds_signal
mysql_mutex_lock(&debug_sync_global.ds_mutex);
- size_t lgt= (sizeof(on) /* includes '\0' */ +
- debug_sync_global.ds_signal.length() + 1 /* for '\'' */);
+ size_t lgt= sizeof(on) + 1; /* +1 as we'll have to append ' at the end. */
+
+ for (size_t i= 0; i < debug_sync_global.ds_signal_set.size(); i++)
+ {
+ /* Assume each signal is separated by a comma, hence +1. */
+ lgt+= debug_sync_global.ds_signal_set.at(i)->length + 1;
+ }
+
char *vend;
char *vptr;
@@ -1339,10 +1471,15 @@ uchar *debug_sync_value_ptr(THD *thd)
{
vend= value + lgt - 1; /* reserve space for '\0'. */
vptr= debug_sync_bmove_len(value, vend, STRING_WITH_LEN(on));
- vptr= debug_sync_bmove_len(vptr, vend, debug_sync_global.ds_signal.ptr(),
- debug_sync_global.ds_signal.length());
- if (vptr < vend)
- *(vptr++)= '\'';
+ for (size_t i= 0; i < debug_sync_global.ds_signal_set.size(); i++)
+ {
+ const LEX_CSTRING *s= debug_sync_global.ds_signal_set.at(i);
+ vptr= debug_sync_bmove_len(vptr, vend, s->str, s->length);
+ if (i != debug_sync_global.ds_signal_set.size() - 1)
+ *(vptr++)= ',';
+ }
+ DBUG_ASSERT(vptr < vend);
+ *(vptr++)= '\'';
*vptr= '\0'; /* We have one byte reserved for the worst case. */
}
mysql_mutex_unlock(&debug_sync_global.ds_mutex);
@@ -1358,6 +1495,9 @@ uchar *debug_sync_value_ptr(THD *thd)
}
+
+
+
/**
Execute requested action at a synchronization point.
@@ -1413,12 +1553,28 @@ static void debug_sync_execute(THD *thd, st_debug_sync_action *action)
read access too, to create a memory barrier in order to avoid that
threads just reads an old cached version of the signal.
*/
+
mysql_mutex_lock(&debug_sync_global.ds_mutex);
if (action->signal.length())
{
- /* Copy the signal to the global variable. */
- if (debug_sync_global.ds_signal.copy(action->signal))
+ int offset= 0, pos;
+ bool error= false;
+
+ /* This loop covers all signals in the list except for the last one.
+ Split the signal string by commas and set a signal in the global
+ variable for each one. */
+ while (!error && (pos= action->signal.strstr(",", 1, offset)) > 0)
+ {
+ error= debug_sync_global.set_signal(action->signal.ptr() + offset,
+ pos - offset);
+ offset= pos + 1;
+ }
+
+ if (error ||
+ /* The last signal in the list. */
+ debug_sync_global.set_signal(action->signal.ptr() + offset,
+ action->signal.length() - offset))
{
/*
Error is reported by my_malloc().
@@ -1461,31 +1617,43 @@ static void debug_sync_execute(THD *thd, st_debug_sync_action *action)
restore_current_mutex = false;
set_timespec(abstime, action->timeout);
- DBUG_EXECUTE("debug_sync_exec",
- /* Functions as DBUG_PRINT args can change keyword and line nr. */
- DBUG_PRINT("debug_sync_exec",
- ("wait for '%s' at: '%s' curr: '%s'",
- sig_wait, dsp_name,
- debug_sync_global.ds_signal.c_ptr())););
+ DBUG_EXECUTE("debug_sync_exec", {
+ const char *signal_set= get_signal_set_as_string();
+ if (!signal_set)
+ {
+ DBUG_PRINT("debug_sync_exec",
+ ("Out of memory when fetching signal set"));
+ }
+ else
+ {
+ /* Functions as DBUG_PRINT args can change keyword and line nr. */
+ DBUG_PRINT("debug_sync_exec",
+ ("wait for '%s' at: '%s', curr: '%s'",
+ sig_wait, dsp_name, signal_set));
+ my_free((void *)signal_set);
+ }});
+
/*
- Wait until global signal string matches the wait_for string.
- Interrupt when thread or query is killed or facility disabled.
+ Wait until the signal set contains the wait_for string.
+ Interrupt when thread or query is killed or facility is disabled.
The facility can become disabled when some thread cannot get
the required dynamic memory allocated.
*/
- while (stringcmp(&debug_sync_global.ds_signal, &action->wait_for) &&
- !(thd->killed & KILL_HARD_BIT) && opt_debug_sync_timeout)
+ while (!debug_sync_global.is_signalled(action->wait_for.ptr(),
+ action->wait_for.length()) &&
+ !(thd->killed & KILL_HARD_BIT) &&
+ opt_debug_sync_timeout)
{
error= mysql_cond_timedwait(&debug_sync_global.ds_cond,
&debug_sync_global.ds_mutex,
&abstime);
- DBUG_EXECUTE("debug_sync",
+ // TODO turn this into a for loop printing.
+ DBUG_EXECUTE("debug_sync", {
/* Functions as DBUG_PRINT args can change keyword and line nr. */
DBUG_PRINT("debug_sync",
- ("awoke from %s global: %s error: %d",
- sig_wait, debug_sync_global.ds_signal.c_ptr(),
- error)););
+ ("awoke from %s error: %d",
+ sig_wait, error));});
if (unlikely(error == ETIMEDOUT || error == ETIME))
{
// We should not make the statement fail, even if in strict mode.
@@ -1498,6 +1666,10 @@ static void debug_sync_execute(THD *thd, st_debug_sync_action *action)
}
error= 0;
}
+
+ if (action->clear_event)
+ debug_sync_global.clear_signal(action->wait_for);
+
DBUG_EXECUTE("debug_sync_exec",
if (thd->killed)
DBUG_PRINT("debug_sync_exec",
@@ -1571,10 +1743,10 @@ static void debug_sync(THD *thd, const char *sync_point_name, size_t name_len)
st_debug_sync_control *ds_control= thd->debug_sync_control;
st_debug_sync_action *action;
DBUG_ENTER("debug_sync");
+ DBUG_PRINT("debug_sync_point", ("hit: '%s'", sync_point_name));
DBUG_ASSERT(sync_point_name);
DBUG_ASSERT(name_len);
DBUG_ASSERT(ds_control);
- DBUG_PRINT("debug_sync_point", ("hit: '%s'", sync_point_name));
/* Statistics. */
ds_control->dsp_hits++;
diff --git a/sql/derived_handler.h b/sql/derived_handler.h
index 171165bbe6f..f6feed8db32 100644
--- a/sql/derived_handler.h
+++ b/sql/derived_handler.h
@@ -56,7 +56,7 @@ public:
derived_handler(THD *thd_arg, handlerton *ht_arg)
: thd(thd_arg), ht(ht_arg), derived(0),table(0), tmp_table_param(0),
unit(0), select(0) {}
- virtual ~derived_handler() {}
+ virtual ~derived_handler() = default;
/*
Functions to scan data. All these returns 0 if ok, error code in case
diff --git a/sql/event_data_objects.cc b/sql/event_data_objects.cc
index 3980f248327..bb552aa9de8 100644
--- a/sql/event_data_objects.cc
+++ b/sql/event_data_objects.cc
@@ -328,9 +328,7 @@ Event_queue_element::Event_queue_element():
SYNOPSIS
Event_queue_element::Event_queue_element()
*/
-Event_queue_element::~Event_queue_element()
-{
-}
+Event_queue_element::~Event_queue_element() = default;
/*
@@ -356,9 +354,7 @@ Event_timed::Event_timed():
Event_timed::~Event_timed()
*/
-Event_timed::~Event_timed()
-{
-}
+Event_timed::~Event_timed() = default;
/*
diff --git a/sql/event_db_repository.h b/sql/event_db_repository.h
index b89a1a15155..29b5031bc28 100644
--- a/sql/event_db_repository.h
+++ b/sql/event_db_repository.h
@@ -71,7 +71,7 @@ class Event_parse_data;
class Event_db_repository
{
public:
- Event_db_repository(){}
+ Event_db_repository() = default;
bool
create_event(THD *thd, Event_parse_data *parse_data,
diff --git a/sql/field.h b/sql/field.h
index bbd6595098f..13d80099124 100644
--- a/sql/field.h
+++ b/sql/field.h
@@ -605,7 +605,7 @@ public:
name.length= 0;
};
Virtual_column_info* clone(THD *thd);
- ~Virtual_column_info() {};
+ ~Virtual_column_info() = default;
enum_vcol_info_type get_vcol_type() const
{
return vcol_type;
@@ -895,7 +895,7 @@ public:
Field(uchar *ptr_arg,uint32 length_arg,uchar *null_ptr_arg,
uchar null_bit_arg, utype unireg_check_arg,
const LEX_CSTRING *field_name_arg);
- virtual ~Field() {}
+ virtual ~Field() = default;
virtual Type_numeric_attributes type_numeric_attributes() const
{
@@ -5859,8 +5859,8 @@ public:
Field *from_field,*to_field;
String tmp; // For items
- Copy_field() {}
- ~Copy_field() {}
+ Copy_field() = default;
+ ~Copy_field() = default;
void set(Field *to,Field *from,bool save); // Field to field
void set(uchar *to,Field *from); // Field to string
void (*do_copy)(Copy_field *);
diff --git a/sql/filesort_utils.h b/sql/filesort_utils.h
index 1962f149893..946b1cb4f06 100644
--- a/sql/filesort_utils.h
+++ b/sql/filesort_utils.h
@@ -238,22 +238,11 @@ public:
/**
We need an assignment operator, see filesort().
This happens to have the same semantics as the one that would be
- generated by the compiler. We still implement it here, to show shallow
- assignment explicitly: we have two objects sharing the same array.
+ generated by the compiler.
+ Note that this is a shallow copy. We have two objects sharing the same
+ array.
*/
- Filesort_buffer &operator=(const Filesort_buffer &rhs)
- {
- m_next_rec_ptr= rhs.m_next_rec_ptr;
- m_rawmem= rhs.m_rawmem;
- m_record_pointers= rhs.m_record_pointers;
- m_sort_keys= rhs.m_sort_keys;
- m_num_records= rhs.m_num_records;
- m_record_length= rhs.m_record_length;
- m_sort_length= rhs.m_sort_length;
- m_size_in_bytes= rhs.m_size_in_bytes;
- m_idx= rhs.m_idx;
- return *this;
- }
+ Filesort_buffer &operator=(const Filesort_buffer &rhs) = default;
uint get_sort_length() const { return m_sort_length; }
void set_sort_length(uint val) { m_sort_length= val; }
diff --git a/sql/gcalc_slicescan.h b/sql/gcalc_slicescan.h
index b5188f29dfd..37e887e87e5 100644
--- a/sql/gcalc_slicescan.h
+++ b/sql/gcalc_slicescan.h
@@ -344,7 +344,7 @@ public:
{
return complete_ring() || complete_poly();
}
- virtual ~Gcalc_shape_transporter() {}
+ virtual ~Gcalc_shape_transporter() = default;
};
diff --git a/sql/group_by_handler.h b/sql/group_by_handler.h
index ff3b204fa56..5457cb778f5 100644
--- a/sql/group_by_handler.h
+++ b/sql/group_by_handler.h
@@ -77,7 +77,7 @@ public:
group_by_handler(THD *thd_arg, handlerton *ht_arg)
: thd(thd_arg), ht(ht_arg), table(0) {}
- virtual ~group_by_handler() {}
+ virtual ~group_by_handler() = default;
/*
Functions to scan data. All these returns 0 if ok, error code in case
diff --git a/sql/handler.h b/sql/handler.h
index 432dea05fdd..523c8472784 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -889,7 +889,7 @@ struct xid_t {
long bqual_length;
char data[XIDDATASIZE]; // not \0-terminated !
- xid_t() {} /* Remove gcc warning */
+ xid_t() = default; /* Remove gcc warning */
bool eq(struct xid_t *xid) const
{ return !xid->is_null() && eq(xid->gtrid_length, xid->bqual_length, xid->data); }
bool eq(long g, long b, const char *d) const
@@ -1581,7 +1581,7 @@ struct handlerton
public:
virtual bool add_table(const char *tname, size_t tlen) = 0;
virtual bool add_file(const char *fname) = 0;
- protected: virtual ~discovered_list() {}
+ protected: virtual ~discovered_list() = default;
};
/*
@@ -1824,7 +1824,7 @@ struct THD_TRANS
m_unsafe_rollback_flags= 0;
}
bool is_empty() const { return ha_list == NULL; }
- THD_TRANS() {} /* Remove gcc warning */
+ THD_TRANS() = default; /* Remove gcc warning */
unsigned int m_unsafe_rollback_flags;
/*
@@ -2065,7 +2065,7 @@ struct Table_period_info: Sql_alloc
struct start_end_t
{
- start_end_t() {};
+ start_end_t() = default;
start_end_t(const LEX_CSTRING& _start, const LEX_CSTRING& _end) :
start(_start),
end(_end) {}
@@ -2425,9 +2425,9 @@ struct KEY_PAIR
class inplace_alter_handler_ctx : public Sql_alloc
{
public:
- inplace_alter_handler_ctx() {}
+ inplace_alter_handler_ctx() = default;
- virtual ~inplace_alter_handler_ctx() {}
+ virtual ~inplace_alter_handler_ctx() = default;
virtual void set_shared_data(const inplace_alter_handler_ctx& ctx) {}
};
@@ -2682,8 +2682,8 @@ typedef struct st_key_create_information
class TABLEOP_HOOKS
{
public:
- TABLEOP_HOOKS() {}
- virtual ~TABLEOP_HOOKS() {}
+ TABLEOP_HOOKS() = default;
+ virtual ~TABLEOP_HOOKS() = default;
inline void prelock(TABLE **tables, uint count)
{
@@ -2724,7 +2724,7 @@ typedef class Item COND;
typedef struct st_ha_check_opt
{
- st_ha_check_opt() {} /* Remove gcc warning */
+ st_ha_check_opt() = default; /* Remove gcc warning */
uint flags; /* isam layer flags (e.g. for myisamchk) */
uint sql_flags; /* sql layer flags - for something myisamchk cannot do */
time_t start_time; /* When check/repair starts */
@@ -3103,8 +3103,8 @@ uint calculate_key_len(TABLE *, uint, const uchar *, key_part_map);
class Handler_share
{
public:
- Handler_share() {}
- virtual ~Handler_share() {}
+ Handler_share() = default;
+ virtual ~Handler_share() = default;
};
enum class Compare_keys : uint32_t
@@ -5266,7 +5266,7 @@ public:
const LEX_CSTRING *wild_arg);
Discovered_table_list(THD *thd_arg, Dynamic_array<LEX_CSTRING*> *tables_arg)
: thd(thd_arg), wild(NULL), with_temps(true), tables(tables_arg) {}
- ~Discovered_table_list() {}
+ ~Discovered_table_list() = default;
bool add_table(const char *tname, size_t tlen);
bool add_file(const char *fname);
diff --git a/sql/hash_filo.h b/sql/hash_filo.h
index ac84e5ccb7b..4dba104f716 100644
--- a/sql/hash_filo.h
+++ b/sql/hash_filo.h
@@ -35,7 +35,7 @@ class hash_filo_element
private:
hash_filo_element *next_used,*prev_used;
public:
- hash_filo_element() {}
+ hash_filo_element() = default;
hash_filo_element *next()
{ return next_used; }
hash_filo_element *prev()
diff --git a/sql/hostname.cc b/sql/hostname.cc
index 35948db3d23..18164b32517 100644
--- a/sql/hostname.cc
+++ b/sql/hostname.cc
@@ -74,8 +74,7 @@ Host_errors::Host_errors()
m_local(0)
{}
-Host_errors::~Host_errors()
-{}
+Host_errors::~Host_errors() = default;
void Host_errors::reset()
{
diff --git a/sql/item.h b/sql/item.h
index 766827a9694..0d507de2d0e 100644
--- a/sql/item.h
+++ b/sql/item.h
@@ -326,7 +326,7 @@ private:
TABLE_LIST *save_next_local;
public:
- Name_resolution_context_state() {} /* Remove gcc warning */
+ Name_resolution_context_state() = default; /* Remove gcc warning */
public:
/* Save the state of a name resolution context. */
@@ -427,7 +427,7 @@ class sp_rcontext;
class Sp_rcontext_handler
{
public:
- virtual ~Sp_rcontext_handler() {}
+ virtual ~Sp_rcontext_handler() = default;
/**
A prefix used for SP variable names in queries:
- EXPLAIN EXTENDED
@@ -500,8 +500,8 @@ public:
required, otherwise we only reading it and SELECT
privilege might be required.
*/
- Settable_routine_parameter() {}
- virtual ~Settable_routine_parameter() {}
+ Settable_routine_parameter() = default;
+ virtual ~Settable_routine_parameter() = default;
virtual void set_required_privilege(bool rw) {};
/*
@@ -583,7 +583,7 @@ class Rewritable_query_parameter
limit_clause_param(false)
{ }
- virtual ~Rewritable_query_parameter() { }
+ virtual ~Rewritable_query_parameter() = default;
virtual bool append_for_log(THD *thd, String *str) = 0;
};
@@ -743,7 +743,7 @@ public:
class Item_const
{
public:
- virtual ~Item_const() {}
+ virtual ~Item_const() = default;
virtual const Type_all_attributes *get_type_all_attributes_from_const() const= 0;
virtual bool const_is_null() const { return false; }
virtual const longlong *const_ptr_longlong() const { return NULL; }
@@ -2922,8 +2922,8 @@ class Field_enumerator
{
public:
virtual void visit_field(Item_field *field)= 0;
- virtual ~Field_enumerator() {}; /* purecov: inspected */
- Field_enumerator() {} /* Remove gcc warning */
+ virtual ~Field_enumerator() = default;; /* purecov: inspected */
+ Field_enumerator() = default; /* Remove gcc warning */
};
class Item_string;
@@ -3455,7 +3455,7 @@ public:
Item_result_field(THD *thd, Item_result_field *item):
Item_fixed_hybrid(thd, item), result_field(item->result_field)
{}
- ~Item_result_field() {} /* Required with gcc 2.95 */
+ ~Item_result_field() = default;
Field *get_tmp_table_field() override { return result_field; }
Field *create_tmp_field_ex(MEM_ROOT *root, TABLE *table, Tmp_field_src *src,
const Tmp_field_param *param) override
@@ -7711,7 +7711,7 @@ public:
*/
virtual void close()= 0;
- virtual ~Item_iterator() {}
+ virtual ~Item_iterator() = default;
};
diff --git a/sql/item_buff.cc b/sql/item_buff.cc
index 05cef6871be..1079394e830 100644
--- a/sql/item_buff.cc
+++ b/sql/item_buff.cc
@@ -61,7 +61,7 @@ Cached_item *new_Cached_item(THD *thd, Item *item, bool pass_through_ref)
}
}
-Cached_item::~Cached_item() {}
+Cached_item::~Cached_item() = default;
/**
Compare with old value and replace value with new value.
diff --git a/sql/item_cmpfunc.h b/sql/item_cmpfunc.h
index 4b7a1dc0596..efe0bf59559 100644
--- a/sql/item_cmpfunc.h
+++ b/sql/item_cmpfunc.h
@@ -252,8 +252,7 @@ protected:
Item_bool_func(thd, a), value(a_value), affirmative(a_affirmative)
{}
- ~Item_func_truth()
- {}
+ ~Item_func_truth() = default;
private:
/**
True for <code>X IS [NOT] TRUE</code>,
@@ -275,7 +274,7 @@ class Item_func_istrue : public Item_func_truth
{
public:
Item_func_istrue(THD *thd, Item *a): Item_func_truth(thd, a, true, true) {}
- ~Item_func_istrue() {}
+ ~Item_func_istrue() = default;
LEX_CSTRING func_name_cstring() const override
{
static LEX_CSTRING name= {STRING_WITH_LEN("istrue") };
@@ -295,7 +294,7 @@ class Item_func_isnottrue : public Item_func_truth
public:
Item_func_isnottrue(THD *thd, Item *a):
Item_func_truth(thd, a, true, false) {}
- ~Item_func_isnottrue() {}
+ ~Item_func_isnottrue() = default;
LEX_CSTRING func_name_cstring() const override
{
static LEX_CSTRING name= {STRING_WITH_LEN("isnottrue") };
@@ -317,7 +316,7 @@ class Item_func_isfalse : public Item_func_truth
{
public:
Item_func_isfalse(THD *thd, Item *a): Item_func_truth(thd, a, false, true) {}
- ~Item_func_isfalse() {}
+ ~Item_func_isfalse() = default;
LEX_CSTRING func_name_cstring() const override
{
static LEX_CSTRING name= {STRING_WITH_LEN("isfalse") };
@@ -337,7 +336,7 @@ class Item_func_isnotfalse : public Item_func_truth
public:
Item_func_isnotfalse(THD *thd, Item *a):
Item_func_truth(thd, a, false, false) {}
- ~Item_func_isnotfalse() {}
+ ~Item_func_isnotfalse() = default;
LEX_CSTRING func_name_cstring() const override
{
static LEX_CSTRING name= {STRING_WITH_LEN("isnotfalse") };
@@ -1450,13 +1449,13 @@ public:
CHARSET_INFO *collation;
uint count;
uint used_count;
- in_vector() {}
+ in_vector() = default;
in_vector(THD *thd, uint elements, uint element_length, qsort2_cmp cmp_func,
CHARSET_INFO *cmp_coll)
:base((char*) thd_calloc(thd, elements * element_length)),
size(element_length), compare(cmp_func), collation(cmp_coll),
count(elements), used_count(elements) {}
- virtual ~in_vector() {}
+ virtual ~in_vector() = default;
virtual void set(uint pos,Item *item)=0;
virtual uchar *get_value(Item *item)=0;
void sort()
@@ -1662,7 +1661,7 @@ class cmp_item :public Sql_alloc
public:
CHARSET_INFO *cmp_charset;
cmp_item() { cmp_charset= &my_charset_bin; }
- virtual ~cmp_item() {}
+ virtual ~cmp_item() = default;
virtual void store_value(Item *item)= 0;
/**
@returns result (TRUE, FALSE or UNKNOWN) of
@@ -1691,7 +1690,7 @@ class cmp_item_string : public cmp_item_scalar
protected:
String *value_res;
public:
- cmp_item_string () {}
+ cmp_item_string () = default;
cmp_item_string (CHARSET_INFO *cs) { cmp_charset= cs; }
void set_charset(CHARSET_INFO *cs) { cmp_charset= cs; }
friend class cmp_item_sort_string;
@@ -1757,7 +1756,7 @@ class cmp_item_int : public cmp_item_scalar
{
longlong value;
public:
- cmp_item_int() {} /* Remove gcc warning */
+ cmp_item_int() = default; /* Remove gcc warning */
void store_value(Item *item)
{
value= item->val_int();
@@ -1790,7 +1789,7 @@ class cmp_item_temporal: public cmp_item_scalar
protected:
longlong value;
public:
- cmp_item_temporal() {}
+ cmp_item_temporal() = default;
int compare(cmp_item *ci);
};
@@ -1846,7 +1845,7 @@ class cmp_item_real : public cmp_item_scalar
{
double value;
public:
- cmp_item_real() {} /* Remove gcc warning */
+ cmp_item_real() = default; /* Remove gcc warning */
void store_value(Item *item)
{
value= item->val_real();
@@ -1876,7 +1875,7 @@ class cmp_item_decimal : public cmp_item_scalar
{
my_decimal value;
public:
- cmp_item_decimal() {} /* Remove gcc warning */
+ cmp_item_decimal() = default; /* Remove gcc warning */
void store_value(Item *item);
int cmp(Item *arg);
int cmp_not_null(const Value *val);
@@ -3718,8 +3717,8 @@ Item *and_expressions(Item *a, Item *b, Item **org_item);
class Comp_creator
{
public:
- Comp_creator() {} /* Remove gcc warning */
- virtual ~Comp_creator() {} /* Remove gcc warning */
+ Comp_creator() = default; /* Remove gcc warning */
+ virtual ~Comp_creator() = default; /* Remove gcc warning */
/**
Create operation with given arguments.
*/
@@ -3738,8 +3737,8 @@ public:
class Eq_creator :public Comp_creator
{
public:
- Eq_creator() {} /* Remove gcc warning */
- virtual ~Eq_creator() {} /* Remove gcc warning */
+ Eq_creator() = default; /* Remove gcc warning */
+ virtual ~Eq_creator() = default; /* Remove gcc warning */
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
const char* symbol(bool invert) const { return invert? "<>" : "="; }
@@ -3750,8 +3749,8 @@ public:
class Ne_creator :public Comp_creator
{
public:
- Ne_creator() {} /* Remove gcc warning */
- virtual ~Ne_creator() {} /* Remove gcc warning */
+ Ne_creator() = default; /* Remove gcc warning */
+ virtual ~Ne_creator() = default; /* Remove gcc warning */
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
const char* symbol(bool invert) const { return invert? "=" : "<>"; }
@@ -3762,8 +3761,8 @@ public:
class Gt_creator :public Comp_creator
{
public:
- Gt_creator() {} /* Remove gcc warning */
- virtual ~Gt_creator() {} /* Remove gcc warning */
+ Gt_creator() = default; /* Remove gcc warning */
+ virtual ~Gt_creator() = default; /* Remove gcc warning */
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
const char* symbol(bool invert) const { return invert? "<=" : ">"; }
@@ -3774,8 +3773,8 @@ public:
class Lt_creator :public Comp_creator
{
public:
- Lt_creator() {} /* Remove gcc warning */
- virtual ~Lt_creator() {} /* Remove gcc warning */
+ Lt_creator() = default; /* Remove gcc warning */
+ virtual ~Lt_creator() = default; /* Remove gcc warning */
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
const char* symbol(bool invert) const { return invert? ">=" : "<"; }
@@ -3786,8 +3785,8 @@ public:
class Ge_creator :public Comp_creator
{
public:
- Ge_creator() {} /* Remove gcc warning */
- virtual ~Ge_creator() {} /* Remove gcc warning */
+ Ge_creator() = default; /* Remove gcc warning */
+ virtual ~Ge_creator() = default; /* Remove gcc warning */
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
const char* symbol(bool invert) const { return invert? "<" : ">="; }
@@ -3798,8 +3797,8 @@ public:
class Le_creator :public Comp_creator
{
public:
- Le_creator() {} /* Remove gcc warning */
- virtual ~Le_creator() {} /* Remove gcc warning */
+ Le_creator() = default; /* Remove gcc warning */
+ virtual ~Le_creator() = default; /* Remove gcc warning */
Item_bool_rowready_func2* create(THD *thd, Item *a, Item *b) const;
Item_bool_rowready_func2* create_swap(THD *thd, Item *a, Item *b) const;
const char* symbol(bool invert) const { return invert? ">" : "<="; }
diff --git a/sql/item_create.cc b/sql/item_create.cc
index 1538bd6d0f2..5d28cfca111 100644
--- a/sql/item_create.cc
+++ b/sql/item_create.cc
@@ -90,9 +90,9 @@ public:
protected:
/** Constructor. */
- Create_sp_func() {}
+ Create_sp_func() = default;
/** Destructor. */
- virtual ~Create_sp_func() {}
+ virtual ~Create_sp_func() = default;
};
@@ -110,8 +110,8 @@ public:
static Create_func_abs s_singleton;
protected:
- Create_func_abs() {}
- virtual ~Create_func_abs() {}
+ Create_func_abs() = default;
+ virtual ~Create_func_abs() = default;
};
@@ -123,8 +123,8 @@ public:
static Create_func_acos s_singleton;
protected:
- Create_func_acos() {}
- virtual ~Create_func_acos() {}
+ Create_func_acos() = default;
+ virtual ~Create_func_acos() = default;
};
@@ -136,8 +136,8 @@ public:
static Create_func_addtime s_singleton;
protected:
- Create_func_addtime() {}
- virtual ~Create_func_addtime() {}
+ Create_func_addtime() = default;
+ virtual ~Create_func_addtime() = default;
};
@@ -149,8 +149,8 @@ public:
static Create_func_aes_encrypt s_singleton;
protected:
- Create_func_aes_encrypt() {}
- virtual ~Create_func_aes_encrypt() {}
+ Create_func_aes_encrypt() = default;
+ virtual ~Create_func_aes_encrypt() = default;
};
@@ -162,8 +162,8 @@ public:
static Create_func_aes_decrypt s_singleton;
protected:
- Create_func_aes_decrypt() {}
- virtual ~Create_func_aes_decrypt() {}
+ Create_func_aes_decrypt() = default;
+ virtual ~Create_func_aes_decrypt() = default;
};
@@ -175,8 +175,8 @@ public:
static Create_func_asin s_singleton;
protected:
- Create_func_asin() {}
- virtual ~Create_func_asin() {}
+ Create_func_asin() = default;
+ virtual ~Create_func_asin() = default;
};
@@ -189,8 +189,8 @@ public:
static Create_func_atan s_singleton;
protected:
- Create_func_atan() {}
- virtual ~Create_func_atan() {}
+ Create_func_atan() = default;
+ virtual ~Create_func_atan() = default;
};
@@ -202,8 +202,8 @@ public:
static Create_func_benchmark s_singleton;
protected:
- Create_func_benchmark() {}
- virtual ~Create_func_benchmark() {}
+ Create_func_benchmark() = default;
+ virtual ~Create_func_benchmark() = default;
};
@@ -215,8 +215,8 @@ public:
static Create_func_bin s_singleton;
protected:
- Create_func_bin() {}
- virtual ~Create_func_bin() {}
+ Create_func_bin() = default;
+ virtual ~Create_func_bin() = default;
};
@@ -228,8 +228,8 @@ public:
static Create_func_binlog_gtid_pos s_singleton;
protected:
- Create_func_binlog_gtid_pos() {}
- virtual ~Create_func_binlog_gtid_pos() {}
+ Create_func_binlog_gtid_pos() = default;
+ virtual ~Create_func_binlog_gtid_pos() = default;
};
@@ -241,8 +241,8 @@ public:
static Create_func_bit_count s_singleton;
protected:
- Create_func_bit_count() {}
- virtual ~Create_func_bit_count() {}
+ Create_func_bit_count() = default;
+ virtual ~Create_func_bit_count() = default;
};
@@ -254,8 +254,8 @@ public:
static Create_func_bit_length s_singleton;
protected:
- Create_func_bit_length() {}
- virtual ~Create_func_bit_length() {}
+ Create_func_bit_length() = default;
+ virtual ~Create_func_bit_length() = default;
};
@@ -267,8 +267,8 @@ public:
static Create_func_ceiling s_singleton;
protected:
- Create_func_ceiling() {}
- virtual ~Create_func_ceiling() {}
+ Create_func_ceiling() = default;
+ virtual ~Create_func_ceiling() = default;
};
@@ -280,8 +280,8 @@ public:
static Create_func_chr s_singleton;
protected:
- Create_func_chr() {}
- virtual ~Create_func_chr() {}
+ Create_func_chr() = default;
+ virtual ~Create_func_chr() = default;
};
@@ -293,8 +293,8 @@ public:
static Create_func_char_length s_singleton;
protected:
- Create_func_char_length() {}
- virtual ~Create_func_char_length() {}
+ Create_func_char_length() = default;
+ virtual ~Create_func_char_length() = default;
};
@@ -306,8 +306,8 @@ public:
static Create_func_coercibility s_singleton;
protected:
- Create_func_coercibility() {}
- virtual ~Create_func_coercibility() {}
+ Create_func_coercibility() = default;
+ virtual ~Create_func_coercibility() = default;
};
class Create_func_dyncol_check : public Create_func_arg1
@@ -318,8 +318,8 @@ public:
static Create_func_dyncol_check s_singleton;
protected:
- Create_func_dyncol_check() {}
- virtual ~Create_func_dyncol_check() {}
+ Create_func_dyncol_check() = default;
+ virtual ~Create_func_dyncol_check() = default;
};
class Create_func_dyncol_exists : public Create_func_arg2
@@ -330,8 +330,8 @@ public:
static Create_func_dyncol_exists s_singleton;
protected:
- Create_func_dyncol_exists() {}
- virtual ~Create_func_dyncol_exists() {}
+ Create_func_dyncol_exists() = default;
+ virtual ~Create_func_dyncol_exists() = default;
};
class Create_func_dyncol_list : public Create_func_arg1
@@ -342,8 +342,8 @@ public:
static Create_func_dyncol_list s_singleton;
protected:
- Create_func_dyncol_list() {}
- virtual ~Create_func_dyncol_list() {}
+ Create_func_dyncol_list() = default;
+ virtual ~Create_func_dyncol_list() = default;
};
class Create_func_dyncol_json : public Create_func_arg1
@@ -354,8 +354,8 @@ public:
static Create_func_dyncol_json s_singleton;
protected:
- Create_func_dyncol_json() {}
- virtual ~Create_func_dyncol_json() {}
+ Create_func_dyncol_json() = default;
+ virtual ~Create_func_dyncol_json() = default;
};
@@ -367,8 +367,8 @@ public:
static Create_func_compress s_singleton;
protected:
- Create_func_compress() {}
- virtual ~Create_func_compress() {}
+ Create_func_compress() = default;
+ virtual ~Create_func_compress() = default;
};
@@ -381,8 +381,8 @@ public:
static Create_func_concat s_singleton;
protected:
- Create_func_concat() {}
- virtual ~Create_func_concat() {}
+ Create_func_concat() = default;
+ virtual ~Create_func_concat() = default;
};
@@ -395,8 +395,8 @@ public:
static Create_func_concat_operator_oracle s_singleton;
protected:
- Create_func_concat_operator_oracle() {}
- virtual ~Create_func_concat_operator_oracle() {}
+ Create_func_concat_operator_oracle() = default;
+ virtual ~Create_func_concat_operator_oracle() = default;
};
@@ -408,8 +408,8 @@ public:
static Create_func_decode_histogram s_singleton;
protected:
- Create_func_decode_histogram() {}
- virtual ~Create_func_decode_histogram() {}
+ Create_func_decode_histogram() = default;
+ virtual ~Create_func_decode_histogram() = default;
};
@@ -422,8 +422,8 @@ public:
static Create_func_decode_oracle s_singleton;
protected:
- Create_func_decode_oracle() {}
- virtual ~Create_func_decode_oracle() {}
+ Create_func_decode_oracle() = default;
+ virtual ~Create_func_decode_oracle() = default;
};
@@ -436,8 +436,8 @@ public:
static Create_func_concat_ws s_singleton;
protected:
- Create_func_concat_ws() {}
- virtual ~Create_func_concat_ws() {}
+ Create_func_concat_ws() = default;
+ virtual ~Create_func_concat_ws() = default;
};
@@ -449,8 +449,8 @@ public:
static Create_func_connection_id s_singleton;
protected:
- Create_func_connection_id() {}
- virtual ~Create_func_connection_id() {}
+ Create_func_connection_id() = default;
+ virtual ~Create_func_connection_id() = default;
};
@@ -462,8 +462,8 @@ public:
static Create_func_nvl2 s_singleton;
protected:
- Create_func_nvl2() {}
- virtual ~Create_func_nvl2() {}
+ Create_func_nvl2() = default;
+ virtual ~Create_func_nvl2() = default;
};
@@ -475,8 +475,8 @@ public:
static Create_func_conv s_singleton;
protected:
- Create_func_conv() {}
- virtual ~Create_func_conv() {}
+ Create_func_conv() = default;
+ virtual ~Create_func_conv() = default;
};
@@ -488,8 +488,8 @@ public:
static Create_func_convert_tz s_singleton;
protected:
- Create_func_convert_tz() {}
- virtual ~Create_func_convert_tz() {}
+ Create_func_convert_tz() = default;
+ virtual ~Create_func_convert_tz() = default;
};
@@ -501,8 +501,8 @@ public:
static Create_func_cos s_singleton;
protected:
- Create_func_cos() {}
- virtual ~Create_func_cos() {}
+ Create_func_cos() = default;
+ virtual ~Create_func_cos() = default;
};
@@ -514,8 +514,8 @@ public:
static Create_func_cot s_singleton;
protected:
- Create_func_cot() {}
- virtual ~Create_func_cot() {}
+ Create_func_cot() = default;
+ virtual ~Create_func_cot() = default;
};
@@ -528,8 +528,8 @@ public:
static Create_func_crc32 s_singleton;
protected:
- Create_func_crc32() {}
- virtual ~Create_func_crc32() {}
+ Create_func_crc32() = default;
+ virtual ~Create_func_crc32() = default;
};
@@ -542,8 +542,8 @@ public:
static Create_func_crc32c s_singleton;
protected:
- Create_func_crc32c() {}
- virtual ~Create_func_crc32c() {}
+ Create_func_crc32c() = default;
+ virtual ~Create_func_crc32c() = default;
};
@@ -555,8 +555,8 @@ public:
static Create_func_datediff s_singleton;
protected:
- Create_func_datediff() {}
- virtual ~Create_func_datediff() {}
+ Create_func_datediff() = default;
+ virtual ~Create_func_datediff() = default;
};
@@ -568,8 +568,8 @@ public:
static Create_func_dayname s_singleton;
protected:
- Create_func_dayname() {}
- virtual ~Create_func_dayname() {}
+ Create_func_dayname() = default;
+ virtual ~Create_func_dayname() = default;
};
@@ -581,8 +581,8 @@ public:
static Create_func_dayofmonth s_singleton;
protected:
- Create_func_dayofmonth() {}
- virtual ~Create_func_dayofmonth() {}
+ Create_func_dayofmonth() = default;
+ virtual ~Create_func_dayofmonth() = default;
};
@@ -594,8 +594,8 @@ public:
static Create_func_dayofweek s_singleton;
protected:
- Create_func_dayofweek() {}
- virtual ~Create_func_dayofweek() {}
+ Create_func_dayofweek() = default;
+ virtual ~Create_func_dayofweek() = default;
};
@@ -607,8 +607,8 @@ public:
static Create_func_dayofyear s_singleton;
protected:
- Create_func_dayofyear() {}
- virtual ~Create_func_dayofyear() {}
+ Create_func_dayofyear() = default;
+ virtual ~Create_func_dayofyear() = default;
};
@@ -620,8 +620,8 @@ public:
static Create_func_degrees s_singleton;
protected:
- Create_func_degrees() {}
- virtual ~Create_func_degrees() {}
+ Create_func_degrees() = default;
+ virtual ~Create_func_degrees() = default;
};
@@ -634,8 +634,8 @@ public:
static Create_func_des_decrypt s_singleton;
protected:
- Create_func_des_decrypt() {}
- virtual ~Create_func_des_decrypt() {}
+ Create_func_des_decrypt() = default;
+ virtual ~Create_func_des_decrypt() = default;
};
@@ -648,8 +648,8 @@ public:
static Create_func_des_encrypt s_singleton;
protected:
- Create_func_des_encrypt() {}
- virtual ~Create_func_des_encrypt() {}
+ Create_func_des_encrypt() = default;
+ virtual ~Create_func_des_encrypt() = default;
};
@@ -662,8 +662,8 @@ public:
static Create_func_elt s_singleton;
protected:
- Create_func_elt() {}
- virtual ~Create_func_elt() {}
+ Create_func_elt() = default;
+ virtual ~Create_func_elt() = default;
};
@@ -675,8 +675,8 @@ public:
static Create_func_encode s_singleton;
protected:
- Create_func_encode() {}
- virtual ~Create_func_encode() {}
+ Create_func_encode() = default;
+ virtual ~Create_func_encode() = default;
};
@@ -689,8 +689,8 @@ public:
static Create_func_encrypt s_singleton;
protected:
- Create_func_encrypt() {}
- virtual ~Create_func_encrypt() {}
+ Create_func_encrypt() = default;
+ virtual ~Create_func_encrypt() = default;
};
@@ -702,8 +702,8 @@ public:
static Create_func_exp s_singleton;
protected:
- Create_func_exp() {}
- virtual ~Create_func_exp() {}
+ Create_func_exp() = default;
+ virtual ~Create_func_exp() = default;
};
@@ -716,8 +716,8 @@ public:
static Create_func_export_set s_singleton;
protected:
- Create_func_export_set() {}
- virtual ~Create_func_export_set() {}
+ Create_func_export_set() = default;
+ virtual ~Create_func_export_set() = default;
};
@@ -730,8 +730,8 @@ public:
static Create_func_field s_singleton;
protected:
- Create_func_field() {}
- virtual ~Create_func_field() {}
+ Create_func_field() = default;
+ virtual ~Create_func_field() = default;
};
@@ -743,8 +743,8 @@ public:
static Create_func_find_in_set s_singleton;
protected:
- Create_func_find_in_set() {}
- virtual ~Create_func_find_in_set() {}
+ Create_func_find_in_set() = default;
+ virtual ~Create_func_find_in_set() = default;
};
@@ -756,8 +756,8 @@ public:
static Create_func_floor s_singleton;
protected:
- Create_func_floor() {}
- virtual ~Create_func_floor() {}
+ Create_func_floor() = default;
+ virtual ~Create_func_floor() = default;
};
@@ -770,8 +770,8 @@ public:
static Create_func_format s_singleton;
protected:
- Create_func_format() {}
- virtual ~Create_func_format() {}
+ Create_func_format() = default;
+ virtual ~Create_func_format() = default;
};
@@ -783,8 +783,8 @@ public:
static Create_func_found_rows s_singleton;
protected:
- Create_func_found_rows() {}
- virtual ~Create_func_found_rows() {}
+ Create_func_found_rows() = default;
+ virtual ~Create_func_found_rows() = default;
};
@@ -796,8 +796,8 @@ public:
static Create_func_from_base64 s_singleton;
protected:
- Create_func_from_base64() {}
- virtual ~Create_func_from_base64() {}
+ Create_func_from_base64() = default;
+ virtual ~Create_func_from_base64() = default;
};
@@ -809,8 +809,8 @@ public:
static Create_func_from_days s_singleton;
protected:
- Create_func_from_days() {}
- virtual ~Create_func_from_days() {}
+ Create_func_from_days() = default;
+ virtual ~Create_func_from_days() = default;
};
@@ -823,8 +823,8 @@ public:
static Create_func_from_unixtime s_singleton;
protected:
- Create_func_from_unixtime() {}
- virtual ~Create_func_from_unixtime() {}
+ Create_func_from_unixtime() = default;
+ virtual ~Create_func_from_unixtime() = default;
};
@@ -836,8 +836,8 @@ public:
static Create_func_get_lock s_singleton;
protected:
- Create_func_get_lock() {}
- virtual ~Create_func_get_lock() {}
+ Create_func_get_lock() = default;
+ virtual ~Create_func_get_lock() = default;
};
@@ -850,8 +850,8 @@ public:
static Create_func_greatest s_singleton;
protected:
- Create_func_greatest() {}
- virtual ~Create_func_greatest() {}
+ Create_func_greatest() = default;
+ virtual ~Create_func_greatest() = default;
};
@@ -863,8 +863,8 @@ public:
static Create_func_hex s_singleton;
protected:
- Create_func_hex() {}
- virtual ~Create_func_hex() {}
+ Create_func_hex() = default;
+ virtual ~Create_func_hex() = default;
};
@@ -876,8 +876,8 @@ public:
static Create_func_ifnull s_singleton;
protected:
- Create_func_ifnull() {}
- virtual ~Create_func_ifnull() {}
+ Create_func_ifnull() = default;
+ virtual ~Create_func_ifnull() = default;
};
@@ -889,8 +889,8 @@ public:
static Create_func_instr s_singleton;
protected:
- Create_func_instr() {}
- virtual ~Create_func_instr() {}
+ Create_func_instr() = default;
+ virtual ~Create_func_instr() = default;
};
@@ -902,8 +902,8 @@ public:
static Create_func_is_free_lock s_singleton;
protected:
- Create_func_is_free_lock() {}
- virtual ~Create_func_is_free_lock() {}
+ Create_func_is_free_lock() = default;
+ virtual ~Create_func_is_free_lock() = default;
};
@@ -915,8 +915,8 @@ public:
static Create_func_is_used_lock s_singleton;
protected:
- Create_func_is_used_lock() {}
- virtual ~Create_func_is_used_lock() {}
+ Create_func_is_used_lock() = default;
+ virtual ~Create_func_is_used_lock() = default;
};
@@ -928,8 +928,8 @@ public:
static Create_func_isnull s_singleton;
protected:
- Create_func_isnull() {}
- virtual ~Create_func_isnull() {}
+ Create_func_isnull() = default;
+ virtual ~Create_func_isnull() = default;
};
@@ -941,8 +941,8 @@ public:
static Create_func_json_normalize s_singleton;
protected:
- Create_func_json_normalize() {}
- virtual ~Create_func_json_normalize() {}
+ Create_func_json_normalize() = default;
+ virtual ~Create_func_json_normalize() = default;
};
@@ -954,8 +954,8 @@ public:
static Create_func_json_equals s_singleton;
protected:
- Create_func_json_equals() {}
- virtual ~Create_func_json_equals() {}
+ Create_func_json_equals() = default;
+ virtual ~Create_func_json_equals() = default;
};
@@ -967,8 +967,8 @@ public:
static Create_func_json_exists s_singleton;
protected:
- Create_func_json_exists() {}
- virtual ~Create_func_json_exists() {}
+ Create_func_json_exists() = default;
+ virtual ~Create_func_json_exists() = default;
};
@@ -980,8 +980,8 @@ public:
static Create_func_json_valid s_singleton;
protected:
- Create_func_json_valid() {}
- virtual ~Create_func_json_valid() {}
+ Create_func_json_valid() = default;
+ virtual ~Create_func_json_valid() = default;
};
@@ -993,8 +993,8 @@ public:
static Create_func_json_compact s_singleton;
protected:
- Create_func_json_compact() {}
- virtual ~Create_func_json_compact() {}
+ Create_func_json_compact() = default;
+ virtual ~Create_func_json_compact() = default;
};
@@ -1006,8 +1006,8 @@ public:
static Create_func_json_loose s_singleton;
protected:
- Create_func_json_loose() {}
- virtual ~Create_func_json_loose() {}
+ Create_func_json_loose() = default;
+ virtual ~Create_func_json_loose() = default;
};
@@ -1020,8 +1020,8 @@ public:
static Create_func_json_detailed s_singleton;
protected:
- Create_func_json_detailed() {}
- virtual ~Create_func_json_detailed() {}
+ Create_func_json_detailed() = default;
+ virtual ~Create_func_json_detailed() = default;
};
@@ -1033,8 +1033,8 @@ public:
static Create_func_json_type s_singleton;
protected:
- Create_func_json_type() {}
- virtual ~Create_func_json_type() {}
+ Create_func_json_type() = default;
+ virtual ~Create_func_json_type() = default;
};
@@ -1046,8 +1046,8 @@ public:
static Create_func_json_depth s_singleton;
protected:
- Create_func_json_depth() {}
- virtual ~Create_func_json_depth() {}
+ Create_func_json_depth() = default;
+ virtual ~Create_func_json_depth() = default;
};
@@ -1059,8 +1059,8 @@ public:
static Create_func_json_value s_singleton;
protected:
- Create_func_json_value() {}
- virtual ~Create_func_json_value() {}
+ Create_func_json_value() = default;
+ virtual ~Create_func_json_value() = default;
};
@@ -1072,8 +1072,8 @@ public:
static Create_func_json_query s_singleton;
protected:
- Create_func_json_query() {}
- virtual ~Create_func_json_query() {}
+ Create_func_json_query() = default;
+ virtual ~Create_func_json_query() = default;
};
@@ -1086,8 +1086,8 @@ public:
static Create_func_json_keys s_singleton;
protected:
- Create_func_json_keys() {}
- virtual ~Create_func_json_keys() {}
+ Create_func_json_keys() = default;
+ virtual ~Create_func_json_keys() = default;
};
@@ -1100,8 +1100,8 @@ public:
static Create_func_json_contains s_singleton;
protected:
- Create_func_json_contains() {}
- virtual ~Create_func_json_contains() {}
+ Create_func_json_contains() = default;
+ virtual ~Create_func_json_contains() = default;
};
@@ -1114,8 +1114,8 @@ public:
static Create_func_json_contains_path s_singleton;
protected:
- Create_func_json_contains_path() {}
- virtual ~Create_func_json_contains_path() {}
+ Create_func_json_contains_path() = default;
+ virtual ~Create_func_json_contains_path() = default;
};
@@ -1128,8 +1128,8 @@ public:
static Create_func_json_extract s_singleton;
protected:
- Create_func_json_extract() {}
- virtual ~Create_func_json_extract() {}
+ Create_func_json_extract() = default;
+ virtual ~Create_func_json_extract() = default;
};
@@ -1142,8 +1142,8 @@ public:
static Create_func_json_search s_singleton;
protected:
- Create_func_json_search() {}
- virtual ~Create_func_json_search() {}
+ Create_func_json_search() = default;
+ virtual ~Create_func_json_search() = default;
};
@@ -1156,8 +1156,8 @@ public:
static Create_func_json_array s_singleton;
protected:
- Create_func_json_array() {}
- virtual ~Create_func_json_array() {}
+ Create_func_json_array() = default;
+ virtual ~Create_func_json_array() = default;
};
@@ -1170,8 +1170,8 @@ public:
static Create_func_json_array_append s_singleton;
protected:
- Create_func_json_array_append() {}
- virtual ~Create_func_json_array_append() {}
+ Create_func_json_array_append() = default;
+ virtual ~Create_func_json_array_append() = default;
};
@@ -1184,8 +1184,8 @@ public:
static Create_func_json_array_insert s_singleton;
protected:
- Create_func_json_array_insert() {}
- virtual ~Create_func_json_array_insert() {}
+ Create_func_json_array_insert() = default;
+ virtual ~Create_func_json_array_insert() = default;
};
@@ -1198,8 +1198,8 @@ public:
static Create_func_json_insert s_singleton;
protected:
- Create_func_json_insert() {}
- virtual ~Create_func_json_insert() {}
+ Create_func_json_insert() = default;
+ virtual ~Create_func_json_insert() = default;
};
@@ -1212,8 +1212,8 @@ public:
static Create_func_json_set s_singleton;
protected:
- Create_func_json_set() {}
- virtual ~Create_func_json_set() {}
+ Create_func_json_set() = default;
+ virtual ~Create_func_json_set() = default;
};
@@ -1226,8 +1226,8 @@ public:
static Create_func_json_replace s_singleton;
protected:
- Create_func_json_replace() {}
- virtual ~Create_func_json_replace() {}
+ Create_func_json_replace() = default;
+ virtual ~Create_func_json_replace() = default;
};
@@ -1240,8 +1240,8 @@ public:
static Create_func_json_remove s_singleton;
protected:
- Create_func_json_remove() {}
- virtual ~Create_func_json_remove() {}
+ Create_func_json_remove() = default;
+ virtual ~Create_func_json_remove() = default;
};
@@ -1254,8 +1254,8 @@ public:
static Create_func_json_object s_singleton;
protected:
- Create_func_json_object() {}
- virtual ~Create_func_json_object() {}
+ Create_func_json_object() = default;
+ virtual ~Create_func_json_object() = default;
};
@@ -1268,8 +1268,8 @@ public:
static Create_func_json_length s_singleton;
protected:
- Create_func_json_length() {}
- virtual ~Create_func_json_length() {}
+ Create_func_json_length() = default;
+ virtual ~Create_func_json_length() = default;
};
@@ -1282,8 +1282,8 @@ public:
static Create_func_json_merge s_singleton;
protected:
- Create_func_json_merge() {}
- virtual ~Create_func_json_merge() {}
+ Create_func_json_merge() = default;
+ virtual ~Create_func_json_merge() = default;
};
@@ -1296,8 +1296,8 @@ public:
static Create_func_json_merge_patch s_singleton;
protected:
- Create_func_json_merge_patch() {}
- virtual ~Create_func_json_merge_patch() {}
+ Create_func_json_merge_patch() = default;
+ virtual ~Create_func_json_merge_patch() = default;
};
@@ -1309,8 +1309,8 @@ public:
static Create_func_json_quote s_singleton;
protected:
- Create_func_json_quote() {}
- virtual ~Create_func_json_quote() {}
+ Create_func_json_quote() = default;
+ virtual ~Create_func_json_quote() = default;
};
@@ -1322,8 +1322,8 @@ public:
static Create_func_json_unquote s_singleton;
protected:
- Create_func_json_unquote() {}
- virtual ~Create_func_json_unquote() {}
+ Create_func_json_unquote() = default;
+ virtual ~Create_func_json_unquote() = default;
};
@@ -1348,8 +1348,8 @@ public:
static Create_func_last_day s_singleton;
protected:
- Create_func_last_day() {}
- virtual ~Create_func_last_day() {}
+ Create_func_last_day() = default;
+ virtual ~Create_func_last_day() = default;
};
@@ -1362,8 +1362,8 @@ public:
static Create_func_last_insert_id s_singleton;
protected:
- Create_func_last_insert_id() {}
- virtual ~Create_func_last_insert_id() {}
+ Create_func_last_insert_id() = default;
+ virtual ~Create_func_last_insert_id() = default;
};
@@ -1375,8 +1375,8 @@ public:
static Create_func_lcase s_singleton;
protected:
- Create_func_lcase() {}
- virtual ~Create_func_lcase() {}
+ Create_func_lcase() = default;
+ virtual ~Create_func_lcase() = default;
};
@@ -1389,8 +1389,8 @@ public:
static Create_func_least s_singleton;
protected:
- Create_func_least() {}
- virtual ~Create_func_least() {}
+ Create_func_least() = default;
+ virtual ~Create_func_least() = default;
};
@@ -1402,8 +1402,8 @@ public:
static Create_func_length s_singleton;
protected:
- Create_func_length() {}
- virtual ~Create_func_length() {}
+ Create_func_length() = default;
+ virtual ~Create_func_length() = default;
};
class Create_func_octet_length : public Create_func_arg1
@@ -1414,8 +1414,8 @@ public:
static Create_func_octet_length s_singleton;
protected:
- Create_func_octet_length() {}
- virtual ~Create_func_octet_length() {}
+ Create_func_octet_length() = default;
+ virtual ~Create_func_octet_length() = default;
};
@@ -1428,8 +1428,8 @@ public:
static Create_func_like_range_min s_singleton;
protected:
- Create_func_like_range_min() {}
- virtual ~Create_func_like_range_min() {}
+ Create_func_like_range_min() = default;
+ virtual ~Create_func_like_range_min() = default;
};
@@ -1441,8 +1441,8 @@ public:
static Create_func_like_range_max s_singleton;
protected:
- Create_func_like_range_max() {}
- virtual ~Create_func_like_range_max() {}
+ Create_func_like_range_max() = default;
+ virtual ~Create_func_like_range_max() = default;
};
#endif
@@ -1455,8 +1455,8 @@ public:
static Create_func_ln s_singleton;
protected:
- Create_func_ln() {}
- virtual ~Create_func_ln() {}
+ Create_func_ln() = default;
+ virtual ~Create_func_ln() = default;
};
@@ -1468,8 +1468,8 @@ public:
static Create_func_load_file s_singleton;
protected:
- Create_func_load_file() {}
- virtual ~Create_func_load_file() {}
+ Create_func_load_file() = default;
+ virtual ~Create_func_load_file() = default;
};
@@ -1482,8 +1482,8 @@ public:
static Create_func_locate s_singleton;
protected:
- Create_func_locate() {}
- virtual ~Create_func_locate() {}
+ Create_func_locate() = default;
+ virtual ~Create_func_locate() = default;
};
@@ -1496,8 +1496,8 @@ public:
static Create_func_log s_singleton;
protected:
- Create_func_log() {}
- virtual ~Create_func_log() {}
+ Create_func_log() = default;
+ virtual ~Create_func_log() = default;
};
@@ -1509,8 +1509,8 @@ public:
static Create_func_log10 s_singleton;
protected:
- Create_func_log10() {}
- virtual ~Create_func_log10() {}
+ Create_func_log10() = default;
+ virtual ~Create_func_log10() = default;
};
@@ -1522,8 +1522,8 @@ public:
static Create_func_log2 s_singleton;
protected:
- Create_func_log2() {}
- virtual ~Create_func_log2() {}
+ Create_func_log2() = default;
+ virtual ~Create_func_log2() = default;
};
@@ -1540,8 +1540,8 @@ public:
static Create_func_lpad s_singleton;
protected:
- Create_func_lpad() {}
- virtual ~Create_func_lpad() {}
+ Create_func_lpad() = default;
+ virtual ~Create_func_lpad() = default;
Item *create_native_std(THD *thd, const LEX_CSTRING *name,
List<Item> *items);
Item *create_native_oracle(THD *thd, const LEX_CSTRING *name,
@@ -1569,8 +1569,8 @@ public:
static Create_func_ltrim s_singleton;
protected:
- Create_func_ltrim() {}
- virtual ~Create_func_ltrim() {}
+ Create_func_ltrim() = default;
+ virtual ~Create_func_ltrim() = default;
};
@@ -1582,8 +1582,8 @@ public:
static Create_func_ltrim_oracle s_singleton;
protected:
- Create_func_ltrim_oracle() {}
- virtual ~Create_func_ltrim_oracle() {}
+ Create_func_ltrim_oracle() = default;
+ virtual ~Create_func_ltrim_oracle() = default;
};
@@ -1595,8 +1595,8 @@ public:
static Create_func_makedate s_singleton;
protected:
- Create_func_makedate() {}
- virtual ~Create_func_makedate() {}
+ Create_func_makedate() = default;
+ virtual ~Create_func_makedate() = default;
};
@@ -1608,8 +1608,8 @@ public:
static Create_func_maketime s_singleton;
protected:
- Create_func_maketime() {}
- virtual ~Create_func_maketime() {}
+ Create_func_maketime() = default;
+ virtual ~Create_func_maketime() = default;
};
@@ -1622,8 +1622,8 @@ public:
static Create_func_make_set s_singleton;
protected:
- Create_func_make_set() {}
- virtual ~Create_func_make_set() {}
+ Create_func_make_set() = default;
+ virtual ~Create_func_make_set() = default;
};
@@ -1636,8 +1636,8 @@ public:
static Create_func_master_pos_wait s_singleton;
protected:
- Create_func_master_pos_wait() {}
- virtual ~Create_func_master_pos_wait() {}
+ Create_func_master_pos_wait() = default;
+ virtual ~Create_func_master_pos_wait() = default;
};
@@ -1650,8 +1650,8 @@ public:
static Create_func_master_gtid_wait s_singleton;
protected:
- Create_func_master_gtid_wait() {}
- virtual ~Create_func_master_gtid_wait() {}
+ Create_func_master_gtid_wait() = default;
+ virtual ~Create_func_master_gtid_wait() = default;
};
@@ -1663,8 +1663,8 @@ public:
static Create_func_md5 s_singleton;
protected:
- Create_func_md5() {}
- virtual ~Create_func_md5() {}
+ Create_func_md5() = default;
+ virtual ~Create_func_md5() = default;
};
@@ -1676,8 +1676,8 @@ public:
static Create_func_monthname s_singleton;
protected:
- Create_func_monthname() {}
- virtual ~Create_func_monthname() {}
+ Create_func_monthname() = default;
+ virtual ~Create_func_monthname() = default;
};
@@ -1689,8 +1689,8 @@ public:
static Create_func_name_const s_singleton;
protected:
- Create_func_name_const() {}
- virtual ~Create_func_name_const() {}
+ Create_func_name_const() = default;
+ virtual ~Create_func_name_const() = default;
};
class Create_func_natural_sort_key : public Create_func_arg1
@@ -1699,8 +1699,8 @@ public:
virtual Item *create_1_arg(THD *thd, Item *arg1) override;
static Create_func_natural_sort_key s_singleton;
protected:
- Create_func_natural_sort_key() {}
- virtual ~Create_func_natural_sort_key() {}
+ Create_func_natural_sort_key() = default;
+ virtual ~Create_func_natural_sort_key() = default;
};
class Create_func_nullif : public Create_func_arg2
@@ -1711,8 +1711,8 @@ public:
static Create_func_nullif s_singleton;
protected:
- Create_func_nullif() {}
- virtual ~Create_func_nullif() {}
+ Create_func_nullif() = default;
+ virtual ~Create_func_nullif() = default;
};
@@ -1724,8 +1724,8 @@ public:
static Create_func_oct s_singleton;
protected:
- Create_func_oct() {}
- virtual ~Create_func_oct() {}
+ Create_func_oct() = default;
+ virtual ~Create_func_oct() = default;
};
@@ -1737,8 +1737,8 @@ public:
static Create_func_ord s_singleton;
protected:
- Create_func_ord() {}
- virtual ~Create_func_ord() {}
+ Create_func_ord() = default;
+ virtual ~Create_func_ord() = default;
};
@@ -1750,8 +1750,8 @@ public:
static Create_func_period_add s_singleton;
protected:
- Create_func_period_add() {}
- virtual ~Create_func_period_add() {}
+ Create_func_period_add() = default;
+ virtual ~Create_func_period_add() = default;
};
@@ -1763,8 +1763,8 @@ public:
static Create_func_period_diff s_singleton;
protected:
- Create_func_period_diff() {}
- virtual ~Create_func_period_diff() {}
+ Create_func_period_diff() = default;
+ virtual ~Create_func_period_diff() = default;
};
@@ -1776,8 +1776,8 @@ public:
static Create_func_pi s_singleton;
protected:
- Create_func_pi() {}
- virtual ~Create_func_pi() {}
+ Create_func_pi() = default;
+ virtual ~Create_func_pi() = default;
};
@@ -1789,8 +1789,8 @@ public:
static Create_func_pow s_singleton;
protected:
- Create_func_pow() {}
- virtual ~Create_func_pow() {}
+ Create_func_pow() = default;
+ virtual ~Create_func_pow() = default;
};
@@ -1802,8 +1802,8 @@ public:
static Create_func_quote s_singleton;
protected:
- Create_func_quote() {}
- virtual ~Create_func_quote() {}
+ Create_func_quote() = default;
+ virtual ~Create_func_quote() = default;
};
@@ -1815,8 +1815,8 @@ public:
static Create_func_regexp_instr s_singleton;
protected:
- Create_func_regexp_instr() {}
- virtual ~Create_func_regexp_instr() {}
+ Create_func_regexp_instr() = default;
+ virtual ~Create_func_regexp_instr() = default;
};
@@ -1828,8 +1828,8 @@ public:
static Create_func_regexp_replace s_singleton;
protected:
- Create_func_regexp_replace() {}
- virtual ~Create_func_regexp_replace() {}
+ Create_func_regexp_replace() = default;
+ virtual ~Create_func_regexp_replace() = default;
};
@@ -1841,8 +1841,8 @@ public:
static Create_func_regexp_substr s_singleton;
protected:
- Create_func_regexp_substr() {}
- virtual ~Create_func_regexp_substr() {}
+ Create_func_regexp_substr() = default;
+ virtual ~Create_func_regexp_substr() = default;
};
@@ -1854,8 +1854,8 @@ public:
static Create_func_radians s_singleton;
protected:
- Create_func_radians() {}
- virtual ~Create_func_radians() {}
+ Create_func_radians() = default;
+ virtual ~Create_func_radians() = default;
};
@@ -1868,8 +1868,8 @@ public:
static Create_func_rand s_singleton;
protected:
- Create_func_rand() {}
- virtual ~Create_func_rand() {}
+ Create_func_rand() = default;
+ virtual ~Create_func_rand() = default;
};
@@ -1890,8 +1890,8 @@ public:
static Create_func_release_lock s_singleton;
protected:
- Create_func_release_lock() {}
- virtual ~Create_func_release_lock() {}
+ Create_func_release_lock() = default;
+ virtual ~Create_func_release_lock() = default;
};
@@ -1903,8 +1903,8 @@ public:
static Create_func_replace_oracle s_singleton;
protected:
- Create_func_replace_oracle() {}
- virtual ~Create_func_replace_oracle() {}
+ Create_func_replace_oracle() = default;
+ virtual ~Create_func_replace_oracle() = default;
};
@@ -1916,8 +1916,8 @@ public:
static Create_func_reverse s_singleton;
protected:
- Create_func_reverse() {}
- virtual ~Create_func_reverse() {}
+ Create_func_reverse() = default;
+ virtual ~Create_func_reverse() = default;
};
@@ -1930,8 +1930,8 @@ public:
static Create_func_round s_singleton;
protected:
- Create_func_round() {}
- virtual ~Create_func_round() {}
+ Create_func_round() = default;
+ virtual ~Create_func_round() = default;
};
@@ -1948,8 +1948,8 @@ public:
static Create_func_rpad s_singleton;
protected:
- Create_func_rpad() {}
- virtual ~Create_func_rpad() {}
+ Create_func_rpad() = default;
+ virtual ~Create_func_rpad() = default;
Item *create_native_std(THD *thd, const LEX_CSTRING *name,
List<Item> *items);
Item *create_native_oracle(THD *thd, const LEX_CSTRING *name,
@@ -1977,8 +1977,8 @@ public:
static Create_func_rtrim s_singleton;
protected:
- Create_func_rtrim() {}
- virtual ~Create_func_rtrim() {}
+ Create_func_rtrim() = default;
+ virtual ~Create_func_rtrim() = default;
};
@@ -1990,8 +1990,8 @@ public:
static Create_func_rtrim_oracle s_singleton;
protected:
- Create_func_rtrim_oracle() {}
- virtual ~Create_func_rtrim_oracle() {}
+ Create_func_rtrim_oracle() = default;
+ virtual ~Create_func_rtrim_oracle() = default;
};
@@ -2003,8 +2003,8 @@ public:
static Create_func_sec_to_time s_singleton;
protected:
- Create_func_sec_to_time() {}
- virtual ~Create_func_sec_to_time() {}
+ Create_func_sec_to_time() = default;
+ virtual ~Create_func_sec_to_time() = default;
};
class Create_func_sformat : public Create_native_func
@@ -2014,8 +2014,8 @@ public:
override;
static Create_func_sformat s_singleton;
protected:
- Create_func_sformat() {}
- virtual ~Create_func_sformat() {}
+ Create_func_sformat() = default;
+ virtual ~Create_func_sformat() = default;
};
class Create_func_sha : public Create_func_arg1
@@ -2026,8 +2026,8 @@ public:
static Create_func_sha s_singleton;
protected:
- Create_func_sha() {}
- virtual ~Create_func_sha() {}
+ Create_func_sha() = default;
+ virtual ~Create_func_sha() = default;
};
@@ -2039,8 +2039,8 @@ public:
static Create_func_sha2 s_singleton;
protected:
- Create_func_sha2() {}
- virtual ~Create_func_sha2() {}
+ Create_func_sha2() = default;
+ virtual ~Create_func_sha2() = default;
};
@@ -2052,8 +2052,8 @@ public:
static Create_func_sign s_singleton;
protected:
- Create_func_sign() {}
- virtual ~Create_func_sign() {}
+ Create_func_sign() = default;
+ virtual ~Create_func_sign() = default;
};
@@ -2065,8 +2065,8 @@ public:
static Create_func_sin s_singleton;
protected:
- Create_func_sin() {}
- virtual ~Create_func_sin() {}
+ Create_func_sin() = default;
+ virtual ~Create_func_sin() = default;
};
@@ -2078,8 +2078,8 @@ public:
static Create_func_sleep s_singleton;
protected:
- Create_func_sleep() {}
- virtual ~Create_func_sleep() {}
+ Create_func_sleep() = default;
+ virtual ~Create_func_sleep() = default;
};
@@ -2091,8 +2091,8 @@ public:
static Create_func_soundex s_singleton;
protected:
- Create_func_soundex() {}
- virtual ~Create_func_soundex() {}
+ Create_func_soundex() = default;
+ virtual ~Create_func_soundex() = default;
};
@@ -2104,8 +2104,8 @@ public:
static Create_func_space s_singleton;
protected:
- Create_func_space() {}
- virtual ~Create_func_space() {}
+ Create_func_space() = default;
+ virtual ~Create_func_space() = default;
};
@@ -2117,8 +2117,8 @@ public:
static Create_func_sqrt s_singleton;
protected:
- Create_func_sqrt() {}
- virtual ~Create_func_sqrt() {}
+ Create_func_sqrt() = default;
+ virtual ~Create_func_sqrt() = default;
};
@@ -2130,8 +2130,8 @@ public:
static Create_func_str_to_date s_singleton;
protected:
- Create_func_str_to_date() {}
- virtual ~Create_func_str_to_date() {}
+ Create_func_str_to_date() = default;
+ virtual ~Create_func_str_to_date() = default;
};
@@ -2143,8 +2143,8 @@ public:
static Create_func_strcmp s_singleton;
protected:
- Create_func_strcmp() {}
- virtual ~Create_func_strcmp() {}
+ Create_func_strcmp() = default;
+ virtual ~Create_func_strcmp() = default;
};
@@ -2156,8 +2156,8 @@ public:
static Create_func_substr_index s_singleton;
protected:
- Create_func_substr_index() {}
- virtual ~Create_func_substr_index() {}
+ Create_func_substr_index() = default;
+ virtual ~Create_func_substr_index() = default;
};
@@ -2170,8 +2170,8 @@ public:
static Create_func_substr_oracle s_singleton;
protected:
- Create_func_substr_oracle() {}
- virtual ~Create_func_substr_oracle() {}
+ Create_func_substr_oracle() = default;
+ virtual ~Create_func_substr_oracle() = default;
};
@@ -2183,8 +2183,8 @@ public:
static Create_func_subtime s_singleton;
protected:
- Create_func_subtime() {}
- virtual ~Create_func_subtime() {}
+ Create_func_subtime() = default;
+ virtual ~Create_func_subtime() = default;
};
@@ -2196,8 +2196,8 @@ public:
static Create_func_tan s_singleton;
protected:
- Create_func_tan() {}
- virtual ~Create_func_tan() {}
+ Create_func_tan() = default;
+ virtual ~Create_func_tan() = default;
};
@@ -2209,8 +2209,8 @@ public:
static Create_func_time_format s_singleton;
protected:
- Create_func_time_format() {}
- virtual ~Create_func_time_format() {}
+ Create_func_time_format() = default;
+ virtual ~Create_func_time_format() = default;
};
@@ -2222,8 +2222,8 @@ public:
static Create_func_time_to_sec s_singleton;
protected:
- Create_func_time_to_sec() {}
- virtual ~Create_func_time_to_sec() {}
+ Create_func_time_to_sec() = default;
+ virtual ~Create_func_time_to_sec() = default;
};
@@ -2235,8 +2235,8 @@ public:
static Create_func_timediff s_singleton;
protected:
- Create_func_timediff() {}
- virtual ~Create_func_timediff() {}
+ Create_func_timediff() = default;
+ virtual ~Create_func_timediff() = default;
};
@@ -2248,8 +2248,8 @@ public:
static Create_func_to_base64 s_singleton;
protected:
- Create_func_to_base64() {}
- virtual ~Create_func_to_base64() {}
+ Create_func_to_base64() = default;
+ virtual ~Create_func_to_base64() = default;
};
@@ -2262,8 +2262,8 @@ public:
static Create_func_to_char s_singleton;
protected:
- Create_func_to_char() {}
- virtual ~Create_func_to_char() {}
+ Create_func_to_char() = default;
+ virtual ~Create_func_to_char() = default;
};
@@ -2275,8 +2275,8 @@ public:
static Create_func_to_days s_singleton;
protected:
- Create_func_to_days() {}
- virtual ~Create_func_to_days() {}
+ Create_func_to_days() = default;
+ virtual ~Create_func_to_days() = default;
};
class Create_func_to_seconds : public Create_func_arg1
@@ -2287,8 +2287,8 @@ public:
static Create_func_to_seconds s_singleton;
protected:
- Create_func_to_seconds() {}
- virtual ~Create_func_to_seconds() {}
+ Create_func_to_seconds() = default;
+ virtual ~Create_func_to_seconds() = default;
};
@@ -2300,8 +2300,8 @@ public:
static Create_func_ucase s_singleton;
protected:
- Create_func_ucase() {}
- virtual ~Create_func_ucase() {}
+ Create_func_ucase() = default;
+ virtual ~Create_func_ucase() = default;
};
@@ -2313,8 +2313,8 @@ public:
static Create_func_uncompress s_singleton;
protected:
- Create_func_uncompress() {}
- virtual ~Create_func_uncompress() {}
+ Create_func_uncompress() = default;
+ virtual ~Create_func_uncompress() = default;
};
@@ -2326,8 +2326,8 @@ public:
static Create_func_uncompressed_length s_singleton;
protected:
- Create_func_uncompressed_length() {}
- virtual ~Create_func_uncompressed_length() {}
+ Create_func_uncompressed_length() = default;
+ virtual ~Create_func_uncompressed_length() = default;
};
@@ -2339,8 +2339,8 @@ public:
static Create_func_unhex s_singleton;
protected:
- Create_func_unhex() {}
- virtual ~Create_func_unhex() {}
+ Create_func_unhex() = default;
+ virtual ~Create_func_unhex() = default;
};
@@ -2353,8 +2353,8 @@ public:
static Create_func_unix_timestamp s_singleton;
protected:
- Create_func_unix_timestamp() {}
- virtual ~Create_func_unix_timestamp() {}
+ Create_func_unix_timestamp() = default;
+ virtual ~Create_func_unix_timestamp() = default;
};
@@ -2366,8 +2366,8 @@ public:
static Create_func_uuid_short s_singleton;
protected:
- Create_func_uuid_short() {}
- virtual ~Create_func_uuid_short() {}
+ Create_func_uuid_short() = default;
+ virtual ~Create_func_uuid_short() = default;
};
@@ -2379,8 +2379,8 @@ public:
static Create_func_version s_singleton;
protected:
- Create_func_version() {}
- virtual ~Create_func_version() {}
+ Create_func_version() = default;
+ virtual ~Create_func_version() = default;
};
@@ -2392,8 +2392,8 @@ public:
static Create_func_weekday s_singleton;
protected:
- Create_func_weekday() {}
- virtual ~Create_func_weekday() {}
+ Create_func_weekday() = default;
+ virtual ~Create_func_weekday() = default;
};
@@ -2405,8 +2405,8 @@ public:
static Create_func_weekofyear s_singleton;
protected:
- Create_func_weekofyear() {}
- virtual ~Create_func_weekofyear() {}
+ Create_func_weekofyear() = default;
+ virtual ~Create_func_weekofyear() = default;
};
@@ -2419,8 +2419,8 @@ public:
static Create_func_wsrep_last_written_gtid s_singleton;
protected:
- Create_func_wsrep_last_written_gtid() {}
- virtual ~Create_func_wsrep_last_written_gtid() {}
+ Create_func_wsrep_last_written_gtid() = default;
+ virtual ~Create_func_wsrep_last_written_gtid() = default;
};
@@ -2432,8 +2432,8 @@ public:
static Create_func_wsrep_last_seen_gtid s_singleton;
protected:
- Create_func_wsrep_last_seen_gtid() {}
- virtual ~Create_func_wsrep_last_seen_gtid() {}
+ Create_func_wsrep_last_seen_gtid() = default;
+ virtual ~Create_func_wsrep_last_seen_gtid() = default;
};
@@ -2446,8 +2446,8 @@ public:
static Create_func_wsrep_sync_wait_upto s_singleton;
protected:
- Create_func_wsrep_sync_wait_upto() {}
- virtual ~Create_func_wsrep_sync_wait_upto() {}
+ Create_func_wsrep_sync_wait_upto() = default;
+ virtual ~Create_func_wsrep_sync_wait_upto() = default;
};
#endif /* WITH_WSREP */
@@ -2460,8 +2460,8 @@ public:
static Create_func_xml_extractvalue s_singleton;
protected:
- Create_func_xml_extractvalue() {}
- virtual ~Create_func_xml_extractvalue() {}
+ Create_func_xml_extractvalue() = default;
+ virtual ~Create_func_xml_extractvalue() = default;
};
@@ -2473,8 +2473,8 @@ public:
static Create_func_xml_update s_singleton;
protected:
- Create_func_xml_update() {}
- virtual ~Create_func_xml_update() {}
+ Create_func_xml_update() = default;
+ virtual ~Create_func_xml_update() = default;
};
@@ -2487,8 +2487,8 @@ public:
static Create_func_year_week s_singleton;
protected:
- Create_func_year_week() {}
- virtual ~Create_func_year_week() {}
+ Create_func_year_week() = default;
+ virtual ~Create_func_year_week() = default;
};
@@ -3666,6 +3666,13 @@ Create_func_get_lock Create_func_get_lock::s_singleton;
Item*
Create_func_get_lock::create_2_arg(THD *thd, Item *arg1, Item *arg2)
{
+#ifdef WITH_WSREP
+ if (WSREP_ON && WSREP(thd))
+ {
+ my_error(ER_NOT_SUPPORTED_YET, MYF(0), "GET_LOCK in cluster (WSREP_ON=ON)");
+ return NULL;
+ }
+#endif /* WITH_WSREP */
thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION);
thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
return new (thd->mem_root) Item_func_get_lock(thd, arg1, arg2);
@@ -4990,6 +4997,13 @@ Create_func_release_all_locks Create_func_release_all_locks::s_singleton;
Item*
Create_func_release_all_locks::create_builder(THD *thd)
{
+#ifdef WITH_WSREP
+ if (WSREP_ON && WSREP(thd))
+ {
+ my_error(ER_NOT_SUPPORTED_YET, MYF(0), "RELEASE_ALL_LOCKS in cluster (WSREP_ON=ON)");
+ return NULL;
+ }
+#endif /* WITH_WSREP */
thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION);
thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
return new (thd->mem_root) Item_func_release_all_locks(thd);
@@ -5001,6 +5015,13 @@ Create_func_release_lock Create_func_release_lock::s_singleton;
Item*
Create_func_release_lock::create_1_arg(THD *thd, Item *arg1)
{
+#ifdef WITH_WSREP
+ if (WSREP_ON && WSREP(thd))
+ {
+ my_error(ER_NOT_SUPPORTED_YET, MYF(0), "RELEASE_LOCK in cluster (WSREP_ON=ON)");
+ return NULL;
+ }
+#endif /* WITH_WSREP */
thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION);
thd->lex->uncacheable(UNCACHEABLE_SIDEEFFECT);
return new (thd->mem_root) Item_func_release_lock(thd, arg1);
diff --git a/sql/item_create.h b/sql/item_create.h
index 48e1a14e7fc..7c248e81711 100644
--- a/sql/item_create.h
+++ b/sql/item_create.h
@@ -63,9 +63,9 @@ public:
protected:
/** Constructor */
- Create_func() {}
+ Create_func() = default;
/** Destructor */
- virtual ~Create_func() {}
+ virtual ~Create_func() = default;
};
@@ -88,9 +88,9 @@ public:
protected:
/** Constructor. */
- Create_func_arg0() {}
+ Create_func_arg0() = default;
/** Destructor. */
- virtual ~Create_func_arg0() {}
+ virtual ~Create_func_arg0() = default;
};
@@ -114,9 +114,9 @@ public:
protected:
/** Constructor. */
- Create_func_arg1() {}
+ Create_func_arg1() = default;
/** Destructor. */
- virtual ~Create_func_arg1() {}
+ virtual ~Create_func_arg1() = default;
};
@@ -141,9 +141,9 @@ public:
protected:
/** Constructor. */
- Create_func_arg2() {}
+ Create_func_arg2() = default;
/** Destructor. */
- virtual ~Create_func_arg2() {}
+ virtual ~Create_func_arg2() = default;
};
@@ -169,9 +169,9 @@ public:
protected:
/** Constructor. */
- Create_func_arg3() {}
+ Create_func_arg3() = default;
/** Destructor. */
- virtual ~Create_func_arg3() {}
+ virtual ~Create_func_arg3() = default;
};
@@ -203,9 +203,9 @@ public:
protected:
/** Constructor. */
- Create_native_func() {}
+ Create_native_func() = default;
/** Destructor. */
- virtual ~Create_native_func() {}
+ virtual ~Create_native_func() = default;
};
@@ -246,9 +246,9 @@ public:
protected:
/** Constructor. */
- Create_qfunc() {}
+ Create_qfunc() = default;
/** Destructor. */
- virtual ~Create_qfunc() {}
+ virtual ~Create_qfunc() = default;
};
@@ -295,9 +295,9 @@ public:
protected:
/** Constructor. */
- Create_udf_func() {}
+ Create_udf_func() = default;
/** Destructor. */
- virtual ~Create_udf_func() {}
+ virtual ~Create_udf_func() = default;
};
#endif
diff --git a/sql/item_func.cc b/sql/item_func.cc
index 7dd479f6a34..6c0c785e901 100644
--- a/sql/item_func.cc
+++ b/sql/item_func.cc
@@ -3994,7 +3994,7 @@ class Interruptible_wait
Interruptible_wait(THD *thd)
: m_thd(thd) {}
- ~Interruptible_wait() {}
+ ~Interruptible_wait() = default;
public:
/**
diff --git a/sql/item_func.h b/sql/item_func.h
index 6d1cf7d312e..6e714814526 100644
--- a/sql/item_func.h
+++ b/sql/item_func.h
@@ -469,7 +469,7 @@ public:
class Handler
{
public:
- virtual ~Handler() { }
+ virtual ~Handler() = default;
virtual String *val_str(Item_handled_func *, String *) const= 0;
virtual String *val_str_ascii(Item_handled_func *, String *) const= 0;
virtual double val_real(Item_handled_func *) const= 0;
@@ -3866,8 +3866,7 @@ public:
Item_func_sp(THD *thd, Name_resolution_context *context_arg,
sp_name *name, const Sp_handler *sph, List<Item> &list);
- virtual ~Item_func_sp()
- {}
+ virtual ~Item_func_sp() = default;
void update_used_tables() override;
diff --git a/sql/item_geofunc.cc b/sql/item_geofunc.cc
index fc1a4b20e8c..8714417a77d 100644
--- a/sql/item_geofunc.cc
+++ b/sql/item_geofunc.cc
@@ -1531,9 +1531,7 @@ exit:
}
-Item_func_spatial_operation::~Item_func_spatial_operation()
-{
-}
+Item_func_spatial_operation::~Item_func_spatial_operation() = default;
String *Item_func_spatial_operation::val_str(String *str_value)
@@ -2788,8 +2786,8 @@ public:
static Create_func_area s_singleton;
protected:
- Create_func_area() {}
- virtual ~Create_func_area() {}
+ Create_func_area() = default;
+ virtual ~Create_func_area() = default;
};
@@ -2804,8 +2802,8 @@ public:
static Create_func_as_wkb s_singleton;
protected:
- Create_func_as_wkb() {}
- virtual ~Create_func_as_wkb() {}
+ Create_func_as_wkb() = default;
+ virtual ~Create_func_as_wkb() = default;
};
@@ -2820,8 +2818,8 @@ public:
static Create_func_as_wkt s_singleton;
protected:
- Create_func_as_wkt() {}
- virtual ~Create_func_as_wkt() {}
+ Create_func_as_wkt() = default;
+ virtual ~Create_func_as_wkt() = default;
};
@@ -2837,8 +2835,8 @@ public:
static Create_func_centroid s_singleton;
protected:
- Create_func_centroid() {}
- virtual ~Create_func_centroid() {}
+ Create_func_centroid() = default;
+ virtual ~Create_func_centroid() = default;
};
@@ -2853,8 +2851,8 @@ public:
static Create_func_convexhull s_singleton;
protected:
- Create_func_convexhull() {}
- virtual ~Create_func_convexhull() {}
+ Create_func_convexhull() = default;
+ virtual ~Create_func_convexhull() = default;
};
@@ -2869,8 +2867,8 @@ public:
static Create_func_pointonsurface s_singleton;
protected:
- Create_func_pointonsurface() {}
- virtual ~Create_func_pointonsurface() {}
+ Create_func_pointonsurface() = default;
+ virtual ~Create_func_pointonsurface() = default;
};
@@ -2886,8 +2884,8 @@ public:
static Create_func_mbr_contains s_singleton;
protected:
- Create_func_mbr_contains() {}
- virtual ~Create_func_mbr_contains() {}
+ Create_func_mbr_contains() = default;
+ virtual ~Create_func_mbr_contains() = default;
};
@@ -2902,8 +2900,8 @@ public:
static Create_func_contains s_singleton;
protected:
- Create_func_contains() {}
- virtual ~Create_func_contains() {}
+ Create_func_contains() = default;
+ virtual ~Create_func_contains() = default;
};
@@ -2918,8 +2916,8 @@ public:
static Create_func_crosses s_singleton;
protected:
- Create_func_crosses() {}
- virtual ~Create_func_crosses() {}
+ Create_func_crosses() = default;
+ virtual ~Create_func_crosses() = default;
};
@@ -2934,8 +2932,8 @@ public:
static Create_func_dimension s_singleton;
protected:
- Create_func_dimension() {}
- virtual ~Create_func_dimension() {}
+ Create_func_dimension() = default;
+ virtual ~Create_func_dimension() = default;
};
@@ -2951,8 +2949,8 @@ public:
static Create_func_mbr_disjoint s_singleton;
protected:
- Create_func_mbr_disjoint() {}
- virtual ~Create_func_mbr_disjoint() {}
+ Create_func_mbr_disjoint() = default;
+ virtual ~Create_func_mbr_disjoint() = default;
};
@@ -2967,8 +2965,8 @@ public:
static Create_func_disjoint s_singleton;
protected:
- Create_func_disjoint() {}
- virtual ~Create_func_disjoint() {}
+ Create_func_disjoint() = default;
+ virtual ~Create_func_disjoint() = default;
};
@@ -2983,8 +2981,8 @@ public:
static Create_func_distance s_singleton;
protected:
- Create_func_distance() {}
- virtual ~Create_func_distance() {}
+ Create_func_distance() = default;
+ virtual ~Create_func_distance() = default;
};
@@ -2996,8 +2994,8 @@ public:
static Create_func_distance_sphere s_singleton;
protected:
- Create_func_distance_sphere() {}
- virtual ~Create_func_distance_sphere() {}
+ Create_func_distance_sphere() = default;
+ virtual ~Create_func_distance_sphere() = default;
};
@@ -3031,8 +3029,8 @@ public:
static Create_func_endpoint s_singleton;
protected:
- Create_func_endpoint() {}
- virtual ~Create_func_endpoint() {}
+ Create_func_endpoint() = default;
+ virtual ~Create_func_endpoint() = default;
};
@@ -3047,8 +3045,8 @@ public:
static Create_func_envelope s_singleton;
protected:
- Create_func_envelope() {}
- virtual ~Create_func_envelope() {}
+ Create_func_envelope() = default;
+ virtual ~Create_func_envelope() = default;
};
class Create_func_boundary : public Create_func_arg1
@@ -3062,8 +3060,8 @@ public:
static Create_func_boundary s_singleton;
protected:
- Create_func_boundary() {}
- virtual ~Create_func_boundary() {}
+ Create_func_boundary() = default;
+ virtual ~Create_func_boundary() = default;
};
@@ -3079,8 +3077,8 @@ public:
static Create_func_mbr_equals s_singleton;
protected:
- Create_func_mbr_equals() {}
- virtual ~Create_func_mbr_equals() {}
+ Create_func_mbr_equals() = default;
+ virtual ~Create_func_mbr_equals() = default;
};
@@ -3096,8 +3094,8 @@ public:
static Create_func_equals s_singleton;
protected:
- Create_func_equals() {}
- virtual ~Create_func_equals() {}
+ Create_func_equals() = default;
+ virtual ~Create_func_equals() = default;
};
@@ -3113,8 +3111,8 @@ public:
static Create_func_exteriorring s_singleton;
protected:
- Create_func_exteriorring() {}
- virtual ~Create_func_exteriorring() {}
+ Create_func_exteriorring() = default;
+ virtual ~Create_func_exteriorring() = default;
};
@@ -3128,8 +3126,8 @@ public:
static Create_func_geometry_from_text s_singleton;
protected:
- Create_func_geometry_from_text() {}
- virtual ~Create_func_geometry_from_text() {}
+ Create_func_geometry_from_text() = default;
+ virtual ~Create_func_geometry_from_text() = default;
};
@@ -3179,8 +3177,8 @@ public:
static Create_func_geometry_from_wkb s_singleton;
protected:
- Create_func_geometry_from_wkb() {}
- virtual ~Create_func_geometry_from_wkb() {}
+ Create_func_geometry_from_wkb() = default;
+ virtual ~Create_func_geometry_from_wkb() = default;
};
@@ -3229,8 +3227,8 @@ public:
static Create_func_geometry_from_json s_singleton;
protected:
- Create_func_geometry_from_json() {}
- virtual ~Create_func_geometry_from_json() {}
+ Create_func_geometry_from_json() = default;
+ virtual ~Create_func_geometry_from_json() = default;
};
@@ -3289,8 +3287,8 @@ public:
static Create_func_as_geojson s_singleton;
protected:
- Create_func_as_geojson() {}
- virtual ~Create_func_as_geojson() {}
+ Create_func_as_geojson() = default;
+ virtual ~Create_func_as_geojson() = default;
};
@@ -3349,8 +3347,8 @@ public:
static Create_func_geometry_type s_singleton;
protected:
- Create_func_geometry_type() {}
- virtual ~Create_func_geometry_type() {}
+ Create_func_geometry_type() = default;
+ virtual ~Create_func_geometry_type() = default;
};
@@ -3366,8 +3364,8 @@ public:
static Create_func_geometryn s_singleton;
protected:
- Create_func_geometryn() {}
- virtual ~Create_func_geometryn() {}
+ Create_func_geometryn() = default;
+ virtual ~Create_func_geometryn() = default;
};
@@ -3383,8 +3381,8 @@ public:
static Create_func_gis_debug s_singleton;
protected:
- Create_func_gis_debug() {}
- virtual ~Create_func_gis_debug() {}
+ Create_func_gis_debug() = default;
+ virtual ~Create_func_gis_debug() = default;
};
#endif
@@ -3400,8 +3398,8 @@ public:
static Create_func_glength s_singleton;
protected:
- Create_func_glength() {}
- virtual ~Create_func_glength() {}
+ Create_func_glength() = default;
+ virtual ~Create_func_glength() = default;
};
@@ -3417,8 +3415,8 @@ public:
static Create_func_interiorringn s_singleton;
protected:
- Create_func_interiorringn() {}
- virtual ~Create_func_interiorringn() {}
+ Create_func_interiorringn() = default;
+ virtual ~Create_func_interiorringn() = default;
};
@@ -3433,8 +3431,8 @@ public:
static Create_func_relate s_singleton;
protected:
- Create_func_relate() {}
- virtual ~Create_func_relate() {}
+ Create_func_relate() = default;
+ virtual ~Create_func_relate() = default;
};
@@ -3450,8 +3448,8 @@ public:
static Create_func_mbr_intersects s_singleton;
protected:
- Create_func_mbr_intersects() {}
- virtual ~Create_func_mbr_intersects() {}
+ Create_func_mbr_intersects() = default;
+ virtual ~Create_func_mbr_intersects() = default;
};
@@ -3467,8 +3465,8 @@ public:
static Create_func_intersects s_singleton;
protected:
- Create_func_intersects() {}
- virtual ~Create_func_intersects() {}
+ Create_func_intersects() = default;
+ virtual ~Create_func_intersects() = default;
};
@@ -3484,8 +3482,8 @@ public:
static Create_func_intersection s_singleton;
protected:
- Create_func_intersection() {}
- virtual ~Create_func_intersection() {}
+ Create_func_intersection() = default;
+ virtual ~Create_func_intersection() = default;
};
@@ -3501,8 +3499,8 @@ public:
static Create_func_difference s_singleton;
protected:
- Create_func_difference() {}
- virtual ~Create_func_difference() {}
+ Create_func_difference() = default;
+ virtual ~Create_func_difference() = default;
};
@@ -3518,8 +3516,8 @@ public:
static Create_func_union s_singleton;
protected:
- Create_func_union() {}
- virtual ~Create_func_union() {}
+ Create_func_union() = default;
+ virtual ~Create_func_union() = default;
};
@@ -3535,8 +3533,8 @@ public:
static Create_func_symdifference s_singleton;
protected:
- Create_func_symdifference() {}
- virtual ~Create_func_symdifference() {}
+ Create_func_symdifference() = default;
+ virtual ~Create_func_symdifference() = default;
};
@@ -3551,8 +3549,8 @@ public:
static Create_func_buffer s_singleton;
protected:
- Create_func_buffer() {}
- virtual ~Create_func_buffer() {}
+ Create_func_buffer() = default;
+ virtual ~Create_func_buffer() = default;
};
@@ -3567,8 +3565,8 @@ public:
static Create_func_isclosed s_singleton;
protected:
- Create_func_isclosed() {}
- virtual ~Create_func_isclosed() {}
+ Create_func_isclosed() = default;
+ virtual ~Create_func_isclosed() = default;
};
@@ -3583,8 +3581,8 @@ public:
static Create_func_isring s_singleton;
protected:
- Create_func_isring() {}
- virtual ~Create_func_isring() {}
+ Create_func_isring() = default;
+ virtual ~Create_func_isring() = default;
};
@@ -3599,8 +3597,8 @@ public:
static Create_func_isempty s_singleton;
protected:
- Create_func_isempty() {}
- virtual ~Create_func_isempty() {}
+ Create_func_isempty() = default;
+ virtual ~Create_func_isempty() = default;
};
@@ -3615,8 +3613,8 @@ public:
static Create_func_issimple s_singleton;
protected:
- Create_func_issimple() {}
- virtual ~Create_func_issimple() {}
+ Create_func_issimple() = default;
+ virtual ~Create_func_issimple() = default;
};
@@ -3632,8 +3630,8 @@ public:
static Create_func_numgeometries s_singleton;
protected:
- Create_func_numgeometries() {}
- virtual ~Create_func_numgeometries() {}
+ Create_func_numgeometries() = default;
+ virtual ~Create_func_numgeometries() = default;
};
@@ -3648,8 +3646,8 @@ public:
static Create_func_numinteriorring s_singleton;
protected:
- Create_func_numinteriorring() {}
- virtual ~Create_func_numinteriorring() {}
+ Create_func_numinteriorring() = default;
+ virtual ~Create_func_numinteriorring() = default;
};
@@ -3664,8 +3662,8 @@ public:
static Create_func_numpoints s_singleton;
protected:
- Create_func_numpoints() {}
- virtual ~Create_func_numpoints() {}
+ Create_func_numpoints() = default;
+ virtual ~Create_func_numpoints() = default;
};
@@ -3681,8 +3679,8 @@ public:
static Create_func_mbr_overlaps s_singleton;
protected:
- Create_func_mbr_overlaps() {}
- virtual ~Create_func_mbr_overlaps() {}
+ Create_func_mbr_overlaps() = default;
+ virtual ~Create_func_mbr_overlaps() = default;
};
@@ -3698,8 +3696,8 @@ public:
static Create_func_overlaps s_singleton;
protected:
- Create_func_overlaps() {}
- virtual ~Create_func_overlaps() {}
+ Create_func_overlaps() = default;
+ virtual ~Create_func_overlaps() = default;
};
@@ -3717,8 +3715,8 @@ public:
static Create_func_pointn s_singleton;
protected:
- Create_func_pointn() {}
- virtual ~Create_func_pointn() {}
+ Create_func_pointn() = default;
+ virtual ~Create_func_pointn() = default;
};
@@ -3735,8 +3733,8 @@ public:
static Create_func_srid s_singleton;
protected:
- Create_func_srid() {}
- virtual ~Create_func_srid() {}
+ Create_func_srid() = default;
+ virtual ~Create_func_srid() = default;
};
@@ -3752,8 +3750,8 @@ public:
static Create_func_startpoint s_singleton;
protected:
- Create_func_startpoint() {}
- virtual ~Create_func_startpoint() {}
+ Create_func_startpoint() = default;
+ virtual ~Create_func_startpoint() = default;
};
@@ -3770,8 +3768,8 @@ public:
static Create_func_touches s_singleton;
protected:
- Create_func_touches() {}
- virtual ~Create_func_touches() {}
+ Create_func_touches() = default;
+ virtual ~Create_func_touches() = default;
};
@@ -3787,8 +3785,8 @@ public:
static Create_func_mbr_within s_singleton;
protected:
- Create_func_mbr_within() {}
- virtual ~Create_func_mbr_within() {}
+ Create_func_mbr_within() = default;
+ virtual ~Create_func_mbr_within() = default;
};
@@ -3804,8 +3802,8 @@ public:
static Create_func_within s_singleton;
protected:
- Create_func_within() {}
- virtual ~Create_func_within() {}
+ Create_func_within() = default;
+ virtual ~Create_func_within() = default;
};
@@ -3820,8 +3818,8 @@ public:
static Create_func_x s_singleton;
protected:
- Create_func_x() {}
- virtual ~Create_func_x() {}
+ Create_func_x() = default;
+ virtual ~Create_func_x() = default;
};
@@ -3836,8 +3834,8 @@ public:
static Create_func_y s_singleton;
protected:
- Create_func_y() {}
- virtual ~Create_func_y() {}
+ Create_func_y() = default;
+ virtual ~Create_func_y() = default;
};
diff --git a/sql/item_jsonfunc.cc b/sql/item_jsonfunc.cc
index 89f1c9c8221..590fde88a52 100644
--- a/sql/item_jsonfunc.cc
+++ b/sql/item_jsonfunc.cc
@@ -4239,7 +4239,7 @@ bool Item_func_json_objectagg::add()
result.append(STRING_WITH_LEN(", "));
result.append('"');
- result.append(*key);
+ st_append_escaped(&result,key);
result.append(STRING_WITH_LEN("\":"));
buf.length(0);
diff --git a/sql/item_subselect.cc b/sql/item_subselect.cc
index 9b4e60b4086..67d7d03c0bf 100644
--- a/sql/item_subselect.cc
+++ b/sql/item_subselect.cc
@@ -2906,7 +2906,9 @@ bool Item_exists_subselect::select_prepare_to_be_in()
bool trans_res= FALSE;
DBUG_ENTER("Item_exists_subselect::select_prepare_to_be_in");
if (!optimizer &&
- thd->lex->sql_command == SQLCOM_SELECT &&
+ (thd->lex->sql_command == SQLCOM_SELECT ||
+ thd->lex->sql_command == SQLCOM_UPDATE_MULTI ||
+ thd->lex->sql_command == SQLCOM_DELETE_MULTI) &&
!unit->first_select()->is_part_of_union() &&
optimizer_flag(thd, OPTIMIZER_SWITCH_EXISTS_TO_IN) &&
(is_top_level_item() ||
diff --git a/sql/item_subselect.h b/sql/item_subselect.h
index fdd0333adfd..8d58e16bb28 100644
--- a/sql/item_subselect.h
+++ b/sql/item_subselect.h
@@ -831,7 +831,7 @@ public:
item= si;
maybe_null= 0;
}
- virtual ~subselect_engine() {}; // to satisfy compiler
+ virtual ~subselect_engine() = default;; // to satisfy compiler
virtual void cleanup()= 0;
/*
diff --git a/sql/item_sum.h b/sql/item_sum.h
index fda35e45261..7308734070d 100644
--- a/sql/item_sum.h
+++ b/sql/item_sum.h
@@ -59,7 +59,7 @@ protected:
public:
Aggregator (Item_sum *arg): item_sum(arg) {}
- virtual ~Aggregator () {} /* Keep gcc happy */
+ virtual ~Aggregator () = default; /* Keep gcc happy */
enum Aggregator_type { SIMPLE_AGGREGATOR, DISTINCT_AGGREGATOR };
virtual Aggregator_type Aggrtype() = 0;
diff --git a/sql/log.cc b/sql/log.cc
index 7fa787c9bfc..89866ef3760 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -215,7 +215,7 @@ public:
m_message[0]= '\0';
}
- virtual ~Silence_log_table_errors() {}
+ virtual ~Silence_log_table_errors() = default;
virtual bool handle_condition(THD *thd,
uint sql_errno,
@@ -772,14 +772,10 @@ end:
}
-Log_to_csv_event_handler::Log_to_csv_event_handler()
-{
-}
+Log_to_csv_event_handler::Log_to_csv_event_handler() = default;
-Log_to_csv_event_handler::~Log_to_csv_event_handler()
-{
-}
+Log_to_csv_event_handler::~Log_to_csv_event_handler() = default;
void Log_to_csv_event_handler::cleanup()
diff --git a/sql/log.h b/sql/log.h
index 65f70712bbf..c20f0fe5a57 100644
--- a/sql/log.h
+++ b/sql/log.h
@@ -42,8 +42,8 @@ class TC_LOG
{
public:
int using_heuristic_recover();
- TC_LOG() {}
- virtual ~TC_LOG() {}
+ TC_LOG() = default;
+ virtual ~TC_LOG() = default;
virtual int open(const char *opt_name)=0;
virtual void close()=0;
@@ -100,7 +100,7 @@ extern PSI_cond_key key_COND_prepare_ordered;
class TC_LOG_DUMMY: public TC_LOG // use it to disable the logging
{
public:
- TC_LOG_DUMMY() {}
+ TC_LOG_DUMMY() = default;
int open(const char *opt_name) { return 0; }
void close() { }
/*
@@ -308,7 +308,7 @@ class MYSQL_LOG
{
public:
MYSQL_LOG();
- virtual ~MYSQL_LOG() {}
+ virtual ~MYSQL_LOG() = default;
void init_pthread_objects();
void cleanup();
bool open(
@@ -983,7 +983,7 @@ public:
class Log_event_handler
{
public:
- Log_event_handler() {}
+ Log_event_handler() = default;
virtual bool init()= 0;
virtual void cleanup()= 0;
@@ -997,7 +997,7 @@ public:
const char *command_type, size_t command_type_len,
const char *sql_text, size_t sql_text_len,
CHARSET_INFO *client_cs)= 0;
- virtual ~Log_event_handler() {}
+ virtual ~Log_event_handler() = default;
};
diff --git a/sql/log_event.cc b/sql/log_event.cc
index d4d672e1dca..919db4cdeb5 100644
--- a/sql/log_event.cc
+++ b/sql/log_event.cc
@@ -154,7 +154,7 @@ public:
reinit_io_cache(m_cache, WRITE_CACHE, 0L, FALSE, TRUE);
}
- ~Write_on_release_cache() {}
+ ~Write_on_release_cache() = default;
bool flush_data()
{
@@ -4159,9 +4159,7 @@ Ignorable_log_event::Ignorable_log_event(const uchar *buf,
DBUG_VOID_RETURN;
}
-Ignorable_log_event::~Ignorable_log_event()
-{
-}
+Ignorable_log_event::~Ignorable_log_event() = default;
bool copy_event_cache_to_file_and_reinit(IO_CACHE *cache, FILE *file)
{
diff --git a/sql/log_event.h b/sql/log_event.h
index 272c202fb48..dd87d6dce67 100644
--- a/sql/log_event.h
+++ b/sql/log_event.h
@@ -2615,8 +2615,7 @@ public:
*/
Load_log_event(const uchar *buf, uint event_len,
const Format_description_log_event* description_event);
- ~Load_log_event()
- {}
+ ~Load_log_event() = default;
Log_event_type get_type_code()
{
return sql_ex.new_format() ? NEW_LOAD_EVENT: LOAD_EVENT;
@@ -2700,13 +2699,13 @@ public:
void pack_info(Protocol* protocol);
#endif /* HAVE_REPLICATION */
#else
- Start_log_event_v3() {}
+ Start_log_event_v3() = default;
bool print(FILE* file, PRINT_EVENT_INFO* print_event_info);
#endif
Start_log_event_v3(const uchar *buf, uint event_len,
const Format_description_log_event* description_event);
- ~Start_log_event_v3() {}
+ ~Start_log_event_v3() = default;
Log_event_type get_type_code() { return START_EVENT_V3;}
my_off_t get_header_len(my_off_t l __attribute__((unused)))
{ return LOG_EVENT_MINIMAL_HEADER_LEN; }
@@ -2996,7 +2995,7 @@ Intvar_log_event(THD* thd_arg,uchar type_arg, ulonglong val_arg,
Intvar_log_event(const uchar *buf,
const Format_description_log_event *description_event);
- ~Intvar_log_event() {}
+ ~Intvar_log_event() = default;
Log_event_type get_type_code() { return INTVAR_EVENT;}
const char* get_var_type_name();
int get_data_size() { return 9; /* sizeof(type) + sizeof(val) */;}
@@ -3077,7 +3076,7 @@ class Rand_log_event: public Log_event
Rand_log_event(const uchar *buf,
const Format_description_log_event *description_event);
- ~Rand_log_event() {}
+ ~Rand_log_event() = default;
Log_event_type get_type_code() { return RAND_EVENT;}
int get_data_size() { return 16; /* sizeof(ulonglong) * 2*/ }
#ifdef MYSQL_SERVER
@@ -3157,7 +3156,7 @@ public:
Xid_log_event(const uchar *buf,
const Format_description_log_event *description_event);
- ~Xid_log_event() {}
+ ~Xid_log_event() = default;
Log_event_type get_type_code() { return XID_EVENT;}
int get_data_size() { return sizeof(xid); }
#ifdef MYSQL_SERVER
@@ -3377,7 +3376,7 @@ public:
User_var_log_event(const uchar *buf, uint event_len,
const Format_description_log_event *description_event);
- ~User_var_log_event() {}
+ ~User_var_log_event() = default;
Log_event_type get_type_code() { return USER_VAR_EVENT;}
#ifdef MYSQL_SERVER
bool write();
@@ -3427,7 +3426,7 @@ public:
const Format_description_log_event *description_event):
Log_event(buf, description_event)
{}
- ~Stop_log_event() {}
+ ~Stop_log_event() = default;
Log_event_type get_type_code() { return STOP_EVENT;}
bool is_valid() const { return 1; }
@@ -3722,7 +3721,7 @@ public:
#endif
Gtid_log_event(const uchar *buf, uint event_len,
const Format_description_log_event *description_event);
- ~Gtid_log_event() { }
+ ~Gtid_log_event() = default;
Log_event_type get_type_code() { return GTID_EVENT; }
enum_logged_status logged_status() { return LOGGED_NO_DATA; }
int get_data_size()
@@ -3975,7 +3974,7 @@ public:
Append_block_log_event(const uchar *buf, uint event_len,
const Format_description_log_event
*description_event);
- ~Append_block_log_event() {}
+ ~Append_block_log_event() = default;
Log_event_type get_type_code() { return APPEND_BLOCK_EVENT;}
int get_data_size() { return block_len + APPEND_BLOCK_HEADER_LEN ;}
bool is_valid() const { return block != 0; }
@@ -4016,7 +4015,7 @@ public:
Delete_file_log_event(const uchar *buf, uint event_len,
const Format_description_log_event* description_event);
- ~Delete_file_log_event() {}
+ ~Delete_file_log_event() = default;
Log_event_type get_type_code() { return DELETE_FILE_EVENT;}
int get_data_size() { return DELETE_FILE_HEADER_LEN ;}
bool is_valid() const { return file_id != 0; }
@@ -4056,7 +4055,7 @@ public:
Execute_load_log_event(const uchar *buf, uint event_len,
const Format_description_log_event
*description_event);
- ~Execute_load_log_event() {}
+ ~Execute_load_log_event() = default;
Log_event_type get_type_code() { return EXEC_LOAD_EVENT;}
int get_data_size() { return EXEC_LOAD_HEADER_LEN ;}
bool is_valid() const { return file_id != 0; }
@@ -4096,7 +4095,7 @@ public:
Begin_load_query_log_event(const uchar *buf, uint event_len,
const Format_description_log_event
*description_event);
- ~Begin_load_query_log_event() {}
+ ~Begin_load_query_log_event() = default;
Log_event_type get_type_code() { return BEGIN_LOAD_QUERY_EVENT; }
private:
#if defined(MYSQL_SERVER) && defined(HAVE_REPLICATION)
@@ -4154,7 +4153,7 @@ public:
Execute_load_query_log_event(const uchar *buf, uint event_len,
const Format_description_log_event
*description_event);
- ~Execute_load_query_log_event() {}
+ ~Execute_load_query_log_event() = default;
Log_event_type get_type_code() { return EXECUTE_LOAD_QUERY_EVENT; }
bool is_valid() const { return Query_log_event::is_valid() && file_id != 0; }
@@ -4192,7 +4191,7 @@ public:
{}
/* constructor for hopelessly corrupted events */
Unknown_log_event(): Log_event(), what(ENCRYPTED) {}
- ~Unknown_log_event() {}
+ ~Unknown_log_event() = default;
bool print(FILE* file, PRINT_EVENT_INFO* print_event_info);
Log_event_type get_type_code() { return UNKNOWN_EVENT;}
bool is_valid() const { return 1; }
diff --git a/sql/mdl.cc b/sql/mdl.cc
index c426dbe143b..6cb27efba12 100644
--- a/sql/mdl.cc
+++ b/sql/mdl.cc
@@ -415,7 +415,7 @@ public:
virtual bool needs_notification(const MDL_ticket *ticket) const = 0;
virtual bool conflicting_locks(const MDL_ticket *ticket) const = 0;
virtual bitmap_t hog_lock_types_bitmap() const = 0;
- virtual ~MDL_lock_strategy() {}
+ virtual ~MDL_lock_strategy() = default;
};
@@ -426,7 +426,7 @@ public:
*/
struct MDL_scoped_lock : public MDL_lock_strategy
{
- MDL_scoped_lock() {}
+ MDL_scoped_lock() = default;
virtual const bitmap_t *incompatible_granted_types_bitmap() const
{ return m_granted_incompatible; }
virtual const bitmap_t *incompatible_waiting_types_bitmap() const
@@ -463,7 +463,7 @@ public:
*/
struct MDL_object_lock : public MDL_lock_strategy
{
- MDL_object_lock() {}
+ MDL_object_lock() = default;
virtual const bitmap_t *incompatible_granted_types_bitmap() const
{ return m_granted_incompatible; }
virtual const bitmap_t *incompatible_waiting_types_bitmap() const
@@ -507,7 +507,7 @@ public:
struct MDL_backup_lock: public MDL_lock_strategy
{
- MDL_backup_lock() {}
+ MDL_backup_lock() = default;
virtual const bitmap_t *incompatible_granted_types_bitmap() const
{ return m_granted_incompatible; }
virtual const bitmap_t *incompatible_waiting_types_bitmap() const
@@ -1875,13 +1875,11 @@ bool MDL_lock::has_pending_conflicting_lock(enum_mdl_type type)
MDL_wait_for_graph_visitor::~MDL_wait_for_graph_visitor()
-{
-}
+= default;
MDL_wait_for_subgraph::~MDL_wait_for_subgraph()
-{
-}
+= default;
/**
Check if ticket represents metadata lock of "stronger" or equal type
diff --git a/sql/mdl.h b/sql/mdl.h
index 31ac4e81377..998f34ff2bb 100644
--- a/sql/mdl.h
+++ b/sql/mdl.h
@@ -60,7 +60,7 @@ typedef unsigned short mdl_bitmap_t;
class MDL_context_owner
{
public:
- virtual ~MDL_context_owner() {}
+ virtual ~MDL_context_owner() = default;
/**
Enter a condition wait.
@@ -471,7 +471,7 @@ public:
{
mdl_key_init(namespace_arg, db_arg, name_arg);
}
- MDL_key() {} /* To use when part of MDL_request. */
+ MDL_key() = default; /* To use when part of MDL_request. */
/**
Get thread state name to be used in case when we have to
@@ -640,7 +640,7 @@ public:
virtual bool inspect_edge(MDL_context *dest) = 0;
virtual ~MDL_wait_for_graph_visitor();
- MDL_wait_for_graph_visitor() {}
+ MDL_wait_for_graph_visitor() = default;
};
/**
@@ -799,7 +799,7 @@ private:
class MDL_savepoint
{
public:
- MDL_savepoint() {};
+ MDL_savepoint() = default;;
private:
MDL_savepoint(MDL_ticket *stmt_ticket, MDL_ticket *trans_ticket)
diff --git a/sql/multi_range_read.h b/sql/multi_range_read.h
index 37a00e3086f..57cfd21727f 100644
--- a/sql/multi_range_read.h
+++ b/sql/multi_range_read.h
@@ -204,7 +204,7 @@ class Mrr_reader
public:
virtual int get_next(range_id_t *range_info) = 0;
virtual int refill_buffer(bool initial) = 0;
- virtual ~Mrr_reader() {}; /* just to remove compiler warning */
+ virtual ~Mrr_reader() = default; /* just to remove compiler warning */
};
diff --git a/sql/my_apc.h b/sql/my_apc.h
index cc98e36bbe4..2c0a9ade314 100644
--- a/sql/my_apc.h
+++ b/sql/my_apc.h
@@ -92,7 +92,7 @@ public:
public:
/* This function will be called in the target thread */
virtual void call_in_target_thread()= 0;
- virtual ~Apc_call() {}
+ virtual ~Apc_call() = default;
};
/* Make a call in the target thread (see function definition for details) */
diff --git a/sql/my_json_writer.h b/sql/my_json_writer.h
index 7840476b878..87d1a7facf1 100644
--- a/sql/my_json_writer.h
+++ b/sql/my_json_writer.h
@@ -398,12 +398,14 @@ protected:
public:
+#ifdef ENABLED_JSON_WRITER_CONSISTENCY_CHECKS
virtual ~Json_writer_struct()
{
-#ifdef ENABLED_JSON_WRITER_CONSISTENCY_CHECKS
named_items_expectation.pop_back();
-#endif
}
+#else
+ virtual ~Json_writer_struct() = default;
+#endif
bool trace_started() const
{
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 4dc708c9383..bae568655c2 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -1247,8 +1247,7 @@ class Buffered_log : public Sql_alloc
public:
Buffered_log(enum loglevel level, const char *message);
- ~Buffered_log()
- {}
+ ~Buffered_log() = default;
void print(void);
@@ -1308,11 +1307,9 @@ void Buffered_log::print()
class Buffered_logs
{
public:
- Buffered_logs()
- {}
+ Buffered_logs() = default;
- ~Buffered_logs()
- {}
+ ~Buffered_logs() = default;
void init();
void cleanup();
@@ -2717,11 +2714,9 @@ void close_connection(THD *thd, uint sql_errno)
thd->protocol->net_send_error(thd, sql_errno, ER_DEFAULT(sql_errno), NULL);
thd->print_aborted_warning(lvl, ER_DEFAULT(sql_errno));
}
- else
- thd->print_aborted_warning(lvl, (thd->main_security_ctx.user ?
- "This connection closed normally" :
- "This connection closed normally without"
- " authentication"));
+ else if (!thd->main_security_ctx.user)
+ thd->print_aborted_warning(lvl, "This connection closed normally without"
+ " authentication");
thd->disconnect();
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 05443ea78bf..86bd5663623 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -2230,7 +2230,7 @@ public:
{ return (void*) alloc_root(mem_root, (uint) size); }
static void operator delete(void *ptr,size_t size) { TRASH_FREE(ptr, size); }
static void operator delete(void *ptr, MEM_ROOT *mem_root) { /* Never called */ }
- virtual ~TABLE_READ_PLAN() {} /* Remove gcc warning */
+ virtual ~TABLE_READ_PLAN() = default; /* Remove gcc warning */
/**
Add basic info for this TABLE_READ_PLAN to the optimizer trace.
@@ -2265,7 +2265,7 @@ public:
TRP_RANGE(SEL_ARG *key_arg, uint idx_arg, uint mrr_flags_arg)
: key(key_arg), key_idx(idx_arg), mrr_flags(mrr_flags_arg)
{}
- virtual ~TRP_RANGE() {} /* Remove gcc warning */
+ virtual ~TRP_RANGE() = default; /* Remove gcc warning */
QUICK_SELECT_I *make_quick(PARAM *param, bool retrieve_full_rows,
MEM_ROOT *parent_alloc)
@@ -2312,8 +2312,8 @@ void TRP_RANGE::trace_basic_info(PARAM *param,
class TRP_ROR_INTERSECT : public TABLE_READ_PLAN
{
public:
- TRP_ROR_INTERSECT() {} /* Remove gcc warning */
- virtual ~TRP_ROR_INTERSECT() {} /* Remove gcc warning */
+ TRP_ROR_INTERSECT() = default; /* Remove gcc warning */
+ virtual ~TRP_ROR_INTERSECT() = default; /* Remove gcc warning */
QUICK_SELECT_I *make_quick(PARAM *param, bool retrieve_full_rows,
MEM_ROOT *parent_alloc);
@@ -2338,8 +2338,8 @@ public:
class TRP_ROR_UNION : public TABLE_READ_PLAN
{
public:
- TRP_ROR_UNION() {} /* Remove gcc warning */
- virtual ~TRP_ROR_UNION() {} /* Remove gcc warning */
+ TRP_ROR_UNION() = default; /* Remove gcc warning */
+ virtual ~TRP_ROR_UNION() = default; /* Remove gcc warning */
QUICK_SELECT_I *make_quick(PARAM *param, bool retrieve_full_rows,
MEM_ROOT *parent_alloc);
TABLE_READ_PLAN **first_ror; /* array of ptrs to plans for merged scans */
@@ -2371,8 +2371,8 @@ void TRP_ROR_UNION::trace_basic_info(PARAM *param,
class TRP_INDEX_INTERSECT : public TABLE_READ_PLAN
{
public:
- TRP_INDEX_INTERSECT() {} /* Remove gcc warning */
- virtual ~TRP_INDEX_INTERSECT() {} /* Remove gcc warning */
+ TRP_INDEX_INTERSECT() = default; /* Remove gcc warning */
+ virtual ~TRP_INDEX_INTERSECT() = default; /* Remove gcc warning */
QUICK_SELECT_I *make_quick(PARAM *param, bool retrieve_full_rows,
MEM_ROOT *parent_alloc);
TRP_RANGE **range_scans; /* array of ptrs to plans of intersected scans */
@@ -2408,8 +2408,8 @@ void TRP_INDEX_INTERSECT::trace_basic_info(PARAM *param,
class TRP_INDEX_MERGE : public TABLE_READ_PLAN
{
public:
- TRP_INDEX_MERGE() {} /* Remove gcc warning */
- virtual ~TRP_INDEX_MERGE() {} /* Remove gcc warning */
+ TRP_INDEX_MERGE() = default; /* Remove gcc warning */
+ virtual ~TRP_INDEX_MERGE() = default; /* Remove gcc warning */
QUICK_SELECT_I *make_quick(PARAM *param, bool retrieve_full_rows,
MEM_ROOT *parent_alloc);
TRP_RANGE **range_scans; /* array of ptrs to plans of merged scans */
@@ -2477,7 +2477,7 @@ public:
if (key_infix_len)
memcpy(this->key_infix, key_infix_arg, key_infix_len);
}
- virtual ~TRP_GROUP_MIN_MAX() {} /* Remove gcc warning */
+ virtual ~TRP_GROUP_MIN_MAX() = default; /* Remove gcc warning */
QUICK_SELECT_I *make_quick(PARAM *param, bool retrieve_full_rows,
MEM_ROOT *parent_alloc);
@@ -9721,7 +9721,6 @@ tree_or(RANGE_OPT_PARAM *param,SEL_TREE *tree1,SEL_TREE *tree2)
DBUG_RETURN(tree2);
SEL_TREE *result= NULL;
- key_map result_keys;
key_map ored_keys;
SEL_TREE *rtree[2]= {NULL,NULL};
SEL_IMERGE *imerge[2]= {NULL, NULL};
diff --git a/sql/opt_range.h b/sql/opt_range.h
index 7a067b49295..a505cd09ea4 100644
--- a/sql/opt_range.h
+++ b/sql/opt_range.h
@@ -353,7 +353,7 @@ public:
/* See RANGE_OPT_PARAM::alloced_sel_args */
enum { MAX_SEL_ARGS = 16000 };
- SEL_ARG() {}
+ SEL_ARG() = default;
SEL_ARG(SEL_ARG &);
SEL_ARG(Field *, const uchar *, const uchar *);
SEL_ARG(Field *field, uint8 part,
@@ -1110,7 +1110,7 @@ public:
uint used_key_parts;
QUICK_SELECT_I();
- virtual ~QUICK_SELECT_I(){};
+ virtual ~QUICK_SELECT_I() = default;;
/*
Do post-constructor initialization.
diff --git a/sql/opt_table_elimination.cc b/sql/opt_table_elimination.cc
index 8c4720bdec4..03ee1a2ad62 100644
--- a/sql/opt_table_elimination.cc
+++ b/sql/opt_table_elimination.cc
@@ -218,7 +218,7 @@ class Dep_value : public Sql_alloc
{
public:
Dep_value(): bound(FALSE) {}
- virtual ~Dep_value(){} /* purecov: inspected */ /* stop compiler warnings */
+ virtual ~Dep_value() = default; /* purecov: inspected */
bool is_bound() { return bound; }
void make_bound() { bound= TRUE; }
@@ -342,7 +342,7 @@ const size_t Dep_value::iterator_size=
class Dep_module : public Sql_alloc
{
public:
- virtual ~Dep_module(){} /* purecov: inspected */ /* stop compiler warnings */
+ virtual ~Dep_module() = default; /* purecov: inspected */
/* Mark as bound. Currently is non-virtual and does nothing */
void make_bound() {};
diff --git a/sql/parse_file.h b/sql/parse_file.h
index cd26ffec91a..0589d628bfc 100644
--- a/sql/parse_file.h
+++ b/sql/parse_file.h
@@ -55,8 +55,8 @@ struct File_option
class Unknown_key_hook
{
public:
- Unknown_key_hook() {} /* Remove gcc warning */
- virtual ~Unknown_key_hook() {} /* Remove gcc warning */
+ Unknown_key_hook() = default; /* Remove gcc warning */
+ virtual ~Unknown_key_hook() = default; /* Remove gcc warning */
virtual bool process_unknown_string(const char *&unknown_key, uchar* base,
MEM_ROOT *mem_root, const char *end)= 0;
};
@@ -67,7 +67,7 @@ public:
class File_parser_dummy_hook: public Unknown_key_hook
{
public:
- File_parser_dummy_hook() {} /* Remove gcc warning */
+ File_parser_dummy_hook() = default; /* Remove gcc warning */
virtual bool process_unknown_string(const char *&unknown_key, uchar* base,
MEM_ROOT *mem_root, const char *end);
};
diff --git a/sql/partition_element.h b/sql/partition_element.h
index 756cab2b7f2..1abaa315218 100644
--- a/sql/partition_element.h
+++ b/sql/partition_element.h
@@ -164,7 +164,7 @@ public:
option_list(part_elem->option_list),
option_struct(part_elem->option_struct)
{}
- ~partition_element() {}
+ ~partition_element() = default;
part_column_list_val& get_col_val(uint idx)
{
diff --git a/sql/partition_info.h b/sql/partition_info.h
index 971ba92d776..833a231e6ce 100644
--- a/sql/partition_info.h
+++ b/sql/partition_info.h
@@ -343,7 +343,7 @@ public:
part_field_list.empty();
subpart_field_list.empty();
}
- ~partition_info() {}
+ ~partition_info() = default;
partition_info *get_clone(THD *thd, bool empty_data_and_index_file= FALSE);
bool set_named_partition_bitmap(const char *part_name, size_t length);
diff --git a/sql/protocol.h b/sql/protocol.h
index f095ad68a34..683bbd69583 100644
--- a/sql/protocol.h
+++ b/sql/protocol.h
@@ -90,7 +90,7 @@ protected:
public:
THD *thd;
Protocol(THD *thd_arg) { init(thd_arg); }
- virtual ~Protocol() {}
+ virtual ~Protocol() = default;
void init(THD* thd_arg);
enum { SEND_NUM_ROWS= 1, SEND_EOF= 2, SEND_FORCE_COLUMN_INFO= 4 };
diff --git a/sql/rowid_filter.h b/sql/rowid_filter.h
index cb1615c5925..02962f3e677 100644
--- a/sql/rowid_filter.h
+++ b/sql/rowid_filter.h
@@ -195,7 +195,7 @@ public:
/* True if the container does not contain any element */
virtual bool is_empty() = 0;
- virtual ~Rowid_filter_container() {}
+ virtual ~Rowid_filter_container() = default;
};
@@ -232,7 +232,7 @@ public:
*/
virtual bool check(char *elem) = 0;
- virtual ~Rowid_filter() {}
+ virtual ~Rowid_filter() = default;
bool is_empty() { return container->is_empty(); }
diff --git a/sql/rpl_injector.cc b/sql/rpl_injector.cc
index 2319f69d67c..3080d92bf63 100644
--- a/sql/rpl_injector.cc
+++ b/sql/rpl_injector.cc
@@ -131,9 +131,7 @@ injector::transaction::binlog_pos injector::transaction::start_pos() const
*/
/* This constructor is called below */
-inline injector::injector()
-{
-}
+inline injector::injector() = default;
static injector *s_injector= 0;
injector *injector::instance()
diff --git a/sql/rpl_injector.h b/sql/rpl_injector.h
index 28359d9555a..6a1c724809a 100644
--- a/sql/rpl_injector.h
+++ b/sql/rpl_injector.h
@@ -307,7 +307,7 @@ public:
private:
explicit injector();
- ~injector() { } /* Nothing needs to be done */
+ ~injector() = default; /* Nothing needs to be done */
injector(injector const&); /* You're not allowed to copy injector
instances.
*/
diff --git a/sql/semisync_master.h b/sql/semisync_master.h
index 04fc0e5ce50..5451ad512c6 100644
--- a/sql/semisync_master.h
+++ b/sql/semisync_master.h
@@ -454,7 +454,7 @@ class Repl_semi_sync_master
public:
Repl_semi_sync_master();
- ~Repl_semi_sync_master() {}
+ ~Repl_semi_sync_master() = default;
void cleanup();
diff --git a/sql/semisync_master_ack_receiver.h b/sql/semisync_master_ack_receiver.h
index b75cb7b76cb..d869bd2e6d4 100644
--- a/sql/semisync_master_ack_receiver.h
+++ b/sql/semisync_master_ack_receiver.h
@@ -50,7 +50,7 @@ class Ack_receiver : public Repl_semi_sync_base
{
public:
Ack_receiver();
- ~Ack_receiver() {}
+ ~Ack_receiver() = default;
void cleanup();
/**
Notify ack receiver to receive acks on the dump session.
diff --git a/sql/semisync_slave.h b/sql/semisync_slave.h
index f0b8eceeebf..a8229245ab1 100644
--- a/sql/semisync_slave.h
+++ b/sql/semisync_slave.h
@@ -34,7 +34,7 @@ class Repl_semi_sync_slave
:public Repl_semi_sync_base {
public:
Repl_semi_sync_slave() :m_slave_enabled(false) {}
- ~Repl_semi_sync_slave() {}
+ ~Repl_semi_sync_slave() = default;
void set_trace_level(unsigned long trace_level) {
m_trace_level = trace_level;
diff --git a/sql/session_tracker.h b/sql/session_tracker.h
index c78778ac73c..5715b5837b5 100644
--- a/sql/session_tracker.h
+++ b/sql/session_tracker.h
@@ -78,7 +78,7 @@ private:
bool m_changed;
public:
- virtual ~State_tracker() {}
+ virtual ~State_tracker() = default;
/** Getters */
bool is_enabled() const
diff --git a/sql/set_var.h b/sql/set_var.h
index 611f16e8bbb..ce1d01b9bd2 100644
--- a/sql/set_var.h
+++ b/sql/set_var.h
@@ -99,7 +99,7 @@ public:
on_check_function on_check_func, on_update_function on_update_func,
const char *substitute);
- virtual ~sys_var() {}
+ virtual ~sys_var() = default;
/**
All the cleanup procedures should be performed here
@@ -278,8 +278,8 @@ protected:
class set_var_base :public Sql_alloc
{
public:
- set_var_base() {}
- virtual ~set_var_base() {}
+ set_var_base() = default;
+ virtual ~set_var_base() = default;
virtual int check(THD *thd)=0; /* To check privileges etc. */
virtual int update(THD *thd)=0; /* To set the value */
virtual int light_check(THD *thd) { return check(thd); } /* for PS */
diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt
index ec06427ecae..e41cf8b6eb9 100644
--- a/sql/share/errmsg-utf8.txt
+++ b/sql/share/errmsg-utf8.txt
@@ -8941,12 +8941,12 @@ ER_INVALID_DEFAULT_VALUE_FOR_FIELD 22007
hindi "गलत डिफ़ॉल्ट मान '%-.128T' कॉलम '%.192s' के लिए"
spa "Valor por defecto incorrecto '%-.128T' para columna '%.192s'"
ER_KILL_QUERY_DENIED_ERROR
- chi "你不是查询%lu的所有者"
- eng "You are not owner of query %lu"
- ger "Sie sind nicht Eigentümer von Abfrage %lu"
- hindi "आप क्वेरी %lu के OWNER नहीं हैं"
- rus "Вы не являетесь владельцем запроса %lu"
- spa "No eres el propietario de la consulta (query) %lu"
+ chi "你不是查询%lld的所有者"
+ eng "You are not owner of query %lld"
+ ger "Sie sind nicht Eigentümer von Abfrage %lld"
+ hindi "आप क्वेरी %lld के OWNER नहीं हैं"
+ rus "Вы не являетесь владельцем запроса %lld"
+ spa "No eres el propietario de la consulta (query) %lld"
ER_NO_EIS_FOR_FIELD
chi "没有收集无关的统计信息列'%s'"
eng "Engine-independent statistics are not collected for column '%s'"
diff --git a/sql/slave.cc b/sql/slave.cc
index 3ab311c4d71..403b33d13cf 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -4262,6 +4262,21 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli,
int exec_res;
Log_event_type typ= ev->get_type_code();
+ DBUG_EXECUTE_IF(
+ "pause_sql_thread_on_next_event",
+ {
+ /*
+ Temporarily unlock data_lock so we can check-in with the IO thread
+ */
+ mysql_mutex_unlock(&rli->data_lock);
+ DBUG_ASSERT(!debug_sync_set_action(
+ thd,
+ STRING_WITH_LEN(
+ "now SIGNAL paused_on_event WAIT_FOR sql_thread_continue")));
+ DBUG_SET("-d,pause_sql_thread_on_next_event");
+ mysql_mutex_lock(&rli->data_lock);
+ });
+
/*
Even if we don't execute this event, we keep the master timestamp,
so that seconds behind master shows correct delta (there are events
diff --git a/sql/sp.h b/sql/sp.h
index 0b79877a3e1..c73ff2877b0 100644
--- a/sql/sp.h
+++ b/sql/sp.h
@@ -119,7 +119,7 @@ public: // TODO: make it private or protected
const;
public:
- virtual ~Sp_handler() {}
+ virtual ~Sp_handler() = default;
static const Sp_handler *handler(enum enum_sql_command cmd);
static const Sp_handler *handler(enum_sp_type type);
static const Sp_handler *handler(MDL_key::enum_mdl_namespace ns);
diff --git a/sql/sp_head.h b/sql/sp_head.h
index 97ea4e7b89a..5b4aa36e518 100644
--- a/sql/sp_head.h
+++ b/sql/sp_head.h
@@ -124,8 +124,7 @@ public:
/** Create temporary sp_name object from MDL key. Store in qname_buff */
sp_name(const MDL_key *key, char *qname_buff);
- ~sp_name()
- {}
+ ~sp_name() = default;
};
@@ -1316,8 +1315,7 @@ public:
m_query.length= 0;
}
- virtual ~sp_instr_stmt()
- {};
+ virtual ~sp_instr_stmt() = default;
virtual int execute(THD *thd, uint *nextp);
@@ -1352,8 +1350,7 @@ public:
m_lex_keeper(lex, lex_resp)
{}
- virtual ~sp_instr_set()
- {}
+ virtual ~sp_instr_set() = default;
virtual int execute(THD *thd, uint *nextp);
@@ -1396,8 +1393,7 @@ public:
m_field_offset(field_offset)
{}
- virtual ~sp_instr_set_row_field()
- {}
+ virtual ~sp_instr_set_row_field() = default;
virtual int exec_core(THD *thd, uint *nextp);
@@ -1439,8 +1435,7 @@ public:
m_field_name(field_name)
{}
- virtual ~sp_instr_set_row_field_by_name()
- {}
+ virtual ~sp_instr_set_row_field_by_name() = default;
virtual int exec_core(THD *thd, uint *nextp);
@@ -1466,8 +1461,7 @@ public:
value(val), m_lex_keeper(lex, TRUE)
{}
- virtual ~sp_instr_set_trigger_field()
- {}
+ virtual ~sp_instr_set_trigger_field() = default;
virtual int execute(THD *thd, uint *nextp);
@@ -1510,8 +1504,7 @@ public:
m_dest(dest), m_cont_dest(0), m_optdest(0), m_cont_optdest(0)
{}
- virtual ~sp_instr_opt_meta()
- {}
+ virtual ~sp_instr_opt_meta() = default;
virtual void set_destination(uint old_dest, uint new_dest)
= 0;
@@ -1540,8 +1533,7 @@ public:
: sp_instr_opt_meta(ip, ctx, dest)
{}
- virtual ~sp_instr_jump()
- {}
+ virtual ~sp_instr_jump() = default;
virtual int execute(THD *thd, uint *nextp);
@@ -1592,8 +1584,7 @@ public:
m_lex_keeper(lex, TRUE)
{}
- virtual ~sp_instr_jump_if_not()
- {}
+ virtual ~sp_instr_jump_if_not() = default;
virtual int execute(THD *thd, uint *nextp);
@@ -1640,8 +1631,7 @@ public:
: sp_instr(ip, ctx)
{}
- virtual ~sp_instr_preturn()
- {}
+ virtual ~sp_instr_preturn() = default;
virtual int execute(THD *thd, uint *nextp);
@@ -1672,8 +1662,7 @@ public:
m_lex_keeper(lex, TRUE)
{}
- virtual ~sp_instr_freturn()
- {}
+ virtual ~sp_instr_freturn() = default;
virtual int execute(THD *thd, uint *nextp);
@@ -1778,8 +1767,7 @@ public:
: sp_instr(ip, ctx), m_count(count)
{}
- virtual ~sp_instr_hpop()
- {}
+ virtual ~sp_instr_hpop() = default;
void update_count(uint count)
{
@@ -1812,8 +1800,7 @@ public:
m_frame(ctx->current_var_count())
{}
- virtual ~sp_instr_hreturn()
- {}
+ virtual ~sp_instr_hreturn() = default;
virtual int execute(THD *thd, uint *nextp);
@@ -1849,8 +1836,7 @@ public:
: sp_instr(ip, ctx), m_lex_keeper(lex, TRUE), m_cursor(offset)
{}
- virtual ~sp_instr_cpush()
- {}
+ virtual ~sp_instr_cpush() = default;
int execute(THD *thd, uint *nextp) override;
@@ -1885,8 +1871,7 @@ public:
: sp_instr(ip, ctx), m_count(count)
{}
- virtual ~sp_instr_cpop()
- {}
+ virtual ~sp_instr_cpop() = default;
void update_count(uint count)
{
@@ -1918,8 +1903,7 @@ public:
: sp_instr(ip, ctx), m_cursor(c)
{}
- virtual ~sp_instr_copen()
- {}
+ virtual ~sp_instr_copen() = default;
virtual int execute(THD *thd, uint *nextp);
@@ -1956,8 +1940,7 @@ public:
m_cursor(coffs),
m_var(voffs)
{}
- virtual ~sp_instr_cursor_copy_struct()
- {}
+ virtual ~sp_instr_cursor_copy_struct() = default;
virtual int execute(THD *thd, uint *nextp);
virtual int exec_core(THD *thd, uint *nextp);
virtual void print(String *str);
@@ -1979,8 +1962,7 @@ public:
: sp_instr(ip, ctx), m_cursor(c)
{}
- virtual ~sp_instr_cclose()
- {}
+ virtual ~sp_instr_cclose() = default;
virtual int execute(THD *thd, uint *nextp);
@@ -2009,8 +1991,7 @@ public:
m_varlist.empty();
}
- virtual ~sp_instr_cfetch()
- {}
+ virtual ~sp_instr_cfetch() = default;
virtual int execute(THD *thd, uint *nextp);
@@ -2048,8 +2029,7 @@ public:
sp_instr_agg_cfetch(uint ip, sp_pcontext *ctx)
: sp_instr(ip, ctx){}
- virtual ~sp_instr_agg_cfetch()
- {}
+ virtual ~sp_instr_agg_cfetch() = default;
virtual int execute(THD *thd, uint *nextp);
@@ -2074,8 +2054,7 @@ public:
: sp_instr(ip, ctx), m_errcode(errcode)
{}
- virtual ~sp_instr_error()
- {}
+ virtual ~sp_instr_error() = default;
virtual int execute(THD *thd, uint *nextp);
@@ -2108,8 +2087,7 @@ public:
m_lex_keeper(lex, TRUE)
{}
- virtual ~sp_instr_set_case_expr()
- {}
+ virtual ~sp_instr_set_case_expr() = default;
virtual int execute(THD *thd, uint *nextp);
diff --git a/sql/spatial.h b/sql/spatial.h
index 8974511adf9..d85bdc86af4 100644
--- a/sql/spatial.h
+++ b/sql/spatial.h
@@ -214,8 +214,8 @@ struct Geometry_buffer;
class Geometry
{
public:
- Geometry() {} /* Remove gcc warning */
- virtual ~Geometry() {} /* Remove gcc warning */
+ Geometry() = default; /* Remove gcc warning */
+ virtual ~Geometry() = default; /* Remove gcc warning */
static void *operator new(size_t size, void *buffer)
{
return buffer;
@@ -395,8 +395,8 @@ protected:
class Gis_point: public Geometry
{
public:
- Gis_point() {} /* Remove gcc warning */
- virtual ~Gis_point() {} /* Remove gcc warning */
+ Gis_point() = default; /* Remove gcc warning */
+ virtual ~Gis_point() = default; /* Remove gcc warning */
uint32 get_data_size() const;
bool init_from_wkt(Gis_read_stream *trs, String *wkb);
uint init_from_wkb(const char *wkb, uint len, wkbByteOrder bo, String *res);
@@ -465,8 +465,8 @@ public:
class Gis_line_string: public Geometry
{
public:
- Gis_line_string() {} /* Remove gcc warning */
- virtual ~Gis_line_string() {} /* Remove gcc warning */
+ Gis_line_string() = default; /* Remove gcc warning */
+ virtual ~Gis_line_string() = default; /* Remove gcc warning */
uint32 get_data_size() const;
bool init_from_wkt(Gis_read_stream *trs, String *wkb);
uint init_from_wkb(const char *wkb, uint len, wkbByteOrder bo, String *res);
@@ -498,8 +498,8 @@ public:
class Gis_polygon: public Geometry
{
public:
- Gis_polygon() {} /* Remove gcc warning */
- virtual ~Gis_polygon() {} /* Remove gcc warning */
+ Gis_polygon() = default; /* Remove gcc warning */
+ virtual ~Gis_polygon() = default; /* Remove gcc warning */
uint32 get_data_size() const;
bool init_from_wkt(Gis_read_stream *trs, String *wkb);
uint init_from_wkb(const char *wkb, uint len, wkbByteOrder bo, String *res);
@@ -535,8 +535,8 @@ class Gis_multi_point: public Geometry
(uint32) (UINT_MAX32 - WKB_HEADER_SIZE - 4 /* n_points */) /
(WKB_HEADER_SIZE + POINT_DATA_SIZE);
public:
- Gis_multi_point() {} /* Remove gcc warning */
- virtual ~Gis_multi_point() {} /* Remove gcc warning */
+ Gis_multi_point() = default; /* Remove gcc warning */
+ virtual ~Gis_multi_point() = default; /* Remove gcc warning */
uint32 get_data_size() const;
bool init_from_wkt(Gis_read_stream *trs, String *wkb);
uint init_from_wkb(const char *wkb, uint len, wkbByteOrder bo, String *res);
@@ -566,8 +566,8 @@ public:
class Gis_multi_line_string: public Geometry
{
public:
- Gis_multi_line_string() {} /* Remove gcc warning */
- virtual ~Gis_multi_line_string() {} /* Remove gcc warning */
+ Gis_multi_line_string() = default; /* Remove gcc warning */
+ virtual ~Gis_multi_line_string() = default; /* Remove gcc warning */
uint32 get_data_size() const;
bool init_from_wkt(Gis_read_stream *trs, String *wkb);
uint init_from_wkb(const char *wkb, uint len, wkbByteOrder bo, String *res);
@@ -597,8 +597,8 @@ public:
class Gis_multi_polygon: public Geometry
{
public:
- Gis_multi_polygon() {} /* Remove gcc warning */
- virtual ~Gis_multi_polygon() {} /* Remove gcc warning */
+ Gis_multi_polygon() = default; /* Remove gcc warning */
+ virtual ~Gis_multi_polygon() = default; /* Remove gcc warning */
uint32 get_data_size() const;
bool init_from_wkt(Gis_read_stream *trs, String *wkb);
uint init_from_wkb(const char *wkb, uint len, wkbByteOrder bo, String *res);
@@ -628,8 +628,8 @@ public:
class Gis_geometry_collection: public Geometry
{
public:
- Gis_geometry_collection() {} /* Remove gcc warning */
- virtual ~Gis_geometry_collection() {} /* Remove gcc warning */
+ Gis_geometry_collection() = default; /* Remove gcc warning */
+ virtual ~Gis_geometry_collection() = default; /* Remove gcc warning */
uint32 get_data_size() const;
bool init_from_wkt(Gis_read_stream *trs, String *wkb);
uint init_from_wkb(const char *wkb, uint len, wkbByteOrder bo, String *res);
diff --git a/sql/sql_acl.cc b/sql/sql_acl.cc
index 40121e4e9ac..d225b018488 100644
--- a/sql/sql_acl.cc
+++ b/sql/sql_acl.cc
@@ -200,7 +200,7 @@ class ACL_USER :public ACL_USER_BASE,
{
public:
- ACL_USER() { }
+ ACL_USER() = default;
ACL_USER(THD *thd, const LEX_USER &combo,
const Account_options &options,
const privilege_t privileges);
@@ -338,7 +338,7 @@ class ACL_PROXY_USER :public ACL_ACCESS
MYSQL_PROXIES_PRIV_GRANTOR,
MYSQL_PROXIES_PRIV_TIMESTAMP } proxy_table_fields;
public:
- ACL_PROXY_USER () {};
+ ACL_PROXY_USER () = default;
void init(const char *host_arg, const char *user_arg,
const char *proxied_host_arg, const char *proxied_user_arg,
@@ -929,7 +929,7 @@ class User_table: public Grant_table_base
virtual longlong get_password_lifetime () const = 0;
virtual int set_password_lifetime (longlong x) const = 0;
- virtual ~User_table() {}
+ virtual ~User_table() = default;
private:
friend class Grant_tables;
virtual int setup_sysvars() const = 0;
@@ -1278,7 +1278,7 @@ class User_table_tabular: public User_table
return 1;
}
- virtual ~User_table_tabular() {}
+ virtual ~User_table_tabular() = default;
private:
friend class Grant_tables;
@@ -1689,7 +1689,7 @@ class User_table_json: public User_table
int set_password_expired (bool x) const
{ return x ? set_password_last_changed(0) : 0; }
- ~User_table_json() {}
+ ~User_table_json() = default;
private:
friend class Grant_tables;
static const uint JSON_SIZE=1024;
@@ -5326,7 +5326,7 @@ public:
GRANT_NAME(const char *h, const char *d,const char *u,
const char *t, privilege_t p, bool is_routine);
GRANT_NAME (TABLE *form, bool is_routine);
- virtual ~GRANT_NAME() {};
+ virtual ~GRANT_NAME() = default;
virtual bool ok() { return privs != NO_ACL; }
void set_user_details(const char *h, const char *d,
const char *u, const char *t,
@@ -11617,8 +11617,7 @@ public:
: is_grave(FALSE)
{}
- virtual ~Silence_routine_definer_errors()
- {}
+ virtual ~Silence_routine_definer_errors() = default;
virtual bool handle_condition(THD *thd,
uint sql_errno,
diff --git a/sql/sql_acl.h b/sql/sql_acl.h
index 570da144b46..b4288b05bfb 100644
--- a/sql/sql_acl.h
+++ b/sql/sql_acl.h
@@ -184,11 +184,9 @@ enum ACL_internal_access_result
class ACL_internal_table_access
{
public:
- ACL_internal_table_access()
- {}
+ ACL_internal_table_access() = default;
- virtual ~ACL_internal_table_access()
- {}
+ virtual ~ACL_internal_table_access() = default;
/**
Check access to an internal table.
@@ -223,11 +221,9 @@ public:
class ACL_internal_schema_access
{
public:
- ACL_internal_schema_access()
- {}
+ ACL_internal_schema_access() = default;
- virtual ~ACL_internal_schema_access()
- {}
+ virtual ~ACL_internal_schema_access() = default;
/**
Check access to an internal schema.
diff --git a/sql/sql_admin.h b/sql/sql_admin.h
index 0c7f1c3cee5..1a237d4f616 100644
--- a/sql/sql_admin.h
+++ b/sql/sql_admin.h
@@ -34,11 +34,9 @@ public:
/**
Constructor, used to represent a ANALYZE TABLE statement.
*/
- Sql_cmd_analyze_table()
- {}
+ Sql_cmd_analyze_table() = default;
- ~Sql_cmd_analyze_table()
- {}
+ ~Sql_cmd_analyze_table() = default;
bool execute(THD *thd);
@@ -59,11 +57,9 @@ public:
/**
Constructor, used to represent a CHECK TABLE statement.
*/
- Sql_cmd_check_table()
- {}
+ Sql_cmd_check_table() = default;
- ~Sql_cmd_check_table()
- {}
+ ~Sql_cmd_check_table() = default;
bool execute(THD *thd);
@@ -83,11 +79,9 @@ public:
/**
Constructor, used to represent a OPTIMIZE TABLE statement.
*/
- Sql_cmd_optimize_table()
- {}
+ Sql_cmd_optimize_table() = default;
- ~Sql_cmd_optimize_table()
- {}
+ ~Sql_cmd_optimize_table() = default;
bool execute(THD *thd);
@@ -108,11 +102,9 @@ public:
/**
Constructor, used to represent a REPAIR TABLE statement.
*/
- Sql_cmd_repair_table()
- {}
+ Sql_cmd_repair_table() = default;
- ~Sql_cmd_repair_table()
- {}
+ ~Sql_cmd_repair_table() = default;
bool execute(THD *thd);
diff --git a/sql/sql_alter.h b/sql/sql_alter.h
index bf1edd4c964..99e717d50b2 100644
--- a/sql/sql_alter.h
+++ b/sql/sql_alter.h
@@ -372,11 +372,9 @@ protected:
/**
Constructor.
*/
- Sql_cmd_common_alter_table()
- {}
+ Sql_cmd_common_alter_table() = default;
- virtual ~Sql_cmd_common_alter_table()
- {}
+ virtual ~Sql_cmd_common_alter_table() = default;
virtual enum_sql_command sql_command_code() const
{
@@ -395,11 +393,9 @@ public:
/**
Constructor, used to represent a ALTER TABLE statement.
*/
- Sql_cmd_alter_table()
- {}
+ Sql_cmd_alter_table() = default;
- ~Sql_cmd_alter_table()
- {}
+ ~Sql_cmd_alter_table() = default;
Storage_engine_name *option_storage_engine_name() { return this; }
@@ -421,8 +417,7 @@ public:
:DDL_options(options)
{}
- ~Sql_cmd_alter_sequence()
- {}
+ ~Sql_cmd_alter_sequence() = default;
enum_sql_command sql_command_code() const
{
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index b067d62663d..8db958b25b0 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -1420,7 +1420,7 @@ public:
: m_ot_ctx(ot_ctx_arg), m_is_active(FALSE)
{}
- virtual ~MDL_deadlock_handler() {}
+ virtual ~MDL_deadlock_handler() = default;
virtual bool handle_condition(THD *thd,
uint sql_errno,
diff --git a/sql/sql_base.h b/sql/sql_base.h
index c86a652c33a..bd439166a0f 100644
--- a/sql/sql_base.h
+++ b/sql/sql_base.h
@@ -395,7 +395,7 @@ inline bool setup_fields_with_no_wrap(THD *thd, Ref_ptr_array ref_pointer_array,
class Prelocking_strategy
{
public:
- virtual ~Prelocking_strategy() { }
+ virtual ~Prelocking_strategy() = default;
virtual void reset(THD *thd) { };
virtual bool handle_routine(THD *thd, Query_tables_list *prelocking_ctx,
diff --git a/sql/sql_bitmap.h b/sql/sql_bitmap.h
index 02dc8198c7c..353601eb98a 100644
--- a/sql/sql_bitmap.h
+++ b/sql/sql_bitmap.h
@@ -90,7 +90,7 @@ public:
or to call set_all()/clear_all()/set_prefix()
to initialize bitmap.
*/
- Bitmap() { }
+ Bitmap() = default;
explicit Bitmap(uint prefix)
{
diff --git a/sql/sql_cache.h b/sql/sql_cache.h
index 126693b9964..a02034764a7 100644
--- a/sql/sql_cache.h
+++ b/sql/sql_cache.h
@@ -91,7 +91,7 @@ typedef my_bool (*qc_engine_callback)(THD *thd, const char *table_key,
*/
struct Query_cache_block_table
{
- Query_cache_block_table() {} /* Remove gcc warning */
+ Query_cache_block_table() = default; /* Remove gcc warning */
/**
This node holds a position in a static table list belonging
@@ -122,7 +122,7 @@ struct Query_cache_block_table
struct Query_cache_block
{
- Query_cache_block() {} /* Remove gcc warning */
+ Query_cache_block() = default; /* Remove gcc warning */
enum block_type {FREE, QUERY, RESULT, RES_CONT, RES_BEG,
RES_INCOMPLETE, TABLE, INCOMPLETE};
@@ -161,7 +161,7 @@ struct Query_cache_query
uint8 ready;
ulonglong hit_count;
- Query_cache_query() {} /* Remove gcc warning */
+ Query_cache_query() = default; /* Remove gcc warning */
inline void init_n_lock();
void unlock_n_destroy();
inline ulonglong found_rows() { return limit_found_rows; }
@@ -197,7 +197,7 @@ struct Query_cache_query
struct Query_cache_table
{
- Query_cache_table() {} /* Remove gcc warning */
+ Query_cache_table() = default; /* Remove gcc warning */
char *tbl;
uint32 key_len;
uint8 suffix_len; /* For partitioned tables */
@@ -240,7 +240,7 @@ struct Query_cache_table
struct Query_cache_result
{
- Query_cache_result() {} /* Remove gcc warning */
+ Query_cache_result() = default; /* Remove gcc warning */
Query_cache_block *query;
inline uchar* data()
@@ -266,7 +266,7 @@ extern "C" void query_cache_invalidate_by_MyISAM_filename(const char* filename);
struct Query_cache_memory_bin
{
- Query_cache_memory_bin() {} /* Remove gcc warning */
+ Query_cache_memory_bin() = default; /* Remove gcc warning */
#ifndef DBUG_OFF
size_t size;
#endif
@@ -285,7 +285,7 @@ struct Query_cache_memory_bin
struct Query_cache_memory_bin_step
{
- Query_cache_memory_bin_step() {} /* Remove gcc warning */
+ Query_cache_memory_bin_step() = default; /* Remove gcc warning */
size_t size;
size_t increment;
size_t idx;
diff --git a/sql/sql_class.cc b/sql/sql_class.cc
index e2dbacc69ee..014ab117706 100644
--- a/sql/sql_class.cc
+++ b/sql/sql_class.cc
@@ -4035,9 +4035,7 @@ void THD::restore_active_arena(Query_arena *set, Query_arena *backup)
DBUG_VOID_RETURN;
}
-Statement::~Statement()
-{
-}
+Statement::~Statement() = default;
C_MODE_START
diff --git a/sql/sql_class.h b/sql/sql_class.h
index 65a381d3fc4..d1b1fb439d0 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -476,7 +476,7 @@ public:
invisible(false), without_overlaps(false)
{}
Key(const Key &rhs, MEM_ROOT *mem_root);
- virtual ~Key() {}
+ virtual ~Key() = default;
/* Equality comparison of keys (ignoring name) */
friend bool foreign_key_prefix(Key *a, Key *b);
/**
@@ -1227,7 +1227,7 @@ public:
Query_arena() { INIT_ARENA_DBUG_INFO; }
virtual Type type() const;
- virtual ~Query_arena() {};
+ virtual ~Query_arena() = default;
inline bool is_stmt_prepare() const { return state == STMT_INITIALIZED; }
inline bool is_stmt_prepare_or_first_sp_execute() const
@@ -1278,7 +1278,7 @@ public:
Query_arena_memroot() : Query_arena()
{}
- virtual ~Query_arena_memroot() {}
+ virtual ~Query_arena_memroot() = default;
};
@@ -1428,7 +1428,7 @@ public:
my_bool query_cache_is_applicable;
/* This constructor is called for backup statements */
- Statement() {}
+ Statement() = default;
Statement(LEX *lex_arg, MEM_ROOT *mem_root_arg,
enum enum_state state_arg, ulong id_arg);
@@ -1940,7 +1940,7 @@ protected:
m_prev_internal_handler(NULL)
{}
- virtual ~Internal_error_handler() {}
+ virtual ~Internal_error_handler() = default;
public:
/**
@@ -1998,7 +1998,7 @@ public:
/* Ignore error */
return TRUE;
}
- Dummy_error_handler() {} /* Remove gcc warning */
+ Dummy_error_handler() = default; /* Remove gcc warning */
};
@@ -2035,7 +2035,7 @@ public:
class Drop_table_error_handler : public Internal_error_handler
{
public:
- Drop_table_error_handler() {}
+ Drop_table_error_handler() = default;
public:
bool handle_condition(THD *thd,
@@ -2076,7 +2076,7 @@ private:
class Turn_errors_to_warnings_handler : public Internal_error_handler
{
public:
- Turn_errors_to_warnings_handler() {}
+ Turn_errors_to_warnings_handler() = default;
bool handle_condition(THD *thd,
uint sql_errno,
const char* sqlstate,
@@ -5747,7 +5747,7 @@ public:
example for a duplicate row entry written to a temp table.
*/
virtual int send_data(List<Item> &items)=0;
- virtual ~select_result_sink() {};
+ virtual ~select_result_sink() = default;
void reset(THD *thd_arg) { thd= thd_arg; }
};
@@ -5779,7 +5779,7 @@ public:
ha_rows est_records; /* estimated number of records in the result */
select_result(THD *thd_arg): select_result_sink(thd_arg), est_records(0) {}
void set_unit(SELECT_LEX_UNIT *unit_arg) { unit= unit_arg; }
- virtual ~select_result() {};
+ virtual ~select_result() = default;
/**
Change wrapped select_result.
@@ -7027,7 +7027,7 @@ class user_var_entry
{
CHARSET_INFO *m_charset;
public:
- user_var_entry() {} /* Remove gcc warning */
+ user_var_entry() = default; /* Remove gcc warning */
LEX_CSTRING name;
char *value;
size_t length;
@@ -7148,7 +7148,7 @@ public:
enum type { SESSION_VAR, LOCAL_VAR, PARAM_VAR };
type scope;
my_var(const LEX_CSTRING *j, enum type s) : name(*j), scope(s) { }
- virtual ~my_var() {}
+ virtual ~my_var() = default;
virtual bool set(THD *thd, Item *val) = 0;
virtual my_var_sp *get_my_var_sp() { return NULL; }
};
@@ -7169,7 +7169,7 @@ public:
: my_var(j, LOCAL_VAR),
m_rcontext_handler(rcontext_handler),
m_type_handler(type_handler), offset(o), sp(s) { }
- ~my_var_sp() { }
+ ~my_var_sp() = default;
bool set(THD *thd, Item *val);
my_var_sp *get_my_var_sp() { return this; }
const Type_handler *type_handler() const
@@ -7199,7 +7199,7 @@ class my_var_user: public my_var {
public:
my_var_user(const LEX_CSTRING *j)
: my_var(j, SESSION_VAR) { }
- ~my_var_user() { }
+ ~my_var_user() = default;
bool set(THD *thd, Item *val);
};
@@ -7212,7 +7212,7 @@ public:
select_dumpvar(THD *thd_arg)
:select_result_interceptor(thd_arg), row_count(0), m_var_sp_row(NULL)
{ var_list.empty(); }
- ~select_dumpvar() {}
+ ~select_dumpvar() = default;
int prepare(List<Item> &list, SELECT_LEX_UNIT *u);
int send_data(List<Item> &items);
bool send_eof();
diff --git a/sql/sql_cmd.h b/sql/sql_cmd.h
index 1a01caa77dd..2623b3703d3 100644
--- a/sql/sql_cmd.h
+++ b/sql/sql_cmd.h
@@ -193,8 +193,7 @@ public:
}
protected:
- Sql_cmd()
- {}
+ Sql_cmd() = default;
virtual ~Sql_cmd()
{
@@ -262,8 +261,7 @@ public:
m_handler(handler)
{}
- virtual ~Sql_cmd_call()
- {}
+ virtual ~Sql_cmd_call() = default;
/**
Execute a CALL statement at runtime.
diff --git a/sql/sql_crypt.h b/sql/sql_crypt.h
index 3c90550c944..aab97501b48 100644
--- a/sql/sql_crypt.h
+++ b/sql/sql_crypt.h
@@ -30,12 +30,12 @@ class SQL_CRYPT :public Sql_alloc
char decode_buff[256],encode_buff[256];
uint shift;
public:
- SQL_CRYPT() {}
+ SQL_CRYPT() = default;
SQL_CRYPT(ulong *seed)
{
init(seed);
}
- ~SQL_CRYPT() {}
+ ~SQL_CRYPT() = default;
void init(ulong *seed);
void reinit() { shift=0; rand=org_rand; }
void encode(char *str, uint length);
diff --git a/sql/sql_cursor.cc b/sql/sql_cursor.cc
index d45f2ac8777..cef8ac161df 100644
--- a/sql/sql_cursor.cc
+++ b/sql/sql_cursor.cc
@@ -197,9 +197,7 @@ end:
Server_side_cursor
****************************************************************************/
-Server_side_cursor::~Server_side_cursor()
-{
-}
+Server_side_cursor::~Server_side_cursor() = default;
void Server_side_cursor::operator delete(void *ptr, size_t size)
diff --git a/sql/sql_debug.h b/sql/sql_debug.h
index 6109ca38048..003caec5454 100644
--- a/sql/sql_debug.h
+++ b/sql/sql_debug.h
@@ -22,7 +22,7 @@
class Debug_key: public String
{
public:
- Debug_key() { };
+ Debug_key() = default;
void print(THD *thd) const
{
push_warning_printf(thd, Sql_condition::WARN_LEVEL_NOTE,
diff --git a/sql/sql_error.h b/sql/sql_error.h
index d7c29c5f9a4..541b92b4531 100644
--- a/sql/sql_error.h
+++ b/sql/sql_error.h
@@ -245,8 +245,7 @@ class Sql_condition_identity: public Sql_state_errno_level,
public Sql_user_condition_identity
{
public:
- Sql_condition_identity()
- { }
+ Sql_condition_identity() = default;
Sql_condition_identity(const Sql_state_errno_level &st,
const Sql_user_condition_identity &ucid)
:Sql_state_errno_level(st),
@@ -450,8 +449,7 @@ private:
}
/** Destructor. */
- ~Sql_condition()
- {}
+ ~Sql_condition() = default;
/**
Copy optional condition items attributes.
@@ -871,8 +869,8 @@ public:
class ErrConv: public ErrBuff
{
public:
- ErrConv() {}
- virtual ~ErrConv() {}
+ ErrConv() = default;
+ virtual ~ErrConv() = default;
virtual LEX_CSTRING lex_cstring() const= 0;
inline const char *ptr() const
{
diff --git a/sql/sql_explain.h b/sql/sql_explain.h
index 919d51aef8b..0e8569aabe5 100644
--- a/sql/sql_explain.h
+++ b/sql/sql_explain.h
@@ -142,7 +142,7 @@ public:
Json_writer *writer, bool is_analyze,
bool no_tmp_tbl);
bool print_explain_json_cache(Json_writer *writer, bool is_analyze);
- virtual ~Explain_node(){}
+ virtual ~Explain_node() = default;
};
@@ -289,7 +289,7 @@ class Explain_aggr_node : public Sql_alloc
{
public:
virtual enum_explain_aggr_node_type get_type()= 0;
- virtual ~Explain_aggr_node() {}
+ virtual ~Explain_aggr_node() = default;
Explain_aggr_node *child;
};
diff --git a/sql/sql_expression_cache.h b/sql/sql_expression_cache.h
index 9c618a5ae9b..88436837a2d 100644
--- a/sql/sql_expression_cache.h
+++ b/sql/sql_expression_cache.h
@@ -36,8 +36,8 @@ class Expression_cache :public Sql_alloc
public:
enum result {ERROR, HIT, MISS};
- Expression_cache(){};
- virtual ~Expression_cache() {};
+ Expression_cache()= default;
+ virtual ~Expression_cache() = default;
/**
Shall check the presence of expression value in the cache for a given
set of values of the expression parameters. Return the result of the
diff --git a/sql/sql_hset.h b/sql/sql_hset.h
index b3d8165f6f6..41573fb5f03 100644
--- a/sql/sql_hset.h
+++ b/sql/sql_hset.h
@@ -15,6 +15,7 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
+#include "my_global.h"
#include "hash.h"
@@ -28,17 +29,15 @@ class Hash_set
public:
enum { START_SIZE= 8 };
/**
- Constructs an empty hash. Does not allocate memory, it is done upon
- the first insert. Thus does not cause or return errors.
+ Constructs an empty unique hash.
*/
Hash_set(PSI_memory_key psi_key, uchar *(*K)(const T *, size_t *, my_bool),
CHARSET_INFO *cs= &my_charset_bin)
{
- my_hash_clear(&m_hash);
- m_hash.get_key= (my_hash_get_key)K;
- m_hash.charset= cs;
- m_hash.array.m_psi_key= psi_key;
+ my_hash_init(psi_key, &m_hash, cs, START_SIZE, 0, 0, (my_hash_get_key)K, 0,
+ HASH_UNIQUE);
}
+
Hash_set(PSI_memory_key psi_key, CHARSET_INFO *charset, ulong default_array_elements,
size_t key_offset, size_t key_length, my_hash_get_key get_key,
void (*free_element)(void*), uint flags)
@@ -65,8 +64,6 @@ public:
*/
bool insert(T *value)
{
- my_hash_init_opt(m_hash.array.m_psi_key, &m_hash, m_hash.charset,
- START_SIZE, 0, 0, m_hash.get_key, 0, HASH_UNIQUE);
return my_hash_insert(&m_hash, reinterpret_cast<const uchar*>(value));
}
bool remove(T *value)
diff --git a/sql/sql_join_cache.h b/sql/sql_join_cache.h
index 2c3bf4022ca..393b3e309d3 100644
--- a/sql/sql_join_cache.h
+++ b/sql/sql_join_cache.h
@@ -678,7 +678,7 @@ public:
THD *thd();
- virtual ~JOIN_CACHE() {}
+ virtual ~JOIN_CACHE() = default;
void reset_join(JOIN *j) { join= j; }
void free()
{
@@ -1075,7 +1075,7 @@ public:
cache= join_tab->cache;
}
- virtual ~JOIN_TAB_SCAN() {}
+ virtual ~JOIN_TAB_SCAN() = default;
/*
Shall calculate the increment of the auxiliary buffer for a record
diff --git a/sql/sql_lex.h b/sql/sql_lex.h
index 828af2af81a..a2416d5d0eb 100644
--- a/sql/sql_lex.h
+++ b/sql/sql_lex.h
@@ -1753,8 +1753,8 @@ public:
These constructor and destructor serve for creation/destruction
of Query_tables_list instances which are used as backup storage.
*/
- Query_tables_list() {}
- ~Query_tables_list() {}
+ Query_tables_list() = default;
+ ~Query_tables_list() = default;
/* Initializes (or resets) Query_tables_list object for "real" use. */
void reset_query_tables_list(bool init);
@@ -2419,13 +2419,9 @@ class Lex_input_stream
const char *str, const char *end, int sep);
my_charset_conv_wc_mb get_escape_func(THD *thd, my_wc_t sep) const;
public:
- Lex_input_stream()
- {
- }
+ Lex_input_stream() = default;
- ~Lex_input_stream()
- {
- }
+ ~Lex_input_stream() = default;
/**
Object initializer. Must be called before usage.
@@ -3008,7 +3004,7 @@ public:
protected:
bool save_explain_data_intern(MEM_ROOT *mem_root, Explain_update *eu, bool is_analyze);
public:
- virtual ~Update_plan() {}
+ virtual ~Update_plan() = default;
Update_plan(MEM_ROOT *mem_root_arg) :
impossible_where(false), no_partitions(false),
@@ -3062,7 +3058,7 @@ enum password_exp_type
struct Account_options: public USER_RESOURCES
{
- Account_options() { }
+ Account_options() = default;
void reset()
{
@@ -4849,14 +4845,13 @@ class Set_signal_information
{
public:
/** Empty default constructor, use clear() */
- Set_signal_information() {}
+ Set_signal_information() = default;
/** Copy constructor. */
Set_signal_information(const Set_signal_information& set);
/** Destructor. */
- ~Set_signal_information()
- {}
+ ~Set_signal_information() = default;
/** Clear all items. */
void clear();
@@ -4979,8 +4974,7 @@ public:
return m_lip.init(thd, buff, length);
}
- ~Parser_state()
- {}
+ ~Parser_state() = default;
Lex_input_stream m_lip;
Yacc_state m_yacc;
diff --git a/sql/sql_lifo_buffer.h b/sql/sql_lifo_buffer.h
index 0347030e4c6..2d648271898 100644
--- a/sql/sql_lifo_buffer.h
+++ b/sql/sql_lifo_buffer.h
@@ -138,7 +138,7 @@ public:
virtual void remove_unused_space(uchar **unused_start, uchar **unused_end)=0;
virtual uchar *used_area() = 0;
- virtual ~Lifo_buffer() {};
+ virtual ~Lifo_buffer() = default;
};
diff --git a/sql/sql_locale.cc b/sql/sql_locale.cc
index fb7fa26f245..dd19807dd6d 100644
--- a/sql/sql_locale.cc
+++ b/sql/sql_locale.cc
@@ -1919,7 +1919,7 @@ MY_LOCALE my_locale_th_TH
);
/***** LOCALE END th_TH *****/
-/***** LOCALE BEGIN tr_TR: Turkish - Turkey *****/
+/***** LOCALE BEGIN tr_TR: Turkish - Türkiye *****/
static const char *my_locale_month_names_tr_TR[13] =
{"Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık", NullS };
static const char *my_locale_ab_month_names_tr_TR[13] =
@@ -1940,7 +1940,7 @@ MY_LOCALE my_locale_tr_TR
(
52,
"tr_TR",
- "Turkish - Turkey",
+ "Turkish - Türkiye",
FALSE,
&my_locale_typelib_month_names_tr_TR,
&my_locale_typelib_ab_month_names_tr_TR,
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 58a02465223..1edce0c5867 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -118,7 +118,7 @@ static bool wsrep_mysql_parse(THD *thd, char *rawbuf, uint length,
*/
static bool execute_sqlcom_select(THD *thd, TABLE_LIST *all_tables);
-static void sql_kill(THD *thd, longlong id, killed_state state, killed_type type);
+static void sql_kill(THD *thd, my_thread_id id, killed_state state, killed_type type);
static void sql_kill_user(THD *thd, LEX_USER *user, killed_state state);
static bool lock_tables_precheck(THD *thd, TABLE_LIST *tables);
static bool execute_show_status(THD *, TABLE_LIST *);
@@ -5537,7 +5537,7 @@ mysql_execute_command(THD *thd, bool is_called_from_prepared_stmt)
MYF(0));
goto error;
}
- sql_kill(thd, it->val_int(), lex->kill_signal, lex->kill_type);
+ sql_kill(thd, (my_thread_id) it->val_int(), lex->kill_signal, lex->kill_type);
}
else
sql_kill_user(thd, get_current_user(thd, lex->users_list.head()),
@@ -9196,12 +9196,12 @@ THD *find_thread_by_id(longlong id, bool query_id)
*/
uint
-kill_one_thread(THD *thd, longlong id, killed_state kill_signal, killed_type type)
+kill_one_thread(THD *thd, my_thread_id id, killed_state kill_signal, killed_type type)
{
THD *tmp;
uint error= (type == KILL_TYPE_QUERY ? ER_NO_SUCH_QUERY : ER_NO_SUCH_THREAD);
DBUG_ENTER("kill_one_thread");
- DBUG_PRINT("enter", ("id: %lld signal: %d", id, kill_signal));
+ DBUG_PRINT("enter", ("id: %lld signal: %d", (long long) id, kill_signal));
tmp= find_thread_by_id(id, type == KILL_TYPE_QUERY);
if (!tmp)
DBUG_RETURN(error);
@@ -9374,7 +9374,7 @@ static uint kill_threads_for_user(THD *thd, LEX_USER *user,
*/
static
-void sql_kill(THD *thd, longlong id, killed_state state, killed_type type)
+void sql_kill(THD *thd, my_thread_id id, killed_state state, killed_type type)
{
uint error;
#ifdef WITH_WSREP
diff --git a/sql/sql_partition_admin.h b/sql/sql_partition_admin.h
index 4be9e56e359..b50c3555bcb 100644
--- a/sql/sql_partition_admin.h
+++ b/sql/sql_partition_admin.h
@@ -127,8 +127,7 @@ public:
: Sql_cmd_common_alter_table()
{}
- ~Sql_cmd_alter_table_exchange_partition()
- {}
+ ~Sql_cmd_alter_table_exchange_partition() = default;
bool execute(THD *thd);
@@ -150,8 +149,7 @@ public:
: Sql_cmd_analyze_table()
{}
- ~Sql_cmd_alter_table_analyze_partition()
- {}
+ ~Sql_cmd_alter_table_analyze_partition() = default;
bool execute(THD *thd);
@@ -176,8 +174,7 @@ public:
: Sql_cmd_check_table()
{}
- ~Sql_cmd_alter_table_check_partition()
- {}
+ ~Sql_cmd_alter_table_check_partition() = default;
bool execute(THD *thd);
@@ -202,8 +199,7 @@ public:
: Sql_cmd_optimize_table()
{}
- ~Sql_cmd_alter_table_optimize_partition()
- {}
+ ~Sql_cmd_alter_table_optimize_partition() = default;
bool execute(THD *thd);
@@ -228,8 +224,7 @@ public:
: Sql_cmd_repair_table()
{}
- ~Sql_cmd_alter_table_repair_partition()
- {}
+ ~Sql_cmd_alter_table_repair_partition() = default;
bool execute(THD *thd);
@@ -250,11 +245,9 @@ public:
/**
Constructor, used to represent a ALTER TABLE TRUNCATE PARTITION statement.
*/
- Sql_cmd_alter_table_truncate_partition()
- {}
+ Sql_cmd_alter_table_truncate_partition() = default;
- virtual ~Sql_cmd_alter_table_truncate_partition()
- {}
+ virtual ~Sql_cmd_alter_table_truncate_partition() = default;
bool execute(THD *thd);
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index 75e0d096a40..6b337eae8d1 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -4035,9 +4035,7 @@ Reprepare_observer::report_error(THD *thd)
* Server_runnable
*******************************************************************/
-Server_runnable::~Server_runnable()
-{
-}
+Server_runnable::~Server_runnable() = default;
///////////////////////////////////////////////////////////////////////////
diff --git a/sql/sql_prepare.h b/sql/sql_prepare.h
index 1a96df85a19..ff6e986ec87 100644
--- a/sql/sql_prepare.h
+++ b/sql/sql_prepare.h
@@ -125,7 +125,7 @@ public:
MEM_ROOT *mem_root_arg);
/** We don't call member destructors, they all are POD types. */
- ~Ed_result_set() {}
+ ~Ed_result_set() = default;
size_t get_field_count() const { return m_column_count; }
diff --git a/sql/sql_schema.h b/sql/sql_schema.h
index 886a115cbc5..37f8ceb7250 100644
--- a/sql/sql_schema.h
+++ b/sql/sql_schema.h
@@ -26,7 +26,7 @@ public:
Schema(const LEX_CSTRING &name)
:m_name(name)
{ }
- virtual ~Schema() { }
+ virtual ~Schema() = default;
const LEX_CSTRING &name() const { return m_name; }
virtual const Type_handler *map_data_type(THD *thd, const Type_handler *src)
const
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index beb5ce5093a..55c222e4e63 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -4193,7 +4193,7 @@ JOIN::optimize_distinct()
}
/* Optimize "select distinct b from t1 order by key_part_1 limit #" */
- if (order && skip_sort_order)
+ if (order && skip_sort_order && !unit->lim.is_with_ties())
{
/* Should already have been optimized away */
DBUG_ASSERT(ordered_index_usage == ordered_index_order_by);
@@ -30124,7 +30124,6 @@ void JOIN::make_notnull_conds_for_range_scans()
{
DBUG_ENTER("JOIN::make_notnull_conds_for_range_scans");
-
if (impossible_where ||
!optimizer_flag(thd, OPTIMIZER_SWITCH_NOT_NULL_RANGE_SCAN))
{
@@ -30204,7 +30203,6 @@ bool build_notnull_conds_for_range_scans(JOIN *join, Item *cond,
table_map allowed)
{
THD *thd= join->thd;
-
DBUG_ENTER("build_notnull_conds_for_range_scans");
for (JOIN_TAB *s= join->join_tab;
@@ -30212,13 +30210,13 @@ bool build_notnull_conds_for_range_scans(JOIN *join, Item *cond,
{
/* Clear all needed bitmaps to mark found fields */
if ((allowed & s->table->map) &&
- !(s->table->map && join->const_table_map))
+ !(s->table->map & join->const_table_map))
bitmap_clear_all(&s->table->tmp_set);
}
/*
Find all null-rejected fields assuming that cond is null-rejected and
- only formulas over tables from 'allowed' are to be taken into account
+ only formulas over tables from 'allowed' are to be taken into account
*/
if (cond->find_not_null_fields(allowed))
DBUG_RETURN(true);
diff --git a/sql/sql_select.h b/sql/sql_select.h
index 7f4a8b684e4..16cd4fe6fa2 100644
--- a/sql/sql_select.h
+++ b/sql/sql_select.h
@@ -732,7 +732,7 @@ public:
virtual void mark_used() = 0;
- virtual ~Semi_join_strategy_picker() {}
+ virtual ~Semi_join_strategy_picker() = default;
};
@@ -1873,7 +1873,7 @@ public:
null_ptr(arg.null_ptr), err(arg.err)
{}
- virtual ~store_key() {} /** Not actually needed */
+ virtual ~store_key() = default; /** Not actually needed */
virtual enum Type type() const=0;
virtual const char *name() const=0;
virtual bool store_key_is_const() { return false; }
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index dd315517746..d8b12a5208e 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -10237,11 +10237,9 @@ exit:
class IS_internal_schema_access : public ACL_internal_schema_access
{
public:
- IS_internal_schema_access()
- {}
+ IS_internal_schema_access() = default;
- ~IS_internal_schema_access()
- {}
+ ~IS_internal_schema_access() = default;
ACL_internal_access_result check(privilege_t want_access,
privilege_t *save_priv) const;
diff --git a/sql/sql_signal.h b/sql/sql_signal.h
index 433cee21d58..abc9905aefb 100644
--- a/sql/sql_signal.h
+++ b/sql/sql_signal.h
@@ -36,8 +36,7 @@ protected:
m_set_signal_information(set)
{}
- virtual ~Sql_cmd_common_signal()
- {}
+ virtual ~Sql_cmd_common_signal() = default;
/**
Evaluate each signal condition items for this statement.
@@ -84,8 +83,7 @@ public:
: Sql_cmd_common_signal(cond, set)
{}
- virtual ~Sql_cmd_signal()
- {}
+ virtual ~Sql_cmd_signal() = default;
virtual enum_sql_command sql_command_code() const
{
@@ -111,8 +109,7 @@ public:
: Sql_cmd_common_signal(cond, set)
{}
- virtual ~Sql_cmd_resignal()
- {}
+ virtual ~Sql_cmd_resignal() = default;
virtual enum_sql_command sql_command_code() const
{
diff --git a/sql/sql_statistics.cc b/sql/sql_statistics.cc
index 40760c1e2eb..567dee84a3f 100644
--- a/sql/sql_statistics.cc
+++ b/sql/sql_statistics.cc
@@ -519,7 +519,7 @@ public:
}
- virtual ~Stat_table() {}
+ virtual ~Stat_table() = default;
/**
@brief
@@ -1705,7 +1705,7 @@ protected:
public:
- Count_distinct_field() {}
+ Count_distinct_field() = default;
/**
@param
diff --git a/sql/sql_string.cc b/sql/sql_string.cc
index fbc97ab54fb..d4639fb6bc4 100644
--- a/sql/sql_string.cc
+++ b/sql/sql_string.cc
@@ -677,33 +677,37 @@ bool String::append_with_prefill(const char *s,uint32 arg_length,
}
-int Binary_string::strstr(const Binary_string &s, uint32 offset)
+int Binary_string::strstr(const char *search, uint32 search_length, uint32 offset)
{
- if (s.length()+offset <= str_length)
+ if (search_length + offset <= str_length)
{
- if (!s.length())
+ if (!search_length)
return ((int) offset); // Empty string is always found
- const char *str = Ptr+offset;
- const char *search=s.ptr();
- const char *end=Ptr+str_length-s.length()+1;
- const char *search_end=s.ptr()+s.length();
+ const char *str= Ptr + offset;
+ const char *end= Ptr + str_length - search_length + 1;
+ const char *search_end= search + search_length;
skip:
while (str != end)
{
if (*str++ == *search)
{
- char *i,*j;
- i=(char*) str; j=(char*) search+1;
- while (j != search_end)
- if (*i++ != *j++) goto skip;
- return (int) (str-Ptr) -1;
+ char *i= (char*) str;
+ char *j= (char*) search + 1 ;
+ while (j != search_end)
+ if (*i++ != *j++) goto skip;
+ return (int) (str-Ptr) -1;
}
}
}
return -1;
}
+int Binary_string::strstr(const Binary_string &s, uint32 offset)
+{
+ return strstr(s.ptr(), s.length(), offset);
+}
+
/*
** Search string from end. Offset is offset to the end of string
*/
diff --git a/sql/sql_string.h b/sql/sql_string.h
index b1f02bdb43b..9729d9e85fd 100644
--- a/sql/sql_string.h
+++ b/sql/sql_string.h
@@ -330,6 +330,7 @@ public:
// Returns offset to substring or -1
int strstr(const Binary_string &search, uint32 offset=0);
+ int strstr(const char *search, uint32 search_length, uint32 offset=0);
// Returns offset to substring or -1
int strrstr(const Binary_string &search, uint32 offset=0);
@@ -803,7 +804,7 @@ public:
class String: public Charset, public Binary_string
{
public:
- String() { }
+ String() = default;
String(size_t length_arg) :Binary_string(length_arg)
{ }
/*
@@ -817,9 +818,7 @@ public:
String(char *str, size_t len, CHARSET_INFO *cs)
:Charset(cs), Binary_string(str, len)
{ }
- String(const String &str)
- :Charset(str), Binary_string(str)
- { }
+ String(const String &str) = default;
void set(String &str,size_t offset,size_t arg_length)
{
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 2d1010bffac..5fc564e73b8 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -7673,7 +7673,7 @@ static bool mysql_inplace_alter_table(THD *thd,
THD_STAGE_INFO(thd, stage_alter_inplace);
DBUG_EXECUTE_IF("start_alter_delay_master", {
debug_sync_set_action(thd,
- STRING_WITH_LEN("now wait_for alter_cont"));
+ STRING_WITH_LEN("now wait_for alter_cont NO_CLEAR_EVENT"));
});
/* We can abort alter table for any table type */
@@ -10857,7 +10857,7 @@ do_continue:;
DBUG_EXECUTE_IF("start_alter_delay_master", {
debug_sync_set_action(thd,
- STRING_WITH_LEN("now wait_for alter_cont"));
+ STRING_WITH_LEN("now wait_for alter_cont NO_CLEAR_EVENT"));
});
// It's now safe to take the table level lock.
if (lock_tables(thd, table_list, alter_ctx.tables_opened,
diff --git a/sql/sql_truncate.h b/sql/sql_truncate.h
index 7d2ff4b6050..5704da1dd7b 100644
--- a/sql/sql_truncate.h
+++ b/sql/sql_truncate.h
@@ -31,11 +31,9 @@ public:
/**
Constructor, used to represent a TRUNCATE statement.
*/
- Sql_cmd_truncate_table()
- {}
+ Sql_cmd_truncate_table() = default;
- virtual ~Sql_cmd_truncate_table()
- {}
+ virtual ~Sql_cmd_truncate_table() = default;
/**
Execute a TRUNCATE statement at runtime.
diff --git a/sql/sql_type.h b/sql/sql_type.h
index 07dabb9ecb4..741e0c9bb96 100644
--- a/sql/sql_type.h
+++ b/sql/sql_type.h
@@ -393,7 +393,7 @@ class Dec_ptr
{
protected:
my_decimal *m_ptr;
- Dec_ptr() { }
+ Dec_ptr() = default;
public:
Dec_ptr(my_decimal *ptr) :m_ptr(ptr) { }
bool is_null() const { return m_ptr == NULL; }
@@ -541,7 +541,7 @@ protected:
{
m_sec= m_usec= m_neg= m_truncated= 0;
}
- Sec6() { }
+ Sec6() = default;
bool add_nanoseconds(uint nanoseconds)
{
DBUG_ASSERT(nanoseconds <= 1000000000);
@@ -701,7 +701,7 @@ protected:
Sec6::make_from_int(nr);
m_nsec= 0;
}
- Sec9() { }
+ Sec9() = default;
public:
Sec9(const my_decimal *d)
{
@@ -2854,7 +2854,7 @@ class Timestamp_or_zero_datetime_native:
public NativeBuffer<STRING_BUFFER_TIMESTAMP_BINARY_SIZE>
{
public:
- Timestamp_or_zero_datetime_native() { }
+ Timestamp_or_zero_datetime_native() = default;
Timestamp_or_zero_datetime_native(const Timestamp_or_zero_datetime &ts,
uint decimals)
{
@@ -3331,13 +3331,9 @@ public:
class Type_all_attributes: public Type_std_attributes
{
public:
- Type_all_attributes()
- :Type_std_attributes()
- { }
- Type_all_attributes(const Type_all_attributes &other)
- :Type_std_attributes(other)
- { }
- virtual ~Type_all_attributes() {}
+ Type_all_attributes() = default;
+ Type_all_attributes(const Type_all_attributes &) = default;
+ virtual ~Type_all_attributes() = default;
virtual void set_type_maybe_null(bool maybe_null_arg)= 0;
// Returns total number of decimal digits
virtual decimal_digits_t decimal_precision() const= 0;
@@ -3349,7 +3345,7 @@ public:
class Type_cmp_attributes
{
public:
- virtual ~Type_cmp_attributes() { }
+ virtual ~Type_cmp_attributes() = default;
virtual CHARSET_INFO *compare_collation() const= 0;
};
@@ -3553,9 +3549,9 @@ enum vers_kind_t
class Vers_type_handler
{
protected:
- Vers_type_handler() {}
+ Vers_type_handler() = default;
public:
- virtual ~Vers_type_handler() {}
+ virtual ~Vers_type_handler() = default;
virtual vers_kind_t kind() const
{
DBUG_ASSERT(0);
@@ -3852,7 +3848,7 @@ public:
return false;
}
Type_handler() : m_name(0,0) {}
- virtual ~Type_handler() {}
+ virtual ~Type_handler() = default;
/**
Determines MariaDB traditional scalar data types that always present
in the server.
@@ -4368,7 +4364,7 @@ public:
class Type_handler_row: public Type_handler
{
public:
- virtual ~Type_handler_row() {}
+ virtual ~Type_handler_row() = default;
const Name &default_value() const override;
bool validate_implicit_default_value(THD *, const Column_definition &)
const override
@@ -4772,7 +4768,7 @@ public:
bool Item_func_min_max_get_date(THD *thd, Item_func_min_max*,
MYSQL_TIME *, date_mode_t fuzzydate) const
override;
- virtual ~Type_handler_numeric() { }
+ virtual ~Type_handler_numeric() = default;
bool can_change_cond_ref_to_const(Item_bool_func2 *target,
Item *target_expr, Item *target_value,
Item_bool_func2 *source,
@@ -4797,7 +4793,7 @@ public:
{
return DYN_COL_DOUBLE;
}
- virtual ~Type_handler_real_result() {}
+ virtual ~Type_handler_real_result() = default;
const Type_handler *type_handler_for_comparison() const override;
Field *make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
@@ -4918,7 +4914,7 @@ public:
{
return DYN_COL_DECIMAL;
}
- virtual ~Type_handler_decimal_result() {};
+ virtual ~Type_handler_decimal_result() = default;
const Type_handler *type_handler_for_comparison() const override;
int stored_field_cmp_to_item(THD *, Field *field, Item *item) const override
{
@@ -5178,7 +5174,7 @@ public:
}
bool is_order_clause_position_type() const override { return true; }
bool is_limit_clause_valid_type() const override { return true; }
- virtual ~Type_handler_int_result() {}
+ virtual ~Type_handler_int_result() = default;
const Type_handler *type_handler_for_comparison() const override;
int stored_field_cmp_to_item(THD *thd, Field *field, Item *item) const override;
bool subquery_type_allows_materialization(const Item *inner,
@@ -5298,7 +5294,7 @@ protected:
public:
Item_result result_type() const override { return STRING_RESULT; }
Item_result cmp_type() const override { return TIME_RESULT; }
- virtual ~Type_handler_temporal_result() {}
+ virtual ~Type_handler_temporal_result() = default;
void
Column_definition_attributes_frm_pack(const Column_definition_attributes *at,
uchar *buff) const override;
@@ -5396,7 +5392,7 @@ public:
return DYN_COL_STRING;
}
CHARSET_INFO *charset_for_protocol(const Item *item) const override;
- virtual ~Type_handler_string_result() {}
+ virtual ~Type_handler_string_result() = default;
const Type_handler *type_handler_for_comparison() const override;
int stored_field_cmp_to_item(THD *thd, Field *field, Item *item) const
override;
@@ -5586,7 +5582,7 @@ public:
class Type_handler_tiny: public Type_handler_general_purpose_int
{
public:
- virtual ~Type_handler_tiny() {}
+ virtual ~Type_handler_tiny() = default;
enum_field_types field_type() const override { return MYSQL_TYPE_TINY; }
const Type_handler *type_handler_unsigned() const override;
const Type_handler *type_handler_signed() const override;
@@ -5637,7 +5633,7 @@ public:
class Type_handler_short: public Type_handler_general_purpose_int
{
public:
- virtual ~Type_handler_short() {}
+ virtual ~Type_handler_short() = default;
enum_field_types field_type() const override { return MYSQL_TYPE_SHORT; }
const Type_handler *type_handler_unsigned() const override;
const Type_handler *type_handler_signed() const override;
@@ -5688,7 +5684,7 @@ public:
class Type_handler_long: public Type_handler_general_purpose_int
{
public:
- virtual ~Type_handler_long() {}
+ virtual ~Type_handler_long() = default;
enum_field_types field_type() const override { return MYSQL_TYPE_LONG; }
const Type_handler *type_handler_unsigned() const override;
const Type_handler *type_handler_signed() const override;
@@ -5750,7 +5746,7 @@ public:
class Type_handler_longlong: public Type_handler_general_purpose_int
{
public:
- virtual ~Type_handler_longlong() {}
+ virtual ~Type_handler_longlong() = default;
enum_field_types field_type() const override{ return MYSQL_TYPE_LONGLONG; }
const Type_handler *type_handler_unsigned() const override;
const Type_handler *type_handler_signed() const override;
@@ -5805,7 +5801,7 @@ public:
class Type_handler_vers_trx_id: public Type_handler_ulonglong
{
public:
- virtual ~Type_handler_vers_trx_id() {}
+ virtual ~Type_handler_vers_trx_id() = default;
Field *make_table_field(MEM_ROOT *root,
const LEX_CSTRING *name,
const Record_addr &addr,
@@ -5817,7 +5813,7 @@ public:
class Type_handler_int24: public Type_handler_general_purpose_int
{
public:
- virtual ~Type_handler_int24() {}
+ virtual ~Type_handler_int24() = default;
enum_field_types field_type() const override { return MYSQL_TYPE_INT24; }
const Type_handler *type_handler_unsigned() const override;
const Type_handler *type_handler_signed() const override;
@@ -5862,7 +5858,7 @@ public:
class Type_handler_year: public Type_handler_int_result
{
public:
- virtual ~Type_handler_year() {}
+ virtual ~Type_handler_year() = default;
enum_field_types field_type() const override { return MYSQL_TYPE_YEAR; }
uint flags() const override { return UNSIGNED_FLAG; }
protocol_send_type_t protocol_send_type() const override
@@ -5916,7 +5912,7 @@ public:
class Type_handler_bit: public Type_handler_int_result
{
public:
- virtual ~Type_handler_bit() {}
+ virtual ~Type_handler_bit() = default;
enum_field_types field_type() const override { return MYSQL_TYPE_BIT; }
uint flags() const override { return UNSIGNED_FLAG; }
protocol_send_type_t protocol_send_type() const override
@@ -5981,7 +5977,7 @@ public:
class Type_handler_float: public Type_handler_real_result
{
public:
- virtual ~Type_handler_float() {}
+ virtual ~Type_handler_float() = default;
enum_field_types field_type() const override { return MYSQL_TYPE_FLOAT; }
protocol_send_type_t protocol_send_type() const override
{
@@ -6035,7 +6031,7 @@ public:
class Type_handler_double: public Type_handler_real_result
{
public:
- virtual ~Type_handler_double() {}
+ virtual ~Type_handler_double() = default;
enum_field_types field_type() const override { return MYSQL_TYPE_DOUBLE; }
protocol_send_type_t protocol_send_type() const override
{
@@ -6090,7 +6086,7 @@ public:
class Type_handler_time_common: public Type_handler_temporal_result
{
public:
- virtual ~Type_handler_time_common() { }
+ virtual ~Type_handler_time_common() = default;
const Name &default_value() const override;
enum_field_types field_type() const override { return MYSQL_TYPE_TIME; }
enum_dynamic_column_type dyncol_type(const Type_all_attributes *attr)
@@ -6212,7 +6208,7 @@ class Type_handler_time: public Type_handler_time_common
static uint m_hires_bytes[MAX_DATETIME_PRECISION+1];
public:
static uint hires_bytes(uint dec) { return m_hires_bytes[dec]; }
- virtual ~Type_handler_time() {}
+ virtual ~Type_handler_time() = default;
const Name version() const override { return version_mariadb53(); }
uint32 max_display_length_for_field(const Conv_source &src) const override
{ return MIN_TIME_WIDTH; }
@@ -6242,7 +6238,7 @@ public:
class Type_handler_time2: public Type_handler_time_common
{
public:
- virtual ~Type_handler_time2() {}
+ virtual ~Type_handler_time2() = default;
const Name version() const override { return version_mysql56(); }
enum_field_types real_field_type() const override { return MYSQL_TYPE_TIME2; }
uint32 max_display_length_for_field(const Conv_source &src) const override;
@@ -6272,7 +6268,7 @@ public:
class Type_handler_temporal_with_date: public Type_handler_temporal_result
{
public:
- virtual ~Type_handler_temporal_with_date() {}
+ virtual ~Type_handler_temporal_with_date() = default;
Item_literal *create_literal_item(THD *thd, const char *str, size_t length,
CHARSET_INFO *cs, bool send_error)
const override;
@@ -6302,7 +6298,7 @@ public:
class Type_handler_date_common: public Type_handler_temporal_with_date
{
public:
- virtual ~Type_handler_date_common() {}
+ virtual ~Type_handler_date_common() = default;
const Name &default_value() const override;
const Type_handler *type_handler_for_comparison() const override;
enum_field_types field_type() const override { return MYSQL_TYPE_DATE; }
@@ -6373,7 +6369,7 @@ public:
class Type_handler_date: public Type_handler_date_common
{
public:
- virtual ~Type_handler_date() {}
+ virtual ~Type_handler_date() = default;
uint32 calc_pack_length(uint32 length) const override { return 4; }
Field *make_conversion_table_field(MEM_ROOT *root,
TABLE *table, uint metadata,
@@ -6400,7 +6396,7 @@ public:
class Type_handler_newdate: public Type_handler_date_common
{
public:
- virtual ~Type_handler_newdate() {}
+ virtual ~Type_handler_newdate() = default;
enum_field_types real_field_type() const override
{
return MYSQL_TYPE_NEWDATE;
@@ -6431,7 +6427,7 @@ public:
class Type_handler_datetime_common: public Type_handler_temporal_with_date
{
public:
- virtual ~Type_handler_datetime_common() {}
+ virtual ~Type_handler_datetime_common() = default;
const Name &default_value() const override;
const Type_handler *type_handler_for_comparison() const override;
enum_field_types field_type() const override
@@ -6515,7 +6511,7 @@ class Type_handler_datetime: public Type_handler_datetime_common
static uint m_hires_bytes[MAX_DATETIME_PRECISION + 1];
public:
static uint hires_bytes(uint dec) { return m_hires_bytes[dec]; }
- virtual ~Type_handler_datetime() {}
+ virtual ~Type_handler_datetime() = default;
const Name version() const override { return version_mariadb53(); }
uint32 max_display_length_for_field(const Conv_source &src) const override
{ return MAX_DATETIME_WIDTH; }
@@ -6545,7 +6541,7 @@ public:
class Type_handler_datetime2: public Type_handler_datetime_common
{
public:
- virtual ~Type_handler_datetime2() {}
+ virtual ~Type_handler_datetime2() = default;
const Name version() const override { return version_mysql56(); }
enum_field_types real_field_type() const override
{
@@ -6580,7 +6576,7 @@ class Type_handler_timestamp_common: public Type_handler_temporal_with_date
protected:
bool TIME_to_native(THD *, const MYSQL_TIME *from, Native *to, uint dec) const;
public:
- virtual ~Type_handler_timestamp_common() {}
+ virtual ~Type_handler_timestamp_common() = default;
const Name &default_value() const override;
const Type_handler *type_handler_for_comparison() const override;
const Type_handler *type_handler_for_native_format() const override;
@@ -6682,7 +6678,7 @@ class Type_handler_timestamp: public Type_handler_timestamp_common
static uint m_sec_part_bytes[MAX_DATETIME_PRECISION + 1];
public:
static uint sec_part_bytes(uint dec) { return m_sec_part_bytes[dec]; }
- virtual ~Type_handler_timestamp() {}
+ virtual ~Type_handler_timestamp() = default;
const Name version() const override { return version_mariadb53(); }
uint32 max_display_length_for_field(const Conv_source &src) const override
{ return MAX_DATETIME_WIDTH; }
@@ -6712,7 +6708,7 @@ public:
class Type_handler_timestamp2: public Type_handler_timestamp_common
{
public:
- virtual ~Type_handler_timestamp2() {}
+ virtual ~Type_handler_timestamp2() = default;
const Name version() const override { return version_mysql56(); }
enum_field_types real_field_type() const override
{
@@ -6747,7 +6743,7 @@ public:
class Type_handler_olddecimal: public Type_handler_decimal_result
{
public:
- virtual ~Type_handler_olddecimal() {}
+ virtual ~Type_handler_olddecimal() = default;
enum_field_types field_type() const override { return MYSQL_TYPE_DECIMAL; }
uint32 max_display_length_for_field(const Conv_source &src) const override;
uint32 calc_pack_length(uint32 length) const override { return length; }
@@ -6781,7 +6777,7 @@ public:
class Type_handler_newdecimal: public Type_handler_decimal_result
{
public:
- virtual ~Type_handler_newdecimal() {}
+ virtual ~Type_handler_newdecimal() = default;
enum_field_types field_type() const override { return MYSQL_TYPE_NEWDECIMAL; }
uint32 max_display_length_for_field(const Conv_source &src) const override;
uint32 calc_pack_length(uint32 length) const override;
@@ -6825,7 +6821,7 @@ public:
class Type_handler_null: public Type_handler_general_purpose_string
{
public:
- virtual ~Type_handler_null() {}
+ virtual ~Type_handler_null() = default;
enum_field_types field_type() const override { return MYSQL_TYPE_NULL; }
enum_dynamic_column_type dyncol_type(const Type_all_attributes *attr)
const override
@@ -6897,7 +6893,7 @@ public:
class Type_handler_string: public Type_handler_longstr
{
public:
- virtual ~Type_handler_string() {}
+ virtual ~Type_handler_string() = default;
enum_field_types field_type() const override { return MYSQL_TYPE_STRING; }
ulong KEY_pack_flags(uint column_nr) const override
{
@@ -6951,7 +6947,7 @@ public:
class Type_handler_var_string: public Type_handler_string
{
public:
- virtual ~Type_handler_var_string() {}
+ virtual ~Type_handler_var_string() = default;
enum_field_types field_type() const override { return MYSQL_TYPE_VAR_STRING; }
enum_field_types real_field_type() const override { return MYSQL_TYPE_STRING; }
enum_field_types traditional_merge_field_type() const override
@@ -6981,7 +6977,7 @@ public:
class Type_handler_varchar: public Type_handler_longstr
{
public:
- virtual ~Type_handler_varchar() {}
+ virtual ~Type_handler_varchar() = default;
enum_field_types field_type() const override { return MYSQL_TYPE_VARCHAR; }
ulong KEY_pack_flags(uint column_nr) const override
{
@@ -7052,7 +7048,7 @@ public:
class Type_handler_hex_hybrid: public Type_handler_varchar
{
public:
- virtual ~Type_handler_hex_hybrid() {}
+ virtual ~Type_handler_hex_hybrid() = default;
const Type_handler *cast_to_int_type_handler() const override;
bool Item_func_round_fix_length_and_dec(Item_func_round *) const override;
bool Item_func_int_val_fix_length_and_dec(Item_func_int_val*) const override;
@@ -7095,7 +7091,7 @@ public:
class Type_handler_blob_common: public Type_handler_longstr
{
public:
- virtual ~Type_handler_blob_common() { }
+ virtual ~Type_handler_blob_common() = default;
virtual uint length_bytes() const= 0;
ulong KEY_pack_flags(uint column_nr) const override
{
@@ -7172,7 +7168,7 @@ public:
class Type_handler_tiny_blob: public Type_handler_blob_common
{
public:
- virtual ~Type_handler_tiny_blob() {}
+ virtual ~Type_handler_tiny_blob() = default;
uint length_bytes() const override { return 1; }
enum_field_types field_type() const override { return MYSQL_TYPE_TINY_BLOB; }
uint32 max_display_length_for_field(const Conv_source &src) const override;
@@ -7189,7 +7185,7 @@ public:
class Type_handler_medium_blob: public Type_handler_blob_common
{
public:
- virtual ~Type_handler_medium_blob() {}
+ virtual ~Type_handler_medium_blob() = default;
uint length_bytes() const override { return 3; }
enum_field_types field_type() const override
{ return MYSQL_TYPE_MEDIUM_BLOB; }
@@ -7207,7 +7203,7 @@ public:
class Type_handler_long_blob: public Type_handler_blob_common
{
public:
- virtual ~Type_handler_long_blob() {}
+ virtual ~Type_handler_long_blob() = default;
uint length_bytes() const override { return 4; }
enum_field_types field_type() const override { return MYSQL_TYPE_LONG_BLOB; }
uint32 max_display_length_for_field(const Conv_source &src) const override;
@@ -7226,7 +7222,7 @@ public:
class Type_handler_blob: public Type_handler_blob_common
{
public:
- virtual ~Type_handler_blob() {}
+ virtual ~Type_handler_blob() = default;
uint length_bytes() const override { return 2; }
enum_field_types field_type() const override { return MYSQL_TYPE_BLOB; }
uint32 max_display_length_for_field(const Conv_source &src) const override;
@@ -7270,7 +7266,7 @@ public:
class Type_handler_typelib: public Type_handler_general_purpose_string
{
public:
- virtual ~Type_handler_typelib() { }
+ virtual ~Type_handler_typelib() = default;
enum_field_types field_type() const override { return MYSQL_TYPE_STRING; }
const Type_handler *type_handler_for_item_field() const override;
const Type_handler *cast_to_int_type_handler() const override;
@@ -7308,7 +7304,7 @@ public:
class Type_handler_enum: public Type_handler_typelib
{
public:
- virtual ~Type_handler_enum() {}
+ virtual ~Type_handler_enum() = default;
enum_field_types real_field_type() const override { return MYSQL_TYPE_ENUM; }
enum_field_types traditional_merge_field_type() const override
{
@@ -7349,7 +7345,7 @@ public:
class Type_handler_set: public Type_handler_typelib
{
public:
- virtual ~Type_handler_set() {}
+ virtual ~Type_handler_set() = default;
enum_field_types real_field_type() const override { return MYSQL_TYPE_SET; }
enum_field_types traditional_merge_field_type() const override
{
@@ -7395,7 +7391,7 @@ public:
class Function_collection
{
public:
- virtual ~Function_collection() {}
+ virtual ~Function_collection() = default;
virtual bool init()= 0;
virtual void cleanup()= 0;
virtual Create_func *find_native_function_builder(THD *thd,
@@ -7407,11 +7403,8 @@ public:
class Type_collection
{
public:
- virtual ~Type_collection() {}
- virtual bool init(Type_handler_data *data)
- {
- return false;
- }
+ virtual ~Type_collection() = default;
+ virtual bool init(Type_handler_data *) { return false; }
virtual const Type_handler *handler_by_name(const LEX_CSTRING &name) const= 0;
virtual const Type_handler *aggregate_for_result(const Type_handler *h1,
const Type_handler *h2)
@@ -7605,7 +7598,7 @@ public:
const Type_handler *m_handler1;
const Type_handler *m_handler2;
const Type_handler *m_result;
- Pair() { }
+ Pair() = default;
Pair(const Type_handler *handler1,
const Type_handler *handler2,
const Type_handler *result)
diff --git a/sql/sql_type_fixedbin_storage.h b/sql/sql_type_fixedbin_storage.h
index e3a46698463..3a4e74a8cdb 100644
--- a/sql/sql_type_fixedbin_storage.h
+++ b/sql/sql_type_fixedbin_storage.h
@@ -64,9 +64,7 @@ protected:
// The buffer that stores the in-memory binary representation
char m_buffer[NATIVE_LEN];
- // Non-initializing constructor
- FixedBinTypeStorage()
- { }
+ FixedBinTypeStorage() = default;
FixedBinTypeStorage & set_zero()
{
diff --git a/sql/sql_window.cc b/sql/sql_window.cc
index c0acecd138f..8716b596914 100644
--- a/sql/sql_window.cc
+++ b/sql/sql_window.cc
@@ -944,7 +944,7 @@ protected:
class Table_read_cursor : public Rowid_seq_cursor
{
public:
- virtual ~Table_read_cursor() {}
+ virtual ~Table_read_cursor() = default;
void init(READ_RECORD *info)
{
@@ -1128,7 +1128,7 @@ public:
virtual bool is_outside_computation_bounds() const { return false; };
- virtual ~Frame_cursor() {}
+ virtual ~Frame_cursor() = default;
/*
Regular frame cursors add or remove values from the sum functions they
diff --git a/sql/sql_window.h b/sql/sql_window.h
index 66ea8c7dd4d..1c02740e769 100644
--- a/sql/sql_window.h
+++ b/sql/sql_window.h
@@ -106,7 +106,7 @@ class Window_spec : public Sql_alloc
{
bool window_names_are_checked;
public:
- virtual ~Window_spec() {}
+ virtual ~Window_spec() = default;
LEX_CSTRING *window_ref;
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index a6cbf581c1a..6310b40351c 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -13367,6 +13367,8 @@ delete_part2:
{
Lex->last_table()->vers_conditions= Lex->vers_conditions;
Lex->pop_select(); //main select
+ if (Lex->check_main_unit_semantics())
+ MYSQL_YYABORT;
}
;
@@ -13403,6 +13405,8 @@ single_multi:
if ($3)
Select->order_list= *($3);
Lex->pop_select(); //main select
+ if (Lex->check_main_unit_semantics())
+ MYSQL_YYABORT;
}
| table_wild_list
{
diff --git a/sql/structs.h b/sql/structs.h
index b36f8e6a1a0..0a71719376c 100644
--- a/sql/structs.h
+++ b/sql/structs.h
@@ -983,7 +983,7 @@ public:
class Load_data_outvar
{
public:
- virtual ~Load_data_outvar() {}
+ virtual ~Load_data_outvar() = default;
virtual bool load_data_set_null(THD *thd, const Load_data_param *param)= 0;
virtual bool load_data_set_value(THD *thd, const char *pos, uint length,
const Load_data_param *param)= 0;
@@ -997,7 +997,7 @@ public:
class Timeval: public timeval
{
protected:
- Timeval() { }
+ Timeval() = default;
public:
Timeval(my_time_t sec, ulong usec)
{
diff --git a/sql/sys_vars_shared.h b/sql/sys_vars_shared.h
index bc48d1f7fff..508a0a70c8f 100644
--- a/sql/sys_vars_shared.h
+++ b/sql/sys_vars_shared.h
@@ -44,7 +44,7 @@ public:
virtual void rdlock()= 0;
virtual void wrlock()= 0;
virtual void unlock()= 0;
- virtual ~PolyLock() {}
+ virtual ~PolyLock() = default;
};
class PolyLock_mutex: public PolyLock
diff --git a/sql/table.h b/sql/table.h
index bf91109bbd4..9cce25fcc47 100644
--- a/sql/table.h
+++ b/sql/table.h
@@ -137,14 +137,13 @@ public:
void restore_env(THD *thd, Object_creation_ctx *backup_ctx);
protected:
- Object_creation_ctx() {}
+ Object_creation_ctx() = default;
virtual Object_creation_ctx *create_backup_ctx(THD *thd) const = 0;
virtual void change_env(THD *thd) const = 0;
public:
- virtual ~Object_creation_ctx()
- { }
+ virtual ~Object_creation_ctx() = default;
};
/*************************************************************************/
@@ -551,7 +550,7 @@ protected:
public:
Table_check_intact(bool keys= false) : has_keys(keys) {}
- virtual ~Table_check_intact() {}
+ virtual ~Table_check_intact() = default;
/** Checks whether a table is intact. */
bool check(TABLE *table, const TABLE_FIELD_DEF *table_def);
@@ -728,7 +727,7 @@ public:
struct TABLE_SHARE
{
- TABLE_SHARE() {} /* Remove gcc warning */
+ TABLE_SHARE() = default; /* Remove gcc warning */
/** Category of this table. */
TABLE_CATEGORY table_category;
@@ -1277,7 +1276,7 @@ struct vers_select_conds_t;
struct TABLE
{
- TABLE() {} /* Remove gcc warning */
+ TABLE() = default; /* Remove gcc warning */
TABLE_SHARE *s;
handler *file;
@@ -2223,7 +2222,7 @@ class Index_hint;
struct TABLE_CHAIN
{
- TABLE_CHAIN() {}
+ TABLE_CHAIN() = default;
TABLE_LIST **start_pos;
TABLE_LIST ** end_pos;
@@ -2234,7 +2233,7 @@ struct TABLE_CHAIN
struct TABLE_LIST
{
- TABLE_LIST() {} /* Remove gcc warning */
+ TABLE_LIST() = default; /* Remove gcc warning */
enum prelocking_types
{
@@ -3006,8 +3005,8 @@ class Item;
class Field_iterator: public Sql_alloc
{
public:
- Field_iterator() {} /* Remove gcc warning */
- virtual ~Field_iterator() {}
+ Field_iterator() = default; /* Remove gcc warning */
+ virtual ~Field_iterator() = default;
virtual void set(TABLE_LIST *)= 0;
virtual void next()= 0;
virtual bool end_of_fields()= 0; /* Return 1 at end of list */
@@ -3068,7 +3067,7 @@ class Field_iterator_natural_join: public Field_iterator
Natural_join_column *cur_column_ref;
public:
Field_iterator_natural_join() :cur_column_ref(NULL) {}
- ~Field_iterator_natural_join() {}
+ ~Field_iterator_natural_join() = default;
void set(TABLE_LIST *table);
void next();
bool end_of_fields() { return !cur_column_ref; }
diff --git a/sql/threadpool.h b/sql/threadpool.h
index 7737d056b4a..d815d538cde 100644
--- a/sql/threadpool.h
+++ b/sql/threadpool.h
@@ -102,8 +102,7 @@ struct TP_connection
priority(TP_PRIORITY_HIGH)
{}
- virtual ~TP_connection()
- {};
+ virtual ~TP_connection() = default;
/* Initialize io structures windows threadpool, epoll etc */
virtual int init() = 0;
@@ -121,7 +120,7 @@ struct TP_connection
struct TP_pool
{
- virtual ~TP_pool(){};
+ virtual ~TP_pool() = default;
virtual int init()= 0;
virtual TP_connection *new_connection(CONNECT *)= 0;
virtual void add(TP_connection *c)= 0;
diff --git a/sql/threadpool_generic.cc b/sql/threadpool_generic.cc
index eb08441a4d5..7261eabfd82 100644
--- a/sql/threadpool_generic.cc
+++ b/sql/threadpool_generic.cc
@@ -1574,8 +1574,7 @@ static void *worker_main(void *param)
}
-TP_pool_generic::TP_pool_generic()
-{}
+TP_pool_generic::TP_pool_generic() = default;
int TP_pool_generic::init()
{
diff --git a/sql/tztime.cc b/sql/tztime.cc
index 2e39a20fc91..8e1a8805d96 100644
--- a/sql/tztime.cc
+++ b/sql/tztime.cc
@@ -1027,7 +1027,7 @@ static const String tz_SYSTEM_name("SYSTEM", 6, &my_charset_latin1);
class Time_zone_system : public Time_zone
{
public:
- Time_zone_system() {} /* Remove gcc warning */
+ Time_zone_system() = default; /* Remove gcc warning */
virtual my_time_t TIME_to_gmt_sec(const MYSQL_TIME *t, uint *error_code) const;
virtual void gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const;
virtual const String * get_name() const;
@@ -1123,7 +1123,7 @@ Time_zone_system::get_name() const
class Time_zone_utc : public Time_zone
{
public:
- Time_zone_utc() {} /* Remove gcc warning */
+ Time_zone_utc() = default; /* Remove gcc warning */
virtual my_time_t TIME_to_gmt_sec(const MYSQL_TIME *t,
uint *error_code) const;
virtual void gmt_sec_to_TIME(MYSQL_TIME *tmp, my_time_t t) const;
diff --git a/sql/tztime.h b/sql/tztime.h
index 9e5d469925f..6d8af62ecd4 100644
--- a/sql/tztime.h
+++ b/sql/tztime.h
@@ -41,7 +41,7 @@ class THD;
class Time_zone: public Sql_alloc
{
public:
- Time_zone() {} /* Remove gcc warning */
+ Time_zone() = default; /* Remove gcc warning */
/**
Converts local time in broken down MYSQL_TIME representation to
my_time_t (UTC seconds since Epoch) represenation.
@@ -66,7 +66,7 @@ public:
We need this only for surpressing warnings, objects of this type are
allocated on MEM_ROOT and should not require destruction.
*/
- virtual ~Time_zone() {};
+ virtual ~Time_zone() = default;
protected:
static inline void adjust_leap_second(MYSQL_TIME *t);
diff --git a/sql/vers_string.h b/sql/vers_string.h
index 67fd421500e..c5be9c359e3 100644
--- a/sql/vers_string.h
+++ b/sql/vers_string.h
@@ -53,7 +53,7 @@ template <class Compare>
struct Lex_cstring_with_compare : public Lex_cstring
{
public:
- Lex_cstring_with_compare() {}
+ Lex_cstring_with_compare() = default;
Lex_cstring_with_compare(const char *_str, size_t _len) :
Lex_cstring(_str, _len)
{ }
diff --git a/sql/win_tzname_data.h b/sql/win_tzname_data.h
index 792cdbc7a13..8a240118ac3 100644
--- a/sql/win_tzname_data.h
+++ b/sql/win_tzname_data.h
@@ -44,7 +44,7 @@
{L"UTC-02","Etc/GMT+2"},
{L"Azores Standard Time","Atlantic/Azores"},
{L"Cape Verde Standard Time","Atlantic/Cape_Verde"},
-{L"UTC","Etc/GMT"},
+{L"UTC","Etc/UTC"},
{L"GMT Standard Time","Europe/London"},
{L"Greenwich Standard Time","Atlantic/Reykjavik"},
{L"Sao Tome Standard Time","Africa/Sao_Tome"},
@@ -64,6 +64,7 @@
{L"South Africa Standard Time","Africa/Johannesburg"},
{L"FLE Standard Time","Europe/Kiev"},
{L"Israel Standard Time","Asia/Jerusalem"},
+{L"South Sudan Standard Time","Africa/Juba"},
{L"Kaliningrad Standard Time","Europe/Kaliningrad"},
{L"Sudan Standard Time","Africa/Khartoum"},
{L"Libya Standard Time","Africa/Tripoli"},
diff --git a/sql/wsrep_client_service.cc b/sql/wsrep_client_service.cc
index 7ab5ba0c1e2..628a408b49b 100644
--- a/sql/wsrep_client_service.cc
+++ b/sql/wsrep_client_service.cc
@@ -1,4 +1,4 @@
-/* Copyright 2018-2022 Codership Oy <info@codership.com>
+/* Copyright 2018-2023 Codership Oy <info@codership.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -347,22 +347,36 @@ void Wsrep_client_service::debug_crash(const char* crash_point)
int Wsrep_client_service::bf_rollback()
{
DBUG_ASSERT(m_thd == current_thd);
- DBUG_ENTER("Wsrep_client_service::rollback");
+ DBUG_ENTER("Wsrep_client_service::bf_rollback");
int ret= (trans_rollback_stmt(m_thd) || trans_rollback(m_thd));
- if (m_thd->locked_tables_mode && m_thd->lock)
- {
- if (m_thd->locked_tables_list.unlock_locked_tables(m_thd))
- ret= 1;
- m_thd->variables.option_bits&= ~OPTION_TABLE_LOCK;
- }
- if (m_thd->global_read_lock.is_acquired())
+
+ WSREP_DEBUG("::bf_rollback() thread: %lu, client_state %s "
+ "client_mode %s trans_state %s killed %d",
+ thd_get_thread_id(m_thd),
+ wsrep_thd_client_state_str(m_thd),
+ wsrep_thd_client_mode_str(m_thd),
+ wsrep_thd_transaction_state_str(m_thd),
+ m_thd->killed);
+
+ /* If client is quiting all below will be done in THD::cleanup()
+ TODO: why we need this any other case? */
+ if (m_thd->wsrep_cs().state() != wsrep::client_state::s_quitting)
{
- m_thd->global_read_lock.unlock_global_read_lock(m_thd);
+ if (m_thd->locked_tables_mode && m_thd->lock)
+ {
+ if (m_thd->locked_tables_list.unlock_locked_tables(m_thd))
+ ret= 1;
+ m_thd->variables.option_bits&= ~OPTION_TABLE_LOCK;
+ }
+ if (m_thd->global_read_lock.is_acquired())
+ {
+ m_thd->global_read_lock.unlock_global_read_lock(m_thd);
+ }
+ m_thd->release_transactional_locks();
+ mysql_ull_cleanup(m_thd);
+ m_thd->mdl_context.release_explicit_locks();
}
- m_thd->release_transactional_locks();
- mysql_ull_cleanup(m_thd);
- m_thd->mdl_context.release_explicit_locks();
DBUG_RETURN(ret);
}
diff --git a/sql/wsrep_condition_variable.h b/sql/wsrep_condition_variable.h
index c97b47378f7..d9798bb9548 100644
--- a/sql/wsrep_condition_variable.h
+++ b/sql/wsrep_condition_variable.h
@@ -29,8 +29,7 @@ public:
Wsrep_condition_variable(mysql_cond_t* cond)
: m_cond(cond)
{ }
- ~Wsrep_condition_variable()
- { }
+ ~Wsrep_condition_variable() = default;
void notify_one()
{
diff --git a/sql/wsrep_high_priority_service.cc b/sql/wsrep_high_priority_service.cc
index 93d4738212d..7d8296a75a1 100644
--- a/sql/wsrep_high_priority_service.cc
+++ b/sql/wsrep_high_priority_service.cc
@@ -292,6 +292,7 @@ int Wsrep_high_priority_service::append_fragment_and_commit(
ret= ret || trans_commit(m_thd);
ret= ret || (m_thd->wsrep_cs().after_applying(), 0);
+
m_thd->release_transactional_locks();
free_root(m_thd->mem_root, MYF(MY_KEEP_PREALLOC));
@@ -380,6 +381,15 @@ int Wsrep_high_priority_service::rollback(const wsrep::ws_handle& ws_handle,
assert(ws_handle == wsrep::ws_handle());
}
int ret= (trans_rollback_stmt(m_thd) || trans_rollback(m_thd));
+
+ WSREP_DEBUG("::rollback() thread: %lu, client_state %s "
+ "client_mode %s trans_state %s killed %d",
+ thd_get_thread_id(m_thd),
+ wsrep_thd_client_state_str(m_thd),
+ wsrep_thd_client_mode_str(m_thd),
+ wsrep_thd_transaction_state_str(m_thd),
+ m_thd->killed);
+
m_thd->release_transactional_locks();
mysql_ull_cleanup(m_thd);
m_thd->mdl_context.release_explicit_locks();
diff --git a/sql/wsrep_schema.cc b/sql/wsrep_schema.cc
index 1cfdae2890b..f39588e41db 100644
--- a/sql/wsrep_schema.cc
+++ b/sql/wsrep_schema.cc
@@ -654,12 +654,9 @@ static void make_key(TABLE* table, uchar** key, key_part_map* map, int parts) {
} /* namespace Wsrep_schema_impl */
-Wsrep_schema::Wsrep_schema()
-{
-}
+Wsrep_schema::Wsrep_schema() = default;
-Wsrep_schema::~Wsrep_schema()
-{ }
+Wsrep_schema::~Wsrep_schema() = default;
static void wsrep_init_thd_for_schema(THD *thd)
{
diff --git a/sql/wsrep_server_state.cc b/sql/wsrep_server_state.cc
index 973850871b1..6bc4eaf4d86 100644
--- a/sql/wsrep_server_state.cc
+++ b/sql/wsrep_server_state.cc
@@ -48,8 +48,7 @@ Wsrep_server_state::Wsrep_server_state(const std::string& name,
, m_service(*this)
{ }
-Wsrep_server_state::~Wsrep_server_state()
-{ }
+Wsrep_server_state::~Wsrep_server_state() = default;
void Wsrep_server_state::init_once(const std::string& name,
const std::string& incoming_address,
diff --git a/storage/archive/ha_archive.h b/storage/archive/ha_archive.h
index 2bb5079868b..2e03ac639b5 100644
--- a/storage/archive/ha_archive.h
+++ b/storage/archive/ha_archive.h
@@ -87,9 +87,7 @@ class ha_archive final : public handler
public:
ha_archive(handlerton *hton, TABLE_SHARE *table_arg);
- ~ha_archive()
- {
- }
+ ~ha_archive() = default;
const char *index_type(uint inx) { return "NONE"; }
ulonglong table_flags() const
{
diff --git a/storage/blackhole/ha_blackhole.h b/storage/blackhole/ha_blackhole.h
index baa140bc04a..04ca65f2a53 100644
--- a/storage/blackhole/ha_blackhole.h
+++ b/storage/blackhole/ha_blackhole.h
@@ -44,9 +44,7 @@ class ha_blackhole final : public handler
public:
ha_blackhole(handlerton *hton, TABLE_SHARE *table_arg);
- ~ha_blackhole()
- {
- }
+ ~ha_blackhole() = default;
/*
The name of the index type that will be used for display
don't implement this method unless you really have indexes
diff --git a/storage/connect/blkfil.h b/storage/connect/blkfil.h
index 61b02c53c14..27e6fd4b166 100644
--- a/storage/connect/blkfil.h
+++ b/storage/connect/blkfil.h
@@ -31,7 +31,7 @@ class DllExport BLOCKFILTER : public BLOCK { /* Block Filter */
virtual void Prints(PGLOBAL g, char *ps, uint z);
protected:
- BLOCKFILTER(void) {} // Standard constructor not to be used
+ BLOCKFILTER(void) = default; // Standard constructor not to be used
// Members
PTDBDOS Tdbp; // Owner TDB
@@ -54,7 +54,7 @@ class DllExport BLKFILLOG : public BLOCKFILTER { /* Logical Op Block Filter */
virtual int BlockEval(PGLOBAL g);
protected:
- BLKFILLOG(void) {} // Standard constructor not to be used
+ BLKFILLOG(void) = default; // Standard constructor not to be used
// Members
PBF *Fil; // Points to Block filter args
@@ -75,7 +75,7 @@ class DllExport BLKFILARI : public BLOCKFILTER { /* Arithm. Op Block Filter */
virtual void MakeValueBitmap(void) {}
protected:
- BLKFILARI(void) {} // Standard constructor not to be used
+ BLKFILARI(void) = default; // Standard constructor not to be used
// Members
PDOSCOL Colp; // Points to column argument
@@ -97,7 +97,7 @@ class DllExport BLKFILAR2 : public BLKFILARI { /* Arithm. Op Block Filter */
virtual void MakeValueBitmap(void);
protected:
- BLKFILAR2(void) {} // Standard constructor not to be used
+ BLKFILAR2(void) = default; // Standard constructor not to be used
// Members
uint Bmp; // The value bitmap used to test blocks
@@ -118,7 +118,7 @@ class DllExport BLKFILMR2 : public BLKFILARI { /* Arithm. Op Block Filter */
virtual void MakeValueBitmap(void);
protected:
- BLKFILMR2(void) {} // Standard constructor not to be used
+ BLKFILMR2(void) = default; // Standard constructor not to be used
// Members
int Nbm; // The number of ULONG bitmaps
@@ -141,7 +141,7 @@ class DllExport BLKSPCARI : public BLOCKFILTER { /* Arithm. Op Block Filter */
virtual int BlockEval(PGLOBAL g);
protected:
- BLKSPCARI(void) {} // Standard constructor not to be used
+ BLKSPCARI(void) = default; // Standard constructor not to be used
// Members
PCOL Cpx; // Point to subquery "constant" column
diff --git a/storage/connect/block.h b/storage/connect/block.h
index e8871277d48..5351c2e6354 100644
--- a/storage/connect/block.h
+++ b/storage/connect/block.h
@@ -55,7 +55,7 @@ class DllExport BLOCK {
void operator delete(void*, long long) {}
void operator delete(void*) {}
- virtual ~BLOCK() {}
+ virtual ~BLOCK() = default;
}; // end of class BLOCK
#endif // !BLOCK_DEFINED
diff --git a/storage/connect/bson.h b/storage/connect/bson.h
index acc36e8e0ed..e3a15a41952 100644
--- a/storage/connect/bson.h
+++ b/storage/connect/bson.h
@@ -165,7 +165,7 @@ public:
protected:
// Default constructor not to be used
- BJSON(void) {}
+ BJSON(void) = default;
}; // end of class BJSON
/***********************************************************************/
@@ -203,5 +203,5 @@ protected:
bool comma; // True if Pretty = 1
// Default constructor not to be used
- BDOC(void) {}
+ BDOC(void) = default;
}; // end of class BDOC
diff --git a/storage/connect/bsonudf.cpp b/storage/connect/bsonudf.cpp
index 2114ed5c2af..f92bdb46727 100644
--- a/storage/connect/bsonudf.cpp
+++ b/storage/connect/bsonudf.cpp
@@ -3572,7 +3572,7 @@ char *bson_item_merge(UDF_INIT *initid, UDF_ARGS *args, char *result,
} // endif Xchk
if (!CheckMemory(g, initid, args, 2, false, false, true)) {
- JTYP type;
+ JTYP type= TYPE_JAR;
BJNX bnx(g);
PBVAL jvp = NULL, top = NULL;
PBVAL jsp[2] = {NULL, NULL};
@@ -5725,7 +5725,7 @@ char *bbin_item_merge(UDF_INIT *initid, UDF_ARGS *args, char *result,
} // endif Xchk
if (!CheckMemory(g, initid, args, 2, false, false, true)) {
- JTYP type;
+ JTYP type = TYPE_JAR;
BJNX bnx(g);
PBVAL jvp = NULL, top = NULL;
PBVAL jsp[2] = {NULL, NULL};
diff --git a/storage/connect/bsonudf.h b/storage/connect/bsonudf.h
index 0fe3715617e..e355fe7b48e 100644
--- a/storage/connect/bsonudf.h
+++ b/storage/connect/bsonudf.h
@@ -143,7 +143,7 @@ protected:
my_bool AddPath(void);
// Default constructor not to be used
- BJNX(void) {}
+ BJNX(void) = default;
// Members
PBVAL Row;
diff --git a/storage/connect/catalog.h b/storage/connect/catalog.h
index 48347d7519e..2649a50cf76 100644
--- a/storage/connect/catalog.h
+++ b/storage/connect/catalog.h
@@ -61,7 +61,7 @@ class DllExport CATALOG {
friend class OEMDEF;
public:
CATALOG(void); // Constructor
- virtual ~CATALOG() { } // Make -Wdelete-non-virtual-dtor happy
+ virtual ~CATALOG() = default; // Make -Wdelete-non-virtual-dtor happy
// Implementation
int GetCblen(void) {return Cblen;}
diff --git a/storage/connect/colblk.h b/storage/connect/colblk.h
index c9712f516b5..e67ba3ba3f9 100644
--- a/storage/connect/colblk.h
+++ b/storage/connect/colblk.h
@@ -177,7 +177,7 @@ class DllExport TIDBLK : public SPCBLK {
protected:
// Default constructor not to be used
- TIDBLK(void) {}
+ TIDBLK(void) = default;
// Members
PCSZ Tname; // The current table name
@@ -200,7 +200,7 @@ class DllExport PRTBLK : public SPCBLK {
protected:
// Default constructor not to be used
- PRTBLK(void) {}
+ PRTBLK(void) = default;
// Members
PCSZ Pname; // The current partition name
@@ -223,7 +223,7 @@ class DllExport SIDBLK : public SPCBLK {
protected:
// Default constructor not to be used
- SIDBLK(void) {}
+ SIDBLK(void) = default;
// Members
PCSZ Sname; // The current server name
diff --git a/storage/connect/csort.h b/storage/connect/csort.h
index 6e700059881..cce01df4199 100644
--- a/storage/connect/csort.h
+++ b/storage/connect/csort.h
@@ -33,7 +33,7 @@ class DllExport CSORT {
public:
// Constructor
CSORT(bool cns, int th = THRESH, int mth = MTHRESH);
- virtual ~CSORT() {}
+ virtual ~CSORT() = default;
protected:
// Implementation
/*********************************************************************/
diff --git a/storage/connect/filamdbf.h b/storage/connect/filamdbf.h
index dfe5cb5cfc4..6cf6331abd4 100644
--- a/storage/connect/filamdbf.h
+++ b/storage/connect/filamdbf.h
@@ -35,7 +35,7 @@ class DllExport DBFBASE {
protected:
// Default constructor, not to be used
- DBFBASE(void) {}
+ DBFBASE(void) = default;
// Members
int Records; /* records in the file */
diff --git a/storage/connect/filter.h b/storage/connect/filter.h
index 12ac3a169c1..0c3fa41046a 100644
--- a/storage/connect/filter.h
+++ b/storage/connect/filter.h
@@ -77,7 +77,7 @@ class DllExport FILTER : public XOBJECT { /* Filter description block */
// PFIL Copy(PTABS t);
protected:
- FILTER(void) {} // Standard constructor not to be used
+ FILTER(void) = default; // Standard constructor not to be used
void Constr(PGLOBAL g, OPVAL opc, int opm, PPARM *tp);
// Members
diff --git a/storage/connect/jsonudf.h b/storage/connect/jsonudf.h
index ada0dbcd96b..4378bddf9ba 100644
--- a/storage/connect/jsonudf.h
+++ b/storage/connect/jsonudf.h
@@ -349,7 +349,7 @@ protected:
my_bool AddPath(void);
// Default constructor not to be used
- JSNX(void) {}
+ JSNX(void) = default;
// Members
PJSON Row;
diff --git a/storage/connect/tabbson.h b/storage/connect/tabbson.h
index 1696f4dfdbc..9d5a8b7daf5 100644
--- a/storage/connect/tabbson.h
+++ b/storage/connect/tabbson.h
@@ -257,7 +257,7 @@ protected:
bool SetArrayOptions(PGLOBAL g, char* p, int i, PSZ nm);
// Default constructor not to be used
- BSONCOL(void) {}
+ BSONCOL(void) = default;
// Members
TDBBSN *Tbp; // To the JSN table block
diff --git a/storage/connect/tabdos.h b/storage/connect/tabdos.h
index 80dfe63845d..22bb5c63ce3 100644
--- a/storage/connect/tabdos.h
+++ b/storage/connect/tabdos.h
@@ -245,7 +245,7 @@ class DllExport DOSCOL : public COLBLK {
bool AddDistinctValue(PGLOBAL g);
// Default constructor not to be used
- DOSCOL(void) {}
+ DOSCOL(void) = default;
// Members
PVBLK Min; // Array of block min values
diff --git a/storage/connect/tabfix.h b/storage/connect/tabfix.h
index 5f859a2bffe..1a0d756bfcf 100644
--- a/storage/connect/tabfix.h
+++ b/storage/connect/tabfix.h
@@ -82,7 +82,7 @@ class DllExport BINCOL : public DOSCOL {
static void SetEndian(void);
protected:
- BINCOL(void) {} // Default constructor not to be used
+ BINCOL(void) = default; // Default constructor not to be used
// Members
static char Endian; // The host endian setting (L or B)
diff --git a/storage/connect/tabfmt.h b/storage/connect/tabfmt.h
index c46b5a3074e..268d00b1724 100644
--- a/storage/connect/tabfmt.h
+++ b/storage/connect/tabfmt.h
@@ -121,7 +121,7 @@ class DllExport CSVCOL : public DOSCOL {
protected:
// Default constructor not to be used
- CSVCOL(void) {}
+ CSVCOL(void) = default;
// Members
int Fldnum; // Field ordinal number (0 based)
diff --git a/storage/connect/tabjmg.h b/storage/connect/tabjmg.h
index cf7cff83b68..06c1462d103 100644
--- a/storage/connect/tabjmg.h
+++ b/storage/connect/tabjmg.h
@@ -118,7 +118,7 @@ public:
protected:
// Default constructor not to be used
- JMGCOL(void) {}
+ JMGCOL(void) = default;
//char *GetProjPath(PGLOBAL g);
//char *Mini(PGLOBAL g, const bson_t *bson, bool b);
diff --git a/storage/connect/tabjson.h b/storage/connect/tabjson.h
index 623e5b6d509..dcf40620dae 100644
--- a/storage/connect/tabjson.h
+++ b/storage/connect/tabjson.h
@@ -238,7 +238,7 @@ public:
PJSON GetRow(PGLOBAL g);
// Default constructor not to be used
- JSONCOL(void) {}
+ JSONCOL(void) = default;
// Members
PGLOBAL G; // Support of parse memory
diff --git a/storage/connect/tabmul.h b/storage/connect/tabmul.h
index a9d3f88cc44..a01e4e7fdf2 100644
--- a/storage/connect/tabmul.h
+++ b/storage/connect/tabmul.h
@@ -237,7 +237,7 @@ class DIRCOL : public COLBLK {
protected:
// Default constructor not to be used
- DIRCOL(void) {}
+ DIRCOL(void) = default;
#if defined(_WIN32)
void SetTimeValue(PGLOBAL g, FILETIME& ftime);
#endif // _WIN32
diff --git a/storage/connect/taboccur.h b/storage/connect/taboccur.h
index 13bc055cd6f..8cd507acb7d 100644
--- a/storage/connect/taboccur.h
+++ b/storage/connect/taboccur.h
@@ -99,7 +99,7 @@ class OCCURCOL : public COLBLK {
protected:
// Default constructor not to be used
- OCCURCOL(void) {}
+ OCCURCOL(void) = default;
// Members
int I;
@@ -121,7 +121,7 @@ class RANKCOL : public COLBLK {
protected:
// Default constructor not to be used
- RANKCOL(void) {}
+ RANKCOL(void) = default;
// Members
}; // end of class RANKCOL
diff --git a/storage/connect/tabpivot.h b/storage/connect/tabpivot.h
index d819d55a61a..0a37804ff87 100644
--- a/storage/connect/tabpivot.h
+++ b/storage/connect/tabpivot.h
@@ -188,7 +188,7 @@ class SRCCOL : public PRXCOL {
protected:
// Default constructor not to be used
- SRCCOL(void) {}
+ SRCCOL(void) = default;
// Members
}; // end of class SRCCOL
diff --git a/storage/connect/tabsys.h b/storage/connect/tabsys.h
index 0c6017af177..0a427b12dae 100644
--- a/storage/connect/tabsys.h
+++ b/storage/connect/tabsys.h
@@ -108,7 +108,7 @@ class INICOL : public COLBLK {
protected:
// Default constructor not to be used
- INICOL(void) {}
+ INICOL(void) = default;
// Members
char *Valbuf; // To the key value buffer
@@ -176,7 +176,7 @@ class XINCOL : public INICOL {
protected:
// Default constructor not to be used
- XINCOL(void) {}
+ XINCOL(void) = default;
// Members
}; // end of class XINICOL
diff --git a/storage/connect/tabutil.h b/storage/connect/tabutil.h
index c8e7e75106f..6cf2b11632b 100644
--- a/storage/connect/tabutil.h
+++ b/storage/connect/tabutil.h
@@ -122,7 +122,7 @@ class DllExport PRXCOL : public COLBLK {
char *Decode(PGLOBAL g, const char *cnm);
// Default constructor not to be used
- PRXCOL(void) {}
+ PRXCOL(void) = default;
// Members
PCOL Colp; // Points to matching table column
diff --git a/storage/connect/tabvct.h b/storage/connect/tabvct.h
index 189a9ae2221..06ccde71bcb 100644
--- a/storage/connect/tabvct.h
+++ b/storage/connect/tabvct.h
@@ -110,7 +110,7 @@ class DllExport VCTCOL : public DOSCOL {
virtual void ReadBlock(PGLOBAL g);
virtual void WriteBlock(PGLOBAL g);
- VCTCOL(void) {} // Default constructor not to be used
+ VCTCOL(void) = default; // Default constructor not to be used
// Members
PVBLK Blk; // Block buffer
diff --git a/storage/connect/tabvir.h b/storage/connect/tabvir.h
index e7313bbae67..b92ca0c50f8 100644
--- a/storage/connect/tabvir.h
+++ b/storage/connect/tabvir.h
@@ -21,7 +21,7 @@ PQRYRES VirColumns(PGLOBAL g, bool info);
class DllExport VIRDEF : public TABDEF { /* Logical table description */
public:
// Constructor
- VIRDEF(void) {}
+ VIRDEF(void) = default;
// Implementation
virtual const char *GetType(void) {return "VIRTUAL";}
@@ -86,7 +86,7 @@ class VIRCOL : public COLBLK {
protected:
// Default constructor not to be used
- VIRCOL(void) {}
+ VIRCOL(void) = default;
// No additional members
}; // end of class VIRCOL
diff --git a/storage/connect/tabxcl.h b/storage/connect/tabxcl.h
index 2ae96703548..08beb5fe6ac 100644
--- a/storage/connect/tabxcl.h
+++ b/storage/connect/tabxcl.h
@@ -95,7 +95,7 @@ class XCLCOL : public PRXCOL {
protected:
// Default constructor not to be used
- XCLCOL(void) {}
+ XCLCOL(void) = default;
// Members
char *Cbuf; // The column buffer
diff --git a/storage/connect/tabzip.h b/storage/connect/tabzip.h
index d36e4dc01d0..3c16fae99bc 100644
--- a/storage/connect/tabzip.h
+++ b/storage/connect/tabzip.h
@@ -23,7 +23,7 @@ class DllExport ZIPDEF : public DOSDEF { /* Table description */
friend class UNZFAM;
public:
// Constructor
- ZIPDEF(void) {}
+ ZIPDEF(void) = default;
// Implementation
virtual const char *GetType(void) {return "ZIP";}
@@ -94,7 +94,7 @@ public:
protected:
// Default constructor not to be used
- ZIPCOL(void) {}
+ ZIPCOL(void) = default;
// Members
TDBZIP *Tdbz;
diff --git a/storage/connect/xtable.h b/storage/connect/xtable.h
index 1b499e09047..58acf550a0b 100644
--- a/storage/connect/xtable.h
+++ b/storage/connect/xtable.h
@@ -264,7 +264,7 @@ class DllExport CATCOL : public COLBLK {
virtual void ReadColumn(PGLOBAL g);
protected:
- CATCOL(void) {} // Default constructor not to be used
+ CATCOL(void) = default; // Default constructor not to be used
// Members
PTDBCAT Tdbp; // Points to ODBC table block
diff --git a/storage/example/ha_example.h b/storage/example/ha_example.h
index 2d3fa6d4216..5d067f7cda9 100644
--- a/storage/example/ha_example.h
+++ b/storage/example/ha_example.h
@@ -68,9 +68,7 @@ class ha_example: public handler
public:
ha_example(handlerton *hton, TABLE_SHARE *table_arg);
- ~ha_example()
- {
- }
+ ~ha_example() = default;
/** @brief
The name of the index type that will be used for display.
diff --git a/storage/federated/ha_federated.cc b/storage/federated/ha_federated.cc
index faaffa21f6b..25b12de3cd5 100644
--- a/storage/federated/ha_federated.cc
+++ b/storage/federated/ha_federated.cc
@@ -1651,7 +1651,7 @@ int ha_federated::open(const char *name, int mode, uint test_if_locked)
class Net_error_handler : public Internal_error_handler
{
public:
- Net_error_handler() {}
+ Net_error_handler() = default;
public:
bool handle_condition(THD *thd, uint sql_errno, const char* sqlstate,
diff --git a/storage/federated/ha_federated.h b/storage/federated/ha_federated.h
index 0c6285f3ac6..fe729f08413 100644
--- a/storage/federated/ha_federated.h
+++ b/storage/federated/ha_federated.h
@@ -121,7 +121,7 @@ private:
int real_connect();
public:
ha_federated(handlerton *hton, TABLE_SHARE *table_arg);
- ~ha_federated() {}
+ ~ha_federated() = default;
/*
Next pointer used in transaction
*/
diff --git a/storage/federatedx/federatedx_io_null.cc b/storage/federatedx/federatedx_io_null.cc
index b1058dbd2f5..8a2394f2150 100644
--- a/storage/federatedx/federatedx_io_null.cc
+++ b/storage/federatedx/federatedx_io_null.cc
@@ -118,9 +118,7 @@ federatedx_io_null::federatedx_io_null(FEDERATEDX_SERVER *aserver)
}
-federatedx_io_null::~federatedx_io_null()
-{
-}
+federatedx_io_null::~federatedx_io_null() = default;
void federatedx_io_null::reset()
diff --git a/storage/federatedx/federatedx_pushdown.cc b/storage/federatedx/federatedx_pushdown.cc
index 0d58e0d8270..e9a9791a859 100644
--- a/storage/federatedx/federatedx_pushdown.cc
+++ b/storage/federatedx/federatedx_pushdown.cc
@@ -144,7 +144,7 @@ ha_federatedx_derived_handler::ha_federatedx_derived_handler(THD *thd,
derived= dt;
}
-ha_federatedx_derived_handler::~ha_federatedx_derived_handler() {}
+ha_federatedx_derived_handler::~ha_federatedx_derived_handler() = default;
int ha_federatedx_derived_handler::init_scan()
{
@@ -281,7 +281,7 @@ ha_federatedx_select_handler::ha_federatedx_select_handler(THD *thd,
select= sel;
}
-ha_federatedx_select_handler::~ha_federatedx_select_handler() {}
+ha_federatedx_select_handler::~ha_federatedx_select_handler() = default;
int ha_federatedx_select_handler::init_scan()
{
diff --git a/storage/federatedx/ha_federatedx.cc b/storage/federatedx/ha_federatedx.cc
index 6199504e04f..598886b8915 100644
--- a/storage/federatedx/ha_federatedx.cc
+++ b/storage/federatedx/ha_federatedx.cc
@@ -1819,7 +1819,7 @@ int ha_federatedx::open(const char *name, int mode, uint test_if_locked)
class Net_error_handler : public Internal_error_handler
{
public:
- Net_error_handler() {}
+ Net_error_handler() = default;
public:
bool handle_condition(THD *thd, uint sql_errno, const char* sqlstate,
diff --git a/storage/federatedx/ha_federatedx.h b/storage/federatedx/ha_federatedx.h
index 3eb7a9c662c..3573c658b11 100644
--- a/storage/federatedx/ha_federatedx.h
+++ b/storage/federatedx/ha_federatedx.h
@@ -316,7 +316,7 @@ private:
int real_connect(FEDERATEDX_SHARE *my_share, uint create_flag);
public:
ha_federatedx(handlerton *hton, TABLE_SHARE *table_arg);
- ~ha_federatedx() {}
+ ~ha_federatedx() = default;
/*
The name of the index type that will be used for display
don't implement this method unless you really have indexes
diff --git a/storage/heap/ha_heap.h b/storage/heap/ha_heap.h
index 3a41028c719..18e0d1a92d5 100644
--- a/storage/heap/ha_heap.h
+++ b/storage/heap/ha_heap.h
@@ -36,7 +36,7 @@ class ha_heap final : public handler
my_bool internal_table;
public:
ha_heap(handlerton *hton, TABLE_SHARE *table);
- ~ha_heap() {}
+ ~ha_heap() = default;
handler *clone(const char *name, MEM_ROOT *mem_root);
const char *index_type(uint inx)
{
diff --git a/storage/innobase/CMakeLists.txt b/storage/innobase/CMakeLists.txt
index e422ef47b89..a61b762f58b 100644
--- a/storage/innobase/CMakeLists.txt
+++ b/storage/innobase/CMakeLists.txt
@@ -75,12 +75,6 @@ IF(WITH_INNODB_EXTRA_DEBUG)
ENDIF()
ADD_FEATURE_INFO(INNODB_EXTRA_DEBUG WITH_INNODB_EXTRA_DEBUG "Extra InnoDB debug checks")
-
-CHECK_FUNCTION_EXISTS(sched_getcpu HAVE_SCHED_GETCPU)
-IF(HAVE_SCHED_GETCPU)
- ADD_DEFINITIONS(-DHAVE_SCHED_GETCPU=1)
-ENDIF()
-
IF(HAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE)
ADD_DEFINITIONS(-DHAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE=1)
ENDIF()
diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc
index f87888d90da..287a2681bd5 100644
--- a/storage/innobase/buf/buf0buf.cc
+++ b/storage/innobase/buf/buf0buf.cc
@@ -1940,28 +1940,22 @@ static void buf_relocate(buf_page_t *bpage, buf_page_t *dpage)
buf_pool.page_hash.replace(chain, bpage, dpage);
}
-/** Register a watch for a page identifier. The caller must hold an
-exclusive page hash latch. The *hash_lock may be released,
-relocated, and reacquired.
-@param id page identifier
-@param chain hash table chain with exclusively held page_hash
-@return a buffer pool block corresponding to id
-@retval nullptr if the block was not present, and a watch was installed */
-inline buf_page_t *buf_pool_t::watch_set(const page_id_t id,
- buf_pool_t::hash_chain &chain)
+buf_page_t *buf_pool_t::watch_set(const page_id_t id,
+ buf_pool_t::hash_chain &chain)
{
ut_ad(&chain == &page_hash.cell_get(id.fold()));
- ut_ad(page_hash.lock_get(chain).is_write_locked());
+ page_hash.lock_get(chain).lock();
-retry:
- if (buf_page_t *bpage= page_hash.get(id, chain))
+ buf_page_t *bpage= page_hash.get(id, chain);
+
+ if (bpage)
{
- if (!watch_is_sentinel(*bpage))
- /* The page was loaded meanwhile. */
- return bpage;
- /* Add to an existing watch. */
+got_block:
bpage->fix();
- return nullptr;
+ if (watch_is_sentinel(*bpage))
+ bpage= nullptr;
+ page_hash.lock_get(chain).unlock();
+ return bpage;
}
page_hash.lock_get(chain).unlock();
@@ -1990,25 +1984,23 @@ retry:
w->set_state(buf_page_t::UNFIXED + 1);
w->id_= id;
- buf_page_t *bpage= page_hash.get(id, chain);
+ page_hash.lock_get(chain).lock();
+ bpage= page_hash.get(id, chain);
if (UNIV_LIKELY_NULL(bpage))
{
w->set_state(buf_page_t::NOT_USED);
- page_hash.lock_get(chain).lock();
mysql_mutex_unlock(&mutex);
- goto retry;
+ goto got_block;
}
- page_hash.lock_get(chain).lock();
ut_ad(w->state() == buf_page_t::UNFIXED + 1);
buf_pool.page_hash.append(chain, w);
mysql_mutex_unlock(&mutex);
+ page_hash.lock_get(chain).unlock();
return nullptr;
}
ut_error;
- mysql_mutex_unlock(&mutex);
- return nullptr;
}
/** Stop watching whether a page has been read in.
@@ -2456,16 +2448,13 @@ loop:
case BUF_PEEK_IF_IN_POOL:
return nullptr;
case BUF_GET_IF_IN_POOL_OR_WATCH:
- /* We cannot easily use a memory transaction here. */
- hash_lock.lock();
+ /* Buffer-fixing inside watch_set() will prevent eviction */
block = reinterpret_cast<buf_block_t*>
(buf_pool.watch_set(page_id, chain));
- /* buffer-fixing will prevent eviction */
- state = block ? block->page.fix() : 0;
- hash_lock.unlock();
if (block) {
- goto got_block;
+ state = block->page.state();
+ goto got_block_fixed;
}
return nullptr;
@@ -2504,6 +2493,7 @@ loop:
got_block:
ut_ad(!block->page.in_zip_hash);
state++;
+got_block_fixed:
ut_ad(state > buf_page_t::FREED);
if (state > buf_page_t::READ_FIX && state < buf_page_t::WRITE_FIX) {
@@ -2713,24 +2703,19 @@ re_evict:
const bool evicted = buf_LRU_free_page(&block->page, true);
space->release();
+ if (!evicted) {
+ block->fix();
+ }
+
+ mysql_mutex_unlock(&buf_pool.mutex);
+
if (evicted) {
- page_hash_latch& hash_lock
- = buf_pool.page_hash.lock_get(chain);
- hash_lock.lock();
- mysql_mutex_unlock(&buf_pool.mutex);
- /* We may set the watch, as it would have
- been set if the page were not in the
- buffer pool in the first place. */
- block= reinterpret_cast<buf_block_t*>(
- mode == BUF_GET_IF_IN_POOL_OR_WATCH
- ? buf_pool.watch_set(page_id, chain)
- : buf_pool.page_hash.get(page_id, chain));
- hash_lock.unlock();
+ if (mode == BUF_GET_IF_IN_POOL_OR_WATCH) {
+ buf_pool.watch_set(page_id, chain);
+ }
return(NULL);
}
- block->fix();
- mysql_mutex_unlock(&buf_pool.mutex);
buf_flush_sync();
state = block->page.state();
@@ -3438,8 +3423,7 @@ or decrypt/decompress just failed.
@retval DB_SUCCESS if page has been read and is not corrupted
@retval DB_PAGE_CORRUPTED if page based on checksum check is corrupted
@retval DB_DECRYPTION_FAILED if page post encryption checksum matches but
-after decryption normal page checksum does not match.
-@retval DB_TABLESPACE_DELETED if accessed tablespace is not found */
+after decryption normal page checksum does not match. */
static dberr_t buf_page_check_corrupt(buf_page_t *bpage,
const fil_node_t &node)
{
@@ -3496,7 +3480,8 @@ static dberr_t buf_page_check_corrupt(buf_page_t *bpage,
@param node data file
@return whether the operation succeeded
@retval DB_PAGE_CORRUPTED if the checksum fails
-@retval DB_DECRYPTION_FAILED if the page cannot be decrypted */
+@retval DB_DECRYPTION_FAILED if the page cannot be decrypted
+@retval DB_FAIL if the page contains the wrong ID */
dberr_t buf_page_t::read_complete(const fil_node_t &node)
{
const page_id_t expected_id{id()};
diff --git a/storage/innobase/buf/buf0lru.cc b/storage/innobase/buf/buf0lru.cc
index 20f7544466f..6d652e72ad8 100644
--- a/storage/innobase/buf/buf0lru.cc
+++ b/storage/innobase/buf/buf0lru.cc
@@ -397,6 +397,11 @@ buf_block_t *buf_LRU_get_free_block(bool have_mutex)
mysql_mutex_assert_owner(&buf_pool.mutex);
goto got_mutex;
}
+ DBUG_EXECUTE_IF("recv_ran_out_of_buffer",
+ if (recv_recovery_is_on()
+ && recv_sys.apply_log_recs) {
+ goto flush_lru;
+ });
mysql_mutex_lock(&buf_pool.mutex);
got_mutex:
buf_LRU_check_size_of_non_data_objects();
@@ -480,7 +485,9 @@ not_found:
removing the block from buf_pool.page_hash and buf_pool.LRU is fairly
involved (particularly in case of ROW_FORMAT=COMPRESSED pages). We
can do that in a separate patch sometime in future. */
-
+#ifndef DBUG_OFF
+flush_lru:
+#endif
if (!buf_flush_LRU(innodb_lru_flush_size)) {
MONITOR_INC(MONITOR_LRU_SINGLE_FLUSH_FAILURE_COUNT);
++flush_failures;
diff --git a/storage/innobase/buf/buf0rea.cc b/storage/innobase/buf/buf0rea.cc
index 4a2ac88d97c..2a1375f27db 100644
--- a/storage/innobase/buf/buf0rea.cc
+++ b/storage/innobase/buf/buf0rea.cc
@@ -331,6 +331,9 @@ nothing_read:
/* The i/o was already completed in space->io() */
*err = bpage->read_complete(*fio.node);
space->release();
+ if (*err == DB_FAIL) {
+ *err = DB_PAGE_CORRUPTED;
+ }
}
return true;
diff --git a/storage/innobase/dict/dict0defrag_bg.cc b/storage/innobase/dict/dict0defrag_bg.cc
index ea2914e52dc..bec6da8e6af 100644
--- a/storage/innobase/dict/dict0defrag_bg.cc
+++ b/storage/innobase/dict/dict0defrag_bg.cc
@@ -314,7 +314,7 @@ btr_get_size_and_reserved(
return ULINT_UNDEFINED;
}
- mtr->s_lock_space(index->table->space);
+ mtr->x_lock_space(index->table->space);
ulint n = fseg_n_reserved_pages(*root, PAGE_HEADER + PAGE_BTR_SEG_LEAF
+ root->page.frame, used, mtr);
diff --git a/storage/innobase/dict/dict0stats.cc b/storage/innobase/dict/dict0stats.cc
index 3c7de3cd040..39f5943d5a4 100644
--- a/storage/innobase/dict/dict0stats.cc
+++ b/storage/innobase/dict/dict0stats.cc
@@ -1490,7 +1490,7 @@ invalid:
goto invalid;
}
- mtr.s_lock_space(index->table->space);
+ mtr.x_lock_space(index->table->space);
ulint dummy, size;
index->stat_index_size
@@ -2696,7 +2696,7 @@ empty_index:
}
uint16_t root_level = btr_page_get_level(root->page.frame);
- mtr.s_lock_space(index->table->space);
+ mtr.x_lock_space(index->table->space);
ulint dummy, size;
result.index_size
= fseg_n_reserved_pages(*root, PAGE_HEADER + PAGE_BTR_SEG_LEAF
diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc
index 067aca49b4c..4918cefb947 100644
--- a/storage/innobase/fil/fil0crypt.cc
+++ b/storage/innobase/fil/fil0crypt.cc
@@ -1678,8 +1678,9 @@ fil_crypt_get_page_throttle(
return NULL;
}
- if (DB_SUCCESS_LOCKED_REC
- != fseg_page_is_allocated(space, state->offset)) {
+ if (offset % (zip_size ? zip_size : srv_page_size)
+ && DB_SUCCESS_LOCKED_REC
+ != fseg_page_is_allocated(space, offset)) {
/* page is already freed */
return NULL;
}
diff --git a/storage/innobase/fsp/fsp0fsp.cc b/storage/innobase/fsp/fsp0fsp.cc
index d63febf01f1..c6044b201fe 100644
--- a/storage/innobase/fsp/fsp0fsp.cc
+++ b/storage/innobase/fsp/fsp0fsp.cc
@@ -2650,7 +2650,7 @@ dberr_t fseg_page_is_allocated(fil_space_t *space, unsigned page)
mtr.start();
if (!space->is_owner())
- mtr.s_lock_space(space);
+ mtr.x_lock_space(space);
if (page >= space->free_limit || page >= space->size_in_header);
else if (const buf_block_t *b=
diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index 8542ae793e9..9e8c317b38a 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -3034,10 +3034,8 @@ ha_innobase::ha_innobase(
/*********************************************************************//**
Destruct ha_innobase handler. */
-ha_innobase::~ha_innobase()
+ha_innobase::~ha_innobase() = default;
/*======================*/
-{
-}
/*********************************************************************//**
Updates the user_thd field in a handle and also allocates a new InnoDB
diff --git a/storage/innobase/ibuf/ibuf0ibuf.cc b/storage/innobase/ibuf/ibuf0ibuf.cc
index e55835425be..fec18439c84 100644
--- a/storage/innobase/ibuf/ibuf0ibuf.cc
+++ b/storage/innobase/ibuf/ibuf0ibuf.cc
@@ -426,6 +426,10 @@ err_exit:
goto err_exit;
}
+ DBUG_EXECUTE_IF("ibuf_init_corrupt",
+ err = DB_CORRUPTION;
+ goto err_exit;);
+
if (page_is_comp(root) || fil_page_get_type(root) != FIL_PAGE_INDEX
|| btr_page_get_index_id(root) != DICT_IBUF_ID_MIN) {
err = DB_CORRUPTION;
diff --git a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
index 5eb245b5d95..c02180ad9ee 100644
--- a/storage/innobase/include/buf0buf.h
+++ b/storage/innobase/include/buf0buf.h
@@ -769,7 +769,8 @@ public:
@param node data file
@return whether the operation succeeded
@retval DB_PAGE_CORRUPTED if the checksum fails
- @retval DB_DECRYPTION_FAILED if the page cannot be decrypted */
+ @retval DB_DECRYPTION_FAILED if the page cannot be decrypted
+ @retval DB_FAIL if the page contains the wrong ID */
dberr_t read_complete(const fil_node_t &node);
/** Note that a block is no longer dirty, while not removing
@@ -1031,7 +1032,7 @@ even after we release the buffer pool mutex. */
class HazardPointer
{
public:
- virtual ~HazardPointer() {}
+ virtual ~HazardPointer() = default;
/** @return current value */
buf_page_t *get() const { mysql_mutex_assert_owner(m_mutex); return m_hp; }
@@ -1070,16 +1071,15 @@ protected:
class FlushHp : public HazardPointer
{
public:
- ~FlushHp() override {}
+ ~FlushHp() override = default;
/** Adjust the value of hp. This happens when some
other thread working on the same list attempts to
remove the hp from the list.
@param bpage buffer block to be compared */
+ MY_ATTRIBUTE((nonnull))
void adjust(const buf_page_t *bpage) override
{
- ut_ad(bpage != NULL);
-
/* We only support reverse traversal for now. */
if (is_hp(bpage))
m_hp= UT_LIST_GET_PREV(list, m_hp);
@@ -1091,15 +1091,15 @@ public:
/** Class implementing buf_pool.LRU hazard pointer */
class LRUHp : public HazardPointer {
public:
- ~LRUHp() override {}
+ ~LRUHp() override = default;
/** Adjust the value of hp. This happens when some
other thread working on the same list attempts to
remove the hp from the list.
@param bpage buffer block to be compared */
+ MY_ATTRIBUTE((nonnull))
void adjust(const buf_page_t *bpage) override
{
- ut_ad(bpage);
/** We only support reverse traversal for now. */
if (is_hp(bpage))
m_hp= UT_LIST_GET_PREV(LRU, m_hp);
@@ -1114,8 +1114,7 @@ itr in that position and the other thread can start scan from
there */
class LRUItr : public LRUHp {
public:
- LRUItr() : LRUHp() {}
- ~LRUItr() override {}
+ ~LRUItr() override = default;
/** Select from where to start a scan. If we have scanned
too deep into the LRU list it resets the value to the tail
@@ -1467,14 +1466,12 @@ public:
return !watch_is_sentinel(*page_hash.get(id, chain));
}
- /** Register a watch for a page identifier. The caller must hold an
- exclusive page hash latch. The *hash_lock may be released,
- relocated, and reacquired.
+ /** Register a watch for a page identifier.
@param id page identifier
- @param chain hash table chain with exclusively held page_hash
- @return a buffer pool block corresponding to id
- @retval nullptr if the block was not present, and a watch was installed */
- inline buf_page_t *watch_set(const page_id_t id, hash_chain &chain);
+ @param chain page_hash.cell_get(id.fold())
+ @return a buffer page corresponding to id
+ @retval nullptr if the block was not present in page_hash */
+ buf_page_t *watch_set(const page_id_t id, hash_chain &chain);
/** Stop watching whether a page has been read in.
watch_set(id) must have returned nullptr before.
diff --git a/storage/innobase/include/dict0types.h b/storage/innobase/include/dict0types.h
index 271e4e1fb76..ec50e8cd951 100644
--- a/storage/innobase/include/dict0types.h
+++ b/storage/innobase/include/dict0types.h
@@ -105,7 +105,7 @@ struct table_name_t
char* m_name;
/** Default constructor */
- table_name_t() {}
+ table_name_t() = default;
/** Constructor */
table_name_t(char* name) : m_name(name) {}
diff --git a/storage/innobase/include/mtr0mtr.h b/storage/innobase/include/mtr0mtr.h
index 299f658e98a..ccb174da596 100644
--- a/storage/innobase/include/mtr0mtr.h
+++ b/storage/innobase/include/mtr0mtr.h
@@ -283,17 +283,6 @@ struct mtr_t {
memo_push(lock, MTR_MEMO_SX_LOCK);
}
- /** Acquire a tablespace S-latch.
- @param space tablespace */
- void s_lock_space(fil_space_t *space)
- {
- ut_ad(space->purpose == FIL_TYPE_TEMPORARY ||
- space->purpose == FIL_TYPE_IMPORT ||
- space->purpose == FIL_TYPE_TABLESPACE);
- memo_push(space, MTR_MEMO_SPACE_S_LOCK);
- space->s_lock();
- }
-
/** Acquire an exclusive tablespace latch.
@param space tablespace */
void x_lock_space(fil_space_t *space);
@@ -355,9 +344,8 @@ public:
/** Check if we are holding tablespace latch
@param space tablespace to search for
- @param shared whether to look for shared latch, instead of exclusive
@return whether space.latch is being held */
- bool memo_contains(const fil_space_t& space, bool shared= false) const
+ bool memo_contains(const fil_space_t& space) const
MY_ATTRIBUTE((warn_unused_result));
#ifdef UNIV_DEBUG
/** Check if we are holding an rw-latch in this mini-transaction
@@ -410,7 +398,7 @@ public:
break;
case MTR_MEMO_MODIFY:
case MTR_MEMO_S_LOCK: case MTR_MEMO_X_LOCK: case MTR_MEMO_SX_LOCK:
- case MTR_MEMO_SPACE_X_LOCK: case MTR_MEMO_SPACE_S_LOCK:
+ case MTR_MEMO_SPACE_X_LOCK:
ut_ad("invalid type" == 0);
}
#endif
diff --git a/storage/innobase/include/mtr0types.h b/storage/innobase/include/mtr0types.h
index 1de31126a88..19db13a12b6 100644
--- a/storage/innobase/include/mtr0types.h
+++ b/storage/innobase/include/mtr0types.h
@@ -342,8 +342,6 @@ enum mtr_memo_type_t {
MTR_MEMO_SX_LOCK = RW_SX_LATCH << 5,
/** wr_lock() on fil_space_t::latch */
- MTR_MEMO_SPACE_X_LOCK = MTR_MEMO_SX_LOCK << 1,
- /** rd_lock() on fil_space_t::latch */
- MTR_MEMO_SPACE_S_LOCK = MTR_MEMO_SX_LOCK << 2
+ MTR_MEMO_SPACE_X_LOCK = MTR_MEMO_SX_LOCK << 1
};
#endif /* !UNIV_INNOCHECKSUM */
diff --git a/storage/innobase/include/rem0rec.h b/storage/innobase/include/rem0rec.h
index dcf26e57e7e..2f038ab349f 100644
--- a/storage/innobase/include/rem0rec.h
+++ b/storage/innobase/include/rem0rec.h
@@ -1223,7 +1223,7 @@ public:
}
/** Destructor */
- ~rec_printer() override {}
+ ~rec_printer() override = default;
private:
/** Copy constructor */
diff --git a/storage/innobase/include/row0mysql.h b/storage/innobase/include/row0mysql.h
index a49e2c3f441..a9f1c87d600 100644
--- a/storage/innobase/include/row0mysql.h
+++ b/storage/innobase/include/row0mysql.h
@@ -702,7 +702,7 @@ struct row_prebuilt_t {
/** Callback for row_mysql_sys_index_iterate() */
struct SysIndexCallback {
- virtual ~SysIndexCallback() { }
+ virtual ~SysIndexCallback() = default;
/** Callback method
@param mtr current mini transaction
diff --git a/storage/innobase/include/trx0purge.h b/storage/innobase/include/trx0purge.h
index 3711599bd8c..ac39d3ec45b 100644
--- a/storage/innobase/include/trx0purge.h
+++ b/storage/innobase/include/trx0purge.h
@@ -56,7 +56,7 @@ public:
typedef trx_rsegs_t::iterator iterator;
typedef trx_rsegs_t::const_iterator const_iterator;
- TrxUndoRsegs() {}
+ TrxUndoRsegs() = default;
/** Constructor */
TrxUndoRsegs(trx_rseg_t& rseg)
diff --git a/storage/innobase/include/ut0new.h b/storage/innobase/include/ut0new.h
index cd116cc3a20..f4183e4c61a 100644
--- a/storage/innobase/include/ut0new.h
+++ b/storage/innobase/include/ut0new.h
@@ -283,7 +283,7 @@ public:
{
}
#else
- ut_allocator() {}
+ ut_allocator() = default;
ut_allocator(PSI_memory_key) {}
#endif /* UNIV_PFS_MEMORY */
diff --git a/storage/innobase/include/ut0ut.h b/storage/innobase/include/ut0ut.h
index 95541ea574e..fe16ce149da 100644
--- a/storage/innobase/include/ut0ut.h
+++ b/storage/innobase/include/ut0ut.h
@@ -323,7 +323,7 @@ class logger
{
protected:
/* This class must not be used directly */
- ATTRIBUTE_COLD ATTRIBUTE_NOINLINE logger() {}
+ ATTRIBUTE_COLD ATTRIBUTE_NOINLINE logger() = default;
public:
template<typename T> ATTRIBUTE_COLD ATTRIBUTE_NOINLINE
logger& operator<<(const T& rhs)
diff --git a/storage/innobase/log/log0recv.cc b/storage/innobase/log/log0recv.cc
index 7d23001962b..add2f6b123c 100644
--- a/storage/innobase/log/log0recv.cc
+++ b/storage/innobase/log/log0recv.cc
@@ -737,8 +737,10 @@ static struct
bool reinit_all()
{
retry:
+ log_sys.latch.wr_unlock();
bool fail= false;
buf_block_t *free_block= buf_LRU_get_free_block(false);
+ log_sys.latch.wr_lock(SRW_LOCK_CALL);
mysql_mutex_lock(&recv_sys.mutex);
for (auto d= defers.begin(); d != defers.end(); )
@@ -1944,7 +1946,7 @@ inline bool page_recv_t::trim(lsn_t start_lsn)
{
while (log.head)
{
- if (log.head->lsn >= start_lsn) return false;
+ if (log.head->lsn > start_lsn) return false;
last_offset= 1; /* the next record must not be same_page */
log_rec_t *next= log.head->next;
recv_sys.free(log.head);
@@ -2570,6 +2572,9 @@ inline recv_sys_t::parse_mtr_result recv_sys_t::parse(store_t store, source &l)
goto record_corrupted;
static_assert(UT_ARR_SIZE(truncated_undo_spaces) ==
TRX_SYS_MAX_UNDO_SPACES, "compatibility");
+ /* The entire undo tablespace will be reinitialized by
+ innodb_undo_log_truncate=ON. Discard old log for all pages. */
+ trim({space_id, 0}, lsn);
truncated_undo_spaces[space_id - srv_undo_space_id_start]=
{ lsn, page_no };
if (undo_space_trunc)
@@ -3459,7 +3464,12 @@ void recv_sys_t::apply(bool last_batch)
const trunc& t= truncated_undo_spaces[id];
if (t.lsn)
{
- trim(page_id_t(id + srv_undo_space_id_start, 0), t.lsn);
+ /* The entire undo tablespace will be reinitialized by
+ innodb_undo_log_truncate=ON. Discard old log for all pages.
+ Even though we recv_sys_t::parse() already invoked trim(),
+ this will be needed in case recovery consists of multiple batches
+ (there was an invocation with !last_batch). */
+ trim({id + srv_undo_space_id_start, 0}, t.lsn);
if (fil_space_t *space = fil_space_get(id + srv_undo_space_id_start))
{
ut_ad(UT_LIST_GET_LEN(space->chain) == 1);
@@ -3473,8 +3483,21 @@ void recv_sys_t::apply(bool last_batch)
fil_system.extend_to_recv_size();
+ /* We must release log_sys.latch and recv_sys.mutex before
+ invoking buf_LRU_get_free_block(). Allocating a block may initiate
+ a redo log write and therefore acquire log_sys.latch. To avoid
+ deadlocks, log_sys.latch must not be acquired while holding
+ recv_sys.mutex. */
+ mysql_mutex_unlock(&mutex);
+ if (!last_batch)
+ log_sys.latch.wr_unlock();
+
buf_block_t *free_block= buf_LRU_get_free_block(false);
+ if (!last_batch)
+ log_sys.latch.wr_lock(SRW_LOCK_CALL);
+ mysql_mutex_lock(&mutex);
+
for (map::iterator p= pages.begin(); p != pages.end(); )
{
const page_id_t page_id= p->first;
@@ -3520,7 +3543,11 @@ erase_for_space:
{
next_free_block:
mysql_mutex_unlock(&mutex);
+ if (!last_batch)
+ log_sys.latch.wr_unlock();
free_block= buf_LRU_get_free_block(false);
+ if (!last_batch)
+ log_sys.latch.wr_lock(SRW_LOCK_CALL);
mysql_mutex_lock(&mutex);
break;
}
@@ -4244,6 +4271,11 @@ read_only_recovery:
|| recv_sys.is_corrupt_fs()) {
goto err_exit;
}
+
+ /* In case of multi-batch recovery,
+ redo log for the last batch is not
+ applied yet. */
+ ut_d(recv_sys.after_apply = false);
}
} else {
ut_ad(recv_sys.pages.empty());
diff --git a/storage/innobase/mtr/mtr0mtr.cc b/storage/innobase/mtr/mtr0mtr.cc
index 0668e65a398..7eaed42b9cd 100644
--- a/storage/innobase/mtr/mtr0mtr.cc
+++ b/storage/innobase/mtr/mtr0mtr.cc
@@ -52,9 +52,6 @@ void mtr_memo_slot_t::release() const
static_cast<fil_space_t*>(object)->set_committed_size();
static_cast<fil_space_t*>(object)->x_unlock();
break;
- case MTR_MEMO_SPACE_S_LOCK:
- static_cast<fil_space_t*>(object)->s_unlock();
- break;
default:
buf_page_t *bpage= static_cast<buf_page_t*>(object);
ut_d(const auto s=)
@@ -263,9 +260,6 @@ void mtr_t::release_unlogged()
static_cast<fil_space_t*>(slot.object)->set_committed_size();
static_cast<fil_space_t*>(slot.object)->x_unlock();
break;
- case MTR_MEMO_SPACE_S_LOCK:
- static_cast<fil_space_t*>(slot.object)->s_unlock();
- break;
case MTR_MEMO_X_LOCK:
case MTR_MEMO_SX_LOCK:
static_cast<index_lock*>(slot.object)->
@@ -406,9 +400,6 @@ void mtr_t::commit()
static_cast<fil_space_t*>(slot.object)->set_committed_size();
static_cast<fil_space_t*>(slot.object)->x_unlock();
break;
- case MTR_MEMO_SPACE_S_LOCK:
- static_cast<fil_space_t*>(slot.object)->s_unlock();
- break;
case MTR_MEMO_X_LOCK:
case MTR_MEMO_SX_LOCK:
static_cast<index_lock*>(slot.object)->
@@ -1316,18 +1307,14 @@ bool mtr_t::have_u_or_x_latch(const buf_block_t &block) const
/** Check if we are holding exclusive tablespace latch
@param space tablespace to search for
-@param shared whether to look for shared latch, instead of exclusive
@return whether space.latch is being held */
-bool mtr_t::memo_contains(const fil_space_t& space, bool shared) const
+bool mtr_t::memo_contains(const fil_space_t& space) const
{
- const mtr_memo_type_t type= shared
- ? MTR_MEMO_SPACE_S_LOCK : MTR_MEMO_SPACE_X_LOCK;
-
for (const mtr_memo_slot_t &slot : m_memo)
{
- if (slot.object == &space && slot.type == type)
+ if (slot.object == &space && slot.type == MTR_MEMO_SPACE_X_LOCK)
{
- ut_ad(shared || space.is_owner());
+ ut_ad(space.is_owner());
return true;
}
}
diff --git a/storage/innobase/rem/rem0cmp.cc b/storage/innobase/rem/rem0cmp.cc
index a77ddafd568..c2b2bc7120d 100644
--- a/storage/innobase/rem/rem0cmp.cc
+++ b/storage/innobase/rem/rem0cmp.cc
@@ -725,9 +725,12 @@ cmp_rec_rec_simple(
/* If we ran out of fields, the ordering columns of rec1 were
equal to rec2. Issue a duplicate key error if needed. */
- if (!null_eq && table && dict_index_is_unique(index)) {
- /* Report erroneous row using new version of table. */
- innobase_rec_to_mysql(table, rec1, index, offsets1);
+ if (!null_eq && index->is_unique()) {
+ if (table) {
+ /* Report erroneous row using new version
+ of table. */
+ innobase_rec_to_mysql(table, rec1, index, offsets1);
+ }
return(0);
}
diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc
index 028f73db9c9..2dcc16130c3 100644
--- a/storage/innobase/row/row0import.cc
+++ b/storage/innobase/row/row0import.cc
@@ -349,8 +349,8 @@ public:
<< index->name;
}
- /** Descructor */
- ~IndexPurge() UNIV_NOTHROW { }
+ /** Destructor */
+ ~IndexPurge() UNIV_NOTHROW = default;
/** Purge delete marked records.
@return DB_SUCCESS or error code. */
@@ -691,7 +691,7 @@ struct FetchIndexRootPages : public AbstractCallback {
m_table(table), m_index(0, 0) UNIV_NOTHROW { }
/** Destructor */
- ~FetchIndexRootPages() UNIV_NOTHROW override { }
+ ~FetchIndexRootPages() UNIV_NOTHROW override = default;
/** Fetch the clustered index root page in the tablespace
@param iter Tablespace iterator
diff --git a/storage/maria/ha_maria.h b/storage/maria/ha_maria.h
index 6b4302145dd..2b8b5dc9742 100644
--- a/storage/maria/ha_maria.h
+++ b/storage/maria/ha_maria.h
@@ -64,7 +64,7 @@ private:
public:
ha_maria(handlerton *hton, TABLE_SHARE * table_arg);
- ~ha_maria() {}
+ ~ha_maria() = default;
handler *clone(const char *name, MEM_ROOT *mem_root) override final;
const char *index_type(uint key_number) override final;
ulonglong table_flags() const override final
diff --git a/storage/maria/ha_s3.cc b/storage/maria/ha_s3.cc
index c00f42d74c1..8c105522c11 100644
--- a/storage/maria/ha_s3.cc
+++ b/storage/maria/ha_s3.cc
@@ -233,7 +233,7 @@ ha_create_table_option s3_table_option_list[]=
ha_s3::ha_s3(handlerton *hton, TABLE_SHARE *table_arg)
- :ha_maria(hton, table_arg), in_alter_table(S3_NO_ALTER)
+ :ha_maria(hton, table_arg), in_alter_table(S3_NO_ALTER), open_args(NULL)
{
/* Remove things that S3 doesn't support */
int_table_flags&= ~(HA_BINLOG_ROW_CAPABLE | HA_BINLOG_STMT_CAPABLE |
diff --git a/storage/maria/s3_func.c b/storage/maria/s3_func.c
index 491a8e0a323..3d18ba8800d 100644
--- a/storage/maria/s3_func.c
+++ b/storage/maria/s3_func.c
@@ -351,7 +351,7 @@ int aria_copy_to_s3(ms3_st *s3_client, const char *aws_bucket,
if (display)
printf("Copying frm file %s\n", filename);
- end= strmov(aws_path_end,"/frm");
+ strmov(aws_path_end,"/frm");
convert_frm_to_s3_format(alloc_block);
/* Note that frm is not compressed! */
@@ -1232,7 +1232,7 @@ static void convert_index_to_s3_format(uchar *header, ulong block_size,
uchar *base_pos;
uint base_offset;
- memcpy(state.header.file_version, header, sizeof(state.header));
+ memcpy(&state.header, header, sizeof(state.header));
base_offset= mi_uint2korr(state.header.base_pos);
base_pos= header + base_offset;
@@ -1251,7 +1251,7 @@ static void convert_index_to_disk_format(uchar *header)
uchar *base_pos;
uint base_offset;
- memcpy(state.header.file_version, header, sizeof(state.header));
+ memcpy(&state.header, header, sizeof(state.header));
base_offset= mi_uint2korr(state.header.base_pos);
base_pos= header + base_offset;
diff --git a/storage/mroonga/lib/mrn_count_skip_checker.cpp b/storage/mroonga/lib/mrn_count_skip_checker.cpp
index dfa1a11d2b8..cd22be31ef2 100644
--- a/storage/mroonga/lib/mrn_count_skip_checker.cpp
+++ b/storage/mroonga/lib/mrn_count_skip_checker.cpp
@@ -40,8 +40,7 @@ namespace mrn {
is_storage_mode_(is_storage_mode) {
}
- CountSkipChecker::~CountSkipChecker() {
- }
+ CountSkipChecker::~CountSkipChecker() = default;
bool CountSkipChecker::check() {
MRN_DBUG_ENTER_METHOD();
diff --git a/storage/mroonga/lib/mrn_database_repairer.cpp b/storage/mroonga/lib/mrn_database_repairer.cpp
index c0c4a90e8f7..08ddd84943e 100644
--- a/storage/mroonga/lib/mrn_database_repairer.cpp
+++ b/storage/mroonga/lib/mrn_database_repairer.cpp
@@ -57,8 +57,7 @@ namespace mrn {
mrn_db_file_suffix_length_(strlen(MRN_DB_FILE_SUFFIX)) {
}
- DatabaseRepairer::~DatabaseRepairer() {
- }
+ DatabaseRepairer::~DatabaseRepairer() = default;
bool DatabaseRepairer::is_crashed(void) {
MRN_DBUG_ENTER_METHOD();
diff --git a/storage/mroonga/lib/mrn_field_normalizer.cpp b/storage/mroonga/lib/mrn_field_normalizer.cpp
index d7a81f749fc..db1af550a14 100644
--- a/storage/mroonga/lib/mrn_field_normalizer.cpp
+++ b/storage/mroonga/lib/mrn_field_normalizer.cpp
@@ -30,8 +30,7 @@ namespace mrn {
field_(field) {
}
- FieldNormalizer::~FieldNormalizer() {
- }
+ FieldNormalizer::~FieldNormalizer() = default;
bool FieldNormalizer::should_normalize() {
MRN_DBUG_ENTER_METHOD();
diff --git a/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp b/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp
index 73639685d0e..dd3165cdadf 100644
--- a/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp
+++ b/storage/mroonga/lib/mrn_multiple_column_key_codec.cpp
@@ -70,8 +70,7 @@ namespace mrn {
key_info_(key_info) {
}
- MultipleColumnKeyCodec::~MultipleColumnKeyCodec() {
- }
+ MultipleColumnKeyCodec::~MultipleColumnKeyCodec() = default;
int MultipleColumnKeyCodec::encode(const uchar *mysql_key,
uint mysql_key_length,
diff --git a/storage/mroonga/lib/mrn_query_parser.cpp b/storage/mroonga/lib/mrn_query_parser.cpp
index 92387e259a8..b32ebd2c443 100644
--- a/storage/mroonga/lib/mrn_query_parser.cpp
+++ b/storage/mroonga/lib/mrn_query_parser.cpp
@@ -44,8 +44,7 @@ namespace mrn {
match_columns_(match_columns) {
}
- QueryParser::~QueryParser() {
- }
+ QueryParser::~QueryParser() = default;
grn_rc QueryParser::parse(const char *query, size_t query_length) {
MRN_DBUG_ENTER_METHOD();
diff --git a/storage/mroonga/lib/mrn_time_converter.cpp b/storage/mroonga/lib/mrn_time_converter.cpp
index 9bb8d89a082..7d7555bb47a 100644
--- a/storage/mroonga/lib/mrn_time_converter.cpp
+++ b/storage/mroonga/lib/mrn_time_converter.cpp
@@ -33,11 +33,9 @@
#define MRN_CLASS_NAME "mrn::TimeConverter"
namespace mrn {
- TimeConverter::TimeConverter() {
- }
+ TimeConverter::TimeConverter() = default;
- TimeConverter::~TimeConverter() {
- }
+ TimeConverter::~TimeConverter() = default;
time_t TimeConverter::tm_to_time_gm(struct tm *time, bool *truncated) {
MRN_DBUG_ENTER_METHOD();
diff --git a/storage/mroonga/vendor/groonga/lib/dat/array.hpp b/storage/mroonga/vendor/groonga/lib/dat/array.hpp
index de60e3bd590..58186ff4127 100644
--- a/storage/mroonga/vendor/groonga/lib/dat/array.hpp
+++ b/storage/mroonga/vendor/groonga/lib/dat/array.hpp
@@ -33,7 +33,7 @@ class GRN_DAT_API Array {
}
template <UInt32 U>
explicit Array(T (&array)[U]) : ptr_(array), size_(U) {}
- ~Array() {}
+ ~Array() = default;
const T &operator[](UInt32 i) const {
GRN_DAT_DEBUG_THROW_IF(i >= size_);
diff --git a/storage/mroonga/vendor/groonga/lib/dat/cursor.hpp b/storage/mroonga/vendor/groonga/lib/dat/cursor.hpp
index 357b5250e99..740a56edfde 100644
--- a/storage/mroonga/vendor/groonga/lib/dat/cursor.hpp
+++ b/storage/mroonga/vendor/groonga/lib/dat/cursor.hpp
@@ -25,8 +25,8 @@ namespace dat {
class GRN_DAT_API Cursor {
public:
- Cursor() {}
- virtual ~Cursor() {}
+ Cursor() = default;
+ virtual ~Cursor() = default;
virtual void close() = 0;
diff --git a/storage/mroonga/vendor/groonga/lib/dat/dat.hpp b/storage/mroonga/vendor/groonga/lib/dat/dat.hpp
index 1afbd0955bc..b6e2893ad07 100644
--- a/storage/mroonga/vendor/groonga/lib/dat/dat.hpp
+++ b/storage/mroonga/vendor/groonga/lib/dat/dat.hpp
@@ -175,12 +175,8 @@ class Exception : public std::exception {
file_(file),
line_(line),
what_((what != NULL) ? what : "") {}
- Exception(const Exception &ex) throw()
- : std::exception(ex),
- file_(ex.file_),
- line_(ex.line_),
- what_(ex.what_) {}
- virtual ~Exception() throw() {}
+ Exception(const Exception &ex) throw() = default;
+ virtual ~Exception() throw() = default;
virtual ErrorCode code() const throw() = 0;
virtual const char *file() const throw() {
@@ -208,7 +204,7 @@ class Error : public Exception {
: Exception(file, line, what) {}
Error(const Error &ex) throw()
: Exception(ex) {}
- virtual ~Error() throw() {}
+ virtual ~Error() throw() = default;
virtual ErrorCode code() const throw() {
return T;
diff --git a/storage/mroonga/vendor/groonga/lib/dat/id-cursor.cpp b/storage/mroonga/vendor/groonga/lib/dat/id-cursor.cpp
index de969839586..d3caf510dcd 100644
--- a/storage/mroonga/vendor/groonga/lib/dat/id-cursor.cpp
+++ b/storage/mroonga/vendor/groonga/lib/dat/id-cursor.cpp
@@ -33,7 +33,7 @@ IdCursor::IdCursor()
end_(INVALID_KEY_ID),
count_(0) {}
-IdCursor::~IdCursor() {}
+IdCursor::~IdCursor() = default;
void IdCursor::open(const Trie &trie,
const String &min_str,
diff --git a/storage/mroonga/vendor/groonga/lib/dat/key.hpp b/storage/mroonga/vendor/groonga/lib/dat/key.hpp
index eb0324cd8d3..717ad90a715 100644
--- a/storage/mroonga/vendor/groonga/lib/dat/key.hpp
+++ b/storage/mroonga/vendor/groonga/lib/dat/key.hpp
@@ -99,7 +99,7 @@ class GRN_DAT_API Key {
// Disallows instantiation.
Key() : id_and_length_low_(INVALID_KEY_ID << 4), length_high_(0) {}
- ~Key() {}
+ ~Key() = default;
// Disallows copy and assignment.
Key(const Key &);
diff --git a/storage/mroonga/vendor/groonga/lib/dat/predictive-cursor.cpp b/storage/mroonga/vendor/groonga/lib/dat/predictive-cursor.cpp
index 67520305703..d9fd995beae 100644
--- a/storage/mroonga/vendor/groonga/lib/dat/predictive-cursor.cpp
+++ b/storage/mroonga/vendor/groonga/lib/dat/predictive-cursor.cpp
@@ -35,7 +35,7 @@ PredictiveCursor::PredictiveCursor()
end_(0),
min_length_(0) {}
-PredictiveCursor::~PredictiveCursor() {}
+PredictiveCursor::~PredictiveCursor() = default;
void PredictiveCursor::open(const Trie &trie,
const String &str,
diff --git a/storage/mroonga/vendor/groonga/lib/dat/prefix-cursor.cpp b/storage/mroonga/vendor/groonga/lib/dat/prefix-cursor.cpp
index 83adeb3731e..5f491c6644f 100644
--- a/storage/mroonga/vendor/groonga/lib/dat/prefix-cursor.cpp
+++ b/storage/mroonga/vendor/groonga/lib/dat/prefix-cursor.cpp
@@ -33,7 +33,7 @@ PrefixCursor::PrefixCursor()
cur_(0),
end_(0) {}
-PrefixCursor::~PrefixCursor() {}
+PrefixCursor::~PrefixCursor() = default;
void PrefixCursor::open(const Trie &trie,
const String &str,
diff --git a/storage/mroonga/vendor/groonga/lib/dat/string.hpp b/storage/mroonga/vendor/groonga/lib/dat/string.hpp
index aead21cac18..281333ee18f 100644
--- a/storage/mroonga/vendor/groonga/lib/dat/string.hpp
+++ b/storage/mroonga/vendor/groonga/lib/dat/string.hpp
@@ -35,9 +35,7 @@ class GRN_DAT_API String {
explicit String(const char (&str)[T])
: ptr_(reinterpret_cast<const UInt8 *>(str)),
length_(T - 1) {}
- String(const String &rhs)
- : ptr_(rhs.ptr_),
- length_(rhs.length_) {}
+ String(const String &rhs) = default;
String &operator=(const String &rhs) {
set_ptr(rhs.ptr());
diff --git a/storage/mroonga/vendor/groonga/lib/dat/trie.cpp b/storage/mroonga/vendor/groonga/lib/dat/trie.cpp
index b2c6a84ffa7..47d53209953 100644
--- a/storage/mroonga/vendor/groonga/lib/dat/trie.cpp
+++ b/storage/mroonga/vendor/groonga/lib/dat/trie.cpp
@@ -55,7 +55,7 @@ Trie::Trie()
entries_(),
key_buf_() {}
-Trie::~Trie() {}
+Trie::~Trie() = default;
void Trie::create(const char *file_name,
UInt64 file_size,
diff --git a/storage/myisam/ha_myisam.h b/storage/myisam/ha_myisam.h
index 3843004cc6e..c4c46a63afa 100644
--- a/storage/myisam/ha_myisam.h
+++ b/storage/myisam/ha_myisam.h
@@ -53,7 +53,7 @@ class ha_myisam final : public handler
public:
ha_myisam(handlerton *hton, TABLE_SHARE *table_arg);
- ~ha_myisam() {}
+ ~ha_myisam() = default;
handler *clone(const char *name, MEM_ROOT *mem_root);
const char *index_type(uint key_number);
ulonglong table_flags() const { return int_table_flags; }
diff --git a/storage/perfschema/cursor_by_account.h b/storage/perfschema/cursor_by_account.h
index 30ee3761f37..59adf2e0fc8 100644
--- a/storage/perfschema/cursor_by_account.h
+++ b/storage/perfschema/cursor_by_account.h
@@ -51,8 +51,7 @@ protected:
cursor_by_account(const PFS_engine_table_share *share);
public:
- ~cursor_by_account()
- {}
+ ~cursor_by_account() = default;
protected:
virtual void make_row(PFS_account *account)= 0;
diff --git a/storage/perfschema/cursor_by_host.h b/storage/perfschema/cursor_by_host.h
index e7ae47fef72..a2ddae4b644 100644
--- a/storage/perfschema/cursor_by_host.h
+++ b/storage/perfschema/cursor_by_host.h
@@ -51,8 +51,7 @@ protected:
cursor_by_host(const PFS_engine_table_share *share);
public:
- ~cursor_by_host()
- {}
+ ~cursor_by_host() = default;
protected:
virtual void make_row(PFS_host *host)= 0;
diff --git a/storage/perfschema/cursor_by_thread.h b/storage/perfschema/cursor_by_thread.h
index 910291c2be3..89d97997a41 100644
--- a/storage/perfschema/cursor_by_thread.h
+++ b/storage/perfschema/cursor_by_thread.h
@@ -51,8 +51,7 @@ protected:
cursor_by_thread(const PFS_engine_table_share *share);
public:
- ~cursor_by_thread()
- {}
+ ~cursor_by_thread() = default;
protected:
virtual void make_row(PFS_thread *thread)= 0;
diff --git a/storage/perfschema/cursor_by_thread_connect_attr.h b/storage/perfschema/cursor_by_thread_connect_attr.h
index aa1b63ad51e..3c273708e39 100644
--- a/storage/perfschema/cursor_by_thread_connect_attr.h
+++ b/storage/perfschema/cursor_by_thread_connect_attr.h
@@ -70,8 +70,7 @@ protected:
cursor_by_thread_connect_attr(const PFS_engine_table_share *share);
public:
- ~cursor_by_thread_connect_attr()
- {}
+ ~cursor_by_thread_connect_attr() = default;
protected:
virtual void make_row(PFS_thread *thread, uint ordinal)= 0;
diff --git a/storage/perfschema/cursor_by_user.h b/storage/perfschema/cursor_by_user.h
index ca4fef9209c..f5b6800d9b1 100644
--- a/storage/perfschema/cursor_by_user.h
+++ b/storage/perfschema/cursor_by_user.h
@@ -51,8 +51,7 @@ protected:
cursor_by_user(const PFS_engine_table_share *share);
public:
- ~cursor_by_user()
- {}
+ ~cursor_by_user() = default;
protected:
virtual void make_row(PFS_user *user)= 0;
diff --git a/storage/perfschema/ha_perfschema.cc b/storage/perfschema/ha_perfschema.cc
index 982876216aa..57aa40c7e86 100644
--- a/storage/perfschema/ha_perfschema.cc
+++ b/storage/perfschema/ha_perfschema.cc
@@ -238,8 +238,7 @@ ha_perfschema::ha_perfschema(handlerton *hton, TABLE_SHARE *share)
: handler(hton, share), m_table_share(NULL), m_table(NULL)
{}
-ha_perfschema::~ha_perfschema()
-{}
+ha_perfschema::~ha_perfschema() = default;
int ha_perfschema::open(const char *name, int mode, uint test_if_locked)
{
diff --git a/storage/perfschema/pfs_engine_table.cc b/storage/perfschema/pfs_engine_table.cc
index d8646938bdb..6a9351b9d91 100644
--- a/storage/perfschema/pfs_engine_table.cc
+++ b/storage/perfschema/pfs_engine_table.cc
@@ -670,11 +670,9 @@ int PFS_engine_table::update_row_values(TABLE *,
class PFS_internal_schema_access : public ACL_internal_schema_access
{
public:
- PFS_internal_schema_access()
- {}
+ PFS_internal_schema_access() = default;
- ~PFS_internal_schema_access()
- {}
+ ~PFS_internal_schema_access() = default;
ACL_internal_access_result check(privilege_t want_access,
privilege_t *save_priv) const;
diff --git a/storage/perfschema/pfs_engine_table.h b/storage/perfschema/pfs_engine_table.h
index 6280a3799b3..1f31c4fcdf6 100644
--- a/storage/perfschema/pfs_engine_table.h
+++ b/storage/perfschema/pfs_engine_table.h
@@ -125,8 +125,7 @@ public:
void get_normalizer(PFS_instr_class *instr_class);
/** Destructor. */
- virtual ~PFS_engine_table()
- {}
+ virtual ~PFS_engine_table() = default;
/**
Helper, assign a value to a long field.
@@ -337,11 +336,9 @@ struct PFS_engine_table_share
class PFS_readonly_acl : public ACL_internal_table_access
{
public:
- PFS_readonly_acl()
- {}
+ PFS_readonly_acl() = default;
- ~PFS_readonly_acl()
- {}
+ ~PFS_readonly_acl() = default;
virtual ACL_internal_access_result check(privilege_t want_access,
privilege_t *save_priv) const;
@@ -357,11 +354,9 @@ extern PFS_readonly_acl pfs_readonly_acl;
class PFS_truncatable_acl : public ACL_internal_table_access
{
public:
- PFS_truncatable_acl()
- {}
+ PFS_truncatable_acl() = default;
- ~PFS_truncatable_acl()
- {}
+ ~PFS_truncatable_acl() = default;
virtual ACL_internal_access_result check(privilege_t want_access,
privilege_t *save_priv) const;
@@ -377,11 +372,9 @@ extern PFS_truncatable_acl pfs_truncatable_acl;
class PFS_updatable_acl : public ACL_internal_table_access
{
public:
- PFS_updatable_acl()
- {}
+ PFS_updatable_acl() = default;
- ~PFS_updatable_acl()
- {}
+ ~PFS_updatable_acl() = default;
ACL_internal_access_result check(privilege_t want_access,
privilege_t *save_priv) const;
@@ -397,11 +390,9 @@ extern PFS_updatable_acl pfs_updatable_acl;
class PFS_editable_acl : public ACL_internal_table_access
{
public:
- PFS_editable_acl()
- {}
+ PFS_editable_acl() = default;
- ~PFS_editable_acl()
- {}
+ ~PFS_editable_acl() = default;
ACL_internal_access_result check(privilege_t want_access,
privilege_t *save_priv) const;
@@ -416,11 +407,9 @@ extern PFS_editable_acl pfs_editable_acl;
class PFS_unknown_acl : public ACL_internal_table_access
{
public:
- PFS_unknown_acl()
- {}
+ PFS_unknown_acl() = default;
- ~PFS_unknown_acl()
- {}
+ ~PFS_unknown_acl() = default;
ACL_internal_access_result check(privilege_t want_access,
privilege_t *save_priv) const;
diff --git a/storage/perfschema/pfs_visitor.cc b/storage/perfschema/pfs_visitor.cc
index 4cb0673f1b2..17ef39448f9 100644
--- a/storage/perfschema/pfs_visitor.cc
+++ b/storage/perfschema/pfs_visitor.cc
@@ -895,8 +895,7 @@ PFS_connection_wait_visitor
m_index= klass->m_event_name_index;
}
-PFS_connection_wait_visitor::~PFS_connection_wait_visitor()
-{}
+PFS_connection_wait_visitor::~PFS_connection_wait_visitor() = default;
void PFS_connection_wait_visitor::visit_global()
{
@@ -959,12 +958,9 @@ void PFS_connection_wait_visitor::visit_thread(PFS_thread *pfs)
}
}
-PFS_connection_all_wait_visitor
-::PFS_connection_all_wait_visitor()
-{}
+PFS_connection_all_wait_visitor::PFS_connection_all_wait_visitor() = default;
-PFS_connection_all_wait_visitor::~PFS_connection_all_wait_visitor()
-{}
+PFS_connection_all_wait_visitor::~PFS_connection_all_wait_visitor() = default;
void PFS_connection_all_wait_visitor::visit_global()
{
@@ -1010,8 +1006,7 @@ PFS_connection_stage_visitor::PFS_connection_stage_visitor(PFS_stage_class *klas
m_index= klass->m_event_name_index;
}
-PFS_connection_stage_visitor::~PFS_connection_stage_visitor()
-{}
+PFS_connection_stage_visitor::~PFS_connection_stage_visitor() = default;
void PFS_connection_stage_visitor::visit_global()
{
@@ -1064,8 +1059,7 @@ PFS_connection_statement_visitor
m_index= klass->m_event_name_index;
}
-PFS_connection_statement_visitor::~PFS_connection_statement_visitor()
-{}
+PFS_connection_statement_visitor::~PFS_connection_statement_visitor() = default;
void PFS_connection_statement_visitor::visit_global()
{
@@ -1114,11 +1108,10 @@ void PFS_connection_statement_visitor::visit_thread(PFS_thread *pfs)
/** Instance wait visitor */
PFS_connection_all_statement_visitor
-::PFS_connection_all_statement_visitor()
-{}
+::PFS_connection_all_statement_visitor() = default;
-PFS_connection_all_statement_visitor::~PFS_connection_all_statement_visitor()
-{}
+PFS_connection_all_statement_visitor
+::~PFS_connection_all_statement_visitor() = default;
void PFS_connection_all_statement_visitor::visit_global()
{
@@ -1259,11 +1252,9 @@ void PFS_connection_all_transaction_visitor::visit_thread(PFS_thread *pfs)
}
#endif
-PFS_connection_stat_visitor::PFS_connection_stat_visitor()
-{}
+PFS_connection_stat_visitor::PFS_connection_stat_visitor() = default;
-PFS_connection_stat_visitor::~PFS_connection_stat_visitor()
-{}
+PFS_connection_stat_visitor::~PFS_connection_stat_visitor() = default;
void PFS_connection_stat_visitor::visit_global()
{}
@@ -1360,8 +1351,7 @@ PFS_connection_status_visitor(STATUS_VAR *status_vars) : m_status_vars(status_va
memset(m_status_vars, 0, sizeof(STATUS_VAR));
}
-PFS_connection_status_visitor::~PFS_connection_status_visitor()
-{}
+PFS_connection_status_visitor::~PFS_connection_status_visitor() = default;
/** Aggregate from global status. */
void PFS_connection_status_visitor::visit_global()
@@ -1396,11 +1386,9 @@ void PFS_connection_status_visitor::visit_THD(THD *thd)
}
-PFS_instance_wait_visitor::PFS_instance_wait_visitor()
-{}
+PFS_instance_wait_visitor::PFS_instance_wait_visitor() = default;
-PFS_instance_wait_visitor::~PFS_instance_wait_visitor()
-{}
+PFS_instance_wait_visitor::~PFS_instance_wait_visitor() = default;
void PFS_instance_wait_visitor::visit_mutex_class(PFS_mutex_class *pfs)
{
@@ -1460,11 +1448,9 @@ void PFS_instance_wait_visitor::visit_socket(PFS_socket *pfs)
/** Table IO wait visitor */
-PFS_object_wait_visitor::PFS_object_wait_visitor()
-{}
+PFS_object_wait_visitor::PFS_object_wait_visitor() = default;
-PFS_object_wait_visitor::~PFS_object_wait_visitor()
-{}
+PFS_object_wait_visitor::~PFS_object_wait_visitor() = default;
void PFS_object_wait_visitor::visit_global()
{
@@ -1488,11 +1474,9 @@ void PFS_object_wait_visitor::visit_table(PFS_table *pfs)
}
}
-PFS_table_io_wait_visitor::PFS_table_io_wait_visitor()
-{}
+PFS_table_io_wait_visitor::PFS_table_io_wait_visitor() = default;
-PFS_table_io_wait_visitor::~PFS_table_io_wait_visitor()
-{}
+PFS_table_io_wait_visitor::~PFS_table_io_wait_visitor() = default;
void PFS_table_io_wait_visitor::visit_global()
{
@@ -1545,11 +1529,9 @@ void PFS_table_io_wait_visitor::visit_table(PFS_table *pfs)
/** Table IO stat visitor */
-PFS_table_io_stat_visitor::PFS_table_io_stat_visitor()
-{}
+PFS_table_io_stat_visitor::PFS_table_io_stat_visitor() = default;
-PFS_table_io_stat_visitor::~PFS_table_io_stat_visitor()
-{}
+PFS_table_io_stat_visitor::~PFS_table_io_stat_visitor() = default;
void PFS_table_io_stat_visitor::visit_table_share(PFS_table_share *pfs)
{
@@ -1591,11 +1573,9 @@ void PFS_table_io_stat_visitor::visit_table(PFS_table *pfs)
/** Index IO stat visitor */
-PFS_index_io_stat_visitor::PFS_index_io_stat_visitor()
-{}
+PFS_index_io_stat_visitor::PFS_index_io_stat_visitor() = default;
-PFS_index_io_stat_visitor::~PFS_index_io_stat_visitor()
-{}
+PFS_index_io_stat_visitor::~PFS_index_io_stat_visitor() = default;
void PFS_index_io_stat_visitor::visit_table_share_index(PFS_table_share *pfs, uint index)
{
@@ -1613,11 +1593,9 @@ void PFS_index_io_stat_visitor::visit_table_index(PFS_table *pfs, uint index)
/** Table lock wait visitor */
-PFS_table_lock_wait_visitor::PFS_table_lock_wait_visitor()
-{}
+PFS_table_lock_wait_visitor::PFS_table_lock_wait_visitor() = default;
-PFS_table_lock_wait_visitor::~PFS_table_lock_wait_visitor()
-{}
+PFS_table_lock_wait_visitor::~PFS_table_lock_wait_visitor() = default;
void PFS_table_lock_wait_visitor::visit_global()
{
@@ -1636,11 +1614,9 @@ void PFS_table_lock_wait_visitor::visit_table(PFS_table *pfs)
/** Table lock stat visitor */
-PFS_table_lock_stat_visitor::PFS_table_lock_stat_visitor()
-{}
+PFS_table_lock_stat_visitor::PFS_table_lock_stat_visitor() = default;
-PFS_table_lock_stat_visitor::~PFS_table_lock_stat_visitor()
-{}
+PFS_table_lock_stat_visitor::~PFS_table_lock_stat_visitor() = default;
void PFS_table_lock_stat_visitor::visit_table_share(PFS_table_share *pfs)
{
@@ -1656,11 +1632,11 @@ void PFS_table_lock_stat_visitor::visit_table(PFS_table *pfs)
m_stat.aggregate(& pfs->m_table_stat.m_lock_stat);
}
-PFS_instance_socket_io_stat_visitor::PFS_instance_socket_io_stat_visitor()
-{}
+PFS_instance_socket_io_stat_visitor
+::PFS_instance_socket_io_stat_visitor() = default;
-PFS_instance_socket_io_stat_visitor::~PFS_instance_socket_io_stat_visitor()
-{}
+PFS_instance_socket_io_stat_visitor
+::~PFS_instance_socket_io_stat_visitor() = default;
void PFS_instance_socket_io_stat_visitor::visit_socket_class(PFS_socket_class *pfs)
{
@@ -1674,11 +1650,11 @@ void PFS_instance_socket_io_stat_visitor::visit_socket(PFS_socket *pfs)
m_socket_io_stat.aggregate(&pfs->m_socket_stat.m_io_stat);
}
-PFS_instance_file_io_stat_visitor::PFS_instance_file_io_stat_visitor()
-{}
+PFS_instance_file_io_stat_visitor
+::PFS_instance_file_io_stat_visitor() = default;
-PFS_instance_file_io_stat_visitor::~PFS_instance_file_io_stat_visitor()
-{}
+PFS_instance_file_io_stat_visitor
+::~PFS_instance_file_io_stat_visitor() = default;
void PFS_instance_file_io_stat_visitor::visit_file_class(PFS_file_class *pfs)
{
diff --git a/storage/perfschema/pfs_visitor.h b/storage/perfschema/pfs_visitor.h
index 4644888ea33..c5e5f826b7c 100644
--- a/storage/perfschema/pfs_visitor.h
+++ b/storage/perfschema/pfs_visitor.h
@@ -67,8 +67,8 @@ struct PFS_connection_slice;
class PFS_connection_visitor
{
public:
- PFS_connection_visitor() {}
- virtual ~PFS_connection_visitor() {}
+ PFS_connection_visitor() = default;
+ virtual ~PFS_connection_visitor() = default;
/** Visit all connections. */
virtual void visit_global() {}
/** Visit all connections of a host. */
@@ -159,8 +159,8 @@ public:
class PFS_instance_visitor
{
public:
- PFS_instance_visitor() {}
- virtual ~PFS_instance_visitor() {}
+ PFS_instance_visitor() = default;
+ virtual ~PFS_instance_visitor() = default;
/** Visit a mutex class. */
virtual void visit_mutex_class(PFS_mutex_class *pfs) {}
/** Visit a rwlock class. */
@@ -270,8 +270,8 @@ public:
class PFS_object_visitor
{
public:
- PFS_object_visitor() {}
- virtual ~PFS_object_visitor() {}
+ PFS_object_visitor() = default;
+ virtual ~PFS_object_visitor() = default;
/** Visit global data. */
virtual void visit_global() {}
/** Visit a table share. */
diff --git a/storage/perfschema/table_accounts.h b/storage/perfschema/table_accounts.h
index f44d05b2700..239f278051d 100644
--- a/storage/perfschema/table_accounts.h
+++ b/storage/perfschema/table_accounts.h
@@ -67,8 +67,7 @@ protected:
table_accounts();
public:
- ~table_accounts()
- {}
+ ~table_accounts() = default;
private:
virtual void make_row(PFS_account *pfs);
diff --git a/storage/perfschema/table_all_instr.h b/storage/perfschema/table_all_instr.h
index 7dfb27c6032..6895b0b2c47 100644
--- a/storage/perfschema/table_all_instr.h
+++ b/storage/perfschema/table_all_instr.h
@@ -84,8 +84,7 @@ protected:
table_all_instr(const PFS_engine_table_share *share);
public:
- ~table_all_instr()
- {}
+ ~table_all_instr() = default;
protected:
/**
diff --git a/storage/perfschema/table_esgs_by_account_by_event_name.h b/storage/perfschema/table_esgs_by_account_by_event_name.h
index dd805f4d038..98bf82e2b96 100644
--- a/storage/perfschema/table_esgs_by_account_by_event_name.h
+++ b/storage/perfschema/table_esgs_by_account_by_event_name.h
@@ -105,8 +105,7 @@ protected:
table_esgs_by_account_by_event_name();
public:
- ~table_esgs_by_account_by_event_name()
- {}
+ ~table_esgs_by_account_by_event_name() = default;
protected:
void make_row(PFS_account *account, PFS_stage_class *klass);
diff --git a/storage/perfschema/table_esgs_by_host_by_event_name.h b/storage/perfschema/table_esgs_by_host_by_event_name.h
index 674b6bfb883..64349ecc7d9 100644
--- a/storage/perfschema/table_esgs_by_host_by_event_name.h
+++ b/storage/perfschema/table_esgs_by_host_by_event_name.h
@@ -105,8 +105,7 @@ protected:
table_esgs_by_host_by_event_name();
public:
- ~table_esgs_by_host_by_event_name()
- {}
+ ~table_esgs_by_host_by_event_name() = default;
protected:
void make_row(PFS_host *host, PFS_stage_class *klass);
diff --git a/storage/perfschema/table_esgs_by_thread_by_event_name.h b/storage/perfschema/table_esgs_by_thread_by_event_name.h
index d009aabbdfc..4f32d76e256 100644
--- a/storage/perfschema/table_esgs_by_thread_by_event_name.h
+++ b/storage/perfschema/table_esgs_by_thread_by_event_name.h
@@ -109,8 +109,7 @@ protected:
table_esgs_by_thread_by_event_name();
public:
- ~table_esgs_by_thread_by_event_name()
- {}
+ ~table_esgs_by_thread_by_event_name() = default;
protected:
void make_row(PFS_thread *thread, PFS_stage_class *klass);
diff --git a/storage/perfschema/table_esgs_by_user_by_event_name.h b/storage/perfschema/table_esgs_by_user_by_event_name.h
index a62578ca9b6..3a211d19ad4 100644
--- a/storage/perfschema/table_esgs_by_user_by_event_name.h
+++ b/storage/perfschema/table_esgs_by_user_by_event_name.h
@@ -110,8 +110,7 @@ protected:
table_esgs_by_user_by_event_name();
public:
- ~table_esgs_by_user_by_event_name()
- {}
+ ~table_esgs_by_user_by_event_name() = default;
protected:
void make_row(PFS_user *user, PFS_stage_class *klass);
diff --git a/storage/perfschema/table_esgs_global_by_event_name.h b/storage/perfschema/table_esgs_global_by_event_name.h
index ab70e8303ca..013e04308eb 100644
--- a/storage/perfschema/table_esgs_global_by_event_name.h
+++ b/storage/perfschema/table_esgs_global_by_event_name.h
@@ -76,8 +76,7 @@ protected:
table_esgs_global_by_event_name();
public:
- ~table_esgs_global_by_event_name()
- {}
+ ~table_esgs_global_by_event_name() = default;
protected:
void make_row(PFS_stage_class *klass);
diff --git a/storage/perfschema/table_esms_by_account_by_event_name.h b/storage/perfschema/table_esms_by_account_by_event_name.h
index 1afe7cb09df..3ea7620204b 100644
--- a/storage/perfschema/table_esms_by_account_by_event_name.h
+++ b/storage/perfschema/table_esms_by_account_by_event_name.h
@@ -105,8 +105,7 @@ protected:
table_esms_by_account_by_event_name();
public:
- ~table_esms_by_account_by_event_name()
- {}
+ ~table_esms_by_account_by_event_name() = default;
protected:
void make_row(PFS_account *account, PFS_statement_class *klass);
diff --git a/storage/perfschema/table_esms_by_digest.h b/storage/perfschema/table_esms_by_digest.h
index 27b916e66ac..d231d3388f8 100644
--- a/storage/perfschema/table_esms_by_digest.h
+++ b/storage/perfschema/table_esms_by_digest.h
@@ -78,8 +78,7 @@ protected:
table_esms_by_digest();
public:
- ~table_esms_by_digest()
- {}
+ ~table_esms_by_digest() = default;
protected:
void make_row(PFS_statements_digest_stat*);
diff --git a/storage/perfschema/table_esms_by_host_by_event_name.h b/storage/perfschema/table_esms_by_host_by_event_name.h
index 2c47d4302b6..7c8c0e777e8 100644
--- a/storage/perfschema/table_esms_by_host_by_event_name.h
+++ b/storage/perfschema/table_esms_by_host_by_event_name.h
@@ -105,8 +105,7 @@ protected:
table_esms_by_host_by_event_name();
public:
- ~table_esms_by_host_by_event_name()
- {}
+ ~table_esms_by_host_by_event_name() = default;
protected:
void make_row(PFS_host *host, PFS_statement_class *klass);
diff --git a/storage/perfschema/table_esms_by_thread_by_event_name.h b/storage/perfschema/table_esms_by_thread_by_event_name.h
index e4100c076f6..e4b1ba63eb8 100644
--- a/storage/perfschema/table_esms_by_thread_by_event_name.h
+++ b/storage/perfschema/table_esms_by_thread_by_event_name.h
@@ -109,8 +109,7 @@ protected:
table_esms_by_thread_by_event_name();
public:
- ~table_esms_by_thread_by_event_name()
- {}
+ ~table_esms_by_thread_by_event_name() = default;
protected:
void make_row(PFS_thread *thread, PFS_statement_class *klass);
diff --git a/storage/perfschema/table_esms_by_user_by_event_name.h b/storage/perfschema/table_esms_by_user_by_event_name.h
index 85399b18622..18516dfdb48 100644
--- a/storage/perfschema/table_esms_by_user_by_event_name.h
+++ b/storage/perfschema/table_esms_by_user_by_event_name.h
@@ -105,8 +105,7 @@ protected:
table_esms_by_user_by_event_name();
public:
- ~table_esms_by_user_by_event_name()
- {}
+ ~table_esms_by_user_by_event_name() = default;
protected:
void make_row(PFS_user *user, PFS_statement_class *klass);
diff --git a/storage/perfschema/table_esms_global_by_event_name.h b/storage/perfschema/table_esms_global_by_event_name.h
index 780c7fa6e4f..67dd631c71c 100644
--- a/storage/perfschema/table_esms_global_by_event_name.h
+++ b/storage/perfschema/table_esms_global_by_event_name.h
@@ -76,8 +76,7 @@ protected:
table_esms_global_by_event_name();
public:
- ~table_esms_global_by_event_name()
- {}
+ ~table_esms_global_by_event_name() = default;
protected:
void make_row(PFS_statement_class *klass);
diff --git a/storage/perfschema/table_events_stages.h b/storage/perfschema/table_events_stages.h
index 2ef37c16a11..b4941db54eb 100644
--- a/storage/perfschema/table_events_stages.h
+++ b/storage/perfschema/table_events_stages.h
@@ -107,8 +107,7 @@ protected:
table_events_stages_common(const PFS_engine_table_share *share, void *pos);
- ~table_events_stages_common()
- {}
+ ~table_events_stages_common() = default;
void make_row(PFS_events_stages *stage);
@@ -138,8 +137,7 @@ protected:
table_events_stages_current();
public:
- ~table_events_stages_current()
- {}
+ ~table_events_stages_current() = default;
private:
friend class table_events_stages_history;
@@ -174,8 +172,7 @@ protected:
table_events_stages_history();
public:
- ~table_events_stages_history()
- {}
+ ~table_events_stages_history() = default;
private:
/** Table share lock. */
@@ -207,8 +204,7 @@ protected:
table_events_stages_history_long();
public:
- ~table_events_stages_history_long()
- {}
+ ~table_events_stages_history_long() = default;
private:
/** Table share lock. */
diff --git a/storage/perfschema/table_events_statements.h b/storage/perfschema/table_events_statements.h
index a7fb6fd0ec7..ca8bc804b01 100644
--- a/storage/perfschema/table_events_statements.h
+++ b/storage/perfschema/table_events_statements.h
@@ -190,8 +190,7 @@ protected:
table_events_statements_common(const PFS_engine_table_share *share, void *pos);
- ~table_events_statements_common()
- {}
+ ~table_events_statements_common() = default;
void make_row_part_1(PFS_events_statements *statement,
sql_digest_storage *digest);
@@ -225,8 +224,7 @@ protected:
table_events_statements_current();
public:
- ~table_events_statements_current()
- {}
+ ~table_events_statements_current() = default;
private:
friend class table_events_statements_history;
@@ -263,8 +261,7 @@ protected:
table_events_statements_history();
public:
- ~table_events_statements_history()
- {}
+ ~table_events_statements_history() = default;
private:
/** Table share lock. */
@@ -298,8 +295,7 @@ protected:
table_events_statements_history_long();
public:
- ~table_events_statements_history_long()
- {}
+ ~table_events_statements_history_long() = default;
private:
/** Table share lock. */
diff --git a/storage/perfschema/table_events_waits.h b/storage/perfschema/table_events_waits.h
index 926d54fd970..dcd0ea6231b 100644
--- a/storage/perfschema/table_events_waits.h
+++ b/storage/perfschema/table_events_waits.h
@@ -146,8 +146,7 @@ protected:
table_events_waits_common(const PFS_engine_table_share *share, void *pos);
- ~table_events_waits_common()
- {}
+ ~table_events_waits_common() = default;
void clear_object_columns();
int make_table_object_columns(PFS_events_waits *wait);
@@ -182,8 +181,7 @@ protected:
table_events_waits_current();
public:
- ~table_events_waits_current()
- {}
+ ~table_events_waits_current() = default;
private:
friend class table_events_waits_history;
@@ -219,8 +217,7 @@ protected:
table_events_waits_history();
public:
- ~table_events_waits_history()
- {}
+ ~table_events_waits_history() = default;
private:
/** Table share lock. */
@@ -253,8 +250,7 @@ protected:
table_events_waits_history_long();
public:
- ~table_events_waits_history_long()
- {}
+ ~table_events_waits_history_long() = default;
private:
/** Table share lock. */
diff --git a/storage/perfschema/table_events_waits_summary.h b/storage/perfschema/table_events_waits_summary.h
index 0cc6f18be3c..a2b45c41fae 100644
--- a/storage/perfschema/table_events_waits_summary.h
+++ b/storage/perfschema/table_events_waits_summary.h
@@ -81,8 +81,7 @@ protected:
table_events_waits_summary_by_instance();
public:
- ~table_events_waits_summary_by_instance()
- {}
+ ~table_events_waits_summary_by_instance() = default;
private:
/** Table share lock. */
diff --git a/storage/perfschema/table_ews_by_account_by_event_name.h b/storage/perfschema/table_ews_by_account_by_event_name.h
index 6ca0f2912bd..b50704e788b 100644
--- a/storage/perfschema/table_ews_by_account_by_event_name.h
+++ b/storage/perfschema/table_ews_by_account_by_event_name.h
@@ -116,8 +116,7 @@ protected:
table_ews_by_account_by_event_name();
public:
- ~table_ews_by_account_by_event_name()
- {}
+ ~table_ews_by_account_by_event_name() = default;
protected:
void make_row(PFS_account *account, PFS_instr_class *klass);
diff --git a/storage/perfschema/table_ews_by_host_by_event_name.h b/storage/perfschema/table_ews_by_host_by_event_name.h
index ac07e698f13..0a554385511 100644
--- a/storage/perfschema/table_ews_by_host_by_event_name.h
+++ b/storage/perfschema/table_ews_by_host_by_event_name.h
@@ -116,8 +116,7 @@ protected:
table_ews_by_host_by_event_name();
public:
- ~table_ews_by_host_by_event_name()
- {}
+ ~table_ews_by_host_by_event_name() = default;
protected:
void make_row(PFS_host *host, PFS_instr_class *klass);
diff --git a/storage/perfschema/table_ews_by_thread_by_event_name.h b/storage/perfschema/table_ews_by_thread_by_event_name.h
index b811cd40962..9c526182bc8 100644
--- a/storage/perfschema/table_ews_by_thread_by_event_name.h
+++ b/storage/perfschema/table_ews_by_thread_by_event_name.h
@@ -115,8 +115,7 @@ protected:
table_ews_by_thread_by_event_name();
public:
- ~table_ews_by_thread_by_event_name()
- {}
+ ~table_ews_by_thread_by_event_name() = default;
protected:
void make_row(PFS_thread *thread, PFS_instr_class *klass);
diff --git a/storage/perfschema/table_ews_by_user_by_event_name.h b/storage/perfschema/table_ews_by_user_by_event_name.h
index 2dc34203d9e..3a61c8bcd54 100644
--- a/storage/perfschema/table_ews_by_user_by_event_name.h
+++ b/storage/perfschema/table_ews_by_user_by_event_name.h
@@ -116,8 +116,7 @@ protected:
table_ews_by_user_by_event_name();
public:
- ~table_ews_by_user_by_event_name()
- {}
+ ~table_ews_by_user_by_event_name() = default;
protected:
void make_row(PFS_user *user, PFS_instr_class *klass);
diff --git a/storage/perfschema/table_ews_global_by_event_name.h b/storage/perfschema/table_ews_global_by_event_name.h
index 811dfbb6812..46aad715c22 100644
--- a/storage/perfschema/table_ews_global_by_event_name.h
+++ b/storage/perfschema/table_ews_global_by_event_name.h
@@ -104,8 +104,7 @@ protected:
table_ews_global_by_event_name();
public:
- ~table_ews_global_by_event_name()
- {}
+ ~table_ews_global_by_event_name() = default;
protected:
void make_mutex_row(PFS_mutex_class *klass);
diff --git a/storage/perfschema/table_file_instances.h b/storage/perfschema/table_file_instances.h
index adad5dadd06..6b8ffaeb591 100644
--- a/storage/perfschema/table_file_instances.h
+++ b/storage/perfschema/table_file_instances.h
@@ -74,8 +74,7 @@ private:
table_file_instances();
public:
- ~table_file_instances()
- {}
+ ~table_file_instances() = default;
private:
void make_row(PFS_file *pfs);
diff --git a/storage/perfschema/table_file_summary_by_event_name.h b/storage/perfschema/table_file_summary_by_event_name.h
index 877adf9476a..0c2b592ab60 100644
--- a/storage/perfschema/table_file_summary_by_event_name.h
+++ b/storage/perfschema/table_file_summary_by_event_name.h
@@ -75,8 +75,7 @@ private:
table_file_summary_by_event_name();
public:
- ~table_file_summary_by_event_name()
- {}
+ ~table_file_summary_by_event_name() = default;
private:
void make_row(PFS_file_class *klass);
diff --git a/storage/perfschema/table_file_summary_by_instance.h b/storage/perfschema/table_file_summary_by_instance.h
index 3b044fa064d..b8b2115aeed 100644
--- a/storage/perfschema/table_file_summary_by_instance.h
+++ b/storage/perfschema/table_file_summary_by_instance.h
@@ -83,8 +83,7 @@ private:
table_file_summary_by_instance();
public:
- ~table_file_summary_by_instance()
- {}
+ ~table_file_summary_by_instance() = default;
private:
void make_row(PFS_file *pfs);
diff --git a/storage/perfschema/table_host_cache.h b/storage/perfschema/table_host_cache.h
index bb1cb444c33..482b8a2d66a 100644
--- a/storage/perfschema/table_host_cache.h
+++ b/storage/perfschema/table_host_cache.h
@@ -127,8 +127,7 @@ protected:
table_host_cache();
public:
- ~table_host_cache()
- {}
+ ~table_host_cache() = default;
private:
void materialize(THD *thd);
diff --git a/storage/perfschema/table_hosts.h b/storage/perfschema/table_hosts.h
index 8262beabda5..cf94bdcbf79 100644
--- a/storage/perfschema/table_hosts.h
+++ b/storage/perfschema/table_hosts.h
@@ -67,8 +67,7 @@ protected:
table_hosts();
public:
- ~table_hosts()
- {}
+ ~table_hosts() = default;
private:
virtual void make_row(PFS_host *pfs);
diff --git a/storage/perfschema/table_os_global_by_type.h b/storage/perfschema/table_os_global_by_type.h
index 8009d2125b3..632bed522ed 100644
--- a/storage/perfschema/table_os_global_by_type.h
+++ b/storage/perfschema/table_os_global_by_type.h
@@ -106,8 +106,7 @@ protected:
table_os_global_by_type();
public:
- ~table_os_global_by_type()
- {}
+ ~table_os_global_by_type() = default;
protected:
void make_table_row(PFS_table_share *table_share);
diff --git a/storage/perfschema/table_performance_timers.h b/storage/perfschema/table_performance_timers.h
index 5479c6f577d..15bdb5bfa93 100644
--- a/storage/perfschema/table_performance_timers.h
+++ b/storage/perfschema/table_performance_timers.h
@@ -73,8 +73,7 @@ protected:
table_performance_timers();
public:
- ~table_performance_timers()
- {}
+ ~table_performance_timers() = default;
private:
/** Table share lock. */
diff --git a/storage/perfschema/table_session_account_connect_attrs.h b/storage/perfschema/table_session_account_connect_attrs.h
index ea8d26b719b..d556394515c 100644
--- a/storage/perfschema/table_session_account_connect_attrs.h
+++ b/storage/perfschema/table_session_account_connect_attrs.h
@@ -43,8 +43,7 @@ protected:
table_session_account_connect_attrs();
public:
- ~table_session_account_connect_attrs()
- {}
+ ~table_session_account_connect_attrs() = default;
protected:
virtual bool thread_fits(PFS_thread *thread);
diff --git a/storage/perfschema/table_session_connect_attrs.h b/storage/perfschema/table_session_connect_attrs.h
index c35f4b89f4e..f115ea1b168 100644
--- a/storage/perfschema/table_session_connect_attrs.h
+++ b/storage/perfschema/table_session_connect_attrs.h
@@ -43,8 +43,7 @@ protected:
table_session_connect_attrs();
public:
- ~table_session_connect_attrs()
- {}
+ ~table_session_connect_attrs() = default;
private:
/** Table share lock. */
diff --git a/storage/perfschema/table_setup_actors.h b/storage/perfschema/table_setup_actors.h
index 758d3b22ef7..da5fdc37950 100644
--- a/storage/perfschema/table_setup_actors.h
+++ b/storage/perfschema/table_setup_actors.h
@@ -93,8 +93,7 @@ protected:
table_setup_actors();
public:
- ~table_setup_actors()
- {}
+ ~table_setup_actors() = default;
private:
void make_row(PFS_setup_actor *actor);
diff --git a/storage/perfschema/table_setup_consumers.h b/storage/perfschema/table_setup_consumers.h
index 8c3479a88b1..c72108beb46 100644
--- a/storage/perfschema/table_setup_consumers.h
+++ b/storage/perfschema/table_setup_consumers.h
@@ -77,8 +77,7 @@ protected:
table_setup_consumers();
public:
- ~table_setup_consumers()
- {}
+ ~table_setup_consumers() = default;
private:
/** Table share lock. */
diff --git a/storage/perfschema/table_setup_instruments.h b/storage/perfschema/table_setup_instruments.h
index 4b6ad9b46dd..ce979c40e48 100644
--- a/storage/perfschema/table_setup_instruments.h
+++ b/storage/perfschema/table_setup_instruments.h
@@ -115,8 +115,7 @@ protected:
table_setup_instruments();
public:
- ~table_setup_instruments()
- {}
+ ~table_setup_instruments() = default;
private:
void make_row(PFS_instr_class *klass, bool update_enabled, bool update_timed);
diff --git a/storage/perfschema/table_setup_objects.h b/storage/perfschema/table_setup_objects.h
index 2d17e2e15ff..d6cb9bc30c3 100644
--- a/storage/perfschema/table_setup_objects.h
+++ b/storage/perfschema/table_setup_objects.h
@@ -92,8 +92,7 @@ protected:
table_setup_objects();
public:
- ~table_setup_objects()
- {}
+ ~table_setup_objects() = default;
private:
void make_row(PFS_setup_object *pfs);
diff --git a/storage/perfschema/table_setup_timers.h b/storage/perfschema/table_setup_timers.h
index 68bf9a55130..9fff43c33a3 100644
--- a/storage/perfschema/table_setup_timers.h
+++ b/storage/perfschema/table_setup_timers.h
@@ -73,8 +73,7 @@ protected:
table_setup_timers();
public:
- ~table_setup_timers()
- {}
+ ~table_setup_timers() = default;
private:
/** Table share lock. */
diff --git a/storage/perfschema/table_socket_instances.h b/storage/perfschema/table_socket_instances.h
index 763860d08c1..fdd978b5c3a 100644
--- a/storage/perfschema/table_socket_instances.h
+++ b/storage/perfschema/table_socket_instances.h
@@ -86,8 +86,7 @@ private:
table_socket_instances();
public:
- ~table_socket_instances()
- {}
+ ~table_socket_instances() = default;
private:
void make_row(PFS_socket *pfs);
diff --git a/storage/perfschema/table_socket_summary_by_event_name.h b/storage/perfschema/table_socket_summary_by_event_name.h
index f386d62f8ee..3a243572979 100644
--- a/storage/perfschema/table_socket_summary_by_event_name.h
+++ b/storage/perfschema/table_socket_summary_by_event_name.h
@@ -76,8 +76,7 @@ private:
table_socket_summary_by_event_name();
public:
- ~table_socket_summary_by_event_name()
- {}
+ ~table_socket_summary_by_event_name() = default;
private:
void make_row(PFS_socket_class *socket_class);
diff --git a/storage/perfschema/table_socket_summary_by_instance.h b/storage/perfschema/table_socket_summary_by_instance.h
index c7712871c51..b8a08db3e36 100644
--- a/storage/perfschema/table_socket_summary_by_instance.h
+++ b/storage/perfschema/table_socket_summary_by_instance.h
@@ -79,8 +79,7 @@ private:
table_socket_summary_by_instance();
public:
- ~table_socket_summary_by_instance()
- {}
+ ~table_socket_summary_by_instance() = default;
private:
void make_row(PFS_socket *pfs);
diff --git a/storage/perfschema/table_sync_instances.h b/storage/perfschema/table_sync_instances.h
index ce756cef50c..2682c7c88a8 100644
--- a/storage/perfschema/table_sync_instances.h
+++ b/storage/perfschema/table_sync_instances.h
@@ -78,8 +78,7 @@ private:
table_mutex_instances();
public:
- ~table_mutex_instances()
- {}
+ ~table_mutex_instances() = default;
private:
void make_row(PFS_mutex *pfs);
@@ -137,8 +136,7 @@ private:
table_rwlock_instances();
public:
- ~table_rwlock_instances()
- {}
+ ~table_rwlock_instances() = default;
private:
void make_row(PFS_rwlock *pfs);
@@ -190,8 +188,7 @@ private:
table_cond_instances();
public:
- ~table_cond_instances()
- {}
+ ~table_cond_instances() = default;
private:
void make_row(PFS_cond *pfs);
diff --git a/storage/perfschema/table_threads.h b/storage/perfschema/table_threads.h
index 078dbbda5a9..ff9f7ccb2a3 100644
--- a/storage/perfschema/table_threads.h
+++ b/storage/perfschema/table_threads.h
@@ -110,8 +110,7 @@ protected:
table_threads();
public:
- ~table_threads()
- {}
+ ~table_threads() = default;
private:
virtual void make_row(PFS_thread *pfs);
diff --git a/storage/perfschema/table_tiws_by_index_usage.h b/storage/perfschema/table_tiws_by_index_usage.h
index 64e08683b9b..5f0c85874bd 100644
--- a/storage/perfschema/table_tiws_by_index_usage.h
+++ b/storage/perfschema/table_tiws_by_index_usage.h
@@ -101,8 +101,7 @@ protected:
table_tiws_by_index_usage();
public:
- ~table_tiws_by_index_usage()
- {}
+ ~table_tiws_by_index_usage() = default;
protected:
void make_row(PFS_table_share *table_share, uint index);
diff --git a/storage/perfschema/table_tiws_by_table.h b/storage/perfschema/table_tiws_by_table.h
index fed3b694fde..933a6164de9 100644
--- a/storage/perfschema/table_tiws_by_table.h
+++ b/storage/perfschema/table_tiws_by_table.h
@@ -76,8 +76,7 @@ protected:
table_tiws_by_table();
public:
- ~table_tiws_by_table()
- {}
+ ~table_tiws_by_table() = default;
protected:
void make_row(PFS_table_share *table_share);
diff --git a/storage/perfschema/table_tlws_by_table.h b/storage/perfschema/table_tlws_by_table.h
index ba0668e5938..49188abd905 100644
--- a/storage/perfschema/table_tlws_by_table.h
+++ b/storage/perfschema/table_tlws_by_table.h
@@ -76,8 +76,7 @@ protected:
table_tlws_by_table();
public:
- ~table_tlws_by_table()
- {}
+ ~table_tlws_by_table() = default;
protected:
void make_row(PFS_table_share *table_share);
diff --git a/storage/perfschema/table_users.h b/storage/perfschema/table_users.h
index 2adc77569d9..a81c143ae2e 100644
--- a/storage/perfschema/table_users.h
+++ b/storage/perfschema/table_users.h
@@ -67,8 +67,7 @@ protected:
table_users();
public:
- ~table_users()
- {}
+ ~table_users() = default;
private:
virtual void make_row(PFS_user *pfs);
diff --git a/storage/rocksdb/build_rocksdb.cmake b/storage/rocksdb/build_rocksdb.cmake
index 29b2d83a759..096185af08f 100644
--- a/storage/rocksdb/build_rocksdb.cmake
+++ b/storage/rocksdb/build_rocksdb.cmake
@@ -129,10 +129,6 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64|powerpc64")
ADD_DEFINITIONS(-DHAVE_POWER8 -DHAS_ALTIVEC)
endif(CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64|powerpc64")
-if(CMAKE_SYSTEM_PROCESSOR STREQUAL "riscv64")
- set(SYSTEM_LIBS ${SYSTEM_LIBS} -latomic)
-endif()
-
option(WITH_FALLOCATE "build with fallocate" ON)
if(WITH_FALLOCATE AND UNIX)
@@ -161,9 +157,9 @@ include_directories(SYSTEM ${ROCKSDB_SOURCE_DIR}/third-party/gtest-1.7.0/fused-s
find_package(Threads REQUIRED)
if(WIN32)
- set(SYSTEM_LIBS ${SYSTEM_LIBS} Shlwapi.lib Rpcrt4.lib)
+ set(SYSTEM_LIBS ${SYSTEM_LIBS} ${ATOMIC_EXTRA_LIBS} Shlwapi.lib Rpcrt4.lib)
else()
- set(SYSTEM_LIBS ${CMAKE_THREAD_LIBS_INIT} ${LIBRT} ${CMAKE_DL_LIBS})
+ set(SYSTEM_LIBS ${SYSTEM_LIBS} ${CMAKE_THREAD_LIBS_INIT} ${LIBRT} ${CMAKE_DL_LIBS} ${ATOMIC_EXTRA_LIBS})
endif()
set(ROCKSDB_LIBS rocksdblib})
diff --git a/storage/rocksdb/ha_rocksdb.cc b/storage/rocksdb/ha_rocksdb.cc
index 8203a2ac943..8067d6f6b93 100644
--- a/storage/rocksdb/ha_rocksdb.cc
+++ b/storage/rocksdb/ha_rocksdb.cc
@@ -2270,7 +2270,7 @@ static inline uint32_t rocksdb_perf_context_level(THD *const thd) {
*/
interface Rdb_tx_list_walker {
- virtual ~Rdb_tx_list_walker() {}
+ virtual ~Rdb_tx_list_walker() = default;
virtual void process_tran(const Rdb_transaction *const) = 0;
};
diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h
index 2d6400231fc..f847ee25cb8 100644
--- a/storage/rocksdb/ha_rocksdb.h
+++ b/storage/rocksdb/ha_rocksdb.h
@@ -1049,7 +1049,7 @@ struct Rdb_inplace_alter_ctx : public my_core::inplace_alter_handler_ctx {
m_n_dropped_keys(n_dropped_keys),
m_max_auto_incr(max_auto_incr) {}
- ~Rdb_inplace_alter_ctx() {}
+ ~Rdb_inplace_alter_ctx() = default;
private:
/* Disable Copying */
diff --git a/storage/rocksdb/rdb_compact_filter.h b/storage/rocksdb/rdb_compact_filter.h
index 1cd27273b56..93767b23787 100644
--- a/storage/rocksdb/rdb_compact_filter.h
+++ b/storage/rocksdb/rdb_compact_filter.h
@@ -204,9 +204,9 @@ class Rdb_compact_filter_factory : public rocksdb::CompactionFilterFactory {
Rdb_compact_filter_factory(const Rdb_compact_filter_factory &) = delete;
Rdb_compact_filter_factory &operator=(const Rdb_compact_filter_factory &) =
delete;
- Rdb_compact_filter_factory() {}
+ Rdb_compact_filter_factory() = default;
- ~Rdb_compact_filter_factory() {}
+ ~Rdb_compact_filter_factory() = default;
const char *Name() const override { return "Rdb_compact_filter_factory"; }
diff --git a/storage/rocksdb/rdb_datadic.h b/storage/rocksdb/rdb_datadic.h
index 899c6f70071..e9fc1da728e 100644
--- a/storage/rocksdb/rdb_datadic.h
+++ b/storage/rocksdb/rdb_datadic.h
@@ -1177,7 +1177,7 @@ class Rdb_seq_generator {
interface Rdb_tables_scanner {
virtual int add_table(Rdb_tbl_def * tdef) = 0;
- virtual ~Rdb_tables_scanner() {} /* Keep the compiler happy */
+ virtual ~Rdb_tables_scanner() = default; /* Keep the compiler happy */
};
/*
@@ -1214,7 +1214,7 @@ class Rdb_ddl_manager {
public:
Rdb_ddl_manager(const Rdb_ddl_manager &) = delete;
Rdb_ddl_manager &operator=(const Rdb_ddl_manager &) = delete;
- Rdb_ddl_manager() {}
+ Rdb_ddl_manager() = default;
/* Load the data dictionary from on-disk storage */
bool init(Rdb_dict_manager *const dict_arg, Rdb_cf_manager *const cf_manager,
diff --git a/storage/rocksdb/rdb_mutex_wrapper.h b/storage/rocksdb/rdb_mutex_wrapper.h
index 33eefe9d50c..fd0790aa8e6 100644
--- a/storage/rocksdb/rdb_mutex_wrapper.h
+++ b/storage/rocksdb/rdb_mutex_wrapper.h
@@ -122,7 +122,7 @@ class Rdb_mutex_factory : public rocksdb::TransactionDBMutexFactory {
public:
Rdb_mutex_factory(const Rdb_mutex_factory &) = delete;
Rdb_mutex_factory &operator=(const Rdb_mutex_factory &) = delete;
- Rdb_mutex_factory() {}
+ Rdb_mutex_factory() = default;
/*
Override parent class's virtual methods of interrest.
*/
@@ -137,7 +137,7 @@ class Rdb_mutex_factory : public rocksdb::TransactionDBMutexFactory {
return std::make_shared<Rdb_cond_var>();
}
- virtual ~Rdb_mutex_factory() override {}
+ virtual ~Rdb_mutex_factory() override = default;
};
} // namespace myrocks
diff --git a/storage/rocksdb/rdb_threads.h b/storage/rocksdb/rdb_threads.h
index 7d89fe0616b..d23419df3b9 100644
--- a/storage/rocksdb/rdb_threads.h
+++ b/storage/rocksdb/rdb_threads.h
@@ -125,7 +125,7 @@ class Rdb_thread {
void uninit();
- virtual ~Rdb_thread() {}
+ virtual ~Rdb_thread() = default;
private:
static void *thread_func(void *const thread_ptr);
diff --git a/storage/sequence/sequence.cc b/storage/sequence/sequence.cc
index f5a18094521..b2bce9325ac 100644
--- a/storage/sequence/sequence.cc
+++ b/storage/sequence/sequence.cc
@@ -382,7 +382,7 @@ public:
// Reset limit because we are handling it now
orig_lim->set_unlimited();
}
- ~ha_seq_group_by_handler() {}
+ ~ha_seq_group_by_handler() = default;
int init_scan() { first_row= 1 ; return 0; }
int next_row();
int end_scan() { return 0; }
diff --git a/storage/spider/spd_db_include.h b/storage/spider/spd_db_include.h
index 6a8c03677f3..338dc1030fc 100644
--- a/storage/spider/spd_db_include.h
+++ b/storage/spider/spd_db_include.h
@@ -694,8 +694,8 @@ class spider_db_util
{
public:
uint dbton_id;
- spider_db_util() {}
- virtual ~spider_db_util() {}
+ spider_db_util() = default;
+ virtual ~spider_db_util() = default;
virtual int append_name(
spider_string *str,
const char *name,
@@ -838,7 +838,7 @@ public:
uint dbton_id;
SPIDER_DB_ROW *next_pos;
spider_db_row(uint in_dbton_id) : dbton_id(in_dbton_id), next_pos(NULL) {}
- virtual ~spider_db_row() {}
+ virtual ~spider_db_row() = default;
virtual int store_to_field(
Field *field,
CHARSET_INFO *access_charset
@@ -870,8 +870,8 @@ public:
class spider_db_result_buffer
{
public:
- spider_db_result_buffer() {}
- virtual ~spider_db_result_buffer() {}
+ spider_db_result_buffer() = default;
+ virtual ~spider_db_result_buffer() = default;
virtual void clear() = 0;
virtual bool check_size(
longlong size
@@ -884,7 +884,7 @@ public:
SPIDER_DB_CONN *db_conn;
uint dbton_id;
spider_db_result(SPIDER_DB_CONN *in_db_conn);
- virtual ~spider_db_result() {}
+ virtual ~spider_db_result() = default;
virtual void set_limit(longlong value) {}
virtual bool has_result() = 0;
virtual void free_result() = 0;
@@ -947,7 +947,7 @@ public:
spider_db_conn(
SPIDER_CONN *in_conn
);
- virtual ~spider_db_conn() {}
+ virtual ~spider_db_conn() = default;
virtual int init() = 0;
virtual void set_limit(longlong value) {}
virtual bool is_connected() = 0;
@@ -1126,7 +1126,7 @@ public:
st_spider_share *share,
uint dbton_id
) : dbton_id(dbton_id), spider_share(share) {}
- virtual ~spider_db_share() {}
+ virtual ~spider_db_share() = default;
virtual int init() = 0;
virtual uint get_column_name_length(
uint field_index
@@ -1168,7 +1168,7 @@ public:
spider_db_handler(ha_spider *spider, spider_db_share *db_share) :
dbton_id(db_share->dbton_id), spider(spider), db_share(db_share),
first_link_idx(-1) {}
- virtual ~spider_db_handler() {}
+ virtual ~spider_db_handler() = default;
virtual int init() = 0;
virtual int append_index_hint(
spider_string *str,
@@ -1631,7 +1631,7 @@ public:
spider_db_share *db_share;
spider_db_copy_table(spider_db_share *db_share) :
dbton_id(db_share->dbton_id), db_share(db_share) {}
- virtual ~spider_db_copy_table() {}
+ virtual ~spider_db_copy_table() = default;
virtual int init() = 0;
virtual void set_sql_charset(
CHARSET_INFO *cs
diff --git a/strings/ctype-uca.c b/strings/ctype-uca.c
index 094c02618d0..c5b6ad6cbb3 100644
--- a/strings/ctype-uca.c
+++ b/strings/ctype-uca.c
@@ -33898,6 +33898,11 @@ create_tailoring(struct charset_info_st *cs,
{
src_uca= &my_uca_v520;
cs->caseinfo= &my_unicase_unicode520;
+ if (cs->mbminlen == 1 && cs->mbmaxlen >=3)
+ {
+ cs->caseup_multiply= 2;
+ cs->casedn_multiply= 2;
+ }
}
else if (rules.version == 400) /* Unicode-4.0.0 requested */
{
@@ -35730,8 +35735,8 @@ struct charset_info_st my_charset_utf8mb3_myanmar_uca_ci=
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
+ 2, /* caseup_multiply */
+ 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
@@ -35763,8 +35768,8 @@ struct charset_info_st my_charset_utf8mb3_unicode_520_ci=
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
+ 2, /* caseup_multiply */
+ 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
@@ -35795,8 +35800,8 @@ struct charset_info_st my_charset_utf8mb3_thai_520_w2=
NULL, /* state_map */
NULL, /* ident_map */
4, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
+ 2, /* caseup_multiply */
+ 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
@@ -35893,8 +35898,8 @@ struct charset_info_st my_charset_utf8mb3_unicode_520_nopad_ci=
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
+ 2, /* caseup_multiply */
+ 2, /* casedn_multiply */
1, /* mbminlen */
3, /* mbmaxlen */
9, /* min_sort_char */
@@ -36708,8 +36713,8 @@ struct charset_info_st my_charset_utf8mb4_myanmar_uca_ci=
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
+ 2, /* caseup_multiply */
+ 2, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
@@ -36740,8 +36745,8 @@ struct charset_info_st my_charset_utf8mb4_thai_520_w2=
NULL, /* state_map */
NULL, /* ident_map */
4, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
+ 2, /* caseup_multiply */
+ 2, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
@@ -36772,8 +36777,8 @@ struct charset_info_st my_charset_utf8mb4_unicode_520_ci=
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
+ 2, /* caseup_multiply */
+ 2, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
@@ -36871,8 +36876,8 @@ struct charset_info_st my_charset_utf8mb4_unicode_520_nopad_ci=
NULL, /* state_map */
NULL, /* ident_map */
8, /* strxfrm_multiply */
- 1, /* caseup_multiply */
- 1, /* casedn_multiply */
+ 2, /* caseup_multiply */
+ 2, /* casedn_multiply */
1, /* mbminlen */
4, /* mbmaxlen */
9, /* min_sort_char */
diff --git a/tpool/aio_linux.cc b/tpool/aio_linux.cc
index 5d01c588a88..507c6b9264f 100644
--- a/tpool/aio_linux.cc
+++ b/tpool/aio_linux.cc
@@ -18,6 +18,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 - 1301 USA*/
# include <thread>
# include <atomic>
+# include <cstdio>
# include <libaio.h>
# include <sys/syscall.h>
diff --git a/win/packaging/heidisql.cmake b/win/packaging/heidisql.cmake
index b406e918b8f..45a407371ba 100644
--- a/win/packaging/heidisql.cmake
+++ b/win/packaging/heidisql.cmake
@@ -1,4 +1,4 @@
-SET(HEIDISQL_BASE_NAME "HeidiSQL_11.3_32_Portable")
+SET(HEIDISQL_BASE_NAME "HeidiSQL_12.3_32_Portable")
SET(HEIDISQL_ZIP "${HEIDISQL_BASE_NAME}.zip")
SET(HEIDISQL_URL "http://www.heidisql.com/downloads/releases/${HEIDISQL_ZIP}")
SET(HEIDISQL_DOWNLOAD_DIR ${THIRD_PARTY_DOWNLOAD_LOCATION}/${HEIDISQL_BASE_NAME})
diff --git a/win/packaging/heidisql.wxi.in b/win/packaging/heidisql.wxi.in
index 58d95210783..831efb6971f 100644
--- a/win/packaging/heidisql.wxi.in
+++ b/win/packaging/heidisql.wxi.in
@@ -34,7 +34,6 @@
<Shortcut Id="startmenuHeidiSQL" Directory="ShortcutFolder" Name="HeidiSQL" Target="[D.HeidiSQL]\heidisql.exe"/>
</Component>
-
<Component Id="component.HeidiSQL_libmysql.dll" Guid="*" Win64="no">
<File Id="heidisql.libmysql.dll" Name="libmysql.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\libmysql.dll" />
</Component>
@@ -63,6 +62,29 @@
<File Id="heidisql.sqlite3.dll" Name="sqlite3.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\sqlite3.dll" />
</Component>
+ <Component Id="component.HeidiSQL_fbclient_4.0.dll" Guid="*" Win64="no">
+ <File Id="fbclient4.0.dll" Name="fbclient-4.0.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\fbclient-4.0.dll" />
+ </Component>
+ <Component Id="component.HeidiSQL_gds32_14.1.dll" Guid="*" Win64="no">
+ <File Id="gds32_14.1.dll" Name="gds32-14.1.dll" Source="${HEIDISQL_DOWNLOAD_DIR}\gds32-14.1.dll" />
+ </Component>
+ <Component Id="component.HeidiSQL_plink.exe" Guid="*" Win64="no">
+ <File Id="plink.exe" Name="plink.exe" Source="${HEIDISQL_DOWNLOAD_DIR}\plink.exe" />
+ </Component>
+
+ <Component Id="component.HeidiSQL_LICENSE_openssl" Guid="*" Win64="no">
+ <File Id="LICENSE_openssl" Name="LICENSE-openssl" Source="${HEIDISQL_DOWNLOAD_DIR}\LICENSE-openssl" />
+ </Component>
+
+ <?define functions_dblist=interbase;mariadb;mssql;mysql;postgresql;redshift;sqlite?>
+
+ <?foreach db in $(var.functions_dblist) ?>
+ <Component Id="component.HeidiSQL_functions_$(var.db).ini" Guid="*" Win64="no">
+ <File Id="functions_$(var.db).ini" Name="functions-$(var.db).ini"
+ Source="${HEIDISQL_DOWNLOAD_DIR}\functions-$(var.db).ini" />
+ </Component>
+ <?endforeach?>
+
<Directory Id="D.HeidiSQL.plugins" Name="plugins">
<?foreach dll in $(var.pluginlist) ?>
<Component Id="component.HeidiSQL_$(var.dll)" Guid="*" Win64="no">
@@ -91,6 +113,13 @@
<ComponentRef Id="component.HeidiSQL_libiconv_2.dll" />
<ComponentRef Id="component.HeidiSQL_sqlite3.dll" />
<ComponentRef Id="component.HeidiSQL_libmysql_6.1.dll" />
+ <ComponentRef Id="component.HeidiSQL_fbclient_4.0.dll" />
+ <ComponentRef Id="component.HeidiSQL_gds32_14.1.dll" />
+ <ComponentRef Id="component.HeidiSQL_plink.exe" />
+ <ComponentRef Id="component.HeidiSQL_LICENSE_openssl" />
+ <?foreach db in $(var.functions_dblist) ?>
+ <ComponentRef Id="component.HeidiSQL_functions_$(var.db).ini" />
+ <?endforeach?>
<?foreach dll in $(var.pluginlist)?>
<ComponentRef Id="component.HeidiSQL_$(var.dll)" />
<?endforeach?>