22class VirtualFileSystem;
30class ExtensionManager;
47class TransactionContext;
55class AttachedLbugDatabase;
56struct SpillToDiskSetting;
57struct ExtensionOption;
76 friend class processor::ImportDB;
77 friend class processor::WarningContext;
78 friend class transaction::TransactionContext;
79 friend class common::RandomEngine;
80 friend class common::ProgressBar;
81 friend class graph::GraphEntrySet;
97 void interrupt() { activeQuery.interrupted =
true; }
99 bool hasTimeout()
const {
return clientConfig.timeoutInMS != 0; }
113 const std::string& objectName)
const;
128 return cachedPreparedStatementManager;
142 return clientConfig.enableInternalCatalog ? true : useInternalCatalogEntry_;
159 std::unique_ptr<QueryResult>
query(std::string_view queryStatement,
160 std::optional<uint64_t> queryID = std::nullopt,
QueryConfig config = {});
162 std::unordered_map<std::string, std::unique_ptr<common::Value>> inputParams = {});
164 std::unordered_map<std::string, std::unique_ptr<common::Value>> inputParams,
165 std::optional<uint64_t> queryID = std::nullopt);
184 const std::function<
void()>& fun,
bool readOnlyStatement,
bool isTransactionStatement,
189 void validateTransaction(
bool readOnly,
bool requireTransaction)
const;
191 std::vector<std::shared_ptr<parser::Statement>> parseQuery(std::string_view
query);
193 struct PrepareResult {
194 std::unique_ptr<PreparedStatement> preparedStatement;
195 std::unique_ptr<CachedPreparedStatement> cachedPreparedStatement;
198 PrepareResult prepareNoLock(std::shared_ptr<parser::Statement> parsedStatement,
199 bool shouldCommitNewTransaction,
200 std::unordered_map<std::string, std::shared_ptr<common::Value>> inputParams = {});
202 template<
typename T,
typename... Args>
203 std::unique_ptr<QueryResult> executeWithParams(PreparedStatement* preparedStatement,
204 std::unordered_map<std::string, std::unique_ptr<common::Value>> params,
205 std::pair<std::string, T> arg, std::pair<std::string, Args>... args) {
206 auto name = arg.first;
207 auto val = std::make_unique<common::Value>((T)arg.second);
208 params.insert({name, std::move(val)});
209 return executeWithParams(preparedStatement, std::move(params), args...);
212 std::unique_ptr<QueryResult> executeNoLock(PreparedStatement* preparedStatement,
213 CachedPreparedStatement* cachedPreparedStatement,
214 std::optional<uint64_t> queryID = std::nullopt, QueryConfig config = {});
215 std::unique_ptr<QueryResult> queryNoLock(std::string_view query,
216 std::optional<uint64_t> queryID = std::nullopt, QueryConfig config = {});
218 bool canExecuteWriteQuery()
const;
220 std::unique_ptr<QueryResult> handleFailedExecution(std::optional<uint64_t> queryID,
221 const std::exception& e)
const;
225 ClientConfig clientConfig;
227 ActiveQuery activeQuery;
229 CachedPreparedStatementManager cachedPreparedStatementManager;
231 std::unique_ptr<transaction::TransactionContext> transactionContext;
233 std::vector<function::ScanReplacement> scanReplacements;
235 std::unordered_map<std::string, common::Value> extensionOptionValues;
237 std::unique_ptr<common::RandomEngine> randomEngine;
239 Database* localDatabase;
241 AttachedLbugDatabase* remoteDatabase;
243 std::unique_ptr<common::ProgressBar> progressBar;
245 std::unique_ptr<processor::WarningContext> warningContext;
247 std::unique_ptr<graph::GraphEntrySet> graphEntrySet;
249 bool useInternalCatalogEntry_ =
false;
252 bool preventTransactionRollbackOnDestruction =
false;
#define LBUG_API
Definition api.h:25
Definition prepared_statement_manager.h:12
void removeScalarFunction(const std::string &name)
const CachedPreparedStatementManager & getCachedPreparedStatementManager() const
Definition client_context.h:127
void interrupt()
Definition client_context.h:97
Database * getDatabase() const
std::string getDatabasePath() const
const DBConfig * getDBConfig() const
static std::string getEnvVariable(const std::string &name)
void setUseInternalCatalogEntry(bool useInternalCatalogEntry)
Definition client_context.h:138
std::unique_ptr< PreparedStatement > prepareWithParams(std::string_view query, std::unordered_map< std::string, std::unique_ptr< common::Value > > inputParams={})
common::Value getCurrentSetting(const std::string &optionName) const
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)
std::unique_ptr< function::ScanReplacementData > tryReplaceByHandle(function::scan_replace_handle_t handle) const
bool hasDefaultDatabase() const
const ExtensionOption * getExtensionOption(std::string optionName) const
friend class Connection
Definition client_context.h:73
uint64_t getMaxNumThreadForExec() const
void addScalarFunction(std::string name, function::function_set definitions)
bool useInternalCatalogEntry() const
Definition client_context.h:141
void setQueryTimeOut(uint64_t timeoutInMS)
void resetActiveQuery()
Definition client_context.h:104
ClientContext(Database *database)
uint64_t getQueryTimeOut() const
std::unique_ptr< QueryResult > query(std::string_view queryStatement, std::optional< uint64_t > queryID=std::nullopt, QueryConfig config={})
bool hasTimeout() const
Definition client_context.h:99
friend class EmbeddedShell
Definition client_context.h:74
void addScanReplace(function::ScanReplacement scanReplacement)
const ClientConfig * getClientConfig() const
Definition client_context.h:88
friend struct SpillToDiskSetting
Definition client_context.h:75
bool interrupted() const
Definition client_context.h:98
void setMaxNumThreadForExec(uint64_t numThreads)
DBConfig * getDBConfigUnsafe() const
void setExtensionOption(std::string name, common::Value value)
ClientConfig * getClientConfigUnsafe()
Definition client_context.h:89
AttachedLbugDatabase * getAttachedDatabase() const
std::string getExtensionDir() const
void setDefaultDatabase(AttachedLbugDatabase *defaultDatabase_)
std::unique_ptr< function::ScanReplacementData > tryReplaceByName(const std::string &objectName) const
uint64_t getTimeoutRemainingInMS() const
static std::string getUserHomeDir()
Database class is the main class of Lbug. It manages all database components.
Definition database.h:95
A prepared statement is a parameterized query which can avoid planning the same query for repeated ex...
Definition prepared_statement.h:46
Definition client_context.h:25
Definition array_utils.h:7
Definition client_context.h:29
uint8_t * scan_replace_handle_t
Definition scan_replacement.h:14
std::vector< std::unique_ptr< Function > > function_set
Definition function.h:44
Definition client_context.h:33
Definition bind_input.h:16
QueryResultType
Definition query_result.h:17
@ FTABLE
Definition query_result.h:18
Definition client_context.h:41
Definition client_context.h:37
Definition client_context.h:46
Definition array_utils.h:7
Definition arrow_result_config.h:8
Definition scan_replacement.h:19
common::Timer timer
Definition client_context.h:63
std::atomic< bool > interrupted
Definition client_context.h:62
Definition client_config.h:28
Definition client_context.h:150
QueryResultType resultType
Definition client_context.h:151
common::ArrowResultConfig arrowConfig
Definition client_context.h:152
QueryConfig()
Definition client_context.h:154
QueryConfig(QueryResultType resultType, common::ArrowResultConfig arrowConfig)
Definition client_context.h:155
Definition client_context.h:167
static TransactionCommitAction getAction(bool commitIfNew, bool commitIfAuto)
TransactionCommitAction
Definition client_context.h:168
@ COMMIT_IF_NEW
Definition client_context.h:169
@ COMMIT_NEW_OR_AUTO
Definition client_context.h:171
@ COMMIT_IF_AUTO
Definition client_context.h:170
@ NOT_COMMIT
Definition client_context.h:172
static void runFuncInTransaction(transaction::TransactionContext &context, const std::function< void()> &fun, bool readOnlyStatement, bool isTransactionStatement, TransactionCommitAction action)
static bool commitIfNew(TransactionCommitAction action)
Definition client_context.h:174
static bool commitIfAuto(TransactionCommitAction action)
Definition client_context.h:178
Definition db_config.h:56
Definition db_config.h:47