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#include "api.h"
8#include "kuzu_fwd.h"
9#include "db_config.h"
10
11namespace kuzu {
12namespace common {
13class FileSystem;
14enum class LogicalTypeID : uint8_t;
15} // namespace common
16
17namespace catalog {
18class CatalogEntry;
19} // namespace catalog
20
21namespace function {
22struct Function;
23} // namespace function
24
25namespace extension {
26struct ExtensionUtils;
27class ExtensionManager;
28} // namespace extension
29
30namespace storage {
31class StorageExtension;
32} // namespace storage
33
34namespace main {
35struct ExtensionOption;
36class DatabaseManager;
37class ClientContext;
38
64 explicit SystemConfig(uint64_t bufferPoolSize = -1u, uint64_t maxNumThreads = 0,
65 bool enableCompression = true, bool readOnly = false, uint64_t maxDBSize = -1u,
66 bool autoCheckpoint = true, uint64_t checkpointThreshold = 16777216 /* 16MB */);
67
69 uint64_t maxNumThreads;
72 uint64_t maxDBSize;
75};
76
80class Database {
81 friend class EmbeddedShell;
82 friend class ClientContext;
83 friend class Connection;
84 friend class StorageDriver;
89
90public:
97 KUZU_API explicit Database(std::string_view databasePath,
98 SystemConfig systemConfig = SystemConfig());
103
104 KUZU_API void registerFileSystem(std::unique_ptr<common::FileSystem> fs);
105
106 KUZU_API void registerStorageExtension(std::string name,
107 std::unique_ptr<storage::StorageExtension> storageExtension);
108
110 common::Value defaultValue, bool isConfidential = false);
111
112 KUZU_API catalog::Catalog* getCatalog() { return catalog.get(); }
113
114 const DBConfig& getConfig() const { return dbConfig; }
115
116 std::vector<storage::StorageExtension*> getStorageExtensions();
117
118 uint64_t getNextQueryID();
119
120private:
121 using construct_bm_func_t =
122 std::function<std::unique_ptr<storage::BufferManager>(const Database&)>;
123
124 struct QueryIDGenerator {
125 uint64_t queryID = 0;
126 std::mutex queryIDLock;
127 };
128
129 static std::unique_ptr<storage::BufferManager> initBufferManager(const Database& db);
130 void initMembers(std::string_view dbPath, construct_bm_func_t initBmFunc = initBufferManager);
131
132 // factory method only to be used for tests
133 Database(std::string_view databasePath, SystemConfig systemConfig,
134 construct_bm_func_t constructBMFunc);
135
136 void openLockFile();
137 void initAndLockDBDir();
138
139private:
140 std::string databasePath;
141 DBConfig dbConfig;
142 std::unique_ptr<common::VirtualFileSystem> vfs;
143 std::unique_ptr<storage::BufferManager> bufferManager;
144 std::unique_ptr<storage::MemoryManager> memoryManager;
145 std::unique_ptr<processor::QueryProcessor> queryProcessor;
146 std::unique_ptr<catalog::Catalog> catalog;
147 std::unique_ptr<storage::StorageManager> storageManager;
148 std::unique_ptr<transaction::TransactionManager> transactionManager;
149 std::unique_ptr<common::FileInfo> lockFile;
150 std::unique_ptr<DatabaseManager> databaseManager;
151 std::unique_ptr<extension::ExtensionManager> extensionManager;
152 QueryIDGenerator queryIDGenerator;
153};
154
155} // namespace main
156} // namespace kuzu
#define KUZU_API
Definition api.h:25
Definition value.h:26
Contain client side configuration. We make profiler associated per query, so profiler is not maintain...
Definition client_context.h:68
Database class is the main class of Kuzu. It manages all database components.
Definition database.h:80
std::vector< storage::StorageExtension * > getStorageExtensions()
friend class testing::PrivateGraphTest
Definition database.h:86
friend class Connection
Definition database.h:83
friend struct extension::ExtensionUtils
Definition database.h:88
KUZU_API void registerStorageExtension(std::string name, std::unique_ptr< storage::StorageExtension > storageExtension)
const DBConfig & getConfig() const
Definition database.h:114
friend class StorageDriver
Definition database.h:84
KUZU_API void addExtensionOption(std::string name, common::LogicalTypeID type, common::Value defaultValue, bool isConfidential=false)
friend class EmbeddedShell
Definition database.h:81
KUZU_API ~Database()
Destructs the database object.
uint64_t getNextQueryID()
friend class testing::BaseGraphTest
Definition database.h:85
KUZU_API Database(std::string_view databasePath, SystemConfig systemConfig=SystemConfig())
Creates a database object.
friend class ClientContext
Definition database.h:82
KUZU_API catalog::Catalog * getCatalog()
Definition database.h:112
KUZU_API void registerFileSystem(std::unique_ptr< common::FileSystem > fs)
Definition transaction_context.h:33
Definition database.h:17
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:42
bool readOnly
Definition database.h:71
uint64_t maxNumThreads
Definition database.h:69
uint64_t checkpointThreshold
Definition database.h:74
bool autoCheckpoint
Definition database.h:73
uint64_t bufferPoolSize
Definition database.h:68
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)
Creates a SystemConfig object.
uint64_t maxDBSize
Definition database.h:72
bool enableCompression
Definition database.h:70