From be387eb31c2bf7534f7a738f7aa31074ae30fd57 Mon Sep 17 00:00:00 2001 From: Pere Diaz Bou Date: Fri, 12 Jul 2024 17:00:05 +0200 Subject: [PATCH 1/3] core: labels system and limit refactor Signed-off-by: Pere Diaz Bou --- core/translate.rs | 184 ++++++++++++++++++++++------------------------ core/vdbe.rs | 136 ++++++++++++++++++++++++++++++++-- 2 files changed, 216 insertions(+), 104 deletions(-) diff --git a/core/translate.rs b/core/translate.rs index 99a3c0a50..aaaeccc20 100644 --- a/core/translate.rs +++ b/core/translate.rs @@ -6,7 +6,7 @@ use crate::pager::Pager; use crate::schema::{Column, Schema, Table}; use crate::sqlite3_ondisk::{DatabaseHeader, MIN_PAGE_CACHE_SIZE}; use crate::util::normalize_ident; -use crate::vdbe::{Insn, Program, ProgramBuilder}; +use crate::vdbe::{BranchOffset, Insn, Program, ProgramBuilder}; use anyhow::Result; use sqlite3_parser::ast::{self, Expr}; @@ -31,7 +31,8 @@ struct Select { struct LoopInfo { table: Table, - rewind_offset: usize, + rewind_offset: BranchOffset, + rewind_label: BranchOffset, open_cursor: usize, } @@ -60,6 +61,12 @@ impl ColumnInfo { } } +struct LimitInfo { + limit_reg: usize, + num: i64, + goto_label: BranchOffset, +} + /// Translate SQL statement into bytecode program. pub fn translate( schema: &Schema, @@ -161,59 +168,59 @@ fn build_select(schema: &Schema, select: ast::Select) -> Result