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>());
|
||||
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::AlignmentFlag::AlignLeft |
|
||||
Qt::AlignmentFlag::AlignVCenter,
|
||||
|
@ -8,10 +8,48 @@
|
||||
|
||||
#include <QDir>
|
||||
#include <QRegularExpression>
|
||||
#include <QSqlError>
|
||||
#include <QSqlQuery>
|
||||
|
||||
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,
|
||||
const QString& sql_file,
|
||||
const QString& database_name) {
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include <QObject>
|
||||
|
||||
#include <QSqlDatabase>
|
||||
#include <QSqlQuery>
|
||||
|
||||
class DatabaseDriver : public QObject {
|
||||
Q_OBJECT
|
||||
@ -31,6 +32,7 @@ class DatabaseDriver : public QObject {
|
||||
virtual QString location() const = 0;
|
||||
virtual QString humanDriverType() const = 0;
|
||||
virtual QString qtDriverCode() const = 0;
|
||||
virtual QString ddlFilePrefix() const = 0;
|
||||
virtual DriverType driverType() const = 0;
|
||||
virtual QString autoIncrementPrimaryKey() const = 0;
|
||||
virtual QString blob() const = 0;
|
||||
@ -44,6 +46,10 @@ class DatabaseDriver : public QObject {
|
||||
DatabaseDriver::DesiredStorageType desired_type = DatabaseDriver::DesiredStorageType::FromSettings) = 0;
|
||||
|
||||
protected:
|
||||
bool updateDatabaseSchema(QSqlQuery& query,
|
||||
int source_db_schema_version,
|
||||
const QString& database_name = {});
|
||||
|
||||
QStringList prepareScript(const QString& base_sql_folder,
|
||||
const QString& sql_file,
|
||||
const QString& database_name = {});
|
||||
|
@ -13,6 +13,10 @@
|
||||
|
||||
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,
|
||||
const QString& w_database, const QString& username,
|
||||
const QString& password) {
|
||||
@ -189,9 +193,9 @@ QSqlDatabase MariaDbDriver::initializeDatabase(const QString& connection_name) {
|
||||
else {
|
||||
// Database was previously initialized. Now just check the schema version.
|
||||
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)) {
|
||||
qDebugNN << LOGSEC_DB
|
||||
<< "Database schema was updated from"
|
||||
@ -202,7 +206,7 @@ QSqlDatabase MariaDbDriver::initializeDatabase(const QString& connection_name) {
|
||||
}
|
||||
else {
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -220,43 +224,6 @@ void MariaDbDriver::setPragmas(QSqlQuery& query) {
|
||||
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) {
|
||||
Q_UNUSED(desired_type)
|
||||
|
||||
|
@ -27,6 +27,7 @@ class MariaDbDriver : public DatabaseDriver {
|
||||
virtual QString location() const;
|
||||
virtual QString humanDriverType() const;
|
||||
virtual QString qtDriverCode() const;
|
||||
virtual QString ddlFilePrefix() const;
|
||||
virtual DriverType driverType() const;
|
||||
virtual bool vacuumDatabase();
|
||||
virtual bool saveDatabase();
|
||||
@ -42,9 +43,6 @@ class MariaDbDriver : public DatabaseDriver {
|
||||
QString interpretErrorCode(MariaDbError error_code) const;
|
||||
|
||||
private:
|
||||
bool updateDatabaseSchema(QSqlQuery& query,
|
||||
const QString& source_db_schema_version,
|
||||
const QString& database_name);
|
||||
QSqlDatabase initializeDatabase(const QString& connection_name);
|
||||
|
||||
void setPragmas(QSqlQuery& query);
|
||||
|
@ -35,6 +35,10 @@ bool SqliteDriver::vacuumDatabase() {
|
||||
return query_vacuum.exec(QSL("VACUUM"));
|
||||
}
|
||||
|
||||
QString SqliteDriver::ddlFilePrefix() const {
|
||||
return QSL("sqlite");
|
||||
}
|
||||
|
||||
bool SqliteDriver::saveDatabase() {
|
||||
if (!m_inMemoryDatabase) {
|
||||
return true;
|
||||
@ -259,9 +263,17 @@ QSqlDatabase SqliteDriver::initializeDatabase(const QString& connection_name, bo
|
||||
}
|
||||
else if (!in_memory) {
|
||||
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)) {
|
||||
qDebugNN << LOGSEC_DB
|
||||
<< "Database schema was updated from '"
|
||||
@ -272,7 +284,7 @@ QSqlDatabase SqliteDriver::initializeDatabase(const QString& connection_name, bo
|
||||
}
|
||||
else {
|
||||
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);
|
||||
}
|
||||
}
|
||||
@ -342,48 +354,6 @@ QString SqliteDriver::databaseFilePath() const {
|
||||
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) {
|
||||
query.exec(QSL("PRAGMA encoding = \"UTF-8\""));
|
||||
query.exec(QSL("PRAGMA synchronous = OFF"));
|
||||
|
@ -14,6 +14,7 @@ class SqliteDriver : public DatabaseDriver {
|
||||
virtual QString location() const;
|
||||
virtual DriverType driverType() const;
|
||||
virtual bool vacuumDatabase();
|
||||
virtual QString ddlFilePrefix() const;
|
||||
virtual bool saveDatabase();
|
||||
virtual bool initiateRestoration(const QString& database_package_file);
|
||||
virtual bool finishRestoration();
|
||||
@ -28,7 +29,6 @@ class SqliteDriver : public DatabaseDriver {
|
||||
|
||||
private:
|
||||
QSqlDatabase initializeDatabase(const QString& connection_name, bool in_memory);
|
||||
bool updateDatabaseSchema(QSqlQuery &query, const QString& source_db_schema_version);
|
||||
void setPragmas(QSqlQuery& query);
|
||||
QString databaseFilePath() const;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user