00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include <config.h>
00022 #include <drizzled/show.h>
00023 #include <drizzled/session.h>
00024 #include <drizzled/statement/release_savepoint.h>
00025 #include <drizzled/transaction_services.h>
00026 #include <drizzled/named_savepoint.h>
00027 #include <drizzled/sql_lex.h>
00028 #include <drizzled/session/transactions.h>
00029 #include <string>
00030
00031 using namespace std;
00032
00033 namespace drizzled {
00034
00035 bool statement::ReleaseSavepoint::execute()
00036 {
00037
00038
00039
00040
00041
00042 deque<NamedSavepoint> &savepoints= transaction().savepoints;
00043 deque<NamedSavepoint>::iterator iter;
00044
00045 for (iter= savepoints.begin(); iter != savepoints.end(); ++iter)
00046 {
00047 NamedSavepoint &sv= *iter;
00048 const string &sv_name= sv.getName();
00049 if (my_strnncoll(system_charset_info, (unsigned char *) lex().ident.data(),
00050 lex().ident.size(), (unsigned char *) sv_name.c_str(), sv_name.size()) == 0)
00051 break;
00052 }
00053 if (iter != savepoints.end())
00054 {
00055 NamedSavepoint &sv= *iter;
00056 (void) TransactionServices::releaseSavepoint(session(), sv);
00057 savepoints.erase(iter);
00058 session().my_ok();
00059 }
00060 else
00061 {
00062 my_error(ER_SP_DOES_NOT_EXIST, MYF(0), "SAVEPOINT", lex().ident.data());
00063 }
00064 return false;
00065 }
00066
00067 }