diff --git a/core/translate/mod.rs b/core/translate/mod.rs index fb8878df8..1d7489ee7 100644 --- a/core/translate/mod.rs +++ b/core/translate/mod.rs @@ -224,7 +224,7 @@ fn emit_schema_entry( if let Some(sql) = sql { program.emit_string8(sql, sql_reg); } else { - program.emit_null(sql_reg); + program.emit_null(sql_reg, None); } let record_reg = program.alloc_register(); @@ -552,8 +552,8 @@ fn translate_drop_table( let init_label = program.emit_init(); let start_offset = program.offset(); - let null_reg = program.alloc_register(); // r1 - program.emit_null(null_reg); + let r1 = program.alloc_register(); // r1 + program.emit_null(r1, None); let tbl_name_reg = program.alloc_register(); // r2 let table_reg = program.emit_string8_new_reg(tbl_name.name.0.clone()); // r3 program.mark_last_insn_constant(); @@ -573,6 +573,7 @@ fn translate_drop_table( }); program.emit_insn(Insn::OpenWriteAwait {}); + // 1. Remove all entries from the schema table related to the table we are dropping, except for triggers // loop to beginning of schema table program.emit_insn(Insn::RewindAsync { cursor_id: sqlite_schema_cursor_id, @@ -638,6 +639,10 @@ fn translate_drop_table( is_temp: 0, }); + let r6 = program.alloc_register(); + let r7 = program.alloc_register(); + program.emit_null(r6, Some(r7)); + // end of the program program.emit_halt(); program.resolve_label(init_label, program.offset()); diff --git a/core/translate/pragma.rs b/core/translate/pragma.rs index 1fd738acd..eb19c31e9 100644 --- a/core/translate/pragma.rs +++ b/core/translate/pragma.rs @@ -233,7 +233,7 @@ fn query_pragma( // dflt_value match &column.default { None => { - program.emit_null(base_reg + 4); + program.emit_null(base_reg + 4, None); } Some(expr) => { program.emit_string8(expr.to_string(), base_reg + 4); diff --git a/core/vdbe/builder.rs b/core/vdbe/builder.rs index 716610b71..35863a6ac 100644 --- a/core/vdbe/builder.rs +++ b/core/vdbe/builder.rs @@ -138,11 +138,8 @@ impl ProgramBuilder { }); } - pub fn emit_null(&mut self, dest: usize) { - self.emit_insn(Insn::Null { - dest, - dest_end: None, - }); + pub fn emit_null(&mut self, dest: usize, dest_end: Option) { + self.emit_insn(Insn::Null { dest, dest_end }); } pub fn emit_result_row(&mut self, start_reg: usize, count: usize) {