Merge branch 'qt_module' of https://github.com/HamedMasafi/Nut into qt_module
This commit is contained in:
commit
c30870ef1f
|
|
@ -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:
|
||||
|
|
|
|||
2
nut.pri
2
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 \
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 2dc11b380a07424a4face3046cc6b5e50aefb700
|
||||
Subproject commit acbd68924feb9ee412b4d69bbf24cb3a3cffdfd6
|
||||
|
|
@ -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<ChangeLogTable>();
|
||||
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);
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@ NUT_BEGIN_NAMESPACE
|
|||
|
||||
QMap<QString, DatabaseModel*> 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<TableModel*>(), _databaseClassName(name), _version(0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
|
||||
#define NUT_NAMESPACE Nut
|
||||
|
||||
#include "defines_p.h"
|
||||
#include "defines_consts.h"
|
||||
#include <QtCore/QtGlobal>
|
||||
|
||||
#include <QtCore/QString>
|
||||
|
|
@ -126,7 +126,7 @@ public slots: \
|
|||
#define NUT_FOREIGN_KEY_IMPLEMENT(class, type, keytype, name, read, write) \
|
||||
Nut::Row<type> class::read() const { return m_##name ; } \
|
||||
void class::write(Nut::Row<type> name){ \
|
||||
propertyChanged(QT_STRINGIFY2(name##Id)); \
|
||||
propertyChanged(QStringLiteral(QT_STRINGIFY2(name##Id))); \
|
||||
m_##name = name; \
|
||||
m_##name##Id = name->primaryValue().value<keytype>(); \
|
||||
} \
|
||||
|
|
@ -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))); \
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -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("))'");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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 \
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -30,13 +30,13 @@ PhraseList::PhraseList() : isValid(false)
|
|||
|
||||
PhraseList::PhraseList(const PhraseList &other) : isValid(true)
|
||||
{
|
||||
data = qMove(other.data);
|
||||
const_cast<PhraseList&>(other).data.clear();
|
||||
data = other.data;
|
||||
}
|
||||
|
||||
PhraseList::PhraseList(PhraseList &&other)
|
||||
{
|
||||
data = other.data;
|
||||
data = qMove(other.data);
|
||||
const_cast<PhraseList&>(other).data.clear();
|
||||
}
|
||||
|
||||
PhraseList::PhraseList(const AbstractFieldPhrase &other) : isValid(true)
|
||||
|
|
|
|||
|
|
@ -118,12 +118,13 @@ Q_OUTOFLINE_TEMPLATE QList<O> Query<T>::select(const std::function<O (const QSql
|
|||
QList<O> 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<T>::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<T> Query<T>::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<QString, QString> masters;
|
||||
|
|
@ -241,7 +244,7 @@ Q_OUTOFLINE_TEMPLATE RowList<T> Query<T>::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<T> Query<T>::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];
|
||||
|
|
|
|||
|
|
@ -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<Table> t = d->rows.at(index.row());
|
||||
|
|
|
|||
|
|
@ -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 \
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
||||
|
|
|
|||
|
|
@ -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<QMetaType::Type>(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>(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>(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<QMetaType::Type>(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<QMetaType::Type>(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;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -70,13 +70,13 @@ public:
|
|||
template<class T>
|
||||
Q_OUTOFLINE_TEMPLATE TableSet<T>::TableSet(Database *parent) : TableSetBase(parent)
|
||||
{
|
||||
data->childClassName = T::staticMetaObject.className();
|
||||
data->childClassName = QString::fromUtf8(T::staticMetaObject.className());
|
||||
}
|
||||
|
||||
template<class T>
|
||||
Q_OUTOFLINE_TEMPLATE TableSet<T>::TableSet(Table *parent) : TableSetBase(parent)
|
||||
{
|
||||
data->childClassName = T::staticMetaObject.className();
|
||||
data->childClassName = QString::fromUtf8(T::staticMetaObject.className());
|
||||
}
|
||||
|
||||
template<class T>
|
||||
|
|
|
|||
|
|
@ -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<Table> 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
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
#include <QtCore/qglobal.h>
|
||||
#include <QtCore/QDateTime>
|
||||
#include "table.h"
|
||||
#include <QtNut/table.h>
|
||||
|
||||
#ifdef NUT_NAMESPACE
|
||||
using namespace NUT_NAMESPACE;
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@
|
|||
|
||||
#include <QtCore/qglobal.h>
|
||||
#include <QtCore/QDateTime>
|
||||
#include "table.h"
|
||||
#include "database.h"
|
||||
#include "databasemodel.h"
|
||||
#include <QtNut/table.h>
|
||||
#include <QtNut/database.h>
|
||||
#include <QtNut/databasemodel.h>
|
||||
|
||||
#ifdef NUT_NAMESPACE
|
||||
using namespace NUT_NAMESPACE;
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
#define SCORE_H
|
||||
|
||||
#include <QUuid>
|
||||
#include "table.h"
|
||||
#include <QtNut/table.h>
|
||||
|
||||
class User;
|
||||
class Post;
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
#ifndef USER_H
|
||||
#define USER_H
|
||||
|
||||
#include "table.h"
|
||||
#include "tableset.h"
|
||||
#include <QtNut/table.h>
|
||||
#include <QtNut/tableset.h>
|
||||
|
||||
#include <QtCore/QUuid>
|
||||
#include <QtCore/QString>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#ifndef TDATABASE_H
|
||||
#define TDATABASE_H
|
||||
|
||||
#include "database.h"
|
||||
#include <QtNut/database.h>
|
||||
|
||||
#ifdef NUT_NAMESPACE
|
||||
using namespace NUT_NAMESPACE;
|
||||
|
|
|
|||
|
|
@ -13,8 +13,8 @@
|
|||
|
||||
#include "sampletable.h"
|
||||
|
||||
#include "generators/sqlitegenerator.h"
|
||||
#include "generators/sqlservergenerator.h"
|
||||
#include <QtNut/sqlitegenerator.h>
|
||||
#include <QtNut/sqlservergenerator.h>
|
||||
|
||||
DataTypesTest::DataTypesTest(QObject *parent) : QObject(parent)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,10 +6,10 @@
|
|||
#include <QObject>
|
||||
|
||||
#include "tablemodel.h"
|
||||
#include "generators/sqlitegenerator.h"
|
||||
#include "generators/sqlservergenerator.h"
|
||||
#include "generators/mysqlgenerator.h"
|
||||
#include "generators/postgresqlgenerator.h"
|
||||
#include <QtNut/sqlitegenerator.h>
|
||||
#include <QtNut/sqlservergenerator.h>
|
||||
#include <QtNut/mysqlgenerator.h>
|
||||
#include <QtNut/postgresqlgenerator.h>
|
||||
|
||||
#include "tst_generators.h"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue