diff --git a/core/include/DatabaseStorage.h b/core/include/DatabaseStorage.h index b67d9f7..b228cd1 100644 --- a/core/include/DatabaseStorage.h +++ b/core/include/DatabaseStorage.h @@ -81,8 +81,10 @@ namespace sourcetrail DatabaseStorage() = default; void setupTables(); + void clearTables(); void setupIndices(); void setupPrecompiledStatements(); + void clearPrecompiledStatements(); int insertElement(); void insertOrUpdateMetaValue(const std::string& key, const std::string& value); diff --git a/core/src/DatabaseStorage.cpp b/core/src/DatabaseStorage.cpp index e9063d7..af66c29 100644 --- a/core/src/DatabaseStorage.cpp +++ b/core/src/DatabaseStorage.cpp @@ -52,25 +52,7 @@ namespace sourcetrail DatabaseStorage::~DatabaseStorage() { - m_insertElementStatement.finalize(); - m_findNodeStatement.finalize(); - m_insertNodeStatement.finalize(); - m_setNodeTypeStmt.finalize(); - m_insertSymbolStatement.finalize(); - m_findFileStatement.finalize(); - m_insertFileStatement.finalize(); - m_setFileLanguageStmt.finalize(); - m_insertFileContentStatement.finalize(); - m_findEdgeStatement.finalize(); - m_insertEdgeStatement.finalize(); - m_findLocalSymbolStmt.finalize(); - m_insertLocalSymbolStmt.finalize(); - m_findSourceLocationStmt.finalize(); - m_insertSourceLocationStmt.finalize(); - m_insertOccurenceStmt.finalize(); - m_findErrorStatement.finalize(); - m_insertErrorStatement.finalize(); - m_insertOrUpdateMetaValueStmt.finalize(); + clearPrecompiledStatements(); m_database.close(); } @@ -97,25 +79,9 @@ namespace sourcetrail { executeStatement("PRAGMA foreign_keys=OFF;"); - const std::vector tableNames = { - "meta", - "error", - "component_access", - "occurrence", - "source_location", - "local_symbol", - "filecontent", - "file", - "symbol", - "node", - "edge", - "element" - }; + clearPrecompiledStatements(); - for (const std::string& tableName : tableNames) - { - executeStatement("DROP TABLE IF EXISTS main." + tableName + ";"); - } + clearTables(); setupDatabase(); } @@ -533,6 +499,29 @@ namespace sourcetrail ); } + void DatabaseStorage::clearTables() + { + const std::vector tableNames = { + "meta", + "error", + "component_access", + "occurrence", + "source_location", + "local_symbol", + "filecontent", + "file", + "symbol", + "node", + "edge", + "element" + }; + + for (const std::string& tableName : tableNames) + { + executeStatement("DROP TABLE IF EXISTS main." + tableName + ";"); + } + } + void DatabaseStorage::setupIndices() { executeStatement( @@ -651,6 +640,29 @@ namespace sourcetrail ); } + void DatabaseStorage::clearPrecompiledStatements() + { + m_insertElementStatement.finalize(); + m_findNodeStatement.finalize(); + m_insertNodeStatement.finalize(); + m_setNodeTypeStmt.finalize(); + m_insertSymbolStatement.finalize(); + m_findFileStatement.finalize(); + m_insertFileStatement.finalize(); + m_setFileLanguageStmt.finalize(); + m_insertFileContentStatement.finalize(); + m_findEdgeStatement.finalize(); + m_insertEdgeStatement.finalize(); + m_findLocalSymbolStmt.finalize(); + m_insertLocalSymbolStmt.finalize(); + m_findSourceLocationStmt.finalize(); + m_insertSourceLocationStmt.finalize(); + m_insertOccurenceStmt.finalize(); + m_findErrorStatement.finalize(); + m_insertErrorStatement.finalize(); + m_insertOrUpdateMetaValueStmt.finalize(); + } + int DatabaseStorage::insertElement() { executeStatement(m_insertElementStatement); diff --git a/examples/cpp_api_example/CMakeLists.txt b/examples/cpp_api_example/CMakeLists.txt index d6c921f..7591b87 100644 --- a/examples/cpp_api_example/CMakeLists.txt +++ b/examples/cpp_api_example/CMakeLists.txt @@ -17,7 +17,7 @@ target_include_directories(${EXAMPLE_NAME} PUBLIC "${CORE_SOURCE_DIR}/include" ) -target_link_libraries(${EXAMPLE_NAME} ${LIB_CORE}) +target_link_libraries(${EXAMPLE_NAME} ${LIB_CORE} "-ldl") # --- Configure Sourcetrail Project File --- diff --git a/examples/cpp_poetry_indexer/CMakeLists.txt b/examples/cpp_poetry_indexer/CMakeLists.txt index 7faa81b..76ce879 100644 --- a/examples/cpp_poetry_indexer/CMakeLists.txt +++ b/examples/cpp_poetry_indexer/CMakeLists.txt @@ -17,7 +17,7 @@ target_include_directories(${EXAMPLE_NAME} PUBLIC "${CORE_SOURCE_DIR}/include" ) -target_link_libraries(${EXAMPLE_NAME} ${LIB_CORE}) +target_link_libraries(${EXAMPLE_NAME} ${LIB_CORE} "-ldl") # --- Configure Sourcetrail Project File ---