spacetimedb_sql_parser/ast/
sub.rs

1use crate::parser::{errors::SqlUnsupported, SqlParseResult};
2
3use super::{Project, SqlExpr, SqlFrom};
4
5/// A SELECT statement in the SQL subscription language
6pub struct SqlSelect {
7    pub project: Project,
8    pub from: SqlFrom,
9    pub filter: Option<SqlExpr>,
10}
11
12impl SqlSelect {
13    pub fn qualify_vars(self) -> Self {
14        match &self.from {
15            SqlFrom::Expr(_, alias) => Self {
16                project: self.project.qualify_vars(alias.clone()),
17                filter: self.filter.map(|expr| expr.qualify_vars(alias.clone())),
18                from: self.from,
19            },
20            SqlFrom::Join(..) => self,
21        }
22    }
23
24    pub fn find_unqualified_vars(self) -> SqlParseResult<Self> {
25        if self.from.has_unqualified_vars() {
26            return Err(SqlUnsupported::UnqualifiedNames.into());
27        }
28        if self.project.has_unqualified_vars() {
29            return Err(SqlUnsupported::UnqualifiedNames.into());
30        }
31        Ok(self)
32    }
33}