]> git.mxchange.org Git - friendica.git/blobdiff - include/dba.php
Merge remote-tracking branch 'upstream/develop' into 1610-performance
[friendica.git] / include / dba.php
index 97f6c8795645492aeda5f47cd5707dc0b325545a..c7b598f2d68e09ed2f3a9ead81d25d23f00d7265 100644 (file)
@@ -91,6 +91,40 @@ class dba {
                return $this->db;
        }
 
+       /**
+        * @brief Returns the MySQL server version string
+        * 
+        * This function discriminate between the deprecated mysql API and the current
+        * object-oriented mysqli API. Example of returned string: 5.5.46-0+deb8u1
+        *
+        * @return string
+        */
+       public function server_info() {
+               if ($this->mysqli) {
+                       $return = $this->db->server_info;
+               } else {
+                       $return = mysql_get_server_info($this->db);
+               }
+               return $return;
+       }
+
+       /**
+        * @brief Returns the number of rows
+        *
+        * @return string
+        */
+       public function num_rows() {
+               if (!$this->result)
+                       return 0;
+
+               if ($this->mysqli) {
+                       $return = $this->result->num_rows;
+               } else {
+                       $return = mysql_num_rows($this->result);
+               }
+               return $return;
+       }
+
        public function q($sql, $onlyquery = false) {
                global $a;
 
@@ -109,6 +143,8 @@ class dba {
 
                $stamp1 = microtime(true);
 
+               $sql = "/*".$a->callstack()." */ ".$sql;
+
                if($this->mysqli)
                        $result = @$this->db->query($sql);
                else
@@ -326,6 +362,42 @@ function q($sql) {
 
 }}
 
+/**
+ * @brief Performs a query with "dirty reads"
+ *
+ * By doing dirty reads (reading uncommitted data) no locks are performed
+ * This function can be used to fetch data that doesn't need to be reliable.
+ *
+ * @param $args Query parameters (1 to N parameters of different types)
+ * @return array Query array
+ */
+function qu($sql) {
+
+       global $db;
+       $args = func_get_args();
+       unset($args[0]);
+
+       if($db && $db->connected) {
+               $stmt = @vsprintf($sql,$args); // Disabled warnings
+               if($stmt === false)
+                       logger('dba: vsprintf error: ' . print_r(debug_backtrace(),true), LOGGER_DEBUG);
+               $db->q("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;");
+               $retval = $db->q($stmt);
+               $db->q("COMMIT;");
+               return $retval;
+       }
+
+       /**
+        *
+        * This will happen occasionally trying to store the
+        * session data after abnormal program termination
+        *
+        */
+       logger('dba: no database: ' . print_r($args,true));
+       return false;
+
+}
+
 /**
  *
  * Raw db query, no arguments