matdb 0.1.0

An experimental embedded SQL-like DBMS
Documentation
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(),
        }))
    }
}