diff --git a/.github/workflows/qt.yml b/.github/workflows/qt.yml index 1f1c5e4..28a38c0 100644 --- a/.github/workflows/qt.yml +++ b/.github/workflows/qt.yml @@ -20,8 +20,7 @@ jobs: - mingw81_64 - mingw81_32 - clang_64 - - ios - + include: - platform: gcc_64 os: ubuntu-latest @@ -43,8 +42,6 @@ jobs: os: windows-latest - platform: clang_64 os: macos-latest - - platform: ios - os: macos-latest runs-on: ${{matrix.os}} steps: diff --git a/.qmake.conf b/.qmake.conf index 37b0569..6bc411e 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -1,7 +1,7 @@ load(qt_build_config) CONFIG += warning_clean exceptions qt_module_build c++17 -DEFINES += QT_DEPRECATED_WARNINGS QT_ASCII_CAST_WARNINGS +# DEFINES += QT_DEPRECATED_WARNINGS QT_ASCII_CAST_WARNINGS MODULE_VERSION = 0.6.0 diff --git a/nut.pro b/nut.pro index 67b5211..91f0ca8 100644 --- a/nut.pro +++ b/nut.pro @@ -1,5 +1,4 @@ load(qt_parts) -#system($$[QT_INSTALL_BINS]/syncqt.pl -version 0.6.0 -outdir $$OUT_PWD) runtests.target = run-tests runtests.CONFIG = recursive diff --git a/src/nut/bulkinserter.cpp b/src/nut/bulkinserter.cpp index 4320ac4..1099af1 100644 --- a/src/nut/bulkinserter.cpp +++ b/src/nut/bulkinserter.cpp @@ -4,7 +4,7 @@ #include "generators/sqlgeneratorbase_p.h" #include "databasemodel.h" -#include +#include Nut::BulkInserter::BulkInserter(Nut::Database *db, QString &className) : _database(db), _fieldCount(0) diff --git a/src/nut/bulkinserter.h b/src/nut/bulkinserter.h index c8b40db..94a7bba 100644 --- a/src/nut/bulkinserter.h +++ b/src/nut/bulkinserter.h @@ -2,7 +2,7 @@ #define BULKINSERTER_H #include -#include +#include #include "defines.h" #include "phrases/phraselist.h" #include "phrases/fieldphrase.h" diff --git a/src/nut/database.cpp b/src/nut/database.cpp index 91b9b79..162b483 100644 --- a/src/nut/database.cpp +++ b/src/nut/database.cpp @@ -193,8 +193,8 @@ bool DatabasePrivate::getCurrectSchema() Q_Q(Database); //is not first instanicate of this class - if (allTableMaps.contains(q->metaObject()->className())) { - currentModel = allTableMaps[q->metaObject()->className()]; + if (allTableMaps.contains(QString::fromUtf8(q->metaObject()->className()))) { + currentModel = allTableMaps[QString::fromUtf8(q->metaObject()->className())]; return false; } @@ -205,9 +205,9 @@ bool DatabasePrivate::getCurrectSchema() int changeLogTypeId = qRegisterMetaType(); currentModel.append( - new TableModel(changeLogTypeId, __CHANGE_LOG_TABLE_NAME)); - tables.insert(ChangeLogTable::staticMetaObject.className(), - __CHANGE_LOG_TABLE_NAME); + new TableModel(changeLogTypeId, QStringLiteral(__CHANGE_LOG_TABLE_NAME))); + tables.insert(QStringLiteral(ChangeLogTable::staticMetaObject.className()), + QStringLiteral(__CHANGE_LOG_TABLE_NAME)); changeLogs = new TableSet(q); @@ -219,11 +219,11 @@ bool DatabasePrivate::getCurrectSchema() if (!nutClassInfoString(q->metaObject()->classInfo(i), type, name, value)) { - errorMessage = QString("No valid table in %1") + errorMessage = QString::fromUtf8("No valid table in %1") .arg(q->metaObject()->classInfo(i).value()); continue; } - if (type == __nut_TABLE) { + if (type == QStringLiteral(__nut_TABLE)) { //name: table class name //value: table variable name (table name in db) tables.insert(name, value); @@ -237,7 +237,7 @@ bool DatabasePrivate::getCurrectSchema() currentModel.append(sch); } - if (type == __nut_DB_VERSION) { + if (type == QStringLiteral(__nut_DB_VERSION)) { bool ok; int version = value.toInt(&ok); if (!ok) @@ -250,9 +250,9 @@ bool DatabasePrivate::getCurrectSchema() QMetaProperty tableProperty = q->metaObject()->property(i); int typeId = QMetaType::type(tableProperty.typeName()); - if (tables.values().contains(tableProperty.name()) + if (tables.values().contains(QString::fromUtf8(tableProperty.name())) && (unsigned)typeId >= QVariant::UserType) { - TableModel *sch = new TableModel(typeId, tableProperty.name()); + TableModel *sch = new TableModel(typeId, QString::fromUtf8(tableProperty.name())); currentModel.append(sch); } } @@ -272,7 +272,7 @@ bool DatabasePrivate::getCurrectSchema() fk->masterTable = currentModel.tableByClassName(fk->masterClassName); } - allTableMaps.insert(q->metaObject()->className(), currentModel); + allTableMaps.insert(QString::fromUtf8(q->metaObject()->className()), currentModel); return true; } @@ -286,8 +286,12 @@ DatabaseModel DatabasePrivate::getLastSchema() if (u) { QJsonParseError e; - QJsonObject json - = QJsonDocument::fromJson(u->data().replace("\\\"", "\"").toUtf8(), &e).object(); + QJsonObject json = QJsonDocument::fromJson(u->data() + .replace(QStringLiteral("\\\""), + QStringLiteral("\"")) + .toUtf8(), + &e) + .object(); DatabaseModel ret = json; return ret; @@ -322,7 +326,7 @@ bool DatabasePrivate::putModelToDatabase() /*current.remove(__CHANGE_LOG_TABLE_NAME)*/; auto changeLog = create(); - changeLog->setData(QJsonDocument(current.toJson()).toJson(QJsonDocument::Compact)); + changeLog->setData(QString(QJsonDocument(current.toJson()).toJson(QJsonDocument::Compact))); changeLog->setVersion(current.version()); changeLogs->append(changeLog); q->saveChanges(true); @@ -344,7 +348,7 @@ bool DatabasePrivate::putModelToDatabase() void DatabasePrivate::createChangeLogs() { // currentModel.model("change_log") - QStringList diff = sqlGenerator->diff(nullptr, currentModel.tableByName("__change_log")); + QStringList diff = sqlGenerator->diff(nullptr, currentModel.tableByName(QStringLiteral("__change_log"))); foreach (QString s, diff) db.exec(s); @@ -545,17 +549,17 @@ bool Database::open(bool updateDatabase) { Q_D(Database); - if (d->driver == "QPSQL" || d->driver == "QPSQL7") + if (d->driver == QStringLiteral("QPSQL") || d->driver == QStringLiteral("QPSQL7")) d->sqlGenerator = new PostgreSqlGenerator(this); - else if (d->driver == "QMYSQL" || d->driver == "QMYSQL3") + else if (d->driver == QStringLiteral("QMYSQL") || d->driver == QStringLiteral("QMYSQL3")) d->sqlGenerator = new MySqlGenerator(this); - else if (d->driver == "QSQLITE" || d->driver == "QSQLITE3") + else if (d->driver == QStringLiteral("QSQLITE") || d->driver == QStringLiteral("QSQLITE3")) d->sqlGenerator = new SqliteGenerator(this); - else if (d->driver == "QODBC" || d->driver == "QODBC3") { + else if (d->driver == QStringLiteral("QODBC") || d->driver == QStringLiteral("QODBC3")) { QString driverName = QString(); QStringList parts = d->databaseName.toLower().split(';'); foreach (QString p, parts) - if (p.trimmed().startsWith("driver=")) + if (p.trimmed().startsWith(QStringLiteral("driver="))) driverName = p.split('=').at(1).toLower().trimmed(); // if (driverName == "{sql server}") diff --git a/src/nut/database.h b/src/nut/database.h index 3a9f29c..663bdca 100644 --- a/src/nut/database.h +++ b/src/nut/database.h @@ -23,8 +23,8 @@ #include #include +#include #include -#include #include "defines.h" #include "tableset.h" diff --git a/src/nut/database_p.h b/src/nut/database_p.h index a93f105..1e0e867 100644 --- a/src/nut/database_p.h +++ b/src/nut/database_p.h @@ -24,8 +24,8 @@ #include "database.h" #include "databasemodel.h" -#include -#include +#include +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/databasemodel.cpp b/src/nut/databasemodel.cpp index c403dc4..6780bd2 100644 --- a/src/nut/databasemodel.cpp +++ b/src/nut/databasemodel.cpp @@ -21,8 +21,8 @@ #include "databasemodel.h" #include "tablemodel.h" -#include -#include +#include +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/defines.h b/src/nut/defines.h index d40238c..b134de6 100644 --- a/src/nut/defines.h +++ b/src/nut/defines.h @@ -24,12 +24,12 @@ #define NUT_NAMESPACE Nut #include "defines_p.h" -#include "qglobal.h" +#include -#include -#include -#include -#include +#include +#include +#include +#include #if defined(NUT_SHARED) || !defined(NUT_STATIC) # ifdef NUT_STATIC @@ -89,33 +89,33 @@ public: \ } \ void write(type name){ \ m_##name = name; \ - propertyChanged(#name); \ + propertyChanged(QString::fromUtf8(#name)); \ } -#define NUT_FOREIGN_KEY(type, keytype, name, read, write) \ +#define NUT_FOREIGN_KEY(type, keytype, name, read, write) \ Q_PROPERTY(Nut::Row name READ read WRITE write) \ NUT_DECLARE_FIELD(keytype, name##Id, read##Id, write##Id) \ - NUT_INFO(__nut_FOREIGN_KEY, name, type) \ + NUT_INFO(__nut_FOREIGN_KEY, name, type) \ Nut::Row m_##name; \ -public slots: \ +public slots: \ Nut::Row read() const { return m_##name ; } \ - Q_INVOKABLE void write(Nut::Row name){ \ + Q_INVOKABLE void write(Nut::Row name){ \ m_##name = name; \ } -#define NUT_FOREIGN_KEY_DECLARE(type, keytype, name, read, write) \ - NUT_INFO(__nut_FIELD, name##Id, 0) \ - NUT_INFO(__nut_FOREIGN_KEY, name, type) \ - Nut::Row m_##name; \ - keytype m_##name##Id; \ - Q_PROPERTY(Nut::Row name READ read WRITE write) \ - Q_PROPERTY(keytype name##Id READ read##Id WRITE write##Id) \ +#define NUT_FOREIGN_KEY_DECLARE(type, keytype, name, read, write) \ + NUT_INFO(__nut_FIELD, name##Id, 0) \ + NUT_INFO(__nut_FOREIGN_KEY, name, type) \ + Nut::Row m_##name; \ + keytype m_##name##Id; \ + Q_PROPERTY(Nut::Row name READ read WRITE write) \ + Q_PROPERTY(keytype name##Id READ read##Id WRITE write##Id) \ public: \ - Nut::Row read() const; \ - keytype read##Id() const; \ - static NUT_WRAP_NAMESPACE(FieldPhrase)& name##Id ## Field(){ \ - static NUT_WRAP_NAMESPACE(FieldPhrase) f = \ - NUT_WRAP_NAMESPACE(FieldPhrase) \ + Nut::Row read() const; \ + keytype read##Id() const; \ + static NUT_WRAP_NAMESPACE(FieldPhrase)& name##Id ## Field(){ \ + static NUT_WRAP_NAMESPACE(FieldPhrase) f = \ + NUT_WRAP_NAMESPACE(FieldPhrase) \ (staticMetaObject.className(), #name); \ return f; \ } \ @@ -123,25 +123,23 @@ public slots: \ void write(Nut::Row name); \ void write##Id(keytype name##Id); -#define NUT_FOREIGN_KEY_IMPLEMENT(class, type, keytype, name, read, write) \ - \ - Nut::Row class::read() const { return m_##name ; } \ - void class::write(Nut::Row name){ \ - propertyChanged(QT_STRINGIFY2(name##Id)); \ +#define NUT_FOREIGN_KEY_IMPLEMENT(class, type, keytype, name, read, write) \ + Nut::Row class::read() const { return m_##name ; } \ + void class::write(Nut::Row name){ \ + propertyChanged(QT_STRINGIFY2(name##Id)); \ m_##name = name; \ - m_##name##Id = name->primaryValue().value(); \ - } \ - \ - keytype class::read##Id() const{ \ - if (m_##name) \ - return m_##name->primaryValue().value(); \ - return m_##name##Id; \ + m_##name##Id = name->primaryValue().value(); \ } \ - void class::write##Id(keytype name##Id){ \ - propertyChanged(QT_STRINGIFY2(name##Id)); \ - m_##name##Id = name##Id; \ - m_##name = nullptr; \ - propertyChanged(QT_STRINGIFY2(name##Id)); \ + keytype class::read##Id() const{ \ + if (m_##name) \ + return m_##name->primaryValue().value(); \ + return m_##name##Id; \ + } \ + void class::write##Id(keytype name##Id){ \ + propertyChanged(QT_STRINGIFY2(name##Id)); \ + m_##name##Id = name##Id; \ + m_##name = nullptr; \ + propertyChanged(QT_STRINGIFY2(name##Id)); \ } @@ -154,7 +152,7 @@ public slots: \ #define NUT_IMPLEMENT_CHILD_TABLE(class, type, n) \ type *class::n##Table(){ \ - static auto f = new type(); \ + static auto f = new type(); \ return f; \ } \ NUT_WRAP_NAMESPACE(TableSet) *class::n(){ \ @@ -162,14 +160,14 @@ public slots: \ } #define NUT_FIELD(name) NUT_INFO(__nut_FIELD, name, 0) -#define NUT_PRIMARY_KEY(x) NUT_INFO(__nut_PRIMARY_KEY, x, 0) \ - public: \ - QVariant primaryValue() const override { \ - return property(#x); \ - } \ - void setPrimaryValue(const QVariant &value) override { \ - setProperty(#x, value); \ - } \ +#define NUT_PRIMARY_KEY(x) NUT_INFO(__nut_PRIMARY_KEY, x, 0) \ + public: \ + QVariant primaryValue() const override { \ + return property(#x); \ + } \ + void setPrimaryValue(const QVariant &value) override { \ + setProperty(#x, value); \ + } \ private: diff --git a/src/nut/generators/mysqlgenerator.cpp b/src/nut/generators/mysqlgenerator.cpp index 2d21a93..b166775 100644 --- a/src/nut/generators/mysqlgenerator.cpp +++ b/src/nut/generators/mysqlgenerator.cpp @@ -21,14 +21,14 @@ #include "mysqlgenerator.h" #include "../tablemodel.h" -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include #ifdef QT_GUI_LIB -#include -#include +# include +# include #endif #include "sqlserializer.h" @@ -45,42 +45,42 @@ QString MySqlGenerator::fieldType(FieldModel *field) QString dbType; switch (field->type) { - case QMetaType::Bool: return "BOOLEAN"; + case QMetaType::Bool: return QStringLiteral("BOOLEAN"); case QMetaType::Char: - case QMetaType::QChar: return "CHAR(1)"; + case QMetaType::QChar: return QStringLiteral("CHAR(1)"); case QMetaType::SChar: - case QMetaType::UChar: return "TINYINT"; + case QMetaType::UChar: return QStringLiteral("TINYINT"); case QMetaType::Short: - case QMetaType::UShort: return "SMALLINT"; + case QMetaType::UShort: return QStringLiteral("SMALLINT"); case QMetaType::UInt: case QMetaType::Int: - dbType = "INT"; + dbType = QStringLiteral("INT"); if(field->isAutoIncrement) - dbType += " AUTO_INCREMENT"; + dbType += QStringLiteral(" AUTO_INCREMENT"); break; case QMetaType::Long: case QMetaType::ULong: case QMetaType::LongLong: case QMetaType::ULongLong: - return "BIGINT"; + return QStringLiteral("BIGINT"); case QMetaType::Float: - return "FLOAT"; + return QStringLiteral("FLOAT"); case QMetaType::Double: - return "REAL"; + return QStringLiteral("REAL"); - case QMetaType::QBitArray: return "VARBINARY"; - case QMetaType::QByteArray: return "BLOB"; - case QMetaType::QDate: return "DATE"; - case QMetaType::QTime: return "TIME"; - case QMetaType::QDateTime: return "DATETIME"; + case QMetaType::QBitArray: return QStringLiteral("VARBINARY"); + case QMetaType::QByteArray: return QStringLiteral("BLOB"); + case QMetaType::QDate: return QStringLiteral("DATE"); + case QMetaType::QTime: return QStringLiteral("TIME"); + case QMetaType::QDateTime: return QStringLiteral("DATETIME"); case QMetaType::QString: if(field->length) - dbType = QString("VARCHAR(%1)").arg(field->length); + dbType = QString::fromUtf8("VARCHAR(%1)").arg(field->length); else - dbType = "TEXT"; + dbType = QStringLiteral("TEXT"); break; @@ -109,7 +109,7 @@ QString MySqlGenerator::fieldType(FieldModel *field) case QMetaType::QJsonValue: case QMetaType::QJsonObject: case QMetaType::QJsonDocument: - case QMetaType::QStringList: return "TEXT"; + case QMetaType::QStringList: return QStringLiteral("TEXT"); default: qWarning("Type %s::%s(%d) is not supported", @@ -128,16 +128,16 @@ QString MySqlGenerator::fieldType(FieldModel *field) QString MySqlGenerator::escapeValue(const QVariant &v) const { if (v.type() == QVariant::Bool) - return v.toBool() ? "1" : "0"; + return v.toBool() ? QStringLiteral("1") : QStringLiteral("0"); if (v.type() == QVariant::Time) - return "'" + v.toTime().toString("HH:mm:ss") + "'"; + return v.toTime().toString(QStringLiteral("'HH:mm:ss'")); if (v.type() == QVariant::Date) - return "'" + v.toDate().toString("yyyy-MM-dd") + "'"; + return v.toDate().toString(QStringLiteral("'yyyy-MM-dd'")); if (v.type() == QVariant::DateTime) - return "'" + v.toDateTime().toString("yyyy-MM-dd HH:mm:ss") + "'"; + return v.toDateTime().toString(QStringLiteral("'yyyy-MM-dd HH:mm:ss'")); //#ifdef QT_GUI_LIB // if (v.type() == QVariant::Polygon) { @@ -316,7 +316,7 @@ QString MySqlGenerator::createConditionalPhrase(const PhraseData *d) const case PhraseData::AddMinutesDateTime: case PhraseData::AddSeconds: case PhraseData::AddSecondsDateTime: - return QString("DATE_ADD(%1, INTERVAL %2 %3)") + return QString::fromUtf8("DATE_ADD(%1, INTERVAL %2 %3)") .arg(createConditionalPhrase(d->left), d->operand.toString(), SqlGeneratorBase::dateTimePartName(op)); @@ -333,7 +333,7 @@ QString MySqlGenerator::createConditionalPhrase(const PhraseData *d) const case PhraseData::DatePartHour: case PhraseData::DatePartMinute: case PhraseData::DatePartSecond: - return QString("%2(%1)") + return QString::fromUtf8("%2(%1)") .arg(createConditionalPhrase(d->left), SqlGeneratorBase::dateTimePartName(op)); @@ -348,11 +348,11 @@ QString MySqlGenerator::createConditionalPhrase(const PhraseData *d) const void MySqlGenerator::appendSkipTake(QString &sql, int skip, int take) { if (take > 0 && skip > 0) { - sql.append(QString(" LIMIT %1 OFFSET %2") + sql.append(QString::fromUtf8(" LIMIT %1 OFFSET %2") .arg(take) .arg(skip)); } else if (take > 0) { - sql.append(QString(" LIMIT %1").arg(take)); + sql.append(QString::fromUtf8(" LIMIT %1").arg(take)); } } diff --git a/src/nut/generators/postgresqlgenerator.cpp b/src/nut/generators/postgresqlgenerator.cpp index 3b27f99..f8e567d 100644 --- a/src/nut/generators/postgresqlgenerator.cpp +++ b/src/nut/generators/postgresqlgenerator.cpp @@ -18,14 +18,15 @@ ** **************************************************************************/ -#include -#include +#include +#include + #ifdef QT_GUI_LIB -#include -#include +# include +# include #endif -#include -#include +#include +#include #include "postgresqlgenerator.h" #include "../table.h" @@ -83,44 +84,44 @@ QString PostgreSqlGenerator::fieldType(FieldModel *field) switch (field->type) { case QMetaType::Bool: - dbType = "BOOLEAN"; + dbType = QStringLiteral("BOOLEAN"); break; case QMetaType::QBitArray: case QMetaType::QByteArray: - dbType = "BYTEA"; + dbType = QStringLiteral("BYTEA"); break; case QMetaType::QDate: - dbType = "DATE"; + dbType = QStringLiteral("DATE"); break; case QMetaType::QDateTime: - dbType = "TIMESTAMP"; + dbType = QStringLiteral("TIMESTAMP"); break; case QMetaType::QTime: - dbType = "TIME"; + dbType = QStringLiteral("TIME"); break; case QMetaType::SChar: case QMetaType::UChar: case QMetaType::Short: case QMetaType::UShort: - dbType = "SMALLINT"; + dbType = QStringLiteral("SMALLINT"); break; case QMetaType::Float: - dbType = "FLOAT"; + dbType = QStringLiteral("FLOAT"); break; case QMetaType::Double: - dbType = "REAL"; + dbType = QStringLiteral("REAL"); break; case QMetaType::Int: case QMetaType::UInt: if(field->isAutoIncrement) - dbType = "SERIAL"; + dbType = QStringLiteral("SERIAL"); else - dbType = "INTEGER"; + dbType = QStringLiteral("INTEGER"); break; case QMetaType::Long: @@ -128,58 +129,58 @@ QString PostgreSqlGenerator::fieldType(FieldModel *field) case QMetaType::LongLong: case QMetaType::ULongLong: if(field->isAutoIncrement) - dbType = "BIGSERIAL"; + dbType = QStringLiteral("BIGSERIAL"); else - dbType = "BIGINT"; + dbType = QStringLiteral("BIGINT"); break; case QMetaType::Char: case QMetaType::QChar: - return "CHAR(1)"; + return QStringLiteral("CHAR(1)"); case QMetaType::QString: if(field->length) dbType = QString("VARCHAR(%1)").arg(field->length); else - dbType = "TEXT"; + dbType = QStringLiteral("TEXT"); break; case QMetaType::QPoint: case QMetaType::QPointF: - dbType="POINT"; + dbType = QStringLiteral("POINT"); break; case QMetaType::QUuid: - dbType = "UUID"; + dbType = QStringLiteral("UUID"); break; case QMetaType::QPolygon: case QMetaType::QPolygonF: - dbType = "POLYGON"; + dbType = QStringLiteral("POLYGON"); break; case QMetaType::QLine: case QMetaType::QLineF: - return "LINE"; + return QStringLiteral("LINE"); case QMetaType::QRect: case QMetaType::QRectF: - return "BOX"; + return QStringLiteral("BOX"); case QMetaType::QJsonArray: case QMetaType::QJsonValue: case QMetaType::QJsonObject: case QMetaType::QJsonDocument: - return "JSONB"; + return QStringLiteral("JSONB"); case QMetaType::QStringList: - return "TEXT[]"; + return QStringLiteral("TEXT[]"); case QMetaType::QSize: case QMetaType::QSizeF: case QMetaType::QUrl: case QMetaType::QColor: - return "TEXT"; + return QStringLiteral("TEXT"); default: dbType = QString(); @@ -196,13 +197,13 @@ QString PostgreSqlGenerator::diff(FieldModel *oldField, FieldModel *newField) return QString(); if(!newField){ - sql = "DROP COLUMN " + oldField->name; + sql = QStringLiteral("DROP COLUMN ") + oldField->name; }else{ if(oldField){ - sql = "ALTER COLUMN "; - sql.append(newField->name + " TYPE " + fieldType(newField)); + sql = QStringLiteral("ALTER COLUMN "); + sql.append(newField->name + QStringLiteral(" TYPE ") + fieldType(newField)); } else { - sql = "ADD COLUMN "; + sql = QStringLiteral("ADD COLUMN "); sql.append(fieldDeclare(newField)); } } @@ -212,27 +213,31 @@ QString PostgreSqlGenerator::diff(FieldModel *oldField, FieldModel *newField) QString PostgreSqlGenerator::escapeValue(const QVariant &v) const { if (v.type() == QVariant::Time) - return "'" + v.toTime().toString("HH:mm:ss") + "'"; + return v.toTime().toString(QStringLiteral("'HH:mm:ss'")); if (v.type() == QVariant::Date) - return "'" + v.toDate().toString("yyyy-MM-dd") + "'"; + return v.toDate().toString(QStringLiteral("'yyyy-MM-dd'")); if (v.type() == QVariant::DateTime) - return "'" + v.toDateTime().toString("yyyy-MM-dd HH:mm:ss") + "'"; + return v.toDateTime().toString(QStringLiteral("'yyyy-MM-dd HH:mm:ss'")); if (v.type() == QVariant::StringList) - return "'{" + v.toStringList().join(",") + "}'"; + return QStringLiteral("'{") + + v.toStringList().join(QStringLiteral(",")) + + QStringLiteral("}'"); if (v.type() == QVariant::Point) { QPoint pt = v.toPoint(); - return QString("point(%1, %2)").arg(pt.x()).arg(pt.y()); + return QString::fromUtf8("point(%1, %2)").arg(pt.x()).arg(pt.y()); } if (v.type() == QVariant::PointF) { QPointF pt = v.toPointF(); - return QString("point(%1, %2)").arg(pt.x()).arg(pt.y()); + return QString::fromUtf8("point(%1, %2)").arg(pt.x()).arg(pt.y()); } if (v.userType() == QMetaType::QJsonDocument) { - return "'" + QString(v.toJsonDocument().toJson(QJsonDocument::Compact)) + "'"; + return QStringLiteral("'") + + QString::fromUtf8(v.toJsonDocument().toJson(QJsonDocument::Compact)) + + QStringLiteral("'"); } #ifdef QT_GUI_LIB @@ -243,7 +248,7 @@ QString PostgreSqlGenerator::escapeValue(const QVariant &v) const for (int i = 0; i < pol.size(); ++i) { pt = pol.at(i); if (!ret.isEmpty()) - ret.append("),("); + ret.append(QStringLiteral("),(")); ret.append(QString::number(pt.x()) + ", " + QString::number(pt.y())); } return "'((" + ret + "))'"; @@ -255,7 +260,7 @@ QString PostgreSqlGenerator::escapeValue(const QVariant &v) const for (int i = 0; i < pol.size(); ++i) { pt = pol.at(i); if (!ret.isEmpty()) - ret.append("),("); + ret.append(QStringLiteral("),(")); ret.append(QString::number(pt.x()) + ", " + QString::number(pt.y())); } return "'((" + ret + "))'"; @@ -277,14 +282,24 @@ QVariant PostgreSqlGenerator::unescapeValue(const QMetaType::Type &type, const Q return dbValue.toDate(); if (type == QMetaType::QPoint) - return SqlGeneratorBase::unescapeValue(QMetaType::QPoint, dbValue.toString() - .replace("(", "").replace(")", "")); + return SqlGeneratorBase::unescapeValue(QMetaType::QPoint, + dbValue.toString() + .replace(QStringLiteral("("), + QStringLiteral("")) + .replace(QStringLiteral(")"), + QStringLiteral(""))); if (type == QMetaType::QPointF) - return SqlGeneratorBase::unescapeValue(QMetaType::QPointF, dbValue.toString() - .replace("(", "").replace(")", "")); + return SqlGeneratorBase::unescapeValue(QMetaType::QPointF, + dbValue.toString() + .replace(QStringLiteral("("), + QStringLiteral("")) + .replace(QStringLiteral(")"), + QStringLiteral(""))); if (type == QMetaType::QStringList) - return dbValue.toString().replace("{", "").replace("}", "") - .split(","); + return dbValue.toString() + .replace(QStringLiteral("{"), QStringLiteral("")) + .replace(QStringLiteral("}"), QStringLiteral("")) + .split(QStringLiteral(",")); #ifdef QT_GUI_LIB if (type == QMetaType::QPolygon) { @@ -337,7 +352,7 @@ QString PostgreSqlGenerator::createConditionalPhrase(const PhraseData *d) const if (d->type == PhraseData::WithVariant) { if (isPostGisType(d->operand.type()) && d->operatorCond == PhraseData::Equal) { - return QString("%1 ~= %2") + return QString::fromUtf8("%1 ~= %2") .arg(SqlGeneratorBase::createConditionalPhrase(d->left), escapeValue(d->operand)); } @@ -354,7 +369,7 @@ QString PostgreSqlGenerator::createConditionalPhrase(const PhraseData *d) const case PhraseData::AddMinutesDateTime: case PhraseData::AddSeconds: case PhraseData::AddSecondsDateTime: - return QString("%1 + interval '%2 %3'") + return QString::fromUtf8("%1 + interval '%2 %3'") .arg(createConditionalPhrase(d->left), d->operand.toString(), SqlGeneratorBase::dateTimePartName(op)); @@ -372,7 +387,7 @@ QString PostgreSqlGenerator::createConditionalPhrase(const PhraseData *d) const case PhraseData::DatePartHour: case PhraseData::DatePartMinute: case PhraseData::DatePartSecond: - return QString("date_part('%2', %1)") + return QString::fromUtf8("date_part('%2', %1)") .arg(createConditionalPhrase(d->left), SqlGeneratorBase::dateTimePartName(op)); diff --git a/src/nut/generators/sqlgeneratorbase.cpp b/src/nut/generators/sqlgeneratorbase.cpp index 441ea9d..a91f160 100644 --- a/src/nut/generators/sqlgeneratorbase.cpp +++ b/src/nut/generators/sqlgeneratorbase.cpp @@ -18,13 +18,12 @@ ** **************************************************************************/ -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include #include "sqlgeneratorbase_p.h" #include "../database.h" @@ -201,12 +200,12 @@ QString SqlGeneratorBase::diff(FieldModel *oldField, FieldModel *newField) return sql; if (!newField) { - sql = "DROP COLUMN " + oldField->name; + sql = QStringLiteral("DROP COLUMN ") + oldField->name; } else { if (oldField) - sql = "MODIFY COLUMN "; + sql = QStringLiteral("MODIFY COLUMN "); else - sql = "ADD COLUMN "; + sql = QStringLiteral("ADD COLUMN "); sql.append(fieldDeclare(newField)); } return sql; @@ -273,8 +272,8 @@ QStringList SqlGeneratorBase::diff(TableModel *oldTable, TableModel *newTable) // } QString sql; if (oldTable) { - sql = QString("ALTER TABLE %1 \n%2") - .arg(newTable->name(), columnSql.join(",\n")); + sql = QString::fromUtf8("ALTER TABLE %1 \n%2") + .arg(newTable->name(), columnSql.join(QStringLiteral(",\n"))); } else { if (!newTable->primaryKey().isNull()) { QString pkCon = primaryKeyConstraint(newTable); @@ -283,8 +282,8 @@ QStringList SqlGeneratorBase::diff(TableModel *oldTable, TableModel *newTable) columnSql << constraints(newTable); } - sql = QString("CREATE TABLE %1 \n(%2)") - .arg(newTable->name(), columnSql.join(",\n")); + sql = QString::fromUtf8("CREATE TABLE %1 \n(%2)") + .arg(newTable->name(), columnSql.join(QStringLiteral(",\n"))); } return QStringList() << sql; @@ -298,10 +297,11 @@ QStringList SqlGeneratorBase::diffRelation(TableModel *oldTable, TableModel *new QList relations; - if (oldTable) + if (oldTable) { foreach (RelationModel *r, oldTable->foreignKeys()) if (!relations.contains(r->localColumn)) relations.append(r->localColumn); + } foreach (RelationModel *r, newTable->foreignKeys()) if (!relations.contains(r->localColumn)) @@ -320,8 +320,9 @@ QStringList SqlGeneratorBase::diffRelation(TableModel *oldTable, TableModel *new } if (columnSql.count()) - ret.append("ALTER TABLE " + newTable->name() + "\n" - + columnSql.join(",\n")); + ret.append(QStringLiteral("ALTER TABLE ") + newTable->name() + + QStringLiteral("\n") + + columnSql.join(QStringLiteral(",\n"))); return ret; } @@ -900,7 +901,10 @@ QString SqlGeneratorBase::phrase(const PhraseData *d) const break; case PhraseData::WithVariant: - ret = phrase(d->left) + " " + operatorString(d->operatorCond) + " " + ret = phrase(d->left) + + QStringLiteral(" ") + + operatorString(d->operatorCond) + + QStringLiteral(" ") + escapeValue(d->operand); break; diff --git a/src/nut/generators/sqlservergenerator.cpp b/src/nut/generators/sqlservergenerator.cpp index 0c0bc31..3c1946a 100644 --- a/src/nut/generators/sqlservergenerator.cpp +++ b/src/nut/generators/sqlservergenerator.cpp @@ -22,8 +22,8 @@ #include "../table.h" #include "../tablemodel.h" -#include -#include +#include +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/nut.pro b/src/nut/nut.pro index f59ab71..b5f2907 100644 --- a/src/nut/nut.pro +++ b/src/nut/nut.pro @@ -1,9 +1,6 @@ -QT += sql gui - TARGET = QtNut -#TARGET = nut -#TEMPLATE = lib -#CONFIG += c++11 + +QT = core sql gui DEFINES += QT_DEPRECATED_WARNINGS NUT_SHARED NUT_BUILD_LIB diff --git a/src/nut/phrase.cpp b/src/nut/phrase.cpp index d575daf..57e513c 100644 --- a/src/nut/phrase.cpp +++ b/src/nut/phrase.cpp @@ -20,7 +20,7 @@ #include "phrase.h" -#include +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/phrases/datephrase.h b/src/nut/phrases/datephrase.h index 3263e92..005936f 100644 --- a/src/nut/phrases/datephrase.h +++ b/src/nut/phrases/datephrase.h @@ -22,7 +22,7 @@ #define DATEPHRASE_H #include "fieldphrase.h" -#include +#include #include NUT_BEGIN_NAMESPACE diff --git a/src/nut/phrases/fieldphrase.h b/src/nut/phrases/fieldphrase.h index 54b669d..ea9e6f8 100644 --- a/src/nut/phrases/fieldphrase.h +++ b/src/nut/phrases/fieldphrase.h @@ -65,7 +65,8 @@ public: } ConditionalPhrase contains(const QString &term) { - return ConditionalPhrase(this, PhraseData::Like, QStringLiteral("%") + term + QStringLiteral("%")); + return ConditionalPhrase(this, PhraseData::Like, + QVariant(QStringLiteral("%") + term + QStringLiteral("%"))); } AssignmentPhrase operator =(const QVariant &v) { diff --git a/src/nut/query.h b/src/nut/query.h index 444f4b5..38036d2 100644 --- a/src/nut/query.h +++ b/src/nut/query.h @@ -172,7 +172,7 @@ Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) { Q_D(Query); RowList returnList; - d->select = "*"; + d->select = QStringLiteral("*"); d->sql = d->database->sqlGenerator()->selectCommand( d->tableName, d->fieldPhrase, d->wherePhrase, d->orderPhrase, @@ -629,8 +629,10 @@ Q_OUTOFLINE_TEMPLATE void Query::toModel(QSqlQueryModel *model) if (d->fieldPhrase.data.count()) { foreach (const PhraseData *pd, d->fieldPhrase.data) { - QString displayName = dbModel.tableByClassName(pd->className) - ->field(pd->fieldName)->displayName; + QString displayName = dbModel + .tableByClassName(QString::fromUtf8(pd->className)) + ->field(QString::fromUtf8(pd->fieldName)) + ->displayName; model->setHeaderData(fieldIndex++, Qt::Horizontal, diff --git a/src/nut/serializableobject.h b/src/nut/serializableobject.h index aac7a23..d234359 100644 --- a/src/nut/serializableobject.h +++ b/src/nut/serializableobject.h @@ -1,7 +1,7 @@ #ifndef SERIALIZABLEOBJECT_H #define SERIALIZABLEOBJECT_H -#include +#include class SerializableObject { diff --git a/src/nut/sqlmodel.h b/src/nut/sqlmodel.h index 61900f8..44fa42d 100644 --- a/src/nut/sqlmodel.h +++ b/src/nut/sqlmodel.h @@ -22,10 +22,10 @@ #define SQLMODEL_H #include +#include +#include #include "defines.h" #include "sqlmodel_p.h" -#include -#include #include NUT_BEGIN_NAMESPACE diff --git a/src/nut/sqlmodel_p.h b/src/nut/sqlmodel_p.h index 7db807e..2254c10 100644 --- a/src/nut/sqlmodel_p.h +++ b/src/nut/sqlmodel_p.h @@ -1,8 +1,8 @@ #ifndef SQLMODEL_P_H #define SQLMODEL_P_H -#include -#include +#include +#include #include "defines.h" NUT_BEGIN_NAMESPACE diff --git a/src/nut/table.cpp b/src/nut/table.cpp index 08251bf..0acb032 100644 --- a/src/nut/table.cpp +++ b/src/nut/table.cpp @@ -18,9 +18,9 @@ ** **************************************************************************/ -#include -#include -#include +#include +#include +#include #include "table.h" #include "table_p.h" diff --git a/src/nut/table_p.h b/src/nut/table_p.h index ba0f59a..8982742 100644 --- a/src/nut/table_p.h +++ b/src/nut/table_p.h @@ -4,7 +4,7 @@ #include "defines.h" #include -#include +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/tablemodel.cpp b/src/nut/tablemodel.cpp index 1c9ddef..c92bc2b 100644 --- a/src/nut/tablemodel.cpp +++ b/src/nut/tablemodel.cpp @@ -21,9 +21,8 @@ #include #include #include - -#include -#include +#include +#include #include "tablemodel.h" #include "defines.h" diff --git a/src/nut/tablemodel.h b/src/nut/tablemodel.h index f0e3b23..3e3df3b 100644 --- a/src/nut/tablemodel.h +++ b/src/nut/tablemodel.h @@ -22,7 +22,7 @@ #define TABLEMODEL_H #include -#include +#include #include "defines.h" class QJsonObject; diff --git a/src/nut/tableset.h b/src/nut/tableset.h index 7153c2e..3199a5f 100644 --- a/src/nut/tableset.h +++ b/src/nut/tableset.h @@ -25,8 +25,9 @@ #include #include #include +#include + #include -#include #include "tablesetbase_p.h" #include "table.h" diff --git a/src/nut/tablesetbase_p.h b/src/nut/tablesetbase_p.h index 9513316..3df5fa5 100644 --- a/src/nut/tablesetbase_p.h +++ b/src/nut/tablesetbase_p.h @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include "defines.h" diff --git a/src/nut/tablesetbasedata.h b/src/nut/tablesetbasedata.h index a63258e..ecba00d 100644 --- a/src/nut/tablesetbasedata.h +++ b/src/nut/tablesetbasedata.h @@ -21,7 +21,7 @@ #ifndef TABLESETBASEDATA_H #define TABLESETBASEDATA_H -#include +#include #include "defines.h" NUT_BEGIN_NAMESPACE diff --git a/src/nut/types/dbgeography.h b/src/nut/types/dbgeography.h index 3fd834a..5feed3f 100644 --- a/src/nut/types/dbgeography.h +++ b/src/nut/types/dbgeography.h @@ -24,7 +24,7 @@ #include "../defines.h" #include #include -#include +#include NUT_BEGIN_NAMESPACE diff --git a/sync.profile b/sync.profile index 384554f..430e94f 100644 --- a/sync.profile +++ b/sync.profile @@ -1,5 +1,3 @@ %modules = ( "QtNut" => "$basedir/src/nut", ); - -$publicclassregexp = "^QtJsonSerializer::(?!__private::|MetaWriters::Implementations::|TypeExtractors::|Exception).+"; diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt new file mode 100644 index 0000000..83841c9 --- /dev/null +++ b/tests/auto/cmake/CMakeLists.txt @@ -0,0 +1,14 @@ + +cmake_minimum_required(VERSION 2.8) + +project(qmake_cmake_files) + +enable_testing() + +find_package(Qt5Core REQUIRED) + +include("${_Qt5CTestMacros}") + +test_module_includes( + Nut QNut +) diff --git a/tests/auto/cmake/cmake.pro b/tests/auto/cmake/cmake.pro new file mode 100644 index 0000000..793e741 --- /dev/null +++ b/tests/auto/cmake/cmake.pro @@ -0,0 +1,7 @@ + +# Cause make to do nothing. +TEMPLATE = subdirs + +CMAKE_QT_MODULES_UNDER_TEST = nut + +CONFIG += ctest_testcase