diff --git a/src/defines.h b/src/defines.h index b19a690..9299611 100644 --- a/src/defines.h +++ b/src/defines.h @@ -264,12 +264,12 @@ inline Row create(QObject *parent) { } template -inline T *get(T *row) { - return row; +inline Row createFrom(T *row) { + return QSharedPointer(row); } template -inline T *get(const QSharedPointer row) { - return row.data(); +inline Row createFrom(const QSharedPointer row) { + return row; } #else @@ -299,32 +299,6 @@ inline T *get(const QSharedPointer row) { #endif -//template -//struct ForeignKeyData { -// Nut::Row _table; -// T _id; - -// ForeignKeyData() : _table(nullptr) -// {} - -// void setTable(Nut::Row t) { -// _table = t; -// _id = t->primaryValue().value(); -// } -// Nut::Row table() const { -// return _table; -// } -// void setValue(const T& val) { -// _table = nullptr; -// _id = val; -// } -// T value() const { -// if (_table) -// return _table->primaryValue().value(); -// return _id; -// } -//}; - NUT_END_NAMESPACE #endif // SYNTAX_DEFINES_H diff --git a/src/query.cpp b/src/query.cpp index 3a77151..84c94e3 100644 --- a/src/query.cpp +++ b/src/query.cpp @@ -38,10 +38,10 @@ QueryPrivate::~QueryPrivate() * \brief This class hold a query. A query can be used for getting database rows, editing or deleting without row fetching. * A query can be used for getting data from database. * \code - * auto q = db.posts()->createQuery(); + * auto q = db.posts()->query(); * q->join(Post::commentsTable()); * q->orderBy(!Post::saveDateField() & Post::bodyField()); - * q->setWhere(Post::idField() > 5); + * q->where(Post::idField() > 5); * * auto posts = q->toList(); * \endcode @@ -59,7 +59,7 @@ QueryPrivate::~QueryPrivate() */ /*! - * \fn Query *Query::setWhere(WherePhrase where) + * \fn Query *Query::where(WherePhrase where) * Where phrase is a phrase using table's static field methods. * \code * q->setWhere(Post::idField() == 4 || Post::titleField().isNull()); diff --git a/src/query.h b/src/query.h index c6729ab..5088773 100644 --- a/src/query.h +++ b/src/query.h @@ -288,75 +288,48 @@ Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) data.lastKeyValue = q.value(data.keyFiledname); //create table row - Table *table; - Row shp; + Row
row; if (data.table->className() == d->className) { - table = new T(); + row = Nut::create(); #ifdef NUT_SHARED_POINTER - shp = QSharedPointer
(table); - returnList.append(shp.objectCast()); - d->tableSet->add(shp); + returnList.append(row.objectCast()); #else returnList.append(dynamic_cast(table)); #endif - table->setParentTableSet(d->tableSet); + d->tableSet->add(row); + } else { + Table *table; const QMetaObject *childMetaObject = QMetaType::metaObjectForType(data.table->typeId()); table = qobject_cast
(childMetaObject->newInstance()); +// table = dynamic_cast
(QMetaType::create(data.table->typeId())); if (!table) qFatal("Could not create instance of %s", qPrintable(data.table->name())); - shp = QSharedPointer
(table); + row = createFrom(table); } - const char *className = table->metaObject()->className(); - connect(table, &QObject::destroyed, [className](QObject *){ - qDebug() << "Destroyed " << className; - }); QList childFields = data.table->fields(); foreach (FieldModel *field, childFields) - table->setProperty(field->name.toLatin1().data(), + row->setProperty(field->name.toLatin1().data(), d->database->sqlGenertor()->unescapeValue( field->type, q.value(data.table->name() + "." + field->name))); for (int i = 0; i < data.masters.count(); ++i) { int master = data.masters[i]; -//#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 = table->metaObject()->invokeMethod(table, -// mName.toLocal8Bit().data(), -// QGenericArgument(type.toLatin1().data(), levels[master].lastRow)); -//// bool ok = table->setProperty(data.masterFields[i].toLocal8Bit().data(), -//// QVariant::fromValue(shp.data())); - -//#else -// bool ok = table->setProperty(data.masterFields[i].toLocal8Bit().data(), -// QVariant::fromValue(levels[master].lastRow)); -//#endif - -// if (!ok) -// qWarning("Unable to set property %s::%s", -// table->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(shp); -#else - tableset->add(table); -#endif + tableset->add(row); } - table->setStatus(Table::FeatchedFromDB); - table->setParent(this); - table->clear(); + row->setStatus(Table::FeatchedFromDB); + row->setParent(this); + row->clear(); //set last created row - data.lastRow = /*QSharedPointer
*/(table); + data.lastRow = row.data(); } //while } // while diff --git a/src/query_p.h b/src/query_p.h index a6a2b03..2b65dfb 100644 --- a/src/query_p.h +++ b/src/query_p.h @@ -53,11 +53,6 @@ public: int take; PhraseList orderPhrase, fieldPhrase; ConditionalPhrase wherePhrase; - -// QList wheres; -// QList orderPhrases; -// QList fields; -// QHash orders; }; NUT_END_NAMESPACE diff --git a/src/tablesetbase.cpp b/src/tablesetbase.cpp index f979e30..5eb9b67 100644 --- a/src/tablesetbase.cpp +++ b/src/tablesetbase.cpp @@ -40,9 +40,6 @@ TableSetBase::TableSetBase(Table *parent) : QObject(parent), TableSetBase::~TableSetBase() { -// foreach (Table *t, data->tables) -// t->setParentTableSet(nullptr); - foreach (Row
t, data->childs) if (t) t->setParentTableSet(nullptr); @@ -66,10 +63,10 @@ int TableSetBase::save(Database *db, bool cleanUp) || t->status() == Table::Deleted){ rowsAffected += t->save(db); if(cleanUp) -#ifndef NUT_SHARED_POINTER - t->deleteLater(); -#else +#ifdef NUT_SHARED_POINTER remove(t); +#else + t->deleteLater(); #endif } } @@ -89,22 +86,6 @@ void TableSetBase::clearChilds() data->childs.clear(); } -//void TableSetBase::add(Table *t) -//{ -// if(!data->tables.contains(get(t))){ -// data.detach(); -// data->tables.insert(get(t)); -// data->childRows.append(get(t)); -// } -//} - -//void TableSetBase::remove(Table *t) -//{ -// data.detach(); -// data->tables.remove(get(t)); -// data->childRows.removeOne(get(t)); -//} - void TableSetBase::add(Row
t) { data.detach(); @@ -115,7 +96,7 @@ void TableSetBase::add(Row
t) void TableSetBase::remove(Row
t) { data.detach(); - data->childs.removeOne(t); + data->childs.removeAll(t); } QString TableSetBase::childClassName() const