From 5fbcdbb424b92bbb7528576b33c1f2a139ea25e2 Mon Sep 17 00:00:00 2001 From: Pekka Enberg Date: Sun, 30 Jun 2024 19:11:45 +0300 Subject: [PATCH] Fix `SELECT .. LIMIT` not respecting the limit Fix the codegen to emit DecrJumpZero in the right place. --- core/translate.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/core/translate.rs b/core/translate.rs index 0bb17e310..2ace4a36c 100644 --- a/core/translate.rs +++ b/core/translate.rs @@ -110,7 +110,7 @@ fn translate_select(schema: &Schema, select: Select) -> Result { &info_per_columns, exist_aggregation, ); - if exist_aggregation { + let limit_decr_insn = if exist_aggregation { // Only one ResultRow will occurr with aggregations. program.emit_insn(Insn::NextAsync { cursor_id }); program.emit_insn(Insn::NextAwait { @@ -142,18 +142,20 @@ fn translate_select(schema: &Schema, select: Select) -> Result { register_start, register_end, }); + None } else { program.emit_insn(Insn::ResultRow { register_start, register_end, }); + let limit_decr_insn = limit_reg.map(|_| program.emit_placeholder()); program.emit_insn(Insn::NextAsync { cursor_id }); program.emit_insn(Insn::NextAwait { cursor_id, pc_if_next: rewind_await_offset, }); - } - let limit_decr_insn = limit_reg.map(|_| program.emit_placeholder()); + limit_decr_insn + }; program.fixup_insn( rewind_await_offset, Insn::RewindAwait {