[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
--- 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()