static mrb_value mrb_vedis_set(mrb_state *mrb, mrb_value self) { int ret; vedis *vstore = DATA_PTR(self); mrb_value key_obj, val_obj; const char *key = NULL; mrb_get_args(mrb, "oo", &key_obj, &val_obj); switch (mrb_type(key_obj)) { case MRB_TT_STRING: key = RSTRING_PTR(key_obj); break; case MRB_TT_SYMBOL: key = mrb_sym2name(mrb, mrb_obj_to_sym(mrb, key_obj)); break; default: mrb_raise(mrb, E_RUNTIME_ERROR, "vedis key type is string or symbol"); } val_obj = mrb_obj_as_string(mrb, val_obj); ret = vedis_kv_store(vstore, key, strlen(key), RSTRING_PTR(val_obj), RSTRING_LEN(val_obj)); if (ret != VEDIS_OK) { mrb_vedis_error(mrb, vstore, 0); } return val_obj; }
int main(int argc,char *argv[]) { vedis *pStore; /* Database handle */ char zKey[14]; /* Random generated key */ char zData[32]; /* Dummy data */ int i,rc; puts(zBanner); /* Open our datastore */ rc = vedis_open(&pStore,argc > 1 ? argv[1] /* On-disk DB */ : ":mem:" /* In-mem DB */); if( rc != VEDIS_OK ){ Fatal(0,"Out of memory"); } printf("Starting insertions of %d random records...\n",MAX_RECORDS); /* Start the random insertions */ for( i = 0 ; i < MAX_RECORDS; ++i ){ /* Genearte the random key first */ vedis_util_random_string(pStore,zKey,sizeof(zKey)); /* Perform the insertion */ rc = vedis_kv_store(pStore,zKey,sizeof(zKey),zData,sizeof(zData)); if( rc != VEDIS_OK ){ /* Something goes wrong */ break; } if( i == 79125 ){ /* Insert a sentinel record */ /* time(&tt); pTm = localtime(&tt); ... */ vedis_kv_store_fmt(pStore,"sentinel",-1,"I'm a sentinel record inserted on %d:%d:%d\n",14,15,18); /* Dummy time */ } } /* If we are OK, then manually commit the transaction */ if( rc == VEDIS_OK ){ /* * In fact, a call to vedis_commit() is not necessary since Vedis * will automatically commit the transaction during a call to vedis_close(). */ rc = vedis_commit(pStore); if( rc != VEDIS_OK ){ /* Rollback the transaction */ rc = vedis_rollback(pStore); } } if( rc != VEDIS_OK ){ /* Something goes wrong, extract the datastore error log and exit */ Fatal(pStore,0); } puts("Done...Fetching the 'sentinel' record: "); /* Fetch the sentinel */ rc = vedis_kv_fetch_callback(pStore,"sentinel",-1,DataConsumerCallback,0); if( rc != VEDIS_OK ){ /* Can't happen */ Fatal(0,"Sentinel record not found"); } /* All done, close our datastore */ vedis_close(pStore); return 0; }