Nut/src/nut/bulkinserter.cpp

74 lines
1.6 KiB
C++
Raw Normal View History

#include "bulkinserter.h"
#include "bulkinserter_p.h"
#include "phrases/phraselist.h"
2019-03-08 00:48:48 +08:00
#include "database.h"
2020-08-06 23:19:27 +08:00
#include "abstractsqlgenerator.h"
2019-03-08 00:48:48 +08:00
#include "databasemodel.h"
2020-07-29 22:11:19 +08:00
#include <QtCore/QDebug>
NUT_BEGIN_NAMESPACE
BulkInserterPrivate::BulkInserterPrivate(Database *db)
: database(db), fieldCount(0)
2019-03-08 00:48:48 +08:00
{
}
BulkInserter::BulkInserter(Database *db, QString &className)
: d_ptr(new BulkInserterPrivate(db))
{
Q_D(BulkInserter);
2019-03-08 00:48:48 +08:00
foreach (TableModel *m, db->model())
if (m->className() == className)
d->className = m->name();
}
BulkInserter::BulkInserter(const BulkInserter &other)
{
d_ptr = other.d_ptr;
}
BulkInserter::BulkInserter(BulkInserter &&other)
{
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<size_t>(ph.data.count());
}
void BulkInserter::insert(std::initializer_list<QVariant> vars)
{
Q_D(BulkInserter);
if (vars.size() != d->fieldCount) {
2019-06-07 16:19:20 +08:00
qInfo("Number of rows mistake");
2019-03-08 00:48:48 +08:00
return;
}
QVariantList list;
std::initializer_list<QVariant>::iterator it;
for (it = vars.begin(); it != vars.end(); ++it)
2019-03-08 00:48:48 +08:00
list.append(*it);
d->variants.append(list);
2019-03-08 00:48:48 +08:00
}
int BulkInserter::apply()
2019-03-08 00:48:48 +08:00
{
Q_D(BulkInserter);
auto sql = d->database->sqlGenerator()->insertBulk(d->className,
d->fields,
d->variants);
QSqlQuery q = d->database->exec(sql);
2019-03-08 00:48:48 +08:00
return q.numRowsAffected();
}
NUT_END_NAMESPACE