MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Petr Chardin Date:July 29 2006 9:09pm
Subject:bk commit into 5.1 tree (petr:1.2254) BUG#18559
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of cps. When cps does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2006-07-30 01:09:23+04:00, petr@stripped +12 -0
  Fix Bug #18559 "log tables cannot change engine, and
                  gets deadlocked when dropping w/ log on"
  
  Log tables rely on concurrent insert machinery to add data.
  This means that log tables are always opened and locked by
  special (artificial) logger threads. Because of this, the thread
  which tries to drop a log table starts to wait for the table
  to be unlocked. Which will happen only if the log table is disabled.
  Alike situation happens if one tries to alter a log table.
  However in addition to the problem above, alter table calls
  check_if_locking_is_allowed() routine for the engine. The
  routine does not allow alter for the log tables. So, alter
  doesn't start waiting forever for logs to be disabled, but 
  returns with an error.
  Another problem is that not all engines could be used for
  the log tables. That's because they need concurrent insert.
  
  In this patch we:
  (1) Explicitly disallow to drop/alter a log table if it
      is currently used by the logger.
  (2) Update MyISAM to support log tables
  (3) Allow to drop log tables/alter log tables if log is
      disabled
  At the same time we (4) Disallow to alter log tables to
  unsupported engine (after this patch CSV and MyISAM are 
  alowed)

  mysql-test/r/log_tables.result@stripped, 2006-07-30 01:09:14+04:00, petr@stripped +130 -0
    Update result file.
    Note: there are warnings in result file. This is because of CSV
    bug (Bug #21328). They should go away after it is fixed.

  mysql-test/t/log_tables.test@stripped, 2006-07-30 01:09:15+04:00, petr@stripped +101 -0
    Add a test for the bug

  sql/ha_myisam.cc@stripped, 2006-07-30 01:09:15+04:00, petr@stripped +23 -0
    Add log table handling to myisam: as log tables
    use concurrent insert, they are typically
    locked with TL_CONCURRERENT_INSERT lock. So,
    disallow other threads to attempt locking of
    the log tbales in incompatible modes. Because
    otherwise the threads will wait for the tables
    to be unlocked forever.

  sql/log.cc@stripped, 2006-07-30 01:09:15+04:00, petr@stripped +4 -3
    we shouldn't close the log table if and only
    if this particular table is already closed

  sql/log.h@stripped, 2006-07-30 01:09:15+04:00, petr@stripped +8 -0
    add new functions to check if a log is enabled

  sql/share/errmsg.txt@stripped, 2006-07-30 01:09:15+04:00, petr@stripped +6 -0
    add new error messages

  sql/sql_table.cc@stripped, 2006-07-30 01:09:15+04:00, petr@stripped +48 -0
    DROP and ALTER TABLE should not work on log
    tables if the log tables are enabled

  storage/csv/ha_tina.cc@stripped, 2006-07-30 01:09:15+04:00, petr@stripped +1 -0
    Allow ALTER TABLE for the log tables

  storage/myisam/mi_extra.c@stripped, 2006-07-30 01:09:15+04:00, petr@stripped +5 -0
    add new ::extra() flag processing to myisam

  storage/myisam/mi_open.c@stripped, 2006-07-30 01:09:15+04:00, petr@stripped +1 -0
    init log table flag

  storage/myisam/mi_write.c@stripped, 2006-07-30 01:09:15+04:00, petr@stripped +15 -0
    update status after each write if it's a log table

  storage/myisam/myisamdef.h@stripped, 2006-07-30 01:09:15+04:00, petr@stripped +3 -0
    Add new log table flug to myisam share.
    We need it to distinguish between usual
    and log tables, as for the log tables we
    should provide concurrent insert in a
    different way than for usual tables: we
    want new rows to be immediately visible
    to other threads.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	petr
# Host:	owlet.
# Root:	/home/cps/mysql/devel/5.1-curs-bug

--- 1.49/storage/myisam/mi_extra.c	2006-07-30 01:09:36 +04:00
+++ 1.50/storage/myisam/mi_extra.c	2006-07-30 01:09:36 +04:00
@@ -366,6 +366,11 @@
     pthread_mutex_unlock(&share->intern_lock);
 #endif
     break;
+  case HA_EXTRA_MARK_AS_LOG_TABLE:
+    pthread_mutex_lock(&THR_LOCK_myisam);
+    share->is_log_table= TRUE;
+    pthread_mutex_unlock(&THR_LOCK_myisam);
+    break;
   case HA_EXTRA_KEY_CACHE:
   case HA_EXTRA_NO_KEY_CACHE:
   default:

--- 1.102/storage/myisam/mi_open.c	2006-07-30 01:09:36 +04:00
+++ 1.103/storage/myisam/mi_open.c	2006-07-30 01:09:36 +04:00
@@ -489,6 +489,7 @@
       share->data_file_type = DYNAMIC_RECORD;
     my_afree((gptr) disk_cache);
     mi_setup_functions(share);
+    share->is_log_table= FALSE;
 #ifdef THREAD
     thr_lock_init(&share->lock);
     VOID(pthread_mutex_init(&share->intern_lock,MY_MUTEX_INIT_FAST));

--- 1.58/storage/myisam/mi_write.c	2006-07-30 01:09:36 +04:00
+++ 1.59/storage/myisam/mi_write.c	2006-07-30 01:09:36 +04:00
@@ -163,6 +163,21 @@
     (*info->invalidator)(info->filename);
     info->invalidator=0;
   }
+  if (share->is_log_table)
+  {
+    /*
+      Update status of the table. We beed to do so after each row write
+      for the log tables, as we want the new row to become visible to
+      other threads as sson as possible. We lock mutex here to follow
+      pthread memory visibility rules.
+      QQ: Shall we use THR_LOCK_myisam mutex or introduce a new one, which
+          will be called in mi_update/status/mi_get_status only for the
+          log tables?
+    */
+    pthread_mutex_lock(&THR_LOCK_myisam);
+    mi_update_status((void*) info);
+    pthread_mutex_unlock(&THR_LOCK_myisam);
+  }
   allow_break();				/* Allow SIGHUP & SIGINT */
   DBUG_RETURN(0);
 

--- 1.89/storage/myisam/myisamdef.h	2006-07-30 01:09:36 +04:00
+++ 1.90/storage/myisam/myisamdef.h	2006-07-30 01:09:36 +04:00
@@ -201,6 +201,9 @@
   uint	blocksize;			/* blocksize of keyfile */
   myf write_flag;
   enum data_file_type data_file_type;
+  /* Below flag is needed to make log tables work with concurrent insert */
+  my_bool is_log_table;
+
   my_bool  changed,			/* If changed since lock */
     global_changed,			/* If changed since open */
     not_flushed,

--- 1.184/sql/ha_myisam.cc	2006-07-30 01:09:36 +04:00
+++ 1.185/sql/ha_myisam.cc	2006-07-30 01:09:36 +04:00
@@ -274,6 +274,29 @@
              table->s->table_name.str);
     return FALSE;
   }
+
+  /*
+    Deny locking of the log tables, which is incompatible with
+    concurrent insert. Unless called from a logger THD:
+    general_log_thd or slow_log_thd.
+  */
+  if (table->s->log_table &&
+      sql_command != SQLCOM_TRUNCATE &&
+      sql_command != SQLCOM_ALTER_TABLE &&
+      !(sql_command == SQLCOM_FLUSH &&
+        type & REFRESH_LOG) &&
+      !called_by_logger_thread &&
+      (table->reginfo.lock_type >= TL_READ_NO_INSERT))
+  {
+    /*
+      The check  >= TL_READ_NO_INSERT denies all write locks
+      plus the only read lock (TL_READ_NO_INSERT itself)
+    */
+    table->reginfo.lock_type == TL_READ_NO_INSERT ?
+      my_error(ER_CANT_READ_LOCK_LOG_TABLE, MYF(0)) :
+        my_error(ER_CANT_WRITE_LOCK_LOG_TABLE, MYF(0));
+    return FALSE;
+  }
   return TRUE;
 }
 

--- 1.222/sql/log.cc	2006-07-30 01:09:36 +04:00
+++ 1.223/sql/log.cc	2006-07-30 01:09:36 +04:00
@@ -1106,15 +1106,16 @@
   THD *log_thd, *curr= current_thd;
   TABLE_LIST *table;
 
-  if (!logger.is_log_tables_initialized)
-    return;                                     /* do nothing */
-
   switch (log_table_type) {
   case QUERY_LOG_GENERAL:
+    if (!logger.is_general_log_table_enabled())
+      return;                                     /* do nothing */
     log_thd= general_log_thd;
     table= &general_log;
     break;
   case QUERY_LOG_SLOW:
+    if (!logger.is_slow_log_table_enabled())
+      return;                                     /* do nothing */
     log_thd= slow_log_thd;
     table= &slow_log;
     break;

--- 1.358/sql/sql_table.cc	2006-07-30 01:09:36 +04:00
+++ 1.359/sql/sql_table.cc	2006-07-30 01:09:36 +04:00
@@ -1537,6 +1537,18 @@
     table->db_type= NULL;
     if ((share= get_cached_table_share(table->db, table->table_name)))
       table->db_type= share->db_type;
+
+    /* Disable drop of enabled log tables */
+    if (share && share->log_table &&
+        ((!my_strcasecmp(system_charset_info, table->table_name,
+                         "general_log") && opt_log &&
+          logger.is_general_log_table_enabled()) ||
+         (!my_strcasecmp(system_charset_info, table->table_name, "slow_log")
+          && opt_slow_log && logger.is_slow_log_table_enabled())))
+    {
+      my_error(ER_CANT_DROP_LOG_TABLE, MYF(0));
+      DBUG_RETURN(1);
+    }
   }
 
   if (lock_table_names(thd, tables))
@@ -4990,6 +5002,42 @@
   LINT_INIT(index_drop_count);
   LINT_INIT(index_add_buffer);
   LINT_INIT(index_drop_buffer);
+
+  if (table_list && table_list->db &&
+      !my_strcasecmp(system_charset_info, table_list->db, "mysql") &&
+      table_list->table_name)
+  {
+    enum enum_table_kind { NOT_LOG_TABLE= 1, GENERAL_LOG, SLOW_LOG }
+         table_kind= NOT_LOG_TABLE;
+
+    if (!my_strcasecmp(system_charset_info, table_list->table_name,
+                       "general_log"))
+      table_kind= GENERAL_LOG;
+    else
+      if (!my_strcasecmp(system_charset_info, table_list->table_name,
+                         "slow_log"))
+        table_kind= SLOW_LOG;
+
+    /* Disable alter of enabled log tables */
+    if ((table_kind == GENERAL_LOG && opt_log &&
+        logger.is_general_log_table_enabled()) ||
+       (table_kind == SLOW_LOG && opt_slow_log &&
+         logger.is_slow_log_table_enabled()))
+    {
+      my_error(ER_CANT_ALTER_LOG_TABLE, MYF(0));
+      DBUG_RETURN(TRUE);
+    }
+
+    /* Disable alter of log tables to unsupported engine */
+    if ((table_kind == GENERAL_LOG || table_kind == SLOW_LOG) &&
+        (lex_create_info->used_fields & HA_CREATE_USED_ENGINE) &&
+        !(lex_create_info->db_type->db_type == DB_TYPE_MYISAM ||
+          lex_create_info->db_type->db_type == DB_TYPE_CSV_DB))
+    {
+      my_error(ER_BAD_LOG_ENGINE, MYF(0));
+      DBUG_RETURN(TRUE);
+    }
+  }
 
   thd->proc_info="init";
   if (!(create_info= copy_create_info(lex_create_info)))

--- 1.113/sql/share/errmsg.txt	2006-07-30 01:09:36 +04:00
+++ 1.114/sql/share/errmsg.txt	2006-07-30 01:09:36 +04:00
@@ -5841,3 +5841,9 @@
         eng "The server was not built with row-based replication"
 ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA
 	eng "Triggers can not be created on system tables"
+ER_CANT_ALTER_LOG_TABLE
+        eng "You can't alter a log table if logging is enabled"
+ER_BAD_LOG_ENGINE
+        eng "One can use only CSV and MyISAM engines for the log tables"
+ER_CANT_DROP_LOG_TABLE
+        eng "Cannot drop log table if log is enabled"

--- 1.52/storage/csv/ha_tina.cc	2006-07-30 01:09:36 +04:00
+++ 1.53/storage/csv/ha_tina.cc	2006-07-30 01:09:36 +04:00
@@ -824,6 +824,7 @@
   */
   if (table->s->log_table &&
       sql_command != SQLCOM_TRUNCATE &&
+      sql_command != SQLCOM_ALTER_TABLE &&
       !(sql_command == SQLCOM_FLUSH &&
         type & REFRESH_LOG) &&
       !called_by_logger_thread &&

--- 1.5/mysql-test/r/log_tables.result	2006-07-30 01:09:36 +04:00
+++ 1.6/mysql-test/r/log_tables.result	2006-07-30 01:09:36 +04:00
@@ -72,3 +72,133 @@
 select * from mysql.slow_log;
 start_time	user_host	query_time	lock_time	rows_sent	rows_examined	db	last_insert_id	insert_id	server_id	sql_text
 TIMESTAMP	USER_HOST	QUERY_TIME	00:00:00	1	0	test	0	0	1	select sleep(2)
+alter table mysql.general_log engine=myisam;
+ERROR HY000: You can't alter a log table if logging is enabled
+alter table mysql.slow_log engine=myisam;
+ERROR HY000: You can't alter a log table if logging is enabled
+drop table mysql.general_log;
+ERROR HY000: Cannot drop log table if log is enabled
+drop table mysql.slow_log;
+ERROR HY000: Cannot drop log table if log is enabled
+set global general_log='OFF';
+alter table mysql.slow_log engine=myisam;
+ERROR HY000: You can't alter a log table if logging is enabled
+set global slow_query_log='OFF';
+show create table mysql.general_log;
+Table	Create Table
+general_log	CREATE TABLE `general_log` (
+  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `user_host` mediumtext,
+  `thread_id` int(11) DEFAULT NULL,
+  `server_id` int(11) DEFAULT NULL,
+  `command_type` varchar(64) DEFAULT NULL,
+  `argument` mediumtext
+) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log'
+show create table mysql.slow_log;
+Table	Create Table
+slow_log	CREATE TABLE `slow_log` (
+  `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `user_host` mediumtext NOT NULL,
+  `query_time` time NOT NULL,
+  `lock_time` time NOT NULL,
+  `rows_sent` int(11) NOT NULL,
+  `rows_examined` int(11) NOT NULL,
+  `db` varchar(512) DEFAULT NULL,
+  `last_insert_id` int(11) DEFAULT NULL,
+  `insert_id` int(11) DEFAULT NULL,
+  `server_id` int(11) DEFAULT NULL,
+  `sql_text` mediumtext NOT NULL
+) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'
+alter table mysql.general_log engine=myisam;
+alter table mysql.slow_log engine=myisam;
+Warnings:
+Warning	1264	Out of range value for column 'last_insert_id' at row 0
+Warning	1264	Out of range value for column 'insert_id' at row 0
+show create table mysql.general_log;
+Table	Create Table
+general_log	CREATE TABLE `general_log` (
+  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `user_host` mediumtext,
+  `thread_id` int(11) DEFAULT NULL,
+  `server_id` int(11) DEFAULT NULL,
+  `command_type` varchar(64) DEFAULT NULL,
+  `argument` mediumtext
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='General log'
+show create table mysql.slow_log;
+Table	Create Table
+slow_log	CREATE TABLE `slow_log` (
+  `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  `user_host` mediumtext NOT NULL,
+  `query_time` time NOT NULL,
+  `lock_time` time NOT NULL,
+  `rows_sent` int(11) NOT NULL,
+  `rows_examined` int(11) NOT NULL,
+  `db` varchar(512) DEFAULT NULL,
+  `last_insert_id` int(11) DEFAULT NULL,
+  `insert_id` int(11) DEFAULT NULL,
+  `server_id` int(11) DEFAULT NULL,
+  `sql_text` mediumtext NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Slow log'
+set global general_log='ON';
+set global slow_query_log='ON';
+select * from mysql.general_log;
+event_time	user_host	thread_id	server_id	command_type	argument
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	set names utf8
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	create table bug16905 (s char(15) character set utf8 default 'пусто')
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	insert into bug16905 values ('новое')
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	select * from mysql.general_log
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	drop table bug16905
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	truncate table mysql.slow_log
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	set session long_query_time=1
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	select sleep(2)
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	select * from mysql.slow_log
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	alter table mysql.general_log engine=myisam
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	alter table mysql.slow_log engine=myisam
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	drop table mysql.general_log
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	drop table mysql.slow_log
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	set global general_log='OFF'
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	set global slow_query_log='ON'
+TIMESTAMP	USER_HOST	THREAD_ID	1	Query	select * from mysql.general_log
+set global general_log='OFF';
+set global slow_query_log='OFF';
+alter table mysql.slow_log engine=ndb;
+ERROR HY000: One can use only CSV and MyISAM engines for the log tables
+alter table mysql.slow_log engine=innodb;
+ERROR HY000: One can use only CSV and MyISAM engines for the log tables
+alter table mysql.slow_log engine=archive;
+ERROR HY000: One can use only CSV and MyISAM engines for the log tables
+alter table mysql.slow_log engine=blackhole;
+ERROR HY000: One can use only CSV and MyISAM engines for the log tables
+drop table mysql.slow_log;
+drop table mysql.general_log;
+drop table mysql.general_log;
+ERROR 42S02: Unknown table 'general_log'
+drop table mysql.slow_log;
+ERROR 42S02: Unknown table 'slow_log'
+use mysql;
+CREATE TABLE `general_log` (
+`event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
+ON UPDATE CURRENT_TIMESTAMP,
+`user_host` mediumtext,
+`thread_id` int(11) DEFAULT NULL,
+`server_id` int(11) DEFAULT NULL,
+`command_type` varchar(64) DEFAULT NULL,
+`argument` mediumtext
+) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log';
+CREATE TABLE `slow_log` (
+`start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
+ON UPDATE CURRENT_TIMESTAMP,
+`user_host` mediumtext NOT NULL,
+`query_time` time NOT NULL,
+`lock_time` time NOT NULL,
+`rows_sent` int(11) NOT NULL,
+`rows_examined` int(11) NOT NULL,
+`db` varchar(512) DEFAULT NULL,
+`last_insert_id` int(11) DEFAULT NULL,
+`insert_id` int(11) DEFAULT NULL,
+`server_id` int(11) DEFAULT NULL,
+`sql_text` mediumtext NOT NULL
+) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log';
+set global general_log='ON';
+set global slow_query_log='ON';
+use test;

--- 1.10/mysql-test/t/log_tables.test	2006-07-30 01:09:36 +04:00
+++ 1.11/mysql-test/t/log_tables.test	2006-07-30 01:09:36 +04:00
@@ -171,6 +171,107 @@
 --replace_column 1 TIMESTAMP 2 USER_HOST 3 QUERY_TIME
 select * from mysql.slow_log;
 
+#
+# Bug #18559 log tables cannot change engine, and gets deadlocked when
+# dropping w/ log on
+#
+
+# check that appropriate error messages are given when one attempts to alter
+# or drop a log tables, while corresponding logs are enabled
+--error ER_CANT_ALTER_LOG_TABLE
+alter table mysql.general_log engine=myisam;
+--error ER_CANT_ALTER_LOG_TABLE
+alter table mysql.slow_log engine=myisam;
+
+--error ER_CANT_DROP_LOG_TABLE
+drop table mysql.general_log;
+--error ER_CANT_DROP_LOG_TABLE
+drop table mysql.slow_log;
+
+# check that one can alter log tables to MyISAM
+set global general_log='OFF';
+
+# cannot convert another log table
+--error ER_CANT_ALTER_LOG_TABLE
+alter table mysql.slow_log engine=myisam;
+
+# alter both tables
+set global slow_query_log='OFF';
+# check that both tables use CSV engine
+show create table mysql.general_log;
+show create table mysql.slow_log;
+
+alter table mysql.general_log engine=myisam;
+alter table mysql.slow_log engine=myisam;
+
+# check that the tables were converted
+show create table mysql.general_log;
+show create table mysql.slow_log;
+
+# enable log tables and chek that new tables indeed work
+set global general_log='ON';
+set global slow_query_log='ON';
+
+--replace_column 1 TIMESTAMP 2 USER_HOST 3 THREAD_ID
+select * from mysql.general_log;
+
+# check that we can drop them
+set global general_log='OFF';
+set global slow_query_log='OFF';
+
+# check that alter table doesn't work for other engines
+--error ER_BAD_LOG_ENGINE
+alter table mysql.slow_log engine=ndb;
+--error ER_BAD_LOG_ENGINE
+alter table mysql.slow_log engine=innodb;
+--error ER_BAD_LOG_ENGINE
+alter table mysql.slow_log engine=archive;
+--error ER_BAD_LOG_ENGINE
+alter table mysql.slow_log engine=blackhole;
+
+drop table mysql.slow_log;
+drop table mysql.general_log;
+
+# check that table share cleanup is performed correctly (double drop)
+
+--error ER_BAD_TABLE_ERROR
+drop table mysql.general_log;
+--error ER_BAD_TABLE_ERROR
+drop table mysql.slow_log;
+
+# recreate tables and enable logs
+
+use mysql;
+
+CREATE TABLE `general_log` (
+  `event_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
+                         ON UPDATE CURRENT_TIMESTAMP,
+  `user_host` mediumtext,
+  `thread_id` int(11) DEFAULT NULL,
+  `server_id` int(11) DEFAULT NULL,
+  `command_type` varchar(64) DEFAULT NULL,
+  `argument` mediumtext
+) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='General log';
+
+CREATE TABLE `slow_log` (
+  `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
+                         ON UPDATE CURRENT_TIMESTAMP,
+  `user_host` mediumtext NOT NULL,
+  `query_time` time NOT NULL,
+  `lock_time` time NOT NULL,
+  `rows_sent` int(11) NOT NULL,
+  `rows_examined` int(11) NOT NULL,
+  `db` varchar(512) DEFAULT NULL,
+  `last_insert_id` int(11) DEFAULT NULL,
+  `insert_id` int(11) DEFAULT NULL,
+  `server_id` int(11) DEFAULT NULL,
+  `sql_text` mediumtext NOT NULL
+) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log';
+
+set global general_log='ON';
+set global slow_query_log='ON';
+use test;
+
 # kill all connections
 disconnect con1;
 disconnect con2;

--- 1.12/sql/log.h	2006-07-30 01:09:36 +04:00
+++ 1.13/sql/log.h	2006-07-30 01:09:36 +04:00
@@ -497,6 +497,14 @@
   {}
   void lock() { (void) pthread_mutex_lock(&LOCK_logger); }
   void unlock() { (void) pthread_mutex_unlock(&LOCK_logger); }
+  bool is_general_log_table_enabled()
+  {
+    return table_log_handler && table_log_handler->general_log.table != 0;
+  }
+  bool is_slow_log_table_enabled()
+  {
+    return table_log_handler && table_log_handler->slow_log.table != 0;
+  }
   /*
     We want to initialize all log mutexes as soon as possible,
     but we cannot do it in constructor, as safe_mutex relies on
Thread
bk commit into 5.1 tree (petr:1.2254) BUG#18559Petr Chardin29 Jul