From 5bae32fe3f52500f4eec807fb5f4b6c3e9a53208 Mon Sep 17 00:00:00 2001 From: pedrocarlo Date: Tue, 29 Apr 2025 13:16:15 -0300 Subject: [PATCH] modified OpenWrite to include index or table name in explain --- core/translate/emitter.rs | 1 + core/translate/index.rs | 2 ++ core/translate/insert.rs | 3 +++ core/translate/main_loop.rs | 5 +++++ core/translate/schema.rs | 3 +++ core/vdbe/explain.rs | 3 ++- core/vdbe/insn.rs | 1 + 7 files changed, 17 insertions(+), 1 deletion(-) diff --git a/core/translate/emitter.rs b/core/translate/emitter.rs index 6b1a040a0..b1f98959e 100644 --- a/core/translate/emitter.rs +++ b/core/translate/emitter.rs @@ -485,6 +485,7 @@ fn emit_delete_insns( program.emit_insn(Insn::OpenWrite { cursor_id: index_cursor_id, root_page: RegisterOrLiteral::Literal(index.root_page), + name: index.name.clone(), }); let num_regs = index.columns.len() + 1; let start_reg = program.alloc_registers(num_regs); diff --git a/core/translate/index.rs b/core/translate/index.rs index 4ab8486dd..34a28db25 100644 --- a/core/translate/index.rs +++ b/core/translate/index.rs @@ -100,6 +100,7 @@ pub fn translate_create_index( program.emit_insn(Insn::OpenWrite { cursor_id: sqlite_schema_cursor_id, root_page: RegisterOrLiteral::Literal(sqlite_table.root_page), + name: sqlite_table.name.clone(), }); let sql = create_idx_stmt_to_sql(&tbl_name, &idx_name, unique_if_not_exists, &columns); emit_schema_entry( @@ -181,6 +182,7 @@ pub fn translate_create_index( program.emit_insn(Insn::OpenWrite { cursor_id: btree_cursor_id, root_page: RegisterOrLiteral::Register(root_page_reg), + name: idx_name.clone() }); let sorted_loop_start = program.allocate_label(); diff --git a/core/translate/insert.rs b/core/translate/insert.rs index d162f2c2e..b6daba4c2 100644 --- a/core/translate/insert.rs +++ b/core/translate/insert.rs @@ -177,6 +177,7 @@ pub fn translate_insert( program.emit_insn(Insn::OpenWrite { cursor_id, root_page: RegisterOrLiteral::Literal(root_page), + name: table_name.0.clone(), }); // Main loop @@ -192,6 +193,7 @@ pub fn translate_insert( program.emit_insn(Insn::OpenWrite { cursor_id, root_page: RegisterOrLiteral::Literal(root_page), + name: table_name.0.clone(), }); populate_column_registers( @@ -209,6 +211,7 @@ pub fn translate_insert( program.emit_insn(Insn::OpenWrite { cursor_id: idx_cursor.2, root_page: idx_cursor.1.into(), + name: idx_cursor.0.clone(), }); } // Common record insertion logic for both single and multiple rows diff --git a/core/translate/main_loop.rs b/core/translate/main_loop.rs index bf30b8508..9e10e05b7 100644 --- a/core/translate/main_loop.rs +++ b/core/translate/main_loop.rs @@ -110,6 +110,7 @@ pub fn init_loop( cursor_id: table_cursor_id .expect("table cursor is always opened in OperationMode::DELETE"), root_page: root_page.into(), + name: btree.name.clone(), }); } (OperationMode::UPDATE, Table::BTree(btree)) => { @@ -118,11 +119,13 @@ pub fn init_loop( cursor_id: table_cursor_id .expect("table cursor is always opened in OperationMode::UPDATE"), root_page: root_page.into(), + name: btree.name.clone(), }); if let Some(index_cursor_id) = index_cursor_id { program.emit_insn(Insn::OpenWrite { cursor_id: index_cursor_id, root_page: index.as_ref().unwrap().root_page.into(), + name: index.as_ref().unwrap().name.clone(), }); } } @@ -148,6 +151,7 @@ pub fn init_loop( program.emit_insn(Insn::OpenWrite { cursor_id: table_cursor_id, root_page: table.table.get_root_page().into(), + name: table.table.get_name().to_string(), }); } _ => { @@ -174,6 +178,7 @@ pub fn init_loop( cursor_id: index_cursor_id .expect("index cursor is always opened in Seek with index"), root_page: index.root_page.into(), + name: index.name.clone(), }); } _ => { diff --git a/core/translate/schema.rs b/core/translate/schema.rs index 8fcb8abb8..96d4aced8 100644 --- a/core/translate/schema.rs +++ b/core/translate/schema.rs @@ -120,6 +120,7 @@ pub fn translate_create_table( program.emit_insn(Insn::OpenWrite { cursor_id: sqlite_schema_cursor_id, root_page: 1usize.into(), + name: tbl_name.name.0.clone() }); // Add the table entry to sqlite_schema @@ -582,6 +583,7 @@ pub fn translate_create_virtual_table( program.emit_insn(Insn::OpenWrite { cursor_id: sqlite_schema_cursor_id, root_page: 1usize.into(), + name: table_name.clone() }); let sql = create_vtable_body_to_str(&vtab, vtab_module.clone()); @@ -661,6 +663,7 @@ pub fn translate_drop_table( program.emit_insn(Insn::OpenWrite { cursor_id: sqlite_schema_cursor_id, root_page: 1usize.into(), + name: tbl_name.name.0.clone() }); // 1. Remove all entries from the schema table related to the table we are dropping, except for triggers diff --git a/core/vdbe/explain.rs b/core/vdbe/explain.rs index ff5892ddb..ed16adc2c 100644 --- a/core/vdbe/explain.rs +++ b/core/vdbe/explain.rs @@ -1122,6 +1122,7 @@ pub fn insn_to_str( Insn::OpenWrite { cursor_id, root_page, + name, .. } => ( "OpenWrite", @@ -1133,7 +1134,7 @@ pub fn insn_to_str( 0, OwnedValue::build_text(""), 0, - "".to_string(), + format!("root={}; {}", root_page, name), ), Insn::Copy { src_reg, diff --git a/core/vdbe/insn.rs b/core/vdbe/insn.rs index b41d48040..5cdcee287 100644 --- a/core/vdbe/insn.rs +++ b/core/vdbe/insn.rs @@ -708,6 +708,7 @@ pub enum Insn { OpenWrite { cursor_id: CursorID, root_page: RegisterOrLiteral, + name: String, }, Copy {