Database System 0.1.0
Advanced C++20 Database System with Multi-Backend Support
Loading...
Searching...
No Matches
database::integrated::transaction_impl Class Reference
Inheritance diagram for database::integrated::transaction_impl:
Inheritance graph
Collaboration diagram for database::integrated::transaction_impl:
Collaboration graph

Public Member Functions

 transaction_impl (std::shared_ptr< core::database_backend > backend)
 
 ~transaction_impl () override
 
kcenon::common::Result< query_resultexecute (const std::string &query, const std::vector< query_param > &params) override
 Execute a query within the transaction.
 
kcenon::common::VoidResult commit () override
 Commit the transaction.
 
kcenon::common::VoidResult rollback () override
 Rollback the transaction.
 
bool is_active () const override
 Check if transaction is active.
 
- Public Member Functions inherited from database::integrated::transaction
virtual ~transaction ()=default
 

Private Attributes

std::shared_ptr< core::database_backendbackend_
 
bool active_
 

Detailed Description

Definition at line 174 of file unified_database_system.cpp.

Constructor & Destructor Documentation

◆ transaction_impl()

database::integrated::transaction_impl::transaction_impl ( std::shared_ptr< core::database_backend > backend)
inlineexplicit

Definition at line 176 of file unified_database_system.cpp.

177 : backend_(std::move(backend)), active_(false) {
178
179 // Begin transaction
180 if (backend_) {
181 auto result = backend_->begin_transaction();
182 if (result.is_ok()) {
183 active_ = true;
184 }
185 }
186 }
std::shared_ptr< core::database_backend > backend_

References active_, and backend_.

◆ ~transaction_impl()

database::integrated::transaction_impl::~transaction_impl ( )
inlineoverride

Definition at line 188 of file unified_database_system.cpp.

188 {
189 if (active_) {
190 // Auto-rollback if not committed
191 backend_->rollback_transaction();
192 }
193 }

References active_, and backend_.

Member Function Documentation

◆ commit()

kcenon::common::VoidResult database::integrated::transaction_impl::commit ( )
inlineoverridevirtual

Commit the transaction.

Returns
Success or error result

Implements database::integrated::transaction.

Definition at line 244 of file unified_database_system.cpp.

244 {
245 if (!active_) {
246 return make_error("Transaction not active", -1, "transaction");
247 }
248
249 auto result = backend_->commit_transaction();
250 if (result.is_err()) {
251 return make_error("Commit failed: " + result.error().message, -1, "transaction");
252 }
253
254 active_ = false;
255 return kcenon::common::ok();
256 }

References active_, and backend_.

◆ execute()

kcenon::common::Result< query_result > database::integrated::transaction_impl::execute ( const std::string & query,
const std::vector< query_param > & params )
inlineoverridevirtual

Execute a query within the transaction.

Parameters
querySQL query string
paramsOptional query parameters
Returns
Result containing query results or error

Implements database::integrated::transaction.

Definition at line 195 of file unified_database_system.cpp.

197 {
198
199 if (!active_) {
200 return make_error_result<query_result>("Transaction not active", -1, "transaction");
201 }
202
203 auto start = std::chrono::steady_clock::now();
204
205 kcenon::common::Result<core::database_result> db_result = [&]() {
206 if (params.empty()) {
207 if (is_select_query(query)) {
208 return backend_->select_query(query);
209 }
210 auto exec_res = backend_->execute_query(query);
211 if (exec_res.is_err()) {
212 return kcenon::common::Result<core::database_result>(exec_res.error());
213 }
214 return kcenon::common::Result<core::database_result>(core::database_result{});
215 }
216 auto values = convert_params(params);
217 if (is_select_query(query)) {
218 return backend_->select_prepared(query, values);
219 }
220 auto exec_res = backend_->execute_prepared(query, values);
221 if (exec_res.is_err()) {
222 return kcenon::common::Result<core::database_result>(exec_res.error());
223 }
224 return kcenon::common::Result<core::database_result>(core::database_result{});
225 }();
226
227 auto duration = std::chrono::duration_cast<std::chrono::microseconds>(
228 std::chrono::steady_clock::now() - start);
229
230 if (db_result.is_err()) {
231 return db_result.error();
232 }
233
234 auto qr = convert_result(db_result.value(), duration);
235 // execute_query / execute_prepared return VoidResult (no row count),
236 // so affected_rows stays 0 after convert_result. For successful DML
237 // queries we report at least 1 affected row.
238 if (!is_select_query(query) && qr.affected_rows == 0) {
239 qr.affected_rows = 1;
240 }
241 return qr;
242 }
std::vector< database_row > database_result
static query_result convert_result(const core::database_result &db_result, std::chrono::microseconds exec_time)
Convert core::database_result to query_result.

References active_, backend_, and database::integrated::convert_result().

Here is the call graph for this function:

◆ is_active()

bool database::integrated::transaction_impl::is_active ( ) const
inlineoverridevirtual

Check if transaction is active.

Returns
true if transaction is active

Implements database::integrated::transaction.

Definition at line 272 of file unified_database_system.cpp.

272 {
273 return active_;
274 }

References active_.

◆ rollback()

kcenon::common::VoidResult database::integrated::transaction_impl::rollback ( )
inlineoverridevirtual

Rollback the transaction.

Returns
Success or error result

Implements database::integrated::transaction.

Definition at line 258 of file unified_database_system.cpp.

258 {
259 if (!active_) {
260 return make_error("Transaction not active", -1, "transaction");
261 }
262
263 auto result = backend_->rollback_transaction();
264 if (result.is_err()) {
265 return make_error("Rollback failed: " + result.error().message, -1, "transaction");
266 }
267
268 active_ = false;
269 return kcenon::common::ok();
270 }

References active_, and backend_.

Member Data Documentation

◆ active_

bool database::integrated::transaction_impl::active_
private

◆ backend_

std::shared_ptr<core::database_backend> database::integrated::transaction_impl::backend_
private

The documentation for this class was generated from the following file: