Mercurial > dedupe
changeset 87:9e337bd96bd3
Improve efficiency of SqliteDBLink::filesWithSize
| author | Tom Fredrik Blenning Klaussen <bfg@bfgconsult.no> |
|---|---|
| date | Thu, 10 Oct 2013 16:12:41 +0200 |
| parents | af7962f3274b |
| children | 6e1d4d2fc49b |
| files | SqliteDBLink.cpp |
| diffstat | 1 files changed, 34 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- 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<FileDBLink::dbinf_ptr_t> SqliteDBLink::filesWithSize(quint64 size, const QString& prefix) const { - //This is incredibly inefficient and should be reimplemented - return FileDBLink::filesWithSize(size, prefix); + QList<FileDBLink::dbinf_ptr_t > 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; }
