Avoid duplicated queries

This commit is contained in:
Michael 2017-05-01 19:54:08 +00:00
parent b9b43e30e6
commit 0241a88c0d

View file

@ -785,7 +785,7 @@ class dba {
* *
* @return boolean|array was the delete successfull? When $in_commit is set: deletion data * @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(); $commands = array();
@ -797,7 +797,7 @@ class dba {
return $commands; return $commands;
} }
$callstack[$key] = $key; $callstack[$key] = true;
$table = self::$dbo->escape($table); $table = self::$dbo->escape($table);
@ -824,6 +824,16 @@ class dba {
} }
} }
} else { } 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 // Fetch all rows that are to be deleted
$sql = "SELECT ".self::$dbo->escape($field)." FROM `".$table."` WHERE `". $sql = "SELECT ".self::$dbo->escape($field)." FROM `".$table."` WHERE `".
implode("` = ? AND `", array_keys($param))."` = ?"; implode("` = ? AND `", array_keys($param))."` = ?";