/** * 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"); } }
int execute_work_queue (void) { union op *op; int errors; Bool update_map = False; int dosync; if (verbose) { printf ("!\n"); printf ("! executing work queue\n"); printf ("!\n"); } errors = 0; dosync = 0; for (op = work_queue.head; op; op = op->generic.next) { if (verbose) print_opcode (op); /* check to see if we have to update the keyboard mapping */ if (dosync && (dosync < 0 || op->generic.type != doKeycode || !op->keycode.target_keycode)) { XSync (dpy, 0); while (XEventsQueued (dpy, QueuedAlready) > 0) { XEvent event; XNextEvent (dpy, &event); if (event.type == MappingNotify) { /* read all MappingNotify events */ while (XCheckTypedEvent (dpy, MappingNotify, &event)) ; XRefreshKeyboardMapping (&event.xmapping); } else { fprintf (stderr, "%s: unknown event %ld\n", ProgramName, (long) event.type); } } } dosync = 0; switch (op->generic.type) { case doKeycode: if (exec_keycode (&op->keycode) < 0) errors++; if (op->keycode.target_keycode) dosync = 1; else dosync = -1; break; case doAddModifier: if (exec_add (&op->addmodifier) < 0) errors++; else update_map = True; break; case doRemoveModifier: if (exec_remove (&op->removemodifier) < 0) errors++; else update_map = True; break; case doClearModifier: if (exec_clear (&op->clearmodifier) < 0) errors++; else update_map = True; break; case doPointer: if (exec_pointer (&op->pointer) < 0) errors++; break; default: fprintf (stderr, "%s: unknown opcode %d\n", ProgramName, op->generic.type); break; } } if (update_map) { if (UpdateModifierMapping (map) < 0) errors++; } return (errors > 0 ? -1 : 0); }