summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@donna.mysql.fi>2001-03-27 13:05:48 +0300
committerunknown <monty@donna.mysql.fi>2001-03-27 13:05:48 +0300
commit475c3d52a9a8459d0e98769900ff345fc42fde88 (patch)
tree79556751870ab82c0f898e5350ffa270c21f1519
parent5c548150fbcf34af721e98807c9c929caa4eccd8 (diff)
downloadmariadb-git-mysql-3.23.36.tar.gz
Fixed bug in lock tables introduced by shared locks.mysql-3.23.36
New lock test Docs/manual.texi: Small update sql/sql_base.cc: Fixed bug in lock tables introduced by shared locks.
-rw-r--r--Docs/manual.texi4
-rw-r--r--mysql-test/r/lock.result2
-rw-r--r--mysql-test/t/lock.test23
-rw-r--r--sql/sql_base.cc2
4 files changed, 30 insertions, 1 deletions
diff --git a/Docs/manual.texi b/Docs/manual.texi
index 36090a4d6b9..4264827d51c 100644
--- a/Docs/manual.texi
+++ b/Docs/manual.texi
@@ -17995,6 +17995,10 @@ Addresses may be 4 or 8 byte addresses:
mysql> select INET_ATON("209.207.224.40");
-> 3520061480
@end example
+
+The generated number is always in network byte order; For example the
+above number is calculated as @code{209*255^3 + 207*255^2 + 224*255 +40}.
+
@findex MASTER_POS_WAIT()
@item MASTER_POS_WAIT(log_name, log_pos)
Blocks until the slave reaches the specified position in the master log during
diff --git a/mysql-test/r/lock.result b/mysql-test/r/lock.result
new file mode 100644
index 00000000000..7b116326fc4
--- /dev/null
+++ b/mysql-test/r/lock.result
@@ -0,0 +1,2 @@
+dummy1 count(distinct id)
+NULL 1
diff --git a/mysql-test/t/lock.test b/mysql-test/t/lock.test
new file mode 100644
index 00000000000..777129ec814
--- /dev/null
+++ b/mysql-test/t/lock.test
@@ -0,0 +1,23 @@
+#
+# Testing of table locking
+#
+
+drop table if exists t1,t2;
+CREATE TABLE t1 ( `id` int(11) NOT NULL default '0', `id2` int(11) NOT NULL default '0', `id3` int(11) NOT NULL default '0', `dummy1` char(30) default NULL, PRIMARY KEY (`id`,`id2`), KEY `index_id3` (`id3`)) TYPE=MyISAM;
+insert into t1 (id,id2) values (1,1),(1,2),(1,3);
+LOCK TABLE t1 WRITE;
+select dummy1,count(distinct id) from t1 group by dummy1;
+update t1 set id=-1 where id=1;
+LOCK TABLE t1 READ;
+--error 1099
+update t1 set id=1 where id=1;
+--error 1100
+create table t2 SELECT * from t1;
+create temporary table t2 SELECT * from t1;
+drop table if exists t2;
+unlock tables;
+create table t2 SELECT * from t1;
+LOCK TABLE t1 WRITE,t2 write;
+insert into t2 SELECT * from t1;
+update t1 set id=1 where id=-1;
+drop table t1,t2;
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 0024e80219b..04ed72aec92 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -1362,7 +1362,7 @@ int open_tables(THD *thd,TABLE_LIST *start)
result= -1; // Fatal error
break;
}
- if (tables->lock_type != TL_UNLOCK)
+ if (tables->lock_type != TL_UNLOCK && ! thd->locked_tables)
tables->table->reginfo.lock_type=tables->lock_type;
tables->table->grant= tables->grant;
}