20class StandaloneCallRewriter;
25class ExpressionBinder;
35class ExtensionManager;
40class TableFunctionCall;
51class AttachedKuzuDatabase;
52struct SpillToDiskSetting;
53struct ExtensionOption;
70 friend class binder::Binder;
71 friend class binder::ExpressionBinder;
72 friend class processor::ImportDB;
73 friend class processor::TableFunctionCall;
74 friend class parser::StandaloneCallRewriter;
76 friend class main::EmbeddedShell;
77 friend class extension::ExtensionManager;
90 void interrupt() { activeQuery.interrupted =
true; }
92 bool hasTimeout()
const {
return clientConfig.timeoutInMS != 0; }
112 std::unique_ptr<function::ScanReplacementData>
tryReplace(
const std::string& objectName)
const;
140 return clientConfig.enableInternalCatalog ? true : useInternalCatalogEntry_;
158 std::unordered_map<std::string, std::unique_ptr<common::Value>> inputParams,
159 std::optional<uint64_t> queryID = std::nullopt);
160 std::unique_ptr<QueryResult>
query(std::string_view queryStatement,
161 std::optional<uint64_t> queryID = std::nullopt);
164 struct TransactionHelper {
165 enum class TransactionCommitAction : uint8_t {
171 static bool commitIfNew(TransactionCommitAction action) {
172 return action == TransactionCommitAction::COMMIT_IF_NEW ||
173 action == TransactionCommitAction::COMMIT_NEW_OR_AUTO;
175 static bool commitIfAuto(TransactionCommitAction action) {
176 return action == TransactionCommitAction::COMMIT_IF_AUTO ||
177 action == TransactionCommitAction::COMMIT_NEW_OR_AUTO;
179 static TransactionCommitAction getAction(
bool commitIfNew,
bool commitIfAuto);
180 static void runFuncInTransaction(transaction::TransactionContext& context,
181 const std::function<
void()>& fun,
bool readOnlyStatement,
bool isTransactionStatement,
182 TransactionCommitAction action);
185 static std::unique_ptr<QueryResult> queryResultWithError(std::string_view errMsg);
186 static std::unique_ptr<PreparedStatement> preparedStatementWithError(std::string_view errMsg);
187 static void bindParametersNoLock(
const PreparedStatement* preparedStatement,
188 const std::unordered_map<std::string, std::unique_ptr<common::Value>>& inputParams);
189 void validateTransaction(
const PreparedStatement& preparedStatement)
const;
191 std::vector<std::shared_ptr<parser::Statement>> parseQuery(std::string_view query);
193 std::unique_ptr<PreparedStatement> prepareNoLock(
194 std::shared_ptr<parser::Statement> parsedStatement,
bool shouldCommitNewTransaction,
195 std::optional<std::unordered_map<std::string, std::shared_ptr<common::Value>>> inputParams =
198 template<
typename T,
typename... Args>
199 std::unique_ptr<QueryResult> executeWithParams(PreparedStatement* preparedStatement,
200 std::unordered_map<std::string, std::unique_ptr<common::Value>> params,
201 std::pair<std::string, T> arg, std::pair<std::string, Args>... args) {
202 auto name = arg.first;
203 auto val = std::make_unique<common::Value>((T)arg.second);
204 params.insert({name, std::move(val)});
205 return executeWithParams(preparedStatement, std::move(params), args...);
208 std::unique_ptr<QueryResult> executeNoLock(PreparedStatement* preparedStatement,
209 std::optional<uint64_t> queryID = std::nullopt);
211 std::unique_ptr<QueryResult> queryNoLock(std::string_view query,
212 std::optional<uint64_t> queryID = std::nullopt);
214 bool canExecuteWriteQuery()
const;
216 std::unique_ptr<QueryResult> handleFailedExecution(std::optional<uint64_t> queryID,
217 const std::exception& e)
const;
220 ClientConfig clientConfig;
224 ActiveQuery activeQuery;
226 std::unique_ptr<transaction::TransactionContext> transactionContext;
228 std::vector<function::ScanReplacement> scanReplacements;
230 std::unordered_map<std::string, common::Value> extensionOptionValues;
232 std::unique_ptr<common::RandomEngine> randomEngine;
234 Database* localDatabase;
236 AttachedKuzuDatabase* remoteDatabase;
238 std::unique_ptr<common::ProgressBar> progressBar;
240 processor::WarningContext warningContext;
242 std::unique_ptr<graph::GraphEntrySet> graphEntrySet;
245 bool useInternalCatalogEntry_ =
false;
#define KUZU_API
Definition api.h:25
std::unique_ptr< QueryResult > query(std::string_view queryStatement, std::optional< uint64_t > queryID=std::nullopt)
common::VirtualFileSystem * getVFSUnsafe() const
Database * getDatabase() const
Definition client_context.h:120
ClientConfig * getClientConfigUnsafe()
Definition client_context.h:85
extension::ExtensionManager * getExtensionManager() const
common::Value getCurrentSetting(const std::string &optionName) const
processor::WarningContext & getWarningContextUnsafe()
common::RandomEngine * getRandomEngine() const
void removeScalarFunction(const std::string &name)
storage::StorageManager * getStorageManager() const
common::ProgressBar * getProgressBar() const
void setUseInternalCatalogEntry(bool useInternalCatalogEntry)
Definition client_context.h:136
std::unique_ptr< PreparedStatement > prepare(std::string_view query)
common::TaskScheduler * getTaskScheduler() const
const ClientConfig * getClientConfig() const
Definition client_context.h:84
friend class Connection
Definition client_context.h:69
uint64_t getMaxNumThreadForExec() const
void setMaxNumThreadForExec(uint64_t numThreads)
uint64_t getTimeoutRemainingInMS() const
catalog::Catalog * getCatalog() const
uint64_t getQueryTimeOut() const
transaction::Transaction * getTransaction() const
bool useInternalCatalogEntry() const
Definition client_context.h:139
DBConfig * getDBConfigUnsafe()
Definition client_context.h:87
void addScalarFunction(std::string name, function::function_set definitions)
std::string getDatabasePath() const
bool interrupted() const
Definition client_context.h:91
bool hasDefaultDatabase() const
void addScanReplace(function::ScanReplacement scanReplacement)
void interrupt()
Definition client_context.h:90
const DBConfig * getDBConfig() const
Definition client_context.h:86
std::unique_ptr< function::ScanReplacementData > tryReplace(const std::string &objectName) const
friend struct SpillToDiskSetting
Definition client_context.h:75
std::unique_ptr< QueryResult > executeWithParams(PreparedStatement *preparedStatement, std::unordered_map< std::string, std::unique_ptr< common::Value > > inputParams, std::optional< uint64_t > queryID=std::nullopt)
const graph::GraphEntrySet & getGraphEntrySet() const
const processor::WarningContext & getWarningContext() const
void setDefaultDatabase(AttachedKuzuDatabase *defaultDatabase_)
void setQueryTimeOut(uint64_t timeoutInMS)
static std::string getEnvVariable(const std::string &name)
transaction::TransactionContext * getTransactionContext() const
storage::MemoryManager * getMemoryManager() const
DatabaseManager * getDatabaseManager() const
storage::WAL * getWAL() const
std::string getExtensionDir() const
transaction::TransactionManager * getTransactionManagerUnsafe() const
void resetActiveQuery()
Definition client_context.h:97
ClientContext(Database *database)
graph::GraphEntrySet & getGraphEntrySetUnsafe()
void setExtensionOption(std::string name, common::Value value)
bool hasTimeout() const
Definition client_context.h:92
const main::ExtensionOption * getExtensionOption(std::string optionName) const
Database class is the main class of Kuzu. It manages all database components.
Definition database.h:80
A prepared statement is a parameterized query which can avoid planning the same query for repeated ex...
Definition prepared_statement.h:19
Definition warning_context.h:35
Definition transaction_context.h:33
Definition transaction.h:76
Definition bind_input.h:12
Definition client_context.h:34
std::vector< std::unique_ptr< Function > > function_set
Definition function.h:44
Definition client_context.h:43
Definition bind_input.h:16
Definition client_context.h:19
Definition client_context.h:38
Definition array_utils.h:7
Definition scan_replacement.h:16
std::atomic< bool > interrupted
Definition client_context.h:58
common::Timer timer
Definition client_context.h:59
Definition client_config.h:27
Definition db_config.h:57
Definition db_config.h:48