Nut::Table::d changed to QExplicitlySharedDataPointer

This commit is contained in:
Hamed.Masafi 2019-07-17 17:11:33 +04:30
parent 765ac9a5e3
commit 34f494e674
4 changed files with 24 additions and 22 deletions

2
3rdparty/serializer vendored

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

View File

@ -44,12 +44,12 @@ NUT_BEGIN_NAMESPACE
*/
Table::Table(QObject *parent) : QObject(parent),
d_ptr(new TablePrivate(this))
d(new TablePrivate(this))
{ }
Table::~Table()
{
Q_D(Table);
//Q_D(Table);
if (d->parentTableSet)
d->parentTableSet->remove(this);
@ -57,19 +57,19 @@ Table::~Table()
void Table::add(TableSetBase *t)
{
Q_D(Table);
//Q_D(Table);
d->childTableSets.insert(t);
}
//QString Table::primaryKey() const
//{
// Q_D(const Table);
// //Q_D(const Table);
// return d->model->primaryKey();
//}
//bool Table::isPrimaryKeyAutoIncrement() const
//{
// Q_D(const Table);
// //Q_D(const Table);
// FieldModel *pk = d->model->field(d->model->primaryKey());
// if (!pk)
// return false;
@ -84,7 +84,7 @@ void Table::add(TableSetBase *t)
void Table::propertyChanged(const QString &propName)
{
Q_D(Table);
//Q_D(Table);
// if (!d->model)
// d->model = TableModel::findByClassName(metaObject()->className());
@ -95,6 +95,7 @@ void Table::propertyChanged(const QString &propName)
// if(f->isPrimaryKey && propName == f->name && f->isAutoIncrement)
// return;
d.detach();
d->changedProperties.insert(propName);
if (d->status == FeatchedFromDB)
d->status = Modified;
@ -105,25 +106,26 @@ void Table::propertyChanged(const QString &propName)
void Table::setModel(TableModel *model)
{
Q_D(Table);
//Q_D(Table);
d->model = model;
}
void Table::clear()
{
Q_D(Table);
//Q_D(Table);
d->changedProperties.clear();
}
QSet<QString> Table::changedProperties() const
{
Q_D(const Table);
//Q_D(const Table);
return d->changedProperties;
}
bool Table::setParentTable(Table *master, TableModel *masterModel, TableModel *model)
{
Q_D(Table);
//Q_D(Table);
d.detach();
QString masterClassName = master->metaObject()->className();
d->refreshModel();
@ -145,13 +147,13 @@ bool Table::setParentTable(Table *master, TableModel *masterModel, TableModel *m
TableSetBase *Table::parentTableSet() const
{
Q_D(const Table);
//Q_D(const Table);
return d->parentTableSet;
}
void Table::setParentTableSet(TableSetBase *parent)
{
Q_D(Table);
//Q_D(Table);
d->parentTableSet = parent;
if (parent)
@ -160,7 +162,7 @@ void Table::setParentTableSet(TableSetBase *parent)
TableSetBase *Table::childTableSet(const QString &name) const
{
Q_D(const Table);
//Q_D(const Table);
foreach (TableSetBase *t, d->childTableSets)
if (t->childClassName() == name)
return t;
@ -169,7 +171,7 @@ TableSetBase *Table::childTableSet(const QString &name) const
int Table::save(Database *db)
{
Q_D(Table);
//Q_D(Table);
QSqlQuery q = db->exec(db->sqlGenertor()->saveRecord(this, db->tableName(metaObject()->className())));
@ -186,19 +188,19 @@ int Table::save(Database *db)
Table::Status Table::status() const
{
Q_D(const Table);
//Q_D(const Table);
return static_cast<Status>(d->status);
}
void Table::setStatus(const Status &status)
{
Q_D(Table);
//Q_D(Table);
d->status = status;
}
TablePrivate::TablePrivate(Table *parent) : q_ptr(parent),
TablePrivate::TablePrivate(Table *parent) : QSharedData(),
model(nullptr), status(Table::NewCreated), parentTableSet(nullptr)
{
@ -206,7 +208,7 @@ TablePrivate::TablePrivate(Table *parent) : q_ptr(parent),
void TablePrivate::refreshModel()
{
Q_Q(Table);
// Q_Q(Table);
// if (!model)
// model = TableModel::findByClassName(q->metaObject()->className());
}

View File

@ -38,8 +38,7 @@ class TablePrivate;
class NUT_EXPORT Table : public QObject
{
Q_OBJECT
TablePrivate *d_ptr;
Q_DECLARE_PRIVATE(Table)
QExplicitlySharedDataPointer<TablePrivate> d;
public:
explicit Table(QObject *parentTableSet = nullptr);

View File

@ -4,13 +4,14 @@
#include "defines.h"
#include <QtCore/QSet>
#include <QSharedData>
NUT_BEGIN_NAMESPACE
class TableModel;
class Table;
class TableSetBase;
class TablePrivate {
class TablePrivate : public QSharedData {
Table *q_ptr;
Q_DECLARE_PUBLIC(Table)