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

MySQL数据库

开发平台:

Visual C++

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