diff --git a/src/include/watcher.hpp b/src/include/watcher.hpp index bd178a1..33e12d6 100644 --- a/src/include/watcher.hpp +++ b/src/include/watcher.hpp @@ -26,6 +26,7 @@ private: std::condition_variable cv; std::atomic should_run; HttpServer &server; + DatabaseInstance *watched_database; }; } // namespace ui } // namespace duckdb diff --git a/src/watcher.cpp b/src/watcher.cpp index ef98a37..1fa53c0 100644 --- a/src/watcher.cpp +++ b/src/watcher.cpp @@ -9,7 +9,8 @@ namespace duckdb { namespace ui { -Watcher::Watcher(HttpServer &_server) : should_run(false), server(_server) {} +Watcher::Watcher(HttpServer &_server) + : should_run(false), server(_server), watched_database(nullptr) {} bool WasCatalogUpdated(DatabaseInstance &db, Connection &connection, CatalogState &last_state) { @@ -62,6 +63,12 @@ void Watcher::Watch() { break; // DB went away, nothing to watch } + if (watched_database == nullptr) { + watched_database = db.get(); + } else if (watched_database != db.get()) { + break; // DB changed, stop watching, will be restarted + } + duckdb::Connection con{*db}; auto polling_interval = GetPollingInterval(*con.context); if (polling_interval == 0) {