|
|
@@ -43,6 +43,7 @@ int main(const int argc, char *argv[]) { |
|
|
|
opts.allow_mmap_reads = true; |
|
|
|
opts.allow_mmap_writes = true; |
|
|
|
opts.compression = args.compress; |
|
|
|
opts.bottommost_compression = args.compress; |
|
|
|
opts.create_if_missing = true; |
|
|
|
st = args.flag_use_ro() |
|
|
|
? rocksdb::DB::OpenForReadOnly(opts, ".", &db) |
|
|
@@ -90,6 +91,33 @@ int main(const int argc, char *argv[]) { |
|
|
|
} |
|
|
|
break; |
|
|
|
|
|
|
|
AC(PRINT) |
|
|
|
{ |
|
|
|
if(args.cmd_args.size() < 3) |
|
|
|
errmsg(1, "invalid invocation to 'zstreedb2 p BFK BFV AFV'"); |
|
|
|
|
|
|
|
const bool sall = (args.sel_node == "*"); |
|
|
|
const string xpar = args.sel_node + '.'; |
|
|
|
const char *bfk = args.cmd_args[0].c_str(); |
|
|
|
const char *bfv = args.cmd_args[1].c_str(); |
|
|
|
const char *afv = args.cmd_args[2].c_str(); |
|
|
|
const auto it = db->NewIterator({}); |
|
|
|
if(sall) it->SeekToFirst(); |
|
|
|
else it->Seek(xpar); |
|
|
|
for(; it->Valid(); it->Next()) { |
|
|
|
auto tmp = it->key(); |
|
|
|
if(!sall) { |
|
|
|
if(!tmp.starts_with(xpar)) break; |
|
|
|
tmp.remove_prefix(xpar.size()); |
|
|
|
} |
|
|
|
auto val = it->value(); |
|
|
|
printf("%s%.*s%s%.*s%s\n", bfk, static_cast<int>(tmp.size()), tmp.data(), |
|
|
|
bfv, static_cast<int>(val.size()), val.data(), afv); |
|
|
|
} |
|
|
|
delete it; |
|
|
|
} |
|
|
|
break; |
|
|
|
|
|
|
|
AC(MV) |
|
|
|
if(!args.cmd_args.empty() && args.sel_node != args.cmd_args.front()) { |
|
|
|
const auto it = db->NewIterator({}); |
|
|
|