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,
--
[email protected] mailing list