github.com/hy3/cuto@v0.9.8-0.20160830082821-aa6652f877b7/db/query/jobquery.go (about) 1 // Copyright 2015 unirita Inc. 2 // Created 2015/04/10 shanxia 3 4 package query 5 6 import ( 7 "fmt" 8 9 "github.com/unirita/cuto/db" 10 ) 11 12 type jobQuery struct { 13 sql string // SQL文 14 conn db.IConnection // DBコネクション 15 } 16 17 // JOBテーブルの総件数を取得する。 18 func JobCountAll(conn db.IConnection) int { 19 num, _ := conn.GetDbMap().SelectInt("select count(*) from JOB") 20 return int(num) 21 } 22 23 // ジョブネットワークのインスタンスIDを指定して、ジョブ情報を取得する。 24 // 25 // param - conn 接続済みのDBコネクション。 26 // 27 // param - nid 検索に使用するジョブネットワークのインスタンスID。 28 // 29 // param - orderby 昇順(query.ORDERBY_ASC) / 降順(query.ORDERBY_DESC) 30 // 31 // return ジョブネットワークレコードのスライスとエラー情報 32 func GetJobsOfTargetNetwork(conn db.IConnection, nid int, orderby int) ([]*db.JobResult, error) { 33 q := CreateJobQuery(conn) 34 q.AddAndWhereID(nid) 35 q.AddOrderBy(orderby) 36 37 list, err := conn.GetDbMap().Select(db.JobResult{}, q.sql) 38 if err != nil { 39 return nil, err 40 } 41 var results []*db.JobResult 42 for _, l := range list { 43 r := l.(*db.JobResult) 44 results = append(results, r) 45 } 46 return results, nil 47 } 48 49 // ジョブネットワークのインスタンスIDを指定して、ジョブ情報をマップ形式で取得する。 50 func GetJobMapOfTargetNetwork(conn db.IConnection, nid int) (map[string]*db.JobResult, error) { 51 q := CreateJobQuery(conn) 52 q.AddAndWhereID(nid) 53 54 list, err := conn.GetDbMap().Select(db.JobResult{}, q.sql) 55 if err != nil { 56 return nil, err 57 } 58 59 results := make(map[string]*db.JobResult) 60 for _, l := range list { 61 r := l.(*db.JobResult) 62 results[r.JobId] = r 63 } 64 return results, nil 65 } 66 67 func CreateJobQuery(conn db.IConnection) *jobQuery { 68 sql := fmt.Sprintf("select ID,JOBID,JOBNAME,STARTDATE,ENDDATE,STATUS,DETAIL,RC,NODE,PORT,VARIABLE,CREATEDATE,UPDATEDATE from JOB where 0=0 ") 69 return &jobQuery{sql, conn} 70 } 71 72 // 引数に指定したIDと合致する条件を追加。 73 func (j *jobQuery) AddAndWhereID(id int) { 74 j.sql = fmt.Sprintf(" %v and ID = %v ", j.sql, id) 75 } 76 77 // ORDER BY句を追加する。 78 // 引数へは ORDERBY_ASC または ORDERBY_DESC を指定する。 79 func (j *jobQuery) AddOrderBy(orderby int) { 80 if orderby == ORDERBY_ASC { 81 j.sql = fmt.Sprintf("%s order by UPDATEDATE asc ", j.sql) 82 } else { 83 j.sql = fmt.Sprintf("%s order by UPDATEDATE desc ", j.sql) 84 } 85 }