public $connected = false;
public $error = false;
private $_server_info = '';
+ private static $in_transaction = false;
private static $dbo;
private static $relation = array();
}
if (self::$dbo->errorno != 0) {
- logger('DB Error '.self::$dbo->errorno.': '.self::$dbo->error."\n".self::replace_parameters($sql, $args));
+ logger('DB Error '.self::$dbo->errorno.': '.self::$dbo->error."\n".
+ $a->callstack(8))."\n".self::replace_parameters($sql, $args);
}
$a->save_timestamp($stamp1, 'database');
return self::e($sql, $param);
}
+ /**
+ * @brief Starts a transaction
+ *
+ * @return boolean Was the command executed successfully?
+ */
+ static public function transaction() {
+ if (!self::e('COMMIT')) {
+ return false;
+ }
+ if (!self::e('START TRANSACTION')) {
+ return false;
+ }
+ self::$in_transaction = true;
+ return true;
+ }
+
+ /**
+ * @brief Does a commit
+ *
+ * @return boolean Was the command executed successfully?
+ */
+ static public function commit() {
+ if (!self::e('COMMIT')) {
+ return false;
+ }
+ self::$in_transaction = false;
+ return true;
+ }
+
+ /**
+ * @brief Does a rollback
+ *
+ * @return boolean Was the command executed successfully?
+ */
+ static public function rollback() {
+ if (!self::e('ROLLBACK')) {
+ return false;
+ }
+ self::$in_transaction = false;
+ return true;
+ }
+
/**
* @brief Build the array with the table relations
*
}
/**
- * @brief Insert a row into a table
+ * @brief Delete a row from a table
*
* @param string $table Table name
* @param array $param parameter array
- * @param boolean $in_commit Internal use: Only do a commit after the last delete
+ * @param boolean $in_process Internal use: Only do a commit after the last delete
* @param array $callstack Internal use: prevent endless loops
*
- * @return boolean|array was the delete successfull? When $in_commit is set: deletion data
+ * @return boolean|array was the delete successfull? When $in_process is set: deletion data
*/
- static public function delete($table, $param, $in_commit = false, &$callstack = array()) {
+ static public function delete($table, $param, $in_process = false, &$callstack = array()) {
$commands = array();
}
}
- if (!$in_commit) {
+ if (!$in_process) {
// Now we finalize the process
- self::p("COMMIT");
- self::p("START TRANSACTION");
+ $do_transaction = !self::$in_transaction;
+
+ if ($do_transaction) {
+ self::transaction();
+ }
$compacted = array();
$counter = array();
logger(dba::replace_parameters($sql, $command['param']), LOGGER_DATA);
if (!self::e($sql, $command['param'])) {
- self::p("ROLLBACK");
+ if ($do_transaction) {
+ self::rollback();
+ }
return false;
}
} else {
logger(dba::replace_parameters($sql, $field_values), LOGGER_DATA);
if (!self::e($sql, $field_values)) {
- self::p("ROLLBACK");
+ if ($do_transaction) {
+ self::rollback();
+ }
return false;
}
}
}
}
- self::p("COMMIT");
+ if ($do_transaction) {
+ self::commit();
+ }
return true;
}