[migration] Improve update of in-memory schema during 3.18 CWAttribute.defaultval change stable
authorJulien Cristau <julien.cristau@logilab.fr>
Wed, 26 Mar 2014 11:08:09 +0100
branchstable
changeset 9589 7e4897901c64
parent 9588 fe267b7336f3
child 9590 048d6de92b63
[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
misc/migration/3.18.0_Any.py
--- a/misc/migration/3.18.0_Any.py	Thu Mar 27 14:32:21 2014 +0100
+++ b/misc/migration/3.18.0_Any.py	Wed Mar 26 11:08:09 2014 +0100
@@ -74,7 +74,12 @@
 rql('SET X to_entity B WHERE X is CWAttribute, X from_entity Y, Y name "CWAttribute", '
     'X relation_type Z, Z name "defaultval", B name "Bytes", NOT X to_entity B')
 
-schema['defaultval'].rdefs.values()[0].object = schema['Bytes']
+oldrdef = schema['CWAttribute'].rdef('defaultval')
+import yams.buildobjs as ybo
+newrdef = ybo.RelationDefinition('CWAttribute', 'defaultval', 'Bytes')
+newrdef.eid = oldrdef.eid
+schema.add_relation_def(newrdef)
+schema.del_relation_def('CWAttribute', 'defaultval', 'String')
 
 commit()