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