Skip to content

Commit 1ee019e

Browse files
LucaCappelletti94ayman-sigma
authored andcommitted
Implemented the From method for all clear variants in Statement (apache#2028)
1 parent 6c3a67b commit 1ee019e

3 files changed

Lines changed: 208 additions & 14 deletions

File tree

src/ast/helpers/stmt_create_table.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ impl CreateTableBuilder {
432432
}
433433

434434
pub fn build(self) -> Statement {
435-
Statement::CreateTable(CreateTable {
435+
CreateTable {
436436
or_replace: self.or_replace,
437437
temporary: self.temporary,
438438
external: self.external,
@@ -484,7 +484,8 @@ impl CreateTableBuilder {
484484
refresh_mode: self.refresh_mode,
485485
initialize: self.initialize,
486486
require_user: self.require_user,
487-
})
487+
}
488+
.into()
488489
}
489490
}
490491

src/ast/mod.rs

Lines changed: 199 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ use alloc::{
2121
boxed::Box,
2222
format,
2323
string::{String, ToString},
24+
vec,
2425
vec::Vec,
2526
};
2627
use helpers::{
@@ -3058,14 +3059,6 @@ impl Display for Set {
30583059
}
30593060
}
30603061

3061-
/// Convert a `Set` into a `Statement`.
3062-
/// Convenience function, instead of writing `Statement::Set(Set::Set...{...})`
3063-
impl From<Set> for Statement {
3064-
fn from(set: Set) -> Self {
3065-
Statement::Set(set)
3066-
}
3067-
}
3068-
30693062
/// A representation of a `WHEN` arm with all the identifiers catched and the statements to execute
30703063
/// for the arm.
30713064
///
@@ -10736,6 +10729,204 @@ impl fmt::Display for VacuumStatement {
1073610729
}
1073710730
}
1073810731

10732+
impl From<Set> for Statement {
10733+
fn from(s: Set) -> Self {
10734+
Self::Set(s)
10735+
}
10736+
}
10737+
10738+
impl From<Query> for Statement {
10739+
fn from(q: Query) -> Self {
10740+
Box::new(q).into()
10741+
}
10742+
}
10743+
10744+
impl From<Box<Query>> for Statement {
10745+
fn from(q: Box<Query>) -> Self {
10746+
Self::Query(q)
10747+
}
10748+
}
10749+
10750+
impl From<Insert> for Statement {
10751+
fn from(i: Insert) -> Self {
10752+
Self::Insert(i)
10753+
}
10754+
}
10755+
10756+
impl From<CaseStatement> for Statement {
10757+
fn from(c: CaseStatement) -> Self {
10758+
Self::Case(c)
10759+
}
10760+
}
10761+
10762+
impl From<IfStatement> for Statement {
10763+
fn from(i: IfStatement) -> Self {
10764+
Self::If(i)
10765+
}
10766+
}
10767+
10768+
impl From<WhileStatement> for Statement {
10769+
fn from(w: WhileStatement) -> Self {
10770+
Self::While(w)
10771+
}
10772+
}
10773+
10774+
impl From<RaiseStatement> for Statement {
10775+
fn from(r: RaiseStatement) -> Self {
10776+
Self::Raise(r)
10777+
}
10778+
}
10779+
10780+
impl From<Function> for Statement {
10781+
fn from(f: Function) -> Self {
10782+
Self::Call(f)
10783+
}
10784+
}
10785+
10786+
impl From<OpenStatement> for Statement {
10787+
fn from(o: OpenStatement) -> Self {
10788+
Self::Open(o)
10789+
}
10790+
}
10791+
10792+
impl From<Delete> for Statement {
10793+
fn from(d: Delete) -> Self {
10794+
Self::Delete(d)
10795+
}
10796+
}
10797+
10798+
impl From<CreateTable> for Statement {
10799+
fn from(c: CreateTable) -> Self {
10800+
Self::CreateTable(c)
10801+
}
10802+
}
10803+
10804+
impl From<CreateIndex> for Statement {
10805+
fn from(c: CreateIndex) -> Self {
10806+
Self::CreateIndex(c)
10807+
}
10808+
}
10809+
10810+
impl From<CreateServerStatement> for Statement {
10811+
fn from(c: CreateServerStatement) -> Self {
10812+
Self::CreateServer(c)
10813+
}
10814+
}
10815+
10816+
impl From<CreateConnector> for Statement {
10817+
fn from(c: CreateConnector) -> Self {
10818+
Self::CreateConnector(c)
10819+
}
10820+
}
10821+
10822+
impl From<AlterSchema> for Statement {
10823+
fn from(a: AlterSchema) -> Self {
10824+
Self::AlterSchema(a)
10825+
}
10826+
}
10827+
10828+
impl From<AlterType> for Statement {
10829+
fn from(a: AlterType) -> Self {
10830+
Self::AlterType(a)
10831+
}
10832+
}
10833+
10834+
impl From<DropDomain> for Statement {
10835+
fn from(d: DropDomain) -> Self {
10836+
Self::DropDomain(d)
10837+
}
10838+
}
10839+
10840+
impl From<ShowCharset> for Statement {
10841+
fn from(s: ShowCharset) -> Self {
10842+
Self::ShowCharset(s)
10843+
}
10844+
}
10845+
10846+
impl From<ShowObjects> for Statement {
10847+
fn from(s: ShowObjects) -> Self {
10848+
Self::ShowObjects(s)
10849+
}
10850+
}
10851+
10852+
impl From<Use> for Statement {
10853+
fn from(u: Use) -> Self {
10854+
Self::Use(u)
10855+
}
10856+
}
10857+
10858+
impl From<CreateFunction> for Statement {
10859+
fn from(c: CreateFunction) -> Self {
10860+
Self::CreateFunction(c)
10861+
}
10862+
}
10863+
10864+
impl From<CreateTrigger> for Statement {
10865+
fn from(c: CreateTrigger) -> Self {
10866+
Self::CreateTrigger(c)
10867+
}
10868+
}
10869+
10870+
impl From<DropTrigger> for Statement {
10871+
fn from(d: DropTrigger) -> Self {
10872+
Self::DropTrigger(d)
10873+
}
10874+
}
10875+
10876+
impl From<DenyStatement> for Statement {
10877+
fn from(d: DenyStatement) -> Self {
10878+
Self::Deny(d)
10879+
}
10880+
}
10881+
10882+
impl From<CreateDomain> for Statement {
10883+
fn from(c: CreateDomain) -> Self {
10884+
Self::CreateDomain(c)
10885+
}
10886+
}
10887+
10888+
impl From<RenameTable> for Statement {
10889+
fn from(r: RenameTable) -> Self {
10890+
vec![r].into()
10891+
}
10892+
}
10893+
10894+
impl From<Vec<RenameTable>> for Statement {
10895+
fn from(r: Vec<RenameTable>) -> Self {
10896+
Self::RenameTable(r)
10897+
}
10898+
}
10899+
10900+
impl From<PrintStatement> for Statement {
10901+
fn from(p: PrintStatement) -> Self {
10902+
Self::Print(p)
10903+
}
10904+
}
10905+
10906+
impl From<ReturnStatement> for Statement {
10907+
fn from(r: ReturnStatement) -> Self {
10908+
Self::Return(r)
10909+
}
10910+
}
10911+
10912+
impl From<ExportData> for Statement {
10913+
fn from(e: ExportData) -> Self {
10914+
Self::ExportData(e)
10915+
}
10916+
}
10917+
10918+
impl From<CreateUser> for Statement {
10919+
fn from(c: CreateUser) -> Self {
10920+
Self::CreateUser(c)
10921+
}
10922+
}
10923+
10924+
impl From<VacuumStatement> for Statement {
10925+
fn from(v: VacuumStatement) -> Self {
10926+
Self::Vacuum(v)
10927+
}
10928+
}
10929+
1073910930
#[cfg(test)]
1074010931
mod tests {
1074110932
use crate::tokenizer::Location;

src/dialect/mssql.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -226,12 +226,13 @@ impl MsSqlDialect {
226226
parser.prev_token();
227227
}
228228

229-
Ok(Statement::If(IfStatement {
229+
Ok(IfStatement {
230230
if_block,
231231
else_block,
232232
elseif_blocks: Vec::new(),
233233
end_token: None,
234-
}))
234+
}
235+
.into())
235236
}
236237

237238
/// Parse `CREATE TRIGGER` for [MsSql]
@@ -251,7 +252,7 @@ impl MsSqlDialect {
251252
parser.expect_keyword_is(Keyword::AS)?;
252253
let statements = Some(parser.parse_conditional_statements(&[Keyword::END])?);
253254

254-
Ok(Statement::CreateTrigger(CreateTrigger {
255+
Ok(CreateTrigger {
255256
or_alter,
256257
or_replace: false,
257258
is_constraint: false,
@@ -269,7 +270,8 @@ impl MsSqlDialect {
269270
statements_as: true,
270271
statements,
271272
characteristics: None,
272-
}))
273+
}
274+
.into())
273275
}
274276

275277
/// Parse a sequence of statements, optionally separated by semicolon.

0 commit comments

Comments
 (0)