diff --git a/src/Database/DBA.php b/src/Database/DBA.php index 70b43e1225..daa90314e7 100644 --- a/src/Database/DBA.php +++ b/src/Database/DBA.php @@ -9,10 +9,14 @@ namespace Friendica\Database; use Friendica\Core\System; use Friendica\Util\DateTimeFormat; use mysqli; +use mysqli_result; +use mysqli_stmt; use PDO; use PDOException; use PDOStatement; +require_once 'include/dba.php'; + /** * @class MySQL database class * @@ -1534,4 +1538,101 @@ class DBA return $ret; } + + /** + * @brief Return a list of database processes + * + * @return array + * 'list' => List of processes, separated in their different states + * 'amount' => Number of concurrent database processes + */ + public static function processlist() + { + $ret = self::p("SHOW PROCESSLIST"); + $data = self::toArray($ret); + + $s = []; + + $processes = 0; + $states = []; + foreach ($data as $process) { + $state = trim($process["State"]); + + // Filter out all non blocking processes + if (!in_array($state, ["", "init", "statistics", "updating"])) { + ++$states[$state]; + ++$processes; + } + } + + $statelist = ""; + foreach ($states as $state => $usage) { + if ($statelist != "") { + $statelist .= ", "; + } + $statelist .= $state.": ".$usage; + } + return(["list" => $statelist, "amount" => $processes]); + } + + /** + * Checks if $array is a filled array with at least one entry. + * + * @param mixed $array A filled array with at least one entry + * + * @return boolean Whether $array is a filled array or an object with rows + */ + public static function is_result($array) + { + // It could be a return value from an update statement + if (is_bool($array)) { + return $array; + } + + if (is_object($array)) { + return self::numRows($array) > 0; + } + + return (is_array($array) && (count($array) > 0)); + } + + /** + * @brief Callback function for "esc_array" + * + * @param mixed $value Array value + * @param string $key Array key + * @param boolean $add_quotation add quotation marks for string values + * @return void + */ + private static function esc_array_callback(&$value, $key, $add_quotation) + { + if (!$add_quotation) { + if (is_bool($value)) { + $value = ($value ? '1' : '0'); + } else { + $value = dbesc($value); + } + return; + } + + if (is_bool($value)) { + $value = ($value ? 'true' : 'false'); + } elseif (is_float($value) || is_integer($value)) { + $value = (string) $value; + } else { + $value = "'" . dbesc($value) . "'"; + } + } + + /** + * @brief Escapes a whole array + * + * @param mixed $arr Array with values to be escaped + * @param boolean $add_quotation add quotation marks for string values + * @return void + */ + public static function esc_array(&$arr, $add_quotation = false) + { + array_walk($arr, 'self::esc_array_callback', $add_quotation); + } }