summaryrefslogtreecommitdiff
path: root/sql/sp_head.h
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2017-09-28 17:48:33 +0400
committerAlexander Barkov <bar@mariadb.org>2017-09-28 17:48:33 +0400
commit139441d0a0e7964898f33659429c22e33bd20dda (patch)
treebeb715db10722c6d52adb838d85ae185f1b4bd91 /sql/sp_head.h
parent596baeb1bfb812ad9b458eba0f6ea7d9bcdf4671 (diff)
downloadmariadb-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.h6
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