Skip to content

Commit

Permalink
Merge 'Make query_pragma use enum instead of &str' from Glauber Costa
Browse files Browse the repository at this point in the history
Fixes #823

Closes #834
  • Loading branch information
penberg committed Jan 30, 2025
2 parents 3a4cb34 + 7a97231 commit d558f6a
Showing 1 changed file with 12 additions and 15 deletions.
27 changes: 12 additions & 15 deletions core/translate/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -537,14 +537,19 @@ fn translate_pragma(
});
let start_offset = program.offset();
let mut write = false;

let pragma = match PragmaName::from_str(&name.name.0) {
Ok(pragma) => pragma,
Err(()) => bail_parse_error!("Not a valid pragma name"),
};

match body {
None => {
let pragma_name = &name.name.0;
query_pragma(pragma_name, database_header.clone(), program)?;
query_pragma(pragma, database_header.clone(), program)?;
}
Some(ast::PragmaBody::Equals(value)) => {
write = true;
update_pragma(&name.name.0, value, database_header.clone(), pager, program)?;
update_pragma(pragma, value, database_header.clone(), pager, program)?;
}
Some(ast::PragmaBody::Call(_)) => {
todo!()
Expand All @@ -565,16 +570,12 @@ fn translate_pragma(
}

fn update_pragma(
name: &str,
pragma: PragmaName,
value: ast::Expr,
header: Rc<RefCell<DatabaseHeader>>,
pager: Rc<Pager>,
program: &mut ProgramBuilder,
) -> Result<()> {
let pragma = match PragmaName::from_str(name) {
Ok(pragma) => pragma,
Err(()) => bail_parse_error!("Not a valid pragma name"),
};
match pragma {
PragmaName::CacheSize => {
let cache_size = match value {
Expand All @@ -593,25 +594,21 @@ fn update_pragma(
Ok(())
}
PragmaName::JournalMode => {
query_pragma("journal_mode", header, program)?;
query_pragma(PragmaName::JournalMode, header, program)?;
Ok(())
}
PragmaName::WalCheckpoint => {
query_pragma("wal_checkpoint", header, program)?;
query_pragma(PragmaName::WalCheckpoint, header, program)?;
Ok(())
}
}
}

fn query_pragma(
name: &str,
pragma: PragmaName,
database_header: Rc<RefCell<DatabaseHeader>>,
program: &mut ProgramBuilder,
) -> Result<()> {
let pragma = match PragmaName::from_str(name) {
Ok(pragma) => pragma,
Err(()) => bail_parse_error!("Not a valid pragma name"),
};
let register = program.alloc_register();
match pragma {
PragmaName::CacheSize => {
Expand Down

0 comments on commit d558f6a

Please sign in to comment.