I thought of another way to do your copy/cut/paste...
Assuming you keep the original audio around and use the levels I showed before. create table sequence(level int,parent int,start int,end end); insert into seqeunce values(1,0,0,-1); // note that -1 means "until end of data". See where I'm going? You keep a sequence table that is much like your btree. It's just a collection of clips that when strung together can make your audio clip. By default you have one sequence per level. Cut 1000-1999 from level=1 select * from sequence where level=1; delete from sequence where level=1; insert into sequence values(1,0,0,999); insert into sequence values(2,1,2000,-1); Insert some data: 1st you find where it fits select * from sequence where level=1; bytes1=0; while moredata bytes2+=end-start; if (insertpoint >=bytes1 and insertpoint <=bytes2) update sequence set id=id+1,parent=parent+1 where id>=currentid; break; end Cuts are just splitting one record in 2, or adjusting 2 records and deleting records in between. I'll leave that as an exercise for you. This would Michael D. Black Senior Scientist NG Information Systems Advanced Analytics Directorate ________________________________ From: sqlite-users-boun...@sqlite.org [sqlite-users-boun...@sqlite.org] on behalf of Christopher Melen [relativef...@hotmail.co.uk] Sent: Sunday, July 10, 2011 12:52 PM To: sqlite-users@sqlite.org Subject: EXT :[sqlite] Storing/editing hierarchical data sets Hi, I am developing an application which analyses audio data, and I have recently been looking into Sqlite as a possible file format. The result of an analysis in my application is a hierarchical data set, where each level in the hierarchy represents a summary of the level below, taking the max of each pair in the sub-level, in the following way: 251 214 251 54 201 214 251 91 17 54 31 201 214 66 251 18 5 91 11 17 54 16 9 31 201 148 173 214 43 66 Such a structure essentially represents the same data set at different levels of resolution ('zoom levels', if you like). My first experiments involved a btree-like structure (actually something closer to an enfilade* or counted btree**), where the data stored in each node is simply a summary of its child nodes. Edits to any node at the leaf level propagate up the tree, whilst large edits simply entail unlinking pointers to subtrees, thus making edits on any scale generally log-like in nature. This works fine as an in-memory structure, but since my data sets might potentially grow fairly large (a few hundred MB at least) I need a disk-based solution. I naively assumed that I might be able to utilize Sqlite's btree layer in order to implement this more effectively; this doesn't seem possible, however, given that the btree layer isn't directly exposed, and in any case it doesn't map onto the user interface in any way that seems helpful for this task. I am aware of some of the ways in which hierarchical or tree-like structures can be represented in a database (adjacency lists, nested sets, materialized paths, etc.), but none of these seems to offer a good solution. What I'm experimenting with at present is the idea of entering each node of the hierarchy into the database as a blob (of say, 1024 bytes), while maintaining a separate in-memory tree which then maps on to this flat database of nodes (each node in the tree maintains a pointer to a node in the database). I would be very interested in thoughts/observations on this problem - or even better a solution! Many thanks in advance, Christopher * http://en.wikipedia.org/wiki/Enfilade_(Xanadu) ** http://www.chiark.greenend.org.uk/~sgtatham/algorithms/cbtree.html _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users