Kuzu 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 "kuzu_fwd.h"
14#include "db_config.h"
15namespace kuzu {
16namespace common {
17class FileSystem;
18enum class LogicalTypeID : uint8_t;
19} // namespace common
20
21namespace catalog {
22class CatalogEntry;
23} // namespace catalog
24
25namespace function {
26struct Function;
27} // namespace function
28
29namespace extension {
30struct ExtensionUtils;
31class ExtensionManager;
32class TransformerExtension;
33class BinderExtension;
34class PlannerExtension;
35class MapperExtension;
36} // namespace extension
37
38namespace storage {
39class StorageExtension;
40} // namespace storage
41
42namespace main {
43struct ExtensionOption;
44class DatabaseManager;
45
72 explicit SystemConfig(uint64_t bufferPoolSize = -1u, uint64_t maxNumThreads = 0,
73 bool enableCompression = true, bool readOnly = false, uint64_t maxDBSize = -1u,
74 bool autoCheckpoint = true, uint64_t checkpointThreshold = 16777216 /* 16MB */,
75 bool forceCheckpointOnClose = true
76#if defined(__APPLE__)
77 ,
78 uint32_t threadQos = QOS_CLASS_DEFAULT
79#endif
80 );
81
83 uint64_t maxNumThreads;
86 uint64_t maxDBSize;
90#if defined(__APPLE__)
91 uint32_t threadQos;
92#endif
93};
94
98class Database {
99 friend class EmbeddedShell;
100 friend class ClientContext;
101 friend class Connection;
102 friend class StorageDriver;
107
108public:
115 KUZU_API explicit Database(std::string_view databasePath,
116 SystemConfig systemConfig = SystemConfig());
121
122 KUZU_API void registerFileSystem(std::unique_ptr<common::FileSystem> fs);
123
124 KUZU_API void registerStorageExtension(std::string name,
125 std::unique_ptr<storage::StorageExtension> storageExtension);
126
128 common::Value defaultValue, bool isConfidential = false);
129
131 std::unique_ptr<extension::TransformerExtension> transformerExtension);
132
133 std::vector<extension::TransformerExtension*> getTransformerExtensions();
134
136 std::unique_ptr<extension::BinderExtension> transformerExtension);
137
138 std::vector<extension::BinderExtension*> getBinderExtensions();
139
141 std::unique_ptr<extension::PlannerExtension> plannerExtension);
142
143 std::vector<extension::PlannerExtension*> getPlannerExtensions();
144
145 KUZU_API void addMapperExtension(std::unique_ptr<extension::MapperExtension> mapperExtension);
146
147 std::vector<extension::MapperExtension*> getMapperExtensions();
148
149 KUZU_API catalog::Catalog* getCatalog() { return catalog.get(); }
150
151 const DBConfig& getConfig() const { return dbConfig; }
152
153 std::vector<storage::StorageExtension*> getStorageExtensions();
154
155 uint64_t getNextQueryID();
156
157private:
158 using construct_bm_func_t =
159 std::function<std::unique_ptr<storage::BufferManager>(const Database&)>;
160
161 struct QueryIDGenerator {
162 uint64_t queryID = 0;
163 std::mutex queryIDLock;
164 };
165
166 static std::unique_ptr<storage::BufferManager> initBufferManager(const Database& db);
167 void initMembers(std::string_view dbPath, construct_bm_func_t initBmFunc = initBufferManager);
168
169 // factory method only to be used for tests
170 Database(std::string_view databasePath, SystemConfig systemConfig,
171 construct_bm_func_t constructBMFunc);
172
173 void validatePathInReadOnly() const;
174
175private:
176 std::string databasePath;
177 DBConfig dbConfig;
178 std::unique_ptr<common::VirtualFileSystem> vfs;
179 std::unique_ptr<storage::BufferManager> bufferManager;
180 std::unique_ptr<storage::MemoryManager> memoryManager;
181 std::unique_ptr<processor::QueryProcessor> queryProcessor;
182 std::unique_ptr<catalog::Catalog> catalog;
183 std::unique_ptr<storage::StorageManager> storageManager;
184 std::unique_ptr<transaction::TransactionManager> transactionManager;
185 std::unique_ptr<common::FileInfo> lockFile;
186 std::unique_ptr<DatabaseManager> databaseManager;
187 std::unique_ptr<extension::ExtensionManager> extensionManager;
188 QueryIDGenerator queryIDGenerator;
189 std::shared_ptr<common::DatabaseLifeCycleManager> dbLifeCycleManager;
190 std::vector<std::unique_ptr<extension::TransformerExtension>> transformerExtensions;
191 std::vector<std::unique_ptr<extension::BinderExtension>> binderExtensions;
192 std::vector<std::unique_ptr<extension::PlannerExtension>> plannerExtensions;
193 std::vector<std::unique_ptr<extension::MapperExtension>> mapperExtensions;
194};
195
196} // namespace main
197} // namespace kuzu
#define KUZU_API
Definition api.h:25
Definition value.h:26
Database class is the main class of Kuzu. It manages all database components.
Definition database.h:98
KUZU_API void addPlannerExtension(std::unique_ptr< extension::PlannerExtension > plannerExtension)
std::vector< extension::TransformerExtension * > getTransformerExtensions()
std::vector< extension::BinderExtension * > getBinderExtensions()
std::vector< storage::StorageExtension * > getStorageExtensions()
friend class testing::PrivateGraphTest
Definition database.h:104
KUZU_API void addTransformerExtension(std::unique_ptr< extension::TransformerExtension > transformerExtension)
friend class Connection
Definition database.h:101
friend struct extension::ExtensionUtils
Definition database.h:106
KUZU_API void registerStorageExtension(std::string name, std::unique_ptr< storage::StorageExtension > storageExtension)
const DBConfig & getConfig() const
Definition database.h:151
friend class StorageDriver
Definition database.h:102
KUZU_API void addExtensionOption(std::string name, common::LogicalTypeID type, common::Value defaultValue, bool isConfidential=false)
friend class EmbeddedShell
Definition database.h:99
KUZU_API ~Database()
Destructs the database object.
uint64_t getNextQueryID()
std::vector< extension::PlannerExtension * > getPlannerExtensions()
KUZU_API void addMapperExtension(std::unique_ptr< extension::MapperExtension > mapperExtension)
std::vector< extension::MapperExtension * > getMapperExtensions()
friend class testing::BaseGraphTest
Definition database.h:103
KUZU_API Database(std::string_view databasePath, SystemConfig systemConfig=SystemConfig())
Creates a database object.
friend class ClientContext
Definition database.h:100
KUZU_API catalog::Catalog * getCatalog()
Definition database.h:149
KUZU_API void addBinderExtension(std::unique_ptr< extension::BinderExtension > transformerExtension)
KUZU_API void registerFileSystem(std::unique_ptr< common::FileSystem > fs)
Definition transaction_context.h:33
Definition database.h:21
Definition array_utils.h:7
LogicalTypeID
Definition types.h:177
Definition binary_function_executor.h:6
Definition bind_input.h:16
Definition copy_from_error.h:17
Definition array_utils.h:7
Definition db_config.h:57
Definition db_config.h:48
Stores runtime configuration for creating or opening a Database.
Definition database.h:49
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)
Creates a SystemConfig object.
bool readOnly
Definition database.h:85
uint64_t maxNumThreads
Definition database.h:83
bool forceCheckpointOnClose
Definition database.h:89
uint64_t checkpointThreshold
Definition database.h:88
bool autoCheckpoint
Definition database.h:87
uint64_t bufferPoolSize
Definition database.h:82
uint64_t maxDBSize
Definition database.h:86
bool enableCompression
Definition database.h:84