//
// General database functions common for all modules.
//
-//-------------------------------------------------------------------
+//-------------------------------------------------------------------
+// Multilevel transaction control.
+//
+$transaction_level = 0;
+
function begin_transaction()
{
- db_query("BEGIN", "could not start a transaction");
+ global $transaction_level;
+
+ if (!$transaction_level) {
+ db_query("BEGIN", "could not start a transaction");
+ }
+ $transaction_level++;
}
function commit_transaction()
{
- db_query("COMMIT", "could not commit a transaction");
+ global $transaction_level;
+
+ $transaction_level--;
+
+ if (!$transaction_level) {
+ db_query("COMMIT", "could not commit a transaction");
+ }
}
+/*
+ This function is called on end of script execution to cancel
+ all aborted transactions (if any)
+*/
function cancel_transaction()
{
- db_query("ROLLBACK", "could not cancel a transaction");
+ global $transaction_level;
+
+ if ($transaction_level) {
+ db_query("ROLLBACK", "could not cancel a transaction");
+ }
+ $transaction_level = 0;
}
+
//-----------------------------------------------------------------------------
// Update record activity status.
//
function update_record_status($id, $status, $table, $key) {
$sql = "UPDATE ".TB_PREF.$table." SET inactive = "
- . db_escape($status)." WHERE $key=".db_escape($id);
+ . ((int)$status)." WHERE $key=".db_escape($id);
db_query($sql, "Can't update record status");
}
-?>
+//-----------------------------------------------------------------------------
+//
+// Helper for sql subquery returning running totals from delta tables like stock_moves or bank_trans
+//
+// $table - table name with optional WHERE clause
+// $column - delta column
+// $index - comma delimited list of columns for total grouping and order
+// Returns running totals with respective index column
+//
+function running_total_sql($table, $column, $index)
+{
+
+ return "SELECT daily.$index, daily.$column, (@total:=@total+daily.$column) total
+ FROM
+ (SELECT $index, sum($column) $column FROM $table GROUP BY $index ORDER BY $index) daily,
+ (SELECT @total:=0) total_var";
+}
+