summaryrefslogtreecommitdiff
path: root/sql/sql_prepare.cc
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2021-03-05 12:54:43 +0200
committerMarko Mäkelä <marko.makela@mariadb.com>2021-03-05 12:54:43 +0200
commit10d544aa7b305210246a976ca47a7559f8b78f72 (patch)
treea6df2319a67afbc523be05789c77e9a28a49e29c /sql/sql_prepare.cc
parentaa4f76bed715ec1016260f593e9cf4a8a1a4da36 (diff)
parentfcc9f8b10cd2f497ff410b592808eedb3ee5f212 (diff)
downloadmariadb-git-10d544aa7b305210246a976ca47a7559f8b78f72.tar.gz
Merge 10.4 into 10.5
Diffstat (limited to 'sql/sql_prepare.cc')
-rw-r--r--sql/sql_prepare.cc16
1 files changed, 16 insertions, 0 deletions
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc
index 21c8f739dd2..33ced717ab9 100644
--- a/sql/sql_prepare.cc
+++ b/sql/sql_prepare.cc
@@ -4260,6 +4260,16 @@ bool Prepared_statement::prepare(const char *packet, uint packet_len)
*/
MDL_savepoint mdl_savepoint= thd->mdl_context.mdl_savepoint();
+ /*
+ Set variables specified by
+ SET STATEMENT var1=value1 [, var2=value2, ...] FOR <statement>
+ clause for duration of prepare phase. Original values of variable
+ listed in the SET STATEMENT clause is restored right after return
+ from the function check_prepared_statement()
+ */
+ if (likely(error == 0))
+ error= run_set_statement_if_requested(thd, lex);
+
/*
The only case where we should have items in the thd->free_list is
after stmt->set_params_from_vars(), which may in some cases create
@@ -4278,6 +4288,12 @@ bool Prepared_statement::prepare(const char *packet, uint packet_len)
lex->context_analysis_only&= ~CONTEXT_ANALYSIS_ONLY_PREPARE;
}
+ /*
+ Restore original values of variables modified on handling
+ SET STATEMENT clause.
+ */
+ thd->lex->restore_set_statement_var();
+
/* The order is important */
lex->unit.cleanup();