Document::Ptr SQLiteDocumentDAO::findById(qulonglong id) const { if(repository()->publications()->contains(id)) { return repository()->publications()->find(id); } QueryExecutor executor(database()); QSqlQuery query = executor.select("document", QStringList(), makeQueryParameters("id", id)); if(query.next()) { QSqlRecord record = query.record(); qulonglong id = record.value("id").toULongLong(); Document::Ptr pub = Document::Ptr(new Document()); pub->setId(id); pub->setTitle(record.value("title").toString()); pub->setAbstract(record.value("abstract").toString()); pub->setYear(record.value("year").toInt()); pub->setMonth(record.value("month").toInt()); pub->setConference(record.value("conference").toString()); pub->setPublisher(record.value("publisher").toString()); pub->setVolume(record.value("volume").toInt()); pub->setNumber(record.value("number").toInt()); pub->setUrl(record.value("url").toString()); pub->setDoi(record.value("doi").toString()); pub->setIsbn(record.value("isbn").toString()); pub->setLocalUrl(record.value("localURL").toString()); pub->setType(static_cast<DocumentType>(record.value("type").toUInt())); pub->setPublished(record.value("isPublished").toBool()); pub->setPeerReviewed(record.value("isPeerReviewed").toBool()); pub->setKeywords(QStringList()); pub->setSeries(record.value("series").toString()); pub->setSubTitle(record.value("subTitle").toString()); pub->setPages(PageRange::fromString(record.value("pages").toString())); pub->setCiteKey(record.value("citeKey").toString()); repository()->publications()->insert(id, pub); QString authors = record.value("authors").toString(); pub->setAuthors(StringUtils::deserialize(authors)); QString editors = record.value("editors").toString(); pub->setEditors(StringUtils::deserialize(editors)); qulonglong jid = record.value("journalId").toULongLong(); if(jid != 0) { pub->setJournal(repository()->journalDAO()->findById(jid)); } emit dataChanged(); return pub; } return Document::Ptr(); }