smaller "margins" when multilining items
This commit is contained in:
parent
bbf1f5bed1
commit
6bc7b9796b
@ -441,7 +441,7 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QFontMetrics fm(data(idx, Qt::ItemDataRole::FontRole).value<QFont>());
|
QFontMetrics fm(data(idx, Qt::ItemDataRole::FontRole).value<QFont>());
|
||||||
auto rct = fm.boundingRect(QRect(QPoint(0, 0), QPoint(wd - 20, 100000)),
|
auto rct = fm.boundingRect(QRect(QPoint(0, 0), QPoint(wd - 10, 100000)),
|
||||||
Qt::TextFlag::TextWordWrap |
|
Qt::TextFlag::TextWordWrap |
|
||||||
Qt::AlignmentFlag::AlignLeft |
|
Qt::AlignmentFlag::AlignLeft |
|
||||||
Qt::AlignmentFlag::AlignVCenter,
|
Qt::AlignmentFlag::AlignVCenter,
|
||||||
|
@ -8,10 +8,48 @@
|
|||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QRegularExpression>
|
#include <QRegularExpression>
|
||||||
|
#include <QSqlError>
|
||||||
|
#include <QSqlQuery>
|
||||||
|
|
||||||
DatabaseDriver::DatabaseDriver(QObject* parent) : QObject(parent)
|
DatabaseDriver::DatabaseDriver(QObject* parent) : QObject(parent)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
bool DatabaseDriver::updateDatabaseSchema(QSqlQuery& query,
|
||||||
|
int source_db_schema_version,
|
||||||
|
const QString& database_name) {
|
||||||
|
const int current_version = QSL(APP_DB_SCHEMA_VERSION).toInt();
|
||||||
|
|
||||||
|
while (source_db_schema_version != current_version) {
|
||||||
|
try {
|
||||||
|
const QStringList statements = prepareScript(APP_SQL_PATH,
|
||||||
|
QSL(APP_DB_UPDATE_FILE_PATTERN).arg(ddlFilePrefix(),
|
||||||
|
QString::number(source_db_schema_version),
|
||||||
|
QString::number(source_db_schema_version + 1)),
|
||||||
|
database_name);
|
||||||
|
|
||||||
|
for (const QString& statement : statements) {
|
||||||
|
if (!query.exec(statement) && query.lastError().isValid()) {
|
||||||
|
throw ApplicationException(query.lastError().text());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (const ApplicationException& ex) {
|
||||||
|
qFatal("Error when running SQL scripts: %s.", qPrintable(ex.message()));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Increment the version.
|
||||||
|
qDebugNN << LOGSEC_DB
|
||||||
|
<< "Updating database schema "
|
||||||
|
<< QUOTE_W_SPACE(source_db_schema_version)
|
||||||
|
<< "->"
|
||||||
|
<< QUOTE_W_SPACE_DOT(source_db_schema_version + 1);
|
||||||
|
|
||||||
|
source_db_schema_version++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
QStringList DatabaseDriver::prepareScript(const QString& base_sql_folder,
|
QStringList DatabaseDriver::prepareScript(const QString& base_sql_folder,
|
||||||
const QString& sql_file,
|
const QString& sql_file,
|
||||||
const QString& database_name) {
|
const QString& database_name) {
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
#include <QSqlDatabase>
|
#include <QSqlDatabase>
|
||||||
|
#include <QSqlQuery>
|
||||||
|
|
||||||
class DatabaseDriver : public QObject {
|
class DatabaseDriver : public QObject {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -31,6 +32,7 @@ class DatabaseDriver : public QObject {
|
|||||||
virtual QString location() const = 0;
|
virtual QString location() const = 0;
|
||||||
virtual QString humanDriverType() const = 0;
|
virtual QString humanDriverType() const = 0;
|
||||||
virtual QString qtDriverCode() const = 0;
|
virtual QString qtDriverCode() const = 0;
|
||||||
|
virtual QString ddlFilePrefix() const = 0;
|
||||||
virtual DriverType driverType() const = 0;
|
virtual DriverType driverType() const = 0;
|
||||||
virtual QString autoIncrementPrimaryKey() const = 0;
|
virtual QString autoIncrementPrimaryKey() const = 0;
|
||||||
virtual QString blob() const = 0;
|
virtual QString blob() const = 0;
|
||||||
@ -44,6 +46,10 @@ class DatabaseDriver : public QObject {
|
|||||||
DatabaseDriver::DesiredStorageType desired_type = DatabaseDriver::DesiredStorageType::FromSettings) = 0;
|
DatabaseDriver::DesiredStorageType desired_type = DatabaseDriver::DesiredStorageType::FromSettings) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
bool updateDatabaseSchema(QSqlQuery& query,
|
||||||
|
int source_db_schema_version,
|
||||||
|
const QString& database_name = {});
|
||||||
|
|
||||||
QStringList prepareScript(const QString& base_sql_folder,
|
QStringList prepareScript(const QString& base_sql_folder,
|
||||||
const QString& sql_file,
|
const QString& sql_file,
|
||||||
const QString& database_name = {});
|
const QString& database_name = {});
|
||||||
|
@ -13,6 +13,10 @@
|
|||||||
|
|
||||||
MariaDbDriver::MariaDbDriver(QObject* parent) : DatabaseDriver(parent), m_databaseInitialized(false) {}
|
MariaDbDriver::MariaDbDriver(QObject* parent) : DatabaseDriver(parent), m_databaseInitialized(false) {}
|
||||||
|
|
||||||
|
QString MariaDbDriver::ddlFilePrefix() const {
|
||||||
|
return QSL("mysql");
|
||||||
|
}
|
||||||
|
|
||||||
MariaDbDriver::MariaDbError MariaDbDriver::testConnection(const QString& hostname, int port,
|
MariaDbDriver::MariaDbError MariaDbDriver::testConnection(const QString& hostname, int port,
|
||||||
const QString& w_database, const QString& username,
|
const QString& w_database, const QString& username,
|
||||||
const QString& password) {
|
const QString& password) {
|
||||||
@ -189,9 +193,9 @@ QSqlDatabase MariaDbDriver::initializeDatabase(const QString& connection_name) {
|
|||||||
else {
|
else {
|
||||||
// Database was previously initialized. Now just check the schema version.
|
// Database was previously initialized. Now just check the schema version.
|
||||||
query_db.next();
|
query_db.next();
|
||||||
const QString installed_db_schema = query_db.value(0).toString();
|
const int installed_db_schema = query_db.value(0).toString().toInt();
|
||||||
|
|
||||||
if (installed_db_schema.toInt() < QSL(APP_DB_SCHEMA_VERSION).toInt()) {
|
if (installed_db_schema < QSL(APP_DB_SCHEMA_VERSION).toInt()) {
|
||||||
if (updateDatabaseSchema(query_db, installed_db_schema, database_name)) {
|
if (updateDatabaseSchema(query_db, installed_db_schema, database_name)) {
|
||||||
qDebugNN << LOGSEC_DB
|
qDebugNN << LOGSEC_DB
|
||||||
<< "Database schema was updated from"
|
<< "Database schema was updated from"
|
||||||
@ -202,7 +206,7 @@ QSqlDatabase MariaDbDriver::initializeDatabase(const QString& connection_name) {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
qFatal("Database schema was not updated from '%s' to '%s' successully.",
|
qFatal("Database schema was not updated from '%s' to '%s' successully.",
|
||||||
qPrintable(installed_db_schema),
|
qPrintable(QString::number(installed_db_schema)),
|
||||||
APP_DB_SCHEMA_VERSION);
|
APP_DB_SCHEMA_VERSION);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -220,43 +224,6 @@ void MariaDbDriver::setPragmas(QSqlQuery& query) {
|
|||||||
query.exec(QSL("SET CHARACTER SET utf8mb4;"));
|
query.exec(QSL("SET CHARACTER SET utf8mb4;"));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MariaDbDriver::updateDatabaseSchema(QSqlQuery& query,
|
|
||||||
const QString& source_db_schema_version,
|
|
||||||
const QString& database_name) {
|
|
||||||
int working_version = QString(source_db_schema_version).remove('.').toInt();
|
|
||||||
const int current_version = QSL(APP_DB_SCHEMA_VERSION).remove('.').toInt();
|
|
||||||
|
|
||||||
while (working_version != current_version) {
|
|
||||||
try {
|
|
||||||
const QStringList statements = prepareScript(APP_SQL_PATH,
|
|
||||||
QSL(APP_DB_UPDATE_FILE_PATTERN).arg(QSL("mysql"),
|
|
||||||
QString::number(working_version),
|
|
||||||
QString::number(working_version + 1)),
|
|
||||||
database_name);
|
|
||||||
|
|
||||||
for (const QString& statement : statements) {
|
|
||||||
if (!query.exec(statement) && query.lastError().isValid()) {
|
|
||||||
throw ApplicationException(query.lastError().text());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (const ApplicationException& ex) {
|
|
||||||
qFatal("Error when running SQL scripts: %s.", qPrintable(ex.message()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Increment the version.
|
|
||||||
qDebugNN << LOGSEC_DB
|
|
||||||
<< "Updating database schema "
|
|
||||||
<< QUOTE_W_SPACE(working_version)
|
|
||||||
<< "->"
|
|
||||||
<< QUOTE_W_SPACE_DOT(working_version + 1);
|
|
||||||
|
|
||||||
working_version++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
QSqlDatabase MariaDbDriver::connection(const QString& connection_name, DatabaseDriver::DesiredStorageType desired_type) {
|
QSqlDatabase MariaDbDriver::connection(const QString& connection_name, DatabaseDriver::DesiredStorageType desired_type) {
|
||||||
Q_UNUSED(desired_type)
|
Q_UNUSED(desired_type)
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ class MariaDbDriver : public DatabaseDriver {
|
|||||||
virtual QString location() const;
|
virtual QString location() const;
|
||||||
virtual QString humanDriverType() const;
|
virtual QString humanDriverType() const;
|
||||||
virtual QString qtDriverCode() const;
|
virtual QString qtDriverCode() const;
|
||||||
|
virtual QString ddlFilePrefix() const;
|
||||||
virtual DriverType driverType() const;
|
virtual DriverType driverType() const;
|
||||||
virtual bool vacuumDatabase();
|
virtual bool vacuumDatabase();
|
||||||
virtual bool saveDatabase();
|
virtual bool saveDatabase();
|
||||||
@ -42,9 +43,6 @@ class MariaDbDriver : public DatabaseDriver {
|
|||||||
QString interpretErrorCode(MariaDbError error_code) const;
|
QString interpretErrorCode(MariaDbError error_code) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool updateDatabaseSchema(QSqlQuery& query,
|
|
||||||
const QString& source_db_schema_version,
|
|
||||||
const QString& database_name);
|
|
||||||
QSqlDatabase initializeDatabase(const QString& connection_name);
|
QSqlDatabase initializeDatabase(const QString& connection_name);
|
||||||
|
|
||||||
void setPragmas(QSqlQuery& query);
|
void setPragmas(QSqlQuery& query);
|
||||||
|
@ -35,6 +35,10 @@ bool SqliteDriver::vacuumDatabase() {
|
|||||||
return query_vacuum.exec(QSL("VACUUM"));
|
return query_vacuum.exec(QSL("VACUUM"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString SqliteDriver::ddlFilePrefix() const {
|
||||||
|
return QSL("sqlite");
|
||||||
|
}
|
||||||
|
|
||||||
bool SqliteDriver::saveDatabase() {
|
bool SqliteDriver::saveDatabase() {
|
||||||
if (!m_inMemoryDatabase) {
|
if (!m_inMemoryDatabase) {
|
||||||
return true;
|
return true;
|
||||||
@ -259,9 +263,17 @@ QSqlDatabase SqliteDriver::initializeDatabase(const QString& connection_name, bo
|
|||||||
}
|
}
|
||||||
else if (!in_memory) {
|
else if (!in_memory) {
|
||||||
query_db.next();
|
query_db.next();
|
||||||
const QString installed_db_schema = query_db.value(0).toString();
|
const int installed_db_schema = query_db.value(0).toString().toInt();
|
||||||
|
|
||||||
|
if (installed_db_schema < QSL(APP_DB_SCHEMA_VERSION).toInt()) {
|
||||||
|
// Now, it would be good to create backup of SQLite DB file.
|
||||||
|
if (IOFactory::copyFile(databaseFilePath(), databaseFilePath() + ".bak")) {
|
||||||
|
qDebugNN << LOGSEC_DB << "Creating backup of SQLite DB file.";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
qFatal("Creation of backup SQLite DB file failed.");
|
||||||
|
}
|
||||||
|
|
||||||
if (installed_db_schema.toInt() < QSL(APP_DB_SCHEMA_VERSION).toInt()) {
|
|
||||||
if (updateDatabaseSchema(query_db, installed_db_schema)) {
|
if (updateDatabaseSchema(query_db, installed_db_schema)) {
|
||||||
qDebugNN << LOGSEC_DB
|
qDebugNN << LOGSEC_DB
|
||||||
<< "Database schema was updated from '"
|
<< "Database schema was updated from '"
|
||||||
@ -272,7 +284,7 @@ QSqlDatabase SqliteDriver::initializeDatabase(const QString& connection_name, bo
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
qFatal("Database schema was not updated from '%s' to '%s' successully.",
|
qFatal("Database schema was not updated from '%s' to '%s' successully.",
|
||||||
qPrintable(installed_db_schema),
|
qPrintable(QString::number(installed_db_schema)),
|
||||||
APP_DB_SCHEMA_VERSION);
|
APP_DB_SCHEMA_VERSION);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -342,48 +354,6 @@ QString SqliteDriver::databaseFilePath() const {
|
|||||||
return m_databaseFilePath + QDir::separator() + APP_DB_SQLITE_FILE;
|
return m_databaseFilePath + QDir::separator() + APP_DB_SQLITE_FILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SqliteDriver::updateDatabaseSchema(QSqlQuery& query, const QString& source_db_schema_version) {
|
|
||||||
int working_version = QString(source_db_schema_version).remove('.').toInt();
|
|
||||||
const int current_version = QSL(APP_DB_SCHEMA_VERSION).remove('.').toInt();
|
|
||||||
|
|
||||||
// Now, it would be good to create backup of SQLite DB file.
|
|
||||||
if (IOFactory::copyFile(databaseFilePath(), databaseFilePath() + ".bak")) {
|
|
||||||
qDebugNN << LOGSEC_DB << "Creating backup of SQLite DB file.";
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
qFatal("Creation of backup SQLite DB file failed.");
|
|
||||||
}
|
|
||||||
|
|
||||||
while (working_version != current_version) {
|
|
||||||
try {
|
|
||||||
const QStringList statements = prepareScript(APP_SQL_PATH,
|
|
||||||
QSL(APP_DB_UPDATE_FILE_PATTERN).arg(QSL("sqlite"),
|
|
||||||
QString::number(working_version),
|
|
||||||
QString::number(working_version + 1)));
|
|
||||||
|
|
||||||
for (const QString& statement : statements) {
|
|
||||||
if (!query.exec(statement) && query.lastError().isValid()) {
|
|
||||||
throw ApplicationException(query.lastError().text());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (const ApplicationException& ex) {
|
|
||||||
qFatal("Error when running SQL scripts: %s.", qPrintable(ex.message()));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Increment the version.
|
|
||||||
qDebugNN << LOGSEC_DB
|
|
||||||
<< "Updating database schema:"
|
|
||||||
<< QUOTE_W_SPACE(working_version)
|
|
||||||
<< "->"
|
|
||||||
<< QUOTE_W_SPACE_DOT(working_version + 1);
|
|
||||||
|
|
||||||
working_version++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void SqliteDriver::setPragmas(QSqlQuery& query) {
|
void SqliteDriver::setPragmas(QSqlQuery& query) {
|
||||||
query.exec(QSL("PRAGMA encoding = \"UTF-8\""));
|
query.exec(QSL("PRAGMA encoding = \"UTF-8\""));
|
||||||
query.exec(QSL("PRAGMA synchronous = OFF"));
|
query.exec(QSL("PRAGMA synchronous = OFF"));
|
||||||
|
@ -14,6 +14,7 @@ class SqliteDriver : public DatabaseDriver {
|
|||||||
virtual QString location() const;
|
virtual QString location() const;
|
||||||
virtual DriverType driverType() const;
|
virtual DriverType driverType() const;
|
||||||
virtual bool vacuumDatabase();
|
virtual bool vacuumDatabase();
|
||||||
|
virtual QString ddlFilePrefix() const;
|
||||||
virtual bool saveDatabase();
|
virtual bool saveDatabase();
|
||||||
virtual bool initiateRestoration(const QString& database_package_file);
|
virtual bool initiateRestoration(const QString& database_package_file);
|
||||||
virtual bool finishRestoration();
|
virtual bool finishRestoration();
|
||||||
@ -28,7 +29,6 @@ class SqliteDriver : public DatabaseDriver {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QSqlDatabase initializeDatabase(const QString& connection_name, bool in_memory);
|
QSqlDatabase initializeDatabase(const QString& connection_name, bool in_memory);
|
||||||
bool updateDatabaseSchema(QSqlQuery &query, const QString& source_db_schema_version);
|
|
||||||
void setPragmas(QSqlQuery& query);
|
void setPragmas(QSqlQuery& query);
|
||||||
QString databaseFilePath() const;
|
QString databaseFilePath() const;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user