data: Improved injection performance with batched insertions

* add InsertBatchStatement inserting any number as multiples
* switched Storage injection interface to containers
This commit is contained in:
Eberhard Graether
2018-10-03 01:15:27 +02:00
parent 15e66758df
commit f060b6042d
11 changed files with 716 additions and 512 deletions
+29 -10
View File
@@ -20,27 +20,33 @@ public:
PersistentStorage(const FilePath& dbPath, const FilePath& bookmarkPath);
std::pair<Id, bool> addNode(const StorageNodeData& data) override;
std::vector<Id> addNodes(const std::vector<StorageNode>& nodes) override;
void addSymbol(const StorageSymbol& data) override;
void addSymbols(const std::vector<StorageSymbol>& symbols) override;
void addFile(const StorageFile& data) override;
Id addEdge(const StorageEdgeData& data) override;
std::vector<Id> addEdges(const std::vector<StorageEdge>& edges) override;
Id addLocalSymbol(const StorageLocalSymbolData& data) override;
std::vector<Id> addLocalSymbols(const std::set<StorageLocalSymbol>& symbols) override;
Id addSourceLocation(const StorageSourceLocationData& data) override;
std::vector<Id> addSourceLocations(const std::vector<StorageSourceLocation>& locations) override;
void addOccurrence(const StorageOccurrence& data) override;
void addOccurrences(const std::vector<StorageOccurrence>& occurrences) override;
void addComponentAccess(const StorageComponentAccess& componentAccess) override;
void addComponentAccesses(const std::vector<StorageComponentAccess>& componentAccesses) override;
void addCommentLocation(const StorageCommentLocationData& data) override;
void addError(const StorageErrorData& data) override;
void forEachNode(std::function<void(const StorageNode& /*data*/)> callback) const override;
void forEachFile(std::function<void(const StorageFile& /*data*/)> callback) const override;
void forEachSymbol(std::function<void(const StorageSymbol& /*data*/)> callback) const override;
void forEachEdge(std::function<void(const StorageEdge& /*data*/)> callback) const override;
void forEachLocalSymbol(std::function<void(const StorageLocalSymbol& /*data*/)> callback) const override;
void forEachSourceLocation(std::function<void(const StorageSourceLocation& /*data*/)> callback) const override;
void forEachOccurrence(std::function<void(const StorageOccurrence& /*data*/)> callback) const override;
void forEachComponentAccess(std::function<void(const StorageComponentAccess& /*data*/)> callback) const override;
void forEachCommentLocation(std::function<void(const StorageCommentLocationData& /*data*/)> callback) const override;
void forEachError(std::function<void(const StorageErrorData& /*data*/)> callback) const override;
const std::vector<StorageNode>& getStorageNodes() const override;
const std::vector<StorageFile>& getStorageFiles() const override;
const std::vector<StorageSymbol>& getStorageSymbols() const override;
const std::vector<StorageEdge>& getStorageEdges() const override;
const std::set<StorageLocalSymbol>& getStorageLocalSymbols() const override;
const std::set<StorageSourceLocation>& getStorageSourceLocations() const override;
const std::set<StorageOccurrence>& getStorageOccurrences() const override;
const std::set<StorageComponentAccess>& getComponentAccesses() const override;
const std::set<StorageCommentLocationData>& getCommentLocations() const override;
const std::vector<StorageErrorData>& getErrors() const override;
void startInjection() override;
void finishInjection() override;
@@ -153,6 +159,19 @@ public:
const std::vector<Id>& locationIds, const std::vector<Id>& localSymbolIds) const override;
private:
mutable struct {
std::vector<StorageNode> nodes;
std::vector<StorageFile> files;
std::vector<StorageSymbol> symbols;
std::vector<StorageEdge> edges;
std::set<StorageLocalSymbol> locals;
std::set<StorageSourceLocation> locations;
std::set<StorageOccurrence> occurrences;
std::set<StorageComponentAccess> accesses;
std::set<StorageCommentLocationData> comments;
std::vector<StorageErrorData> errors;
} m_storageData;
Id getFileNodeId(const FilePath& filePath) const;
std::vector<Id> getFileNodeIds(const std::vector<FilePath>& filePaths) const;
std::set<Id> getFileNodeIds(const std::set<FilePath>& filePaths) const;