#
# == dbc/dbc
#
#
require 'dbi/dbi'

module DBC

  class DBError < StandardError
  end

  class Transaction
    def begin
    end

  end

  #
  # データベースとの接続セッション。
  #
  class Session
    def initialize(dbh, auto_commit)
      @dbh = dbh
      @auto_commit ||= auto_commit
    end

    def connected?
      return @dbh.connected?
    end

    def execute
    end

    def update
    end

    def transaction
      unless @auto_commit
      end
    end

    def close
      @dbh.disconnect
    end
  end

  #
  # セッション管理クラス。データベースとのコネクションを管理する。
  #
  class SessionManager
    
    # コンストラクタ。
    # === ARGS
    # driver:: 接続ドライバ
    # host:: 接続先ホスト
    # db_name:: 接続先データベース
    # user:: ユーザ
    # password:: パスワード
    def initialize(driver, host, db_name, user, password)
      @driver = driver
      @host = host
      @db_name = db_name
      @user = user
      @password = password
      @sessions = []
    end

    # 新しいSessionを生成する。
    # === ARGS
    # auto_commit::自動コミットモードを表すフラグ。trueの場合は自動コミットモードON。
    # === RETURNS
    # Session
    def new_session(auto_commit = true)
      dbh = Session.new(DBI.connect("dbi:#{driver}:#{db_name}:#{host}",
                                            @user, @password))
      session = Session.new(dbh, auto_commit)
      @sessions << session
      return session
    end
    
    # このセッションマネージャが生成した、全てのSessionをクローズする。
    def close
      @sessions.each do |s|
        s.close
      end
    end
  end

end
