Details
-
Type:
Bug
-
Status: Closed
-
Priority:
Minor
-
Resolution: Fixed
-
Affects Version/s: None
-
Fix Version/s: None
-
Component/s: None
-
Labels:
Description
After I upgraded from MariaDB 5.2.10, my Drupal installation caught the below error log when I operated it (The Operation was: added a content to a nodequeue). After I downgraded back to 5.2.10, the problem was gone. The error reads:
PDOException: SQLSTATE[HY000]: General error: 1093 You can't specify target table 'nodequeue_nodes' for update in FROM clause: INSERT INTO
{nodequeue_nodes} (sqid, qid, nid, position, timestamp) VALUES (:sqid, :qid, :nid, IFNULL((SELECT MAX(position)+1 FROM (SELECT * from {nodequeue_nodes}WHERE sqid = :sqid) as nn), 1), :time); Array ( [:sqid] => 7 [:qid] => 7 [:nid] => 162 [:time] => 1325256693 ) in nodequeue_subqueue_add() (line 1042 of /xxx/modules/nodequeue/nodequeue.module).
Gliffy Diagrams
Attachments
Activity
- All
- Comments
- Work Log
- History
- Activity
- Transitions
Re: MariaDB 5.3.3 causes 1093 error on Drupal
The queries similar to
CREATE TABLE t ( i INT );
INSERT INTO t VALUES ( (SELECT 1 FROM ( SELECT * FROM t ) as a) );
indeed produce ER_UPDATE_TABLE_USED in 5.3.3 with derived_merge=ON, and pass with derived_merge=OFF (in 5.3.3 derived_merge=ON by default).
It seems consistent with how it works, both in 5.2 and 5.3, with a view instead of the inner subquery:
CREATE TABLE t ( i INT );
CREATE ALGORITHM=<algorithm> VIEW v AS SELECT * FROM t;
INSERT INTO t VALUES ( (SELECT 1 FROM v) );
produces an error ER_VIEW_PREVENT_UPDATE if <algorithm>=MERGE, while with<algorithm>=TEMPTABLE it works all right.
I will assign it to Igor to confirm it's the expected behavior (or not confirm).
Meanwhile, you could disable derived_merge (generally or in the session) to keep using the old query:
SET optimizer_switch='derived_merge=off';