WIP/outlineindex #41
@ -253,6 +253,29 @@ bool SqliteDbService::insertToFTS(bool useTrigrams, QSqlDatabase &db, int fileid
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SqliteDbService::insertOutline(QSqlDatabase &db, int fileid, const QVector<DocumentOutlineEntry> &outlines)
|
||||||
|
{
|
||||||
|
QSqlQuery outlineQuery(db);
|
||||||
|
outlineQuery.prepare("INSERT INTO outline(fileid, text, page) VALUES(?,?,?)");
|
||||||
|
outlineQuery.addBindValue(fileid);
|
||||||
|
for(const DocumentOutlineEntry &outline : outlines)
|
||||||
|
{
|
||||||
|
outlineQuery.bindValue(1, outline.text.toLower());
|
||||||
|
outlineQuery.bindValue(2, outline.destinationPage);
|
||||||
|
if(!outlineQuery.exec())
|
||||||
|
{
|
||||||
|
Logger::error() << "Failed outline insertion " << outlineQuery.lastError() << Qt::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(!insertOutline(db, fileid, outline.children))
|
||||||
|
{
|
||||||
|
Logger::error() << "Failed outline insertion (children)) " << outlineQuery.lastError() << Qt::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
QSqlQuery SqliteDbService::exec(QString querystr, std::initializer_list<QVariant> args)
|
QSqlQuery SqliteDbService::exec(QString querystr, std::initializer_list<QVariant> args)
|
||||||
{
|
{
|
||||||
auto query = QSqlQuery(dbFactory->forCurrentThread());
|
auto query = QSqlQuery(dbFactory->forCurrentThread());
|
||||||
@ -278,7 +301,7 @@ bool SqliteDbService::execBool(QString querystr, std::initializer_list<QVariant>
|
|||||||
return query.value(0).toBool();
|
return query.value(0).toBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
SaveFileResult SqliteDbService::saveFile(QFileInfo fileInfo, QVector<PageData> &pageData, bool pathsOnly)
|
SaveFileResult SqliteDbService::saveFile(QFileInfo fileInfo, DocumentProcessResult &processResult, bool pathsOnly)
|
||||||
{
|
{
|
||||||
QString absPath = fileInfo.absoluteFilePath();
|
QString absPath = fileInfo.absoluteFilePath();
|
||||||
auto mtime = fileInfo.lastModified().toSecsSinceEpoch();
|
auto mtime = fileInfo.lastModified().toSecsSinceEpoch();
|
||||||
@ -323,18 +346,24 @@ SaveFileResult SqliteDbService::saveFile(QFileInfo fileInfo, QVector<PageData> &
|
|||||||
if(!pathsOnly)
|
if(!pathsOnly)
|
||||||
{
|
{
|
||||||
int lastid = inserterQuery.lastInsertId().toInt();
|
int lastid = inserterQuery.lastInsertId().toInt();
|
||||||
if(!insertToFTS(false, db, lastid, pageData))
|
if(!insertToFTS(false, db, lastid, processResult.pages))
|
||||||
{
|
{
|
||||||
db.rollback();
|
db.rollback();
|
||||||
Logger::error() << "Failed to insert data to FTS index " << Qt::endl;
|
Logger::error() << "Failed to insert data to FTS index " << Qt::endl;
|
||||||
return DBFAIL;
|
return DBFAIL;
|
||||||
}
|
}
|
||||||
if(!insertToFTS(true, db, lastid, pageData))
|
if(!insertToFTS(true, db, lastid, processResult.pages))
|
||||||
{
|
{
|
||||||
db.rollback();
|
db.rollback();
|
||||||
Logger::error() << "Failed to insert data to FTS index " << Qt::endl;
|
Logger::error() << "Failed to insert data to FTS index " << Qt::endl;
|
||||||
return DBFAIL;
|
return DBFAIL;
|
||||||
}
|
}
|
||||||
|
if(!insertOutline(db, lastid, processResult.outlines))
|
||||||
|
{
|
||||||
|
db.rollback();
|
||||||
|
Logger::error() << "Failed to insert outline data " << Qt::endl;
|
||||||
|
return DBFAIL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!db.commit())
|
if(!db.commit())
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
#include "databasefactory.h"
|
#include "databasefactory.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
#include "pagedata.h"
|
#include "documentprocessresult.h"
|
||||||
#include "filedata.h"
|
#include "filedata.h"
|
||||||
#include "../shared/sqlitesearch.h"
|
#include "../shared/sqlitesearch.h"
|
||||||
#include "../shared/token.h"
|
#include "../shared/token.h"
|
||||||
@ -22,7 +22,7 @@ class SqliteDbService
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
SqliteDbService(DatabaseFactory &dbFactory);
|
SqliteDbService(DatabaseFactory &dbFactory);
|
||||||
SaveFileResult saveFile(QFileInfo fileInfo, QVector<PageData> &pageData, bool pathsOnly);
|
SaveFileResult saveFile(QFileInfo fileInfo, DocumentProcessResult &pageData, bool pathsOnly);
|
||||||
|
|
||||||
bool deleteFile(QString path);
|
bool deleteFile(QString path);
|
||||||
bool fileExistsInDatabase(QString path);
|
bool fileExistsInDatabase(QString path);
|
||||||
@ -42,6 +42,7 @@ class SqliteDbService
|
|||||||
QVector<SearchResult> search(const LooqsQuery &query);
|
QVector<SearchResult> search(const LooqsQuery &query);
|
||||||
|
|
||||||
std::optional<QChar> queryFileType(QString absPath);
|
std::optional<QChar> queryFileType(QString absPath);
|
||||||
|
bool insertOutline(QSqlDatabase &db, int fileid, const QVector<DocumentOutlineEntry> &outlines);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SQLITEDBSERVICE_H
|
#endif // SQLITEDBSERVICE_H
|
||||||
|
Cargando…
Referencia en una nueva incidencia
Block a user