done
This commit is contained in:
parent
a25e94e930
commit
5dc28f024a
|
|
@ -264,12 +264,12 @@ inline Row<T> create(QObject *parent) {
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
inline T *get(T *row) {
|
inline Row<T> createFrom(T *row) {
|
||||||
return row;
|
return QSharedPointer<T>(row);
|
||||||
}
|
}
|
||||||
template<class T>
|
template<class T>
|
||||||
inline T *get(const QSharedPointer<T> row) {
|
inline Row<T> createFrom(const QSharedPointer<T> row) {
|
||||||
return row.data();
|
return row;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
@ -299,32 +299,6 @@ inline T *get(const QSharedPointer<T> row) {
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
//template<class C, typename T>
|
|
||||||
//struct ForeignKeyData {
|
|
||||||
// Nut::Row<C> _table;
|
|
||||||
// T _id;
|
|
||||||
|
|
||||||
// ForeignKeyData() : _table(nullptr)
|
|
||||||
// {}
|
|
||||||
|
|
||||||
// void setTable(Nut::Row<C> t) {
|
|
||||||
// _table = t;
|
|
||||||
// _id = t->primaryValue().value<T>();
|
|
||||||
// }
|
|
||||||
// Nut::Row<C> table() const {
|
|
||||||
// return _table;
|
|
||||||
// }
|
|
||||||
// void setValue(const T& val) {
|
|
||||||
// _table = nullptr;
|
|
||||||
// _id = val;
|
|
||||||
// }
|
|
||||||
// T value() const {
|
|
||||||
// if (_table)
|
|
||||||
// return _table->primaryValue().value<T>();
|
|
||||||
// return _id;
|
|
||||||
// }
|
|
||||||
//};
|
|
||||||
|
|
||||||
NUT_END_NAMESPACE
|
NUT_END_NAMESPACE
|
||||||
|
|
||||||
#endif // SYNTAX_DEFINES_H
|
#endif // SYNTAX_DEFINES_H
|
||||||
|
|
|
||||||
|
|
@ -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.
|
* \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.
|
* A query can be used for getting data from database.
|
||||||
* \code
|
* \code
|
||||||
* auto q = db.posts()->createQuery();
|
* auto q = db.posts()->query();
|
||||||
* q->join(Post::commentsTable());
|
* q->join(Post::commentsTable());
|
||||||
* q->orderBy(!Post::saveDateField() & Post::bodyField());
|
* q->orderBy(!Post::saveDateField() & Post::bodyField());
|
||||||
* q->setWhere(Post::idField() > 5);
|
* q->where(Post::idField() > 5);
|
||||||
*
|
*
|
||||||
* auto posts = q->toList();
|
* auto posts = q->toList();
|
||||||
* \endcode
|
* \endcode
|
||||||
|
|
@ -59,7 +59,7 @@ QueryPrivate::~QueryPrivate()
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \fn Query<T> *Query::setWhere(WherePhrase where)
|
* \fn Query<T> *Query::where(WherePhrase where)
|
||||||
* Where phrase is a phrase using table's static field methods.
|
* Where phrase is a phrase using table's static field methods.
|
||||||
* \code
|
* \code
|
||||||
* q->setWhere(Post::idField() == 4 || Post::titleField().isNull());
|
* q->setWhere(Post::idField() == 4 || Post::titleField().isNull());
|
||||||
|
|
|
||||||
55
src/query.h
55
src/query.h
|
|
@ -288,75 +288,48 @@ Q_OUTOFLINE_TEMPLATE RowList<T> Query<T>::toList(int count)
|
||||||
data.lastKeyValue = q.value(data.keyFiledname);
|
data.lastKeyValue = q.value(data.keyFiledname);
|
||||||
|
|
||||||
//create table row
|
//create table row
|
||||||
Table *table;
|
Row<Table> row;
|
||||||
Row<Table> shp;
|
|
||||||
if (data.table->className() == d->className) {
|
if (data.table->className() == d->className) {
|
||||||
table = new T();
|
row = Nut::create<T>();
|
||||||
#ifdef NUT_SHARED_POINTER
|
#ifdef NUT_SHARED_POINTER
|
||||||
shp = QSharedPointer<Table>(table);
|
returnList.append(row.objectCast<T>());
|
||||||
returnList.append(shp.objectCast<T>());
|
|
||||||
d->tableSet->add(shp);
|
|
||||||
#else
|
#else
|
||||||
returnList.append(dynamic_cast<T*>(table));
|
returnList.append(dynamic_cast<T*>(table));
|
||||||
#endif
|
#endif
|
||||||
table->setParentTableSet(d->tableSet);
|
d->tableSet->add(row);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
Table *table;
|
||||||
const QMetaObject *childMetaObject
|
const QMetaObject *childMetaObject
|
||||||
= QMetaType::metaObjectForType(data.table->typeId());
|
= QMetaType::metaObjectForType(data.table->typeId());
|
||||||
table = qobject_cast<Table *>(childMetaObject->newInstance());
|
table = qobject_cast<Table *>(childMetaObject->newInstance());
|
||||||
|
// table = dynamic_cast<Table *>(QMetaType::create(data.table->typeId()));
|
||||||
if (!table)
|
if (!table)
|
||||||
qFatal("Could not create instance of %s",
|
qFatal("Could not create instance of %s",
|
||||||
qPrintable(data.table->name()));
|
qPrintable(data.table->name()));
|
||||||
shp = QSharedPointer<Table>(table);
|
row = createFrom(table);
|
||||||
}
|
}
|
||||||
const char *className = table->metaObject()->className();
|
|
||||||
connect(table, &QObject::destroyed, [className](QObject *){
|
|
||||||
qDebug() << "Destroyed " << className;
|
|
||||||
});
|
|
||||||
|
|
||||||
QList<FieldModel*> childFields = data.table->fields();
|
QList<FieldModel*> childFields = data.table->fields();
|
||||||
foreach (FieldModel *field, childFields)
|
foreach (FieldModel *field, childFields)
|
||||||
table->setProperty(field->name.toLatin1().data(),
|
row->setProperty(field->name.toLatin1().data(),
|
||||||
d->database->sqlGenertor()->unescapeValue(
|
d->database->sqlGenertor()->unescapeValue(
|
||||||
field->type,
|
field->type,
|
||||||
q.value(data.table->name() + "." + field->name)));
|
q.value(data.table->name() + "." + field->name)));
|
||||||
|
|
||||||
for (int i = 0; i < data.masters.count(); ++i) {
|
for (int i = 0; i < data.masters.count(); ++i) {
|
||||||
int master = data.masters[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(
|
auto tableset = levels[master].lastRow->childTableSet(
|
||||||
data.table->className());
|
data.table->className());
|
||||||
// table->setParentTableSet(tableset);
|
tableset->add(row);
|
||||||
#ifdef NUT_SHARED_POINTER
|
|
||||||
tableset->add(shp);
|
|
||||||
#else
|
|
||||||
tableset->add(table);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
table->setStatus(Table::FeatchedFromDB);
|
row->setStatus(Table::FeatchedFromDB);
|
||||||
table->setParent(this);
|
row->setParent(this);
|
||||||
table->clear();
|
row->clear();
|
||||||
|
|
||||||
//set last created row
|
//set last created row
|
||||||
data.lastRow = /*QSharedPointer<Table>*/(table);
|
data.lastRow = row.data();
|
||||||
} //while
|
} //while
|
||||||
} // while
|
} // while
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -53,11 +53,6 @@ public:
|
||||||
int take;
|
int take;
|
||||||
PhraseList orderPhrase, fieldPhrase;
|
PhraseList orderPhrase, fieldPhrase;
|
||||||
ConditionalPhrase wherePhrase;
|
ConditionalPhrase wherePhrase;
|
||||||
|
|
||||||
// QList<WherePhrase> wheres;
|
|
||||||
// QList<WherePhrase> orderPhrases;
|
|
||||||
// QList<WherePhrase> fields;
|
|
||||||
// QHash<QString, QString> orders;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
NUT_END_NAMESPACE
|
NUT_END_NAMESPACE
|
||||||
|
|
|
||||||
|
|
@ -40,9 +40,6 @@ TableSetBase::TableSetBase(Table *parent) : QObject(parent),
|
||||||
|
|
||||||
TableSetBase::~TableSetBase()
|
TableSetBase::~TableSetBase()
|
||||||
{
|
{
|
||||||
// foreach (Table *t, data->tables)
|
|
||||||
// t->setParentTableSet(nullptr);
|
|
||||||
|
|
||||||
foreach (Row<Table> t, data->childs)
|
foreach (Row<Table> t, data->childs)
|
||||||
if (t)
|
if (t)
|
||||||
t->setParentTableSet(nullptr);
|
t->setParentTableSet(nullptr);
|
||||||
|
|
@ -66,10 +63,10 @@ int TableSetBase::save(Database *db, bool cleanUp)
|
||||||
|| t->status() == Table::Deleted){
|
|| t->status() == Table::Deleted){
|
||||||
rowsAffected += t->save(db);
|
rowsAffected += t->save(db);
|
||||||
if(cleanUp)
|
if(cleanUp)
|
||||||
#ifndef NUT_SHARED_POINTER
|
#ifdef NUT_SHARED_POINTER
|
||||||
t->deleteLater();
|
|
||||||
#else
|
|
||||||
remove(t);
|
remove(t);
|
||||||
|
#else
|
||||||
|
t->deleteLater();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -89,22 +86,6 @@ void TableSetBase::clearChilds()
|
||||||
data->childs.clear();
|
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<Table> t)
|
void TableSetBase::add(Row<Table> t)
|
||||||
{
|
{
|
||||||
data.detach();
|
data.detach();
|
||||||
|
|
@ -115,7 +96,7 @@ void TableSetBase::add(Row<Table> t)
|
||||||
void TableSetBase::remove(Row<Table> t)
|
void TableSetBase::remove(Row<Table> t)
|
||||||
{
|
{
|
||||||
data.detach();
|
data.detach();
|
||||||
data->childs.removeOne(t);
|
data->childs.removeAll(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
QString TableSetBase::childClassName() const
|
QString TableSetBase::childClassName() const
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue