X-Git-Url: https://delta.frontaccounting.com/gitweb/?a=blobdiff_plain;f=includes%2Fdb%2Fsql_functions.inc;h=aead5d376e8c2f415925324f39dae6848dee46ce;hb=8a7017fb79e97afda2cd20e9ab763f57fde97df2;hp=0fa479dc2b946754157a383025bd3ef93d70e234;hpb=ebc600101ceab69c06eac4b1bd4d1782af45de05;p=fa-stable.git diff --git a/includes/db/sql_functions.inc b/includes/db/sql_functions.inc index 0fa479dc..aead5d37 100644 --- a/includes/db/sql_functions.inc +++ b/includes/db/sql_functions.inc @@ -12,28 +12,68 @@ // // General database functions common for all modules. // -//------------------------------------------------------------------- +//------------------------------------------------------------------- +// Multilevel transaction control. +// + function begin_transaction() { - db_query("BEGIN", "could not start a transaction"); + global $transaction_level; // set in set_global_connection() + + 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"); + } } + //----------------------------------------------------------------------------- // 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"; +} +