Replace raw SQL calls through session.execute() with SQLAlchemy code.
This commit is contained in:
commit
d46ff1b5a9
@ -34,6 +34,7 @@ from sqlalchemy.orm import joinedload
|
||||
from sqlalchemy.orm import joinedload_all
|
||||
from sqlalchemy.sql import exists
|
||||
from sqlalchemy.sql import func
|
||||
from sqlalchemy.sql.expression import literal_column
|
||||
|
||||
FLAGS = flags.FLAGS
|
||||
|
||||
@ -577,18 +578,17 @@ def fixed_ip_disassociate(context, address):
|
||||
@require_admin_context
|
||||
def fixed_ip_disassociate_all_by_timeout(_context, host, time):
|
||||
session = get_session()
|
||||
# NOTE(vish): The nested select is because sqlite doesn't support
|
||||
# JOINs in UPDATEs.
|
||||
result = session.execute('UPDATE fixed_ips SET instance_id = NULL, '
|
||||
'leased = 0 '
|
||||
'WHERE network_id IN (SELECT id FROM networks '
|
||||
'WHERE host = :host) '
|
||||
'AND updated_at < :time '
|
||||
'AND instance_id IS NOT NULL '
|
||||
'AND allocated = 0',
|
||||
{'host': host,
|
||||
'time': time})
|
||||
return result.rowcount
|
||||
inner_q = session.query(models.Network.id).\
|
||||
filter_by(host=host).\
|
||||
subquery()
|
||||
result = session.query(models.FixedIp).\
|
||||
filter(models.FixedIp.network_id.in_(inner_q)).\
|
||||
filter(models.FixedIp.updated_at < time).\
|
||||
filter(models.FixedIp.instance_id != None).\
|
||||
filter_by(allocated=0).\
|
||||
update({'instance_id': None,
|
||||
'leased': 0})
|
||||
return result
|
||||
|
||||
|
||||
@require_admin_context
|
||||
@ -701,14 +701,16 @@ def instance_data_get_for_project(context, project_id):
|
||||
def instance_destroy(context, instance_id):
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
session.execute('update instances set deleted=1,'
|
||||
'deleted_at=:at where id=:id',
|
||||
{'id': instance_id,
|
||||
'at': datetime.datetime.utcnow()})
|
||||
session.execute('update security_group_instance_association '
|
||||
'set deleted=1,deleted_at=:at where instance_id=:id',
|
||||
{'id': instance_id,
|
||||
'at': datetime.datetime.utcnow()})
|
||||
session.query(models.Instance).\
|
||||
filter_by(id=instance_id).\
|
||||
update({'deleted': 1,
|
||||
'deleted_at': datetime.datetime.utcnow(),
|
||||
'updated_at': literal_column('updated_at')})
|
||||
session.query(models.SecurityGroupInstanceAssociation).\
|
||||
filter_by(instance_id=instance_id).\
|
||||
update({'deleted': 1,
|
||||
'deleted_at': datetime.datetime.utcnow(),
|
||||
'updated_at': literal_column('updated_at')})
|
||||
|
||||
|
||||
@require_context
|
||||
@ -950,9 +952,11 @@ def key_pair_destroy_all_by_user(context, user_id):
|
||||
authorize_user_context(context, user_id)
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
# TODO(vish): do we have to use sql here?
|
||||
session.execute('update key_pairs set deleted=1 where user_id=:id',
|
||||
{'id': user_id})
|
||||
session.query(models.KeyPair).\
|
||||
filter_by(user_id=user_id).\
|
||||
update({'deleted': 1,
|
||||
'deleted_at': datetime.datetime.utcnow(),
|
||||
'updated_at': literal_column('updated_at')})
|
||||
|
||||
|
||||
@require_context
|
||||
@ -1072,7 +1076,9 @@ def network_disassociate(context, network_id):
|
||||
@require_admin_context
|
||||
def network_disassociate_all(context):
|
||||
session = get_session()
|
||||
session.execute('update networks set project_id=NULL')
|
||||
session.query(models.Network).\
|
||||
update({'project_id': None,
|
||||
'updated_at': literal_column('updated_at')})
|
||||
|
||||
|
||||
@require_context
|
||||
@ -1454,15 +1460,17 @@ def volume_data_get_for_project(context, project_id):
|
||||
def volume_destroy(context, volume_id):
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
# TODO(vish): do we have to use sql here?
|
||||
session.execute('update volumes set deleted=1 where id=:id',
|
||||
{'id': volume_id})
|
||||
session.execute('update export_devices set volume_id=NULL '
|
||||
'where volume_id=:id',
|
||||
{'id': volume_id})
|
||||
session.execute('update iscsi_targets set volume_id=NULL '
|
||||
'where volume_id=:id',
|
||||
{'id': volume_id})
|
||||
session.query(models.Volume).\
|
||||
filter_by(id=volume_id).\
|
||||
update({'deleted': 1,
|
||||
'deleted_at': datetime.datetime.utcnow(),
|
||||
'updated_at': literal_column('updated_at')})
|
||||
session.query(models.ExportDevice).\
|
||||
filter_by(volume_id=volume_id).\
|
||||
update({'volume_id': None})
|
||||
session.query(models.IscsiTarget).\
|
||||
filter_by(volume_id=volume_id).\
|
||||
update({'volume_id': None})
|
||||
|
||||
|
||||
@require_admin_context
|
||||
@ -1682,17 +1690,21 @@ def security_group_create(context, values):
|
||||
def security_group_destroy(context, security_group_id):
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
# TODO(vish): do we have to use sql here?
|
||||
session.execute('update security_groups set deleted=1 where id=:id',
|
||||
{'id': security_group_id})
|
||||
session.execute('update security_group_instance_association '
|
||||
'set deleted=1,deleted_at=:at '
|
||||
'where security_group_id=:id',
|
||||
{'id': security_group_id,
|
||||
'at': datetime.datetime.utcnow()})
|
||||
session.execute('update security_group_rules set deleted=1 '
|
||||
'where group_id=:id',
|
||||
{'id': security_group_id})
|
||||
session.query(models.SecurityGroup).\
|
||||
filter_by(id=security_group_id).\
|
||||
update({'deleted': 1,
|
||||
'deleted_at': datetime.datetime.utcnow(),
|
||||
'updated_at': literal_column('updated_at')})
|
||||
session.query(models.SecurityGroupInstanceAssociation).\
|
||||
filter_by(security_group_id=security_group_id).\
|
||||
update({'deleted': 1,
|
||||
'deleted_at': datetime.datetime.utcnow(),
|
||||
'updated_at': literal_column('updated_at')})
|
||||
session.query(models.SecurityGroupIngressRule).\
|
||||
filter_by(group_id=security_group_id).\
|
||||
update({'deleted': 1,
|
||||
'deleted_at': datetime.datetime.utcnow(),
|
||||
'updated_at': literal_column('updated_at')})
|
||||
|
||||
|
||||
@require_context
|
||||
@ -1700,9 +1712,14 @@ def security_group_destroy_all(context, session=None):
|
||||
if not session:
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
# TODO(vish): do we have to use sql here?
|
||||
session.execute('update security_groups set deleted=1')
|
||||
session.execute('update security_group_rules set deleted=1')
|
||||
session.query(models.SecurityGroup).\
|
||||
update({'deleted': 1,
|
||||
'deleted_at': datetime.datetime.utcnow(),
|
||||
'updated_at': literal_column('updated_at')})
|
||||
session.query(models.SecurityGroupIngressRule).\
|
||||
update({'deleted': 1,
|
||||
'deleted_at': datetime.datetime.utcnow(),
|
||||
'updated_at': literal_column('updated_at')})
|
||||
|
||||
|
||||
###################
|
||||
@ -1831,12 +1848,15 @@ def user_create(_context, values):
|
||||
def user_delete(context, id):
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
session.execute('delete from user_project_association '
|
||||
'where user_id=:id', {'id': id})
|
||||
session.execute('delete from user_role_association '
|
||||
'where user_id=:id', {'id': id})
|
||||
session.execute('delete from user_project_role_association '
|
||||
'where user_id=:id', {'id': id})
|
||||
session.query(models.UserProjectAssociation).\
|
||||
filter_by(user_id=id).\
|
||||
delete()
|
||||
session.query(models.UserRoleAssociation).\
|
||||
filter_by(user_id=id).\
|
||||
delete()
|
||||
session.query(models.UserProjectRoleAssociation).\
|
||||
filter_by(user_id=id).\
|
||||
delete()
|
||||
user_ref = user_get(context, id, session=session)
|
||||
session.delete(user_ref)
|
||||
|
||||
@ -1930,10 +1950,12 @@ def project_update(context, project_id, values):
|
||||
def project_delete(context, id):
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
session.execute('delete from user_project_association '
|
||||
'where project_id=:id', {'id': id})
|
||||
session.execute('delete from user_project_role_association '
|
||||
'where project_id=:id', {'id': id})
|
||||
session.query(models.UserProjectAssociation).\
|
||||
filter_by(project_id=id).\
|
||||
delete()
|
||||
session.query(models.UserProjectRoleAssociation).\
|
||||
filter_by(project_id=id).\
|
||||
delete()
|
||||
project_ref = project_get(context, id, session=session)
|
||||
session.delete(project_ref)
|
||||
|
||||
@ -1958,11 +1980,11 @@ def user_get_roles_for_project(context, user_id, project_id):
|
||||
def user_remove_project_role(context, user_id, project_id, role):
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
session.execute('delete from user_project_role_association where '
|
||||
'user_id=:user_id and project_id=:project_id and '
|
||||
'role=:role', {'user_id': user_id,
|
||||
'project_id': project_id,
|
||||
'role': role})
|
||||
session.query(models.UserProjectRoleAssociation).\
|
||||
filter_by(user_id=user_id).\
|
||||
filter_by(project_id=project_id).\
|
||||
filter_by(role=role).\
|
||||
delete()
|
||||
|
||||
|
||||
def user_remove_role(context, user_id, role):
|
||||
@ -2113,8 +2135,9 @@ def console_delete(context, console_id):
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
# consoles are meant to be transient. (mdragon)
|
||||
session.execute('delete from consoles '
|
||||
'where id=:id', {'id': console_id})
|
||||
session.query(models.Console).\
|
||||
filter_by(id=console_id).\
|
||||
delete()
|
||||
|
||||
|
||||
def console_get_by_pool_instance(context, pool_id, instance_id):
|
||||
@ -2270,8 +2293,9 @@ def zone_update(context, zone_id, values):
|
||||
def zone_delete(context, zone_id):
|
||||
session = get_session()
|
||||
with session.begin():
|
||||
session.execute('delete from zones '
|
||||
'where id=:id', {'id': zone_id})
|
||||
session.query(models.Zone).\
|
||||
filter_by(id=zone_id).\
|
||||
delete()
|
||||
|
||||
|
||||
@require_admin_context
|
||||
|
Loading…
Reference in New Issue
Block a user