From 885b6ecd7623cd11a62cebe03e9c85ae28f816fe Mon Sep 17 00:00:00 2001 From: jussisaurio Date: Sat, 23 Nov 2024 20:00:58 +0200 Subject: [PATCH] Remove 'cursor_hint': it is never needed --- core/translate/emitter.rs | 71 ++++++----------------- core/translate/expr.rs | 118 +++----------------------------------- core/translate/insert.rs | 1 - core/vdbe/builder.rs | 9 +-- 4 files changed, 28 insertions(+), 171 deletions(-) diff --git a/core/translate/emitter.rs b/core/translate/emitter.rs index cf6526fdf..13fe7de07 100644 --- a/core/translate/emitter.rs +++ b/core/translate/emitter.rs @@ -503,7 +503,6 @@ fn open_loop( program, referenced_tables, predicate, - None, condition_metadata, None, )?; @@ -531,7 +530,7 @@ fn open_loop( predicates, iter_dir, } => { - let cursor_id = program.resolve_cursor_id(&table_reference.table_identifier, None); + let cursor_id = program.resolve_cursor_id(&table_reference.table_identifier); if iter_dir .as_ref() .is_some_and(|dir| *dir == IterationDirection::Backwards) @@ -575,7 +574,6 @@ fn open_loop( program, referenced_tables, expr, - None, condition_metadata, None, )?; @@ -592,14 +590,13 @@ fn open_loop( predicates, .. } => { - let table_cursor_id = - program.resolve_cursor_id(&table_reference.table_identifier, None); + let table_cursor_id = program.resolve_cursor_id(&table_reference.table_identifier); // Open the loop for the index search. // Primary key equality search is handled with a SeekRowid instruction which does not loop, since it is a single row lookup. if !matches!(search, Search::PrimaryKeyEq { .. }) { let index_cursor_id = if let Search::IndexSearch { index, .. } = search { - Some(program.resolve_cursor_id(&index.name, None)) + Some(program.resolve_cursor_id(&index.name)) } else { None }; @@ -617,14 +614,7 @@ fn open_loop( ast::Operator::Equals | ast::Operator::Greater | ast::Operator::GreaterEquals => { - translate_expr( - program, - Some(referenced_tables), - cmp_expr, - cmp_reg, - None, - None, - )?; + translate_expr(program, Some(referenced_tables), cmp_expr, cmp_reg, None)?; } ast::Operator::Less | ast::Operator::LessEquals => { program.emit_insn(Insn::Null { @@ -657,14 +647,7 @@ fn open_loop( *m.termination_label_stack.last().unwrap(), ); if *cmp_op == ast::Operator::Less || *cmp_op == ast::Operator::LessEquals { - translate_expr( - program, - Some(referenced_tables), - cmp_expr, - cmp_reg, - None, - None, - )?; + translate_expr(program, Some(referenced_tables), cmp_expr, cmp_reg, None)?; } program.defer_label_resolution(scan_loop_body_label, program.offset() as usize); @@ -755,14 +738,7 @@ fn open_loop( if let Search::PrimaryKeyEq { cmp_expr } = search { let src_reg = program.alloc_register(); - translate_expr( - program, - Some(referenced_tables), - cmp_expr, - src_reg, - None, - None, - )?; + translate_expr(program, Some(referenced_tables), cmp_expr, src_reg, None)?; program.emit_insn_with_label_dependency( Insn::SeekRowid { cursor_id: table_cursor_id, @@ -784,7 +760,6 @@ fn open_loop( program, referenced_tables, predicate, - None, condition_metadata, None, )?; @@ -909,7 +884,7 @@ fn inner_loop_source_emit( for expr in group_by.iter() { let key_reg = cur_reg; cur_reg += 1; - translate_expr(program, Some(referenced_tables), expr, key_reg, None, None)?; + translate_expr(program, Some(referenced_tables), expr, key_reg, None)?; } for agg in aggregates.iter() { // Here we are collecting scalars for the group by sorter, which will include @@ -921,7 +896,7 @@ fn inner_loop_source_emit( for expr in agg.args.iter() { let agg_reg = cur_reg; cur_reg += 1; - translate_expr(program, Some(referenced_tables), expr, agg_reg, None, None)?; + translate_expr(program, Some(referenced_tables), expr, agg_reg, None)?; } } @@ -991,7 +966,7 @@ fn inner_loop_source_emit( let start_reg = program.alloc_registers(orderby_sorter_column_count); for (i, (expr, _)) in order_by.iter().enumerate() { let key_reg = start_reg + i; - translate_expr(program, Some(referenced_tables), expr, key_reg, None, None)?; + translate_expr(program, Some(referenced_tables), expr, key_reg, None)?; } let mut cur_reg = start_reg + order_by_len; let mut cur_idx_in_orderby_sorter = order_by_len; @@ -1007,14 +982,7 @@ fn inner_loop_source_emit( contains_aggregates, } => { assert!(!*contains_aggregates); - translate_expr( - program, - Some(referenced_tables), - expr, - cur_reg, - None, - None, - )?; + translate_expr(program, Some(referenced_tables), expr, cur_reg, None)?; } other => unreachable!("{:?}", other), } @@ -1044,7 +1012,7 @@ fn inner_loop_source_emit( m.aggregation_start_register = Some(start_reg); for (i, agg) in aggregates.iter().enumerate() { let reg = start_reg + i; - translate_aggregation(program, referenced_tables, agg, reg, None)?; + translate_aggregation(program, referenced_tables, agg, reg)?; } for (i, expr) in result_columns.iter().enumerate() { match expr { @@ -1058,7 +1026,7 @@ fn inner_loop_source_emit( continue; } let reg = start_reg + num_aggs + i; - translate_expr(program, Some(referenced_tables), expr, reg, None, None)?; + translate_expr(program, Some(referenced_tables), expr, reg, None)?; } ResultSetColumn::Agg(_) => { /* do nothing, aggregates are computed above */ } } @@ -1076,7 +1044,7 @@ fn inner_loop_source_emit( } => { assert!(!*contains_aggregates); let reg = start_reg + i; - translate_expr(program, Some(referenced_tables), expr, reg, None, None)?; + translate_expr(program, Some(referenced_tables), expr, reg, None)?; } other => unreachable!( "Unexpected non-scalar result column in inner loop: {:?}", @@ -1131,10 +1099,10 @@ fn close_loop( let right_cursor_id = match right.as_ref() { SourceOperator::Scan { table_reference, .. - } => program.resolve_cursor_id(&table_reference.table_identifier, None), + } => program.resolve_cursor_id(&table_reference.table_identifier), SourceOperator::Search { table_reference, .. - } => program.resolve_cursor_id(&table_reference.table_identifier, None), + } => program.resolve_cursor_id(&table_reference.table_identifier), _ => unreachable!(), }; program.emit_insn(Insn::NullRow { @@ -1165,7 +1133,7 @@ fn close_loop( iter_dir, .. } => { - let cursor_id = program.resolve_cursor_id(&table_reference.table_identifier, None); + let cursor_id = program.resolve_cursor_id(&table_reference.table_identifier); program.resolve_label(*m.next_row_labels.get(id).unwrap(), program.offset()); if iter_dir .as_ref() @@ -1210,9 +1178,9 @@ fn close_loop( return Ok(()); } let cursor_id = match search { - Search::IndexSearch { index, .. } => program.resolve_cursor_id(&index.name, None), + Search::IndexSearch { index, .. } => program.resolve_cursor_id(&index.name), Search::PrimaryKeySearch { .. } => { - program.resolve_cursor_id(&table_reference.table_identifier, None) + program.resolve_cursor_id(&table_reference.table_identifier) } Search::PrimaryKeyEq { .. } => unreachable!(), }; @@ -1562,7 +1530,6 @@ fn group_by_emit( Some(referenced_tables), expr, cur_reg, - None, Some(&precomputed_exprs_to_register), )?; cur_reg += 1; @@ -1582,7 +1549,6 @@ fn group_by_emit( Some(referenced_tables), expr, cur_reg, - None, Some(&precomputed_exprs_to_register), )?; } @@ -1688,7 +1654,6 @@ fn agg_without_group_by_emit( Some(referenced_tables), expr, output_reg + i, - None, Some(&precomputed_exprs_to_register), )?; } diff --git a/core/translate/expr.rs b/core/translate/expr.rs index 5ce5b5537..6c0b4437d 100644 --- a/core/translate/expr.rs +++ b/core/translate/expr.rs @@ -21,7 +21,6 @@ pub fn translate_condition_expr( program: &mut ProgramBuilder, referenced_tables: &[BTreeTableReference], expr: &ast::Expr, - cursor_hint: Option, condition_metadata: ConditionMetadata, precomputed_exprs_to_registers: Option<&Vec<(&ast::Expr, usize)>>, ) -> Result<()> { @@ -34,7 +33,6 @@ pub fn translate_condition_expr( program, referenced_tables, lhs, - cursor_hint, ConditionMetadata { jump_if_condition_is_true: false, ..condition_metadata @@ -45,7 +43,6 @@ pub fn translate_condition_expr( program, referenced_tables, rhs, - cursor_hint, condition_metadata, precomputed_exprs_to_registers, ); @@ -56,7 +53,6 @@ pub fn translate_condition_expr( program, referenced_tables, lhs, - cursor_hint, ConditionMetadata { // If the first condition is true, we don't need to evaluate the second condition. jump_if_condition_is_true: true, @@ -70,7 +66,6 @@ pub fn translate_condition_expr( program, referenced_tables, rhs, - cursor_hint, condition_metadata, precomputed_exprs_to_registers, ); @@ -82,7 +77,6 @@ pub fn translate_condition_expr( Some(referenced_tables), lhs, lhs_reg, - cursor_hint, precomputed_exprs_to_registers, ); if let ast::Expr::Literal(_) = lhs.as_ref() { @@ -94,7 +88,6 @@ pub fn translate_condition_expr( Some(referenced_tables), rhs, rhs_reg, - cursor_hint, precomputed_exprs_to_registers, ); if let ast::Expr::Literal(_) = rhs.as_ref() { @@ -343,7 +336,6 @@ pub fn translate_condition_expr( Some(referenced_tables), lhs, lhs_reg, - cursor_hint, precomputed_exprs_to_registers, )?; @@ -373,7 +365,6 @@ pub fn translate_condition_expr( Some(referenced_tables), expr, rhs_reg, - cursor_hint, precomputed_exprs_to_registers, )?; // If this is not the last condition, we need to jump to the 'jump_target_when_true' label if the condition is true. @@ -417,7 +408,6 @@ pub fn translate_condition_expr( Some(referenced_tables), expr, rhs_reg, - cursor_hint, precomputed_exprs_to_registers, )?; program.emit_insn_with_label_dependency( @@ -463,7 +453,6 @@ pub fn translate_condition_expr( Some(referenced_tables), lhs, column_reg, - cursor_hint, precomputed_exprs_to_registers, )?; if let ast::Expr::Literal(_) = lhs.as_ref() { @@ -474,7 +463,6 @@ pub fn translate_condition_expr( Some(referenced_tables), rhs, pattern_reg, - cursor_hint, precomputed_exprs_to_registers, )?; if let ast::Expr::Literal(_) = rhs.as_ref() { @@ -547,7 +535,6 @@ pub fn translate_condition_expr( program, referenced_tables, expr, - cursor_hint, condition_metadata, precomputed_exprs_to_registers, ); @@ -563,7 +550,6 @@ pub fn translate_expr( referenced_tables: Option<&[BTreeTableReference]>, expr: &ast::Expr, target_register: usize, - cursor_hint: Option, precomputed_exprs_to_registers: Option<&Vec<(&ast::Expr, usize)>>, ) -> Result { if let Some(precomputed_exprs_to_registers) = precomputed_exprs_to_registers { @@ -590,7 +576,6 @@ pub fn translate_expr( referenced_tables, e1, e1_reg, - cursor_hint, precomputed_exprs_to_registers, )?; let e2_reg = program.alloc_register(); @@ -599,7 +584,6 @@ pub fn translate_expr( referenced_tables, e2, e2_reg, - cursor_hint, precomputed_exprs_to_registers, )?; @@ -723,7 +707,6 @@ pub fn translate_expr( referenced_tables, expr, reg_expr, - cursor_hint, precomputed_exprs_to_registers, )?; let reg_type = program.alloc_register(); @@ -796,7 +779,6 @@ pub fn translate_expr( referenced_tables, &args[0], regs, - cursor_hint, precomputed_exprs_to_registers, )?; program.emit_insn(Insn::Function { @@ -823,7 +805,6 @@ pub fn translate_expr( referenced_tables, arg, reg, - cursor_hint, precomputed_exprs_to_registers, )?; } @@ -861,7 +842,6 @@ pub fn translate_expr( referenced_tables, arg, target_register, - cursor_hint, precomputed_exprs_to_registers, )?; if index < args.len() - 1 { @@ -897,7 +877,6 @@ pub fn translate_expr( referenced_tables, arg, reg, - cursor_hint, precomputed_exprs_to_registers, )?; } @@ -930,7 +909,6 @@ pub fn translate_expr( referenced_tables, arg, reg, - cursor_hint, precomputed_exprs_to_registers, )?; } @@ -967,7 +945,6 @@ pub fn translate_expr( referenced_tables, &args[0], temp_reg, - cursor_hint, precomputed_exprs_to_registers, )?; program.emit_insn(Insn::NotNull { @@ -980,7 +957,6 @@ pub fn translate_expr( referenced_tables, &args[1], temp_reg, - cursor_hint, precomputed_exprs_to_registers, )?; program.emit_insn(Insn::Copy { @@ -1013,7 +989,6 @@ pub fn translate_expr( referenced_tables, arg, reg, - cursor_hint, precomputed_exprs_to_registers, )?; if let ast::Expr::Literal(_) = arg { @@ -1061,7 +1036,6 @@ pub fn translate_expr( referenced_tables, &args[0], regs, - cursor_hint, precomputed_exprs_to_registers, )?; program.emit_insn(Insn::Function { @@ -1098,7 +1072,6 @@ pub fn translate_expr( referenced_tables, arg, target_reg, - cursor_hint, precomputed_exprs_to_registers, )?; } @@ -1136,7 +1109,6 @@ pub fn translate_expr( referenced_tables, &args[0], str_reg, - cursor_hint, precomputed_exprs_to_registers, )?; translate_expr( @@ -1144,7 +1116,6 @@ pub fn translate_expr( referenced_tables, &args[1], start_reg, - cursor_hint, precomputed_exprs_to_registers, )?; if args.len() == 3 { @@ -1153,7 +1124,6 @@ pub fn translate_expr( referenced_tables, &args[2], length_reg, - cursor_hint, precomputed_exprs_to_registers, )?; } @@ -1183,7 +1153,6 @@ pub fn translate_expr( referenced_tables, &args[0], regs, - cursor_hint, precomputed_exprs_to_registers, )?; program.emit_insn(Insn::Function { @@ -1207,7 +1176,6 @@ pub fn translate_expr( referenced_tables, &args[0], arg_reg, - cursor_hint, precomputed_exprs_to_registers, )?; start_reg = arg_reg; @@ -1232,7 +1200,6 @@ pub fn translate_expr( referenced_tables, arg, target_reg, - cursor_hint, precomputed_exprs_to_registers, )?; } @@ -1272,7 +1239,6 @@ pub fn translate_expr( referenced_tables, arg, reg, - cursor_hint, precomputed_exprs_to_registers, )?; if let ast::Expr::Literal(_) = arg { @@ -1305,7 +1271,6 @@ pub fn translate_expr( referenced_tables, arg, reg, - cursor_hint, precomputed_exprs_to_registers, )?; if let ast::Expr::Literal(_) = arg { @@ -1339,7 +1304,6 @@ pub fn translate_expr( referenced_tables, arg, reg, - cursor_hint, precomputed_exprs_to_registers, )?; if let ast::Expr::Literal(_) = arg { @@ -1377,7 +1341,6 @@ pub fn translate_expr( referenced_tables, &args[0], first_reg, - cursor_hint, precomputed_exprs_to_registers, )?; let second_reg = program.alloc_register(); @@ -1386,7 +1349,6 @@ pub fn translate_expr( referenced_tables, &args[1], second_reg, - cursor_hint, precomputed_exprs_to_registers, )?; program.emit_insn(Insn::Function { @@ -1431,7 +1393,7 @@ pub fn translate_expr( is_rowid_alias: is_primary_key, } => { let tbl_ref = referenced_tables.as_ref().unwrap().get(*table).unwrap(); - let cursor_id = program.resolve_cursor_id(&tbl_ref.table_identifier, cursor_hint); + let cursor_id = program.resolve_cursor_id(&tbl_ref.table_identifier); if *is_primary_key { program.emit_insn(Insn::RowId { cursor_id, @@ -1518,7 +1480,6 @@ pub fn translate_expr( referenced_tables, &exprs[0], target_register, - cursor_hint, precomputed_exprs_to_registers, )?; } else { @@ -1586,7 +1547,6 @@ pub fn translate_aggregation( referenced_tables: &[BTreeTableReference], agg: &Aggregate, target_register: usize, - cursor_hint: Option, ) -> Result { let dest = match agg.func { AggFunc::Avg => { @@ -1595,14 +1555,7 @@ pub fn translate_aggregation( } let expr = &agg.args[0]; let expr_reg = program.alloc_register(); - let _ = translate_expr( - program, - Some(referenced_tables), - expr, - expr_reg, - cursor_hint, - None, - )?; + let _ = translate_expr(program, Some(referenced_tables), expr, expr_reg, None)?; program.emit_insn(Insn::AggStep { acc_reg: target_register, col: expr_reg, @@ -1617,14 +1570,7 @@ pub fn translate_aggregation( } else { let expr = &agg.args[0]; let expr_reg = program.alloc_register(); - let _ = translate_expr( - program, - Some(referenced_tables), - expr, - expr_reg, - cursor_hint, - None, - ); + let _ = translate_expr(program, Some(referenced_tables), expr, expr_reg, None); expr_reg }; program.emit_insn(Insn::AggStep { @@ -1660,20 +1606,12 @@ pub fn translate_aggregation( delimiter_expr = ast::Expr::Literal(ast::Literal::String(String::from("\",\""))); } - translate_expr( - program, - Some(referenced_tables), - expr, - expr_reg, - cursor_hint, - None, - )?; + translate_expr(program, Some(referenced_tables), expr, expr_reg, None)?; translate_expr( program, Some(referenced_tables), &delimiter_expr, delimiter_reg, - cursor_hint, None, )?; @@ -1692,14 +1630,7 @@ pub fn translate_aggregation( } let expr = &agg.args[0]; let expr_reg = program.alloc_register(); - let _ = translate_expr( - program, - Some(referenced_tables), - expr, - expr_reg, - cursor_hint, - None, - )?; + let _ = translate_expr(program, Some(referenced_tables), expr, expr_reg, None)?; program.emit_insn(Insn::AggStep { acc_reg: target_register, col: expr_reg, @@ -1714,14 +1645,7 @@ pub fn translate_aggregation( } let expr = &agg.args[0]; let expr_reg = program.alloc_register(); - let _ = translate_expr( - program, - Some(referenced_tables), - expr, - expr_reg, - cursor_hint, - None, - )?; + let _ = translate_expr(program, Some(referenced_tables), expr, expr_reg, None)?; program.emit_insn(Insn::AggStep { acc_reg: target_register, col: expr_reg, @@ -1751,20 +1675,12 @@ pub fn translate_aggregation( _ => crate::bail_parse_error!("Incorrect delimiter parameter"), }; - translate_expr( - program, - Some(referenced_tables), - expr, - expr_reg, - cursor_hint, - None, - )?; + translate_expr(program, Some(referenced_tables), expr, expr_reg, None)?; translate_expr( program, Some(referenced_tables), &delimiter_expr, delimiter_reg, - cursor_hint, None, )?; @@ -1783,14 +1699,7 @@ pub fn translate_aggregation( } let expr = &agg.args[0]; let expr_reg = program.alloc_register(); - let _ = translate_expr( - program, - Some(referenced_tables), - expr, - expr_reg, - cursor_hint, - None, - )?; + let _ = translate_expr(program, Some(referenced_tables), expr, expr_reg, None)?; program.emit_insn(Insn::AggStep { acc_reg: target_register, col: expr_reg, @@ -1805,14 +1714,7 @@ pub fn translate_aggregation( } let expr = &agg.args[0]; let expr_reg = program.alloc_register(); - let _ = translate_expr( - program, - Some(referenced_tables), - expr, - expr_reg, - cursor_hint, - None, - )?; + let _ = translate_expr(program, Some(referenced_tables), expr, expr_reg, None)?; program.emit_insn(Insn::AggStep { acc_reg: target_register, col: expr_reg, @@ -1897,7 +1799,6 @@ pub fn translate_aggregation_groupby( &delimiter_expr, delimiter_reg, None, - None, )?; program.emit_insn(Insn::AggStep { @@ -1964,7 +1865,6 @@ pub fn translate_aggregation_groupby( &delimiter_expr, delimiter_reg, None, - None, )?; program.emit_insn(Insn::AggStep { diff --git a/core/translate/insert.rs b/core/translate/insert.rs index ea890e994..614cde8b2 100644 --- a/core/translate/insert.rs +++ b/core/translate/insert.rs @@ -98,7 +98,6 @@ pub fn translate_insert( expr, column_registers_start + col, None, - None, )?; } program.emit_insn(Insn::Yield { diff --git a/core/vdbe/builder.rs b/core/vdbe/builder.rs index bbb7f75a8..8dd1cd4de 100644 --- a/core/vdbe/builder.rs +++ b/core/vdbe/builder.rs @@ -343,14 +343,7 @@ impl ProgramBuilder { } // translate table to cursor id - pub fn resolve_cursor_id( - &self, - table_identifier: &str, - cursor_hint: Option, - ) -> CursorID { - if let Some(cursor_hint) = cursor_hint { - return cursor_hint; - } + pub fn resolve_cursor_id(&self, table_identifier: &str) -> CursorID { self.cursor_ref .iter() .position(|(t_ident, _)| {