File tree Expand file tree Collapse file tree 2 files changed +28
-0
lines changed Expand file tree Collapse file tree 2 files changed +28
-0
lines changed Original file line number Diff line number Diff line change @@ -159,6 +159,13 @@ def none_as_none(self, enabled=True):
159159 return self
160160
161161
162+ class SubqueryLoader (ModelLoader ):
163+ def __init__ (self , model , subquery , ** extras ):
164+ super ().__init__ (model , ** extras )
165+ self .columns = [subquery .corresponding_column (column ) for column
166+ in model ]
167+
168+
162169class AliasLoader (ModelLoader ):
163170 def __init__ (self , alias , * columns , ** extras ):
164171 super ().__init__ (alias , * columns , ** extras )
Original file line number Diff line number Diff line change @@ -204,6 +204,27 @@ async def test_loader_with_aggregation(user):
204204 assert user_count is None
205205
206206
207+ async def test_adjanency_list_on_nested_load (user ):
208+ subquery = db .select (User ).alias ()
209+ base_query = subquery .outerjoin (Team ).select ()
210+
211+ query = base_query .execution_options (loader = (User .load ('id' )))
212+ u = await query .gino .first ()
213+ # Because here arrives team_id, not user_id, and replaces it
214+ assert u .id is None
215+
216+ from gino .loader import SubqueryLoader
217+ query = base_query .execution_options (loader = SubqueryLoader (User , subquery , team = Team ))
218+ u = await query .gino .first ()
219+ assert u .id == user .id
220+ assert u .realname == user .realname
221+ assert u .nickname == user .nickname
222+
223+ assert isinstance (u .team , Team )
224+ assert u .team .id == user .team .id
225+ assert u .team .name == user .team .name
226+
227+
207228async def test_adjacency_list_query_builder (user ):
208229 group = Team .alias ()
209230 u = await User .load (team = Team .load (parent = group .on (
You can’t perform that action at this time.
0 commit comments