tursodatabase/turso

Cleanup opcode definitions

已关闭

#393 创建于 2024年11月16日

 (4 条评论) (0 个反应) (0 位负责人)Rust (1,001 个派生)github user discovery
Staleenhancementgood first issuehelp wanted

仓库指标

星标
 (19,103 个星标)
PR 合并指标
 (平均合并 2天 11小时) (30 天内合并 147 个 PR)

描述

We currently have SQLite VDBE opcodes defined in multiple places.

For example, for the If opcode, we have this in core/vdbe/mod.rs:

pub enum Insn {
    /// Jump to target_pc if r\[reg\] != 0 or (r\[reg\] == NULL && r\[null_reg\] != 0)
    If {
        reg: usize,              // P1
        target_pc: BranchOffset, // P2
        /// P3. If r\[reg\] is null, jump iff r\[null_reg\] != 0
        null_reg: usize,
    },
}

The following in core/vdbe/explain.rs:

Insn::Goto { target_pc } => (
    "Goto",
    0,
    *target_pc as i32,
    0,
    OwnedValue::Text(Rc::new("".to_string())),
    0,
    "".to_string(),
),

and the following in cli/opcodes_dictionary.rs:

Let's implement some macro magic where we can do something like:

pub enum Insn {
    /// Jump to target_pc if r\[reg\] != 0 or (r\[reg\] == NULL && r\[null_reg\] != 0)
    #[description = "Jump to P2 if the value in register P1 is true. The value is considered true if it is numeric and non-zero. If the value in P1 is NULL then take the jump if and only if P3 is non-zero."]
    If {
        #[p1] reg: usize,
        #[p2] target_pc: BranchOffset,
        /// If r\[reg\] is null, jump iff r\[null_reg\] != 0
        #[p3] null_reg: usize,
    },
}

贡献者指南