mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-27 01:51:59 +00:00
Add ability to automatically comment SQL queries in clickhouse-client/local
This is like Alt-# in readline, it is useful when you need to look something else, and need to save current query/command somewhere, and commented lin the history is a good option. Signed-off-by: Azat Khuzhin <a.khuzhin@semrush.com>
This commit is contained in:
parent
583c530d0f
commit
569b4bb631
@ -220,6 +220,35 @@ ReplxxLineReader::ReplxxLineReader(
|
|||||||
rx.bind_key(Replxx::KEY::control('W'), [this](char32_t code) { return rx.invoke(Replxx::ACTION::KILL_TO_WHITESPACE_ON_LEFT, code); });
|
rx.bind_key(Replxx::KEY::control('W'), [this](char32_t code) { return rx.invoke(Replxx::ACTION::KILL_TO_WHITESPACE_ON_LEFT, code); });
|
||||||
|
|
||||||
rx.bind_key(Replxx::KEY::meta('E'), [this](char32_t) { openEditor(); return Replxx::ACTION_RESULT::CONTINUE; });
|
rx.bind_key(Replxx::KEY::meta('E'), [this](char32_t) { openEditor(); return Replxx::ACTION_RESULT::CONTINUE; });
|
||||||
|
|
||||||
|
/// readline insert-comment
|
||||||
|
auto insert_comment_action = [this](char32_t code)
|
||||||
|
{
|
||||||
|
replxx::Replxx::State state(rx.get_state());
|
||||||
|
const char * line = state.text();
|
||||||
|
const char * line_end = line + strlen(line);
|
||||||
|
|
||||||
|
std::string commented_line;
|
||||||
|
if (std::find(line, line_end, '\n') != line_end)
|
||||||
|
{
|
||||||
|
/// If query has multiple lines, multiline comment is used over
|
||||||
|
/// commenting each line separately for easier uncomment (though
|
||||||
|
/// with invoking editor it is simpler to uncomment multiple lines)
|
||||||
|
///
|
||||||
|
/// Note, that using multiline comment is OK even with nested
|
||||||
|
/// comments, since nested comments are supported.
|
||||||
|
commented_line = fmt::format("/* {} */", state.text());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// In a simplest case use simple comment.
|
||||||
|
commented_line = fmt::format("-- {}", state.text());
|
||||||
|
}
|
||||||
|
rx.set_state(replxx::Replxx::State(commented_line.c_str(), commented_line.size()));
|
||||||
|
|
||||||
|
return rx.invoke(Replxx::ACTION::COMMIT_LINE, code);
|
||||||
|
};
|
||||||
|
rx.bind_key(Replxx::KEY::meta('#'), insert_comment_action);
|
||||||
}
|
}
|
||||||
|
|
||||||
ReplxxLineReader::~ReplxxLineReader()
|
ReplxxLineReader::~ReplxxLineReader()
|
||||||
|
Loading…
Reference in New Issue
Block a user