Add Database\DBM methods to Database\DBA
authorHypolite Petovan <mrpetovan@gmail.com>
Sat, 21 Jul 2018 12:21:23 +0000 (08:21 -0400)
committerHypolite Petovan <hypolite@mrpetovan.com>
Mon, 23 Jul 2018 14:57:47 +0000 (10:57 -0400)
src/Database/DBA.php

index 70b43e1..daa9031 100644 (file)
@@ -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);
+       }
 }