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);
}
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;
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;
case 'b':
mode=MODE_BULK;
break;
+ case 'z':
+ mode=MODE_FL;
+ break;
case 'h':
default:
usage();
}
}
- 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);
}
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;
}
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