From 06d661e4de4a96378b1ae61f6bf3e9c1e1c11b68 Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Wed, 19 Jun 2019 13:46:55 +0430 Subject: [PATCH 1/2] minor bug fix [skip ci] --- src/defines.h | 5 +++++ src/query.h | 8 -------- src/sqlmodel.cpp | 14 ++++---------- src/sqlmodel.h | 8 +++----- src/sqlmodel_p.h | 4 +--- src/tableset.h | 13 +++++++------ 6 files changed, 20 insertions(+), 32 deletions(-) diff --git a/src/defines.h b/src/defines.h index 22efbb0..035b4a3 100644 --- a/src/defines.h +++ b/src/defines.h @@ -209,6 +209,11 @@ inline Row create() { return QSharedPointer(new T); } +template +inline Row create(QObject *parent) { + return QSharedPointer(new T(parent)); +} + template inline T *get(T *row) { return row; diff --git a/src/query.h b/src/query.h index 57b6a1d..17738a1 100644 --- a/src/query.h +++ b/src/query.h @@ -57,14 +57,6 @@ template bool m_autoDelete; public: -//#ifdef NUT_SHARED_POINTER -// typedef QList> RowList; -// typedef QSharedPointer Row; -//#else -// typedef QList RowList; -// typedef T* Row; -//#endif - explicit Query(Database *database, TableSetBase *tableSet, bool autoDelete); ~Query(); diff --git a/src/sqlmodel.cpp b/src/sqlmodel.cpp index 153b892..300b89e 100644 --- a/src/sqlmodel.cpp +++ b/src/sqlmodel.cpp @@ -40,9 +40,8 @@ void SqlModel::setRenderer(const std::function &render } SqlModel::SqlModel(Database *database, TableSetBase *tableSet, QObject *parent) : - QAbstractTableModel(parent), d_ptr(new SqlModelPrivate(this)), _renderer(nullptr) + QAbstractTableModel(parent), d(new SqlModelPrivate(this)), _renderer(nullptr) { - Q_D(SqlModel); d->model = database->model() .tableByClassName(tableSet->childClassName()); d->tableName = d->model->name(); @@ -54,20 +53,17 @@ SqlModel::SqlModel(Database *database, TableSetBase *tableSet, QObject *parent) int SqlModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); - Q_D(const SqlModel); return d->rows.count(); } int SqlModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); - Q_D(const SqlModel); return d->model->fields().count(); } QVariant SqlModel::data(const QModelIndex &index, int role) const { - Q_D(const SqlModel); if (!index.isValid()) return QVariant(); @@ -104,7 +100,7 @@ QVariant SqlModel::data(const QModelIndex &index, int role) const void SqlModel::setRows(RowList rows) { - Q_D(SqlModel); + d.detach(); beginRemoveRows(QModelIndex(), 0, d->rows.count()); d->rows.clear(); endRemoveRows(); @@ -115,7 +111,7 @@ void SqlModel::setRows(RowList
rows) void SqlModel::append(Row
table) { - Q_D(SqlModel); + d.detach(); beginInsertRows(QModelIndex(), d->rows.count(), d->rows.count()); d->rows.append(table); endInsertRows(); @@ -129,7 +125,6 @@ void SqlModel::append(Row
table) QVariant SqlModel::headerData(int section, Qt::Orientation orientation, int role) const { if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { - Q_D(const SqlModel); return d->model->field(section)->displayName; } return QAbstractItemModel::headerData(section, orientation, role); @@ -137,11 +132,10 @@ QVariant SqlModel::headerData(int section, Qt::Orientation orientation, int role Row
SqlModel::at(const int &i) const { - Q_D(const SqlModel); return d->rows.at(i); } -SqlModelPrivate::SqlModelPrivate(SqlModel *parent) : q_ptr(parent) +SqlModelPrivate::SqlModelPrivate(SqlModel *parent) { } diff --git a/src/sqlmodel.h b/src/sqlmodel.h index 3539576..61900f8 100644 --- a/src/sqlmodel.h +++ b/src/sqlmodel.h @@ -23,6 +23,8 @@ #include #include "defines.h" +#include "sqlmodel_p.h" +#include #include #include @@ -30,7 +32,6 @@ NUT_BEGIN_NAMESPACE class Database; class TableSetBase; -class SqlModelPrivate; class Table; class TableModel; @@ -60,8 +61,7 @@ public: void setRenderer(const std::function &renderer); private: - SqlModelPrivate *d_ptr; - Q_DECLARE_PRIVATE(SqlModel) + QExplicitlySharedDataPointer d; signals: void beforeShowText(int col, QVariant &value); @@ -70,8 +70,6 @@ signals: template Q_OUTOFLINE_TEMPLATE void SqlModel::setTable(RowList rows) { - Q_D(SqlModel); - RowList
tab; foreach (auto t, rows) tab.append(t); diff --git a/src/sqlmodel_p.h b/src/sqlmodel_p.h index 1991d9c..26c7730 100644 --- a/src/sqlmodel_p.h +++ b/src/sqlmodel_p.h @@ -10,9 +10,7 @@ NUT_BEGIN_NAMESPACE class SqlModel; class Table; class TableModel; -class SqlModelPrivate { - SqlModel *q_ptr; - Q_DECLARE_PUBLIC(SqlModel) +class SqlModelPrivate : public QSharedData { public: explicit SqlModelPrivate(SqlModel *parent); diff --git a/src/tableset.h b/src/tableset.h index d85e1d6..6b6f55d 100644 --- a/src/tableset.h +++ b/src/tableset.h @@ -54,8 +54,8 @@ public: void append(Row t); void append(RowList t); - void remove(T *t); - void remove(QList t); + void remove(Row t); + void remove(RowList t); int length() const; T *at(int i) const; @@ -135,18 +135,19 @@ Q_OUTOFLINE_TEMPLATE void TableSet::append(RowList t) } template -Q_OUTOFLINE_TEMPLATE void TableSet::remove(T *t) +Q_OUTOFLINE_TEMPLATE void TableSet::remove(Row t) { data.detach(); + data->childs.removeOne(t.data()); + data->tables.remove(t.data()); data->childs.removeOne(t); - data->tables.remove(t); t->setStatus(Table::Deleted); } template -Q_OUTOFLINE_TEMPLATE void TableSet::remove(QList t) +Q_OUTOFLINE_TEMPLATE void TableSet::remove(RowList t) { - foreach (T* i, t) + foreach (Row i, t) remove(i); } From a199d91135bdbab5c8c953c755e47d24b7895695 Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Wed, 19 Jun 2019 13:54:58 +0430 Subject: [PATCH 2/2] minor bug fix [skip ci] --- src/generators/postgresqlgenerator.cpp | 2 +- src/generators/sqlgeneratorbase_p.h | 3 +++ src/generators/sqlservergenerator.cpp | 7 ------- src/query.h | 2 +- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/generators/postgresqlgenerator.cpp b/src/generators/postgresqlgenerator.cpp index a6d368d..e1da1c2 100644 --- a/src/generators/postgresqlgenerator.cpp +++ b/src/generators/postgresqlgenerator.cpp @@ -170,7 +170,7 @@ QString PostgreSqlGenerator::fieldType(FieldModel *field) case QMetaType::QJsonValue: case QMetaType::QJsonObject: case QMetaType::QJsonDocument: - return "JSON"; + return "JSONB"; case QMetaType::QStringList: return "TEXT[]"; diff --git a/src/generators/sqlgeneratorbase_p.h b/src/generators/sqlgeneratorbase_p.h index 9c9bf1a..e6acf73 100644 --- a/src/generators/sqlgeneratorbase_p.h +++ b/src/generators/sqlgeneratorbase_p.h @@ -159,6 +159,9 @@ protected: QString agregateText(const AgregateType &t, const QString &arg = QString()) const; QString fromTableText(const QString &tableName, QString &joinClassName, QString &orderBy) const; // QString createWhere(QList &wheres); + + void replaceTableNames(QString &command); + void removeTableNames(QString &command); }; NUT_END_NAMESPACE diff --git a/src/generators/sqlservergenerator.cpp b/src/generators/sqlservergenerator.cpp index 3b1d2e9..0731b59 100644 --- a/src/generators/sqlservergenerator.cpp +++ b/src/generators/sqlservergenerator.cpp @@ -186,11 +186,4 @@ void SqlServerGenerator::appendSkipTake(QString &sql, int skip, int take) .arg(skip).arg(take)); } -void SqlServerGenerator::replaceTableNames(QString &command) -{ - foreach (TableModel *m, TableModel::allModels()) - command = command - .replace("[" + m->className() + "]", m->name() ); -} - NUT_END_NAMESPACE diff --git a/src/query.h b/src/query.h index 17738a1..b535df3 100644 --- a/src/query.h +++ b/src/query.h @@ -177,7 +177,7 @@ Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) d->sql = d->database->sqlGenertor()->selectCommand( d->tableName, d->fieldPhrase, d->wherePhrase, d->orderPhrase, d->relations, d->skip, d->take); -qDebug()<sql; + QSqlQuery q = d->database->exec(d->sql); if (q.lastError().isValid()) { qDebug() << q.lastError().text();