diff --git a/core/translate/order_by.rs b/core/translate/order_by.rs index 868a26117..35f90cb9a 100644 --- a/core/translate/order_by.rs +++ b/core/translate/order_by.rs @@ -154,13 +154,7 @@ pub fn emit_order_by( }); program.preassign_label_to_next_insn(sort_loop_start_label); - emit_offset( - program, - plan, - sort_loop_next_label, - t_ctx.reg_offset, - &t_ctx.resolver, - ); + emit_offset(program, sort_loop_next_label, t_ctx.reg_offset); program.emit_insn(Insn::SorterData { cursor_id: sort_cursor, diff --git a/core/translate/result_row.rs b/core/translate/result_row.rs index 04b7454f5..4c17d4946 100644 --- a/core/translate/result_row.rs +++ b/core/translate/result_row.rs @@ -32,7 +32,7 @@ pub fn emit_select_result( limit_ctx: Option, ) -> Result<()> { if let (Some(jump_to), Some(_)) = (offset_jump_to, label_on_limit_reached) { - emit_offset(program, plan, jump_to, reg_offset, resolver); + emit_offset(program, jump_to, reg_offset); } let start_reg = reg_result_cols_start; @@ -162,39 +162,14 @@ pub fn emit_result_row_and_limit( Ok(()) } -pub fn emit_offset( - program: &mut ProgramBuilder, - plan: &SelectPlan, - jump_to: BranchOffset, - reg_offset: Option, - resolver: &Resolver, -) { - let Some(offset_expr) = &plan.offset else { +pub fn emit_offset(program: &mut ProgramBuilder, jump_to: BranchOffset, reg_offset: Option) { + let Some(reg_offset) = ®_offset else { return; }; - if let Some(val) = try_fold_expr_to_i64(offset_expr) { - if val > 0 { - program.add_comment(program.offset(), "OFFSET const"); - program.emit_insn(Insn::IfPos { - reg: reg_offset.expect("reg_offset must be Some"), - target_pc: jump_to, - decrement_by: 1, - }); - } - return; - } - - let r = reg_offset.expect("reg_offset must be Some"); - - program.add_comment(program.offset(), "OFFSET expr"); - - _ = translate_expr(program, None, offset_expr, r, resolver); - - program.emit_insn(Insn::MustBeInt { reg: r }); - + program.add_comment(program.offset(), "OFFSET const"); program.emit_insn(Insn::IfPos { - reg: r, + reg: *reg_offset, target_pc: jump_to, decrement_by: 1, }); diff --git a/core/translate/values.rs b/core/translate/values.rs index 869a63f31..b74483f7f 100644 --- a/core/translate/values.rs +++ b/core/translate/values.rs @@ -34,7 +34,7 @@ fn emit_values_when_single_row( t_ctx: &TranslateCtx, ) -> Result { let end_label = program.allocate_label(); - emit_offset(program, plan, end_label, t_ctx.reg_offset, &t_ctx.resolver); + emit_offset(program, end_label, t_ctx.reg_offset); let first_row = &plan.values[0]; let row_len = first_row.len(); let start_reg = program.alloc_registers(row_len); @@ -87,7 +87,7 @@ fn emit_toplevel_values( }); let goto_label = program.allocate_label(); - emit_offset(program, plan, goto_label, t_ctx.reg_offset, &t_ctx.resolver); + emit_offset(program, goto_label, t_ctx.reg_offset); let row_len = plan.values[0].len(); let copy_start_reg = program.alloc_registers(row_len); for i in 0..row_len {