mariadb/sql/sp.h
unknown 164ce4c5cd Recursion support made for SP (BUG#10100).
client/mysqltest.c:
  An expected error messages hiding from the log if disable_result_log is in force.
mysql-test/r/sp-dynamic.result:
  The test expanded for case of allowed/disalowed recursion.
mysql-test/r/sp-error.result:
  Error messages changed.
  Test of bug11394() made with allowed recursion.
mysql-test/r/sp.result:
  Tests for recursion.
mysql-test/r/trigger.result:
  Check that triggers are not affected by this patch.
mysql-test/r/variables.result:
  Test of max_sp_recursion_depth variable.
mysql-test/t/sp-dynamic.test:
  The test expanded for case of allowed/disalowed recursion.
mysql-test/t/sp-error.test:
  Error messages changed.
  Test of bug11394() made with allowed recursion.
mysql-test/t/sp.test:
  Tests for recursion.
mysql-test/t/trigger.test:
  Check that triggers are not affected by this patch.
mysql-test/t/variables.test:
  Test of max_sp_recursion_depth variable.
sql/item_func.cc:
  sp_find_function() and sp_find_procedure() joined to sp_find_routine()
    function as it was mentioned in TODO.
sql/mysqld.cc:
  max_sp_recursion_depth variable added.
sql/set_var.cc:
  max_sp_recursion_depth variable added.
sql/share/errmsg.txt:
  An error message changed.
  An error message added.
sql/sp.cc:
  sp_find_function() and sp_find_procedure() joined to sp_find_routine()
    function as it was mentioned in TODO.
  Temory LEX is allocated on a stack, not on a heap.
  Recursion support added for stored procedures.
sql/sp.h:
  sp_find_function() and sp_find_procedure() joined to sp_find_routine()
    function as it was mentioned in TODO.
sql/sp_head.cc:
  Initialization of new sp_head fields to get correct list of instances
    contained one instance only.
  Stack requirement for SP instruction is increased.
  Stack free space is checked before mem root initialisation to avoid
    memory leak.
  Pointer to the free instance management added before and after
    SP execution.
sql/sp_head.h:
  New sp_head variables added to support inst of instances of SP
    for recursion and pointer on ths first free to use instance.
sql/sql_base.cc:
  open_table() consume a lot of stack space so we check free stack space before it.
sql/sql_class.h:
  max_sp_recursion_depth variable added.
sql/sql_parse.cc:
  sp_find_function() and sp_find_procedure() joined to sp_find_routine()
    function as it was mentioned in TODO.
2005-11-23 01:11:19 +02:00

114 lines
3.5 KiB
C++

/* -*- C++ -*- */
/* Copyright (C) 2002 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#ifndef _SP_H_
#define _SP_H_
// Return codes from sp_create_*, sp_drop_*, and sp_show_*:
#define SP_OK 0
#define SP_KEY_NOT_FOUND -1
#define SP_OPEN_TABLE_FAILED -2
#define SP_WRITE_ROW_FAILED -3
#define SP_DELETE_ROW_FAILED -4
#define SP_GET_FIELD_FAILED -5
#define SP_PARSE_ERROR -6
#define SP_INTERNAL_ERROR -7
#define SP_NO_DB_ERROR -8
#define SP_BAD_IDENTIFIER -9
#define SP_BODY_TOO_LONG -10
/* Drop all routines in database 'db' */
int
sp_drop_db_routines(THD *thd, char *db);
sp_head *
sp_find_routine(THD *thd, int type, sp_name *name,
sp_cache **cp, bool cache_only);
int
sp_exists_routine(THD *thd, TABLE_LIST *procs, bool any, bool no_error);
int
sp_create_procedure(THD *thd, sp_head *sp);
int
sp_drop_procedure(THD *thd, sp_name *name);
int
sp_update_procedure(THD *thd, sp_name *name, st_sp_chistics *chistics);
int
sp_show_create_procedure(THD *thd, sp_name *name);
int
sp_show_status_procedure(THD *thd, const char *wild);
int
sp_create_function(THD *thd, sp_head *sp);
int
sp_drop_function(THD *thd, sp_name *name);
int
sp_update_function(THD *thd, sp_name *name, st_sp_chistics *chistics);
int
sp_show_create_function(THD *thd, sp_name *name);
int
sp_show_status_function(THD *thd, const char *wild);
/*
Procedures for pre-caching of stored routines and building table list
for prelocking.
*/
void sp_get_prelocking_info(THD *thd, bool *need_prelocking,
bool *first_no_prelocking);
void sp_add_used_routine(LEX *lex, Query_arena *arena,
sp_name *rt, char rt_type);
void sp_remove_not_own_routines(LEX *lex);
void sp_update_sp_used_routines(HASH *dst, HASH *src);
bool sp_cache_routines_and_add_tables(THD *thd, LEX *lex,
bool first_no_prelock);
void sp_cache_routines_and_add_tables_for_view(THD *thd, LEX *lex,
LEX *aux_lex);
void sp_cache_routines_and_add_tables_for_triggers(THD *thd, LEX *lex,
Table_triggers_list *triggers);
extern "C" byte* sp_sroutine_key(const byte *ptr, uint *plen, my_bool first);
/*
Routines which allow open/lock and close mysql.proc table even when
we already have some tables open and locked.
*/
TABLE *open_proc_table_for_read(THD *thd, Open_tables_state *backup);
void close_proc_table(THD *thd, Open_tables_state *backup);
//
// Utilities...
//
// Do a "use newdb". The current db is stored at olddb.
// If newdb is the same as the current one, nothing is changed.
// dbchangedp is set to true if the db was actually changed.
int
sp_use_new_db(THD *thd, char *newdb, char *olddb, uint olddbmax,
bool no_access_check, bool *dbchangedp);
#endif /* _SP_H_ */