Add PRAGMA schema_version

This commit is contained in:
Anton Harniakou
2025-04-30 09:00:35 +03:00
parent 3459c1f7dd
commit 525b7fdbaa
4 changed files with 16 additions and 1 deletions

View File

@@ -117,7 +117,7 @@ pub struct DatabaseHeader {
pub freelist_pages: u32,
/// The schema cookie. Incremented when the database schema changes.
schema_cookie: u32,
pub schema_cookie: u32,
/// The schema format number. Supported formats are 1, 2, 3, and 4.
schema_format: u32,

View File

@@ -154,6 +154,10 @@ fn update_pragma(
// TODO: Implement updating user_version
todo!("updating user_version not yet implemented")
}
PragmaName::SchemaVersion => {
// TODO: Implement updating schema_version
todo!("updating schema_version not yet implemented")
}
PragmaName::TableInfo => {
// because we need control over the write parameter for the transaction,
// this should be unreachable. We have to force-call query_pragma before
@@ -260,6 +264,14 @@ fn query_pragma(
});
program.emit_result_row(register, 1);
}
PragmaName::SchemaVersion => {
program.emit_insn(Insn::ReadCookie {
db: 0,
dest: register,
cookie: Cookie::SchemaVersion,
});
program.emit_result_row(register, 1);
}
PragmaName::PageSize => {
program.emit_int(database_header.lock().page_size.into(), register);
program.emit_result_row(register, 1);

View File

@@ -4336,6 +4336,7 @@ pub fn op_read_cookie(
}
let cookie_value = match cookie {
Cookie::UserVersion => pager.db_header.lock().user_version.into(),
Cookie::SchemaVersion => pager.db_header.lock().schema_cookie.into(),
cookie => todo!("{cookie:?} is not yet implement for ReadCookie"),
};
state.registers[*dest] = Register::OwnedValue(OwnedValue::Integer(cookie_value));

View File

@@ -1624,6 +1624,8 @@ pub enum PragmaName {
PageCount,
/// Return the page size of the database in bytes.
PageSize,
/// Returns schema version of the database file.
SchemaVersion,
/// returns information about the columns of a table
TableInfo,
/// Returns the user version of the database file.