From d29795ea09dd2162445b68c8ff891fc1ce1a0bc9 Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Mon, 10 Aug 2020 18:03:07 +0430 Subject: [PATCH] make BulkInserter movable --- src/nut/bulkinserter.cpp | 54 +++++++++++++++++++++++++++++++--------- src/nut/bulkinserter.h | 13 ++++++---- src/nut/bulkinserter_p.h | 23 +++++++++++++++++ src/nut/nut.pro | 3 ++- src/nut/tableset.h | 7 +++--- 5 files changed, 78 insertions(+), 22 deletions(-) create mode 100644 src/nut/bulkinserter_p.h diff --git a/src/nut/bulkinserter.cpp b/src/nut/bulkinserter.cpp index 2e09278..059bb87 100644 --- a/src/nut/bulkinserter.cpp +++ b/src/nut/bulkinserter.cpp @@ -1,4 +1,6 @@ #include "bulkinserter.h" +#include "bulkinserter_p.h" + #include "phrases/phraselist.h" #include "database.h" #include "abstractsqlgenerator.h" @@ -6,23 +8,47 @@ #include -Nut::BulkInserter::BulkInserter(Nut::Database *db, QString &className) - : _database(db), _fieldCount(0) +NUT_BEGIN_NAMESPACE + +BulkInserterPrivate::BulkInserterPrivate(Database *db) + : database(db), fieldCount(0) { + +} + +BulkInserter::BulkInserter(Database *db, QString &className) + : d_ptr(new BulkInserterPrivate(db)) +{ + Q_D(BulkInserter); + foreach (TableModel *m, db->model()) if (m->className() == className) - _className = m->name(); + d->className = m->name(); } -void Nut::BulkInserter::setFields(const Nut::PhraseList &ph) +BulkInserter::BulkInserter(const BulkInserter &other) { - _fields = ph; - _fieldCount = static_cast(ph.data.count()); + d_ptr = other.d_ptr; } -void Nut::BulkInserter::insert(std::initializer_list vars) +BulkInserter::BulkInserter(BulkInserter &&other) { - if (vars.size() != _fieldCount) { + d_ptr = other.d_ptr; + other.d_ptr = nullptr; +} + +void BulkInserter::setFields(const PhraseList &ph) +{ + Q_D(BulkInserter); + d->fields = ph; + d->fieldCount = static_cast(ph.data.count()); +} + +void BulkInserter::insert(std::initializer_list vars) +{ + Q_D(BulkInserter); + + if (vars.size() != d->fieldCount) { qInfo("Number of rows mistake"); return; } @@ -31,13 +57,17 @@ void Nut::BulkInserter::insert(std::initializer_list vars) std::initializer_list::iterator it; for (it = vars.begin(); it != vars.end(); ++it) list.append(*it); - variants.append(list); + d->variants.append(list); } -int Nut::BulkInserter::apply() +int BulkInserter::apply() { - auto sql = _database->sqlGenerator()->insertBulk(_className, _fields, variants); - QSqlQuery q = _database->exec(sql); + Q_D(BulkInserter); + auto sql = d->database->sqlGenerator()->insertBulk(d->className, + d->fields, + d->variants); + QSqlQuery q = d->database->exec(sql); return q.numRowsAffected(); } +NUT_END_NAMESPACE diff --git a/src/nut/bulkinserter.h b/src/nut/bulkinserter.h index 7ba47c6..ae837f6 100644 --- a/src/nut/bulkinserter.h +++ b/src/nut/bulkinserter.h @@ -12,16 +12,16 @@ NUT_BEGIN_NAMESPACE class PhraseList; class Database; +class BulkInserterPrivate; class NUT_EXPORT BulkInserter { - Database *_database; - QString _className; - Nut::PhraseList _fields; - QList variants; - size_t _fieldCount; + Q_DECLARE_PRIVATE(BulkInserter); public: BulkInserter(Database *db, QString &className); + BulkInserter(const BulkInserter &other); + BulkInserter(BulkInserter &&other); + void setFields(const PhraseList &ph); void insert(std::initializer_list vars); @@ -30,6 +30,9 @@ public: insert({args...}); } int apply(); + +private: + BulkInserterPrivate *d_ptr; }; NUT_END_NAMESPACE diff --git a/src/nut/bulkinserter_p.h b/src/nut/bulkinserter_p.h new file mode 100644 index 0000000..41e7cfa --- /dev/null +++ b/src/nut/bulkinserter_p.h @@ -0,0 +1,23 @@ +#ifndef BULKINSERTER_P_H +#define BULKINSERTER_P_H + +#include + +NUT_BEGIN_NAMESPACE + +class Database; +class BulkInserterPrivate +{ +public: + BulkInserterPrivate(Database *db); + + Database *database; + QString className; + PhraseList fields; + QList variants; + size_t fieldCount; +}; + +NUT_END_NAMESPACE + +#endif // BULKINSERTER_P_H diff --git a/src/nut/nut.pro b/src/nut/nut.pro index 3181c1c..0b4bdeb 100644 --- a/src/nut/nut.pro +++ b/src/nut/nut.pro @@ -47,7 +47,8 @@ HEADERS += \ $$PWD/phrases/phrasedatalist.h \ $$PWD/phrases/phraselist.h \ $$PWD/phrases/datephrase.h \ - $$PWD/table_p.h + $$PWD/table_p.h \ + bulkinserter_p.h SOURCES += \ $$PWD/generators/abstractsqlgenerator.cpp \ diff --git a/src/nut/tableset.h b/src/nut/tableset.h index cb143a7..d28ddfb 100644 --- a/src/nut/tableset.h +++ b/src/nut/tableset.h @@ -64,7 +64,7 @@ public: Row operator[](int i) const; Query query(); - BulkInserter *bulkInserter(); + BulkInserter bulkInserter(); }; template @@ -86,10 +86,9 @@ Q_OUTOFLINE_TEMPLATE Query TableSet::query() } template -Q_OUTOFLINE_TEMPLATE BulkInserter *TableSet::bulkInserter() +Q_OUTOFLINE_TEMPLATE BulkInserter TableSet::bulkInserter() { - BulkInserter *bi = new BulkInserter(data->database, data->childClassName); - return bi; + return BulkInserter(data->database, data->childClassName); } template