cql3_parser/
create_index.rs1use crate::common::{FQName, Identifier};
2use std::fmt::{Display, Formatter};
3
4#[derive(PartialEq, Debug, Clone)]
6pub struct CreateIndex {
7 pub if_not_exists: bool,
9 pub name: Option<Identifier>,
11 pub table: FQName,
13 pub column: IndexColumnType,
15}
16
17impl Display for CreateIndex {
18 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
19 let name = if let Some(name) = &self.name {
20 format!("{} ", name)
21 } else {
22 "".to_string()
23 };
24 let exists = if self.if_not_exists {
25 "IF NOT EXISTS "
26 } else {
27 ""
28 };
29
30 write!(
31 f,
32 "CREATE INDEX {}{}ON {}( {} )",
33 exists, name, self.table, self.column
34 )
35 }
36}
37
38#[derive(PartialEq, Debug, Clone)]
40pub enum IndexColumnType {
41 Column(Identifier),
43 Keys(Identifier),
45 Entries(Identifier),
47 Full(Identifier),
49}
50
51impl Display for IndexColumnType {
52 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
53 match self {
54 IndexColumnType::Column(name) => write!(f, "{}", name),
55 IndexColumnType::Keys(name) => write!(f, "KEYS( {} )", name),
56 IndexColumnType::Entries(name) => write!(f, "ENTRIES( {} )", name),
57 IndexColumnType::Full(name) => write!(f, "FULL( {} )", name),
58 }
59 }
60}