@@ -99,7 +99,7 @@ def order_query(model: DeclarativeMeta, query: Query, order: Optional[List[Dict[
9999
100100def make_object_resolver (model : DeclarativeMeta ) -> Callable :
101101 def resolver (
102- _root : DeclarativeMeta ,
102+ _root : None ,
103103 info : Any ,
104104 where : Optional [Dict [str , Any ]] = None ,
105105 order : Optional [List [Dict [str , Any ]]] = None ,
@@ -124,7 +124,7 @@ def resolver(
124124
125125
126126def make_pk_resolver (model : DeclarativeMeta ) -> Callable :
127- def resolver (_root : DeclarativeMeta , info : Any , ** kwargs : Dict [str , Any ]) -> DeclarativeMeta :
127+ def resolver (_root : None , info : Any , ** kwargs : Dict [str , Any ]) -> DeclarativeMeta :
128128 session = info .context ["session" ]
129129 return session .query (model ).get (kwargs )
130130
@@ -155,7 +155,7 @@ def session_commit(session: Session) -> None:
155155
156156def make_insert_resolver (model : DeclarativeMeta ) -> Callable :
157157 def resolver (
158- _root : DeclarativeMeta , info : Any , objects : List [Dict [str , Any ]], on_conflict : Optional [Dict [str , Any ]] = None
158+ _root : None , info : Any , objects : List [Dict [str , Any ]], on_conflict : Optional [Dict [str , Any ]] = None
159159 ) -> Dict [str , Union [int , List [DeclarativeMeta ]]]:
160160 session = info .context ["session" ]
161161 models = []
@@ -173,7 +173,7 @@ def resolver(
173173
174174def make_insert_one_resolver (model : DeclarativeMeta ) -> Callable :
175175 def resolver (
176- _root : DeclarativeMeta , info : Any , object : Dict [str , Any ], on_conflict : Optional [Dict [str , Any ]] = None
176+ _root : None , info : Any , object : Dict [str , Any ], on_conflict : Optional [Dict [str , Any ]] = None
177177 ) -> DeclarativeMeta :
178178 session = info .context ["session" ]
179179
@@ -186,7 +186,7 @@ def resolver(
186186
187187def make_delete_resolver (model : DeclarativeMeta ) -> Callable :
188188 def resolver (
189- _root : DeclarativeMeta , info : Any , where : Optional [Dict [str , Any ]] = None
189+ _root : None , info : Any , where : Optional [Dict [str , Any ]] = None
190190 ) -> Dict [str , Union [int , List [DeclarativeMeta ]]]:
191191 session = info .context ["session" ]
192192 query = session .query (model )
@@ -202,7 +202,7 @@ def resolver(
202202
203203
204204def make_delete_by_pk_resolver (model : DeclarativeMeta ) -> Callable :
205- def resolver (_root : DeclarativeMeta , info : Any , ** kwargs : Dict [str , Any ]) -> List [DeclarativeMeta ]:
205+ def resolver (_root : None , info : Any , ** kwargs : Dict [str , Any ]) -> List [DeclarativeMeta ]:
206206 session = info .context ["session" ]
207207
208208 row = session .query (model ).get (kwargs )
@@ -212,3 +212,56 @@ def resolver(_root: DeclarativeMeta, info: Any, **kwargs: Dict[str, Any]) -> Lis
212212 return row
213213
214214 return resolver
215+
216+
217+ def update_query (
218+ query : Query , model : DeclarativeMeta , _set : Optional [Dict [str , Any ]], _inc : Optional [Dict [str , Any ]],
219+ ) -> int :
220+ affected = 0
221+ if _inc :
222+ to_increment = {}
223+ for column_name , increment in _inc .items ():
224+ to_increment [column_name ] = getattr (model , column_name ) + increment
225+
226+ affected += query .update (to_increment )
227+
228+ if _set :
229+ affected += query .update (_set )
230+
231+ return affected
232+
233+
234+ def make_update_resolver (model : DeclarativeMeta ) -> Callable :
235+ def resolver (
236+ _root : None , info : Any , where : Dict [str , Any ], _set : Optional [Dict [str , Any ]], _inc : Optional [Dict [str , Any ]],
237+ ) -> Dict [str , Union [int , List [DeclarativeMeta ]]]:
238+ session = info .context ["session" ]
239+ query = session .query (model )
240+ query = filter_query (model , query , where )
241+ affected = update_query (query , model , _set , _inc )
242+
243+ return {
244+ "affected_rows" : affected ,
245+ "returning" : query .all (),
246+ }
247+
248+ return resolver
249+
250+
251+ def make_update_by_pk_resolver (model : DeclarativeMeta ) -> Callable :
252+ def resolver (
253+ _root : None ,
254+ info : Any ,
255+ pk_columns : Dict [str , Any ],
256+ _set : Optional [Dict [str , Any ]],
257+ _inc : Optional [Dict [str , Any ]],
258+ ) -> Optional [DeclarativeMeta ]:
259+ session = info .context ["session" ]
260+ query = session .query (model ).filter_by (** pk_columns )
261+
262+ if update_query (query , model , _set , _inc ):
263+ return query .one ()
264+
265+ return None
266+
267+ return resolver
0 commit comments