github.com/pf-qiu/concourse/v6@v6.7.3-0.20201207032516-1f455d73275f/atc/db/worker_resource_certs.go (about) 1 package db 2 3 import ( 4 "database/sql" 5 6 sq "github.com/Masterminds/squirrel" 7 ) 8 9 type WorkerResourceCerts struct { 10 WorkerName string 11 CertsPath string 12 } 13 14 type UsedWorkerResourceCerts struct { 15 ID int 16 } 17 18 func (workerResourceCerts WorkerResourceCerts) Find(runner sq.BaseRunner) (*UsedWorkerResourceCerts, bool, error) { 19 var id int 20 err := workerResourceCerts.findQuery(). 21 RunWith(runner). 22 QueryRow(). 23 Scan(&id) 24 25 if err != nil { 26 if err == sql.ErrNoRows { 27 return nil, false, nil 28 } 29 30 return nil, false, err 31 } 32 33 return &UsedWorkerResourceCerts{ID: id}, true, nil 34 } 35 36 func (workerResourceCerts WorkerResourceCerts) FindOrCreate(tx Tx) (*UsedWorkerResourceCerts, error) { 37 uwrc, found, err := workerResourceCerts.Find(tx) 38 if err != nil { 39 return nil, err 40 } 41 42 if found { 43 return uwrc, err 44 } 45 46 return workerResourceCerts.create(tx) 47 } 48 49 func (workerResourceCerts WorkerResourceCerts) findQuery() sq.SelectBuilder { 50 return psql.Select("id"). 51 From("worker_resource_certs"). 52 Where(sq.Eq{ 53 "worker_name": workerResourceCerts.WorkerName, 54 "certs_path": workerResourceCerts.CertsPath, 55 }) 56 } 57 58 func (workerResourceCerts WorkerResourceCerts) create(tx Tx) (*UsedWorkerResourceCerts, error) { 59 var id int 60 err := psql.Insert("worker_resource_certs"). 61 Columns( 62 "worker_name", 63 "certs_path", 64 ). 65 Values( 66 workerResourceCerts.WorkerName, 67 workerResourceCerts.CertsPath, 68 ). 69 Suffix("RETURNING id"). 70 RunWith(tx). 71 QueryRow(). 72 Scan(&id) 73 if err != nil { 74 return nil, err 75 } 76 77 return &UsedWorkerResourceCerts{ID: id}, nil 78 }