Added export of data in CSV format.

This commit is contained in:
Eelke Klein 2017-02-05 13:35:41 +01:00
parent df866d7b67
commit 073c62048f
7 changed files with 56 additions and 3 deletions

View file

@ -127,10 +127,14 @@ void MainWindow::on_actionSave_copy_of_SQL_as_triggered()
void MainWindow::on_actionExport_data_triggered() void MainWindow::on_actionExport_data_triggered()
{ {
QueryTab *tab = GetActiveQueryTab();
if (tab) {
QString home_dir = QStandardPaths::locate(QStandardPaths::HomeLocation, "", QStandardPaths::LocateDirectory); QString home_dir = QStandardPaths::locate(QStandardPaths::HomeLocation, "", QStandardPaths::LocateDirectory);
QString file_name = QFileDialog::getSaveFileName(this, QString file_name = QFileDialog::getSaveFileName(this,
tr("Export data"), home_dir, tr("CSV file (*.csv)")); tr("Export data"), home_dir, tr("CSV file (*.csv)"));
tab->exportData(file_name);
}
} }
void MainWindow::on_actionClose_triggered() void MainWindow::on_actionClose_triggered()

View file

@ -565,3 +565,13 @@ void QueryTab::copyQueryAsCString()
QString cs = ConvertToMultiLineCString(command); QString cs = ConvertToMultiLineCString(command);
QApplication::clipboard()->setText(cs); QApplication::clipboard()->setText(cs);
} }
void QueryTab::exportData(const QString &file_name)
{
auto widget = ui->tabWidget->currentWidget();
auto fi = std::find(resultList.begin(), resultList.end(), widget);
if (fi != resultList.end()) {
TuplesResultWidget* rw = *fi;
rw->exportData(file_name);
}
}

View file

@ -49,6 +49,7 @@ public:
bool canClose(); bool canClose();
void copyQueryAsCString(); void copyQueryAsCString();
void exportData(const QString &filename);
private: private:
// struct ResultTab { // struct ResultTab {

View file

@ -2,6 +2,9 @@
#include "ui_tuplesresultwidget.h" #include "ui_tuplesresultwidget.h"
#include "util.h" #include "util.h"
#include <QFile>
#include <QTextStream>
TuplesResultWidget::TuplesResultWidget(QWidget *parent) : TuplesResultWidget::TuplesResultWidget(QWidget *parent) :
QWidget(parent), QWidget(parent),
ui(new Ui::TuplesResultWidget) ui(new Ui::TuplesResultWidget)
@ -24,3 +27,14 @@ void TuplesResultWidget::setResult(std::shared_ptr<QueryResultModel> res, float
ui->lblRowCount->setText(rowcount_str); ui->lblRowCount->setText(rowcount_str);
ui->lblElapsedTime->setText(msfloatToHumanReadableString(ms)); ui->lblElapsedTime->setText(msfloatToHumanReadableString(ms));
} }
void TuplesResultWidget::exportData(const QString &file_name) const
{
QFile file(file_name);
if (file.open(QIODevice::WriteOnly)) {
QTextStream out(&file);
::exportTable(ui->ResultView, out);
}
}

View file

@ -17,6 +17,7 @@ public:
~TuplesResultWidget(); ~TuplesResultWidget();
void setResult(std::shared_ptr<QueryResultModel> res, float ms); void setResult(std::shared_ptr<QueryResultModel> res, float ms);
void exportData(const QString &file_name) const;
private: private:
Ui::TuplesResultWidget *ui; Ui::TuplesResultWidget *ui;

View file

@ -53,6 +53,28 @@ QString msfloatToHumanReadableString(float ms)
return result + unit; return result + unit;
} }
void exportTable(const QTableView *view, QTextStream &out)
{
auto model = view->model();
if (model) {
CsvWriter csv(&out);
csv.setSeperator('\t');
csv.setQuote('"');
const int cols = model->columnCount();
const int rows = model->rowCount();
for (int row = 0; row < rows; ++row) {
for (int col = 0; col < cols; ++col) {
auto idx = model->index(row, col);
auto display_text = idx.data(Qt::DisplayRole).toString();
csv.writeField(display_text);
}
csv.nextRow();
}
out.flush();
}
}
void copySelectionToClipboard(const QTableView *view) void copySelectionToClipboard(const QTableView *view)
{ {
//QAbstractItemModel * model = resultModel; //view->model(); //QAbstractItemModel * model = resultModel; //view->model();

1
util.h
View file

@ -7,5 +7,6 @@
QString msfloatToHumanReadableString(float ms); QString msfloatToHumanReadableString(float ms);
void copySelectionToClipboard(const QTableView *view); void copySelectionToClipboard(const QTableView *view);
QString ConvertToMultiLineCString(const QString &in); QString ConvertToMultiLineCString(const QString &in);
void exportTable(const QTableView *view, QTextStream &out);
#endif // UTIL_H #endif // UTIL_H