text: 'use strict';
  
  /**
   * Module dependencies.
   */
  
  const util = require('util');
  const wrap = require('co-wrap-all');
  const Operator = require('./operator');
  
  module.exports = RDSTransaction;
  
  function RDSTransaction(conn) {
    Operator.call(this);
    this.conn = conn;
    this.isCommit = false;
    this.isRollback = false;
  }
  util.inherits(RDSTransaction, Operator);
  
  const proto = RDSTransaction.prototype;
  
  proto.commit = function* () {
    this._check();
    try {
      return yield this.conn.commit();
    } finally {
      this.conn.release();
      this.conn = null;
    }
  };
  
  proto.rollback = function* () {
    this._check();
    try {
      return yield this.conn.rollback();
    } finally {
      this.conn.release();
      this.conn = null;
    }
  };
  
  proto._query = function* (sql) {
    this._check();
    return yield this.conn._query(sql);
  };
  
  proto._check = function() {
    if (!this.conn) {
      throw new Error('transaction was commit or rollback');
    }
  };
  
  wrap(proto);
  