changeset 2472:f41539b3c486

fixed Boolean values in postgresql (bugs [SF#972546] and [SF#972600])
author Richard Jones <richard@users.sourceforge.net>
date Wed, 16 Jun 2004 03:54:00 +0000
parents 31cd032291c5
children 54a0869b92e4
files CHANGES.txt roundup/backends/rdbms_common.py test/db_test_base.py
diffstat 3 files changed, 19 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/CHANGES.txt	Wed Jun 16 00:29:54 2004 +0000
+++ b/CHANGES.txt	Wed Jun 16 03:54:00 2004 +0000
@@ -21,6 +21,7 @@
 - allow list of values for id, Number and Boolean filtering in anydbm
   backend
 - fixed some more mysql 0.6->0.7 upgrade bugs (sf bug 950410)
+- fixed Boolean values in postgresql (sf bugs 972546 and 972600)
 
 
 2004-06-10 0.7.4
--- a/roundup/backends/rdbms_common.py	Wed Jun 16 00:29:54 2004 +0000
+++ b/roundup/backends/rdbms_common.py	Wed Jun 16 03:54:00 2004 +0000
@@ -1,4 +1,4 @@
-# $Id: rdbms_common.py,v 1.109 2004-06-14 03:36:11 richard Exp $
+# $Id: rdbms_common.py,v 1.110 2004-06-16 03:54:00 richard Exp $
 ''' Relational database (SQL) backend common code.
 
 Basics:
@@ -53,6 +53,12 @@
     except:
         return float(num)
 
+def _bool_cvt(value):
+    if value in ('TRUE', 'FALSE'):
+        return {'TRUE': 1, 'FALSE': 0}[value]
+    # assume it's a number returned from the db API
+    return int(value)
+
 class Database(FileStorage, hyperdb.Database, roundupdb.Database):
     ''' Wrapper around an SQL database that presents a hyperdb interface.
 
@@ -740,7 +746,7 @@
 
             prop = props[col[1:]]
             value = values[col[1:]]
-            if value:
+            if value is not None:
                 value = self.hyperdb_to_sql_value[prop.__class__](value)
             vals.append(value)
         vals.append(nodeid)
@@ -880,7 +886,7 @@
         hyperdb.Link   : str,
         hyperdb.Interval  : date.Interval,
         hyperdb.Password  : lambda x: password.Password(encrypted=x),
-        hyperdb.Boolean   : int,
+        hyperdb.Boolean   : _bool_cvt,
         hyperdb.Number    : _num_cvt,
         hyperdb.Multilink : lambda x: x,    # used in journal marshalling
     }
--- a/test/db_test_base.py	Wed Jun 16 00:29:54 2004 +0000
+++ b/test/db_test_base.py	Wed Jun 16 03:54:00 2004 +0000
@@ -15,7 +15,7 @@
 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 # 
-# $Id: db_test_base.py,v 1.31 2004-06-13 01:05:46 richard Exp $ 
+# $Id: db_test_base.py,v 1.32 2004-06-16 03:54:00 richard Exp $ 
 
 import unittest, os, shutil, errno, imp, sys, time, pprint
 
@@ -263,11 +263,19 @@
             self.assertEqual(self.db.issue.get(nid, "foo"), None)
 
     # Boolean
+    def testBooleanSet(self):
+        nid = self.db.user.create(username='one', assignable=1)
+        self.assertEqual(self.db.user.get(nid, "assignable"), 1)
+        nid = self.db.user.create(username='two', assignable=0)
+        self.assertEqual(self.db.user.get(nid, "assignable"), 0)
+
     def testBooleanChange(self):
         userid = self.db.user.create(username='foo', assignable=1)
         self.assertEqual(1, self.db.user.get(userid, 'assignable'))
         self.db.user.set(userid, assignable=0)
         self.assertEqual(self.db.user.get(userid, 'assignable'), 0)
+        self.db.user.set(userid, assignable=1)
+        self.assertEqual(self.db.user.get(userid, 'assignable'), 1)
 
     def testBooleanUnset(self):
         nid = self.db.user.create(username='foo', assignable=1)

Roundup Issue Tracker: http://roundup-tracker.org/