diff -r 87f94936990d -r c81d480c3224 lib/my_db.py --- a/lib/my_db.py Fri Oct 17 15:05:17 2003 -0400 +++ b/lib/my_db.py Sat Oct 18 00:56:42 2003 -0400 @@ -44,6 +44,14 @@ VALUES ('bookmarks', %d, 0); """ %(id,)) self.crs.execute(""" + INSERT INTO folders(id, keyword, parent, userid) + VALUES (0, 0, -1, %d); + """ %(id,)) + self.crs.execute(""" + INSERT INTO db_sequence(seq_name, userid, nextid) + VALUES ('folders', %d, 1); + """ %(id,)) + self.crs.execute(""" INSERT INTO preferences(userid) VALUES (%d); """ %(id,)) @@ -261,6 +269,68 @@ qry = qry + ';' self.crs.execute(qry) return self.crs.fetchall() + def get_folder_keyword(self, id): + self.crs.execute(""" + SELECT k.id, k.name + FROM keywords k, folders f + WHERE + f.userid = %d AND f.id = %d + AND k.userid = f.userid + AND k.id = f.keyword; + """ %(self.userid, id)) + return self.crs.fetchone() + def get_subfolders(self, id): + self.crs.execute(""" + SELECT f.id, k.id, k.name + FROM folders f, keywords k + WHERE f.userid = %d + AND f.parent = %d + AND k.userid = f.userid + AND k.id = f.keyword + ORDER BY k.name; + """ %(self.userid, id)) + res = self.crs.fetchall() + return map(lambda e: { + 'id' : e[0], + 'name' : e[2], + 'keyword' : e[1] }, + res) + def get_folder_parents_and_self(self, id): + """Return self and parents in descending order.""" + if id < 0: + return [] + self.crs.execute(""" + SELECT f.id, k.id, k.name, f.parent + FROM folders f, keywords k + WHERE + f.id = %d AND f.userid = %d + AND k.userid = f.userid + AND k.id = f.keyword; + """ %(id, self.userid)) + cur = self.crs.fetchone() + res = [{ 'id': cur[0], + 'name' : cur[2], + 'keyword': cur[1] }] + return res + self.get_folder_parents_and_self(cur[3]) + def add_folder(self, keyword, parent): + id = self.get_next_id('folders') + self.crs.execute(""" + INSERT INTO folders(userid, id, keyword, parent) + VALUES (%d, %d, %d, %d); + """ % (self.userid, id, keyword, parent)) + self.cnx.commit() + def remove_folders(self, id, commit = 1): + if id == 0: + raise "Can't erase base folder!" + subs = self.get_subfolders(self, id) + for sub in subs: + self.remove_folder(sub[0], 0) + self.crs.execute(""" + DELETE FROM folders + WHERE id = %d AND userid = %d; + """ % (id, self.userid)) + if commit: + self.cnx.commit() def get_next_id(self, seq_name): if seq_name == 'users': userid = -1