summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <petr/cps@owlet.local>2006-09-15 17:24:13 +0400
committerunknown <petr/cps@owlet.local>2006-09-15 17:24:13 +0400
commit372d1c8c5a82ade48a98ca9c724241ef348eff7b (patch)
tree941901b73008934003e348da1eb5233732e53c0b
parentbba4e89a514b7d61ef04ce012514538ee59dff35 (diff)
parentabbb201661144f2a75d70c32da49dcb1692be412 (diff)
downloadmariadb-git-372d1c8c5a82ade48a98ca9c724241ef348eff7b.tar.gz
Merge pchardin@bk-internal.mysql.com:/home/bk/mysql-5.1-runtime
into mysql.com:/home/cps/mysql/trees/5.1-runtime-new sql/handler.h: Auto merged sql/share/errmsg.txt: Auto merged sql/sql_table.cc: Auto merged storage/csv/ha_tina.cc: Auto merged storage/myisam/ha_myisam.cc: Auto merged
-rw-r--r--mysql-test/r/log_tables.result18
-rw-r--r--mysql-test/t/log_tables.test18
-rw-r--r--sql/handler.h1
-rw-r--r--sql/share/errmsg.txt4
-rw-r--r--sql/sql_table.cc9
-rw-r--r--storage/csv/ha_tina.cc2
-rw-r--r--storage/myisam/ha_myisam.cc2
-rw-r--r--storage/myisam/mi_write.c8
8 files changed, 33 insertions, 29 deletions
diff --git a/mysql-test/r/log_tables.result b/mysql-test/r/log_tables.result
index 638c05dd712..59cef29dc8f 100644
--- a/mysql-test/r/log_tables.result
+++ b/mysql-test/r/log_tables.result
@@ -73,16 +73,16 @@ 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
+ERROR HY000: You cannot 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
+ERROR HY000: You cannot alter a log table if logging is enabled
drop table mysql.general_log;
-ERROR HY000: Cannot drop log table if log is enabled
+ERROR HY000: You cannot drop a log table if logging is enabled
drop table mysql.slow_log;
-ERROR HY000: Cannot drop log table if log is enabled
+ERROR HY000: You cannot drop a log table if logging 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
+ERROR HY000: You cannot alter a log table if logging is enabled
set global slow_query_log='OFF';
show create table mysql.general_log;
Table Create Table
@@ -173,13 +173,13 @@ unlock tables;
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
+ERROR HY000: This storage engine cannot be used for log tables"
alter table mysql.slow_log engine=innodb;
-ERROR HY000: One can use only CSV and MyISAM engines for the log tables
+ERROR HY000: This storage engine cannot be used for log tables"
alter table mysql.slow_log engine=archive;
-ERROR HY000: One can use only CSV and MyISAM engines for the log tables
+ERROR HY000: This storage engine cannot be used for log tables"
alter table mysql.slow_log engine=blackhole;
-ERROR HY000: One can use only CSV and MyISAM engines for the log tables
+ERROR HY000: This storage engine cannot be used for log tables"
drop table mysql.slow_log;
drop table mysql.general_log;
drop table mysql.general_log;
diff --git a/mysql-test/t/log_tables.test b/mysql-test/t/log_tables.test
index 97c83310b4d..d9e17129799 100644
--- a/mysql-test/t/log_tables.test
+++ b/mysql-test/t/log_tables.test
@@ -178,21 +178,21 @@ select * from mysql.slow_log;
# 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
+--error ER_BAD_LOG_STATEMENT
alter table mysql.general_log engine=myisam;
---error ER_CANT_ALTER_LOG_TABLE
+--error ER_BAD_LOG_STATEMENT
alter table mysql.slow_log engine=myisam;
---error ER_CANT_DROP_LOG_TABLE
+--error ER_BAD_LOG_STATEMENT
drop table mysql.general_log;
---error ER_CANT_DROP_LOG_TABLE
+--error ER_BAD_LOG_STATEMENT
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
+--error ER_BAD_LOG_STATEMENT
alter table mysql.slow_log engine=myisam;
# alter both tables
@@ -252,13 +252,13 @@ 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
+--error ER_UNSUPORTED_LOG_ENGINE
alter table mysql.slow_log engine=ndb;
---error ER_BAD_LOG_ENGINE
+--error ER_UNSUPORTED_LOG_ENGINE
alter table mysql.slow_log engine=innodb;
---error ER_BAD_LOG_ENGINE
+--error ER_UNSUPORTED_LOG_ENGINE
alter table mysql.slow_log engine=archive;
---error ER_BAD_LOG_ENGINE
+--error ER_UNSUPORTED_LOG_ENGINE
alter table mysql.slow_log engine=blackhole;
drop table mysql.slow_log;
diff --git a/sql/handler.h b/sql/handler.h
index abc3e18d7a0..92a3ad69138 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -690,6 +690,7 @@ struct handlerton
#define HTON_FLUSH_AFTER_RENAME (1 << 4)
#define HTON_NOT_USER_SELECTABLE (1 << 5)
#define HTON_TEMPORARY_NOT_SUPPORTED (1 << 6) //Having temporary tables not supported
+#define HTON_SUPPORT_LOG_TABLES (1 << 7) //Engine supports log tables
typedef struct st_thd_trans
{
diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt
index 37f54899615..2b382317253 100644
--- a/sql/share/errmsg.txt
+++ b/sql/share/errmsg.txt
@@ -5990,3 +5990,7 @@ ER_HOSTNAME
eng "host name"
ER_WRONG_STRING_LENGTH
eng "String '%-.70s' is too long for %s (should be no longer than %d)"
+ER_UNSUPORTED_LOG_ENGINE
+ eng "This storage engine cannot be used for log tables""
+ER_BAD_LOG_STATEMENT
+ eng "You cannot %s a log table if logging is enabled"
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 02de7abb674..25de19b20b2 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -1628,7 +1628,7 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
(!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));
+ my_error(ER_BAD_LOG_STATEMENT, MYF(0), "drop");
DBUG_RETURN(1);
}
}
@@ -5179,7 +5179,7 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
(table_kind == SLOW_LOG && opt_slow_log &&
logger.is_slow_log_table_enabled()))
{
- my_error(ER_CANT_ALTER_LOG_TABLE, MYF(0));
+ my_error(ER_BAD_LOG_STATEMENT, MYF(0), "alter");
DBUG_RETURN(TRUE);
}
@@ -5187,10 +5187,9 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
if ((table_kind == GENERAL_LOG || table_kind == SLOW_LOG) &&
(lex_create_info->used_fields & HA_CREATE_USED_ENGINE) &&
(!lex_create_info->db_type || /* unknown engine */
- !(lex_create_info->db_type->db_type == DB_TYPE_MYISAM ||
- lex_create_info->db_type->db_type == DB_TYPE_CSV_DB)))
+ !(lex_create_info->db_type->flags & HTON_SUPPORT_LOG_TABLES)))
{
- my_error(ER_BAD_LOG_ENGINE, MYF(0));
+ my_error(ER_UNSUPORTED_LOG_ENGINE, MYF(0));
DBUG_RETURN(TRUE);
}
}
diff --git a/storage/csv/ha_tina.cc b/storage/csv/ha_tina.cc
index ce19202d745..698b7302a81 100644
--- a/storage/csv/ha_tina.cc
+++ b/storage/csv/ha_tina.cc
@@ -162,7 +162,7 @@ static int tina_init_func()
tina_hton.db_type= DB_TYPE_CSV_DB;
tina_hton.create= tina_create_handler;
tina_hton.panic= tina_end;
- tina_hton.flags= HTON_CAN_RECREATE;
+ tina_hton.flags= HTON_CAN_RECREATE | HTON_SUPPORT_LOG_TABLES;
}
return 0;
}
diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc
index 6a32ba95eee..e73735a3203 100644
--- a/storage/myisam/ha_myisam.cc
+++ b/storage/myisam/ha_myisam.cc
@@ -1783,7 +1783,7 @@ static int myisam_init()
myisam_hton.db_type=DB_TYPE_MYISAM;
myisam_hton.create=myisam_create_handler;
myisam_hton.panic=mi_panic;
- myisam_hton.flags=HTON_CAN_RECREATE;
+ myisam_hton.flags= HTON_CAN_RECREATE | HTON_SUPPORT_LOG_TABLES;
return 0;
}
diff --git a/storage/myisam/mi_write.c b/storage/myisam/mi_write.c
index f16d9471afe..7080875009b 100644
--- a/storage/myisam/mi_write.c
+++ b/storage/myisam/mi_write.c
@@ -167,13 +167,13 @@ int mi_write(MI_INFO *info, byte *record)
/*
Update status of the table. We need to do so after each row write
for the log tables, as we want the new row to become visible to
- other threads as soon as possible. We lock mutex here to follow
- pthread memory visibility rules.
+ other threads as soon as possible. We don't lock mutex here
+ (as it is required by pthread memory visibility rules) as (1) it's
+ not critical to use outdated share->is_log_table value (2) locking
+ mutex here for every write is too expensive.
*/
- pthread_mutex_lock(&share->intern_lock);
if (share->is_log_table)
mi_update_status((void*) info);
- pthread_mutex_unlock(&share->intern_lock);
allow_break(); /* Allow SIGHUP & SIGINT */
DBUG_RETURN(0);