static mrb_value mrb_vedis_exec(mrb_state *mrb, mrb_value self) { int ret; vedis *vstore = DATA_PTR(self); vedis_value *result; vedis_value *entry; mrb_value ary; const char *cmd = NULL; mrb_get_args(mrb, "z", &cmd); ret = vedis_exec(vstore, cmd, -1); if (ret != VEDIS_OK) { return mrb_nil_value(); } ret = vedis_exec_result(vstore, &result); if (ret != VEDIS_OK) { return mrb_nil_value(); } else { if (vedis_value_is_string(result)) { return mrb_str_new_cstr(mrb, vedis_value_to_string(result, 0)); } else if (vedis_value_is_array(result)) { ary = mrb_ary_new(mrb); while ((entry = vedis_array_next_elem(result)) != 0) { mrb_ary_push(mrb, ary, mrb_str_new_cstr(mrb, vedis_value_to_string(entry, 0))); } return ary; } } return mrb_nil_value(); }
void ctteststrings(void) { int rc; const char *str; vedis *store = NULL; vedis_value *res = NULL; rc = vedis_open(&store, NULL /* in memory */); assert(rc == VEDIS_OK); EXEC_CMD("GET misc"); assert(vedis_value_is_null(res)); EXEC_CMD("SET misc smthg"); assert(vedis_value_is_bool(res)); assert(vedis_value_to_bool(res)); EXEC_CMD("GET misc"); assert(vedis_value_is_string(res)); assert(str = vedis_value_to_string(res, NULL)); assert(!strcmp(str, "smthg")); vedis_close(store); }