# HG changeset patch # User Tom Fredrik Blenning Klaussen # Date 1381414361 -7200 # Node ID 9e337bd96bd37d06acdab549dbaa04004c728857 # Parent af7962f3274b2d79fd30abdd8720164c8a1cc07f Improve efficiency of SqliteDBLink::filesWithSize diff -r af7962f3274b -r 9e337bd96bd3 SqliteDBLink.cpp --- a/SqliteDBLink.cpp Thu Oct 10 16:07:35 2013 +0200 +++ b/SqliteDBLink.cpp Thu Oct 10 16:12:41 2013 +0200 @@ -201,6 +201,38 @@ const QList SqliteDBLink::filesWithSize(quint64 size, const QString& prefix) const { - //This is incredibly inefficient and should be reimplemented - return FileDBLink::filesWithSize(size, prefix); + QList values; + + QSqlQuery query(db); + + if (prefix.size() > 0) { + query.prepare("SELECT * FROM files WHERE path LIKE :prefix AND size = :size"); + query.bindValue(":prefix", QString("%1%").arg(prefix)); + } + else { + query.prepare("SELECT * FROM files WHERE size = :size"); + } + query.bindValue(":size", QString("%1%").arg(size)); + + + if (!query.exec()) { + throw SQLException(query); + } + + int pathIndex = query.record().indexOf("path"); + int sizeIndex = query.record().indexOf("size"); + int dateIndex = query.record().indexOf("mtime"); + int checksumIndex = query.record().indexOf("checksum"); + while (query.next()) { + QString path = query.value(pathIndex).toString(); + quint64 size = query.value(sizeIndex).toInt(); + QDateTime mtime = query.value(dateIndex).toDateTime(); + QByteArray checksum = query.value(checksumIndex).toByteArray(); + + values << + FileDBLink::dbinf_ptr_t(new FileDBLink::DBInfo(path, + size, mtime, checksum)); + } + + return values; }