ruby-mdbx/ext/mdbx_ext/mdbx_ext.c
mahlon 7fc1ebb408 Updates to support libmdbx 0.12.x.
Also, close some hanging open transactions in some error states.

FossilOrigin-Name: 9582fff0788d3f78e9b33f292a2c48afeac32587c89496a5a7d5e97a98085683
2024-03-25 01:58:15 +00:00

84 lines
1.8 KiB
C

/* vim: set noet sta sw=4 ts=4 : */
#include "mdbx_ext.h"
VALUE rmdbx_mMDBX;
VALUE rmdbx_eDatabaseError;
VALUE rmdbx_eRollback;
/*
* Log a message to the given +context+ object's logger.
*/
void
#ifdef HAVE_STDARG_PROTOTYPES
rmdbx_log_obj( VALUE context, const char *level, const char *fmt, ... )
#else
rmdbx_log_obj( VALUE context, const char *level, const char *fmt, va_dcl )
#endif
{
char buf[BUFSIZ];
va_list args;
VALUE logger = Qnil;
VALUE message = Qnil;
va_init_list( args, fmt );
vsnprintf( buf, BUFSIZ, fmt, args );
message = rb_str_new2( buf );
logger = rb_funcall( context, rb_intern("log"), 0 );
rb_funcall( logger, rb_intern(level), 1, message );
va_end( args );
}
/*
* Log a message to the global logger.
*/
void
#ifdef HAVE_STDARG_PROTOTYPES
rmdbx_log( const char *level, const char *fmt, ... )
#else
rmdbx_log( const char *level, const char *fmt, va_dcl )
#endif
{
char buf[BUFSIZ];
va_list args;
VALUE logger = Qnil;
VALUE message = Qnil;
va_init_list( args, fmt );
vsnprintf( buf, BUFSIZ, fmt, args );
message = rb_str_new2( buf );
logger = rb_funcall( rmdbx_mMDBX, rb_intern("logger"), 0 );
rb_funcall( logger, rb_intern(level), 1, message );
va_end( args );
}
/*
* MDBX initialization
*/
void
Init_mdbx_ext( void )
{
rmdbx_mMDBX = rb_define_module( "MDBX" );
VALUE version = rb_str_new_cstr( mdbx_version.git.describe );
/* The backend MDBX library version. */
rb_define_const( rmdbx_mMDBX, "LIBRARY_VERSION", version );
/* A generic exception class for internal Database errors. */
rmdbx_eDatabaseError = rb_define_class_under( rmdbx_mMDBX, "DatabaseError", rb_eRuntimeError );
/*
* Raising an MDBX::Rollback exception from within a transaction
* discards all changes and closes the transaction.
*/
rmdbx_eRollback = rb_define_class_under( rmdbx_mMDBX, "Rollback", rb_eRuntimeError );
rmdbx_init_database();
}