From b73fbbaf64b531b163d1bf0d0f4445b2a86b87de Mon Sep 17 00:00:00 2001 From: Alexander Fenster Date: Mon, 11 Jan 2016 10:51:42 -0800 Subject: [PATCH 1/3] added --no_value option to ldb scan to dump key only --- tools/ldb_cmd.cc | 35 ++++++++++++++++++++++++----------- tools/ldb_cmd.h | 4 +++- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/tools/ldb_cmd.cc b/tools/ldb_cmd.cc index 7ec4690d0..b03a865e5 100644 --- a/tools/ldb_cmd.cc +++ b/tools/ldb_cmd.cc @@ -60,6 +60,7 @@ const string LDBCommand::ARG_DB_WRITE_BUFFER_SIZE = "db_write_buffer_size"; const string LDBCommand::ARG_WRITE_BUFFER_SIZE = "write_buffer_size"; const string LDBCommand::ARG_FILE_SIZE = "file_size"; const string LDBCommand::ARG_CREATE_IF_MISSING = "create_if_missing"; +const string LDBCommand::ARG_NO_VALUE = "no_value"; const char* LDBCommand::DELIM = " ==> "; @@ -1743,12 +1744,13 @@ Options BatchPutCommand::PrepareOptionsForOpenDB() { ScanCommand::ScanCommand(const vector& params, const map& options, const vector& flags) : LDBCommand(options, flags, true, - BuildCmdLineOptions({ARG_TTL, ARG_HEX, ARG_KEY_HEX, ARG_TO, + BuildCmdLineOptions({ARG_TTL, ARG_NO_VALUE, ARG_HEX, ARG_KEY_HEX, ARG_TO, ARG_VALUE_HEX, ARG_FROM, ARG_TIMESTAMP, ARG_MAX_KEYS, ARG_TTL_START, ARG_TTL_END})), start_key_specified_(false), end_key_specified_(false), - max_keys_scanned_(-1) { + max_keys_scanned_(-1), + no_value_(false) { map::const_iterator itr = options.find(ARG_FROM); if (itr != options.end()) { @@ -1767,6 +1769,11 @@ ScanCommand::ScanCommand(const vector& params, end_key_specified_ = true; } + vector::const_iterator vitr = std::find(flags.begin(), flags.end(), ARG_NO_VALUE); + if (vitr != flags.end()) { + no_value_ = true; + } + itr = options.find(ARG_MAX_KEYS); if (itr != options.end()) { try { @@ -1794,6 +1801,7 @@ void ScanCommand::Help(string& ret) { ret.append(" [--" + ARG_MAX_KEYS + "=q] "); ret.append(" [--" + ARG_TTL_START + "=:- is inclusive]"); ret.append(" [--" + ARG_TTL_END + "=:- is exclusive]"); + ret.append(" [--" + ARG_NO_VALUE + "]"); ret.append("\n"); } @@ -1850,16 +1858,21 @@ void ScanCommand::DoCommand() { key_slice = formatted_key; } - std::string formatted_value; - if (is_value_hex_) { - formatted_value = "0x" + val_slice.ToString(true /* hex */); - val_slice = formatted_value; + if (no_value_) { + fprintf(stdout, "%.*s\n", + static_cast(key_slice.size()), key_slice.data()); + } else { + Slice val_slice = it->value(); + std::string formatted_value; + if (is_value_hex_) { + formatted_value = "0x" + val_slice.ToString(true /* hex */); + val_slice = formatted_value; + } + fprintf(stdout, "%.*s : %.*s\n", + static_cast(key_slice.size()), key_slice.data(), + static_cast(val_slice.size()), val_slice.data()); } - - fprintf(stdout, "%.*s : %.*s\n", - static_cast(key_slice.size()), key_slice.data(), - static_cast(val_slice.size()), val_slice.data()); - + num_keys_scanned++; if (max_keys_scanned_ >= 0 && num_keys_scanned >= max_keys_scanned_) { break; diff --git a/tools/ldb_cmd.h b/tools/ldb_cmd.h index 0c048e794..2c1c5e4b1 100644 --- a/tools/ldb_cmd.h +++ b/tools/ldb_cmd.h @@ -60,6 +60,7 @@ public: static const string ARG_WRITE_BUFFER_SIZE; static const string ARG_FILE_SIZE; static const string ARG_CREATE_IF_MISSING; + static const string ARG_NO_VALUE; static LDBCommand* InitFromCmdLineArgs( const vector& args, @@ -377,7 +378,7 @@ private: */ bool StringToBool(string val) { std::transform(val.begin(), val.end(), val.begin(), - [](char ch) -> char { return ::tolower(ch); }); + [](char ch) -> char { return (char)::tolower(ch); }); if (val == "true") { return true; @@ -709,6 +710,7 @@ private: bool start_key_specified_; bool end_key_specified_; int max_keys_scanned_; + bool no_value_; }; class DeleteCommand : public LDBCommand { From e16438bb86f42eb58e3a7495ddd28055a58824e0 Mon Sep 17 00:00:00 2001 From: Alexander Fenster Date: Mon, 11 Jan 2016 11:23:33 -0800 Subject: [PATCH 2/3] fixing build warning --- tools/ldb_cmd.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/tools/ldb_cmd.cc b/tools/ldb_cmd.cc index b03a865e5..bec67a377 100644 --- a/tools/ldb_cmd.cc +++ b/tools/ldb_cmd.cc @@ -1847,7 +1847,6 @@ void ScanCommand::DoCommand() { } Slice key_slice = it->key(); - Slice val_slice = it->value(); std::string formatted_key; if (is_key_hex_) { From f0161c37b08663eff4ae08bb24311e18c4b581a6 Mon Sep 17 00:00:00 2001 From: Alexander Fenster Date: Thu, 10 Mar 2016 13:34:42 -0800 Subject: [PATCH 3/3] formatting fix --- tools/ldb_cmd.cc | 47 +++++++++++++++++++++++++---------------------- tools/ldb_cmd.h | 2 +- 2 files changed, 26 insertions(+), 23 deletions(-) diff --git a/tools/ldb_cmd.cc b/tools/ldb_cmd.cc index bec67a377..2b377e032 100644 --- a/tools/ldb_cmd.cc +++ b/tools/ldb_cmd.cc @@ -1742,15 +1742,17 @@ Options BatchPutCommand::PrepareOptionsForOpenDB() { // ---------------------------------------------------------------------------- ScanCommand::ScanCommand(const vector& params, - const map& options, const vector& flags) : - LDBCommand(options, flags, true, - BuildCmdLineOptions({ARG_TTL, ARG_NO_VALUE, ARG_HEX, ARG_KEY_HEX, ARG_TO, - ARG_VALUE_HEX, ARG_FROM, ARG_TIMESTAMP, - ARG_MAX_KEYS, ARG_TTL_START, ARG_TTL_END})), - start_key_specified_(false), - end_key_specified_(false), - max_keys_scanned_(-1), - no_value_(false) { + const map& options, + const vector& flags) + : LDBCommand(options, flags, true, + BuildCmdLineOptions( + {ARG_TTL, ARG_NO_VALUE, ARG_HEX, ARG_KEY_HEX, + ARG_TO, ARG_VALUE_HEX, ARG_FROM, ARG_TIMESTAMP, + ARG_MAX_KEYS, ARG_TTL_START, ARG_TTL_END})), + start_key_specified_(false), + end_key_specified_(false), + max_keys_scanned_(-1), + no_value_(false) { map::const_iterator itr = options.find(ARG_FROM); if (itr != options.end()) { @@ -1769,7 +1771,8 @@ ScanCommand::ScanCommand(const vector& params, end_key_specified_ = true; } - vector::const_iterator vitr = std::find(flags.begin(), flags.end(), ARG_NO_VALUE); + vector::const_iterator vitr = + std::find(flags.begin(), flags.end(), ARG_NO_VALUE); if (vitr != flags.end()) { no_value_ = true; } @@ -1858,20 +1861,20 @@ void ScanCommand::DoCommand() { } if (no_value_) { - fprintf(stdout, "%.*s\n", - static_cast(key_slice.size()), key_slice.data()); + fprintf(stdout, "%.*s\n", static_cast(key_slice.size()), + key_slice.data()); } else { - Slice val_slice = it->value(); - std::string formatted_value; - if (is_value_hex_) { - formatted_value = "0x" + val_slice.ToString(true /* hex */); - val_slice = formatted_value; - } - fprintf(stdout, "%.*s : %.*s\n", - static_cast(key_slice.size()), key_slice.data(), - static_cast(val_slice.size()), val_slice.data()); + Slice val_slice = it->value(); + std::string formatted_value; + if (is_value_hex_) { + formatted_value = "0x" + val_slice.ToString(true /* hex */); + val_slice = formatted_value; + } + fprintf(stdout, "%.*s : %.*s\n", static_cast(key_slice.size()), + key_slice.data(), static_cast(val_slice.size()), + val_slice.data()); } - + num_keys_scanned++; if (max_keys_scanned_ >= 0 && num_keys_scanned >= max_keys_scanned_) { break; diff --git a/tools/ldb_cmd.h b/tools/ldb_cmd.h index 2c1c5e4b1..b21be4a3d 100644 --- a/tools/ldb_cmd.h +++ b/tools/ldb_cmd.h @@ -378,7 +378,7 @@ private: */ bool StringToBool(string val) { std::transform(val.begin(), val.end(), val.begin(), - [](char ch) -> char { return (char)::tolower(ch); }); + [](char ch)->char { return (char)::tolower(ch); }); if (val == "true") { return true;