Thread: [SQL-CVS] r2006 - in SQLObject/branches/0.7-bugfix: docs sqlobject sqlobject/tests
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: <sub...@co...> - 2006-10-11 14:42:42
|
Author: phd Date: 2006-10-11 08:42:35 -0600 (Wed, 11 Oct 2006) New Revision: 2006 Modified: SQLObject/branches/0.7-bugfix/docs/SQLObject.txt SQLObject/branches/0.7-bugfix/sqlobject/col.py SQLObject/branches/0.7-bugfix/sqlobject/tests/test_enum.py Log: Applied patches for the bug 1496014: None in enumValues fails. Additional tests by Nathan Edwards <ned...@um...>. Modified: SQLObject/branches/0.7-bugfix/docs/SQLObject.txt =================================================================== --- SQLObject/branches/0.7-bugfix/docs/SQLObject.txt 2006-10-10 20:21:19 UTC (rev 2005) +++ SQLObject/branches/0.7-bugfix/docs/SQLObject.txt 2006-10-11 14:42:35 UTC (rev 2006) @@ -1098,6 +1098,13 @@ ``ENUM`` type, but will work with other databases too (storage just won't be as efficient). + For PostgreSQL, EnumCol's are implemented using check constraints. + Due to the way PostgreSQL handles check constraints involving NULL, + specifying None as a member of an EnumCol will effectively mean that, + at the SQL level, the check constraint will be ignored (see + http://archives.postgresql.org/pgsql-sql/2004-12/msg00065.php for + more details). + `FloatCol`: Floats. Modified: SQLObject/branches/0.7-bugfix/sqlobject/col.py =================================================================== --- SQLObject/branches/0.7-bugfix/sqlobject/col.py 2006-10-10 20:21:19 UTC (rev 2005) +++ SQLObject/branches/0.7-bugfix/sqlobject/col.py 2006-10-11 14:42:35 UTC (rev 2006) @@ -869,7 +869,12 @@ super(SOEnumCol, self).createValidators() def _mysqlType(self): - return "ENUM(%s)" % ', '.join([sqlbuilder.sqlrepr(v, 'mysql') for v in self.enumValues]) + # We need to map None in the enum expression to an appropriate + # condition on NULL + if None in self.enumValues: + return "ENUM(%s)" % ', '.join([sqlbuilder.sqlrepr(v, 'mysql') for v in self.enumValues if v is not None]) + else: + return "ENUM(%s) NOT NULL" % ', '.join([sqlbuilder.sqlrepr(v, 'mysql') for v in self.enumValues]) def _postgresType(self): length = max(map(self._getlength, self.enumValues)) Modified: SQLObject/branches/0.7-bugfix/sqlobject/tests/test_enum.py =================================================================== --- SQLObject/branches/0.7-bugfix/sqlobject/tests/test_enum.py 2006-10-10 20:21:19 UTC (rev 2005) +++ SQLObject/branches/0.7-bugfix/sqlobject/tests/test_enum.py 2006-10-11 14:42:35 UTC (rev 2006) @@ -27,5 +27,25 @@ def testNone(): setupClass(EnumWithNone) for l in [None, 'a', 'bcd', 'a', 'e', None]: - EnumWithNone(l=l) - + e = EnumWithNone(l=l) + assert e.l == l + +class EnumWithDefaultNone(SQLObject): + + l = EnumCol(enumValues=['a', 'bcd', 'e', None], default=None) + +def testDefaultNone(): + setupClass(EnumWithDefaultNone) + + e = EnumWithDefaultNone() + assert e.l == None + +class EnumWithDefaultOther(SQLObject): + + l = EnumCol(enumValues=['a', 'bcd', 'e', None], default='a') + +def testDefaultOther(): + setupClass(EnumWithDefaultOther) + + e = EnumWithDefaultOther() + assert e.l == 'a' |