/// <summary>
        /// Constructs the transaction object, binding it to the supplied connection
        /// </summary>
        /// <param name="connection">The connection to open a transaction on</param>
        /// <param name="deferredLock">TRUE to defer the writelock, or FALSE to lock immediately</param>
        internal SqliteTransaction(SqliteAdoConnection connection, bool deferredLock) {
            _cnn = connection;
            _version = _cnn._version;

            _level = (deferredLock == true) ? IsolationLevel.ReadCommitted : IsolationLevel.Serializable;

            if (_cnn._transactionLevel++ == 0) {
                try {
                    using (SqliteCommand cmd = _cnn.CreateCommand()) {
                        if (!deferredLock)
                            cmd.CommandText = "BEGIN IMMEDIATE";
                        else
                            cmd.CommandText = "BEGIN";

                        cmd.ExecuteNonQuery();
                    }
                }
                catch (SqliteException) {
                    _cnn._transactionLevel--;
                    _cnn = null;
                    throw;
                }
            }
        }
 internal static void IssueRollback(SqliteAdoConnection cnn) {
     using (SqliteCommand cmd = cnn.CreateCommand()) {
         cmd.CommandText = "ROLLBACK";
         cmd.ExecuteNonQuery();
     }
 }