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 @@ -145,6 +145,13 @@ def none_as_none(self, enabled=True):
145
145
return self
146
146
147
147
148
+ class SubqueryLoader (ModelLoader ):
149
+ def __init__ (self , model , subquery , ** extras ):
150
+ super ().__init__ (model , ** extras )
151
+ self .columns = [subquery .corresponding_column (column ) for column
152
+ in model ]
153
+
154
+
148
155
class AliasLoader (ModelLoader ):
149
156
def __init__ (self , alias , * column_names , ** extras ):
150
157
super ().__init__ (alias , * column_names , ** extras )
Original file line number Diff line number Diff line change @@ -144,6 +144,27 @@ def loader(row, context):
144
144
assert u .team .parent .name == user .team .parent .name
145
145
146
146
147
+ async def test_adjanency_list_on_nested_load (user ):
148
+ subquery = db .select (User ).alias ()
149
+ base_query = subquery .outerjoin (Team ).select ()
150
+
151
+ query = base_query .execution_options (loader = (User .load ('id' )))
152
+ u = await query .gino .first ()
153
+ # Because here arrives team_id, not user_id, and replaces it
154
+ assert u .id is None
155
+
156
+ from gino .loader import SubqueryLoader
157
+ query = base_query .execution_options (loader = SubqueryLoader (User , subquery , team = Team ))
158
+ u = await query .gino .first ()
159
+ assert u .id == user .id
160
+ assert u .realname == user .realname
161
+ assert u .nickname == user .nickname
162
+
163
+ assert isinstance (u .team , Team )
164
+ assert u .team .id == user .team .id
165
+ assert u .team .name == user .team .name
166
+
167
+
147
168
async def test_adjacency_list_query_builder (user ):
148
169
group = Team .alias ()
149
170
u = await User .load (team = Team .load (parent = group .on (
You can’t perform that action at this time.
0 commit comments