1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 15:38:10 +00:00

LibSQL: Ungracefully handle database version incompatibilities

In the long run, this is obviously a bad way to handle version changes
to the SQL database files. We will want to migrate old databases to new
formats. Until we figure out a good way to do that, wipe old databases
so that we don't crash trying to read incompatible data.
This commit is contained in:
Timothy Flynn 2022-12-11 11:41:22 -05:00 committed by Tim Flynn
parent d5ed07fdc4
commit b5fd96b7ac
3 changed files with 15 additions and 3 deletions

View file

@ -8,6 +8,7 @@
#include <AK/Format.h>
#include <AK/QuickSort.h>
#include <LibCore/IODevice.h>
#include <LibCore/System.h>
#include <LibSQL/Heap.h>
#include <LibSQL/Serializer.h>
#include <sys/stat.h>
@ -58,6 +59,15 @@ ErrorOr<void> Heap::open()
initialize_zero_block();
}
// FIXME: We should more gracefully handle version incompatibilities. For now, we drop the database.
if (m_version != current_version) {
dbgln_if(SQL_DEBUG, "Heap file {} opened has incompatible version {}. Deleting for version {}.", name(), m_version, current_version);
m_file = nullptr;
TRY(Core::System::unlink(name()));
return open();
}
dbgln_if(SQL_DEBUG, "Heap file {} opened. Size = {}", name(), size());
return {};
}
@ -248,7 +258,7 @@ void Heap::update_zero_block()
void Heap::initialize_zero_block()
{
m_version = 0x00000001;
m_version = current_version;
m_schemas_root = 0;
m_tables_root = 0;
m_table_columns_root = 0;