summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <heikki@hundin.mysql.fi>2003-06-06 04:18:58 +0300
committerunknown <heikki@hundin.mysql.fi>2003-06-06 04:18:58 +0300
commit1e7dfec5c7db9a042d3ad7465a4686f28ae410d8 (patch)
treecaf00cba1213016e725b793c3eb05b24fa3a876c /sql
parentbd414c301c1bbadecf385e1c10aa8a27cd76f61a (diff)
downloadmariadb-git-1e7dfec5c7db9a042d3ad7465a4686f28ae410d8.tar.gz
sql_yacc.yy, sql_parse.cc, sql_lex.h, mysqld.cc, lex.h:
Add syntax SAVEPOINT id and ROLLBACK TO SAVEPOINT id. This is compatible with DB2 and Oracle but not with SQL Server. Savepoints do not do anything yet, this is just parsing. sql/lex.h: Add syntax SAVEPOINT id and ROLLBACK TO SAVEPOINT id. This is compatible with DB2 and Oracle but not with SQL Server. Savepoints do not do anything yet, this is just parsing. sql/mysqld.cc: Add syntax SAVEPOINT id and ROLLBACK TO SAVEPOINT id. This is compatible with DB2 and Oracle but not with SQL Server. Savepoints do not do anything yet, this is just parsing. sql/sql_lex.h: Add syntax SAVEPOINT id and ROLLBACK TO SAVEPOINT id. This is compatible with DB2 and Oracle but not with SQL Server. Savepoints do not do anything yet, this is just parsing. sql/sql_parse.cc: Add syntax SAVEPOINT id and ROLLBACK TO SAVEPOINT id. This is compatible with DB2 and Oracle but not with SQL Server. Savepoints do not do anything yet, this is just parsing. sql/sql_yacc.yy: Add syntax SAVEPOINT id and ROLLBACK TO SAVEPOINT id. This is compatible with DB2 and Oracle but not with SQL Server. Savepoints do not do anything yet, this is just parsing.
Diffstat (limited to 'sql')
-rw-r--r--sql/lex.h1
-rw-r--r--sql/mysqld.cc1
-rw-r--r--sql/sql_lex.h4
-rw-r--r--sql/sql_parse.cc3
-rw-r--r--sql/sql_yacc.yy24
5 files changed, 29 insertions, 4 deletions
diff --git a/sql/lex.h b/sql/lex.h
index d9a84dd25b4..3bbe1da185e 100644
--- a/sql/lex.h
+++ b/sql/lex.h
@@ -309,6 +309,7 @@ static SYMBOL symbols[] = {
{ "ROLLUP", SYM(ROLLUP_SYM),0,0},
{ "ROW", SYM(ROW_SYM),0,0},
{ "ROWS", SYM(ROWS_SYM),0,0},
+ { "SAVEPOINT", SYM(SAVEPOINT_SYM),0,0},
{ "SECOND", SYM(SECOND_SYM),0,0},
{ "SELECT", SYM(SELECT_SYM),0,0},
{ "SERIALIZABLE", SYM(SERIALIZABLE_SYM),0,0},
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index 315931094c2..7883b9700ad 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -4021,6 +4021,7 @@ struct show_var_st status_vars[]= {
{"Com_restore_table", (char*) (com_stat+(uint) SQLCOM_RESTORE_TABLE),SHOW_LONG},
{"Com_revoke", (char*) (com_stat+(uint) SQLCOM_REVOKE),SHOW_LONG},
{"Com_rollback", (char*) (com_stat+(uint) SQLCOM_ROLLBACK),SHOW_LONG},
+ {"Com_savepoint", (char*) (com_stat+(uint) SQLCOM_SAVEPOINT),SHOW_LONG},
{"Com_select", (char*) (com_stat+(uint) SQLCOM_SELECT),SHOW_LONG},
{"Com_set_option", (char*) (com_stat+(uint) SQLCOM_SET_OPTION),SHOW_LONG},
{"Com_show_binlog_events", (char*) (com_stat+(uint) SQLCOM_SHOW_BINLOG_EVENTS),SHOW_LONG},
diff --git a/sql/sql_lex.h b/sql/sql_lex.h
index a905871e629..7d931399782 100644
--- a/sql/sql_lex.h
+++ b/sql/sql_lex.h
@@ -54,7 +54,8 @@ enum enum_sql_command {
SQLCOM_CREATE_FUNCTION, SQLCOM_DROP_FUNCTION,
SQLCOM_REVOKE,SQLCOM_OPTIMIZE, SQLCOM_CHECK,
SQLCOM_FLUSH, SQLCOM_KILL, SQLCOM_ANALYZE,
- SQLCOM_ROLLBACK, SQLCOM_COMMIT, SQLCOM_SLAVE_START, SQLCOM_SLAVE_STOP,
+ SQLCOM_ROLLBACK, SQLCOM_COMMIT, SQLCOM_SAVEPOINT,
+ SQLCOM_SLAVE_START, SQLCOM_SLAVE_STOP,
SQLCOM_BEGIN, SQLCOM_LOAD_MASTER_TABLE, SQLCOM_CHANGE_MASTER,
SQLCOM_RENAME_TABLE, SQLCOM_BACKUP_TABLE, SQLCOM_RESTORE_TABLE,
SQLCOM_RESET, SQLCOM_PURGE, SQLCOM_SHOW_BINLOGS,
@@ -154,6 +155,7 @@ typedef struct st_lex
SQL_LIST proc_list, auxilliary_table_list;
TYPELIB *interval;
create_field *last_field;
+ char* savepoint_name; // Transaction savepoint id
Item *default_value;
CONVERT *convert_set;
CONVERT *thd_convert_set; // Set with SET CHAR SET
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index b06a48f9045..7447ba44e76 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -2533,6 +2533,9 @@ mysql_execute_command(void)
res= -1;
thd->options&= ~(ulong) (OPTION_BEGIN | OPTION_STATUS_NO_TRANS_UPDATE);
break;
+ case SQLCOM_SAVEPOINT:
+ send_ok(&thd->net);
+ break;
default: /* Impossible */
send_ok(&thd->net);
break;
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index b0c81d6f6b0..2ef0992cdf7 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -135,6 +135,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token RESET_SYM
%token ROLLBACK_SYM
%token ROLLUP_SYM
+%token SAVEPOINT_SYM
%token SELECT_SYM
%token SHOW
%token SLAVE
@@ -573,7 +574,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
query verb_clause create change select do drop insert replace insert2
insert_values update delete truncate rename
show describe load alter optimize flush
- reset purge begin commit rollback slave master_def master_defs
+ reset purge begin commit rollback savepoint
+ slave master_def master_defs
repair restore backup analyze check start
field_list field_list_item field_spec kill column_def key_def
select_item_list select_item values_list no_braces
@@ -649,6 +651,7 @@ verb_clause:
| restore
| revoke
| rollback
+ | savepoint
| select
| set
| slave
@@ -3382,6 +3385,7 @@ keyword:
| ROWS_SYM {}
| ROW_FORMAT_SYM {}
| ROW_SYM {}
+ | SAVEPOINT_SYM {}
| SECOND_SYM {}
| SERIALIZABLE_SYM {}
| SESSION_SYM {}
@@ -3915,8 +3919,22 @@ commit:
COMMIT_SYM { Lex->sql_command = SQLCOM_COMMIT;};
rollback:
- ROLLBACK_SYM { Lex->sql_command = SQLCOM_ROLLBACK;};
-
+ ROLLBACK_SYM
+ {
+ Lex->sql_command = SQLCOM_ROLLBACK;
+ Lex->savepoint_name = NULL;
+ }
+ | ROLLBACK_SYM TO_SYM SAVEPOINT_SYM ident
+ {
+ Lex->sql_command = SQLCOM_ROLLBACK;
+ Lex->savepoint_name = $4.str;
+ };
+savepoint:
+ SAVEPOINT_SYM ident
+ {
+ Lex->sql_command = SQLCOM_SAVEPOINT;
+ Lex->savepoint_name = $2.str;
+ };
/*
** UNIONS : glue selects together