[SQL-CVS] r963 - in SQLObject/trunk/sqlobject: . tests
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
|
From: <sub...@co...> - 2005-08-28 04:45:11
|
Author: ianb
Date: 2005-08-28 04:44:45 +0000 (Sun, 28 Aug 2005)
New Revision: 963
Modified:
SQLObject/trunk/sqlobject/col.py
SQLObject/trunk/sqlobject/tests/test_enum.py
Log:
Allow None in an EnumCol (specific problems in Postgres)
Modified: SQLObject/trunk/sqlobject/col.py
===================================================================
--- SQLObject/trunk/sqlobject/col.py 2005-08-27 19:51:32 UTC (rev 962)
+++ SQLObject/trunk/sqlobject/col.py 2005-08-28 04:44:45 UTC (rev 963)
@@ -778,7 +778,7 @@
return "ENUM(%s)" % ', '.join([sqlbuilder.sqlrepr(v, 'mysql') for v in self.enumValues])
def _postgresType(self):
- length = max(map(len, self.enumValues))
+ length = max(map(self._getlength, self.enumValues))
enumValues = ', '.join([sqlbuilder.sqlrepr(v, 'postgres') for v in self.enumValues])
checkConstraint = "CHECK (%s in (%s))" % (self.dbName, enumValues)
return "VARCHAR(%i) %s" % (length, checkConstraint)
@@ -790,7 +790,7 @@
return self._postgresType()
def _firebirdType(self):
- length = max(map(len, self.enumValues))
+ length = max(map(self._getlength, self.enumValues))
enumValues = ', '.join([sqlbuilder.sqlrepr(v, 'firebird') for v in self.enumValues])
checkConstraint = "CHECK (%s in (%s))" % (self.dbName, enumValues)
#NB. Return a tuple, not a string here
@@ -799,6 +799,15 @@
def _maxdbType(self):
raise "Enum type is not supported"
+ def _getlength(self, obj):
+ """
+ None counts as 0; everything else uses len()
+ """
+ if obj is None:
+ return 0
+ else:
+ return len(obj)
+
class EnumValidator(validators.Validator):
def to_python(self, value, state):
Modified: SQLObject/trunk/sqlobject/tests/test_enum.py
===================================================================
--- SQLObject/trunk/sqlobject/tests/test_enum.py 2005-08-27 19:51:32 UTC (rev 962)
+++ SQLObject/trunk/sqlobject/tests/test_enum.py 2005-08-28 04:44:45 UTC (rev 963)
@@ -19,3 +19,13 @@
Enum1._connection.module.ProgrammingError,
Invalid),
Enum1, l='b')
+
+class EnumWithNone(SQLObject):
+
+ l = EnumCol(enumValues=['a', 'bcd', 'e', None])
+
+def testNone():
+ setupClass(EnumWithNone)
+ for l in [None, 'a', 'bcd', 'a', 'e', None]:
+ EnumWithNone(l=l)
+
|