diff sat/memory/sqla.py @ 3673:bd13391ee29e

core (memory/sqla): fix `fileUpdate`
author Goffi <goffi@goffi.org>
date Wed, 08 Sep 2021 17:58:48 +0200
parents 72b0e4053ab0
children cf930bb282ac
line wrap: on
line diff
--- a/sat/memory/sqla.py	Wed Sep 08 17:58:48 2021 +0200
+++ b/sat/memory/sqla.py	Wed Sep 08 17:58:48 2021 +0200
@@ -19,6 +19,7 @@
 import sys
 import time
 import asyncio
+import copy
 from datetime import datetime
 from asyncio.subprocess import PIPE
 from pathlib import Path
@@ -981,14 +982,15 @@
                     )).scalar_one()
                 except NoResultFound:
                     raise exceptions.NotFound
+                old_value = copy.deepcopy(value)
                 update_cb(value)
-                stmt = update(orm_col).filter_by(id=file_id)
-                if not value:
+                stmt = update(File).filter_by(id=file_id).values({column: value})
+                if not old_value:
                     # because JsonDefaultDict convert NULL to an empty dict, we have to
-                    # test both for empty dict and None when we have and empty dict
-                    stmt = stmt.where((orm_col == None) | (orm_col == value))
+                    # test both for empty dict and None when we have an empty dict
+                    stmt = stmt.where((orm_col == None) | (orm_col == old_value))
                 else:
-                    stmt = stmt.where(orm_col == value)
+                    stmt = stmt.where(orm_col == old_value)
                 result = await session.execute(stmt)
                 await session.commit()