AUP3: Change journal format to WAL
And remove the deletion of the journal file.
This commit is contained in:
parent
48287e9b0d
commit
337e223754
|
@ -46,7 +46,8 @@ static const char *ProjectFileSchema =
|
|||
"PRAGMA application_id = %d;"
|
||||
"PRAGMA user_version = %d;"
|
||||
"PRAGMA page_size = %d;"
|
||||
"PRAGMA journal_mode = DELETE;"
|
||||
"PRAGMA journal_mode = WAL;"
|
||||
"PRAGMA locking_mode = EXCLUSIVE;"
|
||||
""
|
||||
// CREATE SQL project
|
||||
// doc is a variable sized XML text string.
|
||||
|
@ -220,9 +221,6 @@ ProjectFileIO::~ProjectFileIO()
|
|||
// the recovery dialog upon next restart.
|
||||
if (CloseDB())
|
||||
{
|
||||
// Always remove the journal now that the DB is closed
|
||||
wxRemoveFile(filename + wxT("-journal"));
|
||||
|
||||
// At this point, we are shutting down cleanly and if the project file is
|
||||
// still in the temp directory it means that the user has chosen not to
|
||||
// save it. So, delete it.
|
||||
|
@ -297,10 +295,6 @@ bool ProjectFileIO::CloseDB()
|
|||
{
|
||||
SetDBError(XO("Failed to close the project file"));
|
||||
}
|
||||
else
|
||||
{
|
||||
wxRemoveFile(mFileName + wxT("-journal"));
|
||||
}
|
||||
|
||||
mDB = nullptr;
|
||||
SetFileName({});
|
||||
|
@ -324,8 +318,6 @@ bool ProjectFileIO::DeleteDB()
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
wxRemoveFile(mFileName + wxT("-journal"));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -345,9 +337,6 @@ bool ProjectFileIO::CleanDB()
|
|||
{
|
||||
if (CloseDB())
|
||||
{
|
||||
// This can be removed even if we fail below since the DB is closed
|
||||
wxRemoveFile(mFileName + wxT("-journal"));
|
||||
|
||||
wxString tmppath = wxFileName::CreateTempFileName(mFileName + ".xxxxx");
|
||||
if (wxRename(mFileName, tmppath) == 0)
|
||||
{
|
||||
|
@ -379,6 +368,69 @@ bool ProjectFileIO::CleanDB()
|
|||
return false;
|
||||
}
|
||||
|
||||
bool ProjectFileIO::TransactionStart(const wxString &name)
|
||||
{
|
||||
char* errmsg = nullptr;
|
||||
|
||||
int rc = sqlite3_exec(DB(),
|
||||
wxT("SAVEPOINT ") + name + wxT(";"),
|
||||
nullptr,
|
||||
nullptr,
|
||||
&errmsg);
|
||||
|
||||
if (errmsg)
|
||||
{
|
||||
SetDBError(
|
||||
XO("Failed to create savepoint:\n\n%s").Format(name)
|
||||
);
|
||||
sqlite3_free(errmsg);
|
||||
}
|
||||
|
||||
return rc == SQLITE_OK;
|
||||
}
|
||||
|
||||
bool ProjectFileIO::TransactionCommit(const wxString &name)
|
||||
{
|
||||
char* errmsg = nullptr;
|
||||
|
||||
int rc = sqlite3_exec(DB(),
|
||||
wxT("SAVEPOINT ") + name + wxT(";"),
|
||||
nullptr,
|
||||
nullptr,
|
||||
&errmsg);
|
||||
|
||||
if (errmsg)
|
||||
{
|
||||
SetDBError(
|
||||
XO("Failed to release savepoint:\n\n%s").Format(name)
|
||||
);
|
||||
sqlite3_free(errmsg);
|
||||
}
|
||||
|
||||
return rc == SQLITE_OK;
|
||||
}
|
||||
|
||||
bool ProjectFileIO::TransactionRollback(const wxString &name)
|
||||
{
|
||||
char* errmsg = nullptr;
|
||||
|
||||
int rc = sqlite3_exec(DB(),
|
||||
wxT("RELEASE ") + name + wxT(";"),
|
||||
nullptr,
|
||||
nullptr,
|
||||
&errmsg);
|
||||
|
||||
if (errmsg)
|
||||
{
|
||||
SetDBError(
|
||||
XO("Failed to release savepoint:\n\n%s").Format(name)
|
||||
);
|
||||
sqlite3_free(errmsg);
|
||||
}
|
||||
|
||||
return rc == SQLITE_OK;
|
||||
}
|
||||
|
||||
/* static */
|
||||
int ProjectFileIO::ExecCallback(void *data, int cols, char **vals, char **names)
|
||||
{
|
||||
|
@ -627,9 +679,6 @@ bool ProjectFileIO::CopyTo(const FilePath &destpath)
|
|||
success = false;
|
||||
}
|
||||
|
||||
// Always delete the journal
|
||||
wxRemoveFile(destpath + wxT("-journal"));
|
||||
|
||||
if (!success)
|
||||
{
|
||||
wxRemoveFile(destpath);
|
||||
|
@ -1101,9 +1150,9 @@ bool ProjectFileIO::SaveProject(const FilePath &fileName)
|
|||
bool wasTemp = false;
|
||||
bool success = false;
|
||||
|
||||
// Should probably simply all of the by using renames. But, one benefit
|
||||
// of using CopyTo() for new file saves, is that it will be VACUUMED at
|
||||
// the same time.
|
||||
// Should probably simplify all of the following by using renames. But, one
|
||||
// benefit of using CopyTo() for new file saves, is that it will be VACUUMED
|
||||
// at the same time.
|
||||
|
||||
auto restore = finally([&]
|
||||
{
|
||||
|
|
|
@ -114,6 +114,10 @@ private:
|
|||
bool DeleteDB();
|
||||
bool CleanDB();
|
||||
|
||||
bool TransactionStart(const wxString &name);
|
||||
bool TransactionCommit(const wxString &name);
|
||||
bool TransactionRollback(const wxString &name);
|
||||
|
||||
wxString GetValue(const char *sql);
|
||||
bool GetBlob(const char *sql, wxMemoryBuffer &buffer);
|
||||
|
||||
|
|
Loading…
Reference in New Issue