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 ))
@@ -845,7 +853,7 @@ def floating_ip_get(context, id):
845
853
try :
846
854
result = model_query (context , models .FloatingIp , project_only = True ).\
847
855
filter_by (id = id ).\
848
- options (joinedload_all ('fixed_ip.instance' )).\
856
+ options (_joinedload_all ('fixed_ip.instance' )).\
849
857
first ()
850
858
851
859
if not result :
@@ -1073,7 +1081,7 @@ def floating_ip_get_all_by_project(context, project_id):
1073
1081
return _floating_ip_get_all (context ).\
1074
1082
filter_by (project_id = project_id ).\
1075
1083
filter_by (auto_assigned = False ).\
1076
- options (joinedload_all ('fixed_ip.instance' )).\
1084
+ options (_joinedload_all ('fixed_ip.instance' )).\
1077
1085
all ()
1078
1086
1079
1087
@@ -1091,7 +1099,7 @@ def _floating_ip_get_by_address(context, address):
1091
1099
try :
1092
1100
result = model_query (context , models .FloatingIp ).\
1093
1101
filter_by (address = address ).\
1094
- options (joinedload_all ('fixed_ip.instance' )).\
1102
+ options (_joinedload_all ('fixed_ip.instance' )).\
1095
1103
first ()
1096
1104
1097
1105
if not result :
@@ -1406,7 +1414,7 @@ def _fixed_ip_get_by_address(context, address, columns_to_join=None):
1406
1414
try :
1407
1415
result = model_query (context , models .FixedIp )
1408
1416
for column in columns_to_join :
1409
- result = result .options (joinedload_all (column ))
1417
+ result = result .options (_joinedload_all (column ))
1410
1418
result = result .filter_by (address = address ).first ()
1411
1419
if not result :
1412
1420
raise exception .FixedIpNotFoundForAddress (address = address )
@@ -1876,7 +1884,7 @@ def instance_get(context, instance_id, columns_to_join=None):
1876
1884
1877
1885
def _build_instance_get (context , columns_to_join = None ):
1878
1886
query = model_query (context , models .Instance , project_only = True ).\
1879
- options (joinedload_all ('security_groups.rules' )).\
1887
+ options (_joinedload_all ('security_groups.rules' )).\
1880
1888
options (joinedload ('info_cache' ))
1881
1889
if columns_to_join is None :
1882
1890
columns_to_join = ['metadata' , 'system_metadata' ]
@@ -3890,7 +3898,7 @@ def _security_group_get_query(context, read_deleted=None,
3890
3898
query = model_query (context , models .SecurityGroup ,
3891
3899
read_deleted = read_deleted , project_only = project_only )
3892
3900
if join_rules :
3893
- query = query .options (joinedload_all ('rules.grantee_group' ))
3901
+ query = query .options (_joinedload_all ('rules.grantee_group' ))
3894
3902
return query
3895
3903
3896
3904
@@ -3934,7 +3942,7 @@ def security_group_get(context, security_group_id, columns_to_join=None):
3934
3942
columns_to_join = []
3935
3943
for column in columns_to_join :
3936
3944
if column .startswith ('instances' ):
3937
- query = query .options (joinedload_all (column ))
3945
+ query = query .options (_joinedload_all (column ))
3938
3946
3939
3947
result = query .first ()
3940
3948
if not result :
@@ -3957,7 +3965,7 @@ def security_group_get_by_name(context, project_id, group_name,
3957
3965
columns_to_join = ['instances' , 'rules.grantee_group' ]
3958
3966
3959
3967
for column in columns_to_join :
3960
- query = query .options (joinedload_all (column ))
3968
+ query = query .options (_joinedload_all (column ))
3961
3969
3962
3970
result = query .first ()
3963
3971
if not result :
@@ -4013,7 +4021,7 @@ def security_group_update(context, security_group_id, values,
4013
4021
id = security_group_id )
4014
4022
if columns_to_join :
4015
4023
for column in columns_to_join :
4016
- query = query .options (joinedload_all (column ))
4024
+ query = query .options (_joinedload_all (column ))
4017
4025
security_group_ref = query .first ()
4018
4026
4019
4027
if not security_group_ref :
@@ -4137,7 +4145,7 @@ def security_group_rule_get_by_security_group(context, security_group_id,
4137
4145
query = (_security_group_rule_get_query (context ).
4138
4146
filter_by (parent_group_id = security_group_id ))
4139
4147
for column in columns_to_join :
4140
- query = query .options (joinedload_all (column ))
4148
+ query = query .options (_joinedload_all (column ))
4141
4149
return query .all ()
4142
4150
4143
4151
@@ -4373,7 +4381,7 @@ def migration_get_in_progress_by_host_and_node(context, host, node):
4373
4381
'reverted' , 'error' ,
4374
4382
'failed' , 'completed' ,
4375
4383
'cancelled' , 'done' ])).\
4376
- options (joinedload_all ('instance.system_metadata' )).\
4384
+ options (_joinedload_all ('instance.system_metadata' )).\
4377
4385
all ()
4378
4386
4379
4387
0 commit comments