enhancementgood first issuehelp wanted
倉庫指標
- Star
- (19,103 star)
- PR 合併指標
- (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,
},
}