Minor improvements

This commit is contained in:
2019-04-05 21:19:08 +02:00
parent cd9bfb8ffe
commit b1ce4ecf64
5 changed files with 61 additions and 26 deletions

View File

@@ -72,6 +72,6 @@ qint64 GzipDevice::writeData(const char *data, qint64 len)
{ {
Q_UNUSED(data) Q_UNUSED(data)
Q_UNUSED(len) Q_UNUSED(len)
qFatal("no writes allowed in GzipDevice!"); throw std::runtime_error("writing not allowed!");
return -1; return -1;
} }

View File

@@ -1,22 +1,19 @@
#include "mainwindow.h" #include "mainwindow.h"
#include "ui_mainwindow.h" #include "ui_mainwindow.h"
#include <QSqlRelationalDelegate>
#include <QSqlQuery> #include <QSqlQuery>
#include <QSqlError> #include <QSqlError>
#include <QSqlRelationalTableModel>
#include <QMessageBox> #include <QMessageBox>
#include <QStringBuilder> #include <QStringBuilder>
#include <QMenu> #include <QMenu>
#include <QAction> #include <QAction>
#include <QDateTime> #include <QDateTime>
#include <QSqlRecord>
#include <QSqlRelation>
#include <QDebug> #include <QDebug>
#include "wizard/importwizard.h" #include "wizard/importwizard.h"
#include "dialogs/opendialog.h" #include "dialogs/opendialog.h"
#include "dialogs/graphdialog.h" #include "dialogs/graphdialog.h"
#include "models/sqlrelationaltablemodel.h"
MainWindow::MainWindow(QWidget *parent) : MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), QMainWindow(parent),
@@ -40,8 +37,6 @@ MainWindow::MainWindow(QWidget *parent) :
connect(m_ui->lineEdit, &QLineEdit::returnPressed, this, &MainWindow::updateQuery); connect(m_ui->lineEdit, &QLineEdit::returnPressed, this, &MainWindow::updateQuery);
connect(m_ui->pushButton, &QPushButton::pressed, this, &MainWindow::updateQuery); connect(m_ui->pushButton, &QPushButton::pressed, this, &MainWindow::updateQuery);
m_ui->tableView->setItemDelegate(new QSqlRelationalDelegate(m_ui->tableView));
connect(m_ui->tableView, &QWidget::customContextMenuRequested, this, &MainWindow::showContextMenu); connect(m_ui->tableView, &QWidget::customContextMenuRequested, this, &MainWindow::showContextMenu);
} }
@@ -61,7 +56,6 @@ void MainWindow::newClicked()
m_database = wizard.database(); m_database = wizard.database();
setupModel(); setupModel();
updateQuery();
} }
} }
@@ -79,7 +73,6 @@ void MainWindow::openClicked()
m_database = dialog.database(); m_database = dialog.database();
setupModel(); setupModel();
updateQuery();
} }
} }
@@ -105,16 +98,57 @@ void MainWindow::graphClicked()
void MainWindow::updateQuery() void MainWindow::updateQuery()
{ {
auto filter = m_ui->lineEdit->text(); QString sql = "SELECT "
"`Logs`.`ID` AS ID, "
"`Logs`.`Timestamp` AS ID, "
"`Hosts`.`Name` AS Host, "
"`Processes`.`Name` AS Process, "
"`Filenames`.`Name` AS Filename, "
"`Threads`.`Name` AS Thread, "
"`Types`.`Name` AS Type, "
"`Logs`.`Message` AS Message "
"FROM "
"`Logs` "
"LEFT JOIN "
"`Hosts` "
"ON "
"`Logs`.`HostID` = `Hosts`.`ID` "
"LEFT JOIN "
"`Processes` "
"ON "
"`Logs`.`ProcessID` = `Processes`.`ID` "
"LEFT JOIN "
"`Filenames` "
"ON "
"`Logs`.`FilenameID` = `Filenames`.`ID` "
"LEFT JOIN "
"`Threads` "
"ON "
"`Logs`.`ThreadID` = `Threads`.`ID` "
"LEFT JOIN "
"`Types` "
"ON "
"`Logs`.`TypeID` = `Types`.`ID` ";
auto filter = m_ui->lineEdit->text().replace("||", "OR").replace("&&", "AND");
if (!filter.trimmed().isEmpty()) if (!filter.trimmed().isEmpty())
{ {
filter.replace("||", "OR"); sql.append("WHERE ");
filter.replace("&&", "AND"); sql.append(filter);
m_model->setFilter(filter);
} }
if (!m_model->select()) sql.append("ORDER BY "
QMessageBox::warning(this, tr("Query failed!"), tr("Query failed!") % "\n\n" % m_model->query().lastError().text()); "`Logs`.`Timestamp` ASC;");
QSqlQuery query(sql, m_database);
if (query.lastError().isValid())
{
QMessageBox::warning(this, tr("Query failed!"), tr("Query failed!") % "\n\n" % query.lastError().text());
return;
}
m_model->setQuery(query);
} }
void MainWindow::showColumns() void MainWindow::showColumns()
@@ -140,7 +174,6 @@ void MainWindow::showContextMenu(const QPoint &pos)
QMenu menu(this); QMenu menu(this);
const auto exec = [this,&menu,&pos](){ return menu.exec(m_ui->tableView->viewport()->mapToGlobal(pos)); }; const auto exec = [this,&menu,&pos](){ return menu.exec(m_ui->tableView->viewport()->mapToGlobal(pos)); };
qDebug() << m_model->record(index.row()).value(2);
const auto data = m_model->data(index, Qt::EditRole).toString(); const auto data = m_model->data(index, Qt::EditRole).toString();
switch (index.column()) switch (index.column())
@@ -204,13 +237,8 @@ void MainWindow::showContextMenu(const QPoint &pos)
void MainWindow::setupModel() void MainWindow::setupModel()
{ {
m_ui->tableView->setModel(nullptr); m_ui->tableView->setModel(nullptr);
m_model = std::make_unique<SqlRelationalTableModel>(this, m_database); m_model = std::make_unique<QSqlQueryModel>(this);
m_model->setTable("Logs"); updateQuery();
m_model->setRelation(ColumnHost, QSqlRelation("Hosts", "ID", "Name"));
m_model->setRelation(ColumnProcess, QSqlRelation("Processes", "ID", "Name"));
m_model->setRelation(ColumnFilename, QSqlRelation("Filenames", "ID", "Name"));
m_model->setRelation(ColumnThread, QSqlRelation("Threads", "ID", "Name"));
m_model->setRelation(ColumnType, QSqlRelation("Types", "ID", "Name"));
m_ui->tableView->setModel(m_model.get()); m_ui->tableView->setModel(m_model.get());
m_ui->tableView->setColumnHidden(ColumnID, true); m_ui->tableView->setColumnHidden(ColumnID, true);
showColumns(); showColumns();

View File

@@ -5,7 +5,7 @@
#include <memory> #include <memory>
class QSqlRelationalTableModel; class QSqlQueryModel;
namespace Ui { class MainWindow; } namespace Ui { class MainWindow; }
@@ -34,5 +34,5 @@ private:
const std::unique_ptr<Ui::MainWindow> m_ui; const std::unique_ptr<Ui::MainWindow> m_ui;
QSqlDatabase m_database; QSqlDatabase m_database;
std::unique_ptr<QSqlRelationalTableModel> m_model; std::unique_ptr<QSqlQueryModel> m_model;
}; };

View File

@@ -44,12 +44,18 @@
<property name="contextMenuPolicy"> <property name="contextMenuPolicy">
<enum>Qt::CustomContextMenu</enum> <enum>Qt::CustomContextMenu</enum>
</property> </property>
<property name="autoScroll">
<bool>false</bool>
</property>
<property name="editTriggers"> <property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set> <set>QAbstractItemView::NoEditTriggers</set>
</property> </property>
<property name="showGrid"> <property name="showGrid">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="wordWrap">
<bool>false</bool>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
@@ -60,7 +66,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>965</width> <width>965</width>
<height>20</height> <height>18</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menu_File"> <widget class="QMenu" name="menu_File">

View File

@@ -6,6 +6,7 @@
#include <QVariant> #include <QVariant>
#include <utility> #include <utility>
#include <memory>
#include "gzipdevice.h" #include "gzipdevice.h"