Class: LMDB::Environment
- Inherits:
-
Object
- Object
- LMDB::Environment
- Defined in:
- ext/lmdb_ext/lmdb_ext.c
Class Method Summary collapse
Instance Method Summary collapse
- #active_txn ⇒ Object
- #clear_flags(*args) ⇒ Object
- #close ⇒ Object
- #copy(path) ⇒ Object
- #database(*args) ⇒ Object
- #flags ⇒ Object
- #info ⇒ Object
- #path ⇒ Object
- #set_flags(*args) ⇒ Object
- #stat ⇒ Object
- #sync(*args) ⇒ Object
- #transaction(*args) ⇒ Object
Class Method Details
.new(*args) ⇒ Object
247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 247
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_deref, environment);
environment->env = env;
environment->refcount = 1;
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;
}
|
Instance Method Details
#active_txn ⇒ Object
332 333 334 335 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 332
static VALUE environment_active_txn(VALUE self) {
ENVIRONMENT(self, environment);
return rb_hash_aref(environment->thread_txn_hash, rb_thread_current());
}
|
#clear_flags(*args) ⇒ Object
327 328 329 330 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 327
static VALUE environment_clear_flags(int argc, VALUE* argv, VALUE self) {
environment_change_flags(argc, argv, self, 0);
return Qnil;
}
|
#close ⇒ Object
158 159 160 161 162 163 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 158
static VALUE environment_close(VALUE self) {
ENVIRONMENT(self, environment);
mdb_env_close(environment->env);
environment->env = 0;
return Qnil;
}
|
#copy(path) ⇒ Object
207 208 209 210 211 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 207
static VALUE environment_copy(VALUE self, VALUE path) {
ENVIRONMENT(self, environment);
check(mdb_env_copy(environment->env, StringValueCStr(path)));
return Qnil;
}
|
#database(*args) ⇒ Object
400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 400
static VALUE environment_database(int argc, VALUE *argv, VALUE self) {
ENVIRONMENT(self, environment);
if (!active_txn(self))
return call_with_transaction(self, self, "database", argc, argv, 0);
VALUE name, option_hash;
rb_scan_args(argc, argv, "01:", &name, &option_hash);
int flags = 0;
if (!NIL_P(option_hash))
rb_hash_foreach(option_hash, database_flags, (VALUE)&flags);
MDB_dbi dbi;
check(mdb_dbi_open(need_txn(self), NIL_P(name) ? 0 : StringValueCStr(name), flags, &dbi));
Database* database;
VALUE vdb = Data_Make_Struct(cDatabase, Database, database_mark, database_deref, database);
database->dbi = dbi;
database->env = self;
database->refcount = 1;
++environment->refcount;
return vdb;
}
|
#flags ⇒ Object
285 286 287 288 289 290 291 292 293 294 295 296 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 285
static VALUE environment_flags(VALUE self) {
unsigned int flags;
ENVIRONMENT(self, environment);
check(mdb_env_get_flags(environment->env, &flags));
VALUE ret = rb_ary_new();
#define FLAG(const, name) if (flags & MDB_##const) rb_ary_push(ret, ID2SYM(rb_intern(#name)));
#include "env_flags.h"
#undef FLAG
return ret;
}
|
#info ⇒ Object
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 187
static VALUE environment_info(VALUE self) {
MDB_envinfo info;
ENVIRONMENT(self, environment);
check(mdb_env_info(environment->env, &info));
VALUE ret = rb_hash_new();
#define INFO_SET(name) rb_hash_aset(ret, ID2SYM(rb_intern(#name)), INT2NUM((size_t)info.me_##name));
INFO_SET(mapaddr);
INFO_SET(mapsize);
INFO_SET(last_pgno);
INFO_SET(last_txnid);
INFO_SET(maxreaders);
INFO_SET(numreaders);
#undef INFO_SET
return ret;
}
|
#path ⇒ Object
298 299 300 301 302 303 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 298
static VALUE environment_path(VALUE self) {
const char* path;
ENVIRONMENT(self, environment);
check(mdb_env_get_path(environment->env, &path));
return rb_str_new2(path);
}
|
#set_flags(*args) ⇒ Object
322 323 324 325 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 322
static VALUE environment_set_flags(int argc, VALUE* argv, VALUE self) {
environment_change_flags(argc, argv, self, 1);
return Qnil;
}
|
#stat ⇒ Object
180 181 182 183 184 185 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 180
static VALUE environment_stat(VALUE self) {
ENVIRONMENT(self, environment);
MDB_stat stat;
check(mdb_env_stat(environment->env, &stat));
return stat2hash(&stat);
}
|
#sync(*args) ⇒ Object
213 214 215 216 217 218 219 220 221 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 213
static VALUE environment_sync(int argc, VALUE *argv, VALUE self) {
ENVIRONMENT(self, environment);
VALUE force;
rb_scan_args(argc, argv, "01", &force);
check(mdb_env_sync(environment->env, RTEST(force)));
return Qnil;
}
|
#transaction(*args) ⇒ Object
372 373 374 375 376 377 378 379 380 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 372
static VALUE environment_transaction(int argc, VALUE *argv, VALUE self) {
rb_need_block();
VALUE readonly;
rb_scan_args(argc, argv, "01", &readonly);
unsigned int flags = RTEST(readonly) ? MDB_RDONLY : 0;
return with_transaction(self, rb_yield, Qnil, flags);
}
|