author | Julien Cristau <julien.cristau@logilab.fr> |
Wed, 16 Mar 2016 11:56:32 +0100 | |
changeset 11215 | 4e79acdc36a6 |
child 11360 | 49aca289134f |
permissions | -rw-r--r-- |
11215
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
1 |
# we changed constraint serialization, which also changes their name |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
2 |
from cubicweb.server.schema2sql import check_constraint |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
3 |
|
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
4 |
helper = repo.system_source.dbhelper |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
5 |
|
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
6 |
for table, cstr in sql(""" |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
7 |
SELECT table_name, constraint_name FROM information_schema.constraint_column_usage |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
8 |
WHERE constraint_name LIKE 'cstr%'"""): |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
9 |
sql("ALTER TABLE %(table)s DROP CONSTRAINT %(cstr)s" % locals()) |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
10 |
|
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
11 |
for cwconstraint in rql('Any C WHERE R constrained_by C').entities(): |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
12 |
cwrdef = cwconstraint.reverse_constrained_by[0] |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
13 |
rdef = cwrdef.yams_schema() |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
14 |
cstr = rdef.constraint_by_eid(cwconstraint.eid) |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
15 |
if cstr.type() not in ('BoundaryConstraint', 'IntervalBoundConstraint', |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
16 |
'StaticVocabularyConstraint'): |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
17 |
# These cannot be translate into backend CHECK. |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
18 |
continue |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
19 |
cstrname, check = check_constraint(rdef.subject, rdef.object, rdef.rtype.type, |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
20 |
cstr, helper, prefix='cw_') |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
21 |
args = {'e': rdef.subject.type, 'c': cstrname, 'v': check} |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
22 |
sql('ALTER TABLE cw_%(e)s ADD CONSTRAINT %(c)s CHECK(%(v)s)' % args) |
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
23 |
|
4e79acdc36a6
[schema] use json to serialize constraints
Julien Cristau <julien.cristau@logilab.fr>
parents:
diff
changeset
|
24 |
commit() |