public int ExecuteTransaction(SqlTransactionBase transaction) { if (transaction.Queries.Count == 0) { return(-1); } BeginTransaction(); foreach (var query in transaction.Queries) { switch (query.Type) { case SQL_ELEMENT_PREPARED: { var stmt = query.Element.Stmt; if (!Execute(stmt !)) { FEL_LOG_WARN("sql.sql", "Transaction aborted. {0} queries not executed.", transaction.Queries.Count); var errorCode = GetLastError(); RollbackTransaction(); return(errorCode); } break; } case SQL_ELEMENT_RAW: { var sql = query.Element.Query; Assert(!string.IsNullOrEmpty(sql)); if (!Execute(sql !)) { FEL_LOG_WARN("sql.sql", "Transaction aborted. {0} queries not executed.", transaction.Queries.Count); var errorCode = GetLastError(); RollbackTransaction(); return(errorCode); } break; } } } // we might encounter errors during certain queries, and depending on the kind of error // we might want to restart the transaction. So to prevent data loss, we only clean up when it's all done. // This is done in calling functions DatabaseWorkerPool<T>::DirectCommitTransaction and TransactionTask::Execute, // and not while iterating over every element. CommitTransaction(); return(0); }
public SqlTransactionTask(SqlTransactionBase trans) { _trans = trans; }
public SqlTransactionWithResultTask(SqlTransactionBase trans) : base(trans) { }