9 #ifndef __AFW_LMDB_INTERNAL_H__
10 #define __AFW_LMDB_INTERNAL_H__
55 apr_hash_t *dbi_handles;
56 apr_thread_rwlock_t *dbLock;
195 afw_rc_t afw_lmdb_internal_cleanup_free_result(
void *data);
197 const afw_utf8_t * afw_lmdb_internal_get_object_id(
201 afw_rc_t afw_lmdb_internal_close_database(
void *val);
202 afw_rc_t afw_lmdb_internal_close_cursor(
void *val);
204 void afw_lmdb_internal_close_transaction(
205 void *data,
void *data2,
209 MDB_dbi afw_lmdb_internal_open_database(
217 MDB_cursor * afw_lmdb_internal_open_cursor(
229 int afw_lmdb_internal_commit_transaction(
234 void afw_lmdb_internal_abort_transaction(
239 int afw_lmdb_internal_index_object(
244 const afw_uuid_t *uuid,
247 int afw_lmdb_internal_index_property(
253 const afw_uuid_t *uuid,
256 int afw_lmdb_internal_delete_index(
270 const afw_object_t * afw_lmdb_internal_create_object_from_entry(
277 const afw_value_t * afw_lmdb_internal_create_value_from_entry(
284 void afw_lmdb_internal_create_entry_from_object(
292 void afw_lmdb_internal_replace_entry_from_object(
315 void afw_lmdb_internal_save_config(
321 void afw_lmdb_internal_set_key(
324 const afw_uuid_t * uuid,
328 void afw_lmdb_internal_get_key(
333 afw_rc_t afw_lmdb_internal_delete_entry(
340 int afw_lmdb_internal_reader_check(
345 int afw_lmdb_internal_reader_list(
363 #define AFW_LMDB_BEGIN_TRANSACTION( \
370 MDB_txn * this_txn = NULL; \
371 bool this_txnHandled = false; \
372 const afw_lmdb_adaptor_t * this_adaptor = adaptor; \
373 const afw_lmdb_adaptor_session_t * this_session = session; \
374 afw_xctx_t * this_xctx = xctx; \
377 if (session && session->transaction) { \
378 ((afw_lmdb_adaptor_session_t *)session)->currTxn = session->transaction->txn; \
381 apr_thread_rwlock_wrlock(adaptor->dbLock); \
383 apr_thread_rwlock_rdlock(adaptor->dbLock); \
385 this_rc = mdb_txn_begin(adaptor->dbEnv, NULL, flags, &this_txn); \
387 apr_thread_rwlock_unlock(adaptor->dbLock); \
388 AFW_THROW_ERROR_RV_Z(general, lmdb, this_rc, \
389 "Unable to begin transaction.", this_xctx); \
392 ((afw_lmdb_adaptor_session_t *)session)->currTxn = this_txn; \
399 #define AFW_LMDB_GET_TRANSACTION() \
400 (this_session && this_session->currTxn) ? this_session->currTxn : this_txn
405 #define AFW_LMDB_COMMIT_TRANSACTION() \
406 if (!(this_session && this_session->transaction)) { \
407 if (this_txn && !this_txnHandled) { \
408 this_rc = mdb_txn_commit(this_txn); \
409 this_txnHandled = true; \
411 AFW_THROW_ERROR_RV_Z(general, lmdb_internal, this_rc, \
412 "Unable to commit transaction.", this_xctx); \
420 #define AFW_LMDB_ABORT_TRANSACTION() \
421 if (!(this_session && this_session->transaction)) { \
422 if (this_txn && !this_txnHandled) { \
423 mdb_txn_abort(this_txn); \
426 AFW_THROW_ERROR_RV_Z(general, lmdb_internal, this_rc, \
427 "Unable to abort transaction.", this_xctx); \
435 #define AFW_LMDB_END_TRANSACTION() \
438 if (!(this_session && this_session->transaction)) { \
439 if (this_txn && !this_txnHandled) { \
440 mdb_txn_abort(this_txn); \
441 this_txnHandled = true; \
443 apr_thread_rwlock_unlock(this_adaptor->dbLock); \
445 AFW_MARK_UNHANDLED; \
#define AFW_BEGIN_DECLARES
Adaptive Framework LMDB Adaptor.
#define AFW_LMDB_DECLARE_INTERNAL_CONST_DATA(type)
Declare an internal variable for /src/afw_lmdb/ source*.h files.
Adaptive Framework register generated (afw_lmdb) header.
afw_lmdb_transaction_t * afw_lmdb_transaction_create(afw_lmdb_adaptor_session_t *session, afw_xctx_t *xctx)
Internal create a LMDB adaptor transaction.
afw_lmdb_journal_t * afw_lmdb_journal_create(afw_lmdb_adaptor_session_t *session, afw_xctx_t *xctx)
Internal create a LMDB adaptor journal.
afw_lmdb_key_value_t * afw_lmdb_key_value_create(afw_lmdb_adaptor_session_t *session, afw_xctx_t *xctx)
Internal create a LMDB adaptor key/value.
const afw_adaptor_t * afw_lmdb_adaptor_create_cede_p(const afw_object_t *properties, const afw_pool_t *p, afw_xctx_t *xctx)
Internal create an LMDB adaptor.
afw_lmdb_adaptor_session_t * afw_lmdb_adaptor_session_create(afw_lmdb_adaptor_t *adaptor, afw_xctx_t *xctx)
Internal create a LMDB adaptor session.
Adaptive Framework Minimal Header.
Adaptive Framework UUID header.
afw_utf8_octet_t afw_utf8_z_t
NFC normalized UTF-8 null terminated string.
afw_query_criteria_filter_op_id_t
Interface afw_adaptor_factory public struct.
Interface afw_adaptor_impl_index_cursor public struct.
Interface afw_adaptor_impl_index public struct.
Interface afw_adaptor_journal public struct.
Interface afw_adaptor_key_value public struct.
Interface afw_adaptor public struct.
Interface afw_adaptor_session public struct.
Interface afw_adaptor_transaction public struct.
Interface afw_content_type public struct.
Struct for memory pointer and size.
Interface afw_object public struct.
Interface afw_pool public struct.
NFC normalized UTF-8 string.
Interface afw_value public struct.
Interface afw_xctx public struct.