add .gitignore
[tedtools.git] / tbtreetest.c
index a6e96db..124d733 100644 (file)
@@ -41,7 +41,24 @@ static void
 usage() {
        puts(
        "Usage:\n"
-       "tbtreetest [ -c CACHESIZE ] [-r] [-k] [-f FILE] [-D | -L | -b | -i KEY -v VALUE [ -S strategynumber ] | -d KEY | -s KEY ] [-V]\n"
+       "tbtreetest [ -c CACHESIZE ] [-r] [-k] [-f FILE] [-D | -L | -z | -b | -i KEY -v VALUE [ -S strategynumber ] | -d KEY | -s KEY ] [-V] [-q]\n"
+       "\t-c CACHESIZE    - cache size in pages (default 0)\n"
+       "\t-r              - readonly mode\n"
+       "\t-k              - fixed size key (integer)\n"
+       "\t-f FILE         - db-file (default ./BTREE)");
+       puts(
+       "\t-D              - dump data base\n"
+        "\t-L              - list all pairs (in bulk format)\n"
+        "\t-z              - list first and last pairs\n"
+       "\t-b              - bulk operations from stdin in format (insert/delete/search):\n"
+       "\t                   I KEY VALUE\n"
+       "\t                   D KEY\n"
+       "\t                   S KEY\n"
+       "\t-i KEY -v VALUE - insert KEY/VALUE\n"
+       "\t-d KEY          - delete key\n"
+       "\t-s KEY          - search key\n"
+       "\t-V              - print page read/writes at the end\n"
+       "\t-q              - do not print results of searches\n"
        );
        exit(1);
 }
@@ -49,12 +66,14 @@ usage() {
 extern char *optarg;
 extern int opterr;
 
+#define MODE_NO        0
 #define MODE_SEARCH    1
 #define MODE_INSERT    2
 #define MODE_DELETE    3
 #define MODE_DUMP      4
 #define MODE_LIST      5
 #define MODE_BULK      6
+#define MODE_FL                7
 
 
 static TBTValue K,V;
@@ -104,14 +123,17 @@ main(int argn, char *argv[]) {
        int rc=0;
        char *file="BTREE";
        char *key=NULL, *val=NULL;
-       int mode=0, verbose=0;
+       int mode=MODE_NO, verbose=0, quietout=0;
 
        opentlog(TL_OPEN_STDERR,TL_DEBUG, NULL);
 
        memset(&db, 0, sizeof(TBTree));
 
-       while((i=getopt(argn,argv,"VbS:Dc:hrkf:i:v:d:s:L")) != EOF) {
+       while((i=getopt(argn,argv,"qVbS:Dc:hrkf:i:v:d:s:Lz")) != EOF) {
                switch(i) {
+                       case 'q':
+                               quietout=1;
+                               break;
                        case 'V':
                                verbose=1;
                                break;
@@ -157,6 +179,9 @@ main(int argn, char *argv[]) {
                        case 'b':
                                mode=MODE_BULK;
                                break;
+                       case 'z':
+                               mode=MODE_FL;
+                               break;
                        case 'h':
                        default:
                                usage();
@@ -164,8 +189,11 @@ main(int argn, char *argv[]) {
                }
        }
        
-       db.cmpkey = (db.keylen) ? cmpINT : cmpSTR;
+       if ( mode==MODE_NO )
+               usage();
                        
+       db.cmpkey = (db.keylen) ? cmpINT : cmpSTR;
+       
        if ( (rc=TBTOpen(&db, file))!= TBT_OK )
                exit(1);
 
@@ -214,6 +242,28 @@ main(int argn, char *argv[]) {
 
                }
                TBTFreeIterator(&db, &iterator);
+       } else if ( mode==MODE_FL ) {
+               TBTValue key, value;
+               rc = TBTGetFirst(&db, &key, &value);
+               if ( key.value ) {
+                       if ( db.keylen )
+                               printf("%d", *(int*)(key.value));
+                       else 
+                               printLSTR(key.length, key.value);
+                       fputc('\t', stdout);
+                       printLSTR(value.length, value.value);
+                       fputc('\n', stdout);
+               }
+               rc |= TBTGetLast(&db, &key, &value);
+               if ( key.value ) {
+                       if ( db.keylen )
+                               printf("%d", *(int*)(key.value));
+                       else 
+                               printLSTR(key.length, key.value);
+                       fputc('\t', stdout);
+                       printLSTR(value.length, value.value);
+                       fputc('\n', stdout);
+               }
        } else if ( mode==MODE_BULK ) {
                char buf[TBTREEPAGESIZE];
                int tmp;
@@ -251,7 +301,7 @@ main(int argn, char *argv[]) {
                                }
                                if ( *buf == 'D' ) {
                                        rc=TBTDelete(&db, &key);
-                               } else if ( (rc=TBTFind(&db, &key, &value))==TBT_OK ) {
+                               } else if ( (rc=TBTFind(&db, &key, &value))==TBT_OK && quietout==0) {
                                        if ( db.keylen )
                                                printf("%d", *(int*)(key.value));
                                        else