Skip to content

Commit b8cde44

Browse files
committed
Omit returning clause when no default fields
1 parent 12586c9 commit b8cde44

File tree

1 file changed

+26
-12
lines changed

1 file changed

+26
-12
lines changed

ormx-macros/src/backend/postgres/insert.rs

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,30 @@
11
use itertools::Itertools;
2-
use proc_macro2::TokenStream;
2+
use proc_macro2::{Span, TokenStream};
33
use quote::quote;
44
use syn::Ident;
55

66
use crate::backend::postgres::{PgBackend, PgBindings};
77
use crate::table::{Table, TableField};
88

99
fn insert_sql(table: &Table<PgBackend>, insert_fields: &[&TableField<PgBackend>]) -> String {
10-
format!(
11-
"INSERT INTO {} ({}) VALUES ({}) RETURNING {}",
12-
table.table,
13-
insert_fields.iter().map(|field| field.column()).join(", "),
14-
PgBindings::default().take(insert_fields.len()).join(", "),
15-
table
16-
.default_fields()
17-
.map(TableField::fmt_for_select)
18-
.join(", ")
19-
)
10+
let columns = insert_fields.iter().map(|field| field.column()).join(", ");
11+
let fields = PgBindings::default().take(insert_fields.len()).join(", ");
12+
let returning_fields = table
13+
.default_fields()
14+
.map(TableField::fmt_for_select)
15+
.join(", ");
16+
17+
if returning_fields.is_empty() {
18+
format!(
19+
"INSERT INTO {} ({}) VALUES ({})",
20+
table.table, columns, fields
21+
)
22+
} else {
23+
format!(
24+
"INSERT INTO {} ({}) VALUES ({}) RETURNING {}",
25+
table.table, columns, fields, returning_fields
26+
)
27+
}
2028
}
2129

2230
pub fn impl_insert(table: &Table<PgBackend>) -> TokenStream {
@@ -52,6 +60,12 @@ pub fn impl_insert(table: &Table<PgBackend>) -> TokenStream {
5260
})
5361
.collect::<Vec<TokenStream>>();
5462

63+
let fetch_funtion = if default_fields.is_empty() {
64+
Ident::new("execute", Span::call_site())
65+
} else {
66+
Ident::new("fetch_one", Span::call_site())
67+
};
68+
5569
let box_future = crate::utils::box_future();
5670
quote! {
5771
impl ormx::Insert for #insert_ident {
@@ -63,7 +77,7 @@ pub fn impl_insert(table: &Table<PgBackend>) -> TokenStream {
6377
) -> #box_future<sqlx::Result<Self::Table>> {
6478
Box::pin(async move {
6579
let _generated = sqlx::query!(#insert_sql, #( #insert_field_exprs, )*)
66-
.fetch_one(db as &mut sqlx::PgConnection)
80+
.#fetch_funtion(db as &mut sqlx::PgConnection)
6781
.await?;
6882

6983
Ok(Self::Table {

0 commit comments

Comments
 (0)