Mercurial > dedupe
comparison DBCache.hpp @ 58:7b7e84356b39
Introduce API for fine tuning inserts.
Reduce the amount of rebuilds.
| author | Tom Fredrik Blenning Klaussen <bfg@blenning.no> |
|---|---|
| date | Fri, 14 Sep 2012 00:04:24 +0200 |
| parents | f711ddb56ae7 |
| children | 74be5a2f49db |
comparison
equal
deleted
inserted
replaced
| 57:c8111de2e0bb | 58:7b7e84356b39 |
|---|---|
| 15 #include <QtSql/QSqlError> | 15 #include <QtSql/QSqlError> |
| 16 #include <QtSql/QSqlQuery> | 16 #include <QtSql/QSqlQuery> |
| 17 #include <QtSql/QSqlRecord> | 17 #include <QtSql/QSqlRecord> |
| 18 | 18 |
| 19 #include <boost/optional.hpp> | 19 #include <boost/optional.hpp> |
| 20 | |
| 21 #include <QtCore/QString> | |
| 22 | |
| 23 template<typename Key, typename Value> | |
| 24 struct InsertRegulator { | |
| 25 static void start() {} | |
| 26 static void finish() {} | |
| 27 static void next() {} | |
| 28 }; | |
| 20 | 29 |
| 21 template<typename T> | 30 template<typename T> |
| 22 struct SQLGenerator | 31 struct SQLGenerator |
| 23 { | 32 { |
| 24 }; | 33 }; |
| 262 QString repopulateQuery = QString("SELECT %1, %2 FROM %3;").arg(keyFields).arg(valueFields).arg(dictName); | 271 QString repopulateQuery = QString("SELECT %1, %2 FROM %3;").arg(keyFields).arg(valueFields).arg(dictName); |
| 263 QSqlQuery query(db); | 272 QSqlQuery query(db); |
| 264 if (!query.exec(repopulateQuery)) { | 273 if (!query.exec(repopulateQuery)) { |
| 265 throw SQLException(query); | 274 throw SQLException(query); |
| 266 } | 275 } |
| 276 InsertRegulator<Key, Value> regulator; | |
| 277 regulator.start(); | |
| 267 while (query.next()) { | 278 while (query.next()) { |
| 268 Key key = *SQLGenerator<Key>::extract(query, "key"); | 279 Key key = *SQLGenerator<Key>::extract(query, "key"); |
| 269 Value value = *SQLGenerator<Value>::extract(query, "value"); | 280 Value value = *SQLGenerator<Value>::extract(query, "value"); |
| 270 memoryMap.insert(key, value); | 281 memoryMap.insert(key, value); |
| 271 } | 282 regulator.next(); |
| 283 } | |
| 284 regulator.finish(); | |
| 272 } | 285 } |
| 273 QString queryString = QString("INSERT into %1 (%2, %3) VALUES(%4, %5);") | 286 QString queryString = QString("INSERT into %1 (%2, %3) VALUES(%4, %5);") |
| 274 .arg(dictName) | 287 .arg(dictName) |
| 275 .arg(SQLGenerator<Key>::fieldName("key")) | 288 .arg(SQLGenerator<Key>::fieldName("key")) |
| 276 .arg(SQLGenerator<Value>::fieldName("value")) | 289 .arg(SQLGenerator<Value>::fieldName("value")) |
