|
@@ -90,6 +90,19 @@ class PostgresqlDatabase(Database):
|
|
|
rid = self._cur.fetchone()[0]
|
|
|
return rid
|
|
|
|
|
|
+ def _setnodetags(self, nodeid, tags):
|
|
|
+ for tag in tags:
|
|
|
+ tid = self._get_or_create_tag(tag)
|
|
|
+ self._update_tag_lookup(nodeid, tid)
|
|
|
+
|
|
|
+ def _get_node_tags(self, node):
|
|
|
+ pass
|
|
|
+
|
|
|
+ def _update_tag_lookup(self, nodeid, tid):
|
|
|
+ sql_lookup = "INSERT INTO LOOKUP(nodeid, tagid) VALUES(%s, %s)"
|
|
|
+ self._cur.execute(sql_lookup, (nodeid, tid))
|
|
|
+ self._con.commit()
|
|
|
+
|
|
|
def _clean_orphans(self):
|
|
|
clean = ("delete from tag where not exists "
|
|
|
"(select 'x' from lookup l where l.tagid = tag.id)")
|
|
@@ -123,11 +136,12 @@ class PostgresqlDatabase(Database):
|
|
|
|
|
|
def add_node(self, node):
|
|
|
sql = ("INSERT INTO NODE(USERNAME, PASSWORD, URL, NOTES)"
|
|
|
- "VALUES(%s, %s, %s, %s)")
|
|
|
+ "VALUES(%s, %s, %s, %s) RETURNING ID")
|
|
|
node_tags = list(node)
|
|
|
node, tags = node_tags[:4], node_tags[-1]
|
|
|
self._cur.execute(sql, (node))
|
|
|
- #self._setnodetags(self._cur.lastrowid, tags)
|
|
|
+ nid = self._cur.fetchone()[0]
|
|
|
+ self._setnodetags(nid, tags)
|
|
|
self._con.commit()
|
|
|
|
|
|
def getnodes(self, ids):
|
|
@@ -143,8 +157,13 @@ class PostgresqlDatabase(Database):
|
|
|
|
|
|
return nodes_w_tags
|
|
|
|
|
|
- def removenodes(self, nodes):
|
|
|
- pass
|
|
|
+ def removenodes(self, nid):
|
|
|
+ # shall we do this also in the sqlite driver?
|
|
|
+ sql_clean = "DELETE FROM LOOKUP WHERE NODEID=%s"
|
|
|
+ self._cur.execute(sql_clean, nid)
|
|
|
+ sql_rm = "delete from node where id = %s"
|
|
|
+ self._cur.execute(sql_rm, nid)
|
|
|
+ self._con.commit()
|
|
|
|
|
|
def listtags(self):
|
|
|
self._clean_orphans()
|