sqlparser_mysql/dds/
drop_logfile_group.rs1use core::fmt;
2use std::fmt::Formatter;
3use std::str;
4
5use nom::bytes::complete::tag_no_case;
6use nom::character::complete::multispace1;
7use nom::combinator::map;
8use nom::sequence::tuple;
9use nom::IResult;
10
11use base::error::ParseSQLError;
12use base::CommonParser;
13
14#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
16pub struct DropLogfileGroupStatement {
17 pub logfile_group: String,
18 pub engine_name: String,
19}
20
21impl DropLogfileGroupStatement {
22 pub fn parse(i: &str) -> IResult<&str, DropLogfileGroupStatement, ParseSQLError<&str>> {
23 let mut parser = tuple((
24 tag_no_case("DROP"),
25 multispace1,
26 tag_no_case("LOGFILE"),
27 multispace1,
28 tag_no_case("GROUP"),
29 multispace1,
30 map(CommonParser::sql_identifier, String::from),
31 multispace1,
32 |x| CommonParser::parse_string_value_with_key(x, "ENGINE".to_string()),
33 CommonParser::statement_terminator,
34 ));
35 let (remaining_input, (_, _, _, _, _, _, logfile_group, _, engine_name, _)) = parser(i)?;
36
37 Ok((
38 remaining_input,
39 DropLogfileGroupStatement {
40 logfile_group,
41 engine_name,
42 },
43 ))
44 }
45}
46
47impl fmt::Display for DropLogfileGroupStatement {
48 fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
49 write!(f, "DROP LOGFILE GROUP")?;
50 write!(f, " {}", self.logfile_group)?;
51 write!(f, " ENGINE = {}", self.engine_name)?;
52 Ok(())
53 }
54}
55
56#[cfg(test)]
57mod tests {
58 use dds::drop_logfile_group::DropLogfileGroupStatement;
59
60 #[test]
61 fn parse_drop_logfile_group_parser() {
62 let sqls = [
63 "DROP LOGFILE GROUP logfile_group ENGINE = demo;",
64 "DROP LOGFILE GROUP logfile_group ENGINE bar;",
65 ];
66 let exp_statements = [
67 DropLogfileGroupStatement {
68 logfile_group: "logfile_group".to_string(),
69 engine_name: "demo".to_string(),
70 },
71 DropLogfileGroupStatement {
72 logfile_group: "logfile_group".to_string(),
73 engine_name: "bar".to_string(),
74 },
75 ];
76
77 for i in 0..sqls.len() {
78 let res = DropLogfileGroupStatement::parse(sqls[i]);
79 assert!(res.is_ok());
80 assert_eq!(res.unwrap().1, exp_statements[i])
81 }
82 }
83}