X-Git-Url: https://pd.if.org/git/?p=btree;a=blobdiff_plain;f=btree2s.c;h=19ad3beb64436ce60d78a7e03327f2c2c06895cc;hp=14d9825284a3e307547b43fa75d82c1655444512;hb=392e5f08cc164c87e56153aa78a740f93325750e;hpb=d0d119d25d6be90d70146d863798c93fb07b115a diff --git a/btree2s.c b/btree2s.c index 14d9825..19ad3be 100644 --- a/btree2s.c +++ b/btree2s.c @@ -1844,6 +1844,7 @@ time_t tod[1]; uint scan = 0; uint len = 0; uint map = 0; +uid page_no; BtKey ptr; BtDb *bt; FILE *in; @@ -1946,9 +1947,55 @@ FILE *in; break; case 's': - scan++; - break; + cnt = len = key[0] = 0; + + if( slot = bt_startkey (bt, key, len) ) + slot--; + else + fprintf(stderr, "Error %d in StartKey. Syserror: %d\n", bt->err, errno), exit(0); + + while( slot = bt_nextkey (bt, slot) ) { + ptr = bt_key(bt, slot); + fwrite (ptr->key, ptr->len, 1, stdout); + fputc ('\n', stdout); + cnt++; + } + + fprintf(stderr, " Total keys read %d\n", cnt - 1); + break; + + case 'c': + fprintf(stderr, "started counting\n"); + cnt = 0; + + page_no = LEAF_page; + cnt = 0; + + while( 1 ) { + uid off = page_no << bt->page_bits; +#ifdef unix + if( !pread (bt->idx, bt->frame, bt->page_size, off) ) + break; +#else + DWORD amt[1]; + + SetFilePointer (bt->idx, (long)off, (long*)(&off)+1, FILE_BEGIN); + if( !ReadFile(bt->idx, bt->frame, bt->page_size, amt, NULL)) + break; + + if( *amt < bt->page_size ) + fprintf (stderr, "unable to read page %.8x", page_no); +#endif + if( !bt->frame->free && !bt->frame->lvl ) + cnt += bt->frame->act; + + page_no++; + } + + cnt--; // remove stopper key + fprintf(stderr, " Total keys read %d\n", cnt); + break; } done = getCpuTime(0); @@ -1959,24 +2006,6 @@ FILE *in; elapsed = getCpuTime(2); fprintf(stderr, " sys %dm%.3fs\n", (int)(elapsed/60), elapsed - (int)(elapsed/60)*60); - dead = cnt = 0; - len = key[0] = 0; - - fprintf(stderr, "started reading\n"); - - if( slot = bt_startkey (bt, key, len) ) - slot--; - else - fprintf(stderr, "Error %d in StartKey. Syserror: %d\n", bt->err, errno), exit(0); - - while( slot = bt_nextkey (bt, slot) ) - if( cnt++, scan ) { - ptr = bt_key(bt, slot); - fwrite (ptr->key, ptr->len, 1, stdout); - fputc ('\n', stdout); - } - - fprintf(stderr, " Total keys read %d\n", cnt); return 0; }