#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; }