2020-11-19 02:06:45 +00:00
|
|
|
/* vim: set noet sta sw=4 ts=4 : */
|
|
|
|
|
|
|
|
|
|
#include "mdbx_ext.h"
|
|
|
|
|
|
2020-12-04 19:07:34 +00:00
|
|
|
VALUE rmdbx_mMDBX;
|
|
|
|
|
VALUE rmdbx_eDatabaseError;
|
2020-12-22 06:24:18 +00:00
|
|
|
VALUE rmdbx_eRollback;
|
2020-11-19 02:06:45 +00:00
|
|
|
|
2021-10-06 17:25:50 +00:00
|
|
|
/*
|
|
|
|
|
* 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 );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-11-19 02:06:45 +00:00
|
|
|
/*
|
|
|
|
|
* MDBX initialization
|
|
|
|
|
*/
|
|
|
|
|
void
|
2023-01-05 23:16:57 +00:00
|
|
|
Init_mdbx_ext( void )
|
2020-11-19 02:06:45 +00:00
|
|
|
{
|
2020-11-30 05:57:26 +00:00
|
|
|
rmdbx_mMDBX = rb_define_module( "MDBX" );
|
|
|
|
|
|
|
|
|
|
VALUE version = rb_str_new_cstr( mdbx_version.git.describe );
|
2021-02-14 09:47:04 +00:00
|
|
|
/* The backend MDBX library version. */
|
2020-11-30 05:57:26 +00:00
|
|
|
rb_define_const( rmdbx_mMDBX, "LIBRARY_VERSION", version );
|
|
|
|
|
|
2021-02-14 09:47:04 +00:00
|
|
|
/* A generic exception class for internal Database errors. */
|
2020-11-30 05:57:26 +00:00
|
|
|
rmdbx_eDatabaseError = rb_define_class_under( rmdbx_mMDBX, "DatabaseError", rb_eRuntimeError );
|
2021-02-14 09:47:04 +00:00
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* 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 );
|
2020-11-30 05:57:26 +00:00
|
|
|
|
|
|
|
|
rmdbx_init_database();
|
2020-11-19 02:06:45 +00:00
|
|
|
}
|
|
|
|
|
|