github.com/hy3/cuto@v0.9.8-0.20160830082821-aa6652f877b7/db/query/jobnetquery.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 const ( 13 ORDERBY_ASC = iota 14 ORDERBY_DESC 15 ) 16 17 type JobNetResultQuery struct { 18 sql string // SQL文 19 conn db.IConnection // コネクション 20 } 21 22 // JOBNETWORKテーブルの総件数を取得する。 23 func JobnetworkCountAll(conn db.IConnection) int { 24 num, _ := conn.GetDbMap().SelectInt("select count(*) from JOBNETWORK") 25 return int(num) 26 } 27 28 func CreateJobnetworkQuery(conn db.IConnection) *JobNetResultQuery { 29 sql := fmt.Sprintf("select ID,JOBNETWORK,STARTDATE,ENDDATE,STATUS,DETAIL,PID,CREATEDATE,UPDATEDATE from JOBNETWORK where 0=0 ") 30 return &JobNetResultQuery{sql, conn} 31 } 32 33 // ジョブネットワークのインスタンスIDを指定して、ジョブネットワーク詳細情報を取得する。 34 func GetJobnetwork(conn db.IConnection, id int) (*db.JobNetworkResult, error) { 35 q := CreateJobnetworkQuery(conn) 36 q.AddAndWhereID(id) 37 38 results, err := q.GetJobnetworkList() 39 if err != nil { 40 return nil, err 41 } else if len(results) != 1 { 42 return nil, fmt.Errorf("Network[id = %d] not found.", id) 43 } 44 return results[0], nil 45 } 46 47 // ジョブネットワーク名を指定して、一覧を取得する。 48 // 49 // param - conn 接続済みのDBコネクション。 50 // 51 // param - name 検索に使用するジョブネットワーク名。 52 // 53 // param - orderby 昇順(query.ORDERBY_ASC) / 降順(query.ORDERBY_DESC) 54 // 55 // return ジョブネットワークレコードのスライスとエラー情報 56 func GetJobnetworkListFromName(conn db.IConnection, name string, orderby int) ([]*db.JobNetworkResult, error) { 57 q := CreateJobnetworkQuery(conn) 58 q.AddAndWhereJobnetwork(name) 59 q.AddOrderBy(orderby) 60 61 return q.GetJobnetworkList() 62 } 63 64 // ジョブネットワーク一覧を取得する。 65 func (j *JobNetResultQuery) GetJobnetworkList() ([]*db.JobNetworkResult, error) { 66 if j.conn == nil { 67 return nil, fmt.Errorf("Invalid DB Connection.") 68 } 69 list, err := j.conn.GetDbMap().Select(db.JobNetworkResult{}, j.sql) 70 if err != nil { 71 return nil, err 72 } 73 var results []*db.JobNetworkResult 74 for _, l := range list { 75 r := l.(*db.JobNetworkResult) 76 results = append(results, r) 77 } 78 return results, nil 79 } 80 81 // 引数に指定したIDと合致する条件を追加。 82 func (j *JobNetResultQuery) AddAndWhereID(id int) { 83 j.sql = fmt.Sprintf(" %v and ID = %v ", j.sql, id) 84 } 85 86 // 引数に指定したJOBNETWORKと合致する条件を追加。 87 func (j *JobNetResultQuery) AddAndWhereJobnetwork(jobnetwork string) { 88 j.sql = fmt.Sprintf(" %v and JOBNETWORK = '%v' ", j.sql, jobnetwork) 89 } 90 91 // 引数に指定したSTARTDATEよりも小さい日付[ STARTDATE < '引数' ]を取得。 92 func (j *JobNetResultQuery) AddAndWhereLessThanStartdate(startDate string) { 93 j.sql = fmt.Sprintf(" %v and STARTDATE < '%v' ", j.sql, startDate) 94 } 95 96 // 引数に指定したSTARTDATEよりも大きい日付[ '引数' < STARTDATE ]を取得。 97 func (j *JobNetResultQuery) AddAndWhereMoreThanStartdate(startDate string) { 98 j.sql = fmt.Sprintf(" %v and '%v' < STARTDATE ", j.sql, startDate) 99 } 100 101 // 引数に指定したSTATUSと合致する条件を追加。 102 func (j *JobNetResultQuery) AddAndWhereStatus(status int) { 103 j.sql = fmt.Sprintf(" %v and STATUS = %v ", j.sql, status) 104 } 105 106 // ORDER BY句を追加する。 107 // 引数へは ORDERBY_ASC または ORDERBY_DESC を指定する。 108 func (j *JobNetResultQuery) AddOrderBy(orderby int) { 109 if orderby == ORDERBY_ASC { 110 j.sql = fmt.Sprintf("%s order by UPDATEDATE asc ", j.sql) 111 } else { 112 j.sql = fmt.Sprintf("%s order by UPDATEDATE desc ", j.sql) 113 } 114 }