github.com/hy3/cuto@v0.9.8-0.20160830082821-aa6652f877b7/db/connection.go (about)

     1  // Copyright 2015 unirita Inc.
     2  // Created 2015/04/10 shanxia
     3  
     4  package db
     5  
     6  import (
     7  	"errors"
     8  	"fmt"
     9  	"os"
    10  
    11  	"database/sql"
    12  
    13  	"github.com/coopernurse/gorp"
    14  	_ "github.com/mattn/go-sqlite3"
    15  )
    16  
    17  type IConnection interface {
    18  	GetDbMap() *gorp.DbMap
    19  	GetDb() *sql.DB
    20  	Close()
    21  }
    22  
    23  type Connection struct {
    24  	db    *sql.DB     // DBコネクション
    25  	dbMap *gorp.DbMap // マッピング情報
    26  }
    27  
    28  var sqlite3_driver = "sqlite3"
    29  
    30  // SQLite3のセッションを接続し、テーブルとDTOのマッピングを行う。
    31  //
    32  // param - dbfile sqliteファイルのパス。
    33  //
    34  // return - コネクション情報とエラー情報
    35  func Open(dbfile string) (IConnection, error) {
    36  	if _, exist := os.Stat(dbfile); exist != nil {
    37  		return nil, errors.New(fmt.Sprintf("Not found dbfile[%v]", dbfile))
    38  	}
    39  	db, err := sql.Open(sqlite3_driver, dbfile)
    40  	if err != nil {
    41  		return nil, err
    42  	}
    43  	// 外部キーを有効にする。
    44  	db.Exec("PRAGMA foreign_keys=ON;")
    45  
    46  	// テーブルと構造体のマッピング。
    47  	dbmap := &gorp.DbMap{
    48  		Db:      db,
    49  		Dialect: gorp.SqliteDialect{},
    50  	}
    51  	jobNetworkMapping(dbmap)
    52  	jobMapping(dbmap)
    53  
    54  	return Connection{db, dbmap}, nil
    55  }
    56  
    57  func jobNetworkMapping(dbmap *gorp.DbMap) {
    58  	t := dbmap.AddTableWithName(JobNetworkResult{}, "JOBNETWORK").SetKeys(true, "ID")
    59  	t.ColMap("JobnetWork").Rename("JOBNETWORK")
    60  	t.ColMap("StartDate").Rename("STARTDATE")
    61  	t.ColMap("EndDate").Rename("ENDDATE")
    62  	t.ColMap("Status").Rename("STATUS")
    63  	t.ColMap("Detail").Rename("DETAIL")
    64  	t.ColMap("CreateDate").Rename("CREATEDATE")
    65  	t.ColMap("UpdateDate").Rename("UPDATEDATE")
    66  }
    67  
    68  func jobMapping(dbmap *gorp.DbMap) {
    69  	t := dbmap.AddTableWithName(JobResult{}, "JOB").SetKeys(false, "ID", "JobId")
    70  	t.ColMap("JobId").Rename("JOBID")
    71  	t.ColMap("JobName").Rename("JOBNAME")
    72  	t.ColMap("StartDate").Rename("STARTDATE")
    73  	t.ColMap("EndDate").Rename("ENDDATE")
    74  	t.ColMap("Status").Rename("STATUS")
    75  	t.ColMap("Detail").Rename("DETAIL")
    76  	t.ColMap("Rc").Rename("RC")
    77  	t.ColMap("Node").Rename("NODE")
    78  	t.ColMap("Port").Rename("PORT")
    79  	t.ColMap("Variable").Rename("VARIABLE")
    80  	t.ColMap("CreateDate").Rename("CREATEDATE")
    81  	t.ColMap("UpdateDate").Rename("UPDATEDATE")
    82  }
    83  
    84  // SQLite3とのセッションを切断する。
    85  func (c Connection) Close() {
    86  	c.db.Close()
    87  }
    88  
    89  // DBマッピング情報を返す。
    90  func (c Connection) GetDbMap() *gorp.DbMap {
    91  	return c.dbMap
    92  }
    93  
    94  // DBオブジェクトを返す。
    95  func (c Connection) GetDb() *sql.DB {
    96  	return c.db
    97  }