From 33cf39b79912b21bc8e20d06060e746f8ed055e6 Mon Sep 17 00:00:00 2001 From: Eelke Klein Date: Thu, 5 Oct 2017 16:02:06 +0200 Subject: [PATCH] Mogelijkheid om query to kopieren als raw c++ string. --- src/CMakeLists.txt | 2 ++ src/pglab/ASyncDBConnection.cpp | 5 ++--- src/pglab/CMakeLists.txt | 1 + src/pglab/MainWindow.cpp | 10 ++++++++- src/pglab/MainWindow.h | 1 + src/pglab/MainWindow.ui | 16 +++++++++++++- src/pglab/QueryTab.cpp | 38 ++++++++++++++++++++++----------- src/pglab/QueryTab.h | 4 +++- src/pglab/util.cpp | 10 +++++++++ src/pglab/util.h | 1 + 10 files changed, 70 insertions(+), 18 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7bff55f..6ef11ab 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -68,6 +68,8 @@ set_property(TARGET gtest PROPERTY IMPORTED_LOCATION ${GTEST_LIBRARIES}) find_package(Threads) +add_definitions(-DQT_USE_QSTRINGBUILDER) + enable_testing() add_subdirectory(core) diff --git a/src/pglab/ASyncDBConnection.cpp b/src/pglab/ASyncDBConnection.cpp index 4892327..f40c4e4 100644 --- a/src/pglab/ASyncDBConnection.cpp +++ b/src/pglab/ASyncDBConnection.cpp @@ -78,6 +78,7 @@ void ASyncDBConnection::async_connect_handler(boost::system::error_code ec, std: } } + void ASyncDBConnection::doStateCallback(State state) { m_state = state; @@ -87,9 +88,7 @@ void ASyncDBConnection::doStateCallback(State state) [this](const PGresult *result) { processNotice(result); }); } emit onStateChanged(state); -} - - +} void ASyncDBConnection::closeConnection() diff --git a/src/pglab/CMakeLists.txt b/src/pglab/CMakeLists.txt index ae14441..d6a1072 100644 --- a/src/pglab/CMakeLists.txt +++ b/src/pglab/CMakeLists.txt @@ -10,6 +10,7 @@ add_executable(pglab ASyncWindow.cpp BackupDialog.cpp BackupRestore.cpp + CodeBuilderConfiguration.cpp ConnectionConfig.cpp ConnectionList.cpp ConnectionListModel.cpp diff --git a/src/pglab/MainWindow.cpp b/src/pglab/MainWindow.cpp index aa4f038..75b6720 100644 --- a/src/pglab/MainWindow.cpp +++ b/src/pglab/MainWindow.cpp @@ -253,7 +253,6 @@ void MainWindow::on_actionCopy_triggered() } - void MainWindow::on_actionCopy_as_C_string_triggered() { // Find which edit is active, copy the selected text or all text if no selection present @@ -264,3 +263,12 @@ void MainWindow::on_actionCopy_as_C_string_triggered() tab->copyQueryAsCString(); } } + + +void MainWindow::on_actionCopy_as_raw_Cpp_string_triggered() +{ + QueryTab *tab = GetActiveQueryTab(); + if (tab) { + tab->copyQueryAsRawCppString(); + } +} diff --git a/src/pglab/MainWindow.h b/src/pglab/MainWindow.h index 4359dad..0d4c4d9 100644 --- a/src/pglab/MainWindow.h +++ b/src/pglab/MainWindow.h @@ -82,6 +82,7 @@ private slots: void on_actionShow_connection_manager_triggered(); void on_actionCopy_triggered(); void on_actionCopy_as_C_string_triggered(); + void on_actionCopy_as_raw_Cpp_string_triggered(); }; #endif // MAINWINDOW_H diff --git a/src/pglab/MainWindow.ui b/src/pglab/MainWindow.ui index d3e2cf3..9ae5b3c 100644 --- a/src/pglab/MainWindow.ui +++ b/src/pglab/MainWindow.ui @@ -45,7 +45,7 @@ 0 0 993 - 24 + 22 @@ -89,6 +89,7 @@ + @@ -287,6 +288,19 @@ Ctrl+Alt+C + + + + :/icons/token_shortland_character.png + + + + Copy as raw C++-string + + + Ctrl+Alt+C + + diff --git a/src/pglab/QueryTab.cpp b/src/pglab/QueryTab.cpp index 6d4d10f..c0ff2f2 100644 --- a/src/pglab/QueryTab.cpp +++ b/src/pglab/QueryTab.cpp @@ -200,7 +200,7 @@ void QueryTab::execute() clearResult(); ui->messagesEdit->clear(); - std::string cmd = getCommand(); + std::string cmd = getCommandUtf8(); m_stopwatch.start(); if (m_queryParamListController->empty()) @@ -232,7 +232,7 @@ void QueryTab::explain(bool analyze) analyze_str = "ANALYZE, "; } m_stopwatch.start(); - std::string cmd = "EXPLAIN (" + analyze_str + "VERBOSE, BUFFERS, FORMAT JSON) " + getCommand(); + std::string cmd = "EXPLAIN (" + analyze_str + "VERBOSE, BUFFERS, FORMAT JSON) " + getCommandUtf8(); m_dbConnection.send(cmd, [this](Expected> exp_res, qint64 ) { @@ -449,7 +449,7 @@ void QueryTab::explain_ready(ExplainRoot::SPtr explain) } } -std::string QueryTab::getCommand() const +QString QueryTab::getCommand() const { QString command; QTextCursor cursor = ui->queryEdit->textCursor(); @@ -459,7 +459,12 @@ std::string QueryTab::getCommand() const else { command = ui->queryEdit->toPlainText(); } - return command.toUtf8().data(); + return command; +} + +std::string QueryTab::getCommandUtf8() const +{ + return getCommand().toUtf8().data(); } QTabWidget *QueryTab::getTabWidget() @@ -571,18 +576,27 @@ void QueryTab::clearResult() void QueryTab::copyQueryAsCString() { - QString command; - QTextCursor cursor = ui->queryEdit->textCursor(); - if (cursor.hasSelection()) { - command = cursor.selection().toPlainText(); - } - else { - command = ui->queryEdit->toPlainText(); - } +// QString command; +// QTextCursor cursor = ui->queryEdit->textCursor(); +// if (cursor.hasSelection()) { +// command = cursor.selection().toPlainText(); +// } +// else { +// command = ui->queryEdit->toPlainText(); +// } + QString command = getCommand(); QString cs = ConvertToMultiLineCString(command); QApplication::clipboard()->setText(cs); } +void QueryTab::copyQueryAsRawCppString() +{ + //auto sql = getAllOrSelectedSql(); + QString command = getCommand(); + QString cs = ConvertToMultiLineRawCppString(command); + QApplication::clipboard()->setText(cs); +} + void QueryTab::exportData(const QString &file_name) { auto widget = ui->tabWidget->currentWidget(); diff --git a/src/pglab/QueryTab.h b/src/pglab/QueryTab.h index d8b973e..2d874a6 100644 --- a/src/pglab/QueryTab.h +++ b/src/pglab/QueryTab.h @@ -67,6 +67,7 @@ public: bool canClose(); void copyQueryAsCString(); + void copyQueryAsRawCppString(); void exportData(const QString &filename); QString fileName() const { return m_fileName; } @@ -103,7 +104,8 @@ private: void addLog(QString s); - std::string getCommand() const; + QString getCommand() const; + std::string getCommandUtf8() const; void explain_ready(ExplainRoot::SPtr explain); void query_ready(Expected> dbres, qint64 elapsedms); diff --git a/src/pglab/util.cpp b/src/pglab/util.cpp index ae4bb71..ca97004 100644 --- a/src/pglab/util.cpp +++ b/src/pglab/util.cpp @@ -136,3 +136,13 @@ QString ConvertToMultiLineCString(const QString &in) } +QString ConvertToMultiLineRawCppString(const QString &in) +{ + const QString delim = "__SQL__"; + + QString out; + out.append("R\"" + delim + "(\n"); + out.append(in.trimmed()); + out.append("\n)" + delim + "\""); + return out; +} diff --git a/src/pglab/util.h b/src/pglab/util.h index e25c4f1..90d1fbb 100644 --- a/src/pglab/util.h +++ b/src/pglab/util.h @@ -8,6 +8,7 @@ QString msfloatToHumanReadableString(float ms); void copySelectionToClipboard(const QTableView *view); QString ConvertToMultiLineCString(const QString &in); +QString ConvertToMultiLineRawCppString(const QString &in); void exportTable(const QTableView *view, QTextStream &out); inline QString stdStrToQ(const std::string &s)