use crate::ast::{InsertStatement, Statement};
use super::{Parser, ParserError};
impl<'a> Parser<'a> {
pub(crate) fn parse_insert_statement(&mut self) -> Result<Statement, ParserError> {
self.try_consume_keyword("INSERT")?;
self.try_consume_keyword("INTO")?;
let table = self.try_consume_symbol()?;
self.try_consume_open_paren()?;
let columns = self.make_parse_list(Self::try_consume_symbol)?;
self.try_consume_close_paren()?;
self.try_consume_keyword("VALUES")?;
self.try_consume_open_paren()?;
let exprs = self.parse_expr_list()?;
self.try_consume_close_paren()?;
self.try_consume_semi()?;
Ok(Statement::Insert(InsertStatement {
table: table.to_string(),
values: columns
.into_iter()
.map(|s| s.to_string())
.zip(exprs.into_iter())
.collect(),
}))
}
}