Skip to content
This repository was archived by the owner on Mar 21, 2025. It is now read-only.

Commit a64653f

Browse files
authored
Merge pull request #179 from Brendonovich/merge-and-fields
merge and operator fields
2 parents 3683fb7 + be94400 commit a64653f

File tree

11 files changed

+45
-31
lines changed

11 files changed

+45
-31
lines changed

cli/src/generator/models/mod.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -357,11 +357,13 @@ pub fn generate(args: &GenerateArgs, module_path: TokenStream) -> Vec<TokenStrea
357357
},
358358
false => quote! {
359359
#pcr::SerializedWhereValue::Object(
360-
value
361-
.into_iter()
362-
.map(Into::<#pcr::SerializedWhere>::into)
363-
.map(Into::into)
364-
.collect()
360+
::prisma_client_rust::merge_fields(
361+
value
362+
.into_iter()
363+
.map(Into::<#pcr::SerializedWhere>::into)
364+
.map(Into::into)
365+
.collect()
366+
)
365367
)
366368
},
367369
};

src/lib.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,12 +110,14 @@ macro_rules! or {
110110
};
111111
}
112112

113+
pub type ObjectFields = Vec<(String, PrismaValue)>;
114+
113115
/// Creates a PrismaValue::Object from a list of key-value pairs.
114116
/// If a key has multiple values that are PrismaValue::Objects, they will be merged.
115-
pub fn merged_object(elements: Vec<(String, PrismaValue)>) -> PrismaValue {
117+
pub fn merge_fields(fields: ObjectFields) -> ObjectFields {
116118
let mut merged = HashMap::new();
117119

118-
for el in elements {
120+
for el in fields {
119121
match (merged.get_mut(&el.0), el.1) {
120122
(Some(PrismaValue::Object(existing)), PrismaValue::Object(incoming)) => {
121123
existing.extend(incoming);
@@ -129,5 +131,5 @@ pub fn merged_object(elements: Vec<(String, PrismaValue)>) -> PrismaValue {
129131
}
130132
}
131133

132-
PrismaValue::Object(merged.into_iter().collect())
134+
merged.into_iter().collect()
133135
}

src/operator.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,3 @@ pub fn and<T: From<Operator<T>>>(params: Vec<T>) -> T {
1515
pub fn or<T: From<Operator<T>>>(params: Vec<T>) -> T {
1616
Operator::Or(params).into()
1717
}
18-

src/queries/count.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use prisma_models::PrismaValue;
22
use query_core::{Operation, Selection};
33
use serde::Deserialize;
44

5-
use crate::{merged_object, BatchQuery, SerializedWhere};
5+
use crate::{merge_fields, BatchQuery, SerializedWhere};
66

77
use super::{QueryContext, QueryInfo};
88

@@ -62,13 +62,13 @@ where
6262
if self.where_params.len() > 0 {
6363
selection.push_argument(
6464
"where",
65-
merged_object(
65+
PrismaValue::Object(merge_fields(
6666
self.where_params
6767
.into_iter()
6868
.map(Into::<SerializedWhere>::into)
6969
.map(|s| (s.field, s.value.into()))
7070
.collect(),
71-
),
71+
)),
7272
);
7373
}
7474

src/queries/create.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use serde::de::DeserializeOwned;
66

77
use crate::{
88
include::{Include, IncludeType},
9-
merged_object,
9+
merge_fields,
1010
select::{Select, SelectType},
1111
BatchQuery,
1212
};
@@ -54,7 +54,9 @@ where
5454

5555
selection.push_argument(
5656
"data",
57-
merged_object(set_params.into_iter().map(Into::into).collect()),
57+
PrismaValue::Object(merge_fields(
58+
set_params.into_iter().map(Into::into).collect(),
59+
)),
5860
);
5961

6062
selection

src/queries/create_many.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use prisma_models::PrismaValue;
22
use query_core::{Operation, Selection, SelectionBuilder};
33

4-
use crate::{merged_object, BatchQuery, BatchResult};
4+
use crate::{merge_fields, BatchQuery, BatchResult};
55

66
use super::{QueryContext, QueryInfo};
77

@@ -48,7 +48,11 @@ where
4848
PrismaValue::List(
4949
set_params
5050
.into_iter()
51-
.map(|fields| merged_object(fields.into_iter().map(Into::into).collect()))
51+
.map(|fields| {
52+
PrismaValue::Object(merge_fields(
53+
fields.into_iter().map(Into::into).collect(),
54+
))
55+
})
5256
.collect(),
5357
),
5458
);

src/queries/delete_many.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
use prisma_models::PrismaValue;
12
use query_core::{Operation, Selection};
23

3-
use crate::{merged_object, BatchQuery, BatchResult};
4+
use crate::{merge_fields, BatchQuery, BatchResult};
45

56
use super::{QueryContext, QueryInfo, SerializedWhere};
67

@@ -33,13 +34,13 @@ where
3334
if self.where_params.len() > 0 {
3435
selection.push_argument(
3536
"where",
36-
merged_object(
37+
PrismaValue::Object(merge_fields(
3738
self.where_params
3839
.into_iter()
3940
.map(Into::<SerializedWhere>::into)
4041
.map(|s| (s.field, s.value.into()))
4142
.collect(),
42-
),
43+
)),
4344
);
4445
}
4546

src/queries/find_first.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use serde::de::DeserializeOwned;
66

77
use crate::{
88
include::{Include, IncludeType},
9-
merged_object,
9+
merge_fields,
1010
select::{Select, SelectType},
1111
BatchQuery,
1212
};
@@ -94,13 +94,13 @@ where
9494
if where_params.len() > 0 {
9595
selection.push_argument(
9696
"where",
97-
merged_object(
97+
PrismaValue::Object(merge_fields(
9898
where_params
9999
.into_iter()
100100
.map(Into::<SerializedWhere>::into)
101101
.map(|s| (s.field, s.value.into()))
102102
.collect(),
103-
),
103+
)),
104104
);
105105
}
106106

src/queries/find_many.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use serde::de::DeserializeOwned;
66

77
use crate::{
88
include::{Include, IncludeType},
9-
merged_object,
9+
merge_fields,
1010
select::{Select, SelectType},
1111
BatchQuery,
1212
};
@@ -97,13 +97,13 @@ where
9797
if where_params.len() > 0 {
9898
selection.push_argument(
9999
"where",
100-
merged_object(
100+
PrismaValue::Object(merge_fields(
101101
where_params
102102
.into_iter()
103103
.map(Into::<SerializedWhere>::into)
104104
.map(|s| (s.field, s.value.into()))
105105
.collect(),
106-
),
106+
)),
107107
);
108108
}
109109

src/queries/update.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use serde::de::DeserializeOwned;
66

77
use crate::{
88
include::{Include, IncludeType},
9-
merged_object,
9+
merge_fields,
1010
select::{Select, SelectType},
1111
BatchQuery,
1212
};
@@ -69,7 +69,9 @@ where
6969

7070
selection.push_argument(
7171
"data",
72-
merged_object(set_params.into_iter().map(Into::into).collect()),
72+
PrismaValue::Object(merge_fields(
73+
set_params.into_iter().map(Into::into).collect(),
74+
)),
7375
);
7476

7577
selection

src/queries/update_many.rs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use prisma_models::PrismaValue;
22
use query_core::{Operation, Selection};
33

4-
use crate::{merged_object, BatchQuery, BatchResult};
4+
use crate::{merge_fields, BatchQuery, BatchResult};
55

66
use super::{QueryContext, QueryInfo, SerializedWhere};
77

@@ -41,19 +41,21 @@ where
4141

4242
selection.push_argument(
4343
"data",
44-
merged_object(self.set_params.into_iter().map(Into::into).collect()),
44+
PrismaValue::Object(merge_fields(
45+
self.set_params.into_iter().map(Into::into).collect(),
46+
)),
4547
);
4648

4749
if self.where_params.len() > 0 {
4850
selection.push_argument(
4951
"where",
50-
merged_object(
52+
PrismaValue::Object(merge_fields(
5153
self.where_params
5254
.into_iter()
5355
.map(Into::<SerializedWhere>::into)
5456
.map(|s| (s.field, s.value.into()))
5557
.collect(),
56-
),
58+
)),
5759
);
5860
}
5961

0 commit comments

Comments
 (0)