MCPcopy Create free account
hub / github.com/audacity/audacity / TransactionHandler

Method TransactionHandler

libraries/lib-sqlite-helpers/sqlite/Connection.cpp:205–251  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

203}
204
205Error Connection::TransactionHandler(
206 Connection& connection, Transaction::TransactionOperation operation,
207 Transaction& transaction)
208{
209 std::string sql;
210
211 const auto& name = transaction.mName;
212
213 switch (operation)
214 {
215 case Transaction::TransactionOperation::BeginOp:
216 sql = std::string("SAVEPOINT ") + name;
217 break;
218 case Transaction::TransactionOperation::CommitOp:
219 sql = std::string("RELEASE SAVEPOINT ") + name;
220 break;
221 case Transaction::TransactionOperation::RollbackOp:
222 sql = std::string("ROLLBACK TO SAVEPOINT ") + name +
223 std::string("; RELEASE SAVEPOINT ") + name;
224 break;
225 }
226
227 auto error = Error(sqlite3_exec(
228 connection.mConnection, sql.c_str(), nullptr, nullptr, nullptr));
229
230 if (operation != Transaction::TransactionOperation::BeginOp)
231 {
232 transaction.mCommitted = true;
233
234 connection.mPendingTransactions.erase(
235 std::remove_if(
236 connection.mPendingTransactions.begin(),
237 connection.mPendingTransactions.end(),
238 [tx = &transaction](auto lhs) { return lhs == tx; }),
239 connection.mPendingTransactions.end());
240 }
241
242 if (error.IsError())
243 return error;
244
245 if (operation == Transaction::TransactionOperation::BeginOp)
246 {
247 connection.mPendingTransactions.push_back(&transaction);
248 }
249
250 return {};
251}
252
253Result<Statement> Connection::CreateStatement(std::string_view sql) const
254{

Callers

nothing calls this directly

Calls 6

IsErrorMethod · 0.80
ErrorFunction · 0.70
c_strMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
push_backMethod · 0.45

Tested by

no test coverage detected