14 |
14 |
15 from yams.schema import BASE_TYPES |
15 from yams.schema import BASE_TYPES |
16 from yams.buildobjs import EntityType, RelationType, RelationDefinition |
16 from yams.buildobjs import EntityType, RelationType, RelationDefinition |
17 from yams.schema2sql import eschema2sql, rschema2sql, type_from_constraints |
17 from yams.schema2sql import eschema2sql, rschema2sql, type_from_constraints |
18 |
18 |
|
19 from logilab.common.decorators import clear_cache |
19 |
20 |
20 from cubicweb import ValidationError, RepositoryError |
21 from cubicweb import ValidationError, RepositoryError |
21 from cubicweb.schema import META_RTYPES, VIRTUAL_RTYPES, CONSTRAINTS |
22 from cubicweb.schema import META_RTYPES, VIRTUAL_RTYPES, CONSTRAINTS |
22 from cubicweb.server import schemaserial as ss |
23 from cubicweb.server import schemaserial as ss |
23 from cubicweb.server.sqlutils import SQL_PREFIX |
24 from cubicweb.server.sqlutils import SQL_PREFIX |
132 |
133 |
133 def __init__(self, session): |
134 def __init__(self, session): |
134 self.repo = session.repo |
135 self.repo = session.repo |
135 SingleLastOperation.__init__(self, session) |
136 SingleLastOperation.__init__(self, session) |
136 |
137 |
|
138 def precommit_event(self): |
|
139 for eschema in self.repo.schema.entities(): |
|
140 if not eschema.final: |
|
141 clear_cache(eschema, 'ordered_relations') |
|
142 |
137 def commit_event(self): |
143 def commit_event(self): |
138 rebuildinfered = self.session.data.get('rebuild-infered', True) |
144 rebuildinfered = self.session.data.get('rebuild-infered', True) |
139 self.repo.set_schema(self.repo.schema, rebuildinfered=rebuildinfered) |
145 self.repo.set_schema(self.repo.schema, rebuildinfered=rebuildinfered) |
|
146 |
|
147 def rollback_event(self): |
|
148 self.precommit_event() |
140 |
149 |
141 |
150 |
142 class MemSchemaOperation(Operation): |
151 class MemSchemaOperation(Operation): |
143 """base class for schema operations""" |
152 """base class for schema operations""" |
144 def __init__(self, session, kobj=None, **kwargs): |
153 def __init__(self, session, kobj=None, **kwargs): |