//===----------------------------------------------------------------------===// // DuckDB // // duckdb/main/database.hpp // // //===----------------------------------------------------------------------===// #pragma once #include "duckdb/main/config.hpp" #include "duckdb/main/valid_checker.hpp" #include "duckdb/common/winapi.hpp" #include "duckdb/main/extension.hpp" namespace duckdb { class BufferManager; class DatabaseManager; class StorageManager; class Catalog; class TransactionManager; class ConnectionManager; class FileSystem; class TaskScheduler; class ObjectCache; struct AttachInfo; class DatabaseInstance : public std::enable_shared_from_this { friend class DuckDB; public: DUCKDB_API DatabaseInstance(); DUCKDB_API ~DatabaseInstance(); DBConfig config; public: BufferPool &GetBufferPool(); DUCKDB_API BufferManager &GetBufferManager(); DUCKDB_API DatabaseManager &GetDatabaseManager(); DUCKDB_API FileSystem &GetFileSystem(); DUCKDB_API TaskScheduler &GetScheduler(); DUCKDB_API ObjectCache &GetObjectCache(); DUCKDB_API ConnectionManager &GetConnectionManager(); DUCKDB_API ValidChecker &GetValidChecker(); DUCKDB_API void SetExtensionLoaded(const std::string &extension_name); idx_t NumberOfThreads(); DUCKDB_API static DatabaseInstance &GetDatabase(ClientContext &context); DUCKDB_API const unordered_set &LoadedExtensions(); DUCKDB_API bool ExtensionIsLoaded(const std::string &name); DUCKDB_API bool TryGetCurrentSetting(const std::string &key, Value &result); unique_ptr CreateAttachedDatabase(AttachInfo &info, const string &type, AccessMode access_mode); private: void Initialize(const char *path, DBConfig *config); void CreateMainDatabase(); void Configure(DBConfig &config); private: unique_ptr buffer_manager; unique_ptr db_manager; unique_ptr scheduler; unique_ptr object_cache; unique_ptr connection_manager; unordered_set loaded_extensions; ValidChecker db_validity; }; //! The database object. This object holds the catalog and all the //! database-specific meta information. class DuckDB { public: DUCKDB_API explicit DuckDB(const char *path = nullptr, DBConfig *config = nullptr); DUCKDB_API explicit DuckDB(const string &path, DBConfig *config = nullptr); DUCKDB_API explicit DuckDB(DatabaseInstance &instance); DUCKDB_API ~DuckDB(); //! Reference to the actual database instance shared_ptr instance; public: template void LoadExtension() { T extension; if (ExtensionIsLoaded(extension.Name())) { return; } extension.Load(*this); instance->SetExtensionLoaded(extension.Name()); } DUCKDB_API FileSystem &GetFileSystem(); DUCKDB_API idx_t NumberOfThreads(); DUCKDB_API static const char *SourceID(); DUCKDB_API static const char *LibraryVersion(); DUCKDB_API static idx_t StandardVectorSize(); DUCKDB_API static string Platform(); DUCKDB_API bool ExtensionIsLoaded(const std::string &name); }; } // namespace duckdb