mirror of
https://github.com/cookiengineer/audacity
synced 2025-06-15 07:40:23 +02:00
TransactionScope only requires DBConnection not ProjectFileIO
This commit is contained in:
parent
eb7e67623e
commit
ddc2593282
@ -423,11 +423,11 @@ void ProjectFileIO::UseConnection(Connection &&conn, const FilePath &filePath)
|
||||
SetFileName(filePath);
|
||||
}
|
||||
|
||||
bool ProjectFileIO::TransactionStart(const wxString &name)
|
||||
bool TransactionScope::TransactionStart(const wxString &name)
|
||||
{
|
||||
char *errmsg = nullptr;
|
||||
|
||||
int rc = sqlite3_exec(DB(),
|
||||
int rc = sqlite3_exec(mConnection.DB(),
|
||||
wxT("SAVEPOINT ") + name + wxT(";"),
|
||||
nullptr,
|
||||
nullptr,
|
||||
@ -435,7 +435,7 @@ bool ProjectFileIO::TransactionStart(const wxString &name)
|
||||
|
||||
if (errmsg)
|
||||
{
|
||||
SetDBError(
|
||||
mConnection.SetDBError(
|
||||
XO("Failed to create savepoint:\n\n%s").Format(name)
|
||||
);
|
||||
sqlite3_free(errmsg);
|
||||
@ -444,11 +444,11 @@ bool ProjectFileIO::TransactionStart(const wxString &name)
|
||||
return rc == SQLITE_OK;
|
||||
}
|
||||
|
||||
bool ProjectFileIO::TransactionCommit(const wxString &name)
|
||||
bool TransactionScope::TransactionCommit(const wxString &name)
|
||||
{
|
||||
char *errmsg = nullptr;
|
||||
|
||||
int rc = sqlite3_exec(DB(),
|
||||
int rc = sqlite3_exec(mConnection.DB(),
|
||||
wxT("RELEASE ") + name + wxT(";"),
|
||||
nullptr,
|
||||
nullptr,
|
||||
@ -456,7 +456,7 @@ bool ProjectFileIO::TransactionCommit(const wxString &name)
|
||||
|
||||
if (errmsg)
|
||||
{
|
||||
SetDBError(
|
||||
mConnection.SetDBError(
|
||||
XO("Failed to release savepoint:\n\n%s").Format(name)
|
||||
);
|
||||
sqlite3_free(errmsg);
|
||||
@ -465,11 +465,11 @@ bool ProjectFileIO::TransactionCommit(const wxString &name)
|
||||
return rc == SQLITE_OK;
|
||||
}
|
||||
|
||||
bool ProjectFileIO::TransactionRollback(const wxString &name)
|
||||
bool TransactionScope::TransactionRollback(const wxString &name)
|
||||
{
|
||||
char *errmsg = nullptr;
|
||||
|
||||
int rc = sqlite3_exec(DB(),
|
||||
int rc = sqlite3_exec(mConnection.DB(),
|
||||
wxT("ROLLBACK TO ") + name + wxT(";"),
|
||||
nullptr,
|
||||
nullptr,
|
||||
@ -477,7 +477,7 @@ bool ProjectFileIO::TransactionRollback(const wxString &name)
|
||||
|
||||
if (errmsg)
|
||||
{
|
||||
SetDBError(
|
||||
mConnection.SetDBError(
|
||||
XO("Failed to release savepoint:\n\n%s").Format(name)
|
||||
);
|
||||
sqlite3_free(errmsg);
|
||||
@ -2449,12 +2449,12 @@ int ProjectFileIO::get_varint(const unsigned char *ptr, int64_t *out)
|
||||
return 9;
|
||||
}
|
||||
|
||||
TransactionScope::TransactionScope(ProjectFileIO &projectFileIO,
|
||||
const char *name)
|
||||
: mIO(projectFileIO),
|
||||
TransactionScope::TransactionScope(
|
||||
DBConnection &connection, const char *name)
|
||||
: mConnection(connection),
|
||||
mName(name)
|
||||
{
|
||||
mInTrans = mIO.TransactionStart(mName);
|
||||
mInTrans = TransactionStart(mName);
|
||||
if ( !mInTrans )
|
||||
// To do, improve the message
|
||||
throw SimpleMessageBoxException( XO("Database error") );
|
||||
@ -2467,8 +2467,8 @@ TransactionScope::~TransactionScope()
|
||||
// Rollback AND REMOVE the transaction
|
||||
// -- must do both; rolling back a savepoint only rewinds it
|
||||
// without removing it, unlike the ROLLBACK command
|
||||
if (!(mIO.TransactionRollback(mName) &&
|
||||
mIO.TransactionCommit(mName) ) )
|
||||
if (!(TransactionRollback(mName) &&
|
||||
TransactionCommit(mName) ) )
|
||||
{
|
||||
// Do not throw from a destructor!
|
||||
// This has to be a no-fail cleanup that does the best that it can.
|
||||
@ -2482,7 +2482,7 @@ bool TransactionScope::Commit()
|
||||
// Misuse of this class
|
||||
THROW_INCONSISTENCY_EXCEPTION;
|
||||
|
||||
mInTrans = !mIO.TransactionCommit(mName);
|
||||
mInTrans = !TransactionCommit(mName);
|
||||
|
||||
return mInTrans;
|
||||
}
|
||||
|
@ -130,10 +130,6 @@ public:
|
||||
// The last compact check found unused blocks in the project file
|
||||
bool HadUnused();
|
||||
|
||||
bool TransactionStart(const wxString &name);
|
||||
bool TransactionCommit(const wxString &name);
|
||||
bool TransactionRollback(const wxString &name);
|
||||
|
||||
// In one SQL command, delete sample blocks with ids in the given set, or
|
||||
// (when complement is true), with ids not in the given set.
|
||||
bool DeleteBlocks(const BlockIDs &blockids, bool complement);
|
||||
@ -250,13 +246,17 @@ private:
|
||||
class TransactionScope
|
||||
{
|
||||
public:
|
||||
TransactionScope(ProjectFileIO &projectFileIO, const char *name);
|
||||
TransactionScope(DBConnection &connection, const char *name);
|
||||
~TransactionScope();
|
||||
|
||||
bool Commit();
|
||||
|
||||
private:
|
||||
ProjectFileIO &mIO;
|
||||
bool TransactionStart(const wxString &name);
|
||||
bool TransactionCommit(const wxString &name);
|
||||
bool TransactionRollback(const wxString &name);
|
||||
|
||||
DBConnection &mConnection;
|
||||
bool mInTrans;
|
||||
wxString mName;
|
||||
};
|
||||
|
@ -740,7 +740,7 @@ void ProjectManager::OnCloseWindow(wxCloseEvent & event)
|
||||
projectFileIO.SetBypass();
|
||||
|
||||
{
|
||||
TransactionScope trans(projectFileIO, "Shutdown");
|
||||
TransactionScope trans(projectFileIO.GetConnection(), "Shutdown");
|
||||
|
||||
// This can reduce reference counts of sample blocks in the project's
|
||||
// tracks.
|
||||
|
@ -1215,7 +1215,7 @@ bool Effect::DoEffect(double projectRate,
|
||||
// This is for performance purposes only, no additional recovery implied
|
||||
auto &pProject = *const_cast<AudacityProject*>(FindProject()); // how to remove this const_cast?
|
||||
auto &pIO = ProjectFileIO::Get(pProject);
|
||||
TransactionScope trans(pIO, "Effect");
|
||||
TransactionScope trans(pIO.GetConnection(), "Effect");
|
||||
|
||||
// Update track/group counts
|
||||
CountWaveTracks();
|
||||
|
Loading…
x
Reference in New Issue
Block a user