Mercurial > dedupe
comparison SqliteDBLink.cpp @ 108:e9b798e80bad
Setup prepared begin, end queries.
Support for more effective delete statement.
| author | Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no> |
|---|---|
| date | Tue, 18 Feb 2014 17:08:06 +0100 |
| parents | 6bc013d5788b |
| children | 6cf5eb5b0be1 |
comparison
equal
deleted
inserted
replaced
| 107:d434137e296d | 108:e9b798e80bad |
|---|---|
| 46 if (!query.exec(QString("SELECT * FROM human_files;"))) { | 46 if (!query.exec(QString("SELECT * FROM human_files;"))) { |
| 47 throw SQLException("No view"); | 47 throw SQLException("No view"); |
| 48 } | 48 } |
| 49 | 49 |
| 50 | 50 |
| 51 preparedBeginQuery = new QSqlQuery(db); | |
| 52 preparedBeginQuery->prepare("BEGIN"); | |
| 53 | |
| 54 preparedEndQuery = new QSqlQuery(db); | |
| 55 preparedEndQuery->prepare("END"); | |
| 56 | |
| 51 preparedSizePrefixQuery = new QSqlQuery(db); | 57 preparedSizePrefixQuery = new QSqlQuery(db); |
| 52 preparedSizePrefixQuery->prepare("SELECT * FROM files WHERE path LIKE :prefix AND size = :size"); | 58 preparedSizePrefixQuery->prepare("SELECT * FROM files WHERE path LIKE :prefix AND size = :size"); |
| 53 | 59 |
| 54 preparedSizeQuery = new QSqlQuery(db); | 60 preparedSizeQuery = new QSqlQuery(db); |
| 55 preparedSizeQuery->prepare("SELECT * FROM files WHERE size = :size"); | 61 preparedSizeQuery->prepare("SELECT * FROM files WHERE size = :size"); |
| 231 | 237 |
| 232 void SqliteDBLink::keepOnlyFromPrefix(const QString& prefix, | 238 void SqliteDBLink::keepOnlyFromPrefix(const QString& prefix, |
| 233 const QStringList& files, | 239 const QStringList& files, |
| 234 bool lazy) | 240 bool lazy) |
| 235 { | 241 { |
| 236 QStringList list; | 242 QString keepQuerySQL = |
| 237 foreach(dbinf_ptr_t info, values(prefix)) { | 243 "DELETE FROM files WHERE %1 path NOT IN ( %2 )"; |
| 238 if (!files.contains(info->path())) { | 244 |
| 239 list << info->path(); | 245 bool first = true; |
| 240 } | 246 QString inList = ""; |
| 241 } | 247 foreach (const QString& file, files) { |
| 242 foreach(QString path, list) { | 248 if (first) |
| 243 deleteFileFromDB(path, lazy); | 249 first = false; |
| 250 else | |
| 251 inList+=", "; | |
| 252 | |
| 253 inList+="'"+QString(file).replace("'","''")+"'"; | |
| 254 } | |
| 255 | |
| 256 if (prefix.isEmpty()) { | |
| 257 keepQuerySQL = keepQuerySQL.arg(""); | |
| 258 } | |
| 259 else { | |
| 260 keepQuerySQL = keepQuerySQL.arg("path LIKE :prefix1 AND "); | |
| 261 } | |
| 262 keepQuerySQL = keepQuerySQL.arg(inList); | |
| 263 QSqlQuery keepQuery(db); | |
| 264 keepQuery.prepare(keepQuerySQL); | |
| 265 if (prefix.size() > 0) { | |
| 266 keepQuery.bindValue(":prefix", QString("%1%").arg(prefix)); | |
| 267 } | |
| 268 if (!keepQuery.exec()) { | |
| 269 throw SQLException(keepQuery); | |
| 244 } | 270 } |
| 245 } | 271 } |
| 246 | 272 |
| 247 const QList<FileDBLink::dbinf_ptr_t> | 273 const QList<FileDBLink::dbinf_ptr_t> |
| 248 SqliteDBLink::filesWithSize(quint64 size, const QString& prefix) const | 274 SqliteDBLink::filesWithSize(quint64 size, const QString& prefix) const |
