mirror of
https://github.com/aljazceru/turso.git
synced 2026-01-08 10:44:20 +01:00
Merge 'fix/core/translate: ALTER TABLE DROP COLUMN: ensure schema cookie is updated even when target table is empty' from Jussi Saurio
Closes #2431 Discovered while fuzzing #2086 ## What We update `schema_version` whenever the schema changes ## Problem Probably unintentionally, we were calling `SetCookie` in a loop for each row in the target table, instead of only once at the end. This means 2 things: - For large `n`, this is a lot of unnecessary instructions - For `n==0`, `SetCookie` doesn't get called at all -> the schema won't get marked as having been updated -> conns can operate on a stale schema ## Fix Lift `SetCookie` out of the loop Reviewed-by: Preston Thorpe <preston@turso.tech> Closes #2432
This commit is contained in:
@@ -139,12 +139,6 @@ pub fn translate_alter_table(
|
||||
dest_reg: record,
|
||||
index_name: None,
|
||||
});
|
||||
program.emit_insn(Insn::SetCookie {
|
||||
db: 0,
|
||||
cookie: Cookie::SchemaVersion,
|
||||
value: schema.schema_version as i32 + 1,
|
||||
p5: 0,
|
||||
});
|
||||
|
||||
program.emit_insn(Insn::Insert {
|
||||
cursor: cursor_id,
|
||||
@@ -155,6 +149,13 @@ pub fn translate_alter_table(
|
||||
});
|
||||
});
|
||||
|
||||
program.emit_insn(Insn::SetCookie {
|
||||
db: 0,
|
||||
cookie: Cookie::SchemaVersion,
|
||||
value: schema.schema_version as i32 + 1,
|
||||
p5: 0,
|
||||
});
|
||||
|
||||
program.emit_insn(Insn::ParseSchema {
|
||||
db: usize::MAX, // TODO: This value is unused, change when we do something with it
|
||||
where_clause: None,
|
||||
|
||||
Reference in New Issue
Block a user