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  }