Skip to content

Commit fefcfd7

Browse files
watford-epayman-sigma
authored andcommitted
feat: Add RESET to the base dialect apache#2078 (apache#2079)
1 parent 108a69b commit fefcfd7

File tree

4 files changed

+85
-1
lines changed

4 files changed

+85
-1
lines changed

src/ast/mod.rs

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2821,7 +2821,7 @@ impl fmt::Display for Declare {
28212821
}
28222822

28232823
/// Sql options of a `CREATE TABLE` statement.
2824-
#[derive(Default, Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
2824+
#[derive(Default, Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash, Default)]
28252825
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
28262826
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
28272827
pub enum CreateTableOptions {
@@ -4292,6 +4292,14 @@ pub enum Statement {
42924292
/// ```
42934293
/// [Redshift](https://docs.aws.amazon.com/redshift/latest/dg/r_VACUUM_command.html)
42944294
Vacuum(VacuumStatement),
4295+
/// Restore the value of a run-time parameter to the default value.
4296+
///
4297+
/// ```sql
4298+
/// RESET configuration_parameter;
4299+
/// RESET ALL;
4300+
/// ```
4301+
/// [PostgreSQL](https://www.postgresql.org/docs/current/sql-reset.html)
4302+
Reset(ResetStatement),
42954303
}
42964304

42974305
impl From<Analyze> for Statement {
@@ -5786,6 +5794,7 @@ impl fmt::Display for Statement {
57865794
Statement::AlterSchema(s) => write!(f, "{s}"),
57875795
Statement::Vacuum(s) => write!(f, "{s}"),
57885796
Statement::AlterUser(s) => write!(f, "{s}"),
5797+
Statement::Reset(s) => write!(f, "{s}"),
57895798
}
57905799
}
57915800
}
@@ -10548,6 +10557,38 @@ impl fmt::Display for VacuumStatement {
1054810557
}
1054910558
}
1055010559

10560+
/// Variants of the RESET statement
10561+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
10562+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
10563+
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
10564+
pub enum Reset {
10565+
/// Resets all session parameters to their default values.
10566+
ALL,
10567+
10568+
/// Resets a specific session parameter to its default value.
10569+
ConfigurationParameter(ObjectName),
10570+
}
10571+
10572+
/// Resets a session parameter to its default value.
10573+
/// ```sql
10574+
/// RESET { ALL | <configuration_parameter> }
10575+
/// ```
10576+
#[derive(Debug, Clone, PartialEq, PartialOrd, Eq, Ord, Hash)]
10577+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
10578+
#[cfg_attr(feature = "visitor", derive(Visit, VisitMut))]
10579+
pub struct ResetStatement {
10580+
pub reset: Reset,
10581+
}
10582+
10583+
impl fmt::Display for ResetStatement {
10584+
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
10585+
match &self.reset {
10586+
Reset::ALL => write!(f, "RESET ALL"),
10587+
Reset::ConfigurationParameter(param) => write!(f, "RESET {}", param),
10588+
}
10589+
}
10590+
}
10591+
1055110592
impl From<Set> for Statement {
1055210593
fn from(s: Set) -> Self {
1055310594
Self::Set(s)
@@ -10788,6 +10829,12 @@ impl From<VacuumStatement> for Statement {
1078810829
}
1078910830
}
1079010831

10832+
impl From<ResetStatement> for Statement {
10833+
fn from(r: ResetStatement) -> Self {
10834+
Self::Reset(r)
10835+
}
10836+
}
10837+
1079110838
#[cfg(test)]
1079210839
mod tests {
1079310840
use crate::tokenizer::Location;

src/ast/spans.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,7 @@ impl Spanned for Statement {
475475
Statement::AlterSchema(s) => s.span(),
476476
Statement::Vacuum(..) => Span::empty(),
477477
Statement::AlterUser(..) => Span::empty(),
478+
Statement::Reset(..) => Span::empty(),
478479
}
479480
}
480481
}

src/parser/mod.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -656,6 +656,7 @@ impl<'a> Parser<'a> {
656656
self.prev_token();
657657
self.parse_vacuum()
658658
}
659+
Keyword::RESET => self.parse_reset(),
659660
_ => self.expected("an SQL statement", next_token),
660661
},
661662
Token::LParen => {
@@ -17759,6 +17760,18 @@ impl<'a> Parser<'a> {
1775917760
_ => self.expected("expected option value", self.peek_token()),
1776017761
}
1776117762
}
17763+
17764+
/// Parses a RESET statement
17765+
fn parse_reset(&mut self) -> Result<Statement, ParserError> {
17766+
if self.parse_keyword(Keyword::ALL) {
17767+
return Ok(Statement::Reset(ResetStatement { reset: Reset::ALL }));
17768+
}
17769+
17770+
let obj = self.parse_object_name(false)?;
17771+
Ok(Statement::Reset(ResetStatement {
17772+
reset: Reset::ConfigurationParameter(obj),
17773+
}))
17774+
}
1776217775
}
1776317776

1776417777
fn maybe_prefixed_expr(expr: Expr, prefix: Option<Ident>) -> Expr {

tests/sqlparser_common.rs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17658,3 +17658,26 @@ fn parse_generic_unary_ops() {
1765817658
);
1765917659
}
1766017660
}
17661+
17662+
#[test]
17663+
fn parse_reset_statement() {
17664+
match verified_stmt("RESET some_parameter") {
17665+
Statement::Reset(ResetStatement {
17666+
reset: Reset::ConfigurationParameter(o),
17667+
}) => assert_eq!(o, ObjectName::from(vec!["some_parameter".into()])),
17668+
_ => unreachable!(),
17669+
}
17670+
match verified_stmt("RESET some_extension.some_parameter") {
17671+
Statement::Reset(ResetStatement {
17672+
reset: Reset::ConfigurationParameter(o),
17673+
}) => assert_eq!(
17674+
o,
17675+
ObjectName::from(vec!["some_extension".into(), "some_parameter".into()])
17676+
),
17677+
_ => unreachable!(),
17678+
}
17679+
match verified_stmt("RESET ALL") {
17680+
Statement::Reset(ResetStatement { reset }) => assert_eq!(reset, Reset::ALL),
17681+
_ => unreachable!(),
17682+
}
17683+
}

0 commit comments

Comments
 (0)