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] [-q]\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"
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"
#define MODE_DUMP 4
#define MODE_LIST 5
#define MODE_BULK 6
+#define MODE_FL 7
static TBTValue K,V;
memset(&db, 0, sizeof(TBTree));
- while((i=getopt(argn,argv,"qVbS: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;
case 'b':
mode=MODE_BULK;
break;
+ case 'z':
+ mode=MODE_FL;
+ break;
case 'h':
default:
usage();
}
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;