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  }