use crate::schema::Schema; use crate::translate::{ProgramBuilder, ProgramBuilderOpts}; use crate::vdbe::insn::Insn; use crate::Result; use turso_sqlite3_parser::ast::{Name, TransactionType}; pub fn translate_tx_begin( tx_type: Option, _tx_name: Option, schema: &Schema, mut program: ProgramBuilder, ) -> Result { program.extend(&ProgramBuilderOpts { num_cursors: 0, approx_num_insns: 0, approx_num_labels: 0, }); let tx_type = tx_type.unwrap_or(TransactionType::Deferred); match tx_type { TransactionType::Deferred => { program.emit_insn(Insn::AutoCommit { auto_commit: false, rollback: false, }); } TransactionType::Immediate | TransactionType::Exclusive => { program.emit_insn(Insn::Transaction { db: 0, write: true, schema_cookie: schema.schema_version, }); // TODO: Emit transaction instruction on temporary tables when we support them. program.emit_insn(Insn::AutoCommit { auto_commit: false, rollback: false, }); } } Ok(program) } pub fn translate_tx_commit( _tx_name: Option, mut program: ProgramBuilder, ) -> Result { program.extend(&ProgramBuilderOpts { num_cursors: 0, approx_num_insns: 0, approx_num_labels: 0, }); program.emit_insn(Insn::AutoCommit { auto_commit: true, rollback: false, }); Ok(program) }