sql_fun_sqlast/sem/
create_schema.rs1use sql_fun_core::IVec;
2
3use crate::{
4 sem::AstAndContextPair,
5 syn::{ListOpt, ScanToken},
6};
7
8use super::{AnalysisError, ParseContext, SemAst};
9
10#[derive(Debug, Clone)]
12pub struct CreateSchema {
13 name: String,
14 #[expect(dead_code)]
15 elements: Vec<SemAst>,
16}
17
18impl CreateSchema {
19 #[must_use]
21 pub fn name(&self) -> &str {
22 &self.name
23 }
24}
25
26pub fn analyze_create_schema<TParseContext>(
28 mut context: TParseContext,
29 syn: crate::syn::CreateSchemaStmt,
30 tokens: &IVec<ScanToken>,
31) -> Result<AstAndContextPair<TParseContext>, AnalysisError>
32where
33 TParseContext: ParseContext,
34{
35 let name = syn.get_schemaname();
36 let schema_name = Some(name.clone());
37 let Some(elts) = syn.get_schema_elts().as_inner() else {
38 AnalysisError::raise_unexpected_none("create_schema_stmt.schema_elts")?
39 };
40
41 let mut sems = Vec::new();
42 for elt in elts {
43 let AstAndContextPair(sem, new_context) =
44 super::analyze_node(context, &schema_name, elt, tokens)?;
45 context = new_context;
46 sems.push(sem);
47 }
48 let schema = CreateSchema {
49 name: name.clone(),
50 elements: sems,
51 };
52 let context = context.apply_create_schema(&schema)?;
53 Ok(AstAndContextPair::new(
54 SemAst::CreateSchema(schema),
55 context,
56 ))
57}