use crate::ast::{Set, Statement, UpdateStatement};
use super::{rename_default_table, Parser, ParserError};
impl<'a> Parser<'a> {
fn parse_set(&mut self, table: &str) -> Result<Set, ParserError> {
let mut lhs = self.parse_column()?;
if lhs.0.is_empty() {
lhs.0 = table.to_string();
}
self.try_consume_eq()?;
Ok(Set {
lhs,
rhs: rename_default_table(&self.parse_expr()?, table),
})
}
pub(crate) fn parse_update_statement(&mut self) -> Result<Statement, ParserError> {
self.try_consume_keyword("UPDATE")?;
let table = self.try_consume_symbol()?;
self.try_consume_keyword("SET")?;
let set_list = self.make_parse_list(|s| s.parse_set(&table))?;
let cond = if let Ok(_) = self.try_consume_keyword("WHERE") {
Some(rename_default_table(&self.parse_expr()?, &table))
} else {
None
};
self.try_consume_semi()?;
Ok(Statement::Update(UpdateStatement {
table,
sets: set_list,
cond,
}))
}
}