cubicweb/server/test/data-cwep002/schema.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Wed, 18 Jan 2017 15:04:27 +0100
branch3.24
changeset 11904 e760c54490b1
parent 11057 0b59724cb3f2
permissions -rw-r--r--
[migration] Fix addition of entity type including boundary constraints on its own attributes This was failing because of the sequence of sql executing when adding an attribute: 1. add entity type <commit> 2. add relation type for attribute 1 <commit> 3. add attribute 1 and associated constraints <commit> etc. In the case of e.g. start/end constraint, we were trying to add the constraint before addition of the constrained attribute (e.g. add constraint on 'start' referencing 'end', but only 'start' has been added yet, not 'end'). This patch fix this by: * adding the relation type to the schema without having to commit, but keeping the operation to revert the addition if necessary - this allows to a single commit for all attributes of the entity type ; * using a LateOperation on constraint operation, so we ensure attributes are actually added before any constraint is added.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9956
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
     1
# copyright 2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
     3
#
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
     4
# This file is part of CubicWeb.
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
     5
#
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
     9
# any later version.
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    10
#
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    14
# details.
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    15
#
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    18
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    19
from yams.buildobjs import EntityType, RelationDefinition, Int, ComputedRelation
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    20
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    21
class Person(EntityType):
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    22
    salary = Int()
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    23
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    24
class works_for(RelationDefinition):
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    25
    subject = 'Person'
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    26
    object  = 'Company'
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    27
    cardinality = '?*'
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    28
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    29
class Company(EntityType):
9968
50f046bf0e50 [CWEP002] properly handle serialization of computed attributes
Lea Capgen <lea.capgen@logilab.fr>
parents: 9956
diff changeset
    30
    total_salary = Int(formula='Any SUM(SA) GROUPBY X WHERE '
50f046bf0e50 [CWEP002] properly handle serialization of computed attributes
Lea Capgen <lea.capgen@logilab.fr>
parents: 9956
diff changeset
    31
                       'P works_for X, P salary SA')
9956
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    32
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    33
class has_employee(ComputedRelation):
19a683a0047c [CWEP002] properly handle serialization of computed relations
Lea Capgen <lea.capgen@logilab.fr>
parents:
diff changeset
    34
    rule = 'O works_for S'
10553
1d824df4f2bd Fix (de)serialization of ComputedRelation read permissions
Julien Cristau <julien.cristau@logilab.fr>
parents: 9968
diff changeset
    35
    __permissions__ = {'read': ('managers',)}