From 4e0731f50d4d3121430b12d91566243bfa040bf4 Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Thu, 18 Jul 2019 11:39:31 +0430 Subject: [PATCH] tbc --- src/defines.h | 5 +++-- src/query.h | 43 ++++++++++++++++++++++++------------------- 2 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/defines.h b/src/defines.h index 17d1032..218ab52 100644 --- a/src/defines.h +++ b/src/defines.h @@ -102,14 +102,15 @@ public slots: Q_PROPERTY(keytype name##Id READ read##Id WRITE write##Id) \ public: \ Nut::Row read() const; \ - void write(Nut::Row name); \ + 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; \ } \ - keytype read##Id() const; \ +public slots: \ + void write(Nut::Row name); \ void write##Id(keytype name##Id); #define NUT_FOREIGN_KEY_IMPLEMENT(class, type, keytype, name, read, write) \ diff --git a/src/query.h b/src/query.h index e53fc04..e20bb5c 100644 --- a/src/query.h +++ b/src/query.h @@ -288,34 +288,35 @@ Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) data.lastKeyValue = q.value(data.keyFiledname); //create table row - Table *tbl; - Row table; + Table *table; + Row
tablePointer; + const QMetaObject *childMetaObject; if (data.table->className() == d->className) { - tbl = new T; + table = new T; + childMetaObject = &T::staticMetaObject; // table = Nut::create(); #ifdef NUT_SHARED_POINTER - table.reset(tbl); - returnList.append(qSharedPointerCast(table)); + tablePointer.reset(table); + returnList.append(qSharedPointerCast(tablePointer)); #else returnList.append(qobject_cast(table1)); #endif - d->tableSet->add(table); + d->tableSet->add(tablePointer); // table->setParentTableSet(d->tableSet); } else { - const QMetaObject *childMetaObject - = QMetaType::metaObjectForType(data.table->typeId()); - tbl = qobject_cast
(childMetaObject->newInstance()); - if (!tbl) + childMetaObject = QMetaType::metaObjectForType(data.table->typeId()); + table = qobject_cast
(childMetaObject->newInstance()); + if (!table) qFatal("Could not create instance of %s", qPrintable(data.table->name())); - table.reset(tbl); + tablePointer.reset(table); } QList childFields = data.table->fields(); foreach (FieldModel *field, childFields) - table->setProperty(field->name.toLatin1().data(), + tablePointer->setProperty(field->name.toLatin1().data(), d->database->sqlGenertor()->unescapeValue( field->type, q.value(data.table->name() + "." + field->name))); @@ -325,7 +326,11 @@ Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) #ifdef NUT_SHARED_POINTER QString mName = QString("set%1").arg(levels[master].lastRow->metaObject()->className()); QString type = QString("Nut::Row<%1>").arg(levels[master].lastRow->metaObject()->className()); - bool ok = tbl->metaObject()->invokeMethod(tbl, + for (int i = 0; i < table->metaObject()->methodCount(); ++i) { + QMetaMethod m = table->metaObject()->method(i); + qDebug() << m.name(); + } + bool ok = table->metaObject()->invokeMethod(table, mName.toLocal8Bit().data(), QGenericArgument(type.toLatin1().data(), levels[master].lastRow)); #else @@ -335,22 +340,22 @@ Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) if (!ok) qWarning("Unable to set property %s::%s", - table->metaObject()->className(), data.masterFields[i].toLocal8Bit().data()); + tablePointer->metaObject()->className(), data.masterFields[i].toLocal8Bit().data()); auto tableset = levels[master].lastRow->childTableSet( data.table->className()); // table->setParentTableSet(tableset); //#ifdef NUT_SHARED_POINTER - tableset->add(table); + tableset->add(tablePointer); //#endif } - table->setStatus(Table::FeatchedFromDB); - table->setParent(this); - table->clear(); + tablePointer->setStatus(Table::FeatchedFromDB); + tablePointer->setParent(this); + tablePointer->clear(); //set last created row - data.lastRow = tbl;///*QSharedPointer
*/(table.data()); + data.lastRow = table;///*QSharedPointer
*/(table.data()); } //while } // while