static int exec_command(memcached_st *mcd, int n_cmds, char * const cmds[]) { int retval = 1; if (strcmp(cmds[0], "get") == 0 && n_cmds == 2) retval = exec_get(mcd, cmds[1]); else if (strcmp(cmds[0], "add") == 0 && (n_cmds >= 3 && n_cmds <= 5)) retval = exec_add(mcd, cmds[1], cmds[2], n_cmds > 3 ? atol(cmds[3]) : 0, n_cmds > 4 ? atol(cmds[4]) : 0); else if (strcmp(cmds[0], "set") == 0 && (n_cmds >= 3 && n_cmds <= 5)) retval = exec_set(mcd, cmds[1], cmds[2], n_cmds > 3 ? atol(cmds[3]) : 0, n_cmds > 4 ? atol(cmds[4]) : 0); else if (strcmp(cmds[0], "replace") == 0 && (n_cmds >= 3 && n_cmds <= 5)) retval = exec_replace(mcd, cmds[1], cmds[2], n_cmds > 3 ? atol(cmds[3]) : 0, n_cmds > 4 ? atol(cmds[4]) : 0); else if (strcmp(cmds[0], "append") == 0 && (n_cmds >= 3 && n_cmds <= 5)) retval = exec_append(mcd, cmds[1], cmds[2], n_cmds > 3 ? atol(cmds[3]) : 0, n_cmds > 4 ? atol(cmds[4]) : 0); else if (strcmp(cmds[0], "prepend") == 0 && (n_cmds >= 3 && n_cmds <= 5)) retval = exec_prepend(mcd, cmds[1], cmds[2], n_cmds > 3 ? atol(cmds[3]) : 0, n_cmds > 4 ? atol(cmds[4]) : 0); else if (strcmp(cmds[0], "cas") == 0 && (n_cmds >= 4 && n_cmds <= 6)) retval = exec_cas(mcd, cmds[1], cmds[2], atol(cmds[3]), n_cmds > 4 ? atol(cmds[4]) : 0, n_cmds > 5 ? atol(cmds[5]) : 0); else if (strcmp(cmds[0], "delete") == 0 && (n_cmds >= 2 && n_cmds <= 3)) retval = exec_delete(mcd, cmds[1], n_cmds > 2 ? atol(cmds[2]) : 0); else if (strcmp(cmds[0], "incr") == 0 && n_cmds == 2) retval = exec_incr(mcd, cmds[1]); else if (strcmp(cmds[0], "decr") == 0 && n_cmds == 2) retval = exec_decr(mcd, cmds[1]); else if (strcmp(cmds[0], "flush") == 0 && (n_cmds >= 1 && n_cmds <=2)) retval = exec_flush(mcd, n_cmds > 1 ? atol(cmds[1]) : 0); else if (strcmp(cmds[0], "simple_bench") == 0 && (n_cmds >= 1 && n_cmds <=2)) retval = exec_simple_bench(mcd, n_cmds > 1 ? atof(cmds[1]) : 100.0); return retval; }
/** * Execute a parse tree and return the result set or runtime error * * @param dcb The DCB that connects to the client * @param tree The parse tree for the query */ void maxinfo_execute(DCB *dcb, MAXINFO_TREE *tree) { switch (tree->op) { case MAXOP_SHOW: exec_show(dcb, tree); break; case MAXOP_SELECT: exec_select(dcb, tree); break; case MAXOP_FLUSH: exec_flush(dcb, tree); break; case MAXOP_SET: exec_set(dcb, tree); break; case MAXOP_CLEAR: exec_clear(dcb, tree); break; case MAXOP_SHUTDOWN: exec_shutdown(dcb, tree); break; case MAXOP_RESTART: exec_restart(dcb, tree); break; case MAXOP_TABLE: case MAXOP_COLUMNS: case MAXOP_LITERAL: case MAXOP_PREDICATE: case MAXOP_LIKE: case MAXOP_EQUAL: default: maxinfo_send_error(dcb, 0, "Unexpected operator in parse tree"); } }