]> git.mxchange.org Git - friendica.git/blobdiff - include/dba.php
Merge pull request #3526 from annando/bugfix-index
[friendica.git] / include / dba.php
index b9e6c32d56acff766aeec3ffc91af5b09f5a023c..1f428bf4651b2b43ed0c47dc785761b3b0d1d443 100644 (file)
@@ -806,6 +806,41 @@ class dba {
                return self::e($sql, $param);
        }
 
+       /**
+        * @brief Locks a table for exclusive write access
+        *
+        * This function can be extended in the future to accept a table array as well.
+        *
+        * @param string $table Table name
+        *
+        * @return boolean was the lock successful?
+        */
+       static public function lock($table) {
+               // See here: https://dev.mysql.com/doc/refman/5.7/en/lock-tables-and-transactions.html
+               self::e("SET autocommit=0");
+               $success = self::e("LOCK TABLES `".self::$dbo->escape($table)."` WRITE");
+               if (!$success) {
+                       self::e("SET autocommit=1");
+               } else {
+                       self::$in_transaction = true;
+               }
+               return $success;
+       }
+
+       /**
+        * @brief Unlocks all locked tables
+        *
+        * @return boolean was the unlock successful?
+        */
+       static public function unlock() {
+               // See here: https://dev.mysql.com/doc/refman/5.7/en/lock-tables-and-transactions.html
+               self::e("COMMIT");
+               $success = self::e("UNLOCK TABLES");
+               self::e("SET autocommit=1");
+               self::$in_transaction = false;
+               return $success;
+       }
+
        /**
         * @brief Starts a transaction
         *