vibesql_executor/
domain_ddl.rs1use vibesql_ast::*;
4use vibesql_catalog::{DomainConstraintDef, DomainDefinition};
5use vibesql_storage::Database;
6
7use crate::errors::ExecutorError;
8
9pub struct DomainExecutor;
11
12impl DomainExecutor {
13 pub fn execute_create_domain(
15 stmt: &CreateDomainStmt,
16 database: &mut Database,
17 ) -> Result<String, ExecutorError> {
18 let constraints = stmt
20 .constraints
21 .iter()
22 .map(|c| DomainConstraintDef { name: c.name.clone(), check: c.check.clone() })
23 .collect();
24
25 let domain = DomainDefinition::new(
26 stmt.domain_name.clone(),
27 stmt.data_type.clone(),
28 stmt.default.clone(),
29 constraints,
30 );
31
32 database
33 .catalog
34 .create_domain(domain)
35 .map_err(|e| ExecutorError::StorageError(format!("Catalog error: {:?}", e)))?;
36
37 Ok(format!("Domain '{}' created", stmt.domain_name))
38 }
39
40 pub fn execute_drop_domain(
42 stmt: &DropDomainStmt,
43 database: &mut Database,
44 ) -> Result<String, ExecutorError> {
45 database
46 .catalog
47 .drop_domain(&stmt.domain_name, stmt.cascade)
48 .map_err(|e| ExecutorError::StorageError(format!("Catalog error: {:?}", e)))?;
49
50 Ok(format!("Domain '{}' dropped", stmt.domain_name))
51 }
52}