lib/my_db.py
branchxbelweb
changeset 45 c81d480c3224
parent 44 87f94936990d
child 47 2781ac85b807
--- 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