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;
 }