From ab43d309cbda533997c5c1cbd21d4613a528a5c1 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Tue, 31 May 2016 15:49:12 +0200 Subject: [PATCH] data: optimize memory of sqlite database * use sqlite "VACUUM" after analysis to reduce memory size * only add filename to name of local symbol --- src/app/data/parser/cxx/TaskParseWrapper.cpp | 6 +++++- src/lib/data/PersistentStorage.cpp | 5 +++++ src/lib/data/PersistentStorage.h | 2 ++ src/lib/data/SqliteStorage.cpp | 12 ++++++++++++ src/lib/data/SqliteStorage.h | 2 ++ src/lib/data/parser/cxx/TaskParseWrapper.h | 1 - src/lib_parser/data/parser/cxx/ASTVisitor.cpp | 2 +- 7 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/app/data/parser/cxx/TaskParseWrapper.cpp b/src/app/data/parser/cxx/TaskParseWrapper.cpp index f481c4ca..3a499ce9 100644 --- a/src/app/data/parser/cxx/TaskParseWrapper.cpp +++ b/src/app/data/parser/cxx/TaskParseWrapper.cpp @@ -34,7 +34,11 @@ void TaskParseWrapper::exit() { m_child->exit(); - MessageStatus("building search index", false, true).dispatch(); + MessageStatus("optimizing database", false, true).dispatch(); + + m_storage->optimizeMemory(); + + MessageStatus("building caches", false, true).dispatch(); m_storage->finishParsing(); diff --git a/src/lib/data/PersistentStorage.cpp b/src/lib/data/PersistentStorage.cpp index 9d2c253e..fd7c0875 100644 --- a/src/lib/data/PersistentStorage.cpp +++ b/src/lib/data/PersistentStorage.cpp @@ -360,6 +360,11 @@ void PersistentStorage::finishParsing() optimizeFTSTable(); } +void PersistentStorage::optimizeMemory() +{ + m_sqliteStorage.optimizeMemory(); +} + Id PersistentStorage::getIdForNodeWithNameHierarchy(const NameHierarchy& nameHierarchy) const { return m_sqliteStorage.getNodeBySerializedName(NameHierarchy::serialize(nameHierarchy)).id; diff --git a/src/lib/data/PersistentStorage.h b/src/lib/data/PersistentStorage.h index 7920557c..451dfefb 100644 --- a/src/lib/data/PersistentStorage.h +++ b/src/lib/data/PersistentStorage.h @@ -69,6 +69,8 @@ public: void startParsing(); void finishParsing(); + void optimizeMemory(); + // StorageAccess implementation virtual Id getIdForNodeWithNameHierarchy(const NameHierarchy& nameHierarchy) const; virtual Id getIdForEdge( diff --git a/src/lib/data/SqliteStorage.cpp b/src/lib/data/SqliteStorage.cpp index 5f15817c..aa52b735 100644 --- a/src/lib/data/SqliteStorage.cpp +++ b/src/lib/data/SqliteStorage.cpp @@ -361,6 +361,18 @@ std::vector SqliteStorage::getEdgesByTargetType(Id targetId, int ty return getAll("WHERE target_node_id == " + std::to_string(targetId) + " AND type == " + std::to_string(type)); } +void SqliteStorage::optimizeMemory() const +{ + try + { + m_database.execDML("VACUUM;"); + } + catch(CppSQLite3Exception e) + { + LOG_ERROR(e.errorMessage()); + } +} + void SqliteStorage::optimizeFTSTable() const { try diff --git a/src/lib/data/SqliteStorage.h b/src/lib/data/SqliteStorage.h index 998a14e7..9cd191bd 100644 --- a/src/lib/data/SqliteStorage.h +++ b/src/lib/data/SqliteStorage.h @@ -95,6 +95,8 @@ public: StorageComponentAccess getComponentAccessByMemberEdgeId(Id memberEdgeId) const; std::vector getComponentAccessByMemberEdgeIds(const std::vector& memberEdgeIds) const; + void optimizeMemory() const; + std::vector getFullTextSearch(const std::string& searchTerm) const; void optimizeFTSTable() const; diff --git a/src/lib/data/parser/cxx/TaskParseWrapper.h b/src/lib/data/parser/cxx/TaskParseWrapper.h index 65440f4f..a31ebff2 100644 --- a/src/lib/data/parser/cxx/TaskParseWrapper.h +++ b/src/lib/data/parser/cxx/TaskParseWrapper.h @@ -16,7 +16,6 @@ class TaskParseWrapper : public Task { public: - TaskParseWrapper( std::shared_ptr child, PersistentStorage* storage, diff --git a/src/lib_parser/data/parser/cxx/ASTVisitor.cpp b/src/lib_parser/data/parser/cxx/ASTVisitor.cpp index 51423493..96811448 100644 --- a/src/lib_parser/data/parser/cxx/ASTVisitor.cpp +++ b/src/lib_parser/data/parser/cxx/ASTVisitor.cpp @@ -1148,7 +1148,7 @@ void ASTVisitor::RecordDeclRef( { ParseLocation declLocation = getParseLocation(varDecl->getSourceRange()); std::string name = - declLocation.filePath.str() + "::" + + declLocation.filePath.fileName() + "::" + varDecl->getNameAsString() + "<" + std::to_string(declLocation.startLineNumber) + ":" + std::to_string(declLocation.startColumnNumber) + ">";