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
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 232
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;
}
|
Instance Method Details
#active_txn ⇒ Object
316 317 318 319 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 316
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
311 312 313 314 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 311
static VALUE environment_clear_flags(int argc, VALUE* argv, VALUE self) {
environment_change_flags(argc, argv, self, 0);
return Qnil;
}
|
#close ⇒ Object
143 144 145 146 147 148 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 143
static VALUE environment_close(VALUE self) {
ENVIRONMENT(self, environment);
mdb_env_close(environment->env);
environment->env = 0;
return Qnil;
}
|
#copy(path) ⇒ Object
192 193 194 195 196 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 192
static VALUE environment_copy(VALUE self, VALUE path) {
ENVIRONMENT(self, environment);
check(mdb_env_copy(environment->env, StringValueCStr(path)));
return Qnil;
}
|
#database(*args) ⇒ Object
376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 376
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, free, database);
database->dbi = dbi;
database->env = self;
return vdb;
}
|
#flags ⇒ Object
269 270 271 272 273 274 275 276 277 278 279 280 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 269
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
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 172
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
282 283 284 285 286 287 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 282
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
306 307 308 309 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 306
static VALUE environment_set_flags(int argc, VALUE* argv, VALUE self) {
environment_change_flags(argc, argv, self, 1);
return Qnil;
}
|
#stat ⇒ Object
165 166 167 168 169 170 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 165
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
198 199 200 201 202 203 204 205 206 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 198
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
356 357 358 359 360 361 362 363 364 |
# File 'ext/lmdb_ext/lmdb_ext.c', line 356
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);
}
|