diff --git a/sql/log.h b/sql/log.h index 2f3b6508f58..46657c34d80 100644 --- a/sql/log.h +++ b/sql/log.h @@ -1213,6 +1213,7 @@ public: const char *user_host, size_t user_host_len, ulonglong query_utime, ulonglong lock_utime, bool is_command, const char *sql_text, size_t sql_text_len)= 0; + ATTRIBUTE_FORMAT(printf, 3, 0) virtual bool log_error(enum loglevel level, const char *format, va_list args)= 0; virtual bool log_general(THD *thd, my_hrtime_t event_time, const char *user_host, size_t user_host_len, my_thread_id thread_id, @@ -1240,6 +1241,7 @@ public: const char *user_host, size_t user_host_len, ulonglong query_utime, ulonglong lock_utime, bool is_command, const char *sql_text, size_t sql_text_len) override; + ATTRIBUTE_FORMAT(printf, 3, 0) bool log_error(enum loglevel level, const char *format, va_list args) override; bool log_general(THD *thd, my_hrtime_t event_time, const char *user_host, size_t user_host_len, my_thread_id thread_id, @@ -1270,6 +1272,7 @@ public: const char *user_host, size_t user_host_len, ulonglong query_utime, ulonglong lock_utime, bool is_command, const char *sql_text, size_t sql_text_len) override; + ATTRIBUTE_FORMAT(printf, 3, 0) bool log_error(enum loglevel level, const char *format, va_list args) override; bool log_general(THD *thd, my_hrtime_t event_time, const char *user_host, size_t user_host_len, my_thread_id thread_id, @@ -1326,10 +1329,12 @@ public: void cleanup_base(); /* Free memory. Nothing could be logged after this function is called */ void cleanup_end(); + ATTRIBUTE_FORMAT(printf, 3, 0) // 1st arg is the implicit `this` bool error_log_print(enum loglevel level, const char *format, va_list args); bool slow_log_print(THD *thd, const char *query, size_t query_length, ulonglong current_utime); + ATTRIBUTE_FORMAT(printf, 4, 0) bool general_log_print(THD *thd,enum enum_server_command command, const char *format, va_list args); bool general_log_write(THD *thd, enum enum_server_command command, @@ -1367,22 +1372,26 @@ enum enum_binlog_format { int query_error_code(THD *thd, bool not_killed); uint purge_log_get_error_code(int res); -int vprint_msg_to_log(enum loglevel level, const char *format, va_list args); -void sql_print_error(const char *format, ...); -void sql_print_warning(const char *format, ...); -void sql_print_information(const char *format, ...); -void sql_print_information_v(const char *format, va_list ap); -typedef void (*sql_print_message_func)(const char *format, ...); +int vprint_msg_to_log(enum loglevel level, const char *format, va_list args) + ATTRIBUTE_FORMAT(printf, 2, 0); +void sql_print_error(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2); +void sql_print_warning(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2); +void sql_print_information(const char *format, ...) + ATTRIBUTE_FORMAT(printf, 1, 2); +void sql_print_information_v(const char *format, va_list ap) + ATTRIBUTE_FORMAT(printf, 1, 0); +typedef void (*sql_print_message_func)(const char *format, ...) + ATTRIBUTE_FORMAT_FPTR(printf, 1, 2); extern sql_print_message_func sql_print_message_handlers[]; int error_log_print(enum loglevel level, const char *format, - va_list args); + va_list args) ATTRIBUTE_FORMAT(printf, 2, 0); bool slow_log_print(THD *thd, const char *query, uint query_length, ulonglong current_utime); bool general_log_print(THD *thd, enum enum_server_command command, - const char *format,...); + const char *format,...) ATTRIBUTE_FORMAT(printf, 3, 4); bool general_log_write(THD *thd, enum enum_server_command command, const char *query, size_t query_length); diff --git a/sql/mysqld.cc b/sql/mysqld.cc index 5cad7ac7a3e..3061d095f58 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -9252,7 +9252,7 @@ static int test_if_case_insensitive(const char *dir_name) buff, 0666, O_RDWR, MYF(0))) < 0) { if (!opt_abort) - sql_print_warning("Can't create test file '%s' (Errcode: %M)", buff, my_errno); + sql_print_warning("Can't create test file '%s' (Errcode: %iE)", buff, my_errno); DBUG_RETURN(-1); } mysql_file_close(file, MYF(0)); diff --git a/sql/rpl_mi.cc b/sql/rpl_mi.cc index ffadfdcaf39..6dc0f62f0f7 100644 --- a/sql/rpl_mi.cc +++ b/sql/rpl_mi.cc @@ -1522,7 +1522,7 @@ bool Master_info_index::remove_master_info(Master_info *mi, bool clear_log_files my_close(index_file_nr,MYF(0)); sql_print_error("Create of Master Info Index file '%s' failed with " - "error: %M", + "error: %iE", index_file_name, error); DBUG_RETURN(TRUE); } diff --git a/sql/rpl_rli.cc b/sql/rpl_rli.cc index 51f45f9cc83..09a3711ff27 100644 --- a/sql/rpl_rli.cc +++ b/sql/rpl_rli.cc @@ -247,7 +247,7 @@ a file name for --relay-log-index option", opt_relaylog_index_name); { mysql_mutex_unlock(log_lock); mysql_mutex_unlock(&data_lock); - sql_print_error("Failed when trying to open logs for '%s' in Relay_log_info::init(). Error: %M", ln, my_errno); + sql_print_error("Failed when trying to open logs for '%s' in Relay_log_info::init(). Error: %iE", ln, my_errno); DBUG_RETURN(1); } mysql_mutex_unlock(log_lock); diff --git a/sql/semisync_master_ack_receiver.cc b/sql/semisync_master_ack_receiver.cc index 36e20260a8b..69ec99614a9 100644 --- a/sql/semisync_master_ack_receiver.cc +++ b/sql/semisync_master_ack_receiver.cc @@ -245,7 +245,7 @@ void Ack_receiver::run() if (listener.got_error()) { - sql_print_error("Got error %M starting ack receiver thread", + sql_print_error("Got error %iE starting ack receiver thread", listener.got_error()); return; } diff --git a/sql/sql_manager.cc b/sql/sql_manager.cc index be56cb03661..190473e3d69 100644 --- a/sql/sql_manager.cc +++ b/sql/sql_manager.cc @@ -148,7 +148,7 @@ void start_handle_manager() if ((err= mysql_thread_create(key_thread_handle_manager, &hThread, &connection_attrib, handle_manager, 0))) { - sql_print_warning("Can't create handle_manager thread (errno: %M)", err); + sql_print_warning("Can't create handle_manager thread (errno: %iE)", err); DBUG_VOID_RETURN; } diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc index 6482f77bd6c..5d1cf53afc1 100644 --- a/sql/sql_partition.cc +++ b/sql/sql_partition.cc @@ -4108,7 +4108,7 @@ bool verify_data_with_partition(TABLE *table, TABLE *part_table, if (table->in_use->lex->without_validation) { - sql_print_warning("Table %`s.%`s was altered WITHOUT VALIDATION: " + sql_print_warning("Table %sQ.%sQ was altered WITHOUT VALIDATION: " "the table might be corrupted", part_table->s->db.str, part_table->s->table_name.str); DBUG_RETURN(false); diff --git a/sql/sql_view.cc b/sql/sql_view.cc index 52c229b4486..1822d0141cd 100644 --- a/sql/sql_view.cc +++ b/sql/sql_view.cc @@ -932,7 +932,7 @@ int mariadb_fix_view(THD *thd, TABLE_LIST *view, bool wrong_checksum, view->db.str, view->table_name.str); DBUG_RETURN(HA_ADMIN_INTERNAL_ERROR); } - sql_print_information("View %`s.%`s: the version is set to %llu%s%s", + sql_print_information("View %sQ.%sQ: the version is set to %llu%s%s", view->db.str, view->table_name.str, view->mariadb_version, (wrong_checksum ? ", checksum corrected" : ""), diff --git a/sql/table.cc b/sql/table.cc index 566cb25a19b..76f706d849c 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -10747,12 +10747,12 @@ void TR_table::warn_schema_incorrect(const char *reason) { if (MYSQL_VERSION_ID == table->s->mysql_version) { - sql_print_error("%`s.%`s schema is incorrect: %s.", + sql_print_error("%sQ.%sQ schema is incorrect: %s.", db.str, table_name.str, reason); } else { - sql_print_error("%`s.%`s schema is incorrect: %s. Created with MariaDB %d, " + sql_print_error("%sQ.%sQ schema is incorrect: %s. Created with MariaDB %d, " "now running %d.", db.str, table_name.str, reason, MYSQL_VERSION_ID, static_cast(table->s->mysql_version)); @@ -10763,7 +10763,7 @@ bool TR_table::check(bool error) { if (error) { - sql_print_warning("%`s.%`s does not exist (open failed).", db.str, + sql_print_warning("%sQ.%sQ does not exist (open failed).", db.str, table_name.str); return true; } diff --git a/sql/table.h b/sql/table.h index 898a67de6d1..dfcf6c03fc7 100644 --- a/sql/table.h +++ b/sql/table.h @@ -577,6 +577,7 @@ class Table_check_intact { protected: bool has_keys; + ATTRIBUTE_FORMAT(printf, 3, 4) // 1st arg is the implicit `this` virtual void report_error(uint code, const char *fmt, ...)= 0; public: @@ -594,6 +595,7 @@ public: class Table_check_intact_log_error : public Table_check_intact { protected: + ATTRIBUTE_FORMAT(printf, 3, 4) void report_error(uint, const char *fmt, ...) override; public: Table_check_intact_log_error() : Table_check_intact(true) {} diff --git a/sql/thr_malloc.cc b/sql/thr_malloc.cc index 711a7976224..42822391460 100644 --- a/sql/thr_malloc.cc +++ b/sql/thr_malloc.cc @@ -54,7 +54,7 @@ extern "C" { /* Skip writing to the error log to avoid mtr complaints */ DBUG_EXECUTE_IF("simulate_out_of_memory", return;); - sql_print_error(ER_DEFAULT(ER_OUT_OF_RESOURCES)); + sql_print_error("%s", ER_DEFAULT(ER_OUT_OF_RESOURCES)); } } diff --git a/sql/tztime.cc b/sql/tztime.cc index 39f317088a2..60e69afca59 100644 --- a/sql/tztime.cc +++ b/sql/tztime.cc @@ -1932,7 +1932,7 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables) Most probably user has mistyped time zone name, so no need to bark here unless we need it for debugging. */ - sql_print_error("Can't find description of time zone '%.*b'", + sql_print_error("Can't find description of time zone '%.*sB'", tz_name->length(), tz_name->ptr()); #endif goto end; diff --git a/storage/innobase/btr/btr0btr.cc b/storage/innobase/btr/btr0btr.cc index 99378db6403..5b81adde307 100644 --- a/storage/innobase/btr/btr0btr.cc +++ b/storage/innobase/btr/btr0btr.cc @@ -1242,7 +1242,7 @@ uint64_t btr_read_autoinc_with_fallback(const dict_table_t *table, { sql_print_information("InnoDB: Resetting PAGE_ROOT_AUTO_INC from " UINT64PF " to " UINT64PF - " on table %`.*s.%`s (created with version %lu)", + " on table %.*sQ.%sQ (created with version %lu)", autoinc, max_autoinc, int(table->name.dblen()), table->name.m_name, table->name.basename(), mysql_version); diff --git a/storage/innobase/row/row0import.cc b/storage/innobase/row/row0import.cc index 1b9e053a8dc..809a9128838 100644 --- a/storage/innobase/row/row0import.cc +++ b/storage/innobase/row/row0import.cc @@ -4626,7 +4626,7 @@ static void row_import_autoinc(dict_table_t *table, row_prebuilt_t *prebuilt, btr_write_autoinc(dict_table_get_first_index(table), autoinc - 1); autoinc_set: table->autoinc= autoinc; - sql_print_information("InnoDB: %`.*s.%`s autoinc value set to " UINT64PF, + sql_print_information("InnoDB: %.*sQ.%sQ autoinc value set to " UINT64PF, int(table->name.dblen()), table->name.m_name, table->name.basename(), autoinc); } diff --git a/storage/innobase/row/row0mysql.cc b/storage/innobase/row/row0mysql.cc index 7eb3b338d2f..468b228d6a1 100644 --- a/storage/innobase/row/row0mysql.cc +++ b/storage/innobase/row/row0mysql.cc @@ -1208,7 +1208,7 @@ static dberr_t row_mysql_get_table_error(trx_t *trx, dict_table_t *table) } const int dblen= int(table->name.dblen()); - sql_print_error("InnoDB .ibd file is missing for table %`.*s.%`s", + sql_print_error("InnoDB .ibd file is missing for table %.*sQ.%sQ", dblen, table->name.m_name, table->name.m_name + dblen + 1); return DB_TABLESPACE_NOT_FOUND; } diff --git a/storage/rocksdb/ha_rocksdb.h b/storage/rocksdb/ha_rocksdb.h index d6bf73c733f..6c64a5ca441 100644 --- a/storage/rocksdb/ha_rocksdb.h +++ b/storage/rocksdb/ha_rocksdb.h @@ -1064,7 +1064,8 @@ const int MYROCKS_MARIADB_PLUGIN_MATURITY_LEVEL= MariaDB_PLUGIN_MATURITY_STABLE; extern uint32_t rocksdb_ignore_datadic_errors; -void sql_print_verbose_info(const char *format, ...); +void sql_print_verbose_info(const char *format, ...) + ATTRIBUTE_FORMAT(printf, 1, 2); } // namespace myrocks