summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2004-02-03 09:46:48 +0100
committerunknown <monty@mysql.com>2004-02-03 09:46:48 +0100
commit619eaee654d213c68f86981bf33dcccf15b52f02 (patch)
tree4e99682a8907f92bf23d26f574c2c1d6a1152c1d
parent8ab97bb111b75a66cfee409123a34da2647bcf99 (diff)
downloadmariadb-git-619eaee654d213c68f86981bf33dcccf15b52f02.tar.gz
Give error if locked table is used twice in query. This fixes strange error message when doing LOCK TABLES t1 WRITE; INSERT TABLE t1 SELECT * from t1 (Bug #2296)
client/mysqldump.c: Better help for flush-logs mysql-test/r/lock.result: Test for LOCK TABLES ; INSERT ... SELECT mysql-test/t/lock.test: Test for LOCK TABLES ; INSERT ... SELECT
-rw-r--r--client/mysqldump.c2
-rw-r--r--mysql-test/r/lock.result4
-rw-r--r--mysql-test/t/lock.test4
-rw-r--r--sql/sql_base.cc6
4 files changed, 14 insertions, 2 deletions
diff --git a/client/mysqldump.c b/client/mysqldump.c
index 38202a5c253..6078a1e9dc0 100644
--- a/client/mysqldump.c
+++ b/client/mysqldump.c
@@ -154,7 +154,7 @@ static struct my_option my_long_options[] =
{"first-slave", 'x', "Locks all tables across all databases.",
(gptr*) &opt_first_slave, (gptr*) &opt_first_slave, 0, GET_BOOL, NO_ARG,
0, 0, 0, 0, 0, 0},
- {"flush-logs", 'F', "Flush logs file in server before starting dump.",
+ {"flush-logs", 'F', "Flush logs file in server before starting dump. Note that if you use this option in combination with the --all-databases (or -A) option, the logs will be flushed for each database dumped.",
(gptr*) &flush_logs, (gptr*) &flush_logs, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0,
0, 0},
{"force", 'f', "Continue even if we get an sql-error.",
diff --git a/mysql-test/r/lock.result b/mysql-test/r/lock.result
index ad5251b9110..31a18fe6cec 100644
--- a/mysql-test/r/lock.result
+++ b/mysql-test/r/lock.result
@@ -41,5 +41,9 @@ lock tables t1 write;
check table t2;
Table Op Msg_type Msg_text
test.t2 check error Table 't2' was not locked with LOCK TABLES
+insert into t1 select nr from t1;
+Table 't1' was not locked with LOCK TABLES
unlock tables;
+lock tables t1 write, t1 as t1_alias read;
+insert into t1 select index1,nr from t1 as t1_alias;
drop table t1,t2;
diff --git a/mysql-test/t/lock.test b/mysql-test/t/lock.test
index 385713174d2..9015ce12fde 100644
--- a/mysql-test/t/lock.test
+++ b/mysql-test/t/lock.test
@@ -51,5 +51,9 @@ check table t1;
# Check error message
lock tables t1 write;
check table t2;
+--error 1100
+insert into t1 select nr from t1;
unlock tables;
+lock tables t1 write, t1 as t1_alias read;
+insert into t1 select index1,nr from t1 as t1_alias;
drop table t1,t2;
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 40153ad847e..efb008f4a6e 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -824,8 +824,12 @@ TABLE *open_table(THD *thd,const char *db,const char *table_name,
{
if (table->key_length == key_length &&
!memcmp(table->table_cache_key,key,key_length) &&
- !my_strcasecmp(table->table_name,alias))
+ !my_strcasecmp(table->table_name,alias) &&
+ table->query_id != thd->query_id)
+ {
+ table->query_id=thd->query_id;
goto reset;
+ }
}
my_printf_error(ER_TABLE_NOT_LOCKED,ER(ER_TABLE_NOT_LOCKED),MYF(0),alias);
DBUG_RETURN(0);