sqlparser_mysql/base/
tablespace_type.rs

1use nom::branch::alt;
2use nom::bytes::complete::tag_no_case;
3use nom::character::complete::multispace0;
4use nom::combinator::map;
5use nom::sequence::tuple;
6use nom::IResult;
7use std::fmt::{write, Display, Formatter};
8
9use base::ParseSQLError;
10
11/// STORAGE {DISK | MEMORY}
12#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
13pub enum TablespaceType {
14    StorageDisk,
15    StorageMemory,
16}
17
18impl Display for TablespaceType {
19    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
20        match *self {
21            TablespaceType::StorageDisk => write!(f, "STORAGE DISK"),
22            TablespaceType::StorageMemory => write!(f, "STORAGE MEMORY"),
23        }
24    }
25}
26
27impl TablespaceType {
28    pub fn parse(i: &str) -> IResult<&str, TablespaceType, ParseSQLError<&str>> {
29        map(
30            tuple((
31                tag_no_case("STORAGE"),
32                multispace0,
33                alt((
34                    map(tag_no_case("DISK"), |_| TablespaceType::StorageDisk),
35                    map(tag_no_case("MEMORY"), |_| TablespaceType::StorageMemory),
36                )),
37            )),
38            |(_, _, tablespace_type)| tablespace_type,
39        )(i)
40    }
41}
42
43#[cfg(test)]
44mod tests {
45    use base::algorithm_type::AlgorithmType;
46    use base::TablespaceType;
47
48    #[test]
49    fn parse_algorithm_type() {
50        let str1 = "STORAGE disk";
51        let res1 = TablespaceType::parse(str1);
52        assert!(res1.is_ok());
53        assert_eq!(res1.unwrap().1, TablespaceType::StorageDisk);
54
55        let str2 = "storage   memory";
56        let res2 = TablespaceType::parse(str2);
57        assert!(res2.is_ok());
58        assert_eq!(res2.unwrap().1, TablespaceType::StorageMemory);
59    }
60}