]> git.mxchange.org Git - friendica.git/commitdiff
Avoid duplicated queries
authorMichael <heluecht@pirati.ca>
Mon, 1 May 2017 19:54:08 +0000 (19:54 +0000)
committerMichael <heluecht@pirati.ca>
Mon, 1 May 2017 19:54:08 +0000 (19:54 +0000)
include/dba.php

index 11e1d2131d27f74a9d5c0ebf5057c79e0858a3e8..924c31e05f3901d42eb560b180764e01a275a3f9 100644 (file)
@@ -785,7 +785,7 @@ class dba {
         *
         * @return boolean|array was the delete successfull? When $in_commit is set: deletion data
         */
-       static public function delete($table, $param, $in_commit = false, $callstack = array()) {
+       static public function delete($table, $param, $in_commit = false, &$callstack = array()) {
 
                $commands = array();
 
@@ -797,7 +797,7 @@ class dba {
                        return $commands;
                }
 
-               $callstack[$key] = $key;
+               $callstack[$key] = true;
 
                $table = self::$dbo->escape($table);
 
@@ -824,6 +824,16 @@ class dba {
                                        }
                                }
                        } else {
+                               // Create a key for preventing double queries
+                               $qkey = $field.'-'.$table.':'.implode(':', array_keys($param)).':'.implode(':', $param);
+
+                               // We quit when this key already exists in the callstack.
+                               if (isset($callstack[$qkey])) {
+                                       continue;
+                               }
+
+                               $callstack[$qkey] = true;
+
                                // Fetch all rows that are to be deleted
                                $sql = "SELECT ".self::$dbo->escape($field)." FROM `".$table."` WHERE `".
                                implode("` = ? AND `", array_keys($param))."` = ?";