Adaptive Framework  0.9.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
Data Structures | Macros | Typedefs | Functions
afw_lmdb_internal.h File Reference

Adaptive Framework LMDB Adaptor Internal Header. More...

#include "afw_minimal.h"
#include "afw_lmdb.h"
#include "afw_uuid.h"
#include "generated/afw_lmdb_generated.h"
#include <lmdb.h>

Go to the source code of this file.

Data Structures

struct  afw_lmdb_env_s
 
struct  afw_lmdb_limits_s
 
struct  afw_lmdb_adaptor_s
 
struct  afw_lmdb_journal_s
 
struct  afw_lmdb_key_value_s
 
struct  afw_lmdb_transaction_s
 
struct  afw_lmdb_txn_t
 
struct  afw_lmdb_adaptor_session_s
 
struct  afw_lmdb_adaptor_impl_index_s
 
struct  impl_afw_adaptor_impl_index_cursor_self_s
 
struct  afw_lmdb_dbi_t
 

Macros

#define AFW_LMDB_BEGIN_TRANSACTION(adaptor, session, flags, exclusive, xctx)
 Begin an LMDB transaction. More...
 
#define AFW_LMDB_GET_TRANSACTION()    (this_session && this_session->currTxn) ? this_session->currTxn : this_txn
 
#define AFW_LMDB_COMMIT_TRANSACTION()
 Commit a transaction. More...
 
#define AFW_LMDB_ABORT_TRANSACTION()
 Abort a transaction. More...
 
#define AFW_LMDB_END_TRANSACTION()
 End an LMDB transaction. More...
 

Typedefs

typedef struct afw_lmdb_metadata_s afw_lmdb_metadata_t
 
typedef struct afw_lmdb_env_s afw_lmdb_env_t
 
typedef struct afw_lmdb_limits_s afw_lmdb_limits_t
 
typedef struct afw_lmdb_adaptor_s afw_lmdb_adaptor_t
 
typedef struct afw_lmdb_journal_s afw_lmdb_journal_t
 
typedef struct afw_lmdb_key_value_s afw_lmdb_key_value_t
 
typedef struct afw_lmdb_transaction_s afw_lmdb_transaction_t
 
typedef struct afw_lmdb_adaptor_session_s afw_lmdb_adaptor_session_t
 
typedef struct afw_lmdb_adaptor_impl_index_s afw_lmdb_adaptor_impl_index_t
 
typedef struct impl_afw_adaptor_impl_index_cursor_self_s impl_afw_adaptor_impl_index_cursor_self_t
 

Functions

 AFW_LMDB_DECLARE_INTERNAL_CONST_DATA (afw_adaptor_factory_t) afw_lmdb_adaptor_factory
 
afw_lmdb_dbi_tafw_lmdb_internal_dbi_handle (MDB_env *env, MDB_dbi dbi, const afw_pool_t *pool, afw_xctx_t *xctx)
 
const afw_adaptor_tafw_lmdb_adaptor_create_cede_p (const afw_object_t *properties, const afw_pool_t *p, afw_xctx_t *xctx)
 Internal create an LMDB adaptor. More...
 
afw_lmdb_adaptor_session_tafw_lmdb_adaptor_session_create (afw_lmdb_adaptor_t *adaptor, afw_xctx_t *xctx)
 Internal create a LMDB adaptor session. More...
 
afw_lmdb_journal_tafw_lmdb_journal_create (afw_lmdb_adaptor_session_t *session, afw_xctx_t *xctx)
 Internal create a LMDB adaptor journal. More...
 
afw_lmdb_key_value_tafw_lmdb_key_value_create (afw_lmdb_adaptor_session_t *session, afw_xctx_t *xctx)
 Internal create a LMDB adaptor key/value. More...
 
afw_lmdb_transaction_tafw_lmdb_transaction_create (afw_lmdb_adaptor_session_t *session, afw_xctx_t *xctx)
 Internal create a LMDB adaptor transaction. More...
 
afw_rc_t afw_lmdb_internal_cleanup_free_result (void *data)
 
const afw_utf8_tafw_lmdb_internal_get_object_id (const afw_lmdb_adaptor_session_t *self, afw_xctx_t *xctx)
 
afw_rc_t afw_lmdb_internal_close_database (void *val)
 
afw_rc_t afw_lmdb_internal_close_cursor (void *val)
 
void afw_lmdb_internal_close_transaction (void *data, void *data2, const afw_pool_t *p, afw_xctx_t *xctx)
 
MDB_dbi afw_lmdb_internal_open_database (const afw_lmdb_adaptor_t *adaptor, MDB_txn *txn, const afw_utf8_t *database, unsigned int flags, const afw_pool_t *p, afw_xctx_t *xctx)
 
MDB_cursor * afw_lmdb_internal_open_cursor (const afw_lmdb_adaptor_session_t *session, MDB_dbi dbi, afw_xctx_t *xctx)
 
afw_lmdb_txn_tafw_lmdb_internal_open_transaction (const afw_lmdb_adaptor_session_t *session, const afw_lmdb_adaptor_t *adaptor, unsigned int flags, afw_boolean_t exclusive, afw_xctx_t *xctx)
 
int afw_lmdb_internal_commit_transaction (const afw_lmdb_adaptor_session_t *session, const afw_lmdb_adaptor_t *adaptor, afw_xctx_t *xctx)
 
void afw_lmdb_internal_abort_transaction (const afw_lmdb_adaptor_session_t *session, const afw_lmdb_adaptor_t *adaptor, afw_xctx_t *xctx)
 
int afw_lmdb_internal_index_object (const afw_lmdb_adaptor_session_t *session, const afw_lmdb_adaptor_t *adaptor, const afw_utf8_t *object_type_id, const afw_object_t *object, const afw_uuid_t *uuid, afw_xctx_t *xctx)
 
int afw_lmdb_internal_index_property (const afw_lmdb_adaptor_t *adaptor, MDB_txn *txn, const afw_utf8_t *object_type_id, const afw_utf8_t *property, const afw_utf8_t *value, const afw_uuid_t *uuid, afw_xctx_t *xctx)
 
int afw_lmdb_internal_delete_index (const afw_lmdb_adaptor_session_t *session, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, const afw_utf8_t *property, const afw_value_t *value, afw_xctx_t *xctx)
 
afw_boolean_t afw_lmdb_internal_is_property_indexed (const afw_lmdb_adaptor_t *adaptor, const afw_utf8_t *object_type_id, const afw_utf8_t *property_name, afw_xctx_t *xctx)
 
const afw_object_tafw_lmdb_internal_create_object_from_entry (const afw_lmdb_adaptor_session_t *self, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, MDB_dbi dbi, afw_xctx_t *xctx)
 
const afw_value_tafw_lmdb_internal_create_value_from_entry (const afw_lmdb_adaptor_session_t *self, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, MDB_dbi dbi, afw_xctx_t *xctx)
 
void afw_lmdb_internal_create_entry_from_object (const afw_lmdb_adaptor_session_t *self, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, const afw_object_t *object, MDB_dbi dbi, afw_xctx_t *xctx)
 
void afw_lmdb_internal_replace_entry_from_object (const afw_lmdb_adaptor_session_t *self, const afw_utf8_t *object_type_id, const afw_utf8_t *object_id, const afw_object_t *object, MDB_dbi dbi, afw_xctx_t *xctx)
 
afw_adaptor_impl_index_cursor_tafw_lmdb_internal_cursor_create (const afw_lmdb_adaptor_session_t *self, const afw_utf8_t *database, const afw_utf8_t *object_type_id, const afw_utf8_t *value, const afw_query_criteria_filter_op_id_t operator, afw_boolean_t unique, afw_xctx_t *xctx)
 
const afw_object_tafw_lmdb_internal_get_config (afw_lmdb_adaptor_t *self, MDB_txn *txn, const afw_pool_t *p, afw_xctx_t *xctx)
 
void afw_lmdb_internal_save_config (afw_lmdb_adaptor_t *self, const afw_object_t *config, MDB_txn *txn, afw_xctx_t *xctx)
 
void afw_lmdb_internal_set_key (afw_memory_t *key, const afw_utf8_t *object_type_id, const afw_uuid_t *uuid, const afw_pool_t *p, afw_xctx_t *xctx)
 
void afw_lmdb_internal_get_key (afw_memory_t *key, afw_utf8_t *object_type_id, afw_uuid_t *uuid)
 
afw_rc_t afw_lmdb_internal_delete_entry (MDB_txn *txn, MDB_dbi dbi, const afw_memory_t *raw_key, const afw_memory_t *raw_value, afw_xctx_t *xctx)
 
int afw_lmdb_internal_reader_check (const afw_adaptor_t *instance, int *deadReaders, afw_xctx_t *xctx)
 
int afw_lmdb_internal_reader_list (const afw_adaptor_t *instance, const afw_utf8_t **list, const afw_pool_t *pool, afw_xctx_t *xctx)
 

Detailed Description

Adaptive Framework LMDB Adaptor Internal Header.

Definition in file afw_lmdb_internal.h.

Macro Definition Documentation

◆ AFW_LMDB_ABORT_TRANSACTION

#define AFW_LMDB_ABORT_TRANSACTION ( )
Value:
if (!(this_session && this_session->transaction)) { \
if (this_txn && !this_txnHandled) { \
mdb_txn_abort(this_txn); \
txnHandled = true; \
if (this_rc) { \
AFW_THROW_ERROR_RV_Z(general, lmdb_internal, this_rc, \
"Unable to abort transaction.", this_xctx); \
} \
} \
}

Abort a transaction.

Definition at line 420 of file afw_lmdb_internal.h.

◆ AFW_LMDB_BEGIN_TRANSACTION

#define AFW_LMDB_BEGIN_TRANSACTION (   adaptor,
  session,
  flags,
  exclusive,
  xctx 
)
Value:
do { \
MDB_txn * this_txn = NULL; \
bool this_txnHandled = false; \
const afw_lmdb_adaptor_t * this_adaptor = adaptor; \
const afw_lmdb_adaptor_session_t * this_session = session; \
afw_xctx_t * this_xctx = xctx; \
int this_rc; \
AFW_TRY { \
if (session && session->transaction) { \
((afw_lmdb_adaptor_session_t *)session)->currTxn = session->transaction->txn; \
} else { \
if (exclusive) { \
apr_thread_rwlock_wrlock(adaptor->dbLock); \
} else { \
apr_thread_rwlock_rdlock(adaptor->dbLock); \
} \
this_rc = mdb_txn_begin(adaptor->dbEnv, NULL, flags, &this_txn); \
if (this_rc) { \
apr_thread_rwlock_unlock(adaptor->dbLock); \
AFW_THROW_ERROR_RV_Z(general, lmdb, this_rc, \
"Unable to begin transaction.", this_xctx); \
} \
if (session) \
((afw_lmdb_adaptor_session_t *)session)->currTxn = this_txn; \
} \
do {

Begin an LMDB transaction.

All LMDB operations must be wrapped inside a LMDB transaction, even when the transaction interface is not requested explicitly by the user.

Todo:
FIXME: LMDB transactions may also be nested (second param). However, I don't believe LMDB allows for write transactions to be nested under read transactions, so this macro needs to contain logic to handle both scenarios.

Definition at line 363 of file afw_lmdb_internal.h.

◆ AFW_LMDB_COMMIT_TRANSACTION

#define AFW_LMDB_COMMIT_TRANSACTION ( )
Value:
if (!(this_session && this_session->transaction)) { \
if (this_txn && !this_txnHandled) { \
this_rc = mdb_txn_commit(this_txn); \
this_txnHandled = true; \
if (this_rc) { \
AFW_THROW_ERROR_RV_Z(general, lmdb_internal, this_rc, \
"Unable to commit transaction.", this_xctx); \
} \
} \
}

Commit a transaction.

Definition at line 405 of file afw_lmdb_internal.h.

◆ AFW_LMDB_END_TRANSACTION

#define AFW_LMDB_END_TRANSACTION ( )
Value:
} while (0); \
if (!(this_session && this_session->transaction)) { \
if (this_txn && !this_txnHandled) { \
mdb_txn_abort(this_txn); \
this_txnHandled = true; \
} \
apr_thread_rwlock_unlock(this_adaptor->dbLock); \
} \
AFW_MARK_UNHANDLED; \
} \
AFW_ENDTRY; \
} while(0)
#define AFW_FINALLY
Always executed regardless of error.
Definition: afw_error.h:702

End an LMDB transaction.

Definition at line 435 of file afw_lmdb_internal.h.

Function Documentation

◆ afw_lmdb_adaptor_create_cede_p()

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.

Parameters
propertiesParameters.
pto use for adaptor resources.
xctxof caller.
Returns
New instance of LMDB adaptor.

Definition at line 214 of file afw_lmdb_adaptor.c.

◆ afw_lmdb_adaptor_session_create()

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.

Parameters
adaptorInternal instance of adaptor.
xctxof caller.
Returns
New instance of LMDB adaptor session.

Definition at line 40 of file afw_lmdb_adaptor_session.c.

◆ afw_lmdb_journal_create()

afw_lmdb_journal_t* afw_lmdb_journal_create ( afw_lmdb_adaptor_session_t session,
afw_xctx_t xctx 
)

Internal create a LMDB adaptor journal.

Parameters
sessionInternal instance of adaptor session.
xctxof caller.
Returns
New instance of LMDB adaptor journal.

Definition at line 27 of file afw_lmdb_journal.c.

◆ afw_lmdb_key_value_create()

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.

Parameters
sessionInternal instance of adaptor session.
xctxof caller.
Returns
New instance of LMDB key/value.

Definition at line 617 of file afw_lmdb_internal.c.

◆ afw_lmdb_transaction_create()

afw_lmdb_transaction_t* afw_lmdb_transaction_create ( afw_lmdb_adaptor_session_t session,
afw_xctx_t xctx 
)

Internal create a LMDB adaptor transaction.

Parameters
sessionInternal instance of adaptor session.
xctxof caller.
Returns
New instance of LMDB adaptor transaction.

Definition at line 1257 of file afw_lmdb_internal.c.