[migration] Improve update of in-memory schema during 3.18 CWAttribute.defaultval change

We weren't updating the schema properly so a bunch of structures still had the old rdef with 'String' as object. That caused failures to add new attributes later in the migration as their default value would be a Binary object but the schema would expect a String.

Closes #3683640

authorJulien Cristau <julien.cristau@logilab.fr>
changeset7e4897901c64
branchstable
phasepublic
hiddenno
parent revision#fe267b7336f3 [migration] always rebuild infered relation
child revision#048d6de92b63 Make EditController edit_entity method always return an eid
files modified by this revision
misc/migration/3.18.0_Any.py
# HG changeset patch
# User Julien Cristau <julien.cristau@logilab.fr>
# Date 1395828489 -3600
# Wed Mar 26 11:08:09 2014 +0100
# Branch stable
# Node ID 7e4897901c6474e818b1805c12ca7b2ec87a7e96
# Parent fe267b7336f308161a812505ce34efad1588d2a7
[migration] Improve update of in-memory schema during 3.18 CWAttribute.defaultval change

We weren't updating the schema properly so a bunch of structures still
had the old rdef with 'String' as object. That caused failures to add
new attributes later in the migration as their default value would be a
Binary object but the schema would expect a String.

Closes #3683640

diff --git a/misc/migration/3.18.0_Any.py b/misc/migration/3.18.0_Any.py
@@ -72,11 +72,16 @@
1 
2  # Set object type to "Bytes" for CWAttribute's "defaultval" attribute
3  rql('SET X to_entity B WHERE X is CWAttribute, X from_entity Y, Y name "CWAttribute", '
4      'X relation_type Z, Z name "defaultval", B name "Bytes", NOT X to_entity B')
5 
6 -schema['defaultval'].rdefs.values()[0].object = schema['Bytes']
7 +oldrdef = schema['CWAttribute'].rdef('defaultval')
8 +import yams.buildobjs as ybo
9 +newrdef = ybo.RelationDefinition('CWAttribute', 'defaultval', 'Bytes')
10 +newrdef.eid = oldrdef.eid
11 +schema.add_relation_def(newrdef)
12 +schema.del_relation_def('CWAttribute', 'defaultval', 'String')
13 
14  commit()
15 
16  sync_schema_props_perms('defaultval')
17