Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c5b542a

Browse files
committed
chore: add db queries for dynamic parameters
1 parent 1360bfe commit c5b542a

File tree

10 files changed

+222
-0
lines changed

10 files changed

+222
-0
lines changed

coderd/database/dbauthz/dbauthz.go

+35
Original file line numberDiff line numberDiff line change
@@ -1741,6 +1741,18 @@ func (q *querier) GetFileByID(ctx context.Context, id uuid.UUID) (database.File,
17411741
return file, nil
17421742
}
17431743

1744+
func (q *querier) GetFileIDByTemplateVersionID(ctx context.Context, templateVersionID uuid.UUID) (uuid.UUID, error) {
1745+
fileID, err := q.db.GetFileIDByTemplateVersionID(ctx, templateVersionID)
1746+
if err != nil {
1747+
return uuid.Nil, err
1748+
}
1749+
err = q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceFile.WithID(fileID))
1750+
if err != nil {
1751+
return uuid.Nil, err
1752+
}
1753+
return fileID, nil
1754+
}
1755+
17441756
func (q *querier) GetFileTemplates(ctx context.Context, fileID uuid.UUID) ([]database.GetFileTemplatesRow, error) {
17451757
if err := q.authorizeContext(ctx, policy.ActionRead, rbac.ResourceSystem); err != nil {
17461758
return nil, err
@@ -2446,6 +2458,29 @@ func (q *querier) GetTemplateVersionParameters(ctx context.Context, templateVers
24462458
return q.db.GetTemplateVersionParameters(ctx, templateVersionID)
24472459
}
24482460

2461+
func (q *querier) GetTemplateVersionTerraformValues(ctx context.Context, templateVersionID uuid.UUID) (database.TemplateVersionTerraformValue, error) {
2462+
tv, err := q.db.GetTemplateVersionByID(ctx, templateVersionID)
2463+
if err != nil {
2464+
return database.TemplateVersionTerraformValue{}, err
2465+
}
2466+
2467+
var object rbac.Objecter
2468+
template, err := q.db.GetTemplateByID(ctx, tv.TemplateID.UUID)
2469+
if err != nil {
2470+
if !errors.Is(err, sql.ErrNoRows) {
2471+
return database.TemplateVersionTerraformValue{}, err
2472+
}
2473+
object = rbac.ResourceTemplate.InOrg(tv.OrganizationID)
2474+
} else {
2475+
object = tv.RBACObject(template)
2476+
}
2477+
2478+
if err := q.authorizeContext(ctx, policy.ActionRead, object); err != nil {
2479+
return database.TemplateVersionTerraformValue{}, err
2480+
}
2481+
return q.db.GetTemplateVersionTerraformValues(ctx, templateVersionID)
2482+
}
2483+
24492484
func (q *querier) GetTemplateVersionVariables(ctx context.Context, templateVersionID uuid.UUID) ([]database.TemplateVersionVariable, error) {
24502485
tv, err := q.db.GetTemplateVersionByID(ctx, templateVersionID)
24512486
if err != nil {

coderd/database/dbauthz/dbauthz_test.go

+26
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,15 @@ func (s *MethodTestSuite) TestFile() {
342342
f := dbgen.File(s.T(), db, database.File{})
343343
check.Args(f.ID).Asserts(f, policy.ActionRead).Returns(f)
344344
}))
345+
s.Run("GetFileIDByTemplateVersionID", s.Subtest(func(db database.Store, check *expects) {
346+
o := dbgen.Organization(s.T(), db, database.Organization{})
347+
u := dbgen.User(s.T(), db, database.User{})
348+
_ = dbgen.OrganizationMember(s.T(), db, database.OrganizationMember{OrganizationID: o.ID, UserID: u.ID})
349+
f := dbgen.File(s.T(), db, database.File{CreatedBy: u.ID})
350+
j := dbgen.ProvisionerJob(s.T(), db, nil, database.ProvisionerJob{StorageMethod: database.ProvisionerStorageMethodFile, FileID: f.ID})
351+
tv := dbgen.TemplateVersion(s.T(), db, database.TemplateVersion{OrganizationID: o.ID, JobID: j.ID, CreatedBy: u.ID})
352+
check.Args(tv.ID).Asserts(rbac.ResourceFile.WithID(f.ID), policy.ActionRead).Returns(f.ID)
353+
}))
345354
s.Run("InsertFile", s.Subtest(func(db database.Store, check *expects) {
346355
u := dbgen.User(s.T(), db, database.User{})
347356
check.Args(database.InsertFileParams{
@@ -1196,6 +1205,23 @@ func (s *MethodTestSuite) TestTemplate() {
11961205
})
11971206
check.Args(tv.ID).Asserts(t1, policy.ActionRead).Returns([]database.TemplateVersionParameter{})
11981207
}))
1208+
s.Run("GetTemplateVersionTerraformValues", s.Subtest(func(db database.Store, check *expects) {
1209+
o := dbgen.Organization(s.T(), db, database.Organization{})
1210+
u := dbgen.User(s.T(), db, database.User{})
1211+
_ = dbgen.OrganizationMember(s.T(), db, database.OrganizationMember{OrganizationID: o.ID, UserID: u.ID})
1212+
t := dbgen.Template(s.T(), db, database.Template{OrganizationID: o.ID, CreatedBy: u.ID})
1213+
job := dbgen.ProvisionerJob(s.T(), db, nil, database.ProvisionerJob{OrganizationID: o.ID})
1214+
tv := dbgen.TemplateVersion(s.T(), db, database.TemplateVersion{
1215+
OrganizationID: o.ID,
1216+
CreatedBy: u.ID,
1217+
JobID: job.ID,
1218+
TemplateID: uuid.NullUUID{UUID: t.ID, Valid: true},
1219+
})
1220+
dbgen.TemplateVersionTerraformValues(s.T(), db, database.InsertTemplateVersionTerraformValuesByJobIDParams{
1221+
JobID: job.ID,
1222+
})
1223+
check.Args(tv.ID).Asserts(t, policy.ActionRead)
1224+
}))
11991225
s.Run("GetTemplateVersionVariables", s.Subtest(func(db database.Store, check *expects) {
12001226
dbtestutil.DisableForeignKeysAndTriggers(s.T(), db)
12011227
t1 := dbgen.Template(s.T(), db, database.Template{})

coderd/database/dbgen/dbgen.go

+13
Original file line numberDiff line numberDiff line change
@@ -971,6 +971,19 @@ func TemplateVersionParameter(t testing.TB, db database.Store, orig database.Tem
971971
return version
972972
}
973973

974+
func TemplateVersionTerraformValues(t testing.TB, db database.Store, orig database.InsertTemplateVersionTerraformValuesByJobIDParams) {
975+
t.Helper()
976+
977+
params := database.InsertTemplateVersionTerraformValuesByJobIDParams{
978+
JobID: takeFirst(orig.JobID, uuid.New()),
979+
CachedPlan: takeFirstSlice(orig.CachedPlan, []byte("{}")),
980+
UpdatedAt: takeFirst(orig.UpdatedAt, dbtime.Now()),
981+
}
982+
983+
err := db.InsertTemplateVersionTerraformValuesByJobID(genCtx, params)
984+
require.NoError(t, err, "insert template version parameter")
985+
}
986+
974987
func WorkspaceAgentStat(t testing.TB, db database.Store, orig database.WorkspaceAgentStat) database.WorkspaceAgentStat {
975988
if orig.ConnectionsByProto == nil {
976989
orig.ConnectionsByProto = json.RawMessage([]byte("{}"))

coderd/database/dbmem/dbmem.go

+37
Original file line numberDiff line numberDiff line change
@@ -3326,6 +3326,30 @@ func (q *FakeQuerier) GetFileByID(_ context.Context, id uuid.UUID) (database.Fil
33263326
return database.File{}, sql.ErrNoRows
33273327
}
33283328

3329+
func (q *FakeQuerier) GetFileIDByTemplateVersionID(ctx context.Context, templateVersionID uuid.UUID) (uuid.UUID, error) {
3330+
q.mutex.RLock()
3331+
defer q.mutex.RUnlock()
3332+
3333+
for _, v := range q.templateVersions {
3334+
if v.ID == templateVersionID {
3335+
jobID := v.JobID
3336+
for _, j := range q.provisionerJobs {
3337+
if j.ID == jobID {
3338+
if j.StorageMethod == database.ProvisionerStorageMethodFile {
3339+
return j.FileID, nil
3340+
}
3341+
// We found the right job id but it wasn't a proper match.
3342+
break
3343+
}
3344+
}
3345+
// We found the right template version but it wasn't a proper match.
3346+
break
3347+
}
3348+
}
3349+
3350+
return uuid.Nil, sql.ErrNoRows
3351+
}
3352+
33293353
func (q *FakeQuerier) GetFileTemplates(_ context.Context, id uuid.UUID) ([]database.GetFileTemplatesRow, error) {
33303354
q.mutex.RLock()
33313355
defer q.mutex.RUnlock()
@@ -5991,6 +6015,19 @@ func (q *FakeQuerier) GetTemplateVersionParameters(_ context.Context, templateVe
59916015
return parameters, nil
59926016
}
59936017

6018+
func (q *FakeQuerier) GetTemplateVersionTerraformValues(ctx context.Context, templateVersionID uuid.UUID) (database.TemplateVersionTerraformValue, error) {
6019+
q.mutex.RLock()
6020+
defer q.mutex.RUnlock()
6021+
6022+
for _, tvtv := range q.templateVersionTerraformValues {
6023+
if tvtv.TemplateVersionID == templateVersionID {
6024+
return tvtv, nil
6025+
}
6026+
}
6027+
6028+
return database.TemplateVersionTerraformValue{}, sql.ErrNoRows
6029+
}
6030+
59946031
func (q *FakeQuerier) GetTemplateVersionVariables(_ context.Context, templateVersionID uuid.UUID) ([]database.TemplateVersionVariable, error) {
59956032
q.mutex.RLock()
59966033
defer q.mutex.RUnlock()

coderd/database/dbmetrics/querymetrics.go

+14
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbmock/dbmock.go

+30
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/querier.go

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

+40
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/files.sql

+17
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,23 @@ WHERE
88
LIMIT
99
1;
1010

11+
-- name: GetFileIDByTemplateVersionID :one
12+
SELECT
13+
files.id
14+
FROM
15+
files
16+
JOIN
17+
provisioner_jobs ON
18+
provisioner_jobs.storage_method = 'file'
19+
AND provisioner_jobs.file_id = files.id
20+
JOIN
21+
template_versions ON template_versions.job_id = provisioner_jobs.id
22+
WHERE
23+
template_versions.id = @template_version_id
24+
LIMIT
25+
1;
26+
27+
1128
-- name: GetFileByHashAndCreator :one
1229
SELECT
1330
*

coderd/database/queries/templateversionterraformvalues.sql

+8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
-- name: GetTemplateVersionTerraformValues :one
2+
SELECT
3+
template_version_terraform_values.*
4+
FROM
5+
template_version_terraform_values
6+
WHERE
7+
template_version_terraform_values.template_version_id = @template_version_id;
8+
19
-- name: InsertTemplateVersionTerraformValuesByJobID :exec
210
INSERT INTO
311
template_version_terraform_values (

0 commit comments

Comments
 (0)