15.16.4. Implementing COMMIT
During a commit operation, all changes made during a transaction
are made permanent and a rollback operation is not possible
after that. Depending on the transaction isolation used, this
may be the first time such changes are visible to other threads.
To support COMMIT
, create a function that
matches this definition:
int (*commit)(THD *thd, bool all);
The function name is then listed in the
rollback
(twelfth) entry of
the handlerton.
The THD
parameter is used to identify the
transaction that needs to be committed, while the bool
all
parameter indicates if this is a full transaction
commit or just the end of a statement that is part of the
transaction.
Details of implementing a COMMIT
operation
will vary by storage engine. Examples can be found in
ha_innodb.cc
and
ha_berkeley.cc
.
If the server is in auto-commit mode, the storage engine should
automatically commit all read-only statements such as
SELECT
.
In a storage engine, "auto-committing" works by counting locks.
Increment the count for every call to
external_lock()
, decrement when
external_lock()
is called with an argument
of F_UNLCK
. When the count drops to zero,
trigger a commit.