static VALUE
rlbug_database_initialize( int argc, VALUE *argv, VALUE self )
{
rlbug_database *ptr = CHECK_DATABASE( self );
if ( !ptr ) {
VALUE path, options, config;
VALUE config_argv[1];
lbug_system_config *sysconfig;
char *database_path;
rb_scan_args( argc, argv, "1:", &path, &options );
if ( options == Qnil ) options = rb_hash_new();
config_argv[0] = options;
config = rb_funcallv_public_kw( rlbug_cLadybugConfig, rb_intern("from_options"), 1,
config_argv, RB_PASS_KEYWORDS );
sysconfig = rlbug_get_config( config );
database_path = StringValueCStr( path );
ptr = rlbug_database_alloc();
if ( lbug_database_init(database_path, *sysconfig, &ptr->db) != LbugSuccess ) {
xfree( ptr );
ptr = NULL;
rb_raise( rlbug_eDatabaseError, "Couldn't create database!" );
}
DEBUG_GC( ">>> allocated database %p\n", ptr );
RTYPEDDATA_DATA( self ) = ptr;
ptr->path = rb_obj_freeze( rb_obj_dup(path) );
ptr->config = rb_obj_freeze( config );
} else {
rb_raise( rb_eRuntimeError, "cannot reinit database" );
}
rb_call_super( 0, 0 );
return Qtrue;
}