This is an automated email from the ASF dual-hosted git repository. github-bot pushed a commit to branch gh-readonly-queue/main/pr-2028-e3fbfd91b29706fcc7b4847f13ba71946a68e1f0 in repository https://gitbox.apache.org/repos/asf/datafusion-sqlparser-rs.git
commit 70215614747d17ed47234fc0bab85fecfcda1c9a Author: Luca Cappelletti <[email protected]> AuthorDate: Tue Sep 16 20:21:55 2025 +0200 Implemented the `From` method for all clear variants in Statement (#2028) --- src/ast/helpers/stmt_create_table.rs | 5 +- src/ast/mod.rs | 207 +++++++++++++++++++++++++++++++++-- src/dialect/mssql.rs | 10 +- 3 files changed, 208 insertions(+), 14 deletions(-) diff --git a/src/ast/helpers/stmt_create_table.rs b/src/ast/helpers/stmt_create_table.rs index fc000269..fe950c90 100644 --- a/src/ast/helpers/stmt_create_table.rs +++ b/src/ast/helpers/stmt_create_table.rs @@ -432,7 +432,7 @@ impl CreateTableBuilder { } pub fn build(self) -> Statement { - Statement::CreateTable(CreateTable { + CreateTable { or_replace: self.or_replace, temporary: self.temporary, external: self.external, @@ -484,7 +484,8 @@ impl CreateTableBuilder { refresh_mode: self.refresh_mode, initialize: self.initialize, require_user: self.require_user, - }) + } + .into() } } diff --git a/src/ast/mod.rs b/src/ast/mod.rs index 6efe1f74..8df636f8 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -21,6 +21,7 @@ use alloc::{ boxed::Box, format, string::{String, ToString}, + vec, vec::Vec, }; use helpers::{ @@ -3029,14 +3030,6 @@ impl Display for Set { } } -/// Convert a `Set` into a `Statement`. -/// Convenience function, instead of writing `Statement::Set(Set::Set...{...})` -impl From<Set> for Statement { - fn from(set: Set) -> Self { - Statement::Set(set) - } -} - /// A representation of a `WHEN` arm with all the identifiers catched and the statements to execute /// for the arm. /// @@ -10707,6 +10700,204 @@ impl fmt::Display for VacuumStatement { } } +impl From<Set> for Statement { + fn from(s: Set) -> Self { + Self::Set(s) + } +} + +impl From<Query> for Statement { + fn from(q: Query) -> Self { + Box::new(q).into() + } +} + +impl From<Box<Query>> for Statement { + fn from(q: Box<Query>) -> Self { + Self::Query(q) + } +} + +impl From<Insert> for Statement { + fn from(i: Insert) -> Self { + Self::Insert(i) + } +} + +impl From<CaseStatement> for Statement { + fn from(c: CaseStatement) -> Self { + Self::Case(c) + } +} + +impl From<IfStatement> for Statement { + fn from(i: IfStatement) -> Self { + Self::If(i) + } +} + +impl From<WhileStatement> for Statement { + fn from(w: WhileStatement) -> Self { + Self::While(w) + } +} + +impl From<RaiseStatement> for Statement { + fn from(r: RaiseStatement) -> Self { + Self::Raise(r) + } +} + +impl From<Function> for Statement { + fn from(f: Function) -> Self { + Self::Call(f) + } +} + +impl From<OpenStatement> for Statement { + fn from(o: OpenStatement) -> Self { + Self::Open(o) + } +} + +impl From<Delete> for Statement { + fn from(d: Delete) -> Self { + Self::Delete(d) + } +} + +impl From<CreateTable> for Statement { + fn from(c: CreateTable) -> Self { + Self::CreateTable(c) + } +} + +impl From<CreateIndex> for Statement { + fn from(c: CreateIndex) -> Self { + Self::CreateIndex(c) + } +} + +impl From<CreateServerStatement> for Statement { + fn from(c: CreateServerStatement) -> Self { + Self::CreateServer(c) + } +} + +impl From<CreateConnector> for Statement { + fn from(c: CreateConnector) -> Self { + Self::CreateConnector(c) + } +} + +impl From<AlterSchema> for Statement { + fn from(a: AlterSchema) -> Self { + Self::AlterSchema(a) + } +} + +impl From<AlterType> for Statement { + fn from(a: AlterType) -> Self { + Self::AlterType(a) + } +} + +impl From<DropDomain> for Statement { + fn from(d: DropDomain) -> Self { + Self::DropDomain(d) + } +} + +impl From<ShowCharset> for Statement { + fn from(s: ShowCharset) -> Self { + Self::ShowCharset(s) + } +} + +impl From<ShowObjects> for Statement { + fn from(s: ShowObjects) -> Self { + Self::ShowObjects(s) + } +} + +impl From<Use> for Statement { + fn from(u: Use) -> Self { + Self::Use(u) + } +} + +impl From<CreateFunction> for Statement { + fn from(c: CreateFunction) -> Self { + Self::CreateFunction(c) + } +} + +impl From<CreateTrigger> for Statement { + fn from(c: CreateTrigger) -> Self { + Self::CreateTrigger(c) + } +} + +impl From<DropTrigger> for Statement { + fn from(d: DropTrigger) -> Self { + Self::DropTrigger(d) + } +} + +impl From<DenyStatement> for Statement { + fn from(d: DenyStatement) -> Self { + Self::Deny(d) + } +} + +impl From<CreateDomain> for Statement { + fn from(c: CreateDomain) -> Self { + Self::CreateDomain(c) + } +} + +impl From<RenameTable> for Statement { + fn from(r: RenameTable) -> Self { + vec![r].into() + } +} + +impl From<Vec<RenameTable>> for Statement { + fn from(r: Vec<RenameTable>) -> Self { + Self::RenameTable(r) + } +} + +impl From<PrintStatement> for Statement { + fn from(p: PrintStatement) -> Self { + Self::Print(p) + } +} + +impl From<ReturnStatement> for Statement { + fn from(r: ReturnStatement) -> Self { + Self::Return(r) + } +} + +impl From<ExportData> for Statement { + fn from(e: ExportData) -> Self { + Self::ExportData(e) + } +} + +impl From<CreateUser> for Statement { + fn from(c: CreateUser) -> Self { + Self::CreateUser(c) + } +} + +impl From<VacuumStatement> for Statement { + fn from(v: VacuumStatement) -> Self { + Self::Vacuum(v) + } +} + #[cfg(test)] mod tests { use crate::tokenizer::Location; diff --git a/src/dialect/mssql.rs b/src/dialect/mssql.rs index 15946d5d..4fcc0e4b 100644 --- a/src/dialect/mssql.rs +++ b/src/dialect/mssql.rs @@ -226,12 +226,13 @@ impl MsSqlDialect { parser.prev_token(); } - Ok(Statement::If(IfStatement { + Ok(IfStatement { if_block, else_block, elseif_blocks: Vec::new(), end_token: None, - })) + } + .into()) } /// Parse `CREATE TRIGGER` for [MsSql] @@ -251,7 +252,7 @@ impl MsSqlDialect { parser.expect_keyword_is(Keyword::AS)?; let statements = Some(parser.parse_conditional_statements(&[Keyword::END])?); - Ok(Statement::CreateTrigger(CreateTrigger { + Ok(CreateTrigger { or_alter, or_replace: false, is_constraint: false, @@ -269,7 +270,8 @@ impl MsSqlDialect { statements_as: true, statements, characteristics: None, - })) + } + .into()) } /// Parse a sequence of statements, optionally separated by semicolon. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
