server/__init__.py
branchstable
changeset 2588 3a590ff82e99
parent 2396 8bfb99d7bbcc
child 2589 92f2bc945261
--- 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