[Rt-commit] rt branch, 4.2/consistent-time-taken, updated. rt-4.1.6-348-g02f17f9

Ruslan Zakirov ruz at bestpractical.com
Tue Apr 2 16:10:31 EDT 2013


The branch, 4.2/consistent-time-taken has been updated
       via  02f17f9d98c9389e327a45d574204569ee058835 (commit)
      from  d2cb8b88dfdc95be569391876a55e5906c52447f (commit)

Summary of changes:
 etc/upgrade/4.1.9/schema.Oracle | 5 ++++-
 etc/upgrade/4.1.9/schema.Pg     | 6 +++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

- Log -----------------------------------------------------------------
commit 02f17f9d98c9389e327a45d574204569ee058835
Author: Ruslan Zakirov <ruz at bestpractical.com>
Date:   Tue Apr 2 21:04:43 2013 +0400

    handle strings during upgrade of (Set,TimeWorked) txns
    
    Pg and Oracle will stop update query if string can not
    be converted to integer.
    
    NewValue for (Set, TimeWorked) txns may contain string
    if this DB was used with mysql and users entered strings
    like "two days" as TimeWorked value. mysql just
    converts string to 0 that end up in TimeWorked of a ticket,
    but string as is ends up in transactions table.
    
    For Pg/Oracle operation is just rejected and SetTimeWorked
    fails.
    
    Let's adjust upgrade SQL just in case RT was migrated from
    mysql to Oracle/Pg.

diff --git a/etc/upgrade/4.1.9/schema.Oracle b/etc/upgrade/4.1.9/schema.Oracle
index 8d6680d..219eefa 100644
--- a/etc/upgrade/4.1.9/schema.Oracle
+++ b/etc/upgrade/4.1.9/schema.Oracle
@@ -1,2 +1,5 @@
-UPDATE Transactions SET TimeTaken = NewValue - OldValue
+UPDATE Transactions
+SET TimeTaken
+    = COALESCE(TO_NUMBER(REGEXP_SUBSTR(NewValue, '^-?\d+$')), 0)
+    - TO_NUMBER(OldValue)
 WHERE ObjectType = 'RT::Ticket' AND Type = 'Set' AND Field = 'TimeWorked';
\ No newline at end of file
diff --git a/etc/upgrade/4.1.9/schema.Pg b/etc/upgrade/4.1.9/schema.Pg
index bef3e25..b6a8e1f 100644
--- a/etc/upgrade/4.1.9/schema.Pg
+++ b/etc/upgrade/4.1.9/schema.Pg
@@ -1,2 +1,6 @@
-UPDATE Transactions SET TimeTaken = NewValue::integer - OldValue::integer
+UPDATE Transactions
+SET TimeTaken = (
+    (CASE WHEN NewValue~E'^-?\\d+$' THEN NewValue::integer ELSE 0 END)
+    - OldValue::integer
+)
 WHERE ObjectType = 'RT::Ticket' AND Type = 'Set' AND Field = 'TimeWorked';
\ No newline at end of file

-----------------------------------------------------------------------


More information about the Rt-commit mailing list