data: performance optimization NameHierarchy

* For performance reasons nodes now store a serialized version of their name hierarchy directly. Removed NameHierarchy table from database.
This commit is contained in:
malte_langkabel
2016-01-05 16:42:29 +01:00
parent 6f083a10ac
commit 899138a6bd
9 changed files with 229 additions and 712 deletions
+110 -241
View File
@@ -1,349 +1,176 @@
ConfigManager.cpp WARNING: value path/to/nowhere is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Settings.cpp WARNING: File for Settings not found: data/TestSettings.xml
ConfigManager.cpp WARNING: value source/header_search_paths/header_search_path is not present in config.
Token.cpp ERROR: Location Id was not referenced by this Token.
Edge.cpp ERROR: Edge type_of can't go from Node undefined to Node undefined
@@ -355,6 +182,48 @@ Edge.cpp ERROR: Edge type_of can't go from Node undefined to Node undefined
Edge.cpp ERROR: Edge type_of can't go from Node undefined to Node undefined
Edge.cpp ERROR: Edge use can't go from Node undefined to Node undefined
Edge.cpp ERROR: Edge use can't go from Node undefined to Node undefined
INFO: send TestMessage
INFO: handle TestMessage
INFO: send TestMessage
INFO: handle TestMessage
INFO: send TestMessage
INFO: handle TestMessage
INFO: send TestMessage2
INFO: handle TestMessage2
INFO: send TestMessage
INFO: handle TestMessage
INFO: send TestMessage2
INFO: handle TestMessage2
INFO: send TestMessage
INFO: handle TestMessage
INFO: send TestMessage
INFO: handle TestMessage
INFO: send TestMessage2
INFO: handle TestMessage2
INFO: send TestMessage
INFO: handle TestMessage
INFO: send TestMessage
INFO: handle TestMessage
INFO: handle TestMessage
INFO: send TestMessage
INFO: handle TestMessage
INFO: handle TestMessage
INFO: send TestMessage
INFO: handle TestMessage
INFO: send TestMessage
INFO: handle TestMessage
INFO: handle TestMessage
INFO: handle TestMessage
INFO: handle TestMessage
INFO: handle TestMessage
INFO: handle TestMessage
INFO: send TestMessage
INFO: handle TestMessage
INFO: handle TestMessage
INFO: handle TestMessage
INFO: handle TestMessage
INFO: handle TestMessage
INFO: handle TestMessage
Settings.cpp WARNING: File for Settings not found: data/SettingsTestSuite/wrong_settings.xml
ConfigManager.cpp WARNING: value Bool is not present in config.
ConfigManager.cpp WARNING: value Int is not present in config.
@@ -370,100 +239,100 @@ ConfigManager.cpp WARNING: value Int is not present in config.
ConfigManager.cpp WARNING: value Float is not present in config.
ConfigManager.cpp WARNING: value String is not present in config.
ConfigManager.cpp WARNING: value NewBool is not present in config.
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: typedef: type -> int <file.cpp 1:1 1:1>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: typedef: type -> int <file.cpp 1:1 1:1>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: class: Class <file.cpp 1:1 1:1>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: class: Class <file.cpp 1:1 1:1>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: struct: Struct <file.cpp 1:1 1:1>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: struct: Struct <file.cpp 1:1 1:1>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: global: Global <file.cpp 1:42 1:42>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: global: Global <file.cpp 1:42 1:42>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: global: Global <file.cpp 1:7 1:7>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: global: Global <file.cpp 1:7 1:7>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: field: m_field <file.cpp 1:3 1:3>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: field: m_field <file.cpp 1:3 1:3>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: field: Struct::m_field <file.cpp 1:11 1:11>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: field: Struct::m_field <file.cpp 1:11 1:11>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: function: isTrue <file.cpp 1:14 1:14>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: function: isTrue <file.cpp 1:14 1:14>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: method: isMethod <file.cpp 1:9 1:9>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: method: isMethod <file.cpp 1:9 1:9>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: method: Class::isMethod <file.cpp 1:1 1:1>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: method: Class::isMethod <file.cpp 1:1 1:1>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: namespace: utility <file.cpp 1:1 1:1>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: namespace: utility <file.cpp 1:1 1:1>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: enum: Category <file.cpp 1:17 1:17>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: enum: Category <file.cpp 1:17 1:17>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: enum: Class::Category <file.cpp 1:1 1:1>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: enum: Class::Category <file.cpp 1:1 1:1>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: enum constant: VALUE <file.cpp 1:1 1:1>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: enum constant: VALUE <file.cpp 1:1 1:1>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: class: ClassA <file.cpp 1:0 1:0>
Storage.cpp INFO: class: ClassB <file.cpp 1:0 1:0>
Storage.cpp INFO: inheritance: ClassB : ClassA <file.cpp 1:5 1:5>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: class: ClassA <file.cpp 1:0 1:0>
INFO: class: ClassB <file.cpp 1:0 1:0>
INFO: inheritance: ClassB : ClassA <file.cpp 1:5 1:5>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: struct: StructA <file.cpp 1:0 1:0>
Storage.cpp INFO: struct: StructB <file.cpp 1:0 1:0>
Storage.cpp INFO: inheritance: StructB : StructA <file.cpp 1:5 1:5>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: struct: StructA <file.cpp 1:0 1:0>
INFO: struct: StructB <file.cpp 1:0 1:0>
INFO: inheritance: StructB : StructA <file.cpp 1:5 1:5>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: method: A::isMethod <file.cpp 1:9 1:9>
Storage.cpp INFO: method: B::isMethod <file.cpp 1:7 1:7>
Storage.cpp INFO: override: A::isMethod -> B::isMethod <file.cpp 1:4 1:4>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: method: A::isMethod <file.cpp 1:9 1:9>
INFO: method: B::isMethod <file.cpp 1:7 1:7>
INFO: override: A::isMethod -> B::isMethod <file.cpp 1:4 1:4>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: function: isTrue <file.cpp 1:0 1:0>
Storage.cpp INFO: function: func <file.cpp 1:0 1:0>
Storage.cpp INFO: call: isTrue -> func <file.cpp 1:9 1:9>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: function: isTrue <file.cpp 1:0 1:0>
INFO: function: func <file.cpp 1:0 1:0>
INFO: call: isTrue -> func <file.cpp 1:9 1:9>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: global: global <file.cpp 1:0 1:0>
Storage.cpp INFO: function: isTrue <file.cpp 1:0 1:0>
Storage.cpp INFO: call: global -> isTrue <file.cpp 1:7 1:7>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: global: global <file.cpp 1:0 1:0>
INFO: function: isTrue <file.cpp 1:0 1:0>
INFO: call: global -> isTrue <file.cpp 1:7 1:7>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: function: isTrue <file.cpp 1:0 1:0>
Storage.cpp INFO: field: Foo::m_field <file.cpp 1:0 1:0>
Storage.cpp INFO: field usage: isTrue -> Foo::m_field <file.cpp 1:7 1:7>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: function: isTrue <file.cpp 1:0 1:0>
INFO: field: Foo::m_field <file.cpp 1:0 1:0>
INFO: field usage: isTrue -> Foo::m_field <file.cpp 1:7 1:7>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: function: isTrue <file.cpp 1:0 1:0>
Storage.cpp INFO: global: global <file.cpp 1:0 1:0>
Storage.cpp INFO: global usage: isTrue -> global <file.cpp 1:7 1:7>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: function: isTrue <file.cpp 1:0 1:0>
INFO: global: global <file.cpp 1:0 1:0>
INFO: global usage: isTrue -> global <file.cpp 1:7 1:7>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: function: isTrue <file.cpp 1:0 1:0>
Storage.cpp INFO: struct: Struct <file.cpp 1:0 1:0>
Storage.cpp INFO: type usage: isTrue -> Struct <file.cpp 1:0 1:0>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: function: isTrue <file.cpp 1:0 1:0>
INFO: struct: Struct <file.cpp 1:0 1:0>
INFO: type usage: isTrue -> Struct <file.cpp 1:0 1:0>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: file: file.h < 0:0 0:0>
INFO: file: file.h < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.h
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
INFO: file: file.cpp < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.cpp
Storage.cpp INFO: file: file.h < 0:0 0:0>
INFO: file: file.h < 0:0 0:0>
TextAccess.cpp ERROR: Could not open file file.h
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
Storage.cpp INFO: include: file.h <file.cpp 1:7 1:7>
Storage.cpp INFO: file: file.cpp < 0:0 0:0>
Storage.cpp INFO: file: file.h < 0:0 0:0>
INFO: file: file.cpp < 0:0 0:0>
INFO: include: file.h <file.cpp 1:7 1:7>
INFO: file: file.cpp < 0:0 0:0>
INFO: file: file.h < 0:0 0:0>
TextAccess.cpp WARNING: Index 'firstLine' has to be lower or equal index 'lastLine', is 3 > 2
TextAccess.cpp WARNING: Tried to access index 10. Maximum index is 8
TextAccess.cpp WARNING: Tried to access index 10. Maximum index is 8
+28 -214
View File
@@ -81,7 +81,7 @@ Id SqliteStorage::addEdge(int type, Id sourceNodeId, Id targetNodeId)
return id;
}
Id SqliteStorage::addNode(int type, Id nameId, bool defined)
Id SqliteStorage::addNode(int type, const std::string& serializedName, bool defined)
{
m_database.execDML(
"INSERT INTO element(id) VALUES(NULL);"
@@ -89,16 +89,16 @@ Id SqliteStorage::addNode(int type, Id nameId, bool defined)
Id id = m_database.lastRowId();
m_database.execDML((
"INSERT INTO node(id, type, name_id, defined) VALUES("
+ std::to_string(id) + ", " + std::to_string(type) + ", " + std::to_string(nameId) + ", " + std::to_string(defined) + ");"
"INSERT INTO node(id, type, serializedName, defined) VALUES("
+ std::to_string(id) + ", " + std::to_string(type) + ", '" + serializedName + "', " + std::to_string(defined) + ");"
).c_str());
return id;
}
Id SqliteStorage::addFile(Id nameId, const std::string& filePath, const std::string& modificationTime)
Id SqliteStorage::addFile(const std::string& serializedName, const std::string& filePath, const std::string& modificationTime)
{
Id id = addNode(Node::NODE_FILE, nameId, true);
Id id = addNode(Node::NODE_FILE, serializedName, true);
std::shared_ptr<TextAccess> content = TextAccess::createFromFile(filePath);
CppSQLite3Statement stmt = m_database.compileStatement((
@@ -125,26 +125,6 @@ Id SqliteStorage::addSourceLocation(Id elementId, Id fileNodeId, uint startLine,
return m_database.lastRowId();
}
Id SqliteStorage::addNameHierarchyElement(const std::string& name, Id parentId)
{
if (parentId)
{
m_database.execDML((
"INSERT INTO name_hierarchy_element(id, name, parent_id) "
"VALUES (NULL, '" + name + "', " + std::to_string(parentId) + ");"
).c_str());
}
else
{
m_database.execDML((
"INSERT INTO name_hierarchy_element(id, name, parent_id) "
"VALUES(NULL, '" + name + "', NULL);"
).c_str());
}
return m_database.lastRowId();
}
Id SqliteStorage::addComponentAccess(Id memberEdgeId, int type)
{
m_database.execDML((
@@ -155,16 +135,6 @@ Id SqliteStorage::addComponentAccess(Id memberEdgeId, int type)
return m_database.lastRowId();
}
Id SqliteStorage::addSignature(Id nodeId, const std::string& signature)
{
m_database.execDML((
"INSERT INTO function_signature(id, signature) "
"VALUES (" + std::to_string(nodeId) + ", '" + signature + "');"
).c_str());
return m_database.lastRowId();
}
Id SqliteStorage::addCommentLocation(Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol)
{
m_database.execDML((
@@ -210,13 +180,6 @@ void SqliteStorage::removeElement(Id id)
).c_str());
}
void SqliteStorage::removeNameHierarchyElement(Id id)
{
m_database.execDML((
"DELETE FROM name_hierarchy_element WHERE id == " + std::to_string(id) + ";"
).c_str());
}
void SqliteStorage::removeElementsWithLocationInFiles(const std::vector<Id>& fileIds)
{
CppSQLite3Query q = m_database.execQuery((
@@ -263,13 +226,6 @@ void SqliteStorage::removeFiles(const std::vector<Id>& fileIds)
).c_str());
}
void SqliteStorage::removeUnusedNameHierarchyElements()
{
m_database.execDML(
"DELETE FROM name_hierarchy_element WHERE NOT EXISTS (SELECT * FROM node where node.name_id == name_hierarchy_element.id);"
);
}
void SqliteStorage::removeErrorsInFiles(const std::vector<FilePath>& filePaths)
{
m_database.execDML((
@@ -285,7 +241,7 @@ StorageNode SqliteStorage::getFirstNode() const
return nodes[0];
}
return StorageNode(0, 0, 0, false);
return StorageNode(0, 0, "", false);
}
std::vector<StorageNode> SqliteStorage::getAllNodes() const
@@ -444,9 +400,14 @@ StorageNode SqliteStorage::getNodeById(Id id) const
return StorageNode(0, 0, 0, false);
}
std::vector<StorageNode> SqliteStorage::getNodesByNameId(Id nameId) const
StorageNode SqliteStorage::getNodeBySerializedName(const std::string& serializedName) const
{
return getAllNodes("WHERE name_id == " + std::to_string(nameId));
std::vector<StorageNode> nodes = getAllNodes("WHERE serializedName == '" + serializedName + "'"); // Todo: use getfirstnode here
if (nodes.size() > 0)
{
return nodes[0];
}
return StorageNode(0, 0, "", 0);
}
std::vector<StorageNode> SqliteStorage::getNodesByIds(const std::vector<Id>& nodeIds) const
@@ -457,32 +418,15 @@ std::vector<StorageNode> SqliteStorage::getNodesByIds(const std::vector<Id>& nod
StorageFile SqliteStorage::getFileById(const Id id) const
{
return getFirstFile(
"SELECT node.id, node.name_id, file.path, file.modification_time FROM node INNER JOIN file ON node.id = file.id "
"SELECT node.id, node.serializedName, file.path, file.modification_time FROM node INNER JOIN file ON node.id = file.id "
"WHERE node.id == " + std::to_string(id) + ";"
);
}
StorageFile SqliteStorage::getFileByName(const std::string& fileName) const
{
Id nameId = getNameHierarchyElementIdByName(fileName);
StorageFile storageFile(0, 0, "", "");
if (nameId != 0)
{
storageFile = getFirstFile(
"SELECT node.id, node.name_id, file.path, file.modification_time FROM node INNER JOIN file ON node.id = file.id "
"WHERE node.name_id == " + std::to_string(nameId) + ";"
);
}
return storageFile;
}
StorageFile SqliteStorage::getFileByPath(const std::string& filePath) const
{
StorageFile storageFile = getFirstFile(
"SELECT node.id, node.name_id, file.path, file.modification_time FROM node INNER JOIN file ON node.id = file.id "
"SELECT node.id, node.serializedName, file.path, file.modification_time FROM node INNER JOIN file ON node.id = file.id "
"WHERE file.path == '" + filePath + "';"
);
@@ -491,7 +435,7 @@ StorageFile SqliteStorage::getFileByPath(const std::string& filePath) const
std::vector<StorageFile> SqliteStorage::getAllFiles() const
{
return getAllFiles("SELECT file.id, node.name_id, file.path, file.modification_time FROM file INNER JOIN node ON file.id = node.id;");
return getAllFiles("SELECT file.id, node.serializedName, file.path, file.modification_time FROM file INNER JOIN node ON file.id = node.id;");
}
std::shared_ptr<TextAccess> SqliteStorage::getFileContentByPath(const std::string& filePath) const
@@ -522,81 +466,6 @@ void SqliteStorage::setNodeDefined(bool defined, Id nodeId)
).c_str());
}
Id SqliteStorage::getNameHierarchyElementIdByName(const std::string& name, Id parentId) const
{
if (parentId)
{
return getFirstResult<Id>(
"SELECT id FROM name_hierarchy_element WHERE name == '" + name + "' AND parent_id == " + std::to_string(parentId) + ";"
);
}
else
{
return getFirstResult<Id>(
"SELECT id FROM name_hierarchy_element WHERE name == '" + name + "' AND parent_id IS NULL;"
);
}
}
Id SqliteStorage::getNameHierarchyElementIdByNodeId(const Id nodeId) const
{
return getFirstResult<Id>(
"SELECT name_id FROM node WHERE id == " + std::to_string(nodeId) + ";"
);
}
std::vector<StorageNameHierarchyElement> SqliteStorage::getAllNameHierarchyElements() const
{
std::vector<StorageNameHierarchyElement> ret;
CppSQLite3Query q = m_database.execQuery(
"SELECT * FROM name_hierarchy_element;"
);
while (!q.eof())
{
const Id id = q.getIntField(0, 0);
const std::string name = q.getStringField(1, "");
const Id parent_id = q.getIntField(2, 0);
if (id != 0 && name != "" && parent_id != 0)
{
ret.push_back(StorageNameHierarchyElement(id, name, parent_id));
}
q.nextRow();
}
return ret;
}
NameHierarchy SqliteStorage::getNameHierarchyById(const Id id) const
{
CppSQLite3Query q = m_database.execQuery((
"SELECT name, parent_id FROM name_hierarchy_element WHERE id == " + std::to_string(id) + ";"
).c_str());
NameHierarchy nameHierarchy;
if (!q.eof())
{
const std::string elementName = q.getStringField(0, "");
const Id parentId = q.getIntField(1, 0);
if (parentId > 0)
{
nameHierarchy = getNameHierarchyById(parentId);
}
if (elementName.size() > 0)
{
nameHierarchy.push(std::make_shared<NameElement>(elementName));
}
}
return nameHierarchy;
}
StorageSourceLocation SqliteStorage::getSourceLocationByData(Id elementId, Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, bool isScope) const
{
return getFirstSourceLocation((
@@ -732,36 +601,6 @@ std::vector<StorageComponentAccess> SqliteStorage::getComponentAccessByMemberEdg
return accesses;
}
std::vector<Id> SqliteStorage::getNodeIdsBySignature(const std::string& signature) const
{
CppSQLite3Query q = m_database.execQuery((
"SELECT id FROM function_signature WHERE signature == '" + signature + "';"
).c_str());
std::vector<Id> ids;
while (!q.eof())
{
ids.push_back(q.getIntField(0, 0));
q.nextRow();
}
return ids;
}
std::string SqliteStorage::getSignatureByNodeId(Id nodeId) const
{
CppSQLite3Query q = m_database.execQuery((
"SELECT id, signature FROM function_signature WHERE id == " + std::to_string(nodeId) + ";"
).c_str());
while (!q.eof())
{
return q.getStringField(1, "");
}
return "";
}
std::vector<StorageCommentLocation> SqliteStorage::getCommentLocationsInFile(const FilePath& filePath) const
{
Id fileNodeId = getFileByPath(filePath.str()).id;
@@ -829,11 +668,6 @@ int SqliteStorage::getFileCount() const
return m_database.execScalar("SELECT COUNT(*) FROM file;");
}
int SqliteStorage::getNameHierarchyElementCount() const
{
return m_database.execScalar("SELECT COUNT(*) FROM name_hierarchy_element;");
}
int SqliteStorage::getSourceLocationCount() const
{
return m_database.execScalar("SELECT COUNT(*) FROM source_location;");
@@ -843,10 +677,8 @@ void SqliteStorage::clearTables()
{
m_database.execDML("DROP TABLE IF EXISTS main.error;");
m_database.execDML("DROP TABLE IF EXISTS main.comment_location;");
m_database.execDML("DROP TABLE IF EXISTS main.function_signature;");
m_database.execDML("DROP TABLE IF EXISTS main.component_access;");
m_database.execDML("DROP TABLE IF EXISTS main.source_location;");
m_database.execDML("DROP TABLE IF EXISTS main.name_hierarchy_element;");
m_database.execDML("DROP TABLE IF EXISTS main.file;");
m_database.execDML("DROP TABLE IF EXISTS main.node;");
m_database.execDML("DROP TABLE IF EXISTS main.edge;");
@@ -886,11 +718,10 @@ void SqliteStorage::setupTables()
"CREATE TABLE IF NOT EXISTS node("
"id INTEGER NOT NULL, "
"type INTEGER NOT NULL, "
"name_id INTEGER NOT NULL, "
"serializedName TEXT, "
"defined INTEGER NOT NULL, "
"PRIMARY KEY(id), "
"FOREIGN KEY(id) REFERENCES element(id) ON DELETE CASCADE, "
"FOREIGN KEY(name_id) REFERENCES name_hierarchy_element(id) ON DELETE CASCADE);" // maybe use restrict here
"FOREIGN KEY(id) REFERENCES element(id) ON DELETE CASCADE);"
);
m_database.execDML(
@@ -903,15 +734,6 @@ void SqliteStorage::setupTables()
"FOREIGN KEY(id) REFERENCES node(id) ON DELETE CASCADE);"
);
m_database.execDML(
"CREATE TABLE IF NOT EXISTS name_hierarchy_element("
"id INTEGER NOT NULL, "
"name TEXT, "
"parent_id INTEGER, "
"PRIMARY KEY(id), "
"FOREIGN KEY(parent_id) REFERENCES name_hierarchy_element(id) ON DELETE CASCADE);" // maybe use restrict here
);
m_database.execDML(
"CREATE TABLE IF NOT EXISTS source_location("
"id INTEGER NOT NULL, "
@@ -936,14 +758,6 @@ void SqliteStorage::setupTables()
"FOREIGN KEY(edge_id) REFERENCES edge(id) ON DELETE CASCADE);"
);
m_database.execDML(
"CREATE TABLE IF NOT EXISTS function_signature("
"id INTEGER NOT NULL, "
"signature TEXT, "
"PRIMARY KEY(id), "
"FOREIGN KEY(id) REFERENCES node(id) ON DELETE CASCADE);"
);
m_database.execDML(
"CREATE TABLE IF NOT EXISTS comment_location("
"id INTEGER NOT NULL, "
@@ -1011,16 +825,16 @@ StorageFile SqliteStorage::getFirstFile(const std::string& query) const
if (!q.eof())
{
const Id id = q.getIntField(0, 0);
const Id nameId = q.getIntField(1, 0);
const std::string serializedName = q.getStringField(1, "");
const std::string filePath = q.getStringField(2, "");
const std::string modificationTime = q.getStringField(3, "");
if (id != 0 && nameId != 0)
if (id != 0)
{
return StorageFile(id, nameId, filePath, modificationTime);
return StorageFile(id, serializedName, filePath, modificationTime);
}
}
return StorageFile(0, 0, "", "");
return StorageFile(0, "", "", "");
}
std::vector<StorageFile> SqliteStorage::getAllFiles(const std::string& query) const
@@ -1032,13 +846,13 @@ std::vector<StorageFile> SqliteStorage::getAllFiles(const std::string& query) co
while (!q.eof())
{
const Id id = q.getIntField(0, 0);
const Id nameId = q.getIntField(1, 0);
const std::string serializedName = q.getStringField(1, "");
const std::string filePath = q.getStringField(2, "");
const std::string modificationTime = q.getStringField(3, "");
if (id != 0 && nameId != 0)
if (id != 0)
{
files.push_back(StorageFile(id, nameId, filePath, modificationTime));
files.push_back(StorageFile(id, serializedName, filePath, modificationTime));
}
q.nextRow();
}
@@ -1129,7 +943,7 @@ std::vector<StorageEdge> SqliteStorage::getAllEdges(const std::string& query) co
std::vector<StorageNode> SqliteStorage::getAllNodes(const std::string& query) const
{
CppSQLite3Query q = m_database.execQuery((
"SELECT id, type, name_id, defined FROM node " + query + ";"
"SELECT id, type, serializedName, defined FROM node " + query + ";"
).c_str());
std::vector<StorageNode> nodes;
@@ -1137,12 +951,12 @@ std::vector<StorageNode> SqliteStorage::getAllNodes(const std::string& query) co
{
const Id id = q.getIntField(0, 0);
const int type = q.getIntField(1, -1);
const Id nameId = q.getIntField(2, 0);
const std::string serializedName = q.getStringField(2, "");
const bool defined = q.getIntField(3, 0);
if (id != 0 && type != -1)
{
nodes.push_back(StorageNode(id, type, nameId, defined));
nodes.push_back(StorageNode(id, type, serializedName, defined));
}
q.nextRow();
+4 -20
View File
@@ -34,24 +34,19 @@ public:
void setVersion(const Version& version);
Id addEdge(int type, Id sourceNodeId, Id targetNodeId);
Id addNode(int type, Id nameId, bool defined);
Id addFile(Id nameId, const std::string& filePath, const std::string& modificationTime);
Id addSourceLocation(Id elementId, Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol,
bool isScope);
Id addNameHierarchyElement(const std::string& name, Id parentId = 0);
Id addNode(int type, const std::string& serializedName, bool defined);
Id addFile(const std::string& serializedName, const std::string& filePath, const std::string& modificationTime);
Id addSourceLocation(Id elementId, Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, bool isScope);
Id addComponentAccess(Id memberEdgeId, int type);
Id addSignature(Id nodeId, const std::string& signature);
Id addCommentLocation(Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol);
Id addError(const std::string& message, const std::string& filePath, uint lineNumber, uint columnNumber);
void removeElement(Id id);
void removeNameHierarchyElement(Id id);
void removeElementsWithLocationInFiles(const std::vector<Id>& fileIds);
void removeFile(Id id);
void removeFiles(const std::vector<Id>& fileIds);
void removeUnusedNameHierarchyElements();
void removeCommentLocationsInFiles(const std::vector<FilePath>& filePaths);
void removeErrorsInFiles(const std::vector<FilePath>& filePaths);
@@ -78,11 +73,10 @@ public:
std::vector<StorageEdge> getEdgesByTargetType(Id targetId, int type) const;
StorageNode getNodeById(Id id) const;
std::vector<StorageNode> getNodesByNameId(Id nameId) const;
StorageNode getNodeBySerializedName(const std::string& serializedName) const;
std::vector<StorageNode> getNodesByIds(const std::vector<Id>& nodeIds) const;
StorageFile getFileById(const Id id) const;
StorageFile getFileByName(const std::string& fileName) const;
StorageFile getFileByPath(const std::string& filePath) const;
std::vector<StorageFile> getAllFiles() const;
std::shared_ptr<TextAccess> getFileContentByPath(const std::string& filePath) const;
@@ -90,13 +84,6 @@ public:
void setNodeType(int type, Id nodeId);
void setNodeDefined(bool defined, Id nodeId);
Id getNameHierarchyElementIdByName(const std::string& name, Id parentId = 0) const;
Id getNameHierarchyElementIdByNodeId(const Id nodeId) const;
std::vector<StorageNameHierarchyElement> getAllNameHierarchyElements() const;
NameHierarchy getNameHierarchyById(const Id id) const;
StorageSourceLocation getSourceLocationByData(Id elementId, Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, bool isScope) const;
StorageSourceLocation getSourceLocationById(const Id id) const;
std::vector<StorageSourceLocation> getAllSourceLocations() const;
@@ -107,8 +94,6 @@ public:
StorageComponentAccess getComponentAccessByMemberEdgeId(Id memberEdgeId) const;
std::vector<StorageComponentAccess> getComponentAccessByMemberEdgeIds(const std::vector<Id>& memberEdgeIds) const;
std::vector<Id> getNodeIdsBySignature(const std::string& signature) const;
std::string getSignatureByNodeId(Id nodeId) const;
std::vector<StorageCommentLocation> getCommentLocationsInFile(const FilePath& filePath) const;
std::vector<StorageError> getAllErrors() const;
@@ -116,7 +101,6 @@ public:
int getNodeCount() const;
int getEdgeCount() const;
int getFileCount() const;
int getNameHierarchyElementCount() const;
int getSourceLocationCount() const;
private:
+32 -118
View File
@@ -100,9 +100,9 @@ void Storage::clearFileElements(const std::vector<FilePath>& filePaths)
}
}
void Storage::removeUnusedNames()
void Storage::removeUnusedNames() // maybe rename this function. look for callers first.
{
m_sqliteStorage.removeUnusedNameHierarchyElements();
// m_sqliteStorage.removeUnusedNameHierarchyElements();
clearCaches();
}
@@ -145,7 +145,6 @@ void Storage::logStats() const
ss << "\t" << m_tokenIndex.getCharCount() << " Characters\n";
ss << "\t" << m_tokenIndex.getWordCount() << " Words\n";
ss << "\t" << m_tokenIndex.getNodeCount() << " SearchNodes\n";
ss << "\t" << m_sqliteStorage.getNameHierarchyElementCount() << " NameHierarchyElements\n";
ss << "\nCode:\n";
ss << "\t" << m_sqliteStorage.getFileCount() << " Files\n";
@@ -685,27 +684,19 @@ Id Storage::onFileParsed(const FileInfo& fileInfo)
{
log("file", fileInfo.path.str(), ParseLocation());
const std::string fileName = fileInfo.path.fileName();
Id nameHierarchyElementId = m_sqliteStorage.getNameHierarchyElementIdByName(fileName);
if (nameHierarchyElementId == 0)
{
nameHierarchyElementId = m_sqliteStorage.addNameHierarchyElement(fileName);
}
Id fileNodeId = getFileNodeId(fileInfo.path);
if (fileNodeId == 0)
{
NameHierarchy nameHierarchy;
nameHierarchy.push(std::make_shared<NameElement>(fileInfo.path.fileName()));
fileNodeId = m_sqliteStorage.addFile(
nameHierarchyElementId,
NameHierarchy::serialize(nameHierarchy),
fileInfo.path.str(),
utility::timeToString(fileInfo.lastWriteTime)
);
}
NameHierarchy nameHierarchy;
nameHierarchy.push(std::make_shared<NameElement>(fileName));
return fileNodeId;
}
@@ -765,24 +756,13 @@ Id Storage::onCommentParsed(const ParseLocation& location)
Id Storage::getIdForNodeWithNameHierarchy(const NameHierarchy& nameHierarchy) const
{
Id currentId = 0;
for (size_t i = 0; i < nameHierarchy.size(); i++)
{
currentId = m_sqliteStorage.getNameHierarchyElementIdByName(nameHierarchy[i]->getFullName(), currentId);
}
std::vector<StorageNode> nodes = m_sqliteStorage.getNodesByNameId(currentId);
if (nodes.size() > 0) // TODO: make it impossible that one name id referrs to n nodes.
{
return nodes[0].id;
}
return 0;
return m_sqliteStorage.getNodeBySerializedName(NameHierarchy::serialize(nameHierarchy)).id;
}
Id Storage::getIdForEdge(
Edge::EdgeType type, const NameHierarchy& fromNameHierarchy, const NameHierarchy& toNameHierarchy
) const {
) const
{
Id sourceId = getIdForNodeWithNameHierarchy(fromNameHierarchy);
Id targetId = getIdForNodeWithNameHierarchy(toNameHierarchy);
return m_sqliteStorage.getEdgeBySourceTargetType(sourceId, targetId, type).id;
@@ -795,9 +775,7 @@ Id Storage::getIdForFirstNode() const
NameHierarchy Storage::getNameHierarchyForNodeWithId(Id nodeId) const
{
Id nameHierarchyElementId = m_sqliteStorage.getNameHierarchyElementIdByNodeId(nodeId);
return m_sqliteStorage.getNameHierarchyById(nameHierarchyElementId);
// return m_tokenIndex.getNameHierarchyForTokenId(nodeId).getFullName();
return NameHierarchy::deserialize(m_sqliteStorage.getNodeById(nodeId).serializedName);
}
Node::NodeType Storage::getNodeTypeForNodeWithId(Id nodeId) const
@@ -1053,7 +1031,7 @@ std::vector<Id> Storage::getTokenIdsForMatches(const std::vector<SearchMatch>& m
Id Storage::getTokenIdForFileNode(const FilePath& filePath) const
{
return m_sqliteStorage.getFileByName(filePath.fileName()).id;
return m_sqliteStorage.getFileByPath(filePath.str()).id;
}
std::vector<Id> Storage::getTokenIdsForAggregationEdge(Id sourceId, Id targetId) const
@@ -1306,73 +1284,34 @@ Id Storage::addNodeHierarchy(Node::NodeType nodeType, NameHierarchy nameHierarch
return 0;
}
std::vector<Id> nameIds = addNameHierarchyElements(nameHierarchy);
Id parentNodeId = 0;
for (size_t i = 0; i < nameIds.size(); i++)
{
Id nameId = nameIds[i];
const bool isLastElement = (i == nameHierarchy.size() - 1);
const std::string& signature = nameHierarchy[i]->getFullSignature();
const bool hasSignature = (signature.size() > 0);
bool nodeMayExist = true;
NameHierarchy currentNameHierarchy;
for (size_t i = 0; i < nameHierarchy.size(); i++)
{
currentNameHierarchy.push(nameHierarchy[i]);
const bool isLastElement = (i == nameHierarchy.size() - 1);
Node::NodeType type = (isLastElement ? nodeType : Node::NODE_UNDEFINED);
StorageNode node(0, 0, 0, false);
if (hasSignature)
StorageNode node(0, 0, "", false);
if (nodeMayExist)
{
std::vector<Id> potentialIds = m_sqliteStorage.getNodeIdsBySignature(signature);
if (parentNodeId != 0)
{
for (size_t i = 0; i < potentialIds.size(); i++)
{
if (m_sqliteStorage.getEdgeBySourceTargetType(parentNodeId, potentialIds[i], Edge::EDGE_MEMBER).id != 0)
{
node = m_sqliteStorage.getNodeById(potentialIds[i]);
break;
}
}
}
else if (potentialIds.size() > 0)
{
node = m_sqliteStorage.getNodeById(potentialIds[0]);
}
}
else
{
std::vector<StorageNode> potentialIds = m_sqliteStorage.getNodesByNameId(nameId);
if (parentNodeId != 0)
{
for (size_t i = 0; i < potentialIds.size(); i++)
{
if (m_sqliteStorage.getEdgeBySourceTargetType(parentNodeId, potentialIds[i].id, Edge::EDGE_MEMBER).id != 0)
{
node = potentialIds[i];
break;
}
}
}
else if (potentialIds.size() > 0)
{
node = potentialIds[0];
}
node = m_sqliteStorage.getNodeBySerializedName(NameHierarchy::serialize(currentNameHierarchy));
}
Id nodeId = node.id;
if (nodeId && !node.defined && isLastElement && defined)
if (nodeId && !node.defined && isLastElement && defined) // todo: move this down!
{
m_sqliteStorage.setNodeDefined(true, nodeId);
}
if (nodeId == 0)
{
nodeId = m_sqliteStorage.addNode(Node::typeToInt(type), nameId, isLastElement && defined);
if (hasSignature)
{
m_sqliteStorage.addSignature(nodeId, signature);
}
nodeMayExist = false;
nodeId = m_sqliteStorage.addNode(Node::typeToInt(type), NameHierarchy::serialize(currentNameHierarchy), isLastElement && defined);
if (parentNodeId != 0)
{
@@ -1399,35 +1338,6 @@ Id Storage::addNodeHierarchy(Node::NodeType type, const ParseFunction& function,
return addNodeHierarchy(type, function.nameHierarchy, defined);
}
std::vector<Id> Storage::addNameHierarchyElements(NameHierarchy nameHierarchy)
{
std::vector<Id> nameIds;
Id parentId = 0;
bool nodeMayExist = true;
for (size_t i = 0; i < nameHierarchy.size(); i++)
{
const std::string elementName = nameHierarchy[i]->getFullName();
Id nodeId = 0;
if (nodeMayExist)
{
nodeId = m_sqliteStorage.getNameHierarchyElementIdByName(elementName, parentId);
}
if (nodeId == 0)
{
nodeId = m_sqliteStorage.addNameHierarchyElement(elementName, parentId);
nodeMayExist = false;
}
nameIds.push_back(nodeId);
parentId = nodeId;
}
return nameIds;
}
Id Storage::addSourceLocation(Id elementNodeId, const ParseLocation &location, bool isScope)
{
if (!location.isValid())
@@ -1681,9 +1591,13 @@ void Storage::addNodesToGraph(const std::vector<Id> nodeIds, Graph* graph) const
if (type == Node::NODE_FUNCTION || type == Node::NODE_METHOD)
{
node->addComponentSignature(
std::make_shared<TokenComponentSignature>(m_sqliteStorage.getSignatureByNodeId(storageNode.id))
);
std::shared_ptr<NameElement> lastElement = NameHierarchy::deserialize(storageNode.serializedName).back();
if (lastElement)
{
node->addComponentSignature(
std::make_shared<TokenComponentSignature>(lastElement->getFullSignature())
);
}
}
}
}
@@ -1786,7 +1700,7 @@ void Storage::buildSearchIndex()
{
for (StorageNode node: m_sqliteStorage.getAllNodes())
{
m_tokenIndex.addTokenId(m_tokenIndex.addNode(m_sqliteStorage.getNameHierarchyById(node.nameId)), node.id);
m_tokenIndex.addTokenId(m_tokenIndex.addNode(NameHierarchy::deserialize(node.serializedName)), node.id);
}
}
-1
View File
@@ -172,7 +172,6 @@ public:
private:
Id addNodeHierarchy(Node::NodeType nodeType, NameHierarchy nameHierarchy, bool defined);
Id addNodeHierarchy(Node::NodeType type, const ParseFunction& function, bool defined);
std::vector<Id> addNameHierarchyElements(NameHierarchy nameHierarchy);
Id addSourceLocation(Id elementNodeId, const ParseLocation &location, bool isScope = false);
Id addEdge(Id sourceNodeId, Id targetNodeId, Edge::EdgeType type);
+6 -17
View File
@@ -22,45 +22,34 @@ struct StorageEdge
struct StorageNode
{
StorageNode(Id id, int type, Id nameId, bool defined)
StorageNode(Id id, int type, const std::string& serializedName, bool defined)
: id(id)
, type(type)
, nameId(nameId)
, serializedName(serializedName)
, defined(defined)
{}
Id id;
int type;
Id nameId;
std::string serializedName;
bool defined;
};
struct StorageFile
{
StorageFile(Id id, Id nameId, const std::string& filePath, const std::string& modificationTime)
StorageFile(Id id, const std::string& name, const std::string& filePath, const std::string& modificationTime)
: id(id)
, nameId(nameId)
, name(name)
, filePath(filePath)
, modificationTime(modificationTime)
{}
Id id;
Id nameId;
std::string name;
std::string filePath;
std::string modificationTime;
};
struct StorageNameHierarchyElement
{
StorageNameHierarchyElement(Id id, const std::string& name, Id parentId)
: id(id), name(name), parentId(parentId)
{}
Id id;
std::string name;
Id parentId;
};
struct StorageSourceLocation
{
StorageSourceLocation(Id id, Id elementId, Id fileNodeId, uint startLine, uint startCol, uint endLine, uint endCol, bool isScope)
+40 -1
View File
@@ -1,5 +1,40 @@
#include "data/name/NameHierarchy.h"
#include "utility/logging/logging.h"
#include "utility/utilityString.h"
std::string NameHierarchy::serialize(NameHierarchy nameHierarchy)
{
std::string serializedName = "";
for (size_t i = 0; i < nameHierarchy.size(); i++)
{
serializedName += nameHierarchy[i]->getFullName() + "\t";
serializedName += nameHierarchy[i]->getFullSignature();
if (i + 1 < nameHierarchy.size())
serializedName += "\n";
}
return serializedName;
}
NameHierarchy NameHierarchy::deserialize(const std::string& serializedName)
{
NameHierarchy nameHierarchy;
std::vector<std::string> serializedNameElements = utility::splitToVector(serializedName, "\n");
for (size_t i = 0; i < serializedNameElements.size(); i++)
{
std::vector<std::string> nameParts = utility::splitToVector(serializedNameElements[i], "\t");
if (nameParts.size() != 2)
{
LOG_ERROR("unable to deserialize name hierarchy: " + serializedName); // todo: obfuscate serializedName!
return NameHierarchy();
}
nameHierarchy.push(std::make_shared<NameElement>(nameParts[0], nameParts[1]));
}
return nameHierarchy;
}
NameHierarchy::NameHierarchy()
{
}
@@ -25,7 +60,11 @@ void NameHierarchy::pop()
std::shared_ptr<NameElement> NameHierarchy::back() const
{
return m_elements.back();
if (m_elements.size() > 0)
{
return m_elements.back();
}
return std::shared_ptr<NameElement>();
}
std::shared_ptr<NameElement> NameHierarchy::operator[](size_t pos) const
+3
View File
@@ -10,6 +10,9 @@
class NameHierarchy
{
public:
static std::string serialize(NameHierarchy nameHierarchy);
static NameHierarchy deserialize(const std::string& serializedName);
NameHierarchy();
NameHierarchy(const std::string& name);
~NameHierarchy();
+6 -100
View File
@@ -8,94 +8,6 @@
class SqliteStorageTestSuite: public CxxTest::TestSuite
{
public:
void test_storage_adds_name_hierarchy_element_successfully()
{
std::string databasePath = "data/SQLiteTestSuite/test.sqlite";
int elementCount = -1;
{
SqliteStorage storage(databasePath);
storage.beginTransaction();
storage.addNameHierarchyElement("a");
storage.commitTransaction();
elementCount = storage.getNameHierarchyElementCount();
}
boost::filesystem::remove(databasePath);
TS_ASSERT_EQUALS(1, elementCount);
}
void test_storage_removes_name_hierarchy_element_successfully()
{
std::string databasePath = "data/SQLiteTestSuite/test.sqlite";
int elementCount = -1;
{
SqliteStorage storage(databasePath);
storage.beginTransaction();
int elementId = storage.addNameHierarchyElement("a");
storage.removeNameHierarchyElement(elementId);
storage.commitTransaction();
elementCount = storage.getNameHierarchyElementCount();
}
boost::filesystem::remove(databasePath);
TS_ASSERT_EQUALS(0, elementCount);
}
void test_storage_finds_name_hierarchy_elements_by_name()
{
std::string databasePath = "data/SQLiteTestSuite/test.sqlite";
int insertedElementId = -1;
int foundElementId = -1;
{
SqliteStorage storage(databasePath);
storage.beginTransaction();
insertedElementId = storage.addNameHierarchyElement("a");
storage.commitTransaction();
foundElementId = storage.getNameHierarchyElementIdByName("a");
}
boost::filesystem::remove(databasePath);
TS_ASSERT(foundElementId != -1);
TS_ASSERT_EQUALS(insertedElementId, foundElementId);
}
void test_storage_finds_name_hierarchy_elements_by_name_and_parent_id()
{
std::string databasePath = "data/SQLiteTestSuite/test.sqlite";
int insertedChildElementId = -1;
int foundElementId = -1;
{
SqliteStorage storage(databasePath);
storage.beginTransaction();
int insertedParentElementId = storage.addNameHierarchyElement("a");
insertedChildElementId = storage.addNameHierarchyElement("a", insertedParentElementId);
storage.addNameHierarchyElement("a", storage.addNameHierarchyElement("b"));
storage.commitTransaction();
foundElementId = storage.getNameHierarchyElementIdByName("a", insertedParentElementId);
}
boost::filesystem::remove(databasePath);
TS_ASSERT(foundElementId != -1);
TS_ASSERT_EQUALS(insertedChildElementId, foundElementId);
}
void test_storage_automatically_removes_name_hierarchy_element_child_when_deleting_parent()
{
std::string databasePath = "data/SQLiteTestSuite/test.sqlite";
int elementCount = -1;
{
SqliteStorage storage(databasePath);
storage.beginTransaction();
int parentId = storage.addNameHierarchyElement("a");
storage.removeNameHierarchyElement(parentId);
storage.commitTransaction();
elementCount = storage.getNameHierarchyElementCount();
}
boost::filesystem::remove(databasePath);
TS_ASSERT_EQUALS(0, elementCount);
}
void test_storage_adds_node_successfully()
{
std::string databasePath = "data/SQLiteTestSuite/test.sqlite";
@@ -103,8 +15,7 @@ public:
{
SqliteStorage storage(databasePath);
storage.beginTransaction();
int nameId = storage.addNameHierarchyElement("a");
storage.addNode(0, nameId, false);
storage.addNode(0, "a", false);
storage.commitTransaction();
nodeCount = storage.getNodeCount();
}
@@ -120,8 +31,7 @@ public:
{
SqliteStorage storage(databasePath);
storage.beginTransaction();
int nameId = storage.addNameHierarchyElement("a");
int nodeId = storage.addNode(0, nameId, false);
int nodeId = storage.addNode(0, "a", false);
storage.removeElement(nodeId);
storage.commitTransaction();
nodeCount = storage.getNodeCount();
@@ -138,10 +48,8 @@ public:
{
SqliteStorage storage(databasePath);
storage.beginTransaction();
int sourceNameId = storage.addNameHierarchyElement("a");
int sourceNodeId = storage.addNode(0, sourceNameId, false);
int targetNameId = storage.addNameHierarchyElement("b");
int targetNodeId = storage.addNode(0, targetNameId, false);
int sourceNodeId = storage.addNode(0, "a", false);
int targetNodeId = storage.addNode(0, "b", false);
storage.addEdge(0, sourceNodeId, targetNodeId);
storage.commitTransaction();
edgeCount = storage.getEdgeCount();
@@ -158,10 +66,8 @@ public:
{
SqliteStorage storage(databasePath);
storage.beginTransaction();
int sourceNameId = storage.addNameHierarchyElement("a");
int sourceNodeId = storage.addNode(0, sourceNameId, false);
int targetNameId = storage.addNameHierarchyElement("b");
int targetNodeId = storage.addNode(0, targetNameId, false);
int sourceNodeId = storage.addNode(0, "a", false);
int targetNodeId = storage.addNode(0, "b", false);
int edgeId = storage.addEdge(0, sourceNodeId, targetNodeId);
storage.removeElement(edgeId);
storage.commitTransaction();