| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 | //  Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.//  This source code is licensed under both the GPLv2 (found in the//  COPYING file in the root directory) and Apache 2.0 License//  (found in the LICENSE.Apache file in the root directory).#ifndef ROCKSDB_LITE#include <getopt.h>#include <cstdio>#include <string>#include <unordered_map>#include "utilities/blob_db/blob_dump_tool.h"using namespace ROCKSDB_NAMESPACE;using namespace ROCKSDB_NAMESPACE::blob_db;int main(int argc, char** argv) {  using DisplayType = BlobDumpTool::DisplayType;  const std::unordered_map<std::string, DisplayType> display_types = {      {"none", DisplayType::kNone},      {"raw", DisplayType::kRaw},      {"hex", DisplayType::kHex},      {"detail", DisplayType::kDetail},  };  const struct option options[] = {      {"help", no_argument, nullptr, 'h'},      {"file", required_argument, nullptr, 'f'},      {"show_key", optional_argument, nullptr, 'k'},      {"show_blob", optional_argument, nullptr, 'b'},      {"show_uncompressed_blob", optional_argument, nullptr, 'r'},      {"show_summary", optional_argument, nullptr, 's'},  };  DisplayType show_key = DisplayType::kRaw;  DisplayType show_blob = DisplayType::kNone;  DisplayType show_uncompressed_blob = DisplayType::kNone;  bool show_summary = false;  std::string file;  while (true) {    int c = getopt_long(argc, argv, "hk::b::f:", options, nullptr);    if (c < 0) {      break;    }    std::string arg_str(optarg ? optarg : "");    switch (c) {      case 'h':        fprintf(stdout,                "Usage: blob_dump --file=filename "                "[--show_key[=none|raw|hex|detail]] "                "[--show_blob[=none|raw|hex|detail]] "                "[--show_uncompressed_blob[=none|raw|hex|detail]] "                "[--show_summary]\n");        return 0;      case 'f':        file = optarg;        break;      case 'k':        if (optarg) {          if (display_types.count(arg_str) == 0) {            fprintf(stderr, "Unrecognized key display type.\n");            return -1;          }          show_key = display_types.at(arg_str);        }        break;      case 'b':        if (optarg) {          if (display_types.count(arg_str) == 0) {            fprintf(stderr, "Unrecognized blob display type.\n");            return -1;          }          show_blob = display_types.at(arg_str);        } else {          show_blob = DisplayType::kHex;        }        break;      case 'r':        if (optarg) {          if (display_types.count(arg_str) == 0) {            fprintf(stderr, "Unrecognized blob display type.\n");            return -1;          }          show_uncompressed_blob = display_types.at(arg_str);        } else {          show_uncompressed_blob = DisplayType::kHex;        }        break;      case 's':        show_summary = true;        break;      default:        fprintf(stderr, "Unrecognized option.\n");        return -1;    }  }  BlobDumpTool tool;  Status s =      tool.Run(file, show_key, show_blob, show_uncompressed_blob, show_summary);  if (!s.ok()) {    fprintf(stderr, "Failed: %s\n", s.ToString().c_str());    return -1;  }  return 0;}#else#include <stdio.h>int main(int /*argc*/, char** /*argv*/) {  fprintf(stderr, "Not supported in lite mode.\n");  return -1;}#endif  // ROCKSDB_LITE
 |