diff --git a/.github/workflows/qt.yml b/.github/workflows/qt.yml index 4d101c5..3f62b66 100644 --- a/.github/workflows/qt.yml +++ b/.github/workflows/qt.yml @@ -9,6 +9,7 @@ jobs: matrix: version: - 5.15.0 + platform: - gcc_64 - android @@ -20,6 +21,7 @@ jobs: - mingw81_64 - mingw81_32 - clang_64 + - ios include: - platform: gcc_64 @@ -42,6 +44,8 @@ jobs: os: windows-latest - platform: clang_64 os: macos-latest + - platform: ios + os: macos-latest runs-on: ${{matrix.os}} steps: diff --git a/nut.pri b/nut.pri index b0931d8..e9ec567 100644 --- a/nut.pri +++ b/nut.pri @@ -14,7 +14,7 @@ HEADERS += \ $$PWD/src/generators/sqlservergenerator.h \ $$PWD/src/types/dbgeography.h \ $$PWD/src/tableset.h \ - $$PWD/src/defines_p.h \ + $$PWD/src/defines_consts.h \ $$PWD/src/defines.h \ $$PWD/src/query.h \ $$PWD/src/databasemodel.h \ diff --git a/src/nut/3rdparty/serializer b/src/nut/3rdparty/serializer index 2dc11b3..acbd689 160000 --- a/src/nut/3rdparty/serializer +++ b/src/nut/3rdparty/serializer @@ -1 +1 @@ -Subproject commit 2dc11b380a07424a4face3046cc6b5e50aefb700 +Subproject commit acbd68924feb9ee412b4d69bbf24cb3a3cffdfd6 diff --git a/src/nut/database.cpp b/src/nut/database.cpp index 938ee3c..8001e88 100644 --- a/src/nut/database.cpp +++ b/src/nut/database.cpp @@ -66,7 +66,7 @@ bool DatabasePrivate::open(bool update) return true; Q_Q(Database); // if (update) - connectionName = q->metaObject()->className() + connectionName = QString::fromUtf8(q->metaObject()->className()) + QString::number(DatabasePrivate::lastId); db = QSqlDatabase::addDatabase(driver, connectionName); @@ -77,7 +77,7 @@ bool DatabasePrivate::open(bool update) db.setUserName(userName); db.setPassword(password); - if (driver.startsWith("qsqlite", Qt::CaseInsensitive) + if (driver.startsWith(QStringLiteral("qsqlite"), Qt::CaseInsensitive) && !QFile::exists(databaseName)) { //Force to execute update database isDatabaseNew = true; @@ -89,18 +89,20 @@ bool DatabasePrivate::open(bool update) qWarning("Could not connect to database, error = %s", db.lastError().text().toLocal8Bit().data()); - if (db.lastError().text().contains("database \"" + databaseName - + "\" does not exist") - || db.lastError().text().contains("Cannot open database") - || db.lastError().text().contains("Unknown database '" - + databaseName + "'")) { + if (db.lastError().text().contains(QStringLiteral("database \"") + + databaseName + + QStringLiteral("\" does not exist")) + || db.lastError().text().contains(QStringLiteral("Cannot open database")) + || db.lastError().text().contains(QStringLiteral("Unknown database '") + + databaseName + + QStringLiteral("'"))) { db.close(); db.setDatabaseName(sqlGenerator->masterDatabaseName(databaseName)); ok = db.open(); qDebug("Creating database"); if (ok) { - db.exec("CREATE DATABASE " + databaseName); + db.exec(QStringLiteral("CREATE DATABASE ") + databaseName); db.close(); if (db.lastError().type() != QSqlError::NoError) { @@ -219,8 +221,8 @@ bool DatabasePrivate::getCurrectSchema() if (!nutClassInfoString(q->metaObject()->classInfo(i), type, name, value)) { - errorMessage = QStringLiteral("No valid table in %1") - .arg(q->metaObject()->classInfo(i).value()); + errorMessage = QStringLiteral("No valid table in ") + + QString::fromUtf8(q->metaObject()->classInfo(i).value()); continue; } if (type == QStringLiteral(__nut_TABLE)) { @@ -326,7 +328,7 @@ bool DatabasePrivate::putModelToDatabase() /*current.remove(__CHANGE_LOG_TABLE_NAME)*/; auto changeLog = create(); - changeLog->setData(QString(QJsonDocument(current.toJson()).toJson(QJsonDocument::Compact))); + changeLog->setData(QString::fromUtf8(QJsonDocument(current.toJson()).toJson(QJsonDocument::Compact))); changeLog->setVersion(current.version()); changeLogs->append(changeLog); q->saveChanges(true); diff --git a/src/nut/databasemodel.cpp b/src/nut/databasemodel.cpp index 6780bd2..251eac4 100644 --- a/src/nut/databasemodel.cpp +++ b/src/nut/databasemodel.cpp @@ -28,8 +28,8 @@ NUT_BEGIN_NAMESPACE QMap DatabaseModel::_models; -#define NODE_VERSION "version" -#define NODE_TABLES "tables" +#define NODE_VERSION QStringLiteral("version") +#define NODE_TABLES QStringLiteral("tables") DatabaseModel::DatabaseModel(const QString &name) : QList(), _databaseClassName(name), _version(0) { diff --git a/src/nut/defines.h b/src/nut/defines.h index b134de6..64795ac 100644 --- a/src/nut/defines.h +++ b/src/nut/defines.h @@ -23,7 +23,7 @@ #define NUT_NAMESPACE Nut -#include "defines_p.h" +#include "defines_consts.h" #include #include @@ -126,7 +126,7 @@ public slots: \ #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)); \ + propertyChanged(QStringLiteral(QT_STRINGIFY2(name##Id))); \ m_##name = name; \ m_##name##Id = name->primaryValue().value(); \ } \ @@ -136,10 +136,9 @@ public slots: \ 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)); \ + propertyChanged(QStringLiteral(QT_STRINGIFY2(name##Id))); \ } diff --git a/src/nut/defines_p.h b/src/nut/defines_consts.h similarity index 97% rename from src/nut/defines_p.h rename to src/nut/defines_consts.h index da3c417..380fc1b 100644 --- a/src/nut/defines_p.h +++ b/src/nut/defines_consts.h @@ -41,7 +41,7 @@ #define __nut_DEFAULT_VALUE "def" #define __nut_NOT_NULL "notnull" -#define __nut_FOREIGN_KEY "foreign_key" +#define __nut_FOREIGN_KEY "foreign_key" #define __nut_NEW "new" #define __nut_REMOVE "remove" #define __nut_CHANGE "change" diff --git a/src/nut/generators/postgresqlgenerator.cpp b/src/nut/generators/postgresqlgenerator.cpp index 4af2929..cd52026 100644 --- a/src/nut/generators/postgresqlgenerator.cpp +++ b/src/nut/generators/postgresqlgenerator.cpp @@ -262,7 +262,8 @@ QString PostgreSqlGenerator::escapeValue(const QVariant &v) const pt = pol.at(i); if (!ret.isEmpty()) ret.append(QStringLiteral("),(")); - ret.append(QString::number(pt.x()) + ", " + QString::number(pt.y())); + ret.append(QString::number(pt.x()) + + QStringLiteral(", ") + QString::number(pt.y())); } return QStringLiteral("'((") + ret + QStringLiteral("))'"); } diff --git a/src/nut/generators/sqlgeneratorbase.cpp b/src/nut/generators/sqlgeneratorbase.cpp index 2290be1..303d6d3 100644 --- a/src/nut/generators/sqlgeneratorbase.cpp +++ b/src/nut/generators/sqlgeneratorbase.cpp @@ -383,7 +383,8 @@ QString SqlGeneratorBase::join(const QString &mainTable, (*i)->masterTable->primaryKey())); if (order != Q_NULLPTR) - order->append((*i)->masterTable->name() + "." + (*i)->masterTable->primaryKey()); + order->append((*i)->masterTable->name() + QStringLiteral(".") + + (*i)->masterTable->primaryKey()); } } return ret; @@ -426,7 +427,8 @@ QString SqlGeneratorBase::join(const QStringList &list, QStringList *order) rel->localColumn, mainTable)); if (order != Q_NULLPTR) - order->append(mainTable + "." + rel->masterTable->primaryKey()); + order->append(mainTable + QStringLiteral(".") + + rel->masterTable->primaryKey()); } else{ rel = model.relationByClassNames(clone.first(), mainTable); @@ -437,7 +439,8 @@ QString SqlGeneratorBase::join(const QStringList &list, QStringList *order) rel->masterTable->primaryKey(), mainTable)); if (order != Q_NULLPTR) - order->append(mainTable + "." + rel->localColumn); + order->append(mainTable + QStringLiteral(".") + + rel->localColumn); } else { // qInfo("Relation for %s and %s not exists", @@ -552,7 +555,7 @@ QString SqlGeneratorBase::fromTableText(const QString &tableName, tableNameText = QStringLiteral("%1 INNER JOIN %2 ON (%1.%3 = %2.%4)") .arg(tableName, joinTableName, pk, rel->localColumn); - orderBy = tableName + "." + pk; + orderBy = tableName + QStringLiteral(".") + pk; } else { qWarning("Relation between table %s and class %s (%s) not exists!", qPrintable(tableName), @@ -927,7 +930,7 @@ QString SqlGeneratorBase::phrase(const PhraseData *d) const break; case PhraseData::WithoutOperand: - ret = phrase(d->left) + " " + operatorString(d->operatorCond); + ret = phrase(d->left) + QStringLiteral(" ") + operatorString(d->operatorCond); break; } diff --git a/src/nut/nut.pro b/src/nut/nut.pro index b5f2907..f8a7b05 100644 --- a/src/nut/nut.pro +++ b/src/nut/nut.pro @@ -15,7 +15,7 @@ HEADERS += \ $$PWD/tablesetbasedata.h \ $$PWD/types/dbgeography.h \ $$PWD/tableset.h \ - $$PWD/defines_p.h \ + $$PWD/defines_consts.h \ $$PWD/defines.h \ $$PWD/query.h \ $$PWD/databasemodel.h \ diff --git a/src/nut/phrases/phrasedata.cpp b/src/nut/phrases/phrasedata.cpp index 1005920..2316fd4 100644 --- a/src/nut/phrases/phrasedata.cpp +++ b/src/nut/phrases/phrasedata.cpp @@ -73,7 +73,8 @@ PhraseData &PhraseData::operator =(PhraseData &other) QString PhraseData::toString() const { - return QString(QStringLiteral("[%1].%2")).arg(className, fieldName); + return QStringLiteral("[%1].%2") + .arg(QString::fromUtf8(className), QString::fromUtf8(fieldName)); } void PhraseData::cleanUp() diff --git a/src/nut/phrases/phraselist.cpp b/src/nut/phrases/phraselist.cpp index a20c5b6..c44b2a9 100644 --- a/src/nut/phrases/phraselist.cpp +++ b/src/nut/phrases/phraselist.cpp @@ -30,13 +30,13 @@ PhraseList::PhraseList() : isValid(false) PhraseList::PhraseList(const PhraseList &other) : isValid(true) { - data = qMove(other.data); - const_cast(other).data.clear(); + data = other.data; } PhraseList::PhraseList(PhraseList &&other) { - data = other.data; + data = qMove(other.data); + const_cast(other).data.clear(); } PhraseList::PhraseList(const AbstractFieldPhrase &other) : isValid(true) diff --git a/src/nut/query.h b/src/nut/query.h index 38036d2..6797f15 100644 --- a/src/nut/query.h +++ b/src/nut/query.h @@ -118,12 +118,13 @@ Q_OUTOFLINE_TEMPLATE QList Query::select(const std::function ret; d->joins.prepend(d->tableName); - d->sql = d->database->sqlGenerator()->selectCommand( - d->tableName, - SqlGeneratorBase::SingleField, "*", - d->wherePhrase, - d->relations, - d->skip, d->take); + d->sql = d->database->sqlGenerator()->selectCommand(d->tableName, + SqlGeneratorBase::SingleField, + QStringLiteral("*"), + d->wherePhrase, + d->relations, + d->skip, + d->take); QSqlQuery q = d->database->exec(d->sql); @@ -153,7 +154,7 @@ Q_OUTOFLINE_TEMPLATE Query::Query(Database *database, TableSetBase *tableSet, d->database = database; d->tableSet = tableSet; - d->className = T::staticMetaObject.className(); + d->className = QString::fromUtf8(T::staticMetaObject.className()); d->tableName = d->database->model() .tableByClassName(d->className) @@ -207,7 +208,9 @@ Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) LevelData data; data.table = table; - data.keyFiledname = data.table->name() + "." + data.table->primaryKey(); + data.keyFiledname = data.table->name() + + QStringLiteral(".") + + data.table->primaryKey(); data.lastKeyValue = QVariant(); QHash masters; @@ -241,7 +244,7 @@ Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) if (!importedTables.count()) { LevelData data; data.table = d->database->model().tableByName(d->tableName); - data.keyFiledname = d->tableName + "." + data.table->primaryKey(); + data.keyFiledname = d->tableName + QStringLiteral(".") + data.table->primaryKey(); data.lastKeyValue = QVariant(); levels.append(data); @@ -314,8 +317,8 @@ Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) foreach (FieldModel *field, childFields) row->setProperty(field->name.toLatin1().data(), d->database->sqlGenerator()->unescapeValue( - field->type, - q.value(data.table->name() + "." + field->name))); + field->type, + q.value(data.table->name() + QStringLiteral(".") + field->name))); for (int i = 0; i < data.masters.count(); ++i) { int master = data.masters[i]; diff --git a/src/nut/sqlmodel.cpp b/src/nut/sqlmodel.cpp index 24f369a..aa007a0 100644 --- a/src/nut/sqlmodel.cpp +++ b/src/nut/sqlmodel.cpp @@ -70,7 +70,7 @@ QVariant SqlModel::data(const QModelIndex &index, int role) const return QVariant(); if (index.row() >= d->rows.count() || index.row() < 0) - return QVariant("-"); + return QVariant::fromValue(QStringLiteral("-")); if (role == Qt::DisplayRole) { Row t = d->rows.at(index.row()); diff --git a/src/nut/src.pri b/src/nut/src.pri index 502aaaa..0c29459 100644 --- a/src/nut/src.pri +++ b/src/nut/src.pri @@ -9,7 +9,7 @@ HEADERS += \ $$PWD/tablesetbasedata.h \ $$PWD/types/dbgeography.h \ $$PWD/tableset.h \ - $$PWD/defines_p.h \ + $$PWD/defines_consts.h \ $$PWD/defines.h \ $$PWD/query.h \ $$PWD/databasemodel.h \ diff --git a/src/nut/table.cpp b/src/nut/table.cpp index 0acb032..e5ee7e1 100644 --- a/src/nut/table.cpp +++ b/src/nut/table.cpp @@ -127,7 +127,7 @@ bool Table::setParentTable(Table *master, TableModel *masterModel, TableModel *m //Q_D(Table); d.detach(); - QString masterClassName = master->metaObject()->className(); + QString masterClassName = QString::fromUtf8(master->metaObject()->className()); d->refreshModel(); // if (!d->model) @@ -173,9 +173,9 @@ int Table::save(Database *db) { //Q_D(Table); - QSqlQuery q = db->exec(db->sqlGenerator()->saveRecord(this, db->tableName(metaObject()->className()))); + QSqlQuery q = db->exec(db->sqlGenerator()->saveRecord(this, db->tableName(QString::fromUtf8(metaObject()->className())))); - auto model = db->model().tableByClassName(metaObject()->className()); + auto model = db->model().tableByClassName(QString::fromUtf8(metaObject()->className())); if(status() == Added && model->isPrimaryKeyAutoIncrement()) setProperty(model->primaryKey().toLatin1().data(), q.lastInsertId()); diff --git a/src/nut/tablemodel.cpp b/src/nut/tablemodel.cpp index 723cf60..e36f23e 100644 --- a/src/nut/tablemodel.cpp +++ b/src/nut/tablemodel.cpp @@ -29,6 +29,11 @@ NUT_BEGIN_NAMESPACE +#define REL_LOCAL_COLUMN QStringLiteral("localColumn") +#define REL_LOCAL_PROPERTY QStringLiteral("localProperty") +#define REL_MASTER_CLASS_NAME QStringLiteral("masterClassName") +#define REL_FOREIGIN_COLUMN QStringLiteral("foreignColumn") + QString TableModel::name() const { return _name; @@ -128,7 +133,7 @@ TableModel::TableModel(int typeId, const QString &tableName) _typeId = typeId; _name = tableName; - _className = tableMetaObject->className(); + _className = QString::fromUtf8(tableMetaObject->className()); //#ifdef NUT_NAMESPACE // if(_className.startsWith(QT_STRINGIFY(NUT_NAMESPACE) "::")) @@ -146,7 +151,7 @@ TableModel::TableModel(int typeId, const QString &tableName) continue; } - if(type == __nut_FIELD){ + if(type == QStringLiteral(__nut_FIELD)) { auto *f = new FieldModel; f->name = f->displayName = name; _fields.append(f); @@ -155,15 +160,15 @@ TableModel::TableModel(int typeId, const QString &tableName) // Browse all fields for(int j = 1; j < tableMetaObject->propertyCount(); j++){ QMetaProperty fieldProperty = tableMetaObject->property(j); - - FieldModel *fieldObj = field(fieldProperty.name()); + auto name = QString::fromUtf8(fieldProperty.name()); + FieldModel *fieldObj = field(name); foreach (FieldModel *f, _fields) - if(f->name == fieldProperty.name()) + if(f->name == name) f = fieldObj; if(!fieldObj) continue; fieldObj->type = static_cast(fieldProperty.type()); - fieldObj->typeName = QString(fieldProperty.typeName()); + fieldObj->typeName = QString::fromUtf8(fieldProperty.typeName()); } // Browse class infos @@ -177,17 +182,17 @@ TableModel::TableModel(int typeId, const QString &tableName) continue; } - if(type == __nut_FOREIGN_KEY){ + if(type == QStringLiteral(__nut_FOREIGN_KEY)) { auto *fk = new RelationModel; fk->slaveTable = this; - fk->localColumn = name + "Id"; + fk->localColumn = name + QStringLiteral("Id"); fk->localProperty = name; fk->foreignColumn = value; fk->masterClassName = value; _foreignKeys.append(fk); } - if(type == __nut_FIELD){ + if(type == QStringLiteral(__nut_FIELD)) { } @@ -196,21 +201,21 @@ TableModel::TableModel(int typeId, const QString &tableName) if (!f) continue; - if (type == __nut_LEN) + if (type == QStringLiteral(__nut_LEN)) f->length = value.toInt(); - else if (type == __nut_NOT_NULL) + else if (type == QStringLiteral(__nut_NOT_NULL)) f->notNull = true; - else if (type == __nut_DEFAULT_VALUE) + else if (type == QStringLiteral(__nut_DEFAULT_VALUE)) f->defaultValue = value; - else if (type == __nut_PRIMARY_KEY) + else if (type == QStringLiteral(__nut_PRIMARY_KEY)) f->isPrimaryKey = true; - else if (type == __nut_AUTO_INCREMENT) + else if (type == QStringLiteral(__nut_AUTO_INCREMENT)) f->isAutoIncrement = true; - else if (type == __nut_UNIQUE) + else if (type == QStringLiteral(__nut_UNIQUE)) f->isUnique = true; - else if (type == __nut_DISPLAY) + else if (type == QStringLiteral(__nut_DISPLAY)) f->displayName = value.mid(1, value.length() - 2); - else if (type == __nut_PRIMARY_KEY_AI) { + else if (type == QStringLiteral(__nut_PRIMARY_KEY_AI)) { f->isPrimaryKey = true; f->isAutoIncrement = true; } @@ -237,27 +242,27 @@ TableModel::TableModel(const QJsonObject &json, const QString &tableName) : _typ { _name = tableName; - QJsonObject fields = json.value(__FIELDS).toObject(); - QJsonObject relations = json.value(__FOREIGN_KEYS).toObject(); + QJsonObject fields = json.value(QStringLiteral(__FIELDS)).toObject(); + QJsonObject relations = json.value(QStringLiteral(__FOREIGN_KEYS)).toObject(); foreach (QString key, fields.keys()) { QJsonObject fieldObject = fields.value(key).toObject(); //TODO: use FieldModel(QJsonObject) ctor auto *f = new FieldModel; - f->name = fieldObject.value(__NAME).toString(); - f->type = static_cast(QMetaType::type(fieldObject.value(__TYPE).toString().toLatin1().data())); - f->typeName = QMetaType::typeName(f->type); + f->name = fieldObject.value(QStringLiteral(__NAME)).toString(); + f->type = static_cast(QMetaType::type(fieldObject.value(QStringLiteral(__TYPE)).toString().toLatin1().data())); + f->typeName = QString::fromUtf8(QMetaType::typeName(f->type)); - if(fieldObject.contains(__nut_NOT_NULL)) - f->notNull = fieldObject.value(__nut_NOT_NULL).toBool(); + if(fieldObject.contains(QStringLiteral(__nut_NOT_NULL))) + f->notNull = fieldObject.value(QStringLiteral(__nut_NOT_NULL)).toBool(); - if(fieldObject.contains(__nut_UNIQUE)) - f->isUnique = fieldObject.value(__nut_UNIQUE).toBool(); + if(fieldObject.contains(QStringLiteral(__nut_UNIQUE))) + f->isUnique = fieldObject.value(QStringLiteral(__nut_UNIQUE)).toBool(); - if(fieldObject.contains(__nut_LEN)) - f->length = fieldObject.value(__nut_LEN).toInt(); + if(fieldObject.contains(QStringLiteral(__nut_LEN))) + f->length = fieldObject.value(QStringLiteral(__nut_LEN)).toInt(); - if(fieldObject.contains(__nut_DEFAULT_VALUE)) - f->defaultValue = fieldObject.value(__nut_DEFAULT_VALUE).toString(); + if(fieldObject.contains(QStringLiteral(__nut_DEFAULT_VALUE))) + f->defaultValue = fieldObject.value(QStringLiteral(__nut_DEFAULT_VALUE)).toString(); _fields.append(f); } @@ -281,34 +286,34 @@ QJsonObject TableModel::toJson() const foreach (FieldModel *f, _fields) { QJsonObject fieldObj; - fieldObj.insert(__NAME, f->name); - fieldObj.insert(__TYPE, QString(QVariant::typeToName(f->type))); + fieldObj.insert(QStringLiteral(__NAME), f->name); + fieldObj.insert(QStringLiteral(__TYPE), QString::fromUtf8(QVariant::typeToName(f->type))); if(f->length) - fieldObj.insert(__nut_LEN, f->length); + fieldObj.insert(QStringLiteral(__nut_LEN), f->length); if(f->notNull) - fieldObj.insert(__nut_NOT_NULL, f->notNull); + fieldObj.insert(QStringLiteral(__nut_NOT_NULL), f->notNull); if(f->isUnique) - fieldObj.insert(__nut_UNIQUE, f->isUnique); + fieldObj.insert(QStringLiteral(__nut_UNIQUE), f->isUnique); if(!f->defaultValue.isNull()) - fieldObj.insert(__nut_DEFAULT_VALUE, f->defaultValue); + fieldObj.insert(QStringLiteral(__nut_DEFAULT_VALUE), f->defaultValue); if(f->isAutoIncrement) - obj.insert(__nut_AUTO_INCREMENT, f->name); + obj.insert(QStringLiteral(__nut_AUTO_INCREMENT), f->name); if(f->isPrimaryKey) - obj.insert(__nut_PRIMARY_KEY, f->name); + obj.insert(QStringLiteral(__nut_PRIMARY_KEY), f->name); fieldsObj.insert(f->name, fieldObj); } foreach (RelationModel *rel, _foreignKeys) foreignKeysObj.insert(rel->localColumn, rel->toJson()); - obj.insert(__FIELDS, fieldsObj); - obj.insert(__FOREIGN_KEYS, foreignKeysObj); + obj.insert(QStringLiteral(__FIELDS), fieldsObj); + obj.insert(QStringLiteral(__FOREIGN_KEYS), foreignKeysObj); return obj; } @@ -335,7 +340,8 @@ QString TableModel::toString() const { QStringList sl; foreach (FieldModel *f, _fields) - sl.append(f->name + QStringLiteral(" ") + QVariant::typeToName(f->type)); + sl.append(f->name + QStringLiteral(" ") + + QString::fromUtf8(QVariant::typeToName(f->type))); QString ret = QStringLiteral("%1 (%2)") .arg(_name, sl.join(QStringLiteral(", "))); @@ -360,47 +366,47 @@ bool TableModel::isPrimaryKeyAutoIncrement() const FieldModel::FieldModel(const QJsonObject &json) { - name = json.value(__NAME).toString(); - type = static_cast(json.value(__TYPE).toInt()); - length = json.value(__nut_LEN).toInt(); - notNull = json.value(__nut_NOT_NULL).toBool(); - isUnique = json.value(__nut_UNIQUE).toBool(); - isAutoIncrement = json.value(__nut_AUTO_INCREMENT).toBool(); - isPrimaryKey = json.value(__nut_PRIMARY_KEY).toBool(); - defaultValue = json.value(__nut_DEFAULT_VALUE).toString(); - isUnique = json.value(__nut_UNIQUE).toBool(); + name = json.value(QStringLiteral(__NAME)).toString(); + type = static_cast(json.value(QStringLiteral(__TYPE)).toInt()); + length = json.value(QStringLiteral(__nut_LEN)).toInt(); + notNull = json.value(QStringLiteral(__nut_NOT_NULL)).toBool(); + isUnique = json.value(QStringLiteral(__nut_UNIQUE)).toBool(); + isAutoIncrement = json.value(QStringLiteral(__nut_AUTO_INCREMENT)).toBool(); + isPrimaryKey = json.value(QStringLiteral(__nut_PRIMARY_KEY)).toBool(); + defaultValue = json.value(QStringLiteral(__nut_DEFAULT_VALUE)).toString(); + isUnique = json.value(QStringLiteral(__nut_UNIQUE)).toBool(); } QJsonObject FieldModel::toJson() const { QJsonObject fieldObj; - fieldObj.insert(__NAME, name); - fieldObj.insert(__TYPE, QString(QVariant::typeToName(type))); - fieldObj.insert(__nut_LEN, length); - fieldObj.insert(__nut_NOT_NULL, notNull); - fieldObj.insert(__nut_UNIQUE, isUnique); - fieldObj.insert(__nut_AUTO_INCREMENT, isAutoIncrement); - fieldObj.insert(__nut_PRIMARY_KEY, isPrimaryKey); - fieldObj.insert(__nut_DEFAULT_VALUE, defaultValue); + fieldObj.insert(QStringLiteral(__NAME), name); + fieldObj.insert(QStringLiteral(__TYPE), QString::fromUtf8(QVariant::typeToName(type))); + fieldObj.insert(QStringLiteral(__nut_LEN), length); + fieldObj.insert(QStringLiteral(__nut_NOT_NULL), notNull); + fieldObj.insert(QStringLiteral(__nut_UNIQUE), isUnique); + fieldObj.insert(QStringLiteral(__nut_AUTO_INCREMENT), isAutoIncrement); + fieldObj.insert(QStringLiteral(__nut_PRIMARY_KEY), isPrimaryKey); + fieldObj.insert(QStringLiteral(__nut_DEFAULT_VALUE), defaultValue); return fieldObj; } RelationModel::RelationModel(const QJsonObject &obj) { - localColumn = obj.value("localColumn").toString(); - localProperty = obj.value("localProperty").toString(); - masterClassName = obj.value("masterClassName").toString(); - foreignColumn = obj.value("foreignColumn").toString(); + localColumn = obj.value(REL_LOCAL_COLUMN).toString(); + localProperty = obj.value(REL_LOCAL_PROPERTY).toString(); + masterClassName = obj.value(REL_MASTER_CLASS_NAME).toString(); + foreignColumn = obj.value(REL_FOREIGIN_COLUMN).toString(); slaveTable = masterTable = nullptr; } QJsonObject RelationModel::toJson() const { QJsonObject o; - o.insert("localColumn", localColumn); - o.insert("localProperty", localProperty); - o.insert("masterClassName", masterClassName); - o.insert("foreignColumn", foreignColumn); + o.insert(REL_LOCAL_COLUMN, localColumn); + o.insert(REL_LOCAL_PROPERTY, localProperty); + o.insert(REL_MASTER_CLASS_NAME, masterClassName); + o.insert(REL_FOREIGIN_COLUMN, foreignColumn); return o; } diff --git a/src/nut/tableset.h b/src/nut/tableset.h index 3199a5f..de804f0 100644 --- a/src/nut/tableset.h +++ b/src/nut/tableset.h @@ -70,13 +70,13 @@ public: template Q_OUTOFLINE_TEMPLATE TableSet::TableSet(Database *parent) : TableSetBase(parent) { - data->childClassName = T::staticMetaObject.className(); + data->childClassName = QString::fromUtf8(T::staticMetaObject.className()); } template Q_OUTOFLINE_TEMPLATE TableSet::TableSet(Table *parent) : TableSetBase(parent) { - data->childClassName = T::staticMetaObject.className(); + data->childClassName = QString::fromUtf8(T::staticMetaObject.className()); } template diff --git a/src/nut/tablesetbase.cpp b/src/nut/tablesetbase.cpp index f0df091..b30398b 100644 --- a/src/nut/tablesetbase.cpp +++ b/src/nut/tablesetbase.cpp @@ -50,13 +50,13 @@ int TableSetBase::save(Database *db, bool cleanUp) int rowsAffected = 0; TableModel *masterModel = nullptr; if (data->table) - masterModel = db->model().tableByClassName(data->table->metaObject()->className()); + masterModel = db->model().tableByClassName(QString::fromUtf8(data->table->metaObject()->className())); foreach (Row
t, data->childs) { if (data->table) t->setParentTable(data->table, masterModel, - db->model().tableByClassName(t->metaObject()->className())); + db->model().tableByClassName(QString::fromUtf8(t->metaObject()->className()))); if (t->status() == Table::Added || t->status() == Table::Modified diff --git a/tests/auto/common/comment.h b/tests/auto/common/comment.h index e7628ab..52ab829 100644 --- a/tests/auto/common/comment.h +++ b/tests/auto/common/comment.h @@ -3,7 +3,7 @@ #include #include -#include "table.h" +#include #ifdef NUT_NAMESPACE using namespace NUT_NAMESPACE; diff --git a/tests/auto/common/consts.h b/tests/auto/common/consts.h index 7db1eb1..9080229 100644 --- a/tests/auto/common/consts.h +++ b/tests/auto/common/consts.h @@ -13,7 +13,7 @@ .arg(__func__) #ifdef Q_OS_LINUX -#define DRIVER "QSQLITE" +#define DRIVER QStringLiteral("QSQLITE") #define DATABASE QStringLiteral("/tmp/testdb.sqlite") #define HOST QString() #define USERNAME QString() diff --git a/tests/auto/common/nut-lib.pri b/tests/auto/common/nut-lib.pri index 50d93a8..d6dacb4 100644 --- a/tests/auto/common/nut-lib.pri +++ b/tests/auto/common/nut-lib.pri @@ -1,9 +1,9 @@ win32 { - CONFIG(debug,debug|release): LIBDIR = $$absolute_path($$OUT_PWD/../../src/debug) - CONFIG(release,debug|release): LIBDIR = $$absolute_path($$OUT_PWD/../../src/release) + CONFIG(debug,debug|release): LIBDIR = $$absolute_path($$OUT_PWD/../../../src/nut/debug) + CONFIG(release,debug|release): LIBDIR = $$absolute_path($$OUT_PWD/../../../src/nut/release) LIBS += -L$$LIBDIR -lnut } else { - LIBDIR = $$absolute_path($$OUT_PWD/../../src) + LIBDIR = $$absolute_path($$OUT_PWD/../../../lib) android: { contains(ANDROID_TARGET_ARCH,armeabi-v7a) { @@ -19,11 +19,19 @@ win32 { LIBS += -L$$LIBDIR -lnut_x86_64 } } else { - LIBS += -L$$LIBDIR -lnut +# LIBS += -L$$LIBDIR -lnut } } -INCLUDEPATH += $$PWD/../../src $$PWD/../common +#INCLUDEPATH += $$PWD/../../../src/nut +INCLUDEPATH += $$PWD/../common + +QT += nut DEFINES += NUT_SHARED_POINTER DEFINES += NUT_PATH=\\\"$$PWD/../../\\\" + +runtarget.target = run-tests +runtarget.CONFIG = recursive +runtarget.recurse_target = run-tests +QMAKE_EXTRA_TARGETS += runtarget diff --git a/tests/auto/common/post.h b/tests/auto/common/post.h index cca0944..9112c27 100644 --- a/tests/auto/common/post.h +++ b/tests/auto/common/post.h @@ -3,9 +3,9 @@ #include #include -#include "table.h" -#include "database.h" -#include "databasemodel.h" +#include +#include +#include #ifdef NUT_NAMESPACE using namespace NUT_NAMESPACE; diff --git a/tests/auto/common/score.h b/tests/auto/common/score.h index f8c3579..53dfcb6 100644 --- a/tests/auto/common/score.h +++ b/tests/auto/common/score.h @@ -2,7 +2,7 @@ #define SCORE_H #include -#include "table.h" +#include class User; class Post; diff --git a/tests/auto/common/user.h b/tests/auto/common/user.h index ad7a2c3..1f617fe 100644 --- a/tests/auto/common/user.h +++ b/tests/auto/common/user.h @@ -1,8 +1,8 @@ #ifndef USER_H #define USER_H -#include "table.h" -#include "tableset.h" +#include +#include #include #include diff --git a/tests/auto/common/weblogdatabase.h b/tests/auto/common/weblogdatabase.h index fb807a8..bedb418 100644 --- a/tests/auto/common/weblogdatabase.h +++ b/tests/auto/common/weblogdatabase.h @@ -1,7 +1,7 @@ #ifndef TDATABASE_H #define TDATABASE_H -#include "database.h" +#include #ifdef NUT_NAMESPACE using namespace NUT_NAMESPACE; diff --git a/tests/auto/tst_datatypes/tst_datatypes.cpp b/tests/auto/tst_datatypes/tst_datatypes.cpp index 0f27e9f..a0503f6 100644 --- a/tests/auto/tst_datatypes/tst_datatypes.cpp +++ b/tests/auto/tst_datatypes/tst_datatypes.cpp @@ -13,8 +13,8 @@ #include "sampletable.h" -#include "generators/sqlitegenerator.h" -#include "generators/sqlservergenerator.h" +#include +#include DataTypesTest::DataTypesTest(QObject *parent) : QObject(parent) { diff --git a/tests/auto/tst_generators/tst_generators.cpp b/tests/auto/tst_generators/tst_generators.cpp index eb8d513..1563b96 100644 --- a/tests/auto/tst_generators/tst_generators.cpp +++ b/tests/auto/tst_generators/tst_generators.cpp @@ -6,10 +6,10 @@ #include #include "tablemodel.h" -#include "generators/sqlitegenerator.h" -#include "generators/sqlservergenerator.h" -#include "generators/mysqlgenerator.h" -#include "generators/postgresqlgenerator.h" +#include +#include +#include +#include #include "tst_generators.h"