Skip to content

Commit

Permalink
MDEV-32906: The SQL error plugin prints (null) as database if the mar…
Browse files Browse the repository at this point in the history
…iadb

client is not using any database to execute the SQL.

Analysis:
When there is no database, the database string is NULL so (null) gets
printed.
Fix:
Print NULL instead of (null) because when there is no database SELECT
DATABASE() return NULL. SO NULL is more appropriate choice.
  • Loading branch information
mariadb-RuchaDeodhar committed Jan 23, 2024
1 parent 90cd712 commit ee7cc0a
Show file tree
Hide file tree
Showing 6 changed files with 104 additions and 34 deletions.
12 changes: 0 additions & 12 deletions mysql-test/suite/plugins/r/mdev_27087.result

This file was deleted.

37 changes: 37 additions & 0 deletions mysql-test/suite/plugins/r/sql_error_log_withdbinfo.result
@@ -0,0 +1,37 @@
show variables like 'sql_error_log%';
Variable_name Value
sql_error_log_filename sql_errors.log
sql_error_log_rate 1
sql_error_log_rotate OFF
sql_error_log_rotations 9
sql_error_log_size_limit 1000000
sql_error_log_with_db_and_thread_info ON
set global sql_error_log_rate=1;
# Trying to set the variable at runtime
SET sql_error_log_with_db_and_thread_info=OFF;
ERROR HY000: Variable 'sql_error_log_with_db_and_thread_info' is a read only variable
#
# Using test database from mtr
#
DROP DATABASE db;
ERROR HY000: Can't drop database 'db'; database doesn't exist
#
# Using no database at all
#
DROP DATABASE test;
DROP DATABASE db;
ERROR HY000: Can't drop database 'db'; database doesn't exist
#
# Using database with name `NULL`
#
CREATE DATABASE `NULL`;
USE `NULL`;
DROP DATABASE db;
ERROR HY000: Can't drop database 'db'; database doesn't exist
THREAD_ID `test` TIME HOSTNAME ERROR 1238: Variable 'sql_error_log_with_db_and_thread_info' is a read only variable : SET sql_error_log_with_db_and_thread_info=OFF
THREAD_ID `test` TIME HOSTNAME ERROR 1008: Can't drop database 'db'; database doesn't exist : DROP DATABASE db
THREAD_ID NULL TIME HOSTNAME ERROR 1008: Can't drop database 'db'; database doesn't exist : DROP DATABASE db
THREAD_ID `NULL` TIME HOSTNAME ERROR 1008: Can't drop database 'db'; database doesn't exist : DROP DATABASE db
DROP DATABASE `NULL`;
# Reset
CREATE DATABASE test;
18 changes: 0 additions & 18 deletions mysql-test/suite/plugins/t/mdev_27087.test

This file was deleted.

@@ -1 +1 @@
--plugin-load-add=$SQL_ERRLOG_SO --sql-error-log-with-db-and-thread-info=1
--plugin-load-add=$SQL_ERRLOG_SO --sql-error-log-with-db-and-thread-info=1 --lower_case_table_names=2
49 changes: 49 additions & 0 deletions mysql-test/suite/plugins/t/sql_error_log_withdbinfo.test
@@ -0,0 +1,49 @@
--source include/not_embedded.inc

if (!$SQL_ERRLOG_SO) {
skip No SQL_ERROR_LOG plugin;
}

show variables like 'sql_error_log%';
set global sql_error_log_rate=1;

let $MYSQLD_DATADIR= `SELECT @@datadir`;

--echo # Trying to set the variable at runtime

--error ER_INCORRECT_GLOBAL_LOCAL_VAR
SET sql_error_log_with_db_and_thread_info=OFF;

--echo #
--echo # Using test database from mtr
--echo #

--error ER_DB_DROP_EXISTS
DROP DATABASE db;

--echo #
--echo # Using no database at all
--echo #

DROP DATABASE test;
--error ER_DB_DROP_EXISTS
DROP DATABASE db;

--echo #
--echo # Using database with name `NULL`
--echo #
CREATE DATABASE `NULL`;
USE `NULL`;
--error ER_DB_DROP_EXISTS
DROP DATABASE db;


--let SEARCH_FILE= $MYSQLD_DATADIR/sql_errors.log
--let LINES_TO_READ=4
--replace_regex /[1-9]* `NULL` [1-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [ 0-9][0-9]:[0-9][0-9]:[0-9][0-9] [^E]*/THREAD_ID `NULL` TIME HOSTNAME / /[1-9]* `test` [1-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [ 0-9][0-9]:[0-9][0-9]:[0-9][0-9] [^E]*/THREAD_ID `test` TIME HOSTNAME / /[1-9]* NULL [1-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [ 0-9][0-9]:[0-9][0-9]:[0-9][0-9] [^E]*/THREAD_ID NULL TIME HOSTNAME /
--source include/read_head.inc

DROP DATABASE `NULL`;

--echo # Reset
CREATE DATABASE test;
20 changes: 17 additions & 3 deletions plugin/sql_errlog/sql_errlog.c
Expand Up @@ -15,6 +15,7 @@

#include <mysql/plugin_audit.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#include <mysql/service_logger.h>

Expand Down Expand Up @@ -91,6 +92,7 @@ static void log_sql_errors(MYSQL_THD thd __attribute__((unused)),
{
const struct mysql_event_general *event =
(const struct mysql_event_general*)ev;

if (rate &&
event->event_subclass == MYSQL_AUDIT_GENERAL_ERROR)
{
Expand All @@ -103,12 +105,24 @@ static void log_sql_errors(MYSQL_THD thd __attribute__((unused)),
(void) localtime_r(&event_time, &t);
if (with_db_and_thread_info)
{
logger_printf(logfile, "%llu %s %04d-%02d-%02d %2d:%02d:%02d "
if (event->database.str)
{
logger_printf(logfile, "%llu %`s %04d-%02d-%02d %2d:%02d:%02d "
"%s ERROR %d: %s : %s \n",
event->general_thread_id, event->database.str, t.tm_year + 1900,
t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec,
event->general_user, event->general_error_code,
t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min,
t.tm_sec, event->general_user, event->general_error_code,
event->general_command, event->general_query);
}
else
{
logger_printf(logfile, "%llu %s %04d-%02d-%02d %2d:%02d:%02d "
"%s ERROR %d: %s : %s \n",
event->general_thread_id, "NULL", t.tm_year + 1900,
t.tm_mon + 1, t.tm_mday, t.tm_hour, t.tm_min,
t.tm_sec, event->general_user, event->general_error_code,
event->general_command, event->general_query);
}
}
else
{
Expand Down

0 comments on commit ee7cc0a

Please sign in to comment.