Skip to content

Commit 6df536a

Browse files
committed
Use Option
1 parent 55c0741 commit 6df536a

File tree

4 files changed

+21
-31
lines changed

4 files changed

+21
-31
lines changed

src/ast/mod.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,13 +39,13 @@ pub use self::ddl::{
3939
};
4040
pub use self::operator::{BinaryOperator, UnaryOperator};
4141
pub use self::query::{
42-
Cte, CteAsMaterialized, Distinct, ExceptSelectItem, ExcludeSelectItem, Fetch, ForClause, ForJson, ForXml,
43-
GroupByExpr, IdentWithAlias, Join, JoinConstraint, JoinOperator, JsonTableColumn,
44-
JsonTableColumnErrorHandling, LateralView, LockClause, LockType, NamedWindowDefinition,
45-
NonBlock, Offset, OffsetRows, OrderByExpr, Query, RenameSelectItem, ReplaceSelectElement,
46-
ReplaceSelectItem, Select, SelectInto, SelectItem, SetExpr, SetOperator, SetQuantifier, Table,
47-
TableAlias, TableFactor, TableVersion, TableWithJoins, Top, TopQuantity, ValueTableMode,
48-
Values, WildcardAdditionalOptions, With,
42+
Cte, CteAsMaterialized, Distinct, ExceptSelectItem, ExcludeSelectItem, Fetch, ForClause,
43+
ForJson, ForXml, GroupByExpr, IdentWithAlias, Join, JoinConstraint, JoinOperator,
44+
JsonTableColumn, JsonTableColumnErrorHandling, LateralView, LockClause, LockType,
45+
NamedWindowDefinition, NonBlock, Offset, OffsetRows, OrderByExpr, Query, RenameSelectItem,
46+
ReplaceSelectElement, ReplaceSelectItem, Select, SelectInto, SelectItem, SetExpr, SetOperator,
47+
SetQuantifier, Table, TableAlias, TableFactor, TableVersion, TableWithJoins, Top, TopQuantity,
48+
ValueTableMode, Values, WildcardAdditionalOptions, With,
4949
};
5050
pub use self::value::{
5151
escape_quoted_string, DateTimeField, DollarQuotedString, TrimWhereField, Value,

src/ast/query.rs

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -387,20 +387,15 @@ impl fmt::Display for With {
387387
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
388388
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
389389
pub enum CteAsMaterialized {
390-
/// The WITH statement does not specify MATERIALIZED behavior
391-
Default,
392-
/// The WITH statement specifies AS MATERIALIZED behavior
390+
/// The `WITH` statement specifies `AS MATERIALIZED` behavior
393391
Materialized,
394-
/// The WITH statement specifies AS NOT MATERIALIZED behavior
392+
/// The `WITH` statement specifies `AS NOT MATERIALIZED` behavior
395393
NotMaterialized,
396394
}
397395

398396
impl fmt::Display for CteAsMaterialized {
399397
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
400398
match *self {
401-
CteAsMaterialized::Default => {
402-
write!(f, "")?;
403-
}
404399
CteAsMaterialized::Materialized => {
405400
write!(f, "MATERIALIZED")?;
406401
}
@@ -423,20 +418,15 @@ pub struct Cte {
423418
pub alias: TableAlias,
424419
pub query: Box<Query>,
425420
pub from: Option<Ident>,
426-
pub materialized: CteAsMaterialized,
421+
pub materialized: Option<CteAsMaterialized>,
427422
}
428423

429424
impl fmt::Display for Cte {
430425
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
431-
if matches!(self.materialized, CteAsMaterialized::Default) {
432-
write!(f, "{} AS ({})", self.alias, self.query)?;
433-
} else {
434-
write!(
435-
f,
436-
"{} AS {} ({})",
437-
self.alias, self.materialized, self.query
438-
)?;
439-
}
426+
match self.materialized.as_ref() {
427+
None => write!(f, "{} AS ({})", self.alias, self.query)?,
428+
Some(materialized) => write!(f, "{} AS {materialized} ({})", self.alias, self.query)?,
429+
};
440430
if let Some(ref fr) = self.from {
441431
write!(f, " FROM {fr}")?;
442432
}

src/parser/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6719,12 +6719,12 @@ impl<'a> Parser<'a> {
67196719
let name = self.parse_identifier(false)?;
67206720

67216721
let mut cte = if self.parse_keyword(Keyword::AS) {
6722-
let mut is_materialized = CteAsMaterialized::Default;
6722+
let mut is_materialized = None;
67236723
if dialect_of!(self is PostgreSqlDialect) {
67246724
if self.parse_keyword(Keyword::MATERIALIZED) {
6725-
is_materialized = CteAsMaterialized::Materialized;
6725+
is_materialized = Some(CteAsMaterialized::Materialized);
67266726
} else if self.parse_keywords(&[Keyword::NOT, Keyword::MATERIALIZED]) {
6727-
is_materialized = CteAsMaterialized::NotMaterialized;
6727+
is_materialized = Some(CteAsMaterialized::NotMaterialized);
67286728
}
67296729
}
67306730
self.expect_token(&Token::LParen)?;
@@ -6743,12 +6743,12 @@ impl<'a> Parser<'a> {
67436743
} else {
67446744
let columns = self.parse_parenthesized_column_list(Optional, false)?;
67456745
self.expect_keyword(Keyword::AS)?;
6746-
let mut is_materialized = CteAsMaterialized::Default;
6746+
let mut is_materialized = None;
67476747
if dialect_of!(self is PostgreSqlDialect) {
67486748
if self.parse_keyword(Keyword::MATERIALIZED) {
6749-
is_materialized = CteAsMaterialized::Materialized;
6749+
is_materialized = Some(CteAsMaterialized::Materialized);
67506750
} else if self.parse_keywords(&[Keyword::NOT, Keyword::MATERIALIZED]) {
6751-
is_materialized = CteAsMaterialized::NotMaterialized;
6751+
is_materialized = Some(CteAsMaterialized::NotMaterialized);
67526752
}
67536753
}
67546754
self.expect_token(&Token::LParen)?;

tests/sqlparser_common.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5589,7 +5589,7 @@ fn parse_recursive_cte() {
55895589
},
55905590
query: Box::new(cte_query),
55915591
from: None,
5592-
materialized: CteAsMaterialized::Default,
5592+
materialized: None,
55935593
};
55945594
assert_eq!(with.cte_tables.first().unwrap(), &expected);
55955595
}

0 commit comments

Comments
 (0)