← Back to team overview

openerp-dev-web team mailing list archive

lp:~openerp-dev/openobject-server/opw-update_selection_field-ach into lp:openobject-server

 

Anup(OpenERP) has proposed merging lp:~openerp-dev/openobject-server/opw-update_selection_field-ach into lp:openobject-server.

Requested reviews:
  Jay Vora (OpenERP) (jvo-openerp)
  Olivier Dony (OpenERP) (odo)

For more details, see:
https://code.launchpad.net/~openerp-dev/openobject-server/opw-update_selection_field-ach/+merge/52398

Hello,

    Currently we are not able to update the selection field in the database. Using this solution we can update the selection fields.

Thanks.
-- 
https://code.launchpad.net/~openerp-dev/openobject-server/opw-update_selection_field-ach/+merge/52398
Your team OpenERP R&D Team is subscribed to branch lp:~openerp-dev/openobject-server/opw-update_selection_field-ach.
=== modified file 'openerp/osv/orm.py'
--- openerp/osv/orm.py	2011-02-21 17:27:57 +0000
+++ openerp/osv/orm.py	2011-03-07 11:43:53 +0000
@@ -1511,16 +1511,12 @@
                             else:
                                 del(node.attrib[attribute[0]])
                     else:
-                        sib = node.getnext()
                         for child in node2:
                             if pos == 'inside':
                                 node.append(child)
                             elif pos == 'after':
-                                if sib is None:
-                                    node.addnext(child)
-                                    node = child
-                                else:
-                                    sib.addprevious(child)
+                                node.addnext(child)
+                                node = child
                             elif pos == 'before':
                                 node.addprevious(child)
                             else:
@@ -2522,14 +2518,18 @@
                                 ('numeric', 'float', get_pg_type(f)[1], '::'+get_pg_type(f)[1]),
                                 ('float8', 'float', get_pg_type(f)[1], '::'+get_pg_type(f)[1]),
                             ]
-                            if f_pg_type == 'varchar' and f._type == 'char' and f_pg_size < f.size:
+                            f_size = f.size
+                            if f._type == 'selection':
+                                if f_size is None and f_pg_size != 16:
+                                    f_size = 16                            
+                            if f_pg_type == 'varchar' and f._type in ('char','selection') and f_pg_size < f_size:
                                 cr.execute('ALTER TABLE "%s" RENAME COLUMN "%s" TO temp_change_size' % (self._table, k))
-                                cr.execute('ALTER TABLE "%s" ADD COLUMN "%s" VARCHAR(%d)' % (self._table, k, f.size))
-                                cr.execute('UPDATE "%s" SET "%s"=temp_change_size::VARCHAR(%d)' % (self._table, k, f.size))
+                                cr.execute('ALTER TABLE "%s" ADD COLUMN "%s" VARCHAR(%d)' % (self._table, k, f_size))
+                                cr.execute('UPDATE "%s" SET "%s"=temp_change_size::VARCHAR(%d)' % (self._table, k, f_size))
                                 cr.execute('ALTER TABLE "%s" DROP COLUMN temp_change_size CASCADE' % (self._table,))
                                 cr.commit()
                                 self.__schema.debug("Table '%s': column '%s' (type varchar) changed size from %s to %s",
-                                    self._table, k, f_pg_size, f.size)
+                                    self._table, k, f_pg_size, f_size)
                             for c in casts:
                                 if (f_pg_type==c[0]) and (f._type==c[1]):
                                     if f_pg_type != f_obj_type:


Follow ups