Skip to content

Commit 0c06cb0

Browse files
committed
update and to Option
1 parent 7ccce5a commit 0c06cb0

File tree

3 files changed

+41
-22
lines changed

3 files changed

+41
-22
lines changed

src/ast/mod.rs

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,8 +1252,8 @@ pub enum Statement {
12521252
if_exists: bool,
12531253
/// One or more function to drop
12541254
func_desc: Vec<DropFunctionDesc>,
1255-
cascade: bool,
1256-
restrict: bool,
1255+
/// `CASCADE` or `RESTRICT`
1256+
option: Option<DropFunctionOption>,
12571257
},
12581258
/// DECLARE - Declaring Cursor Variables
12591259
///
@@ -2274,16 +2274,19 @@ impl fmt::Display for Statement {
22742274
Statement::DropFunction {
22752275
if_exists,
22762276
func_desc,
2277-
cascade,
2278-
restrict,
2279-
} => write!(
2280-
f,
2281-
"DROP FUNCTION{} {}{}{}",
2282-
if *if_exists { " IF EXISTS" } else { "" },
2283-
display_comma_separated(func_desc),
2284-
if *cascade { " CASCADE" } else { "" },
2285-
if *restrict { " RESTRICT" } else { "" }
2286-
),
2277+
option,
2278+
} => {
2279+
write!(
2280+
f,
2281+
"DROP FUNCTION{} {}",
2282+
if *if_exists { " IF EXISTS" } else { "" },
2283+
display_comma_separated(func_desc),
2284+
)?;
2285+
if let Some(op) = option {
2286+
write!(f, " {}", op)?;
2287+
}
2288+
Ok(())
2289+
}
22872290
Statement::Discard { object_type } => {
22882291
write!(f, "DISCARD {object_type}", object_type = object_type)?;
22892292
Ok(())
@@ -3712,6 +3715,23 @@ impl fmt::Display for ContextModifier {
37123715
}
37133716
}
37143717

3718+
/// Function describe in DROP FUNCTION.
3719+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
3720+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
3721+
pub enum DropFunctionOption {
3722+
Restrict,
3723+
Cascade,
3724+
}
3725+
3726+
impl fmt::Display for DropFunctionOption {
3727+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
3728+
match self {
3729+
DropFunctionOption::Restrict => write!(f, "RESTRICT "),
3730+
DropFunctionOption::Cascade => write!(f, "CASCADE "),
3731+
}
3732+
}
3733+
}
3734+
37153735
/// Function describe in DROP FUNCTION.
37163736
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
37173737
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]

src/parser.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2788,13 +2788,15 @@ impl<'a> Parser<'a> {
27882788
fn parse_drop_function(&mut self) -> Result<Statement, ParserError> {
27892789
let if_exists = self.parse_keywords(&[Keyword::IF, Keyword::EXISTS]);
27902790
let func_desc = self.parse_comma_separated(Parser::parse_drop_function_desc)?;
2791-
let cascade = self.parse_keyword(Keyword::CASCADE);
2792-
let restrict = self.parse_keyword(Keyword::RESTRICT);
2791+
let option = match self.parse_one_of_keywords(&[Keyword::CASCADE, Keyword::RESTRICT]) {
2792+
Some(Keyword::CASCADE) => Some(DropFunctionOption::Cascade),
2793+
Some(Keyword::RESTRICT) => Some(DropFunctionOption::Restrict),
2794+
_ => None,
2795+
};
27932796
Ok(Statement::DropFunction {
27942797
if_exists,
27952798
func_desc,
2796-
cascade,
2797-
restrict,
2799+
option,
27982800
})
27992801
}
28002802

tests/sqlparser_postgres.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2308,8 +2308,7 @@ fn parse_drop_function() {
23082308
}]),
23092309
args: None
23102310
}],
2311-
cascade: false,
2312-
restrict: false
2311+
option: None
23132312
}
23142313
);
23152314

@@ -2333,8 +2332,7 @@ fn parse_drop_function() {
23332332
}
23342333
]),
23352334
}],
2336-
cascade: false,
2337-
restrict: false
2335+
option: None
23382336
}
23392337
);
23402338

@@ -2381,8 +2379,7 @@ fn parse_drop_function() {
23812379
]),
23822380
}
23832381
],
2384-
cascade: false,
2385-
restrict: false
2382+
option: None
23862383
}
23872384
);
23882385
}

0 commit comments

Comments
 (0)