eval0proc.ic
上传用户:tsgydb
上传日期:2007-04-14
资源大小:10674k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /******************************************************
  2. Executes SQL stored procedures and their control structures
  3. (c) 1998 Innobase Oy
  4. Created 1/20/1998 Heikki Tuuri
  5. *******************************************************/
  6. #include "pars0pars.h"
  7. #include "que0que.h"
  8. #include "eval0eval.h"
  9. /**************************************************************************
  10. Performs an execution step of a procedure node. */
  11. UNIV_INLINE
  12. que_thr_t*
  13. proc_step(
  14. /*======*/
  15. /* out: query thread to run next or NULL */
  16. que_thr_t* thr) /* in: query thread */
  17. {
  18. proc_node_t* node;
  19. ut_ad(thr);
  20. node = thr->run_node;
  21. ut_ad(que_node_get_type(node) == QUE_NODE_PROC);
  22. if (thr->prev_node == que_node_get_parent(node)) {
  23. /* Start execution from the first statement in the statement
  24. list */
  25. thr->run_node = node->stat_list;
  26. } else {
  27. /* Move to the next statement */
  28. ut_ad(que_node_get_next(thr->prev_node) == NULL);
  29. thr->run_node = NULL;
  30. }
  31. if (thr->run_node == NULL) {
  32. thr->run_node = que_node_get_parent(node);
  33. }
  34. return(thr);
  35. /**************************************************************************
  36. Performs an execution step of a procedure call node. */
  37. UNIV_INLINE
  38. que_thr_t*
  39. proc_eval_step(
  40. /*===========*/
  41. /* out: query thread to run next or NULL */
  42. que_thr_t* thr) /* in: query thread */
  43. {
  44. func_node_t* node;
  45. ut_ad(thr);
  46. node = thr->run_node;
  47. ut_ad(que_node_get_type(node) == QUE_NODE_FUNC);
  48. /* Evaluate the procedure */
  49. eval_exp(node);
  50. thr->run_node = que_node_get_parent(node);
  51. return(thr);