diff --git a/src/nut/abstractquery.cpp b/src/nut/abstractquery.cpp new file mode 100644 index 0000000..f2dd832 --- /dev/null +++ b/src/nut/abstractquery.cpp @@ -0,0 +1,43 @@ +/************************************************************************** +** +** This file is part of Nut project. +** https://github.com/HamedMasafi/Nut +** +** Nut is free software: you can redistribute it and/or modify +** it under the terms of the GNU Lesser General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** Nut is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU Lesser General Public License for more details. +** +** You should have received a copy of the GNU Lesser General Public License +** along with Nut. If not, see . +** +**************************************************************************/ + +#include "abstractquery.h" +#include "abstractquery_p.h" + +NUT_BEGIN_NAMESPACE + +AbstractQuery::AbstractQuery(QObject *parent) : QObject(parent) + , d_ptr(new AbstractQueryPrivate(this)) +{ + +} + +Nut::AbstractQueryPrivate::AbstractQueryPrivate(Nut::AbstractQuery *parent) : + q_ptr(parent) +{ + +} + +Nut::AbstractQueryPrivate::~AbstractQueryPrivate() +{ + +} + +NUT_END_NAMESPACE diff --git a/src/nut/querybase_p.h b/src/nut/abstractquery.h similarity index 74% rename from src/nut/querybase_p.h rename to src/nut/abstractquery.h index f714927..8618e72 100644 --- a/src/nut/querybase_p.h +++ b/src/nut/abstractquery.h @@ -18,37 +18,36 @@ ** **************************************************************************/ -#ifndef QUERYBASE_H -#define QUERYBASE_H +#ifndef NUT_ABSTRACTQUERY_H +#define NUT_ABSTRACTQUERY_H #include #include #include #include "defines.h" -#include "query_p.h" +#include "abstractquery_p.h" NUT_BEGIN_NAMESPACE -//TODO: remove this class -class Table; -class AbstractTableSet; -class NUT_EXPORT QueryBase : public QObject +class AbstractQueryPrivate; +class NUT_EXPORT AbstractQuery : public QObject { Q_OBJECT protected: - QExplicitlySharedDataPointer d; + AbstractQueryPrivate *d_ptr; + Q_DECLARE_PRIVATE(AbstractQuery) public: - explicit QueryBase(QObject *parent = nullptr); + explicit AbstractQuery(QObject *parent = nullptr); protected: -// void addTableToSet(AbstractTableSet *set, Table *table); + // void addTableToSet(TableSetBase *set, Table *table); public slots: }; NUT_END_NAMESPACE -#endif // QUERYBASE_H +#endif // NUT_ABSTRACTQUERY_H diff --git a/src/nut/query_p.h b/src/nut/abstractquery_p.h similarity index 71% rename from src/nut/query_p.h rename to src/nut/abstractquery_p.h index ed7e2a4..e432869 100644 --- a/src/nut/query_p.h +++ b/src/nut/abstractquery_p.h @@ -18,8 +18,19 @@ ** **************************************************************************/ -#ifndef QUERY_P_H -#define QUERY_P_H +#ifndef NUT_QUERY_P_H +#define NUT_QUERY_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of qapplication_*.cpp, qwidget*.cpp and qfiledialog.cpp. This header +// file may change from version to version without notice, or even be removed. +// +// We mean it. +// #include "phrase.h" @@ -31,15 +42,15 @@ NUT_BEGIN_NAMESPACE class Database; class AbstractTableSet; -class QueryBase; +class AbstractQuery; struct RelationModel; -class NUT_EXPORT QueryPrivate : public QSharedData { - QueryBase *q_ptr; - Q_DECLARE_PUBLIC(QueryBase) +class NUT_EXPORT AbstractQueryPrivate { + AbstractQuery *q_ptr; + Q_DECLARE_PUBLIC(AbstractQuery) public: - explicit QueryPrivate(QueryBase *parent); - ~QueryPrivate(); + explicit AbstractQueryPrivate(AbstractQuery *parent); + ~AbstractQueryPrivate(); QString sql; QString className; @@ -57,4 +68,4 @@ public: NUT_END_NAMESPACE -#endif // QUERY_P_H +#endif // NUT_QUERY_P_H diff --git a/src/nut/abstracttableset.h b/src/nut/abstracttableset.h index b78012b..5644005 100644 --- a/src/nut/abstracttableset.h +++ b/src/nut/abstracttableset.h @@ -26,7 +26,7 @@ #include #include -#include "defines.h" +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/abstracttablesetdata.h b/src/nut/abstracttablesetdata.h index 7f00b14..c53448c 100644 --- a/src/nut/abstracttablesetdata.h +++ b/src/nut/abstracttablesetdata.h @@ -22,7 +22,8 @@ #define NUT_ABSTRACTTABLESETDATA_H #include -#include "defines.h" + +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/bulkinserter.h b/src/nut/bulkinserter.h index 95af330..7ba47c6 100644 --- a/src/nut/bulkinserter.h +++ b/src/nut/bulkinserter.h @@ -3,9 +3,10 @@ #include #include -#include "defines.h" -#include "phraselist.h" -#include "fieldphrase.h" +#include +#include + +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/changelogtable.h b/src/nut/changelogtable.h index e42b61d..76f6c38 100644 --- a/src/nut/changelogtable.h +++ b/src/nut/changelogtable.h @@ -22,7 +22,7 @@ #define CHANGELOGTABLE_H #include -#include "table.h" +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/database.h b/src/nut/database.h index afffe70..c88c9d6 100644 --- a/src/nut/database.h +++ b/src/nut/database.h @@ -26,8 +26,8 @@ #include #include -#include "defines.h" -#include "tableset.h" +#include +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/database_p.h b/src/nut/database_p.h index b817b77..c401b6a 100644 --- a/src/nut/database_p.h +++ b/src/nut/database_p.h @@ -21,12 +21,12 @@ #ifndef DATABASE_P_H #define DATABASE_P_H -#include "database.h" -#include "databasemodel.h" - #include #include +#include +#include + NUT_BEGIN_NAMESPACE class ChangeLogTable; diff --git a/src/nut/databasemodel.h b/src/nut/databasemodel.h index 8afe966..5b8e17c 100644 --- a/src/nut/databasemodel.h +++ b/src/nut/databasemodel.h @@ -25,7 +25,7 @@ #include #include -#include "defines.h" +#include class QJsonObject; diff --git a/src/nut/defines.h b/src/nut/defines.h index 64795ac..aa6725e 100644 --- a/src/nut/defines.h +++ b/src/nut/defines.h @@ -23,7 +23,7 @@ #define NUT_NAMESPACE Nut -#include "defines_consts.h" +#include #include #include diff --git a/src/nut/generators/abstractsqlgenerator.h b/src/nut/generators/abstractsqlgenerator.h index 8a16b56..fe39608 100644 --- a/src/nut/generators/abstractsqlgenerator.h +++ b/src/nut/generators/abstractsqlgenerator.h @@ -24,7 +24,8 @@ #include #include #include -#include "phrase.h" + +#include class SqlSerializer; diff --git a/src/nut/generators/mysqlgenerator.h b/src/nut/generators/mysqlgenerator.h index 121b34b..289069f 100644 --- a/src/nut/generators/mysqlgenerator.h +++ b/src/nut/generators/mysqlgenerator.h @@ -22,7 +22,8 @@ #define MYSQLGENERATOR_H #include -#include "abstractsqlgenerator.h" + +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/generators/postgresqlgenerator.h b/src/nut/generators/postgresqlgenerator.h index c691975..7d5865b 100644 --- a/src/nut/generators/postgresqlgenerator.h +++ b/src/nut/generators/postgresqlgenerator.h @@ -22,7 +22,8 @@ #define POSTGRESQLGENERATOR_H #include -#include "abstractsqlgenerator.h" + +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/generators/sqlitegenerator.h b/src/nut/generators/sqlitegenerator.h index 33a6b86..693f379 100644 --- a/src/nut/generators/sqlitegenerator.h +++ b/src/nut/generators/sqlitegenerator.h @@ -22,7 +22,8 @@ #define SQLITEGENERATOR_H #include -#include "abstractsqlgenerator.h" + +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/generators/sqlservergenerator.h b/src/nut/generators/sqlservergenerator.h index d67647c..6156fe5 100644 --- a/src/nut/generators/sqlservergenerator.h +++ b/src/nut/generators/sqlservergenerator.h @@ -22,7 +22,8 @@ #define SQLSERVERGENERATOR_H #include -#include "abstractsqlgenerator.h" + +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/nut.pro b/src/nut/nut.pro index f8a7db8..b6a4057 100644 --- a/src/nut/nut.pro +++ b/src/nut/nut.pro @@ -30,9 +30,7 @@ HEADERS += \ $$PWD/changelogtable.h \ $$PWD/abstracttableset.h \ $$PWD/abstracttablesetdata.h \ - $$PWD/querybase_p.h \ $$PWD/tablemodel.h \ - $$PWD/query_p.h \ $$PWD/table.h \ $$PWD/database.h \ $$PWD/database_p.h \ @@ -49,7 +47,9 @@ HEADERS += \ $$PWD/phrases/phrasedatalist.h \ $$PWD/phrases/phraselist.h \ $$PWD/phrases/datephrase.h \ - $$PWD/table_p.h + $$PWD/table_p.h \ + $$PWD/abstractquery.h \ + $$PWD/abstractquery_p.h SOURCES += \ $$PWD/generators/abstractsqlgenerator.cpp \ @@ -64,7 +64,6 @@ SOURCES += \ $$PWD/databasemodel.cpp \ $$PWD/abstracttableset.cpp \ $$PWD/changelogtable.cpp \ - $$PWD/querybase.cpp \ $$PWD/tablemodel.cpp \ $$PWD/table.cpp \ $$PWD/database.cpp \ @@ -79,7 +78,8 @@ SOURCES += \ $$PWD/phrases/phrasedata.cpp \ $$PWD/phrases/phrasedatalist.cpp \ $$PWD/phrases/phraselist.cpp \ - $$PWD/phrases/datephrase.cpp + $$PWD/phrases/datephrase.cpp \ + $$PWD/abstractquery.cpp load(qt_module) diff --git a/src/nut/phrase.h b/src/nut/phrase.h index 4433f8d..30fb6df 100644 --- a/src/nut/phrase.h +++ b/src/nut/phrase.h @@ -21,16 +21,16 @@ #ifndef PHRASE_H #define PHRASE_H -#include "conditionalphrase.h" -#include "abstractfieldphrase.h" -#include "fieldphrase.h" -#include "phraselist.h" -#include "assignmentphraselist.h" -#include "phrasedatalist.h" -#include "phrasedata.h" -#include "assignmentphrase.h" -#include "numericphrase.h" -#include "datephrase.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/phrases/abstractfieldphrase.h b/src/nut/phrases/abstractfieldphrase.h index b09dc7e..0745fa5 100644 --- a/src/nut/phrases/abstractfieldphrase.h +++ b/src/nut/phrases/abstractfieldphrase.h @@ -21,11 +21,10 @@ #ifndef ABSTRACTFIELDPHRASE_H #define ABSTRACTFIELDPHRASE_H -#include "defines.h" - -#include "assignmentphrase.h" -#include "conditionalphrase.h" -#include "phraselist.h" +#include +#include +#include +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/phrases/assignmentphrase.h b/src/nut/phrases/assignmentphrase.h index a23c169..fc2711f 100644 --- a/src/nut/phrases/assignmentphrase.h +++ b/src/nut/phrases/assignmentphrase.h @@ -21,9 +21,8 @@ #ifndef ASSIGNMENTPHRASE_H #define ASSIGNMENTPHRASE_H -#include "defines.h" - -#include "assignmentphraselist.h" +#include +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/phrases/assignmentphraselist.h b/src/nut/phrases/assignmentphraselist.h index 4d779a5..7e0c897 100644 --- a/src/nut/phrases/assignmentphraselist.h +++ b/src/nut/phrases/assignmentphraselist.h @@ -21,7 +21,7 @@ #ifndef ASSIGNMENTPHRASELIST_H #define ASSIGNMENTPHRASELIST_H -#include "defines.h" +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/phrases/conditionalphrase.h b/src/nut/phrases/conditionalphrase.h index 49c6aaa..33d2ad7 100644 --- a/src/nut/phrases/conditionalphrase.h +++ b/src/nut/phrases/conditionalphrase.h @@ -21,7 +21,7 @@ #ifndef CONDITIONALPHRASE_H #define CONDITIONALPHRASE_H -#include "phrasedata.h" +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/phrases/datephrase.h b/src/nut/phrases/datephrase.h index 005936f..b76cd1e 100644 --- a/src/nut/phrases/datephrase.h +++ b/src/nut/phrases/datephrase.h @@ -21,10 +21,11 @@ #ifndef DATEPHRASE_H #define DATEPHRASE_H -#include "fieldphrase.h" #include #include +#include + NUT_BEGIN_NAMESPACE #define COMMON_OPERATORS_DECL(T) \ diff --git a/src/nut/phrases/fieldphrase.h b/src/nut/phrases/fieldphrase.h index 71dc4b3..7ef4b6d 100644 --- a/src/nut/phrases/fieldphrase.h +++ b/src/nut/phrases/fieldphrase.h @@ -21,9 +21,8 @@ #ifndef FIELDPHRASE_H #define FIELDPHRASE_H -#include "defines.h" - -#include "abstractfieldphrase.h" +#include +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/phrases/numericphrase.h b/src/nut/phrases/numericphrase.h index 39cd615..e7e7bbb 100644 --- a/src/nut/phrases/numericphrase.h +++ b/src/nut/phrases/numericphrase.h @@ -1,9 +1,10 @@ #ifndef NUMERICPHRASE_H #define NUMERICPHRASE_H -#include "fieldphrase.h" #include +#include + NUT_BEGIN_NAMESPACE #define SPECIALIZATION_NUMERIC_MEMBER(type, op, cond) \ diff --git a/src/nut/phrases/phrasedata.h b/src/nut/phrases/phrasedata.h index 6b99eb9..0af3d7b 100644 --- a/src/nut/phrases/phrasedata.h +++ b/src/nut/phrases/phrasedata.h @@ -21,7 +21,7 @@ #ifndef PHRASEDATA_H #define PHRASEDATA_H -#include "defines.h" +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/phrases/phrasedatalist.h b/src/nut/phrases/phrasedatalist.h index 9566ccb..a7b6fda 100644 --- a/src/nut/phrases/phrasedatalist.h +++ b/src/nut/phrases/phrasedatalist.h @@ -21,7 +21,7 @@ #ifndef PHRASEDATALIST_H #define PHRASEDATALIST_H -#include "phrasedata.h" +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/phrases/phraselist.h b/src/nut/phrases/phraselist.h index ba87cd0..42620fc 100644 --- a/src/nut/phrases/phraselist.h +++ b/src/nut/phrases/phraselist.h @@ -21,9 +21,8 @@ #ifndef PHRASELIST_H #define PHRASELIST_H -#include "defines.h" - -#include "phrasedatalist.h" +#include +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/query.cpp b/src/nut/query.cpp index 84c94e3..8ddb18e 100644 --- a/src/nut/query.cpp +++ b/src/nut/query.cpp @@ -22,17 +22,6 @@ NUT_BEGIN_NAMESPACE -QueryPrivate::QueryPrivate(QueryBase *parent) : q_ptr(parent), - database(nullptr), tableSet(nullptr), skip(-1), take(-1) -{ - -} - -QueryPrivate::~QueryPrivate() -{ - -} - /*! * \class Query * \brief This class hold a query. A query can be used for getting database rows, editing or deleting without row fetching. diff --git a/src/nut/query.h b/src/nut/query.h index 0f7785e..8cf076d 100644 --- a/src/nut/query.h +++ b/src/nut/query.h @@ -18,8 +18,8 @@ ** **************************************************************************/ -#ifndef QUERY_H -#define QUERY_H +#ifndef NUT_QUERY_H +#define NUT_QUERY_H #include #include @@ -36,24 +36,21 @@ #endif #include -#include -#include -#include "database.h" -#include "databasemodel.h" -#include "abstracttableset.h" -#include "abstractsqlgenerator.h" -#include "phrase.h" -#include "tablemodel.h" -#include "sqlmodel.h" +#include + +#include +#include +#include +#include +#include +#include +#include NUT_BEGIN_NAMESPACE template -class Query : public QueryBase +class Query : public AbstractQuery { - QueryPrivate *d_ptr; - Q_DECLARE_PRIVATE(Query) - bool m_autoDelete; public: @@ -113,7 +110,7 @@ template template Q_OUTOFLINE_TEMPLATE QList Query::select(const std::function allocator) { - Q_D(Query); + Q_D(AbstractQuery); QList ret; d->joins.prepend(d->tableName); @@ -146,10 +143,9 @@ Q_OUTOFLINE_TEMPLATE QList Query::select(const std::function Q_OUTOFLINE_TEMPLATE Query::Query(Database *database, AbstractTableSet *tableSet, bool autoDelete) - : QueryBase(database), d_ptr(new QueryPrivate(this)), - m_autoDelete(autoDelete) + : AbstractQuery(database), m_autoDelete(autoDelete) { - Q_D(Query); + Q_D(AbstractQuery); d->database = database; d->tableSet = tableSet; @@ -163,14 +159,14 @@ Q_OUTOFLINE_TEMPLATE Query::Query(Database *database, AbstractTableSet *table template Q_OUTOFLINE_TEMPLATE Query::~Query() { - Q_D(Query); + Q_D(AbstractQuery); delete d; } template Q_OUTOFLINE_TEMPLATE RowList Query::toList(int count) { - Q_D(Query); + Q_D(AbstractQuery); RowList returnList; d->select = QStringLiteral("*"); @@ -347,7 +343,7 @@ template template Q_OUTOFLINE_TEMPLATE QList Query::select(const FieldPhrase f) { - Q_D(Query); + Q_D(AbstractQuery); QList ret; d->joins.prepend(d->tableName); @@ -385,7 +381,7 @@ Q_OUTOFLINE_TEMPLATE Row Query::first() template Q_OUTOFLINE_TEMPLATE int Query::count() { - Q_D(Query); + Q_D(AbstractQuery); d->joins.prepend(d->tableName); d->select = QStringLiteral("COUNT(*)"); @@ -405,7 +401,7 @@ Q_OUTOFLINE_TEMPLATE int Query::count() template Q_OUTOFLINE_TEMPLATE QVariant Query::max(const FieldPhrase &f) { - Q_D(Query); + Q_D(AbstractQuery); d->joins.prepend(d->tableName); d->sql = d->database->sqlGenerator()->selectCommand( @@ -423,7 +419,7 @@ Q_OUTOFLINE_TEMPLATE QVariant Query::max(const FieldPhrase &f) template Q_OUTOFLINE_TEMPLATE QVariant Query::min(const FieldPhrase &f) { - Q_D(Query); + Q_D(AbstractQuery); d->joins.prepend(d->tableName); d->sql = d->database->sqlGenerator()->selectCommand( @@ -441,7 +437,7 @@ Q_OUTOFLINE_TEMPLATE QVariant Query::min(const FieldPhrase &f) template Q_OUTOFLINE_TEMPLATE QVariant Query::sum(const FieldPhrase &f) { - Q_D(Query); + Q_D(AbstractQuery); d->joins.prepend(d->tableName); d->sql = d->database->sqlGenerator()->selectCommand( @@ -459,7 +455,7 @@ Q_OUTOFLINE_TEMPLATE QVariant Query::sum(const FieldPhrase &f) template Q_OUTOFLINE_TEMPLATE QVariant Query::average(const FieldPhrase &f) { - Q_D(Query); + Q_D(AbstractQuery); d->joins.prepend(d->tableName); d->sql = d->database->sqlGenerator()->selectCommand( @@ -477,7 +473,7 @@ Q_OUTOFLINE_TEMPLATE QVariant Query::average(const FieldPhrase &f) template Q_OUTOFLINE_TEMPLATE QVariant Query::insert(const AssignmentPhraseList &p) { - Q_D(Query); + Q_D(AbstractQuery); d->sql = d->database->sqlGenerator() ->insertCommand(d->tableName, p); QSqlQuery q = d->database->exec(d->sql); @@ -488,7 +484,7 @@ Q_OUTOFLINE_TEMPLATE QVariant Query::insert(const AssignmentPhraseList &p) template Q_OUTOFLINE_TEMPLATE Query *Query::join(const QString &className) { - Q_D(Query); + Q_D(AbstractQuery); RelationModel *rel = d->database->model() .relationByClassNames(d->className, className); @@ -517,7 +513,7 @@ Q_OUTOFLINE_TEMPLATE Query *Query::join(Table *c) template Q_OUTOFLINE_TEMPLATE Query *Query::where(const ConditionalPhrase &ph) { - Q_D(Query); + Q_D(AbstractQuery); if (d->wherePhrase.data) d->wherePhrase = d->wherePhrase && ph; else @@ -528,7 +524,7 @@ Q_OUTOFLINE_TEMPLATE Query *Query::where(const ConditionalPhrase &ph) template Q_OUTOFLINE_TEMPLATE Query *Query::setWhere(const ConditionalPhrase &ph) { - Q_D(Query); + Q_D(AbstractQuery); d->wherePhrase = ph; return this; } @@ -536,7 +532,7 @@ Q_OUTOFLINE_TEMPLATE Query *Query::setWhere(const ConditionalPhrase &ph) template Q_OUTOFLINE_TEMPLATE Query *Query::skip(int n) { - Q_D(Query); + Q_D(AbstractQuery); d->skip = n; return this; } @@ -544,7 +540,7 @@ Q_OUTOFLINE_TEMPLATE Query *Query::skip(int n) template Q_OUTOFLINE_TEMPLATE Query *Query::take(int n) { - Q_D(Query); + Q_D(AbstractQuery); d->take = n; return this; } @@ -552,7 +548,7 @@ Q_OUTOFLINE_TEMPLATE Query *Query::take(int n) template Q_OUTOFLINE_TEMPLATE Query *Query::fields(const PhraseList &ph) { - Q_D(Query); + Q_D(AbstractQuery); d->fieldPhrase = ph; return this; } @@ -561,7 +557,7 @@ Q_OUTOFLINE_TEMPLATE Query *Query::fields(const PhraseList &ph) //Q_OUTOFLINE_TEMPLATE Query *Query::orderBy(QString fieldName, // QString type) //{ -// Q_D(Query); +// Q_D(AbstractQuery); // d->orderPhrases.append(fieldName, type); // return this; //} @@ -569,7 +565,7 @@ Q_OUTOFLINE_TEMPLATE Query *Query::fields(const PhraseList &ph) template Q_OUTOFLINE_TEMPLATE Query *Query::orderBy(const PhraseList &ph) { - Q_D(Query); + Q_D(AbstractQuery); d->orderPhrase = ph; return this; } @@ -577,7 +573,7 @@ Q_OUTOFLINE_TEMPLATE Query *Query::orderBy(const PhraseList &ph) template Q_OUTOFLINE_TEMPLATE int Query::update(const AssignmentPhraseList &ph) { - Q_D(Query); + Q_D(AbstractQuery); d->sql = d->database->sqlGenerator()->updateCommand( d->tableName, @@ -594,7 +590,7 @@ Q_OUTOFLINE_TEMPLATE int Query::update(const AssignmentPhraseList &ph) template Q_OUTOFLINE_TEMPLATE int Query::remove() { - Q_D(Query); + Q_D(AbstractQuery); d->sql = d->database->sqlGenerator()->deleteCommand( d->tableName, d->wherePhrase); @@ -616,7 +612,7 @@ Q_OUTOFLINE_TEMPLATE QSqlQueryModel *Query::toModel() template Q_OUTOFLINE_TEMPLATE void Query::toModel(QSqlQueryModel *model) { - Q_D(Query); + Q_D(AbstractQuery); d->sql = d->database->sqlGenerator()->selectCommand( d->tableName, @@ -653,7 +649,7 @@ Q_OUTOFLINE_TEMPLATE void Query::toModel(QSqlQueryModel *model) template Q_OUTOFLINE_TEMPLATE void Query::toModel(SqlModel *model) { - Q_D(Query); + Q_D(AbstractQuery); d->sql = d->database->sqlGenerator()->selectCommand( d->tableName, @@ -690,7 +686,7 @@ Q_OUTOFLINE_TEMPLATE void Query::toModel(SqlModel *model) template Q_OUTOFLINE_TEMPLATE QString Query::sqlCommand() const { - Q_D(const Query); + Q_D(const AbstractQuery); return d->sql; } @@ -705,4 +701,4 @@ Q_OUTOFLINE_TEMPLATE QString Query::sqlCommand() const NUT_END_NAMESPACE -#endif // QUERY_H +#endif // NUT_QUERY_H diff --git a/src/nut/querybase.cpp b/src/nut/querybase.cpp deleted file mode 100644 index de1b0bf..0000000 --- a/src/nut/querybase.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include "querybase_p.h" - -#include "table.h" -#include "abstracttableset.h" - - -NUT_BEGIN_NAMESPACE - -QueryBase::QueryBase(QObject *parent) : QObject(parent) -{ - -} - -//void QueryBase::addTableToSet(AbstractTableSet *set, Table *table) -//{ -// set->add(table); -//} - -NUT_END_NAMESPACE diff --git a/src/nut/sqlmodel.cpp b/src/nut/sqlmodel.cpp index 25bf6cd..6a58a26 100644 --- a/src/nut/sqlmodel.cpp +++ b/src/nut/sqlmodel.cpp @@ -29,43 +29,46 @@ NUT_BEGIN_NAMESPACE -//SqlModel::SqlModel(Query *q) : QAbstractItemModel(q.) -//{ - -//} +SqlModelPrivate::SqlModelPrivate(SqlModel *parent) : q_ptr(parent) + , renderer(nullptr) +{ + Q_UNUSED(parent) +} void SqlModel::setRenderer(const std::function &renderer) { - _renderer = renderer; + Q_D(SqlModel); + d->renderer = renderer; } SqlModel::SqlModel(Database *database, AbstractTableSet *tableSet, QObject *parent) : QAbstractTableModel(parent) - , _renderer(nullptr) - , d(new SqlModelPrivate(this)) + , d_ptr(new SqlModelPrivate(this)) { + Q_D(SqlModel); d->model = database->model() .tableByClassName(tableSet->childClassName()); d->tableName = d->model->name(); - - - // setQuery("SELECT * FROM " + d->tableName, database->databaseName()); } int SqlModel::rowCount(const QModelIndex &parent) const { + Q_D(const SqlModel); Q_UNUSED(parent) return d->rows.count(); } int SqlModel::columnCount(const QModelIndex &parent) const { + Q_D(const SqlModel); Q_UNUSED(parent) return d->model->fields().count(); } QVariant SqlModel::data(const QModelIndex &index, int role) const { + Q_D(const SqlModel); + if (!index.isValid()) return QVariant(); @@ -76,8 +79,8 @@ QVariant SqlModel::data(const QModelIndex &index, int role) const Row t = d->rows.at(index.row()); QVariant v = t->property(d->model->field(index.column())->name.toLocal8Bit().data()); - if (_renderer != nullptr) - v = _renderer(index.column(), v); + if (d->renderer != nullptr) + v = d->renderer(index.column(), v); return v; } return QVariant(); @@ -85,7 +88,8 @@ QVariant SqlModel::data(const QModelIndex &index, int role) const void SqlModel::setRows(RowList
rows) { - d.detach(); + Q_D(SqlModel); + if (d->rows.count()) { beginRemoveRows(QModelIndex(), 0, d->rows.count()); d->rows.clear(); @@ -98,19 +102,15 @@ void SqlModel::setRows(RowList
rows) void SqlModel::append(Row
table) { - d.detach(); + Q_D(SqlModel); beginInsertRows(QModelIndex(), d->rows.count(), d->rows.count()); d->rows.append(table); endInsertRows(); } -//void SqlModel::append(Table *table) -//{ -// append(TableType
::Row(table)); -//} - QVariant SqlModel::headerData(int section, Qt::Orientation orientation, int role) const { + Q_D(const SqlModel); if (orientation == Qt::Horizontal && role == Qt::DisplayRole) { return d->model->field(section)->displayName; } @@ -119,13 +119,8 @@ 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_UNUSED(parent) -} - - NUT_END_NAMESPACE diff --git a/src/nut/sqlmodel.h b/src/nut/sqlmodel.h index 2f2654a..3a87d76 100644 --- a/src/nut/sqlmodel.h +++ b/src/nut/sqlmodel.h @@ -24,9 +24,8 @@ #include #include #include -#include "defines.h" -#include "sqlmodel_p.h" -#include + +#include NUT_BEGIN_NAMESPACE @@ -34,12 +33,12 @@ class Database; class AbstractTableSet; class Table; class TableModel; - +class SqlModelPrivate; class NUT_EXPORT SqlModel : public QAbstractTableModel { Q_OBJECT - - std::function _renderer; + SqlModelPrivate *d_ptr; + Q_DECLARE_PRIVATE(SqlModel) public: // explicit SqlModel(Query *q); @@ -60,9 +59,6 @@ public: void setRenderer(const std::function &renderer); -private: - QExplicitlySharedDataPointer d; - signals: void beforeShowText(int col, QVariant &value); }; diff --git a/src/nut/sqlmodel_p.h b/src/nut/sqlmodel_p.h index 2254c10..ea57486 100644 --- a/src/nut/sqlmodel_p.h +++ b/src/nut/sqlmodel_p.h @@ -3,21 +3,28 @@ #include #include -#include "defines.h" + +#include + +#include NUT_BEGIN_NAMESPACE class SqlModel; class Table; class TableModel; -class NUT_EXPORT SqlModelPrivate : public QSharedData { +class NUT_EXPORT SqlModelPrivate { public: + SqlModel *q_ptr; + Q_DECLARE_PUBLIC(SqlModel); + explicit SqlModelPrivate(SqlModel *parent); QString tableName; RowList
rows; TableModel *model; + std::function renderer; }; NUT_END_NAMESPACE diff --git a/src/nut/table.h b/src/nut/table.h index 9431ab8..ec73c6a 100644 --- a/src/nut/table.h +++ b/src/nut/table.h @@ -25,9 +25,9 @@ #include #include -#include "tablemodel.h" -#include "defines.h" -#include "phrase.h" +#include +#include +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/table_p.h b/src/nut/table_p.h index b7fbcfe..ef10672 100644 --- a/src/nut/table_p.h +++ b/src/nut/table_p.h @@ -1,11 +1,11 @@ #ifndef TABLEPRIVATE_H #define TABLEPRIVATE_H -#include "defines.h" - #include #include +#include + NUT_BEGIN_NAMESPACE class TableModel; diff --git a/src/nut/tablemodel.h b/src/nut/tablemodel.h index 3e3df3b..255e9c6 100644 --- a/src/nut/tablemodel.h +++ b/src/nut/tablemodel.h @@ -23,7 +23,8 @@ #include #include -#include "defines.h" + +#include class QJsonObject; diff --git a/src/nut/tableset.h b/src/nut/tableset.h index 7287a88..6fb9c7c 100644 --- a/src/nut/tableset.h +++ b/src/nut/tableset.h @@ -29,11 +29,11 @@ #include -#include "abstracttableset.h" -#include "table.h" -#include "bulkinserter.h" -#include "databasemodel.h" -#include "abstracttablesetdata.h" +#include +#include +#include +#include +#include NUT_BEGIN_NAMESPACE diff --git a/src/nut/types/dbgeography.h b/src/nut/types/dbgeography.h index 575426e..18b1770 100644 --- a/src/nut/types/dbgeography.h +++ b/src/nut/types/dbgeography.h @@ -21,11 +21,12 @@ #ifndef DBGEOGRAPHY_H #define DBGEOGRAPHY_H -#include "defines.h" #include #include #include +#include + NUT_BEGIN_NAMESPACE class NUT_EXPORT DbGeography diff --git a/tests/auto/tst_basic/tst_basic.h b/tests/auto/tst_basic/tst_basic.h index 74c3128..9955d4c 100644 --- a/tests/auto/tst_basic/tst_basic.h +++ b/tests/auto/tst_basic/tst_basic.h @@ -5,6 +5,7 @@ #include #include "weblogdatabase.h" + class Post; class User; class BasicTest : public QObject