try to polish Query::toList

This commit is contained in:
Hamed Masafi 2019-07-17 18:13:30 +04:30
parent 34f494e674
commit 65b94d363b
5 changed files with 46 additions and 47 deletions

2
3rdparty/serializer vendored

@ -1 +1 @@
Subproject commit 51500a497933444196942ee0db6628338a0422af
Subproject commit e0bdec4a7c93b4d4307fd89200000ff817a86c99

View File

@ -272,14 +272,14 @@ Q_OUTOFLINE_TEMPLATE RowList<T> Query<T>::toList(int count)
// check if key value is changed
if (data.lastKeyValue == q.value(data.keyFiledname)) {
--p;
qDebug() << "key os not changed for" << data.keyFiledname;
// qDebug() << "key os not changed for" << data.keyFiledname;
continue;
}
// check if master if current table has processed
foreach (int m, data.masters)
if (!checked[m]) {
qDebug() << "row is checked";
// qDebug() << "row is checked";
continue;
}
@ -288,26 +288,29 @@ Q_OUTOFLINE_TEMPLATE RowList<T> Query<T>::toList(int count)
data.lastKeyValue = q.value(data.keyFiledname);
//create table row
Table *table;
Row<T> shp;
Table *tbl;
Row<Table> table;
if (data.table->className() == d->className) {
table = new T();
tbl = new T;
// table = Nut::create<T>();
#ifdef NUT_SHARED_POINTER
shp = QSharedPointer<T>(qobject_cast<T*>(table));
returnList.append(shp);
d->tableSet->add(shp);
table.reset(tbl);
returnList.append(qSharedPointerCast<T>(table));
#else
returnList.append(dynamic_cast<T*>(table));
returnList.append(qobject_cast<T>(table1));
#endif
table->setParentTableSet(d->tableSet);
d->tableSet->add(table);
// table->setParentTableSet(d->tableSet);
} else {
const QMetaObject *childMetaObject
= QMetaType::metaObjectForType(data.table->typeId());
table = qobject_cast<Table *>(childMetaObject->newInstance());
if (!table)
tbl = qobject_cast<Table *>(childMetaObject->newInstance());
if (!tbl)
qFatal("Could not create instance of %s",
qPrintable(data.table->name()));
table.reset(tbl);
}
QList<FieldModel*> childFields = data.table->fields();
@ -322,7 +325,7 @@ Q_OUTOFLINE_TEMPLATE RowList<T> Query<T>::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 = table->metaObject()->invokeMethod(table,
bool ok = tbl->metaObject()->invokeMethod(tbl,
mName.toLocal8Bit().data(),
QGenericArgument(type.toLatin1().data(), levels[master].lastRow));
#else
@ -336,10 +339,10 @@ Q_OUTOFLINE_TEMPLATE RowList<T> Query<T>::toList(int count)
auto tableset = levels[master].lastRow->childTableSet(
data.table->className());
table->setParentTableSet(tableset);
#ifdef NUT_SHARED_POINTER
tableset->add(qSharedPointerCast<Table>(shp));
#endif
// table->setParentTableSet(tableset);
//#ifdef NUT_SHARED_POINTER
tableset->add(table);
//#endif
}
table->setStatus(Table::FeatchedFromDB);
@ -347,7 +350,7 @@ Q_OUTOFLINE_TEMPLATE RowList<T> Query<T>::toList(int count)
table->clear();
//set last created row
data.lastRow = /*QSharedPointer<Table>*/(table);
data.lastRow = tbl;///*QSharedPointer<Table>*/(table.data());
} //while
} // while

View File

@ -51,8 +51,8 @@ Table::~Table()
{
//Q_D(Table);
if (d->parentTableSet)
d->parentTableSet->remove(this);
// if (d->parentTableSet)
// d->parentTableSet->remove(this);
}
void Table::add(TableSetBase *t)
@ -156,8 +156,8 @@ void Table::setParentTableSet(TableSetBase *parent)
//Q_D(Table);
d->parentTableSet = parent;
if (parent)
d->parentTableSet->add(this);
// if (parent)
// d->parentTableSet->add(this);
}
TableSetBase *Table::childTableSet(const QString &name) const

View File

@ -44,7 +44,8 @@ TableSetBase::~TableSetBase()
t->setParentTableSet(nullptr);
foreach (Row<Table> t, data->childs)
t->setParentTableSet(nullptr);
if (t)
t->setParentTableSet(nullptr);
}
int TableSetBase::save(Database *db, bool cleanUp)
@ -54,7 +55,7 @@ int TableSetBase::save(Database *db, bool cleanUp)
if (data->table)
masterModel = db->model().tableByClassName(data->table->metaObject()->className());
foreach (Table *t, data->childRows) {
foreach (Row<Table> t, data->childs) {
if(data->table)
t->setParentTable(data->table,
masterModel,
@ -88,26 +89,27 @@ void TableSetBase::clearChilds()
data->childRows.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::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::remove(Table *t)
//{
// data.detach();
// data->tables.remove(get(t));
// data->childRows.removeOne(get(t));
//}
void TableSetBase::add(Row<Table> t)
{
data.detach();
data->childs.append(t);
t->setParentTableSet(this);
}
void TableSetBase::remove(Row<Table> t)

View File

@ -49,17 +49,11 @@ public:
void setDatabase(Database *database);
protected:
// QSet<Table*> _tables;
// RowList<Table> _childRows;
// Database *_database;
// Table *_table;
//// QString _tableName;
// QString _childClassName;
QExplicitlySharedDataPointer<TableSetBaseData> data;
public://TODO: change this to private
void add(Table* t);
void remove(Table *t);
// void add(Table* t);
// void remove(Table *t);
void add(Row<Table> t);
void remove(Row<Table> t);