# HG changeset patch # User Sylvain Thénault # Date 1374768896 -7200 # Node ID e9fb9377229e1b7ecd0ce481dd0586052fe92ecc # Parent 4e1946bd9ea2f52e7f86fe76add525dc59b2861a [migration.sync_schema_props_perms] ensure all participants to a unique together constraint are there before adding CWUniqueConstraint. Closes #3038345 diff -r 4e1946bd9ea2 -r e9fb9377229e server/migractions.py --- a/server/migractions.py Thu Jul 25 18:12:28 2013 +0200 +++ b/server/migractions.py Thu Jul 25 18:14:56 2013 +0200 @@ -575,10 +575,24 @@ ' E eid %%(x)s,' ' %s' % ', '.join(restrictions), substs) + def possible_unique_constraint(ut): + for name in ut: + rschema = repoeschema.subjrels.get(name) + if rschema is None: + print 'dont add %s unique constraint on %s, missing %s' % ( + ','.join(ut), eschema, name) + return False + if not (rschema.final or rschema.final.inlined): + (eschema, name) + print 'dont add %s unique constraint on %s, %s is neither final nor inlined' % ( + ','.join(ut), eschema, name) + return False + return True for ut in unique_together - repo_unique_together: - rql, substs = ss.uniquetogether2rql(eschema, ut) - substs['x'] = repoeschema.eid - self.rqlexec(rql, substs) + if possible_unique_constraint(ut): + rql, substs = ss.uniquetogether2rql(eschema, ut) + substs['x'] = repoeschema.eid + self.rqlexec(rql, substs) def _synchronize_rdef_schema(self, subjtype, rtype, objtype, syncperms=True, syncprops=True):