Tag the sql/log.h
family with ATTRIBUTE_FORMAT
Let GCC `-Wformat` check formats sent to these users of `my_vsnprintf_ex` users (heh)
This commit is contained in:
parent
21dfef474c
commit
2392bd02d8
25
sql/log.h
25
sql/log.h
@ -1213,6 +1213,7 @@ public:
|
|||||||
const char *user_host, size_t user_host_len, ulonglong query_utime,
|
const char *user_host, size_t user_host_len, ulonglong query_utime,
|
||||||
ulonglong lock_utime, bool is_command,
|
ulonglong lock_utime, bool is_command,
|
||||||
const char *sql_text, size_t sql_text_len)= 0;
|
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,
|
virtual bool log_error(enum loglevel level, const char *format,
|
||||||
va_list args)= 0;
|
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,
|
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,
|
const char *user_host, size_t user_host_len, ulonglong query_utime,
|
||||||
ulonglong lock_utime, bool is_command,
|
ulonglong lock_utime, bool is_command,
|
||||||
const char *sql_text, size_t sql_text_len) override;
|
const char *sql_text, size_t sql_text_len) override;
|
||||||
|
ATTRIBUTE_FORMAT(printf, 3, 0)
|
||||||
bool log_error(enum loglevel level, const char *format,
|
bool log_error(enum loglevel level, const char *format,
|
||||||
va_list args) override;
|
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,
|
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,
|
const char *user_host, size_t user_host_len, ulonglong query_utime,
|
||||||
ulonglong lock_utime, bool is_command,
|
ulonglong lock_utime, bool is_command,
|
||||||
const char *sql_text, size_t sql_text_len) override;
|
const char *sql_text, size_t sql_text_len) override;
|
||||||
|
ATTRIBUTE_FORMAT(printf, 3, 0)
|
||||||
bool log_error(enum loglevel level, const char *format,
|
bool log_error(enum loglevel level, const char *format,
|
||||||
va_list args) override;
|
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,
|
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();
|
void cleanup_base();
|
||||||
/* Free memory. Nothing could be logged after this function is called */
|
/* Free memory. Nothing could be logged after this function is called */
|
||||||
void cleanup_end();
|
void cleanup_end();
|
||||||
|
ATTRIBUTE_FORMAT(printf, 3, 0) // 1st arg is the implicit `this`
|
||||||
bool error_log_print(enum loglevel level, const char *format,
|
bool error_log_print(enum loglevel level, const char *format,
|
||||||
va_list args);
|
va_list args);
|
||||||
bool slow_log_print(THD *thd, const char *query, size_t query_length,
|
bool slow_log_print(THD *thd, const char *query, size_t query_length,
|
||||||
ulonglong current_utime);
|
ulonglong current_utime);
|
||||||
|
ATTRIBUTE_FORMAT(printf, 4, 0)
|
||||||
bool general_log_print(THD *thd,enum enum_server_command command,
|
bool general_log_print(THD *thd,enum enum_server_command command,
|
||||||
const char *format, va_list args);
|
const char *format, va_list args);
|
||||||
bool general_log_write(THD *thd, enum enum_server_command command,
|
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);
|
int query_error_code(THD *thd, bool not_killed);
|
||||||
uint purge_log_get_error_code(int res);
|
uint purge_log_get_error_code(int res);
|
||||||
|
|
||||||
int vprint_msg_to_log(enum loglevel level, const char *format, va_list args);
|
int vprint_msg_to_log(enum loglevel level, const char *format, va_list args)
|
||||||
void sql_print_error(const char *format, ...);
|
ATTRIBUTE_FORMAT(printf, 2, 0);
|
||||||
void sql_print_warning(const char *format, ...);
|
void sql_print_error(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2);
|
||||||
void sql_print_information(const char *format, ...);
|
void sql_print_warning(const char *format, ...) ATTRIBUTE_FORMAT(printf, 1, 2);
|
||||||
void sql_print_information_v(const char *format, va_list ap);
|
void sql_print_information(const char *format, ...)
|
||||||
typedef void (*sql_print_message_func)(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[];
|
extern sql_print_message_func sql_print_message_handlers[];
|
||||||
|
|
||||||
int error_log_print(enum loglevel level, const char *format,
|
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,
|
bool slow_log_print(THD *thd, const char *query, uint query_length,
|
||||||
ulonglong current_utime);
|
ulonglong current_utime);
|
||||||
|
|
||||||
bool general_log_print(THD *thd, enum enum_server_command command,
|
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,
|
bool general_log_write(THD *thd, enum enum_server_command command,
|
||||||
const char *query, size_t query_length);
|
const char *query, size_t query_length);
|
||||||
|
@ -9252,7 +9252,7 @@ static int test_if_case_insensitive(const char *dir_name)
|
|||||||
buff, 0666, O_RDWR, MYF(0))) < 0)
|
buff, 0666, O_RDWR, MYF(0))) < 0)
|
||||||
{
|
{
|
||||||
if (!opt_abort)
|
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);
|
DBUG_RETURN(-1);
|
||||||
}
|
}
|
||||||
mysql_file_close(file, MYF(0));
|
mysql_file_close(file, MYF(0));
|
||||||
|
@ -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));
|
my_close(index_file_nr,MYF(0));
|
||||||
|
|
||||||
sql_print_error("Create of Master Info Index file '%s' failed with "
|
sql_print_error("Create of Master Info Index file '%s' failed with "
|
||||||
"error: %M",
|
"error: %iE",
|
||||||
index_file_name, error);
|
index_file_name, error);
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
}
|
}
|
||||||
|
@ -247,7 +247,7 @@ a file name for --relay-log-index option", opt_relaylog_index_name);
|
|||||||
{
|
{
|
||||||
mysql_mutex_unlock(log_lock);
|
mysql_mutex_unlock(log_lock);
|
||||||
mysql_mutex_unlock(&data_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);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
mysql_mutex_unlock(log_lock);
|
mysql_mutex_unlock(log_lock);
|
||||||
|
@ -245,7 +245,7 @@ void Ack_receiver::run()
|
|||||||
|
|
||||||
if (listener.got_error())
|
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());
|
listener.got_error());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -148,7 +148,7 @@ void start_handle_manager()
|
|||||||
if ((err= mysql_thread_create(key_thread_handle_manager, &hThread,
|
if ((err= mysql_thread_create(key_thread_handle_manager, &hThread,
|
||||||
&connection_attrib, handle_manager, 0)))
|
&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;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4108,7 +4108,7 @@ bool verify_data_with_partition(TABLE *table, TABLE *part_table,
|
|||||||
|
|
||||||
if (table->in_use->lex->without_validation)
|
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",
|
"the table might be corrupted",
|
||||||
part_table->s->db.str, part_table->s->table_name.str);
|
part_table->s->db.str, part_table->s->table_name.str);
|
||||||
DBUG_RETURN(false);
|
DBUG_RETURN(false);
|
||||||
|
@ -932,7 +932,7 @@ int mariadb_fix_view(THD *thd, TABLE_LIST *view, bool wrong_checksum,
|
|||||||
view->db.str, view->table_name.str);
|
view->db.str, view->table_name.str);
|
||||||
DBUG_RETURN(HA_ADMIN_INTERNAL_ERROR);
|
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->db.str, view->table_name.str,
|
||||||
view->mariadb_version,
|
view->mariadb_version,
|
||||||
(wrong_checksum ? ", checksum corrected" : ""),
|
(wrong_checksum ? ", checksum corrected" : ""),
|
||||||
|
@ -10747,12 +10747,12 @@ void TR_table::warn_schema_incorrect(const char *reason)
|
|||||||
{
|
{
|
||||||
if (MYSQL_VERSION_ID == table->s->mysql_version)
|
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);
|
db.str, table_name.str, reason);
|
||||||
}
|
}
|
||||||
else
|
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.",
|
"now running %d.",
|
||||||
db.str, table_name.str, reason, MYSQL_VERSION_ID,
|
db.str, table_name.str, reason, MYSQL_VERSION_ID,
|
||||||
static_cast<int>(table->s->mysql_version));
|
static_cast<int>(table->s->mysql_version));
|
||||||
@ -10763,7 +10763,7 @@ bool TR_table::check(bool error)
|
|||||||
{
|
{
|
||||||
if (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);
|
table_name.str);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -577,6 +577,7 @@ class Table_check_intact
|
|||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
bool has_keys;
|
bool has_keys;
|
||||||
|
ATTRIBUTE_FORMAT(printf, 3, 4) // 1st arg is the implicit `this`
|
||||||
virtual void report_error(uint code, const char *fmt, ...)= 0;
|
virtual void report_error(uint code, const char *fmt, ...)= 0;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -594,6 +595,7 @@ public:
|
|||||||
class Table_check_intact_log_error : public Table_check_intact
|
class Table_check_intact_log_error : public Table_check_intact
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
|
ATTRIBUTE_FORMAT(printf, 3, 4)
|
||||||
void report_error(uint, const char *fmt, ...) override;
|
void report_error(uint, const char *fmt, ...) override;
|
||||||
public:
|
public:
|
||||||
Table_check_intact_log_error() : Table_check_intact(true) {}
|
Table_check_intact_log_error() : Table_check_intact(true) {}
|
||||||
|
@ -54,7 +54,7 @@ extern "C" {
|
|||||||
/* Skip writing to the error log to avoid mtr complaints */
|
/* Skip writing to the error log to avoid mtr complaints */
|
||||||
DBUG_EXECUTE_IF("simulate_out_of_memory", return;);
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
Most probably user has mistyped time zone name, so no need to bark here
|
||||||
unless we need it for debugging.
|
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());
|
tz_name->length(), tz_name->ptr());
|
||||||
#endif
|
#endif
|
||||||
goto end;
|
goto end;
|
||||||
|
@ -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 "
|
sql_print_information("InnoDB: Resetting PAGE_ROOT_AUTO_INC from "
|
||||||
UINT64PF " to " UINT64PF
|
UINT64PF " to " UINT64PF
|
||||||
" on table %`.*s.%`s (created with version %lu)",
|
" on table %.*sQ.%sQ (created with version %lu)",
|
||||||
autoinc, max_autoinc,
|
autoinc, max_autoinc,
|
||||||
int(table->name.dblen()), table->name.m_name,
|
int(table->name.dblen()), table->name.m_name,
|
||||||
table->name.basename(), mysql_version);
|
table->name.basename(), mysql_version);
|
||||||
|
@ -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);
|
btr_write_autoinc(dict_table_get_first_index(table), autoinc - 1);
|
||||||
autoinc_set:
|
autoinc_set:
|
||||||
table->autoinc= autoinc;
|
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,
|
int(table->name.dblen()), table->name.m_name,
|
||||||
table->name.basename(), autoinc);
|
table->name.basename(), autoinc);
|
||||||
}
|
}
|
||||||
|
@ -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());
|
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);
|
dblen, table->name.m_name, table->name.m_name + dblen + 1);
|
||||||
return DB_TABLESPACE_NOT_FOUND;
|
return DB_TABLESPACE_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
@ -1064,7 +1064,8 @@ const int MYROCKS_MARIADB_PLUGIN_MATURITY_LEVEL= MariaDB_PLUGIN_MATURITY_STABLE;
|
|||||||
|
|
||||||
extern uint32_t rocksdb_ignore_datadic_errors;
|
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
|
} // namespace myrocks
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user