diff options
author | Alexander Barkov <bar@mariadb.org> | 2017-09-28 17:48:33 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.org> | 2017-09-28 17:48:33 +0400 |
commit | 139441d0a0e7964898f33659429c22e33bd20dda (patch) | |
tree | beb715db10722c6d52adb838d85ae185f1b4bd91 /sql/sp_head.h | |
parent | 596baeb1bfb812ad9b458eba0f6ea7d9bcdf4671 (diff) | |
download | mariadb-git-139441d0a0e7964898f33659429c22e33bd20dda.tar.gz |
A cleanup for MDEV-13919 sql_mode=ORACLE: Derive length of VARCHAR SP param...
The intent of this patch is to avoid copying arguments from
a pair "Item **args, uint arg_count" to List<Item> in
sp_head::execute_function(). If the number of a stored function parameters
is huge, such copying can affect performance.
Change:
1. Adding a new method Row_definition_list::adjust_formal_params_to_actual_params,
which accepts a pair of "Item **, uint".
2. Modifying the code to use the new method:
- the calls for sp_rcontext::retrieve_field_definitions() and
Row_definition_list::adjust_formal_params_to_actual_params() have
been moved from sp_rcontext::create() to sp_head::rcontext_create(),
to handle different argument notations easier (Item** vs List<Item>).
- sp_rcontext::create() now assumes that the passed Row_definition_list
is already adjusted to the actual SP parameters, and all "TYPE OF"
and "ROWTYPE OF" references are resolved.
3. Removing creation of List<Item> in sp_head::execute_procedure(),
using the code with "Item**, uint" notation instead.
4. Improvement of the code for MDEV-10577:
As a good side effect, this patch gets rid of double security context
switch inside sp_head::execute_trigger():
sp_rcontext is created when the context is already switched,
so the second context switch inside sp_head::rcontext_create() was
redundant. This is solved by adding a "bool switch_secutiry_ctx" parameter
to rcontext_create(), so now execute_function() and execute_procedure()
pass "true", while execute_trigger() passes "false".
Diffstat (limited to 'sql/sp_head.h')
-rw-r--r-- | sql/sp_head.h | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/sql/sp_head.h b/sql/sp_head.h index 2f4f21a76f4..272bc5d445c 100644 --- a/sql/sp_head.h +++ b/sql/sp_head.h @@ -216,7 +216,11 @@ public: } sp_rcontext *rcontext_create(THD *thd, Field *retval, List<Item> *args); - + sp_rcontext *rcontext_create(THD *thd, Field *retval, + Item **args, uint arg_count); + sp_rcontext *rcontext_create(THD *thd, Field *retval, + Row_definition_list *list, + bool switch_security_ctx); private: /** Version of the stored routine cache at the moment when the |