--- a/server/schemahooks.py Thu May 28 11:37:27 2009 +0200
+++ b/server/schemahooks.py Thu May 28 15:09:35 2009 +0200
@@ -188,7 +188,7 @@
DeleteCWRTypeOp(session, name)
-class DelErdefOp(SchemaOperation):
+class DelRelationDefOp(SchemaOperation):
"""actually remove the relation definition from the application's schema"""
def commit_event(self):
subjtype, rtype, objtype = self.kobj
@@ -237,7 +237,7 @@
# if this is the last instance, drop associated relation type
if lastrel and not rteid in pendings:
execute('DELETE CWRType X WHERE X eid %(x)s', {'x': rteid}, 'x')
- DelErdefOp(session, (subjschema, rschema, objschema))
+ DelRelationDefOp(session, (subjschema, rschema, objschema))
# addition ####################################################################
@@ -562,7 +562,7 @@
self.session.repo.schema.rename_entity_type(self.oldname, self.newname)
-class UpdateRdefOp(SchemaOperation):
+class UpdateRelationDefOp(SchemaOperation):
"""actually update some properties of a relation definition"""
rschema = values = None # make pylint happy
@@ -576,6 +576,19 @@
sysource.create_index(self.session, table, column)
else:
sysource.drop_index(self.session, table, column)
+ if 'cardinality' in self.values and self.rschema.is_final():
+ if self.session.pool.source('system').dbdriver == 'sqlite':
+ # not supported (and NOT NULL not set by yams in that case, so
+ # no worry)
+ return
+ sqlexec = self.session.system_sql
+ etype, rtype = self.kobj[0], self.rschema.type
+ if self.values['cardinality'][0] == '1':
+ cmd = 'SET'
+ else:
+ cmd = 'DROP'
+ sqlexec('ALTER TABLE %s ALTER COLUMN %s %s NOT NULL' % (
+ table, SQL_PREFIX + etype, SQL_PREFIX + rtype))
def commit_event(self):
# structure should be clean, not need to remove entity's relations
@@ -596,8 +609,8 @@
newvalues[prop] = entity[prop]
if newvalues:
subjtype = entity.from_entity[0].name
- UpdateRdefOp(session, (subjtype, desttype), rschema=rschema,
- values=newvalues)
+ UpdateRelationDefOp(session, (subjtype, desttype),
+ rschema=rschema, values=newvalues)
class UpdateRtypeOp(SchemaOperation):