summaryrefslogtreecommitdiffstats
path: root/openstack/common/db/sqlalchemy/models.py
diff options
context:
space:
mode:
authorBoris Pavlovic <boris@pavlovic.me>2013-02-04 17:34:55 +0000
committerMark McLoughlin <markmc@redhat.com>2013-02-07 15:25:29 -0500
commit1575b00bb383b35d0251a5f74e67c1b18d61e51d (patch)
treec4db321de31fa7c4f8b95f28a32ea4d79c535034 /openstack/common/db/sqlalchemy/models.py
parent4ce828dbb170390f01f2d931ff7a165aefe87c32 (diff)
downloadoslo-1575b00bb383b35d0251a5f74e67c1b18d61e51d.tar.gz
oslo-1575b00bb383b35d0251a5f74e67c1b18d61e51d.tar.xz
oslo-1575b00bb383b35d0251a5f74e67c1b18d61e51d.zip
Provide creating real unique constraints for columns
Main issue is that we can't create unique constraint for columns, because we are using soft deletion of entries (set `deleted` column to True). The main idea is to use `deleted` columns to create unique constraint for columns. For example (`col1`, `deleted`). To make (`col1`, `deleted`) unique after entry deletion, we should assign the value of `id` to `deleted` column. Change type of `deleted` column from Boolean to table.id.type for all tables. Change models.soft_delete() method to assign table.id instead of True to `deleted` column. Change query.soft_delete() method to assign literal_column("id") instead of True blueprint db-unique-keys Change-Id: Ie1f67f49a5d085e6371efb63fc23a1c8b25d9464
Diffstat (limited to 'openstack/common/db/sqlalchemy/models.py')
-rw-r--r--openstack/common/db/sqlalchemy/models.py6
1 files changed, 3 insertions, 3 deletions
diff --git a/openstack/common/db/sqlalchemy/models.py b/openstack/common/db/sqlalchemy/models.py
index e2eee28..f674da2 100644
--- a/openstack/common/db/sqlalchemy/models.py
+++ b/openstack/common/db/sqlalchemy/models.py
@@ -22,7 +22,7 @@
SQLAlchemy models.
"""
-from sqlalchemy import Column, Boolean
+from sqlalchemy import Column, Integer
from sqlalchemy import DateTime
from sqlalchemy.orm import object_mapper
@@ -94,10 +94,10 @@ class ModelBase(object):
class SoftDeleteMixin(object):
deleted_at = Column(DateTime)
- deleted = Column(Boolean, default=False)
+ deleted = Column(Integer, default=0)
def soft_delete(self, session=None):
"""Mark this object as deleted."""
- self.deleted = True
+ self.deleted = self.id
self.deleted_at = timeutils.utcnow()
self.save(session=session)