summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <heikki@hundin.mysql.fi>2003-01-21 00:44:49 +0200
committerunknown <heikki@hundin.mysql.fi>2003-01-21 00:44:49 +0200
commitc0dd9d0aa278d66e29beb1a4a4ba2ed7f8955ab0 (patch)
tree84af559fc47937c885fbc105cc231958c543e002 /sql
parentfb466c176b6bd0f41b21e3dcfe04c21867f94a80 (diff)
downloadmariadb-git-c0dd9d0aa278d66e29beb1a4a4ba2ed7f8955ab0.tar.gz
ha_innobase.cc:
Backport from 4.0: convert TL_READ_NO_INSERT to TL_READ to allow concurrent inserts to the table in INSERT INTO ... SELECT ... FROM table sql/ha_innobase.cc: Backport from 4.0: convert TL_READ_NO_INSERT to TL_READ to allow concurrent inserts to the table in INSERT INTO ... SELECT ... FROM table
Diffstat (limited to 'sql')
-rw-r--r--sql/ha_innobase.cc10
1 files changed, 10 insertions, 0 deletions
diff --git a/sql/ha_innobase.cc b/sql/ha_innobase.cc
index 19ec6a9bb06..7045e5c31d5 100644
--- a/sql/ha_innobase.cc
+++ b/sql/ha_innobase.cc
@@ -3718,6 +3718,16 @@ ha_innobase::store_lock(
lock_type = TL_WRITE_ALLOW_WRITE;
}
+ /* In queries of type INSERT INTO t1 SELECT ... FROM t2 ...
+ MySQL would use the lock TL_READ_NO_INSERT on t2, and that
+ would conflict with TL_WRITE_ALLOW_WRITE, blocking all inserts
+ to t2. Convert the lock to a normal read lock to allow
+ concurrent inserts to t2. */
+
+ if (lock_type == TL_READ_NO_INSERT && !thd->in_lock_tables) {
+ lock_type = TL_READ;
+ }
+
lock.type=lock_type;
}