# HG changeset patch # User Ralph Meijer # Date 1099674368 0 # Node ID 7c4dfef5d964ac73a29f7c0796d1141ae39b923d # Parent 62fdb37234e567b71077036ed7b30bb47a43c374 Implement create_node() in Storage. Add NodeCreationService. diff -r 62fdb37234e5 -r 7c4dfef5d964 idavoll/pgsql_backend.py --- a/idavoll/pgsql_backend.py Fri Nov 05 17:05:36 2004 +0000 +++ b/idavoll/pgsql_backend.py Fri Nov 05 17:06:08 2004 +0000 @@ -156,9 +156,45 @@ return None + def create_node(self, node_id, owner): + return self.dbpool.runInteraction(self._create_node, node_id, + owner) + + def _create_node(self, cursor, node_id, owner): + try: + cursor.execute("""INSERT INTO nodes (node) VALUES (%s)""", + (node_id.encode('utf8'))) + except: + raise backend.NodeExists + + cursor.execute("""SELECT 1 from entities where jid=%s""", + (owner.encode('utf8'))) + + if not cursor.fetchone(): + cursor.execute("""INSERT INTO entities (jid) VALUES (%s)""", + (owner.encode('utf8'))) + + try: + cursor.execute("""INSERT INTO affiliations + (node_id, entity_id, affiliation) + SELECT n.id, e.id, 'owner' FROM + (SELECT id FROM nodes WHERE node=%s) AS n + CROSS JOIN + (SELECT id FROM entities WHERE jid=%s) AS e""", + (node_id.encode('utf8'), + owner.encode('utf8'))) + except Exception, e: + print e + + return None + + class BackendService(backend.BackendService): """ PostgreSQL backend Service for a JEP-0060 pubsub service """ +class NodeCreationService(backend.NodeCreationService): + pass + class PublishService(backend.PublishService): pass