Module: LMDB
- Defined in:
- ext/lmdb_ext/lmdb_ext.c,
lib/lmdb/version.rb,
lib/lmdb/database.rb,
ext/lmdb_ext/lmdb_ext.c
Overview
The LMDB module presents a Ruby API to the OpenLDAP Lightning Memory-mapped Database (LMDB).
Defined Under Namespace
Classes: Cursor, Database, Environment, Error, Transaction
Constant Summary collapse
- VERSION =
'0.4.4'
- LIB_VERSION =
rb_str_new2(MDB_VERSION_STRING)
Class Method Summary collapse
-
.new(path, opts) {|env| ... } ⇒ Environment
Open an LMDB database environment.
Class Method Details
.new(path, opts) {|env| ... } ⇒ Environment
444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 444
static VALUE environment_new(int argc, VALUE *argv, VALUE klass) {
VALUE path, option_hash;
rb_scan_args(argc, argv, "1:", &path, &option_hash);
EnvironmentOptions options = {
.flags = MDB_NOTLS,
.maxreaders = -1,
.maxdbs = 128,
.mapsize = 0,
.mode = 0755,
};
if (!NIL_P(option_hash))
rb_hash_foreach(option_hash, environment_options, (VALUE)&options);
MDB_env* env;
check(mdb_env_create(&env));
Environment* environment;
VALUE venv = Data_Make_Struct(cEnvironment, Environment, environment_mark, environment_free, environment);
environment->env = env;
environment->thread_txn_hash = rb_hash_new();
environment->txn_thread_hash = rb_hash_new();
if (options.maxreaders > 0)
check(mdb_env_set_maxreaders(env, options.maxreaders));
if (options.mapsize > 0)
check(mdb_env_set_mapsize(env, options.mapsize));
check(mdb_env_set_maxdbs(env, options.maxdbs <= 0 ? 1 : options.maxdbs));
check(mdb_env_open(env, StringValueCStr(path), options.flags, options.mode));
if (rb_block_given_p())
return rb_ensure(rb_yield, venv, environment_close, venv);
return venv;
}
|