X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FDatabase%2FDBA.php;h=6064e587a6dd2605ee42a156e4846ea9ef4566a5;hb=8addcf98442d8651c969cbcf5383c6ea71c921ad;hp=bf3004ead4761eebdc2d46fc026c8240597a47cf;hpb=2f28c2ebbfd8f66093d7081d40b1d48f65fcff20;p=friendica.git diff --git a/src/Database/DBA.php b/src/Database/DBA.php index bf3004ead4..6064e587a6 100644 --- a/src/Database/DBA.php +++ b/src/Database/DBA.php @@ -16,8 +16,6 @@ use PDO; use PDOException; use PDOStatement; -require_once 'include/dba.php'; - /** * @class MySQL database class * @@ -210,7 +208,7 @@ class DBA * @param string $query The database query that will be analyzed */ private static function logIndex($query) { - $a = get_app(); + $a = \get_app(); if (!$a->getConfigVariable('system', 'db_log_index')) { return; @@ -390,7 +388,7 @@ class DBA * @return bool|object statement object or result object */ public static function p($sql) { - $a = get_app(); + $a = \get_app(); $stamp1 = microtime(true); @@ -608,7 +606,7 @@ class DBA * @return boolean Was the query successfull? False is returned only if an error occurred */ public static function e($sql) { - $a = get_app(); + $a = \get_app(); $stamp = microtime(true); @@ -772,7 +770,7 @@ class DBA * @return array current row */ public static function fetch($stmt) { - $a = get_app(); + $a = \get_app(); $stamp1 = microtime(true); @@ -1044,12 +1042,11 @@ class DBA * @param array $options * - cascade: If true we delete records in other tables that depend on the one we're deleting through * relations (default: true) - * @param boolean $in_process Internal use: Only do a commit after the last delete * @param array $callstack Internal use: prevent endless loops * - * @return boolean|array was the delete successful? When $in_process is set: deletion data + * @return boolean was the delete successful? */ - public static function delete($table, array $conditions, array $options = [], $in_process = false, array &$callstack = []) + public static function delete($table, array $conditions, array $options = [], array &$callstack = []) { if (empty($table) || empty($conditions)) { Logger::log('Table and conditions have to be set'); @@ -1098,22 +1095,18 @@ class DBA if ((count($conditions) == 1) && ($field == array_keys($conditions)[0])) { foreach ($rel_def AS $rel_table => $rel_fields) { foreach ($rel_fields AS $rel_field) { - $retval = self::delete($rel_table, [$rel_field => array_values($conditions)[0]], $options, true, $callstack); - $commands = array_merge($commands, $retval); + $retval = self::delete($rel_table, [$rel_field => array_values($conditions)[0]], $options, $callstack); } } // We quit when this key already exists in the callstack. } elseif (!isset($callstack[$qkey])) { - $callstack[$qkey] = true; // Fetch all rows that are to be deleted $data = self::select($table, [$field], $conditions); while ($row = self::fetch($data)) { - // Now we accumulate the delete commands - $retval = self::delete($table, [$field => $row[$field]], $options, true, $callstack); - $commands = array_merge($commands, $retval); + self::delete($table, [$field => $row[$field]], $options, $callstack); } self::close($data); @@ -1123,74 +1116,70 @@ class DBA } } - if (!$in_process) { - // Now we finalize the process - $do_transaction = !self::$in_transaction; + // Now we finalize the process + $do_transaction = !self::$in_transaction; - if ($do_transaction) { - self::transaction(); - } + if ($do_transaction) { + self::transaction(); + } - $compacted = []; - $counter = []; + $compacted = []; + $counter = []; - foreach ($commands AS $command) { - $conditions = $command['conditions']; - reset($conditions); - $first_key = key($conditions); + foreach ($commands AS $command) { + $conditions = $command['conditions']; + reset($conditions); + $first_key = key($conditions); - $condition_string = self::buildCondition($conditions); + $condition_string = self::buildCondition($conditions); - if ((count($command['conditions']) > 1) || is_int($first_key)) { - $sql = "DELETE FROM `" . $command['table'] . "`" . $condition_string; - Logger::log(self::replaceParameters($sql, $conditions), Logger::DATA); + if ((count($command['conditions']) > 1) || is_int($first_key)) { + $sql = "DELETE FROM `" . $command['table'] . "`" . $condition_string; + Logger::log(self::replaceParameters($sql, $conditions), Logger::DATA); - if (!self::e($sql, $conditions)) { - if ($do_transaction) { - self::rollback(); - } - return false; - } - } else { - $key_table = $command['table']; - $key_condition = array_keys($command['conditions'])[0]; - $value = array_values($command['conditions'])[0]; - - // Split the SQL queries in chunks of 100 values - // We do the $i stuff here to make the code better readable - $i = isset($counter[$key_table][$key_condition]) ? $counter[$key_table][$key_condition] : 0; - if (isset($compacted[$key_table][$key_condition][$i]) && count($compacted[$key_table][$key_condition][$i]) > 100) { - ++$i; + if (!self::e($sql, $conditions)) { + if ($do_transaction) { + self::rollback(); } - - $compacted[$key_table][$key_condition][$i][$value] = $value; - $counter[$key_table][$key_condition] = $i; + return false; } + } else { + $key_table = $command['table']; + $key_condition = array_keys($command['conditions'])[0]; + $value = array_values($command['conditions'])[0]; + + // Split the SQL queries in chunks of 100 values + // We do the $i stuff here to make the code better readable + $i = isset($counter[$key_table][$key_condition]) ? $counter[$key_table][$key_condition] : 0; + if (isset($compacted[$key_table][$key_condition][$i]) && count($compacted[$key_table][$key_condition][$i]) > 100) { + ++$i; + } + + $compacted[$key_table][$key_condition][$i][$value] = $value; + $counter[$key_table][$key_condition] = $i; } - foreach ($compacted AS $table => $values) { - foreach ($values AS $field => $field_value_list) { - foreach ($field_value_list AS $field_values) { - $sql = "DELETE FROM `" . $table . "` WHERE `" . $field . "` IN (" . - substr(str_repeat("?, ", count($field_values)), 0, -2) . ");"; + } + foreach ($compacted AS $table => $values) { + foreach ($values AS $field => $field_value_list) { + foreach ($field_value_list AS $field_values) { + $sql = "DELETE FROM `" . $table . "` WHERE `" . $field . "` IN (" . + substr(str_repeat("?, ", count($field_values)), 0, -2) . ");"; - Logger::log(self::replaceParameters($sql, $field_values), Logger::DATA); + Logger::log(self::replaceParameters($sql, $field_values), Logger::DATA); - if (!self::e($sql, $field_values)) { - if ($do_transaction) { - self::rollback(); - } - return false; + if (!self::e($sql, $field_values)) { + if ($do_transaction) { + self::rollback(); } + return false; } } } - if ($do_transaction) { - self::commit(); - } - return true; } - - return $commands; + if ($do_transaction) { + self::commit(); + } + return true; } /** @@ -1250,7 +1239,7 @@ class DBA foreach ($old_fields AS $fieldname => $content) { if (isset($fields[$fieldname])) { - if ($fields[$fieldname] == $content) { + if (($fields[$fieldname] == $content) && !is_null($content)) { unset($fields[$fieldname]); } else { $do_update = true; @@ -1529,7 +1518,7 @@ class DBA * @return boolean was the close successful? */ public static function close($stmt) { - $a = get_app(); + $a = \get_app(); $stamp1 = microtime(true);