X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;ds=sidebyside;f=cinelerra-5.1%2Fdb%2Ftx.C;fp=cinelerra-5.1%2Fdb%2Ftx.C;h=f7a8141eba8221e5cb7a6b44aebcf6b5360bfb6c;hb=d8506a82d13c3179b5a30c985e6e2045304e95cf;hp=0000000000000000000000000000000000000000;hpb=6de130cc1507ac18b76d8e992f9cc82a293280a5;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/db/tx.C b/cinelerra-5.1/db/tx.C new file mode 100644 index 00000000..f7a8141e --- /dev/null +++ b/cinelerra-5.1/db/tx.C @@ -0,0 +1,110 @@ +#include +#include +#include +#include +#include +#include + +#include "txs.h" + +// create, modify, list db as set of text lines +// ./a.out new /tmp/x.db +// ./a.out add /tmp/x.db < /data/add.txt +// ./a.out del /tmp/x.db < /data/del.txt +// ./a.out get /tmp/x.db < /data/get.txt +// ./a.out lst /tmp/x.db > /data/dat.txt + +/* first, paste this +./xsch theDb txs <create(av[2]); + delete db; + return 0; + } + + db = new theDb(); + if( db->open(av[2]) < 0 ) exit(1); + + int64_t n = 0; + + if( !strcmp(av[1],"add") ) { + while( fgets(line,sizeof(line),stdin) ) { + if( !line[0] ) continue; + int l = strlen(line); + line[l-1] = 0; + int ret = ItemData(db->item,ItemKey(line,l)).Find(); + if( !ret ) continue; // duplicate + db->item.Allocate(); + db->item.Data((unsigned char *)line, l); + db->item.Construct(); + ++n; + } + db->commit(); + } + else if( !strcmp(av[1],"del") ) { + while( fgets(line,sizeof(line),stdin) ) { + if( !line[0] ) continue; + int l = strlen(line); + line[l-1] = 0; + int ret = ItemData(db->item,ItemKey(line,l)).Find(); + if( ret ) continue; // not found + db->item.Destruct(); + db->item.Deallocate(); + ++n; + } + db->commit(); + } + else if( !strcmp(av[1],"get") ) { + while( fgets(line,sizeof(line),stdin) ) { + if( !line[0] ) continue; + int l = strlen(line); + line[l-1] = 0; + int ret = ItemData(db->item,ItemKey(line,l)).Find(); + if( ret ) continue; + printf("%s\n", (char*)db->item.Data()); + ++n; + } + } + else if( !strcmp(av[1],"lst") ) { + if( !DataItem(db->item).First() ) do { + printf("%s\n", (char*)db->item.Data()); + ++n; + } while( !DataItem(db->item).Next() ); + } + else { + fprintf(stderr, "unknown cmd %s\n must be new,add,del,get,lst\n", av[1]); + exit(1); + } + + fprintf(stderr, "%jd items input\n", n); + fprintf(stderr, "%d items in db\n", db->Item.Count()); + db->close(); + delete db; + return 0; +} +