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
@@ -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)