This patch significantly reworks the way that savepoints are handled:
1) Memory management
Removes the trans_prealloc_size and trans_block_size variables which set up a separate mem_root for storing "savepoint data". Without the binlog, this separate memory root, which by default allocated 1M *for every single transaction regardless of whether savepoints were used*, was not useful any more.
2) No more DIY linked lists of SAVEPOINT pointers
The Session::transaction struct used to contain a member "savepoints" which was of type pointer to SAVEPOINT. This has been replaced with an STL std::deque<drizzled::NamedSavepoint> and the pointeri and linked-list fiddling is gone, replaced with STL conventions.
3) SAVEPOINT struct is now drizzled::NamedSavepoint
The SAVEPOINT struct has been converted to an STL container- safe class called drizzled::NamedSavepoint.
4) RollbackToSavepoint, Savepoint, and ReleaseSavepoint
RollbackToSavepoint, Savepoint, and ReleaseSavepoint classes have had their logic revamped and documented.
5) The innodb.test case had (has?) an error in it
The innodb.test case was testing a wrong assertion that a ROLLBACK TO SAVEPOINT x; should result in an error if called twice in a row. This is incorrect behaviour. If a ROLLBACK TO SAVEPOINT x; is executed, the savepoint x should stay on the top of the savepoint stack.
6) XID and XID_STATE classes made STL-container-safe
Places proper initializer lists and constructors for the XID and XID_STATE classes and removes use of the horrible memset(this, 0, sizeof(*this)); usage.
7) The various savepoint-handling routines use references
A switch was made to the various savepoint-handling routines of TransactionServices to ensure only references to a drizzled::NamedSavepoint were being passed, and not void pointers.