uqa_sql/schema/indexes/
unique.rs1use crate::{
9 ast::{CreateIndex, TableHierarchy},
10 SQLError,
11};
12pub fn validate_unique_index_method(statement: &CreateIndex) -> Result<(), SQLError> {
13 if !matches!(statement.access_method.as_str(), "" | "btree") {
14 return Err(SQLError::Routine {
15 sqlstate: "0A000".into(),
16 message: format!(
17 "access method \"{}\" does not support unique indexes",
18 statement.access_method
19 ),
20 });
21 }
22 Ok(())
23}
24pub fn validate_unique_partition_columns(
25 statement: &CreateIndex,
26 hierarchy: &TableHierarchy,
27) -> Result<(), SQLError> {
28 if let Some(partition) = &hierarchy.partition_spec {
29 for key in &partition.keys {
30 if !matches!(key, crate::ast::Expr::Column(column) if statement.columns.iter().any(|key| key.column() == Some(column.as_str())))
31 {
32 return Err(SQLError::Routine {
33 sqlstate: "0A000".into(),
34 message: "unique constraint on partitioned table must include all partitioning columns".into(),
35 });
36 }
37 }
38 }
39 Ok(())
40}