185 lines
5.5 KiB
C++
185 lines
5.5 KiB
C++
#include "tableform.h"
|
|
#include "ui_tableform.h"
|
|
|
|
#include <QtSql>
|
|
#include <QTableWidgetItem>
|
|
#include <QMainWindow>
|
|
#include <QStatusBar>
|
|
#include <Qsci/qscilexersql.h>
|
|
|
|
TableForm::TableForm(QWidget *parent) :
|
|
QWidget(parent),
|
|
ui(new Ui::TableForm)
|
|
{
|
|
QsciLexerSQL *lexer = new QsciLexerSQL();
|
|
lexer->setDefaultPaper(QColor(255, 255, 255));
|
|
lexer->setDefaultColor(QColor(0, 0, 0));
|
|
lexer->setDefaultFont(QFont("monospace"));
|
|
for (int i = -1; i < 23; i++)
|
|
{
|
|
lexer->setPaper(QColor(255, 255, 255), i);
|
|
//lexer->setDefaultColor(QColor(0, 0, 0));
|
|
lexer->setFont(QFont("monospace"), i);
|
|
}
|
|
ui->setupUi(this);
|
|
ui->QueryTextEdit->setLexer(lexer);
|
|
m_QueryModel = 0;
|
|
}
|
|
|
|
TableForm::~TableForm()
|
|
{
|
|
delete m_QueryModel;
|
|
delete m_DataModel;
|
|
delete ui;
|
|
}
|
|
|
|
void TableForm::changeEvent(QEvent *e)
|
|
{
|
|
QWidget::changeEvent(e);
|
|
switch (e->type()) {
|
|
case QEvent::LanguageChange:
|
|
ui->retranslateUi(this);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
void TableForm::setColumns()
|
|
{
|
|
QSqlQuery query;
|
|
if (m_Database.driverName() == "QPSQL")
|
|
{
|
|
query = QSqlQuery("SELECT * FROM \"" + m_TableName + "\" LIMIT 1", m_Database);
|
|
// SELECT column_name, column_default, is_nullable, data_type, character_maximum_length FROM information_schema.columns WHERE table_name = "" ORDER BY ordinal_position
|
|
}
|
|
else if (m_Database.driverName() == "MYSQL")
|
|
{
|
|
query = QSqlQuery("SELECT * FROM `" + m_TableName + "` LIMIT 1", m_Database);
|
|
// SELECT COLUMN_NAME AS column_name, COLUMN_DEFAULT AS column_default, IS_NULLABLE AS is_nullable, DATA_TYPE AS data_type, CHARACTER_MAXIMUM_LENGTH AS character_maximum_length FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = "" ORDER BY ordinal_position
|
|
}
|
|
else if (m_Database.driverName() == "SQLITE")
|
|
{
|
|
query = QSqlQuery("SELECT * FROM '" + m_TableName + "'' LIMIT 1", m_Database);
|
|
// SELECT
|
|
}
|
|
QSqlRecord record = query.record();
|
|
ui->StructureTableWidget->setRowCount(record.count());
|
|
for (int i = 0; i < record.count(); i++)
|
|
{
|
|
QSqlField field = record.field(i);
|
|
QTableWidgetItem *nameItem = new QTableWidgetItem(field.name());
|
|
QString typeName = QVariant::typeToName(field.type());
|
|
QTableWidgetItem *typeItem = new QTableWidgetItem(typeName + " - " + QString::number(field.type()));
|
|
QTableWidgetItem *sizeItem;
|
|
if (field.length() >= 0)
|
|
{
|
|
sizeItem = new QTableWidgetItem(QString::number(field.length()));
|
|
}
|
|
else if (field.precision() >= 0)
|
|
{
|
|
sizeItem = new QTableWidgetItem(QString::number(field.precision()));
|
|
}
|
|
else
|
|
{
|
|
sizeItem = new QTableWidgetItem("");
|
|
}
|
|
QTableWidgetItem *nullItem;
|
|
if (field.requiredStatus() == 1)
|
|
{
|
|
nullItem = new QTableWidgetItem("not null");
|
|
}
|
|
else if (field.requiredStatus() == 0)
|
|
{
|
|
nullItem = new QTableWidgetItem("nullable");
|
|
}
|
|
else
|
|
{
|
|
nullItem = new QTableWidgetItem("unknown");
|
|
}
|
|
ui->StructureTableWidget->setItem(i, 0, nameItem);
|
|
ui->StructureTableWidget->setItem(i, 1, typeItem);
|
|
ui->StructureTableWidget->setItem(i, 2, sizeItem);
|
|
ui->StructureTableWidget->setItem(i, 3, nullItem);
|
|
}
|
|
ui->StructureTableWidget->resizeColumnsToContents();
|
|
}
|
|
|
|
void TableForm::setTable(const QString connectionName, const QString tableName)
|
|
{
|
|
QMainWindow * mainWindow = qobject_cast<QMainWindow*>(window());
|
|
if (mainWindow)
|
|
{
|
|
mainWindow->statusBar()->showMessage("Opening table \"" + tableName + "\"...");
|
|
}
|
|
QCoreApplication::processEvents();
|
|
m_ConnectionName = connectionName;
|
|
m_TableName = tableName;
|
|
m_Database = QSqlDatabase::database(m_ConnectionName);
|
|
this->setColumns();
|
|
m_DataModel = new QSqlTableModel(this, m_Database);
|
|
m_DataModel->setTable(m_TableName);
|
|
ui->DataTableView->setModel(m_DataModel);
|
|
if (mainWindow)
|
|
{
|
|
mainWindow->statusBar()->clearMessage();
|
|
}
|
|
}
|
|
|
|
void TableForm::on_DataCommitAction_triggered()
|
|
{
|
|
if (m_DataModel)
|
|
{
|
|
m_DataModel->database().commit();
|
|
}
|
|
ui->DataCommitAction->setEnabled(false);
|
|
ui->DataRollbackAction->setEnabled(false);
|
|
}
|
|
|
|
void TableForm::on_DataRefreshAction_triggered()
|
|
{
|
|
QMainWindow * mainWindow = qobject_cast<QMainWindow*>(window());
|
|
if (mainWindow)
|
|
{
|
|
mainWindow->statusBar()->showMessage("Fetching results from \"" + m_TableName + "\"...");
|
|
}
|
|
m_DataModel->select();
|
|
ui->DataTableView->resizeColumnsToContents();
|
|
if (mainWindow)
|
|
{
|
|
mainWindow->statusBar()->clearMessage();
|
|
}
|
|
}
|
|
|
|
void TableForm::on_QueryRunAction_triggered()
|
|
{
|
|
QMainWindow * mainWindow = qobject_cast<QMainWindow*>(window());
|
|
if (mainWindow)
|
|
{
|
|
mainWindow->statusBar()->showMessage("Running query...");
|
|
}
|
|
QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
|
|
QCoreApplication::processEvents();
|
|
QString query = "";
|
|
if (m_QueryModel == 0)
|
|
{
|
|
m_QueryModel = new QSqlQueryModel;
|
|
}
|
|
if (ui->QueryTextEdit->hasSelectedText())
|
|
{
|
|
query = ui->QueryTextEdit->selectedText();
|
|
}
|
|
else
|
|
{
|
|
query = ui->QueryTextEdit->text();
|
|
}
|
|
m_QueryModel->setQuery(query, m_Database);
|
|
ui->ResultsTableView->setModel(m_QueryModel);
|
|
ui->ResultsTableView->resizeColumnsToContents();
|
|
QApplication::restoreOverrideCursor();
|
|
if (mainWindow)
|
|
{
|
|
mainWindow->statusBar()->clearMessage();
|
|
}
|
|
}
|