Lbug C++ API
Loading...
Searching...
No Matches
database.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4#include <mutex>
5#include <vector>
6
7#if defined(__APPLE__)
8#include <pthread/qos.h>
9#endif
10
11#include "api.h"
13#include "lbug_fwd.h"
14#include "db_config.h"
15
16namespace lbug {
17namespace common {
18class FileSystem;
19} // namespace common
20
21namespace extension {
22class ExtensionManager;
23class TransformerExtension;
24class BinderExtension;
25class PlannerExtension;
26class MapperExtension;
27} // namespace extension
28
29namespace storage {
30class StorageExtension;
31} // namespace storage
32
33namespace main {
34class DatabaseManager;
66 explicit SystemConfig(uint64_t bufferPoolSize = -1u, uint64_t maxNumThreads = 0,
67 bool enableCompression = true, bool readOnly = false, uint64_t maxDBSize = -1u,
68 bool autoCheckpoint = true, uint64_t checkpointThreshold = 16777216 /* 16MB */,
69 bool forceCheckpointOnClose = true, bool throwOnWalReplayFailure = true,
70 bool enableChecksums = true
71#if defined(__APPLE__)
72 ,
73 uint32_t threadQos = QOS_CLASS_DEFAULT
74#endif
75 );
76
78 uint64_t maxNumThreads;
81 uint64_t maxDBSize;
87#if defined(__APPLE__)
88 uint32_t threadQos;
89#endif
90};
91
95class Database {
96 friend class EmbeddedShell;
97 friend class ClientContext;
98 friend class Connection;
100
101public:
108 LBUG_API explicit Database(std::string_view databasePath,
109 SystemConfig systemConfig = SystemConfig());
114
115 LBUG_API void registerFileSystem(std::unique_ptr<common::FileSystem> fs);
116
117 LBUG_API void registerStorageExtension(std::string name,
118 std::unique_ptr<storage::StorageExtension> storageExtension);
119
121 common::Value defaultValue, bool isConfidential = false);
122
124 std::unique_ptr<extension::TransformerExtension> transformerExtension);
125
126 std::vector<extension::TransformerExtension*> getTransformerExtensions();
127
129 std::unique_ptr<extension::BinderExtension> transformerExtension);
130
131 std::vector<extension::BinderExtension*> getBinderExtensions();
132
134 std::unique_ptr<extension::PlannerExtension> plannerExtension);
135
136 std::vector<extension::PlannerExtension*> getPlannerExtensions();
137
138 LBUG_API void addMapperExtension(std::unique_ptr<extension::MapperExtension> mapperExtension);
139
140 std::vector<extension::MapperExtension*> getMapperExtensions();
141
142 catalog::Catalog* getCatalog() { return catalog.get(); }
143
144 const DBConfig& getConfig() const { return dbConfig; }
145
146 std::vector<storage::StorageExtension*> getStorageExtensions();
147
148 uint64_t getNextQueryID();
149
150 storage::StorageManager* getStorageManager() { return storageManager.get(); }
151
152 transaction::TransactionManager* getTransactionManager() { return transactionManager.get(); }
153
154 DatabaseManager* getDatabaseManager() { return databaseManager.get(); }
155
156 storage::MemoryManager* getMemoryManager() { return memoryManager.get(); }
157
158 processor::QueryProcessor* getQueryProcessor() { return queryProcessor.get(); }
159
160 extension::ExtensionManager* getExtensionManager() { return extensionManager.get(); }
161
162 common::VirtualFileSystem* getVFS() { return vfs.get(); }
163
164private:
165 using construct_bm_func_t =
166 std::function<std::unique_ptr<storage::BufferManager>(const Database&)>;
167
168 struct QueryIDGenerator {
169 uint64_t queryID = 0;
170 std::mutex queryIDLock;
171 };
172
173 static std::unique_ptr<storage::BufferManager> initBufferManager(const Database& db);
174 void initMembers(std::string_view dbPath, construct_bm_func_t initBmFunc);
175
176 // factory method only to be used for tests
177 Database(std::string_view databasePath, SystemConfig systemConfig,
178 construct_bm_func_t constructBMFunc);
179
180 void validatePathInReadOnly() const;
181
182private:
183 std::string databasePath;
184 DBConfig dbConfig;
185 std::unique_ptr<common::VirtualFileSystem> vfs;
186 std::unique_ptr<storage::BufferManager> bufferManager;
187 std::unique_ptr<storage::MemoryManager> memoryManager;
188 std::unique_ptr<processor::QueryProcessor> queryProcessor;
189 std::unique_ptr<catalog::Catalog> catalog;
190 std::unique_ptr<storage::StorageManager> storageManager;
191 std::unique_ptr<transaction::TransactionManager> transactionManager;
192 std::unique_ptr<common::FileInfo> lockFile;
193 std::unique_ptr<DatabaseManager> databaseManager;
194 std::unique_ptr<extension::ExtensionManager> extensionManager;
195 QueryIDGenerator queryIDGenerator;
196 std::shared_ptr<common::DatabaseLifeCycleManager> dbLifeCycleManager;
197 std::vector<std::unique_ptr<extension::TransformerExtension>> transformerExtensions;
198 std::vector<std::unique_ptr<extension::BinderExtension>> binderExtensions;
199 std::vector<std::unique_ptr<extension::PlannerExtension>> plannerExtensions;
200 std::vector<std::unique_ptr<extension::MapperExtension>> mapperExtensions;
201};
202
203} // namespace main
204} // namespace lbug
#define LBUG_API
Definition api.h:25
Definition value.h:28
Database class is the main class of Lbug. It manages all database components.
Definition database.h:95
LBUG_API void addMapperExtension(std::unique_ptr< extension::MapperExtension > mapperExtension)
LBUG_API void addBinderExtension(std::unique_ptr< extension::BinderExtension > transformerExtension)
storage::MemoryManager * getMemoryManager()
Definition database.h:156
processor::QueryProcessor * getQueryProcessor()
Definition database.h:158
std::vector< extension::PlannerExtension * > getPlannerExtensions()
transaction::TransactionManager * getTransactionManager()
Definition database.h:152
LBUG_API ~Database()
Destructs the database object.
std::vector< extension::BinderExtension * > getBinderExtensions()
uint64_t getNextQueryID()
LBUG_API void registerStorageExtension(std::string name, std::unique_ptr< storage::StorageExtension > storageExtension)
DatabaseManager * getDatabaseManager()
Definition database.h:154
extension::ExtensionManager * getExtensionManager()
Definition database.h:160
catalog::Catalog * getCatalog()
Definition database.h:142
friend class Connection
Definition database.h:98
LBUG_API void addExtensionOption(std::string name, common::LogicalTypeID type, common::Value defaultValue, bool isConfidential=false)
std::vector< storage::StorageExtension * > getStorageExtensions()
LBUG_API void registerFileSystem(std::unique_ptr< common::FileSystem > fs)
storage::StorageManager * getStorageManager()
Definition database.h:150
friend class EmbeddedShell
Definition database.h:96
LBUG_API void addTransformerExtension(std::unique_ptr< extension::TransformerExtension > transformerExtension)
std::vector< extension::MapperExtension * > getMapperExtensions()
common::VirtualFileSystem * getVFS()
Definition database.h:162
LBUG_API void addPlannerExtension(std::unique_ptr< extension::PlannerExtension > plannerExtension)
friend class testing::BaseGraphTest
Definition database.h:99
friend class ClientContext
Definition database.h:97
const DBConfig & getConfig() const
Definition database.h:144
LBUG_API Database(std::string_view databasePath, SystemConfig systemConfig=SystemConfig())
Creates a database object.
std::vector< extension::TransformerExtension * > getTransformerExtensions()
Definition client_context.h:25
Definition array_utils.h:7
LogicalTypeID
Definition types.h:184
Definition client_context.h:29
Definition bind_input.h:16
Definition client_context.h:37
Definition array_utils.h:7
Definition db_config.h:56
Stores runtime configuration for creating or opening a Database.
Definition database.h:38
bool autoCheckpoint
Definition database.h:82
uint64_t maxDBSize
Definition database.h:81
bool readOnly
Definition database.h:80
bool enableCompression
Definition database.h:79
uint64_t maxNumThreads
Definition database.h:78
uint64_t bufferPoolSize
Definition database.h:77
uint64_t checkpointThreshold
Definition database.h:83
SystemConfig(uint64_t bufferPoolSize=-1u, uint64_t maxNumThreads=0, bool enableCompression=true, bool readOnly=false, uint64_t maxDBSize=-1u, bool autoCheckpoint=true, uint64_t checkpointThreshold=16777216, bool forceCheckpointOnClose=true, bool throwOnWalReplayFailure=true, bool enableChecksums=true)
Creates a SystemConfig object.
bool throwOnWalReplayFailure
Definition database.h:85
bool enableChecksums
Definition database.h:86
bool forceCheckpointOnClose
Definition database.h:84