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

View File

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

View File

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