Module: TokyoTyrant
Defined Under Namespace
Constant Summary collapse
- ESUCCESS =
INT2NUM(TTESUCCESS)
- EINVALID =
INT2NUM(TTEINVALID)
- ENOHOST =
INT2NUM(TTENOHOST)
- EREFUSED =
INT2NUM(TTEREFUSED)
- ESEND =
INT2NUM(TTESEND)
- ERECV =
INT2NUM(TTERECV)
- EKEEP =
INT2NUM(TTEKEEP)
- ENOREC =
INT2NUM(TTENOREC)
- EMISC =
INT2NUM(TTEMISC)
- ITLEXICAL =
INT2NUM(RDBITLEXICAL)
- ITDECIMAL =
INT2NUM(RDBITDECIMAL)
- ITVOID =
INT2NUM(RDBITVOID)
- ITKEEP =
INT2NUM(RDBITKEEP)
Instance Method Summary collapse
- #add_double(vkey, vnum) ⇒ Object
- #add_int(vkey, vnum) ⇒ Object
-
#check(vkey) ⇒ Object
(also: #has_key?, #key?, #include?, #member?)
Rufus Compat.
- #close ⇒ Object
- #copy(path) ⇒ Object
-
#db_size ⇒ Object
Rufus Compat.
-
#delete_keys_with_prefix(*args) ⇒ Object
(also: #dfwmkeys)
Rufus Compat.
- #each_key ⇒ Object
- #ecode ⇒ Object
- #empty? ⇒ Boolean
- #errmsg(*args) ⇒ Object
- #fwmkeys(*args) ⇒ Object
- #get_double(vkey) ⇒ Object
- #get_int(vkey) ⇒ Object
- #iterinit ⇒ Object
- #iternext ⇒ Object
- #keys ⇒ Object
- #misc(*args) ⇒ Object
- #out(vkey) ⇒ Object (also: #delete)
-
#outlist(*args) ⇒ Object
(also: #mdelete, #ldelete)
TODO: merge out and mout?.
- #restore(vpath, vts, vopts) ⇒ Object
- #rnum ⇒ Object (also: #count, #size)
- #setmst(vhost, vport, vts, vopts) ⇒ Object
- #stat ⇒ Object
- #sync ⇒ Object
- #vanish ⇒ Object (also: #clear)
Instance Method Details
#add_double(vkey, vnum) ⇒ Object
204 205 206 207 208 209 210 211 212 |
# File 'ext/tokyo_tyrant_module.c', line 204
static VALUE mTokyoTyrant_add_double(VALUE vself, VALUE vkey, VALUE vnum){
double num;
TCRDB *db;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
vkey = StringValueEx(vkey);
num = tcrdbadddouble(db, RSTRING_PTR(vkey), RSTRING_LEN(vkey), NUM2DBL(vnum));
return isnan(num) ? Qnil : rb_float_new(num);
}
|
#add_int(vkey, vnum) ⇒ Object
190 191 192 193 194 195 196 197 198 |
# File 'ext/tokyo_tyrant_module.c', line 190
static VALUE mTokyoTyrant_add_int(VALUE vself, VALUE vkey, VALUE vnum){
int num;
TCRDB *db;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
vkey = StringValueEx(vkey);
num = tcrdbaddint(db, RSTRING_PTR(vkey), RSTRING_LEN(vkey), NUM2INT(vnum));
return num == INT_MIN ? Qnil : INT2NUM(num);
}
|
#check(vkey) ⇒ Object Also known as: has_key?, key?, include?, member?
Rufus Compat
103 104 105 106 107 108 109 |
# File 'ext/tokyo_tyrant_module.c', line 103
static VALUE mTokyoTyrant_check(VALUE vself, VALUE vkey){
TCRDB *db;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
vkey = StringValueEx(vkey);
return tcrdbvsiz2(db, RSTRING_PTR(vkey)) >= 0 ? Qtrue : Qfalse;
}
|
#close ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 |
# File 'ext/tokyo_tyrant_module.c', line 7
static VALUE mTokyoTyrant_close(VALUE vself){
int ecode;
TCRDB *db;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
if(!tcrdbclose(db)){
ecode = tcrdbecode(db);
rb_raise(eTokyoTyrantError, "close error: %s", tcrdberrmsg(ecode));
}
return Qtrue;
}
|
#copy(path) ⇒ Object
232 233 234 235 236 237 238 |
# File 'ext/tokyo_tyrant_module.c', line 232
static VALUE mTokyoTyrant_copy(VALUE vself, VALUE path){
TCRDB *db;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
Check_Type(path, T_STRING);
return tcrdbcopy(db, RSTRING_PTR(path)) ? Qtrue : Qfalse;
}
|
#db_size ⇒ Object
Rufus Compat
277 278 279 280 281 282 |
# File 'ext/tokyo_tyrant_module.c', line 277 static VALUE mTokyoTyrant_size(VALUE vself){ TCRDB *db; Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db); return LL2NUM(tcrdbsize(db)); } |
#delete_keys_with_prefix(*args) ⇒ Object Also known as: dfwmkeys
Rufus Compat
147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'ext/tokyo_tyrant_module.c', line 147
static VALUE mTokyoTyrant_delete_keys_with_prefix(int argc, VALUE *argv, VALUE vself){
VALUE vprefix, vmax;
TCLIST *keys;
int max;
TCRDB *db;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
rb_scan_args(argc, argv, "11", &vprefix, &vmax);
vprefix = StringValueEx(vprefix);
max = (vmax == Qnil) ? -1 : NUM2INT(vmax);
keys = tcrdbfwmkeys(db, RSTRING_PTR(vprefix), RSTRING_LEN(vprefix), max);
tcrdbmisc(db, "outlist", 0, keys);
tclistdel(keys);
return Qnil;
}
|
#each_key ⇒ Object
308 309 310 311 312 313 314 315 316 317 318 319 320 |
# File 'ext/tokyo_tyrant_module.c', line 308
static VALUE mTokyoTyrant_each_key(VALUE vself){
VALUE vrv;
TCRDB *db;
char *kxstr;
if(rb_block_given_p() != Qtrue) rb_raise(rb_eArgError, "no block given");
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
vrv = Qnil;
tcrdbiterinit(db);
while((kxstr = tcrdbiternext2(db)) != NULL){
vrv = rb_yield_values(1, rb_str_new2(kxstr));
}
return vrv;
}
|
#ecode ⇒ Object
55 56 57 58 59 60 |
# File 'ext/tokyo_tyrant_module.c', line 55 static VALUE mTokyoTyrant_ecode(VALUE vself){ TCRDB *db; Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db); return INT2NUM(tcrdbecode(db)); } |
#empty? ⇒ Boolean
270 271 272 273 274 275 |
# File 'ext/tokyo_tyrant_module.c', line 270 static VALUE mTokyoTyrant_empty(VALUE vself){ TCRDB *db; Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db); return tcrdbrnum(db) < 1 ? Qtrue : Qfalse; } |
#errmsg(*args) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'ext/tokyo_tyrant_module.c', line 42
static VALUE mTokyoTyrant_errmsg(int argc, VALUE *argv, VALUE vself){
VALUE vecode;
const char *msg;
int ecode;
TCRDB *db;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
rb_scan_args(argc, argv, "01", &vecode);
ecode = (vecode == Qnil) ? tcrdbecode(db) : NUM2INT(vecode);
msg = tcrdberrmsg(ecode);
return rb_str_new2(msg);
}
|
#fwmkeys(*args) ⇒ Object
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
# File 'ext/tokyo_tyrant_module.c', line 131
static VALUE mTokyoTyrant_fwmkeys(int argc, VALUE *argv, VALUE vself){
VALUE vprefix, vmax, vary;
TCLIST *keys;
int max;
TCRDB *db;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
rb_scan_args(argc, argv, "11", &vprefix, &vmax);
vprefix = StringValueEx(vprefix);
max = (vmax == Qnil) ? -1 : NUM2INT(vmax);
keys = tcrdbfwmkeys(db, RSTRING_PTR(vprefix), RSTRING_LEN(vprefix), max);
vary = listtovary(keys);
tclistdel(keys);
return vary;
}
|
#get_double(vkey) ⇒ Object
214 215 216 |
# File 'ext/tokyo_tyrant_module.c', line 214
static VALUE mTokyoTyrant_get_double(VALUE vself, VALUE vkey){
return mTokyoTyrant_add_double(vself, vkey, INT2NUM(0));
}
|
#get_int(vkey) ⇒ Object
200 201 202 |
# File 'ext/tokyo_tyrant_module.c', line 200
static VALUE mTokyoTyrant_get_int(VALUE vself, VALUE vkey){
return mTokyoTyrant_add_int(vself, vkey, INT2NUM(0));
}
|
#iterinit ⇒ Object
111 112 113 114 115 116 |
# File 'ext/tokyo_tyrant_module.c', line 111 static VALUE mTokyoTyrant_iterinit(VALUE vself){ TCRDB *db; Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db); return tcrdbiterinit(db) ? Qtrue : Qfalse; } |
#iternext ⇒ Object
118 119 120 121 122 123 124 125 126 127 128 129 |
# File 'ext/tokyo_tyrant_module.c', line 118
static VALUE mTokyoTyrant_iternext(VALUE vself){
VALUE vval;
char *vbuf;
TCRDB *db;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
if(!(vbuf = tcrdbiternext2(db))) return Qnil;
vval = rb_str_new2(vbuf);
tcfree(vbuf);
return vval;
}
|
#keys ⇒ Object
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 |
# File 'ext/tokyo_tyrant_module.c', line 163
static VALUE mTokyoTyrant_keys(VALUE vself){
/*
VALUE vary;
TCRDB *db;
char *kxstr;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
vary = rb_ary_new2(tcrdbrnum(db));
tcrdbiterinit(db);
while((kxstr = tcrdbiternext2(db)) != NULL){
rb_ary_push(vary, rb_str_new2(kxstr));
}
return vary;
*/
// Using forward matching keys with an empty string is 100x faster than iternext+get
VALUE vary;
TCLIST *keys;
TCRDB *db;
char *prefix;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
prefix = "";
keys = tcrdbfwmkeys2(db, prefix, -1);
vary = listtovary(keys);
tclistdel(keys);
return vary;
}
|
#misc(*args) ⇒ Object
291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 |
# File 'ext/tokyo_tyrant_module.c', line 291
static VALUE mTokyoTyrant_misc(int argc, VALUE *argv, VALUE vself){
VALUE vname, vopts, vargs;
TCRDB *db;
TCLIST *list, *args;
VALUE vary;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
rb_scan_args(argc, argv, "13", &vname, &vopts, &vargs);
args = varytolist(vargs);
vname = StringValueEx(vname);
list = tcrdbmisc(db, RSTRING_PTR(vname), NUM2INT(vopts), args);
vary = listtovary(list);
tclistdel(list);
return vary;
}
|
#out(vkey) ⇒ Object Also known as: delete
62 63 64 65 66 67 68 |
# File 'ext/tokyo_tyrant_module.c', line 62
static VALUE mTokyoTyrant_out(VALUE vself, VALUE vkey){
TCRDB *db;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
vkey = StringValueEx(vkey);
return tcrdbout2(db, RSTRING_PTR(vkey)) ? Qtrue : Qfalse;
}
|
#outlist(*args) ⇒ Object Also known as: mdelete, ldelete
TODO: merge out and mout?
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'ext/tokyo_tyrant_module.c', line 71
static VALUE mTokyoTyrant_outlist(int argc, VALUE *argv, VALUE vself){
VALUE vkeys, vary, vvalue;
TCRDB *db;
TCLIST *list, *result;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
rb_scan_args(argc, argv, "*", &vkeys);
// I really hope there is a better way to do this
if (RARRAY_LEN(vkeys) == 1) {
vvalue = rb_ary_entry(vkeys, 0);
switch (TYPE(vvalue)){
case T_STRING:
case T_FIXNUM:
break;
case T_ARRAY:
vkeys = vvalue;
break;
case T_OBJECT:
vkeys = rb_convert_type(vvalue, T_ARRAY, "Array", "to_a");
break;
}
}
Check_Type(vkeys, T_ARRAY);
list = varytolist(vkeys);
result = tcrdbmisc(db, "outlist", 0, list);
tclistdel(list);
vary = listtovary(result);
tclistdel(result);
return vary;
}
|
#restore(vpath, vts, vopts) ⇒ Object
240 241 242 243 244 245 246 247 248 249 250 |
# File 'ext/tokyo_tyrant_module.c', line 240
static VALUE mTokyoTyrant_restore(VALUE vself, VALUE vpath, VALUE vts, VALUE vopts){
uint64_t ts;
int opts;
TCRDB *db;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
Check_Type(vpath, T_STRING);
ts = (uint64_t) FIX2INT(vts);
opts = FIX2INT(vopts);
return tcrdbrestore(db, RSTRING_PTR(vpath), ts, opts) ? Qtrue : Qfalse;
}
|
#rnum ⇒ Object Also known as: count, size
263 264 265 266 267 268 |
# File 'ext/tokyo_tyrant_module.c', line 263 static VALUE mTokyoTyrant_rnum(VALUE vself){ TCRDB *db; Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db); return LL2NUM(tcrdbrnum(db)); } |
#setmst(vhost, vport, vts, vopts) ⇒ Object
252 253 254 255 256 257 258 259 260 261 |
# File 'ext/tokyo_tyrant_module.c', line 252
static VALUE mTokyoTyrant_setmst(VALUE vself, VALUE vhost, VALUE vport, VALUE vts, VALUE vopts){
uint64_t ts;
int opts;
TCRDB *db;
Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db);
ts = (uint64_t) FIX2INT(vts);
opts = FIX2INT(vopts);
return tcrdbsetmst(db, RSTRING_PTR(vhost), FIX2INT(vport), ts, opts) ? Qtrue : Qfalse;
}
|
#stat ⇒ Object
284 285 286 287 288 289 |
# File 'ext/tokyo_tyrant_module.c', line 284 static VALUE mTokyoTyrant_stat(VALUE vself){ TCRDB *db; Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db); return rb_str_new2(tcrdbstat(db)); } |
#sync ⇒ Object
218 219 220 221 222 223 |
# File 'ext/tokyo_tyrant_module.c', line 218 static VALUE mTokyoTyrant_sync(VALUE vself){ TCRDB *db; Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db); return tcrdbsync(db) ? Qtrue : Qfalse; } |
#vanish ⇒ Object Also known as: clear
225 226 227 228 229 230 |
# File 'ext/tokyo_tyrant_module.c', line 225 static VALUE mTokyoTyrant_vanish(VALUE vself){ TCRDB *db; Data_Get_Struct(rb_iv_get(vself, RDBVNDATA), TCRDB, db); return tcrdbvanish(db) ? Qtrue : Qfalse; } |