mirror of https://github.com/laurent22/joplin.git
83 lines
2.0 KiB
C++
Executable File
83 lines
2.0 KiB
C++
Executable File
#include "notecollection.h"
|
|
|
|
using namespace jop;
|
|
|
|
NoteCollection::NoteCollection() {}
|
|
|
|
NoteCollection::NoteCollection(Database& db, int parentId, const QString& orderBy) {
|
|
db_ = db;
|
|
parentId_ = parentId;
|
|
orderBy_ = orderBy;
|
|
}
|
|
|
|
Note NoteCollection::at(int index) const {
|
|
if (!parentId_) return Note();
|
|
|
|
if (cache_.isset(index)) return cache_.get(index);
|
|
|
|
std::vector<int> indexes = cache_.availableBufferAround(index, 32);
|
|
if (!indexes.size()) {
|
|
qWarning() << "Couldn't acquire buffer"; // "Cannot happen"
|
|
return Note();
|
|
}
|
|
|
|
int from = indexes[0];
|
|
int to = indexes[indexes.size() - 1];
|
|
|
|
qDebug() << "Getting from" << from << "to" << to;
|
|
|
|
QSqlQuery q = db_.query("SELECT id, title, body FROM notes WHERE parent_id = :parent_id ORDER BY " + orderBy_ + " LIMIT " + QString::number(to - from + 1) + " OFFSET " + QString::number(from));
|
|
q.bindValue(":parent_id", parentId_);
|
|
q.exec();
|
|
|
|
int noteIndex = from;
|
|
while (q.next()) {
|
|
Note note;
|
|
note.setId(q.value(0).toInt());
|
|
note.setTitle(q.value(1).toString());
|
|
note.setBody(q.value(2).toString());
|
|
note.setIsPartial(true);
|
|
|
|
cache_.set(noteIndex, note);
|
|
|
|
noteIndex++;
|
|
}
|
|
|
|
return cache_.get(index);
|
|
}
|
|
|
|
// TODO: cache result
|
|
int NoteCollection::count() const {
|
|
if (!parentId_) return 0;
|
|
|
|
QSqlQuery q = db_.query("SELECT count(*) as row_count FROM notes WHERE parent_id = :parent_id");
|
|
q.bindValue(":parent_id", parentId_);
|
|
q.exec();
|
|
q.next();
|
|
return q.value(0).toInt();
|
|
}
|
|
|
|
Note NoteCollection::byId(int id) const {
|
|
std::vector<int> indexes = cache_.indexes();
|
|
for (int i = 0; i < indexes.size(); i++) {
|
|
Note note = cache_.get(indexes[i]);
|
|
if (note.id() == id) return note;
|
|
}
|
|
|
|
QSqlQuery q = db_.query("SELECT id, title, body FROM notes WHERE id = :id");
|
|
q.bindValue(":id", id);
|
|
q.exec();
|
|
q.next();
|
|
if (!q.isValid()) {
|
|
qWarning() << "Invalid note ID:" << id;
|
|
return Note();
|
|
}
|
|
|
|
// TODO: refactor creation of note from SQL query object
|
|
Note note;
|
|
note.setId(q.value(0).toInt());
|
|
note.setTitle(q.value(1).toString());
|
|
note.setBody(q.value(2).toString());
|
|
return note;
|
|
}
|