Skip to content

Commit c86cf07

Browse files
committed
Tweaks
1 parent f31327b commit c86cf07

File tree

2 files changed

+21
-63
lines changed

2 files changed

+21
-63
lines changed

src/backend/query_builder.rs

Lines changed: 19 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use crate::backend::query_builder::InsertValueSource;
21
use crate::*;
32
use std::ops::Deref;
43

@@ -35,41 +34,32 @@ pub trait QueryBuilder: QuotedBuilder {
3534

3635
if let Some(source) = &insert.source {
3736
write!(sql, " ").unwrap();
38-
self.prepare_insert_value_source(source, sql, collector);
39-
}
40-
41-
self.prepare_returning(&insert.returning, sql, collector);
42-
}
43-
44-
fn prepare_insert_value_source(
45-
&self,
46-
source: &InsertValueSource,
47-
sql: &mut SqlWriter,
48-
collector: &mut dyn FnMut(Value),
49-
) {
50-
match source {
51-
InsertValueSource::Values(values) => {
52-
write!(sql, "VALUES ").unwrap();
53-
values.iter().fold(true, |first, row| {
54-
if !first {
55-
write!(sql, ", ").unwrap()
56-
}
57-
write!(sql, "(").unwrap();
58-
row.iter().fold(true, |first, col| {
37+
match source {
38+
InsertValueSource::Values(values) => {
39+
write!(sql, "VALUES ").unwrap();
40+
values.iter().fold(true, |first, row| {
5941
if !first {
6042
write!(sql, ", ").unwrap()
6143
}
62-
self.prepare_simple_expr(col, sql, collector);
44+
write!(sql, "(").unwrap();
45+
row.iter().fold(true, |first, col| {
46+
if !first {
47+
write!(sql, ", ").unwrap()
48+
}
49+
self.prepare_simple_expr(col, sql, collector);
50+
false
51+
});
52+
write!(sql, ")").unwrap();
6353
false
6454
});
65-
write!(sql, ")").unwrap();
66-
false
67-
});
68-
}
69-
InsertValueSource::Select(select_query) => {
70-
self.prepare_select_statement(select_query.deref(), sql, collector);
55+
}
56+
InsertValueSource::Select(select_query) => {
57+
self.prepare_select_statement(select_query.deref(), sql, collector);
58+
}
7159
}
7260
}
61+
62+
self.prepare_returning(&insert.returning, sql, collector);
7363
}
7464

7565
/// Translate [`SelectStatement`] into SQL statement.

src/query/insert.rs

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use crate::{
88
/// [`InsertValueSource`] is a node in the expression tree and can represent a raw value set
99
/// ('VALUES') or a select query.
1010
#[derive(Debug, Clone)]
11-
enum InsertValueSource {
11+
pub(crate) enum InsertValueSource {
1212
Values(Vec<Vec<SimpleExpr>>),
1313
Select(Box<SelectStatement>),
1414
}
@@ -190,39 +190,7 @@ impl InsertStatement {
190190
}
191191

192192
/// Specify the value source of the insert.
193-
///
194-
/// # Examples
195-
///
196-
/// ```
197-
/// use sea_query::{tests_cfg::*, *};
198-
///
199-
/// let query = Query::insert()
200-
/// .into_table(Glyph::Table)
201-
/// .columns(vec![Glyph::Aspect, Glyph::Image])
202-
/// .value_source(InsertValueSource::Select(Box::new(Query::select()
203-
/// .column(Glyph::Aspect)
204-
/// .column(Glyph::Image)
205-
/// .from(Glyph::Table)
206-
/// .and_where(Expr::col(Glyph::Image).like("0%"))
207-
/// .to_owned()))
208-
/// )
209-
/// .unwrap()
210-
/// .to_owned();
211-
///
212-
/// assert_eq!(
213-
/// query.to_string(MysqlQueryBuilder),
214-
/// r#"INSERT INTO `glyph` (`aspect`, `image`) SELECT `aspect`, `image` FROM `glyph` WHERE `image` LIKE '0%'"#
215-
/// );
216-
/// assert_eq!(
217-
/// query.to_string(PostgresQueryBuilder),
218-
/// r#"INSERT INTO "glyph" ("aspect", "image") SELECT "aspect", "image" FROM "glyph" WHERE "image" LIKE '0%'"#
219-
/// );
220-
/// assert_eq!(
221-
/// query.to_string(SqliteQueryBuilder),
222-
/// r#"INSERT INTO "glyph" ("aspect", "image") SELECT "aspect", "image" FROM "glyph" WHERE "image" LIKE '0%'"#
223-
/// );
224-
/// ```
225-
fn value_source<S>(&mut self, source: S) -> Result<&mut InsertStatement>
193+
fn value_source<S>(&mut self, source: S) -> Result<&mut Self>
226194
where
227195
S: Into<InsertValueSource>,
228196
{

0 commit comments

Comments
 (0)