From 061b810dac533eaedd4b7f4f2b7ad6d3d0ab8ced Mon Sep 17 00:00:00 2001 From: Augustin Trancart Date: Thu, 26 Aug 2021 16:31:12 +0200 Subject: [PATCH] Fix behaviour of triggers when logging an existing layer When adding logging via db manager to an existing layer, all the time_start of existing features are still null. When we modify one feature for the first time, the update trigger fires and insert a row for the past state of the feature. In turn, this fires the INSERT trigger for this row, and the execution goes inside the `if NEW.time_start is NULL`, which set the end timestamp to NULL, making the old row still visible in the _current view. In other word, the insert trigger makes the assumption that a null start timestamp means now, which is not true in the case described above. This commit fixes this assumption by initially setting it to `-infinity` for existing rows. --- .../db_plugins/postgis/plugins/versioning/DlgVersioning.ui | 2 +- .../db_plugins/postgis/plugins/versioning/dlg_versioning.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/python/plugins/db_manager/db_plugins/postgis/plugins/versioning/DlgVersioning.ui b/python/plugins/db_manager/db_plugins/postgis/plugins/versioning/DlgVersioning.ui index 0968b534237..2647a1d3cc5 100644 --- a/python/plugins/db_manager/db_plugins/postgis/plugins/versioning/DlgVersioning.ui +++ b/python/plugins/db_manager/db_plugins/postgis/plugins/versioning/DlgVersioning.ui @@ -19,7 +19,7 @@ - Table should be empty, with a primary key + Table should have a primary key diff --git a/python/plugins/db_manager/db_plugins/postgis/plugins/versioning/dlg_versioning.py b/python/plugins/db_manager/db_plugins/postgis/plugins/versioning/dlg_versioning.py index fdb1cae57db..edc923ae546 100644 --- a/python/plugins/db_manager/db_plugins/postgis/plugins/versioning/dlg_versioning.py +++ b/python/plugins/db_manager/db_plugins/postgis/plugins/versioning/dlg_versioning.py @@ -175,7 +175,7 @@ class DlgVersioning(QDialog, Ui_DlgVersioning): QMessageBox.information(self, "Help", helpText) def sql_alterTable(self): - return u"ALTER TABLE %s ADD %s serial, ADD %s timestamp, ADD %s timestamp, ADD %s varchar;" % ( + return u"ALTER TABLE %s ADD %s serial, ADD %s timestamp default '-infinity', ADD %s timestamp, ADD %s varchar;" % ( self.schematable, self.colPkey, self.colStart, self.colEnd, self.colUser) def sql_setPkey(self):