X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;ds=sidebyside;f=classes%2Fxdb.php;h=c353f54349021e1ee5b6547655d22e21a06c578a;hb=f23d33e1b114e9032b4b966baebdeb14b4215313;hp=1014c719ea60ce21d577c6df8a9f4289fb17cf4d;hpb=4c455d700b74f80f5fd79b5a0c2023a49f97c754;p=platal.git diff --git a/classes/xdb.php b/classes/xdb.php index 1014c71..c353f54 100644 --- a/classes/xdb.php +++ b/classes/xdb.php @@ -86,7 +86,7 @@ class XDB if ($globals->debug & DEBUG_BT) { $explain = array(); - if (strpos($query, 'FOUND_ROWS()') === false) { + if (strpos($query, 'FOUND_ROWS()') === false && strpos($query, 'AUTOCOMMIT') === false) { $res = self::$mysqli->query("EXPLAIN $query"); if ($res) { while ($row = $res->fetch_assoc()) { @@ -194,6 +194,53 @@ class XDB return self::run($query); } + public static function startTransaction() + { + self::rawExecute('SET AUTOCOMMIT = 0'); + self::rawExecute('START TRANSACTION'); + } + + public static function commit() + { + self::rawExecute('COMMIT'); + self::rawExecute('SET AUTOCOMMIT = 1'); + } + + public static function rollback() + { + self::rawExecute('ROLLBACK'); + self::rawExecute('SET AUTOCOMMIT = 1'); + } + + public static function runTransactionV($callback, array $args) + { + self::startTransaction(); + try { + if (call_user_func_array($callback, $args)) { + self::commit(); + return true; + } else { + self::rollback(); + return false; + } + } catch (Exception $e) { + self::rollback(); + throw $e; + } + } + + /** This function takes a callback followed by the arguments to be passed to the callback + * as arguments. It starts a transaction and execute the callback. If the callback fails + * (return false or raise an exception), the transaction is rollbacked, if the callback + * succeeds (return true), the transaction is committed. + */ + public static function runTransaction() + { + $args = func_get_args(); + $cb = array_shift($args); + self::runTransactionV($cb, $args); + } + public static function iterator() { return new XDBIterator(self::prepare(func_get_args())); @@ -243,6 +290,11 @@ class XDB return self::queryv($query)->fetchAllRow($args[0], $args[1]); } + public static function rawFetchAllRow($query, $id = false, $keep_array = false) + { + return self::rawQuery($query)->fetchAllRow($id, $keep_array); + } + /** Fetch all rows returned by the given query. * This functions can take 2 optional arguments (cf XDBResult::fetchAllAssoc()). * Optional arguments are given *before* the query. @@ -253,24 +305,44 @@ class XDB return self::queryv($query)->fetchAllAssoc($args[0], $args[1]); } + public static function rawFetchAllAssoc($query, $id = false, $keep_array = false) + { + return self::rawQuery($query)->fetchAllAssoc($id, $keep_array); + } + public static function fetchOneCell() { list($args, $query) = self::findQuery(func_get_args()); return self::queryv($query)->fetchOneCell(); } + public static function rawFetchOneCell($query) + { + return self::rawQuery($query)->fetchOneCell(); + } + public static function fetchOneRow() { list($args, $query) = self::findQuery(func_get_args()); return self::queryv($query)->fetchOneRow(); } + public static function rawFetchOneRow($query) + { + return self::rawQuery($query)->fetchOneRow(); + } + public static function fetchOneAssoc() { list($args, $query) = self::findQuery(func_get_args()); return self::queryv($query)->fetchOneAssoc(); } + public static function rawFetchOneAssoc($query) + { + return self::rawQuery($query)->fetchOneAssoc(); + } + /** Fetch a column from the result of the given query. * This functions can take 1 optional arguments (cf XDBResult::fetchColumn()). * Optional arguments are given *before* the query. @@ -278,7 +350,12 @@ class XDB public static function fetchColumn() { list($args, $query) = self::findQuery(func_get_args(), array(0)); - return self::queryv($query)->fetchColumn(); + return self::queryv($query)->fetchColumn($args[0]); + } + + public static function rawFetchColumn($query, $key = 0) + { + return self::rawQuery($query)->fetchColumn($key); } public static function insertId()