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.