Skip to content

Commit c869b98

Browse files
authored
Impl Into<QueryStatement> for SelectStatement, etc (#905)
* Remove `into_sub_query_statement` from trait * Add back into_sub_query_statement
1 parent 37e51b4 commit c869b98

File tree

10 files changed

+78
-69
lines changed

10 files changed

+78
-69
lines changed

src/expr.rs

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -459,10 +459,7 @@ pub trait ExprTrait: Sized {
459459
/// );
460460
/// ```
461461
fn in_subquery(self, sel: SelectStatement) -> Expr {
462-
self.binary(
463-
BinOper::In,
464-
Expr::SubQuery(None, Box::new(sel.into_sub_query_statement())),
465-
)
462+
self.binary(BinOper::In, Expr::SubQuery(None, Box::new(sel.into())))
466463
}
467464

468465
/// Express a `IN` sub expression.
@@ -1170,10 +1167,7 @@ pub trait ExprTrait: Sized {
11701167
/// );
11711168
/// ```
11721169
fn not_in_subquery(self, sel: SelectStatement) -> Expr {
1173-
self.binary(
1174-
BinOper::NotIn,
1175-
Expr::SubQuery(None, Box::new(sel.into_sub_query_statement())),
1176-
)
1170+
self.binary(BinOper::NotIn, Expr::SubQuery(None, Box::new(sel.into())))
11771171
}
11781172

11791173
/// Express a `NOT LIKE` expression.
@@ -2121,10 +2115,7 @@ impl Expr {
21212115
/// );
21222116
/// ```
21232117
pub fn exists(sel: SelectStatement) -> Self {
2124-
Self::SubQuery(
2125-
Some(SubQueryOper::Exists),
2126-
Box::new(sel.into_sub_query_statement()),
2127-
)
2118+
Self::SubQuery(Some(SubQueryOper::Exists), Box::new(sel.into()))
21282119
}
21292120

21302121
/// Express a `ANY` sub-query expression.
@@ -2152,10 +2143,7 @@ impl Expr {
21522143
/// );
21532144
/// ```
21542145
pub fn any(sel: SelectStatement) -> Self {
2155-
Self::SubQuery(
2156-
Some(SubQueryOper::Any),
2157-
Box::new(sel.into_sub_query_statement()),
2158-
)
2146+
Self::SubQuery(Some(SubQueryOper::Any), Box::new(sel.into()))
21592147
}
21602148

21612149
/// Express a `SOME` sub-query expression.
@@ -2183,18 +2171,12 @@ impl Expr {
21832171
/// );
21842172
/// ```
21852173
pub fn some(sel: SelectStatement) -> Self {
2186-
Self::SubQuery(
2187-
Some(SubQueryOper::Some),
2188-
Box::new(sel.into_sub_query_statement()),
2189-
)
2174+
Self::SubQuery(Some(SubQueryOper::Some), Box::new(sel.into()))
21902175
}
21912176

21922177
/// Express a `ALL` sub-query expression.
21932178
pub fn all(sel: SelectStatement) -> Self {
2194-
Self::SubQuery(
2195-
Some(SubQueryOper::All),
2196-
Box::new(sel.into_sub_query_statement()),
2197-
)
2179+
Self::SubQuery(Some(SubQueryOper::All), Box::new(sel.into()))
21982180
}
21992181

22002182
/// Adds new `CASE WHEN` to existing case statement.

src/query/delete.rs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
2-
Expr, QueryStatementBuilder, QueryStatementWriter, ReturningClause, SubQueryStatement,
3-
WithClause, WithQuery,
2+
Expr, QueryStatement, QueryStatementBuilder, QueryStatementWriter, ReturningClause,
3+
SubQueryStatement, WithClause, WithQuery,
44
backend::QueryBuilder,
55
prepare::*,
66
query::{OrderedStatement, condition::*},
@@ -281,10 +281,6 @@ impl QueryStatementBuilder for DeleteStatement {
281281
query_builder.prepare_delete_statement(self, sql);
282282
}
283283

284-
pub fn into_sub_query_statement(self) -> SubQueryStatement {
285-
SubQueryStatement::DeleteStatement(self)
286-
}
287-
288284
pub fn build_any(&self, query_builder: &dyn QueryBuilder) -> (String, Values);
289285
pub fn build_collect_any(
290286
&self,
@@ -293,6 +289,18 @@ impl QueryStatementBuilder for DeleteStatement {
293289
) -> String;
294290
}
295291

292+
impl From<DeleteStatement> for QueryStatement {
293+
fn from(s: DeleteStatement) -> Self {
294+
Self::Delete(s)
295+
}
296+
}
297+
298+
impl From<DeleteStatement> for SubQueryStatement {
299+
fn from(s: DeleteStatement) -> Self {
300+
Self::DeleteStatement(s)
301+
}
302+
}
303+
296304
#[inherent]
297305
impl QueryStatementWriter for DeleteStatement {
298306
pub fn build_collect_into<T: QueryBuilder>(&self, query_builder: T, sql: &mut dyn SqlWriter) {

src/query/insert.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::{
2-
Expr, OnConflict, QueryStatementBuilder, QueryStatementWriter, ReturningClause,
2+
Expr, OnConflict, QueryStatement, QueryStatementBuilder, QueryStatementWriter, ReturningClause,
33
SelectStatement, SubQueryStatement, Values, WithClause, WithQuery, backend::QueryBuilder,
44
error::*, prepare::*, types::*,
55
};
@@ -638,10 +638,6 @@ impl QueryStatementBuilder for InsertStatement {
638638
query_builder.prepare_insert_statement(self, sql);
639639
}
640640

641-
pub fn into_sub_query_statement(self) -> SubQueryStatement {
642-
SubQueryStatement::InsertStatement(self)
643-
}
644-
645641
pub fn build_any(&self, query_builder: &dyn QueryBuilder) -> (String, Values);
646642
pub fn build_collect_any(
647643
&self,
@@ -650,6 +646,18 @@ impl QueryStatementBuilder for InsertStatement {
650646
) -> String;
651647
}
652648

649+
impl From<InsertStatement> for QueryStatement {
650+
fn from(s: InsertStatement) -> Self {
651+
Self::Insert(s)
652+
}
653+
}
654+
655+
impl From<InsertStatement> for SubQueryStatement {
656+
fn from(s: InsertStatement) -> Self {
657+
Self::InsertStatement(s)
658+
}
659+
}
660+
653661
#[inherent]
654662
impl QueryStatementWriter for InsertStatement {
655663
pub fn build_collect_into<T: QueryBuilder>(&self, query_builder: T, sql: &mut dyn SqlWriter) {

src/query/select.rs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
2-
FunctionCall, QueryStatementBuilder, QueryStatementWriter, SubQueryStatement, WindowStatement,
3-
WithClause, WithQuery,
2+
FunctionCall, QueryStatement, QueryStatementBuilder, QueryStatementWriter, SubQueryStatement,
3+
WindowStatement, WithClause, WithQuery,
44
backend::QueryBuilder,
55
expr::*,
66
prepare::*,
@@ -2465,10 +2465,6 @@ impl QueryStatementBuilder for SelectStatement {
24652465
query_builder.prepare_select_statement(self, sql);
24662466
}
24672467

2468-
pub fn into_sub_query_statement(self) -> SubQueryStatement {
2469-
SubQueryStatement::SelectStatement(self)
2470-
}
2471-
24722468
pub fn build_any(&self, query_builder: &dyn QueryBuilder) -> (String, Values);
24732469
pub fn build_collect_any(
24742470
&self,
@@ -2477,6 +2473,18 @@ impl QueryStatementBuilder for SelectStatement {
24772473
) -> String;
24782474
}
24792475

2476+
impl From<SelectStatement> for QueryStatement {
2477+
fn from(s: SelectStatement) -> Self {
2478+
Self::Select(s)
2479+
}
2480+
}
2481+
2482+
impl From<SelectStatement> for SubQueryStatement {
2483+
fn from(s: SelectStatement) -> Self {
2484+
Self::SelectStatement(s)
2485+
}
2486+
}
2487+
24802488
#[inherent]
24812489
impl QueryStatementWriter for SelectStatement {
24822490
pub fn build_collect_into<T: QueryBuilder>(&self, query_builder: T, sql: &mut dyn SqlWriter) {

src/query/traits.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::fmt::Debug;
22

33
use crate::{SqlWriter, SqlWriterValues, SubQueryStatement, backend::QueryBuilder, value::Values};
44

5-
pub trait QueryStatementBuilder: Debug {
5+
pub trait QueryStatementBuilder: Debug + Into<SubQueryStatement> {
66
/// Build corresponding SQL statement for certain database backend and collect query parameters into a vector
77
fn build_any(&self, query_builder: &dyn QueryBuilder) -> (String, Values) {
88
let (placeholder, numbered) = query_builder.placeholder();
@@ -24,7 +24,9 @@ pub trait QueryStatementBuilder: Debug {
2424
/// Build corresponding SQL statement into the SqlWriter for certain database backend and collect query parameters
2525
fn build_collect_any_into(&self, query_builder: &dyn QueryBuilder, sql: &mut dyn SqlWriter);
2626

27-
fn into_sub_query_statement(self) -> SubQueryStatement;
27+
fn into_sub_query_statement(self) -> SubQueryStatement {
28+
self.into()
29+
}
2830
}
2931

3032
pub trait QueryStatementWriter: QueryStatementBuilder {

src/query/update.rs

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use inherent::inherent;
22

33
use crate::{
4-
QueryStatementBuilder, QueryStatementWriter, ReturningClause, SubQueryStatement, WithClause,
5-
WithQuery,
4+
QueryStatement, QueryStatementBuilder, QueryStatementWriter, ReturningClause,
5+
SubQueryStatement, WithClause, WithQuery,
66
backend::QueryBuilder,
77
expr::*,
88
prepare::*,
@@ -417,10 +417,6 @@ impl QueryStatementBuilder for UpdateStatement {
417417
query_builder.prepare_update_statement(self, sql);
418418
}
419419

420-
pub fn into_sub_query_statement(self) -> SubQueryStatement {
421-
SubQueryStatement::UpdateStatement(self)
422-
}
423-
424420
pub fn build_any(&self, query_builder: &dyn QueryBuilder) -> (String, Values);
425421
pub fn build_collect_any(
426422
&self,
@@ -429,6 +425,18 @@ impl QueryStatementBuilder for UpdateStatement {
429425
) -> String;
430426
}
431427

428+
impl From<UpdateStatement> for QueryStatement {
429+
fn from(s: UpdateStatement) -> Self {
430+
Self::Update(s)
431+
}
432+
}
433+
434+
impl From<UpdateStatement> for SubQueryStatement {
435+
fn from(s: UpdateStatement) -> Self {
436+
Self::UpdateStatement(s)
437+
}
438+
}
439+
432440
#[inherent]
433441
impl QueryStatementWriter for UpdateStatement {
434442
pub fn build_collect_into<T: QueryBuilder>(&self, query_builder: T, sql: &mut dyn SqlWriter) {

src/query/with.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,9 @@ impl CommonTableExpression {
101101
/// columns.
102102
pub fn query<Q>(&mut self, query: Q) -> &mut Self
103103
where
104-
Q: QueryStatementBuilder,
104+
Q: Into<SubQueryStatement>,
105105
{
106-
self.query = Some(Box::new(query.into_sub_query_statement()));
106+
self.query = Some(Box::new(query.into()));
107107
self
108108
}
109109

@@ -126,7 +126,7 @@ impl CommonTableExpression {
126126
_ => {}
127127
}
128128
}
129-
cte.query = Some(Box::new(select.into_sub_query_statement()));
129+
cte.query = Some(Box::new(select.into()));
130130
cte
131131
}
132132

@@ -480,7 +480,7 @@ impl WithClause {
480480
/// execute the argument query with this WITH clause.
481481
pub fn query<T>(self, query: T) -> WithQuery
482482
where
483-
T: QueryStatementBuilder + 'static,
483+
T: Into<SubQueryStatement> + 'static,
484484
{
485485
WithQuery::new().with_clause(self).query(query).to_owned()
486486
}
@@ -578,9 +578,9 @@ impl WithQuery {
578578
/// Set the query that you execute with the [WithClause].
579579
pub fn query<T>(&mut self, query: T) -> &mut Self
580580
where
581-
T: QueryStatementBuilder,
581+
T: Into<SubQueryStatement>,
582582
{
583-
self.query = Some(Box::new(query.into_sub_query_statement()));
583+
self.query = Some(Box::new(query.into()));
584584
self
585585
}
586586
}
@@ -589,9 +589,11 @@ impl QueryStatementBuilder for WithQuery {
589589
fn build_collect_any_into(&self, query_builder: &dyn QueryBuilder, sql: &mut dyn SqlWriter) {
590590
query_builder.prepare_with_query(self, sql);
591591
}
592+
}
592593

593-
fn into_sub_query_statement(self) -> SubQueryStatement {
594-
SubQueryStatement::WithStatement(self)
594+
impl From<WithQuery> for SubQueryStatement {
595+
fn from(s: WithQuery) -> Self {
596+
Self::WithStatement(s)
595597
}
596598
}
597599

tests/mysql/query.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1546,10 +1546,7 @@ fn sub_query_with_fn() {
15461546
.to_owned();
15471547

15481548
let select = Query::select()
1549-
.expr(Func::cust(ArrayFunc).arg(Expr::SubQuery(
1550-
None,
1551-
Box::new(sub_select.into_sub_query_statement()),
1552-
)))
1549+
.expr(Func::cust(ArrayFunc).arg(Expr::SubQuery(None, Box::new(sub_select.into()))))
15531550
.to_owned();
15541551

15551552
assert_eq!(

tests/postgres/query.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1989,10 +1989,7 @@ fn sub_query_with_fn() {
19891989
.to_owned();
19901990

19911991
let select = Query::select()
1992-
.expr(Func::cust(ArrayFunc).arg(Expr::SubQuery(
1993-
None,
1994-
Box::new(sub_select.into_sub_query_statement()),
1995-
)))
1992+
.expr(Func::cust(ArrayFunc).arg(Expr::SubQuery(None, Box::new(sub_select.into()))))
19961993
.to_owned();
19971994

19981995
assert_eq!(

tests/sqlite/query.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1782,10 +1782,7 @@ fn sub_query_with_fn() {
17821782
.to_owned();
17831783

17841784
let select = Query::select()
1785-
.expr(Func::cust(ArrayFunc).arg(Expr::SubQuery(
1786-
None,
1787-
Box::new(sub_select.into_sub_query_statement()),
1788-
)))
1785+
.expr(Func::cust(ArrayFunc).arg(Expr::SubQuery(None, Box::new(sub_select.into()))))
17891786
.to_owned();
17901787

17911788
assert_eq!(

0 commit comments

Comments
 (0)