2019-03-07 23:35:57 +08:00
|
|
|
#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-07 23:35:57 +08:00
|
|
|
|
2019-03-08 00:48:48 +08:00
|
|
|
#include <QDebug>
|
2019-03-07 23:35:57 +08:00
|
|
|
|
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();
|
2019-03-07 23:35:57 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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());
|
2019-03-07 23:35:57 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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;
|
2019-03-07 23:35:57 +08:00
|
|
|
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()
|
|
|
|
|
{
|
2020-07-27 21:14:14 +08:00
|
|
|
auto sql = _database->sqlGenerator()->insertBulk(_className, _fields, variants);
|
2019-03-08 00:48:48 +08:00
|
|
|
QSqlQuery q = _database->exec(sql);
|
|
|
|
|
return q.numRowsAffected();
|
2019-03-07 23:35:57 +08:00
|
|
|
}
|
|
|
|
|
|