mirror of
https://github.com/aljazceru/turso.git
synced 2026-02-23 08:55:40 +01:00
modify explain for MakeRecord to show index name
This commit is contained in:
@@ -880,6 +880,7 @@ fn emit_update_insns(
|
||||
start_reg: start,
|
||||
count: table_ref.columns().len(),
|
||||
dest_reg: record_reg,
|
||||
index_name: None,
|
||||
});
|
||||
program.emit_insn(Insn::Insert {
|
||||
cursor: cursor_id,
|
||||
|
||||
@@ -165,6 +165,7 @@ pub fn translate_create_index(
|
||||
start_reg,
|
||||
count: columns.len() + 1,
|
||||
dest_reg: record_reg,
|
||||
index_name: Some(idx_name.clone()),
|
||||
});
|
||||
program.emit_insn(Insn::SorterInsert {
|
||||
cursor_id: sorter_cursor_id,
|
||||
@@ -182,7 +183,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()
|
||||
name: idx_name.clone(),
|
||||
});
|
||||
|
||||
let sorted_loop_start = program.allocate_label();
|
||||
|
||||
@@ -292,7 +292,7 @@ pub fn translate_insert(
|
||||
_ => (),
|
||||
}
|
||||
|
||||
for index_col_mapping in index_col_mappings.iter() {
|
||||
for index_col_mapping in index_col_mappings {
|
||||
// find which cursor we opened earlier for this index
|
||||
let idx_cursor_id = idx_cursors
|
||||
.iter()
|
||||
@@ -321,17 +321,18 @@ pub fn translate_insert(
|
||||
amount: 0,
|
||||
});
|
||||
|
||||
let index = schema
|
||||
.get_index(&table_name.0, &index_col_mapping.idx_name)
|
||||
.expect("index should be present");
|
||||
|
||||
let record_reg = program.alloc_register();
|
||||
program.emit_insn(Insn::MakeRecord {
|
||||
start_reg: idx_start_reg,
|
||||
count: num_cols + 1,
|
||||
dest_reg: record_reg,
|
||||
index_name: Some(index_col_mapping.idx_name),
|
||||
});
|
||||
|
||||
let index = schema
|
||||
.get_index(&table_name.0, &index_col_mapping.idx_name)
|
||||
.expect("index should be present");
|
||||
|
||||
if index.unique {
|
||||
let label_idx_insert = program.allocate_label();
|
||||
program.emit_insn(Insn::NoConflict {
|
||||
@@ -387,6 +388,7 @@ pub fn translate_insert(
|
||||
start_reg: column_registers_start,
|
||||
count: num_cols,
|
||||
dest_reg: record_register,
|
||||
index_name: None,
|
||||
});
|
||||
|
||||
program.emit_insn(Insn::Insert {
|
||||
|
||||
@@ -1227,6 +1227,7 @@ fn emit_autoindex(
|
||||
start_reg: ephemeral_cols_start_reg,
|
||||
count: num_regs_to_reserve,
|
||||
dest_reg: record_reg,
|
||||
index_name: Some(index.name.clone()),
|
||||
});
|
||||
program.emit_insn(Insn::IdxInsert {
|
||||
cursor_id: index_cursor_id,
|
||||
|
||||
@@ -247,6 +247,7 @@ pub fn sorter_insert(
|
||||
start_reg,
|
||||
count: column_count,
|
||||
dest_reg: record_reg,
|
||||
index_name: None,
|
||||
});
|
||||
program.emit_insn(Insn::SorterInsert {
|
||||
cursor_id,
|
||||
|
||||
@@ -120,7 +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()
|
||||
name: tbl_name.name.0.clone(),
|
||||
});
|
||||
|
||||
// Add the table entry to sqlite_schema
|
||||
@@ -237,6 +237,7 @@ pub fn emit_schema_entry(
|
||||
start_reg: type_reg,
|
||||
count: 5,
|
||||
dest_reg: record_reg,
|
||||
index_name: None,
|
||||
});
|
||||
|
||||
program.emit_insn(Insn::Insert {
|
||||
@@ -564,6 +565,7 @@ pub fn translate_create_virtual_table(
|
||||
start_reg: args_start,
|
||||
count: args_vec.len(),
|
||||
dest_reg: args_record_reg,
|
||||
index_name: None,
|
||||
});
|
||||
Some(args_record_reg)
|
||||
} else {
|
||||
@@ -583,7 +585,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()
|
||||
name: table_name.clone(),
|
||||
});
|
||||
|
||||
let sql = create_vtable_body_to_str(&vtab, vtab_module.clone());
|
||||
@@ -663,7 +665,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()
|
||||
name: tbl_name.name.0.clone(),
|
||||
});
|
||||
|
||||
// 1. Remove all entries from the schema table related to the table we are dropping, except for triggers
|
||||
|
||||
@@ -1444,6 +1444,7 @@ pub fn op_make_record(
|
||||
start_reg,
|
||||
count,
|
||||
dest_reg,
|
||||
..
|
||||
} = insn
|
||||
else {
|
||||
unreachable!("unexpected Insn {:?}", insn)
|
||||
|
||||
@@ -529,20 +529,25 @@ pub fn insn_to_str(
|
||||
start_reg,
|
||||
count,
|
||||
dest_reg,
|
||||
} => (
|
||||
"MakeRecord",
|
||||
*start_reg as i32,
|
||||
*count as i32,
|
||||
*dest_reg as i32,
|
||||
OwnedValue::build_text(""),
|
||||
0,
|
||||
format!(
|
||||
"r[{}]=mkrec(r[{}..{}])",
|
||||
dest_reg,
|
||||
start_reg,
|
||||
start_reg + count - 1,
|
||||
),
|
||||
),
|
||||
index_name,
|
||||
} => {
|
||||
let for_index = index_name.as_ref().map(|name| format!(" ;for {}", name));
|
||||
(
|
||||
"MakeRecord",
|
||||
*start_reg as i32,
|
||||
*count as i32,
|
||||
*dest_reg as i32,
|
||||
OwnedValue::build_text(""),
|
||||
0,
|
||||
format!(
|
||||
"r[{}]=mkrec(r[{}..{}]){}",
|
||||
dest_reg,
|
||||
start_reg,
|
||||
start_reg + count - 1,
|
||||
for_index.unwrap_or("".to_string())
|
||||
),
|
||||
)
|
||||
}
|
||||
Insn::ResultRow { start_reg, count } => (
|
||||
"ResultRow",
|
||||
*start_reg as i32,
|
||||
|
||||
@@ -373,6 +373,7 @@ pub enum Insn {
|
||||
start_reg: usize, // P1
|
||||
count: usize, // P2
|
||||
dest_reg: usize, // P3
|
||||
index_name: Option<String>,
|
||||
},
|
||||
|
||||
/// Emit a row of results.
|
||||
|
||||
Reference in New Issue
Block a user