46
46
from sqlalchemy .orm import aliased
47
47
from sqlalchemy .orm import contains_eager
48
48
from sqlalchemy .orm import joinedload
49
- from sqlalchemy .orm import joinedload_all
50
49
from sqlalchemy .orm import noload
51
50
from sqlalchemy .orm import undefer
52
51
from sqlalchemy .schema import Table
@@ -96,6 +95,15 @@ def _context_manager_from_context(context):
96
95
pass
97
96
98
97
98
+ def _joinedload_all (column ):
99
+ elements = column .split ('.' )
100
+ joined = joinedload (elements .pop (0 ))
101
+ for element in elements :
102
+ joined = joined .joinedload (element )
103
+
104
+ return joined
105
+
106
+
99
107
def configure (conf ):
100
108
main_context_manager .configure (** _get_db_conf (conf .database ))
101
109
api_context_manager .configure (** _get_db_conf (conf .api_database ))
@@ -841,7 +849,7 @@ def floating_ip_get(context, id):
841
849
try :
842
850
result = model_query (context , models .FloatingIp , project_only = True ).\
843
851
filter_by (id = id ).\
844
- options (joinedload_all ('fixed_ip.instance' )).\
852
+ options (_joinedload_all ('fixed_ip.instance' )).\
845
853
first ()
846
854
847
855
if not result :
@@ -1060,7 +1068,7 @@ def floating_ip_get_all_by_project(context, project_id):
1060
1068
return _floating_ip_get_all (context ).\
1061
1069
filter_by (project_id = project_id ).\
1062
1070
filter_by (auto_assigned = False ).\
1063
- options (joinedload_all ('fixed_ip.instance' )).\
1071
+ options (_joinedload_all ('fixed_ip.instance' )).\
1064
1072
all ()
1065
1073
1066
1074
@@ -1078,7 +1086,7 @@ def _floating_ip_get_by_address(context, address):
1078
1086
try :
1079
1087
result = model_query (context , models .FloatingIp ).\
1080
1088
filter_by (address = address ).\
1081
- options (joinedload_all ('fixed_ip.instance' )).\
1089
+ options (_joinedload_all ('fixed_ip.instance' )).\
1082
1090
first ()
1083
1091
1084
1092
if not result :
@@ -1393,7 +1401,7 @@ def _fixed_ip_get_by_address(context, address, columns_to_join=None):
1393
1401
try :
1394
1402
result = model_query (context , models .FixedIp )
1395
1403
for column in columns_to_join :
1396
- result = result .options (joinedload_all (column ))
1404
+ result = result .options (_joinedload_all (column ))
1397
1405
result = result .filter_by (address = address ).first ()
1398
1406
if not result :
1399
1407
raise exception .FixedIpNotFoundForAddress (address = address )
@@ -1868,7 +1876,7 @@ def instance_get(context, instance_id, columns_to_join=None):
1868
1876
1869
1877
def _build_instance_get (context , columns_to_join = None ):
1870
1878
query = model_query (context , models .Instance , project_only = True ).\
1871
- options (joinedload_all ('security_groups.rules' )).\
1879
+ options (_joinedload_all ('security_groups.rules' )).\
1872
1880
options (joinedload ('info_cache' ))
1873
1881
if columns_to_join is None :
1874
1882
columns_to_join = ['metadata' , 'system_metadata' ]
@@ -3882,7 +3890,7 @@ def _security_group_get_query(context, read_deleted=None,
3882
3890
query = model_query (context , models .SecurityGroup ,
3883
3891
read_deleted = read_deleted , project_only = project_only )
3884
3892
if join_rules :
3885
- query = query .options (joinedload_all ('rules.grantee_group' ))
3893
+ query = query .options (_joinedload_all ('rules.grantee_group' ))
3886
3894
return query
3887
3895
3888
3896
@@ -3926,7 +3934,7 @@ def security_group_get(context, security_group_id, columns_to_join=None):
3926
3934
columns_to_join = []
3927
3935
for column in columns_to_join :
3928
3936
if column .startswith ('instances' ):
3929
- query = query .options (joinedload_all (column ))
3937
+ query = query .options (_joinedload_all (column ))
3930
3938
3931
3939
result = query .first ()
3932
3940
if not result :
@@ -3949,7 +3957,7 @@ def security_group_get_by_name(context, project_id, group_name,
3949
3957
columns_to_join = ['instances' , 'rules.grantee_group' ]
3950
3958
3951
3959
for column in columns_to_join :
3952
- query = query .options (joinedload_all (column ))
3960
+ query = query .options (_joinedload_all (column ))
3953
3961
3954
3962
result = query .first ()
3955
3963
if not result :
@@ -4005,7 +4013,7 @@ def security_group_update(context, security_group_id, values,
4005
4013
id = security_group_id )
4006
4014
if columns_to_join :
4007
4015
for column in columns_to_join :
4008
- query = query .options (joinedload_all (column ))
4016
+ query = query .options (_joinedload_all (column ))
4009
4017
security_group_ref = query .first ()
4010
4018
4011
4019
if not security_group_ref :
@@ -4121,7 +4129,7 @@ def security_group_rule_get_by_security_group(context, security_group_id,
4121
4129
query = (_security_group_rule_get_query (context ).
4122
4130
filter_by (parent_group_id = security_group_id ))
4123
4131
for column in columns_to_join :
4124
- query = query .options (joinedload_all (column ))
4132
+ query = query .options (_joinedload_all (column ))
4125
4133
return query .all ()
4126
4134
4127
4135
@@ -4357,7 +4365,7 @@ def migration_get_in_progress_by_host_and_node(context, host, node):
4357
4365
'reverted' , 'error' ,
4358
4366
'failed' , 'completed' ,
4359
4367
'cancelled' , 'done' ])).\
4360
- options (joinedload_all ('instance.system_metadata' )).\
4368
+ options (_joinedload_all ('instance.system_metadata' )).\
4361
4369
all ()
4362
4370
4363
4371
0 commit comments