Nut/src/bulkinserter.cpp

44 lines
1.1 KiB
C++
Raw Normal View History

#include "bulkinserter.h"
#include "phrases/phraselist.h"
2019-03-08 00:48:48 +08:00
#include "database.h"
#include "generators/sqlgeneratorbase_p.h"
#include "databasemodel.h"
2019-03-08 00:48:48 +08:00
#include <QDebug>
2019-03-08 00:48:48 +08:00
Nut::BulkInserter::BulkInserter(Nut::Database *db, QString &className)
: _database(db), _fieldCount(0)
{
foreach (TableModel *m, db->model())
if (m->className() == className)
_className = m->name();
}
void Nut::BulkInserter::setFields(const Nut::PhraseList &ph)
{
2019-03-08 00:48:48 +08:00
_fields = ph;
_fieldCount = static_cast<size_t>(ph.data.count());
}
void Nut::BulkInserter::insert(std::initializer_list<QVariant> vars)
{
2019-03-08 00:48:48 +08:00
if (vars.size() != _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);
variants.append(list);
}
int Nut::BulkInserter::apply()
{
auto sql = _database->sqlGenertor()->insertBulk(_className, _fields, variants);
QSqlQuery q = _database->exec(sql);
return q.numRowsAffected();
}