- fields = self.conn.execute("""SELECT name from field""").fetchall()
- if not fname in fields:
- self.conn.execute("""INSERT INTO field values((SELECT max(id)
- FROM field)+1, ?)""", (fname,))
+ # update STRUCT table
+ name = entry[TOPLEVEL_FIELD][0]
+ parent_id = execute("SELECT id FROM struct WHERE name=? ", \
+ (name,)).fetchone()
+ if parent_id is None: # update STRUCT table (TOPLEVEL_FIELD)
+ execute("INSERT INTO struct values(NULL,?,0)", (name,))
+ parent_id = execute("SELECT last_insert_rowid()").fetchone()[0]
+ else:
+ parent_id = parent_id[0]
+
+ name = entry[MIDDLELEVEL_FIELD][0]
+ child_id = execute("SELECT id FROM struct WHERE name=? AND parent=?", \
+ (name, parent_id)).fetchone()
+ if child_id is None: # update STRUCT table (MIDDLELEVEL_FIELD)
+ execute("INSERT INTO struct values(NULL,?,?)", (name, parent_id))
+ child_id = execute("SELECT last_insert_rowid()").fetchone()[0]
+ else:
+ child_id = child_id[0]
+
+ # update RELATION table
+ execute("INSERT INTO relation values(?,?)", (_id, child_id))
+
+ def get_folders(self, parent=None):
+ """
+ Returns list of all folders (items with folders and files)
+ from STRUCT table.
+ """
+
+ if parent is None: # return all folders on level2
+ return self.conn.execute("SELECT DISTINCT name, id FROM struct \
+ WHERE parent!=0 ORDER BY name ASC").fetchall()
+ else:
+ return self.conn.execute("SELECT DISTINCT name, id FROM struct \
+ WHERE parent=? ORDER BY name ASC", (parent,)).fetchall()