procedure.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /* Procedures (functions with changes output of select) */
  14. #ifdef USE_PRAGMA_IMPLEMENTATION
  15. #pragma implementation // gcc: Class implementation
  16. #endif
  17. #include "mysql_priv.h"
  18. #include "procedure.h"
  19. #include "sql_analyse.h" // Includes procedure
  20. #ifdef USE_PROC_RANGE
  21. #include "proc_range.h"
  22. #endif
  23. static struct st_procedure_def {
  24.   const char *name;
  25.   Procedure *(*init)(THD *thd,ORDER *param,select_result *result,
  26.      List<Item> &field_list);
  27. } sql_procs[] = {
  28. #ifdef USE_PROC_RANGE
  29.   { "split_sum",proc_sum_range_init }, // Internal procedure at TCX
  30.   { "split_count",proc_count_range_init }, // Internal procedure at TCX
  31.   { "matris_ranges",proc_matris_range_init }, // Internal procedure at TCX
  32. #endif
  33.   { "analyse",proc_analyse_init } // Analyse a result
  34. };
  35. /*****************************************************************************
  36. ** Setup handling of procedure
  37. ** Return 0 if everything is ok
  38. *****************************************************************************/
  39. Procedure *
  40. setup_procedure(THD *thd,ORDER *param,select_result *result,
  41. List<Item> &field_list,int *error)
  42. {
  43.   uint i;
  44.   DBUG_ENTER("setup_procedure");
  45.   *error=0;
  46.   if (!param)
  47.     DBUG_RETURN(0);
  48.   for (i=0 ; i < array_elements(sql_procs) ; i++)
  49.   {
  50.     if (!my_strcasecmp(system_charset_info,
  51.                        (*param->item)->name,sql_procs[i].name))
  52.     {
  53.       Procedure *proc=(*sql_procs[i].init)(thd,param,result,field_list);
  54.       *error= !proc;
  55.       DBUG_RETURN(proc);
  56.     }
  57.   }
  58.   my_printf_error(ER_UNKNOWN_PROCEDURE,ER(ER_UNKNOWN_PROCEDURE),MYF(0),
  59.   (*param->item)->name);
  60.   *error=1;
  61.   DBUG_RETURN(0);
  62. }