use sqlite_vdbe::{Connection, Insn, StepResult};
fn main() -> sqlite_vdbe::Result<()> {
let mut conn = Connection::open_in_memory()?;
let mut builder = conn.new_program()?;
let r_a = builder.alloc_register(); let r_b = builder.alloc_register(); let r_tmp = builder.alloc_register(); let r_count = builder.alloc_register();
builder.add(Insn::Integer {
value: 0,
dest: r_a,
});
builder.add(Insn::Integer {
value: 1,
dest: r_b,
});
builder.add(Insn::Integer {
value: 10,
dest: r_count,
});
let loop_start = builder.current_addr();
builder.add(Insn::ResultRow {
start: r_a,
count: 1,
});
builder.add(Insn::Add {
lhs: r_a,
rhs: r_b,
dest: r_tmp,
});
builder.add(Insn::SCopy {
src: r_b,
dest: r_a,
});
builder.add(Insn::SCopy {
src: r_tmp,
dest: r_b,
});
builder.add(Insn::IfNotZero {
src: r_count,
target: loop_start.raw(),
});
builder.add(Insn::Halt);
let mut program = builder.finish(1)?;
println!("First 10 Fibonacci numbers:");
while let StepResult::Row = program.step()? {
print!("{} ", program.column_int(0));
}
println!();
Ok(())
}