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 }