use super::{MetaTracker, ParserInner, Result};
use crate::{
ast::{Query, Select},
parser::Error,
scanner::{Keyword, Token, TokenType},
};
mod joins;
mod limit;
mod locks;
mod query;
impl<'s, M> ParserInner<'s, M>
where
M: MetaTracker<'s>,
{
pub(super) fn parse_select(&mut self) -> Result<Select<'s, M::NodeId>> {
let query = self.parse_query()?;
let for_update = self.parse_for_update()?;
Ok(Select { query, for_update })
}
pub(super) fn can_parse_query(&mut self) -> Result<bool> {
Ok(matches!(
self.peek_token()?,
Some(Token {
ttype: TokenType::Keyword(Keyword::SELECT | Keyword::WITH),
..
})
))
}
pub(super) fn parse_query(&mut self) -> Result<Query<'s, M::NodeId>> {
Ok(Query {
with: self.parse_query_with()?,
body: self.parse_query_body()?,
})
}
}