Reviewers: ,


Please review this at http://codereview.tryton.org/226008/

Affected files:
  M trytond/backend/sqlite/table.py
  M trytond/model/modelsql.py
  M trytond/tests/test_fields.py


Index: trytond/backend/sqlite/table.py
===================================================================

--- a/trytond/backend/sqlite/table.py
+++ b/trytond/backend/sqlite/table.py
@@ -220,10 +220,6 @@
         column_type = column_type[1]
         default = ''
         from trytond.model import fields
-        if column_name in self._model._columns and \
-                isinstance(self._model._columns[column_name],
-                        (fields.Integer, fields.Float)):
-            default = ' DEFAULT 0'
self.cursor.execute(('ALTER TABLE "%s" ADD COLUMN "%s" %s' + default) %
                        (self.table_name, column_name, column_type))


Index: trytond/model/modelsql.py
===================================================================

--- a/trytond/model/modelsql.py
+++ b/trytond/model/modelsql.py
@@ -129,9 +129,6 @@
                             FIELDS[field._type].sql_type(field), None,
                             string=field.string)

-                if isinstance(field, (fields.Integer, fields.Float)):
-                    table.db_default(field_name, 0)
-
                 if isinstance(field, (fields.Boolean)):
                     table.db_default(field_name, False)

@@ -146,9 +143,6 @@
field_name, action=field.select and 'add' or 'remove')

                 required = field.required
-                if isinstance(field, (fields.Integer, fields.Float,
-                    fields.Boolean)):
-                    required = True
                 table.not_null_action(
                     field_name, action=required and 'add' or 'remove')

@@ -303,6 +297,7 @@

         # Insert record
         for field in values:
+            column = self._columns[field]
             if not hasattr(self._columns[field], 'set'):
                 upd0 = upd0 + ',"' + field + '"'
                 upd1 = upd1 + ', %s'
@@ -310,6 +305,14 @@
                     values[field]))
             else:
                 upd_todo.append(field)
+            if (isinstance(column, fields.Many2One)
+                    and column.model_name == self._name
+                    and column.left and column.right
+ and set((column.left, column.right)).isdisjoint(values)):
+                upd0 += ', "%s", "%s"' % (column.left, column.right)
+                upd1 += ', %s, %s'
+                upd2.extend([0, 0])
+
             if field in self._columns \
                     and hasattr(self._columns[field], 'selection') \
                     and self._columns[field].selection \
@@ -363,8 +366,6 @@
                     # Check required fields
                     if field.required and \
                             not hasattr(field, 'set') and \
-                            not isinstance(field, (fields.Integer,
-                                fields.Float)) and \
field_name not in ('create_uid', 'create_date'):
                         if not values.get(field_name):
                             self.raise_user_error('required_field',

Index: trytond/tests/test_fields.py
===================================================================

--- a/trytond/tests/test_fields.py
+++ b/trytond/tests/test_fields.py
@@ -314,7 +314,7 @@
             self.assert_(integer3_id)

             integer3 = self.integer.read(integer3_id, ['integer'])
-            self.assert_(integer3['integer'] == 0)
+            self.assert_(integer3['integer'] is None)

             integer4_id = self.integer_default.create({})
             self.assert_(integer4_id)
@@ -342,7 +342,14 @@
                 'integer': 'test',
                 })

-            integer5_id = self.integer_required.create({})
+            # We should catch UserError but mysql does not raise an
+            # IntegrityError but an OperationalError
+            self.assertRaises(Exception, self.integer_required.create, {})
+            transaction.cursor.rollback()
+
+            integer5_id = self.integer_required.create({
+                    'integer': 0,
+                    })
             self.assert_(integer5_id)

             integer5 = self.integer_required.read(integer5_id, ['integer'])
@@ -501,7 +508,7 @@
             self.assert_(float3_id)

             float3 = self.float.read(float3_id, ['float'])
-            self.assert_(float3['float'] == 0)
+            self.assert_(float3['float'] is None)

             float4_id = self.float_default.create({})
             self.assert_(float4_id)
@@ -529,11 +536,14 @@
                 'float': 'test',
                 })

-            float5_id = self.float_required.create({})
-            self.assert_(float5_id)
-
-            float5 = self.float_required.read(float5_id, ['float'])
-            self.assert_(float5['float'] == 0)
+            self.assertRaises(Exception, self.float_required.create, {})
+            transaction.cursor.rollback()
+
+            float5_id = self.float_required.create({
+                    'float': 0.0,
+                    })
+            float5 = self.float_required.read(float5_id)
+            self.assert_(float5['float'] == 0.0)

             float6_id = self.float_digits.create({
                 'digits': 1,
@@ -714,7 +724,7 @@
             self.assert_(numeric3_id)

             numeric3 = self.numeric.read(numeric3_id, ['numeric'])
-            self.assert_(numeric3['numeric'] == Decimal('0'))
+            self.assert_(numeric3['numeric'] is None)

             numeric4_id = self.numeric_default.create({})
             self.assert_(numeric4_id)
@@ -742,11 +752,14 @@
                 'numeric': 'test',
                 })

-            numeric5_id = self.numeric_required.create({})
-            self.assert_(numeric5_id)
-
-            numeric5 = self.numeric_required.read(numeric5_id, ['numeric'])
-            self.assert_(numeric5['numeric'] == Decimal('0'))
+            self.assertRaises(Exception, self.numeric_required.create, {})
+            transaction.cursor.rollback()
+
+            numeric5_id = self.numeric_required.create({
+                    'numeric': Decimal(0),
+                    })
+            numeric5 = self.numeric_required.read(numeric5_id)
+            self.assert_(numeric5['numeric'] == 0)

             numeric6_id = self.numeric_digits.create({
                 'digits': 1,



--
tryton-dev@googlegroups.com mailing list

Reply via email to