/****************************************************** Executes SQL stored procedures and their control structures (c) 1998 Innobase Oy Created 1/20/1998 Heikki Tuuri *******************************************************/ #include "pars0pars.h" #include "que0que.h" #include "eval0eval.h" /************************************************************************** Performs an execution step of a procedure node. */ UNIV_INLINE que_thr_t* proc_step( /*======*/ /* out: query thread to run next or NULL */ que_thr_t* thr) /* in: query thread */ { proc_node_t* node; ut_ad(thr); node = thr->run_node; ut_ad(que_node_get_type(node) == QUE_NODE_PROC); if (thr->prev_node == que_node_get_parent(node)) { /* Start execution from the first statement in the statement list */ thr->run_node = node->stat_list; } else { /* Move to the next statement */ ut_ad(que_node_get_next(thr->prev_node) == NULL); thr->run_node = NULL; } if (thr->run_node == NULL) { thr->run_node = que_node_get_parent(node); } return(thr); } /************************************************************************** Performs an execution step of a procedure call node. */ UNIV_INLINE que_thr_t* proc_eval_step( /*===========*/ /* out: query thread to run next or NULL */ que_thr_t* thr) /* in: query thread */ { func_node_t* node; ut_ad(thr); node = thr->run_node; ut_ad(que_node_get_type(node) == QUE_NODE_FUNC); /* Evaluate the procedure */ eval_exp(node); thr->run_node = que_node_get_parent(node); return(thr); }