summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2019-02-01 11:53:26 -0500
committerMatt Riedemann <mriedem.os@gmail.com>2019-02-01 11:57:40 -0500
commitaf4b2263e4852de2bd4e66848a18be4d2282bacc (patch)
tree343b4e67fe4c7e96e6efeb9d523dd3488920d2b5
parent8c60cc113599e479a23b9428b9fe51b951776468 (diff)
downloadoslo-db-af4b2263e4852de2bd4e66848a18be4d2282bacc.tar.gz
Resolve SAWarning in Query.soft_delete()
We currently see a lot of warnings like this from the soft_delete() method: sqlalchemy.exc.SAWarning: Evaluating non-mapped column expression 'updated_at' onto ORM instances; this is a deprecated use case. Please make use of the actual mapped columns in ORM-evaluated UPDATE / DELETE expressions. This is because the "evaluate" synchronization strategy would like to search for objects and update them based on the UPDATE criteria passed, however the columns given, literal_column('id'), literal_column('updated_at'), are not mapped to anything. The evaluator has to make a guess that the string contained in these expressions should be matched to a mapped attribute on the given entity and this guess was first removed in [1], then added back in [2] with a warning (likely since oslo.db is invoking it). This uses the actual entity-mapped column for the query rather than the literal string column. [1] https://docs.sqlalchemy.org/en/latest/changelog/changelog_12.html#change-b1e620dece39006ab44c47044e9a6fee [2] https://docs.sqlalchemy.org/en/latest/changelog/changelog_12.html#change-dff3a469788c81a46440584406cb22be Change-Id: I192e84ce757d12d33085a209dd58d8ea46fb90fb Closes-Bug: #1814199
-rw-r--r--oslo_db/sqlalchemy/orm.py6
1 files changed, 3 insertions, 3 deletions
diff --git a/oslo_db/sqlalchemy/orm.py b/oslo_db/sqlalchemy/orm.py
index decd8c8..b1ca00a 100644
--- a/oslo_db/sqlalchemy/orm.py
+++ b/oslo_db/sqlalchemy/orm.py
@@ -18,7 +18,6 @@
from oslo_utils import timeutils
import sqlalchemy.orm
-from sqlalchemy.sql.expression import literal_column
from oslo_db.sqlalchemy import update_match
@@ -26,8 +25,9 @@ from oslo_db.sqlalchemy import update_match
class Query(sqlalchemy.orm.query.Query):
"""Subclass of sqlalchemy.query with soft_delete() method."""
def soft_delete(self, synchronize_session='evaluate'):
- return self.update({'deleted': literal_column('id'),
- 'updated_at': literal_column('updated_at'),
+ entity = self.column_descriptions[0]['entity']
+ return self.update({'deleted': entity.id,
+ 'updated_at': entity.updated_at,
'deleted_at': timeutils.utcnow()},
synchronize_session=synchronize_session)