# HG changeset patch # User Sylvain Thénault # Date 1249042733 -7200 # Node ID 3a590ff82e99e1c998c4156c38a3a4eb95c6948c # Parent 79bbc5045288860a7d45d3e06515a06b38ce6a4c [F schema serial] #344876: missing some 'is'/'is_instance_of' relation for newly created instances diff -r 79bbc5045288 -r 3a590ff82e99 misc/migration/3.3.5_Any.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/misc/migration/3.3.5_Any.py Fri Jul 31 14:18:53 2009 +0200 @@ -0,0 +1,8 @@ +# some entities have been added before schema entities, fix the 'is' and +# 'is_instance_of' relations +for rtype in ('is', 'is_instance_of'): + sql('INSERT INTO %s_relation ' + 'SELECT X.eid, ET.cw_eid FROM entities as X, cw_CWEType as ET ' + 'WHERE X.type=ET.cw_name AND NOT EXISTS(' + ' SELECT 1 from is_relation ' + ' WHERE eid_from=X.eid AND eid_to=ET.cw_eid)' % rtype) diff -r 79bbc5045288 -r 3a590ff82e99 server/__init__.py --- a/server/__init__.py Fri Jul 31 12:04:32 2009 +0200 +++ b/server/__init__.py Fri Jul 31 14:18:53 2009 +0200 @@ -92,14 +92,11 @@ else: login, pwd = unicode(source['db-user']), source['db-password'] print '-> inserting default user and default groups.' - needisfix = [] for group in BASEGROUPS: rset = session.execute('INSERT CWGroup X: X name %(name)s', {'name': unicode(group)}) - needisfix.append( (rset.rows[0][0], rset.description[0][0]) ) rset = session.execute('INSERT CWUser X: X login %(login)s, X upassword %(pwd)s', {'login': login, 'pwd': pwd}) - needisfix.append( (rset.rows[0][0], rset.description[0][0]) ) session.execute('SET U in_group G WHERE G name "managers"') session.commit() # reloging using the admin user @@ -109,13 +106,6 @@ handler = config.migration_handler(schema, interactive=False, cnx=cnx, repo=repo) initialize_schema(config, schema, handler) - # admin user and groups have been added before schema entities, fix the 'is' - # relation - for eid, etype in needisfix: - handler.session.unsafe_execute('SET X is E WHERE X eid %(x)s, E name %(name)s', - {'x': eid, 'name': etype}, 'x') - handler.session.unsafe_execute('SET X is_instance_of E WHERE X eid %(x)s, E name %(name)s', - {'x': eid, 'name': etype}, 'x') # insert versions handler.cmd_add_entity('CWProperty', pkey=u'system.version.cubicweb', value=unicode(config.cubicweb_version())) @@ -123,6 +113,15 @@ handler.cmd_add_entity('CWProperty', pkey=u'system.version.%s' % cube.lower(), value=unicode(config.cube_version(cube))) + # some entities have been added before schema entities, fix the 'is' and + # 'is_instance_of' relations + for rtype in ('is', 'is_instance_of'): + handler.sqlexec( + 'INSERT INTO %s_relation ' + 'SELECT X.eid, ET.cw_eid FROM entities as X, cw_CWEType as ET ' + 'WHERE X.type=ET.cw_name AND NOT EXISTS(' + ' SELECT 1 from is_relation ' + ' WHERE eid_from=X.eid AND eid_to=ET.cw_eid)' % rtype) # yoo ! cnx.commit() config.enabled_sources = None diff -r 79bbc5045288 -r 3a590ff82e99 server/test/unittest_repository.py --- a/server/test/unittest_repository.py Fri Jul 31 12:04:32 2009 +0200 +++ b/server/test/unittest_repository.py Fri Jul 31 14:18:53 2009 +0200 @@ -324,6 +324,10 @@ self.assertRaises(BadConnectionId, repo.set_shared_data, cnxid, 'data', 0) self.assertRaises(BadConnectionId, repo.get_shared_data, cnxid, 'data') + def test_schema_is_relation(self): + no_is_rset = self.execute('Any X WHERE NOT X is ET') + self.failIf(no_is_rset, no_is_rset.description) + class DataHelpersTC(RepositoryBasedTC):