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
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user