Below is the list of changes that have just been committed into a local
5.0 repository of kostja. When kostja does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet
1.1935 05/06/07 16:28:08 konstantin@stripped +3 -0
Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/opt/local/work/mysql-5.0-7306-final
sql/sql_yacc.yy
1.391 05/06/07 16:28:05 konstantin@stripped +0 -0
Auto merged
sql/sql_parse.cc
1.450 05/06/07 16:28:05 konstantin@stripped +0 -0
Auto merged
sql/sql_class.h
1.237 05/06/07 16:28:05 konstantin@stripped +0 -0
Auto merged
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: konstantin
# Host: dragonfly.local
# Root: /opt/local/work/mysql-5.0-7306-final/RESYNC
--- 1.236/sql/sql_class.h 2005-06-07 14:13:54 +04:00
+++ 1.237/sql/sql_class.h 2005-06-07 16:28:05 +04:00
@@ -1063,6 +1063,8 @@
THD_TRANS all; // Trans since BEGIN WORK
THD_TRANS stmt; // Trans for current statement
bool on; // see ha_enable_transaction()
+ /* TRUE if we are inside of trigger or stored function. */
+ bool in_sub_stmt;
XID xid; // transaction identifier
enum xa_states xa_state; // used by external XA only
/*
--- 1.449/sql/sql_parse.cc 2005-06-07 14:13:54 +04:00
+++ 1.450/sql/sql_parse.cc 2005-06-07 16:28:05 +04:00
@@ -125,6 +125,11 @@
{
int error=0;
DBUG_ENTER("end_active_trans");
+ if (unlikely(thd->transaction.in_sub_stmt))
+ {
+ my_error(ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG, MYF(0));
+ DBUG_RETURN(1);
+ }
if (thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN |
OPTION_TABLE_LOCK))
{
@@ -143,6 +148,15 @@
static bool begin_trans(THD *thd)
{
int error=0;
+ /*
+ QQ: May be it is better to simply prohibit COMMIT and ROLLBACK in
+ stored routines as SQL2003 suggests?
+ */
+ if (unlikely(thd->transaction.in_sub_stmt))
+ {
+ my_error(ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG, MYF(0));
+ return 1;
+ }
if (thd->locked_tables)
{
thd->lock=thd->locked_tables;
@@ -1337,6 +1351,15 @@
int res= 0;
DBUG_ENTER("end_trans");
+ /*
+ QQ: May be it is better to simply prohibit COMMIT and ROLLBACK in
+ stored routines as SQL2003 suggests?
+ */
+ if (unlikely(thd->transaction.in_sub_stmt))
+ {
+ my_error(ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG, MYF(0));
+ DBUG_RETURN(1);
+ }
switch (completion) {
case COMMIT:
/*
--- 1.390/sql/sql_yacc.yy 2005-06-07 14:13:55 +04:00
+++ 1.391/sql/sql_yacc.yy 2005-06-07 16:28:05 +04:00
@@ -1138,6 +1138,11 @@
| CREATE opt_unique_or_fulltext INDEX_SYM ident key_alg ON table_ident
{
LEX *lex=Lex;
+ if (lex->sphead && lex->sphead->m_type !=
TYPE_ENUM_PROCEDURE)
+ {
+ my_error(ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG, MYF(0));
+ YYABORT;
+ }
lex->sql_command= SQLCOM_CREATE_INDEX;
if (!lex->current_select->add_table_to_list(lex->thd, $7, NULL,
TL_OPTION_UPDATING))
@@ -3285,6 +3290,11 @@
{
THD *thd= YYTHD;
LEX *lex= thd->lex;
+ if (lex->sphead && lex->sphead->m_type != TYPE_ENUM_PROCEDURE)
+ {
+ my_error(ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG, MYF(0));
+ YYABORT;
+ }
lex->sql_command= SQLCOM_ALTER_TABLE;
lex->name= 0;
lex->duplicates= DUP_ERROR;
@@ -3593,8 +3603,14 @@
start:
START_SYM TRANSACTION_SYM start_transaction_opts
{
- Lex->sql_command = SQLCOM_BEGIN;
- Lex->start_transaction_opt= $3;
+ LEX *lex= Lex;
+ if (lex->sphead && lex->sphead->m_type != TYPE_ENUM_PROCEDURE)
+ {
+ my_error(ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG, MYF(0));
+ YYABORT;
+ }
+ lex->sql_command= SQLCOM_BEGIN;
+ lex->start_transaction_opt= $3;
}
;
@@ -3772,7 +3788,13 @@
rename:
RENAME table_or_tables
{
- Lex->sql_command=SQLCOM_RENAME_TABLE;
+ LEX *lex= Lex;
+ if (lex->sphead && lex->sphead->m_type != TYPE_ENUM_PROCEDURE)
+ {
+ my_error(ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG, MYF(0));
+ YYABORT;
+ }
+ lex->sql_command=SQLCOM_RENAME_TABLE;
}
table_to_table_list
{}
@@ -5756,10 +5778,21 @@
lex->sql_command = SQLCOM_DROP_TABLE;
lex->drop_temporary= $2;
lex->drop_if_exists= $4;
+ if (!lex->drop_temporary && lex->sphead &&
+ lex->sphead->m_type != TYPE_ENUM_PROCEDURE)
+ {
+ my_error(ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG, MYF(0));
+ YYABORT;
+ }
}
| DROP INDEX_SYM ident ON table_ident {}
{
LEX *lex=Lex;
+ if (lex->sphead && lex->sphead->m_type !=
TYPE_ENUM_PROCEDURE)
+ {
+ my_error(ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG, MYF(0));
+ YYABORT;
+ }
lex->sql_command= SQLCOM_DROP_INDEX;
lex->alter_info.drop_list.empty();
lex->alter_info.drop_list.push_back(new Alter_drop(Alter_drop::KEY,
@@ -5807,6 +5840,11 @@
{
THD *thd= YYTHD;
LEX *lex= thd->lex;
+ if (lex->sphead && lex->sphead->m_type !=
TYPE_ENUM_PROCEDURE)
+ {
+ my_error(ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG, MYF(0));
+ YYABORT;
+ }
lex->sql_command= SQLCOM_DROP_VIEW;
lex->drop_if_exists= $3;
}
@@ -8369,6 +8407,11 @@
BEGIN_SYM
{
LEX *lex=Lex;
+ if (lex->sphead && lex->sphead->m_type != TYPE_ENUM_PROCEDURE)
+ {
+ my_error(ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG, MYF(0));
+ YYABORT;
+ }
lex->sql_command = SQLCOM_BEGIN;
lex->start_transaction_opt= 0;
}
@@ -8401,6 +8444,11 @@
COMMIT_SYM opt_work opt_chain opt_release
{
LEX *lex=Lex;
+ if (lex->sphead && lex->sphead->m_type != TYPE_ENUM_PROCEDURE)
+ {
+ my_error(ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG, MYF(0));
+ YYABORT;
+ }
lex->sql_command= SQLCOM_COMMIT;
lex->tx_chain= $3;
lex->tx_release= $4;
@@ -8411,6 +8459,11 @@
ROLLBACK_SYM opt_work opt_chain opt_release
{
LEX *lex=Lex;
+ if (lex->sphead && lex->sphead->m_type != TYPE_ENUM_PROCEDURE)
+ {
+ my_error(ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG, MYF(0));
+ YYABORT;
+ }
lex->sql_command= SQLCOM_ROLLBACK;
lex->tx_chain= $3;
lex->tx_release= $4;
| Thread |
|---|
| • bk commit into 5.0 tree (konstantin:1.1935) | konstantin | 7 Jun |