Skip to content

Commit 7eb2c2f

Browse files
authored
Revert "chore: Implement joins with golang templates (#6429)" (#6560)
This reverts commit 8b125d6.
1 parent a8433b1 commit 7eb2c2f

36 files changed

+660
-894
lines changed

coderd/audit/diff.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ type Auditable interface {
1414
database.User |
1515
database.Workspace |
1616
database.GitSSHKey |
17-
database.WorkspaceBuildRBAC |
17+
database.WorkspaceBuild |
1818
database.AuditableGroup |
1919
database.License
2020
}

coderd/audit/request.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func ResourceTarget[T Auditable](tgt T) string {
6262
return typed.Username
6363
case database.Workspace:
6464
return typed.Name
65-
case database.WorkspaceBuildRBAC:
65+
case database.WorkspaceBuild:
6666
// this isn't used
6767
return ""
6868
case database.GitSSHKey:
@@ -89,7 +89,7 @@ func ResourceID[T Auditable](tgt T) uuid.UUID {
8989
return typed.ID
9090
case database.Workspace:
9191
return typed.ID
92-
case database.WorkspaceBuildRBAC:
92+
case database.WorkspaceBuild:
9393
return typed.ID
9494
case database.GitSSHKey:
9595
return typed.UserID
@@ -114,7 +114,7 @@ func ResourceType[T Auditable](tgt T) database.ResourceType {
114114
return database.ResourceTypeUser
115115
case database.Workspace:
116116
return database.ResourceTypeWorkspace
117-
case database.WorkspaceBuildRBAC:
117+
case database.WorkspaceBuild:
118118
return database.ResourceTypeWorkspaceBuild
119119
case database.GitSSHKey:
120120
return database.ResourceTypeGitSshKey

coderd/autobuild/executor/lifecycle_executor.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ func isEligibleForAutoStartStop(ws database.Workspace) bool {
204204

205205
func getNextTransition(
206206
ws database.Workspace,
207-
priorHistory database.WorkspaceBuildRBAC,
207+
priorHistory database.WorkspaceBuild,
208208
priorJob database.ProvisionerJob,
209209
) (
210210
validTransition database.WorkspaceTransition,
@@ -239,7 +239,7 @@ func getNextTransition(
239239

240240
// TODO(cian): this function duplicates most of api.postWorkspaceBuilds. Refactor.
241241
// See: https://github.com/coder/coder/issues/1401
242-
func build(ctx context.Context, store database.Store, workspace database.Workspace, trans database.WorkspaceTransition, priorHistory database.WorkspaceBuildRBAC, priorJob database.ProvisionerJob) error {
242+
func build(ctx context.Context, store database.Store, workspace database.Workspace, trans database.WorkspaceTransition, priorHistory database.WorkspaceBuild, priorJob database.ProvisionerJob) error {
243243
template, err := store.GetTemplateByID(ctx, workspace.TemplateID)
244244
if err != nil {
245245
return xerrors.Errorf("get workspace template: %w", err)

coderd/autobuild/executor/lifecycle_executor_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,17 @@ package executor_test
22

33
import (
44
"context"
5+
"os"
56
"testing"
67
"time"
78

8-
"github.com/google/uuid"
99
"go.uber.org/goleak"
1010

11+
"github.com/google/uuid"
12+
1113
"github.com/coder/coder/coderd/autobuild/executor"
1214
"github.com/coder/coder/coderd/coderdtest"
1315
"github.com/coder/coder/coderd/database"
14-
"github.com/coder/coder/coderd/database/dbtestutil"
1516
"github.com/coder/coder/coderd/schedule"
1617
"github.com/coder/coder/coderd/util/ptr"
1718
"github.com/coder/coder/codersdk"
@@ -492,7 +493,7 @@ func TestExecutorWorkspaceAutostopNoWaitChangedMyMind(t *testing.T) {
492493
}
493494

494495
func TestExecutorAutostartMultipleOK(t *testing.T) {
495-
if !dbtestutil.UsingRealDatabase() {
496+
if os.Getenv("DB") == "" {
496497
t.Skip(`This test only really works when using a "real" database, similar to a HA setup`)
497498
}
498499

coderd/database/db.go

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ import (
1616

1717
"github.com/jmoiron/sqlx"
1818
"golang.org/x/xerrors"
19-
20-
"github.com/coder/coder/coderd/database/sqlxqueries"
2119
)
2220

2321
// Store contains all queryable database functions.
@@ -39,21 +37,11 @@ type DBTX interface {
3937
QueryRowContext(context.Context, string, ...interface{}) *sql.Row
4038
SelectContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error
4139
GetContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error
42-
43-
// Extends the sqlx interface
44-
sqlx.QueryerContext
4540
}
4641

4742
// New creates a new database store using a SQL database connection.
4843
func New(sdb *sql.DB) Store {
4944
dbx := sqlx.NewDb(sdb, "postgres")
50-
// Load the embedded queries. If this fails, some of our queries
51-
// will never work. This is a fatal developer error that should never
52-
// happen.
53-
_, err := sqlxqueries.LoadQueries()
54-
if err != nil {
55-
panic(xerrors.Errorf("load queries: %w", err))
56-
}
5745
return &sqlQuerier{
5846
db: dbx,
5947
sdb: dbx,

coderd/database/dbauthz/querier.go

Lines changed: 61 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1167,12 +1167,25 @@ func (q *querier) GetWorkspaces(ctx context.Context, arg database.GetWorkspacesP
11671167
return q.db.GetAuthorizedWorkspaces(ctx, arg, prep)
11681168
}
11691169

1170-
func (q *querier) GetLatestWorkspaceBuildByWorkspaceID(ctx context.Context, workspaceID uuid.UUID) (database.WorkspaceBuildRBAC, error) {
1171-
return fetch(q.log, q.auth, q.db.GetLatestWorkspaceBuildByWorkspaceID)(ctx, workspaceID)
1170+
func (q *querier) GetLatestWorkspaceBuildByWorkspaceID(ctx context.Context, workspaceID uuid.UUID) (database.WorkspaceBuild, error) {
1171+
if _, err := q.GetWorkspaceByID(ctx, workspaceID); err != nil {
1172+
return database.WorkspaceBuild{}, err
1173+
}
1174+
return q.db.GetLatestWorkspaceBuildByWorkspaceID(ctx, workspaceID)
11721175
}
11731176

1174-
func (q *querier) GetLatestWorkspaceBuildsByWorkspaceIDs(ctx context.Context, ids []uuid.UUID) ([]database.WorkspaceBuildRBAC, error) {
1175-
return fetchWithPostFilter(q.auth, q.db.GetLatestWorkspaceBuildsByWorkspaceIDs)(ctx, ids)
1177+
func (q *querier) GetLatestWorkspaceBuildsByWorkspaceIDs(ctx context.Context, ids []uuid.UUID) ([]database.WorkspaceBuild, error) {
1178+
// This is not ideal as not all builds will be returned if the workspace cannot be read.
1179+
// This should probably be handled differently? Maybe join workspace builds with workspace
1180+
// ownership properties and filter on that.
1181+
for _, id := range ids {
1182+
_, err := q.GetWorkspaceByID(ctx, id)
1183+
if err != nil {
1184+
return nil, err
1185+
}
1186+
}
1187+
1188+
return q.db.GetLatestWorkspaceBuildsByWorkspaceIDs(ctx, ids)
11761189
}
11771190

11781191
func (q *querier) GetWorkspaceAgentByID(ctx context.Context, id uuid.UUID) (database.WorkspaceAgent, error) {
@@ -1250,16 +1263,35 @@ func (q *querier) GetWorkspaceAppsByAgentID(ctx context.Context, agentID uuid.UU
12501263
return q.db.GetWorkspaceAppsByAgentID(ctx, agentID)
12511264
}
12521265

1253-
func (q *querier) GetWorkspaceBuildByID(ctx context.Context, buildID uuid.UUID) (database.WorkspaceBuildRBAC, error) {
1254-
return fetch(q.log, q.auth, q.db.GetWorkspaceBuildByID)(ctx, buildID)
1266+
func (q *querier) GetWorkspaceBuildByID(ctx context.Context, buildID uuid.UUID) (database.WorkspaceBuild, error) {
1267+
build, err := q.db.GetWorkspaceBuildByID(ctx, buildID)
1268+
if err != nil {
1269+
return database.WorkspaceBuild{}, err
1270+
}
1271+
if _, err := q.GetWorkspaceByID(ctx, build.WorkspaceID); err != nil {
1272+
return database.WorkspaceBuild{}, err
1273+
}
1274+
return build, nil
12551275
}
12561276

1257-
func (q *querier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UUID) (database.WorkspaceBuildRBAC, error) {
1258-
return fetch(q.log, q.auth, q.db.GetWorkspaceBuildByJobID)(ctx, jobID)
1277+
func (q *querier) GetWorkspaceBuildByJobID(ctx context.Context, jobID uuid.UUID) (database.WorkspaceBuild, error) {
1278+
build, err := q.db.GetWorkspaceBuildByJobID(ctx, jobID)
1279+
if err != nil {
1280+
return database.WorkspaceBuild{}, err
1281+
}
1282+
// Authorized fetch
1283+
_, err = q.GetWorkspaceByID(ctx, build.WorkspaceID)
1284+
if err != nil {
1285+
return database.WorkspaceBuild{}, err
1286+
}
1287+
return build, nil
12591288
}
12601289

1261-
func (q *querier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (database.WorkspaceBuildRBAC, error) {
1262-
return fetch(q.log, q.auth, q.db.GetWorkspaceBuildByWorkspaceIDAndBuildNumber)(ctx, arg)
1290+
func (q *querier) GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx context.Context, arg database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams) (database.WorkspaceBuild, error) {
1291+
if _, err := q.GetWorkspaceByID(ctx, arg.WorkspaceID); err != nil {
1292+
return database.WorkspaceBuild{}, err
1293+
}
1294+
return q.db.GetWorkspaceBuildByWorkspaceIDAndBuildNumber(ctx, arg)
12631295
}
12641296

12651297
func (q *querier) GetWorkspaceBuildParameters(ctx context.Context, workspaceBuildID uuid.UUID) ([]database.WorkspaceBuildParameter, error) {
@@ -1273,20 +1305,11 @@ func (q *querier) GetWorkspaceBuildParameters(ctx context.Context, workspaceBuil
12731305
return q.db.GetWorkspaceBuildParameters(ctx, workspaceBuildID)
12741306
}
12751307

1276-
func (q *querier) GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg database.GetWorkspaceBuildsByWorkspaceIDParams) ([]database.WorkspaceBuildRBAC, error) {
1277-
builds, err := q.db.GetWorkspaceBuildsByWorkspaceID(ctx, arg)
1278-
if err != nil {
1279-
return nil, err
1280-
}
1281-
if len(builds) == 0 {
1282-
return []database.WorkspaceBuildRBAC{}, nil
1283-
}
1284-
// All builds come from the same workspace, so we only need to check the first one.
1285-
err = q.authorizeContext(ctx, rbac.ActionRead, builds[0])
1286-
if err != nil {
1308+
func (q *querier) GetWorkspaceBuildsByWorkspaceID(ctx context.Context, arg database.GetWorkspaceBuildsByWorkspaceIDParams) ([]database.WorkspaceBuild, error) {
1309+
if _, err := q.GetWorkspaceByID(ctx, arg.WorkspaceID); err != nil {
12871310
return nil, err
12881311
}
1289-
return builds, nil
1312+
return q.db.GetWorkspaceBuildsByWorkspaceID(ctx, arg)
12901313
}
12911314

12921315
func (q *querier) GetWorkspaceByAgentID(ctx context.Context, agentID uuid.UUID) (database.Workspace, error) {
@@ -1346,7 +1369,11 @@ func (q *querier) GetWorkspaceResourcesByJobID(ctx context.Context, jobID uuid.U
13461369
if err != nil {
13471370
return nil, err
13481371
}
1349-
obj = build
1372+
workspace, err := q.db.GetWorkspaceByID(ctx, build.WorkspaceID)
1373+
if err != nil {
1374+
return nil, err
1375+
}
1376+
obj = workspace
13501377
default:
13511378
return nil, xerrors.Errorf("unknown job type: %s", job.Type)
13521379
}
@@ -1387,7 +1414,12 @@ func (q *querier) InsertWorkspaceBuildParameters(ctx context.Context, arg databa
13871414
return err
13881415
}
13891416

1390-
err = q.authorizeContext(ctx, rbac.ActionUpdate, build)
1417+
workspace, err := q.db.GetWorkspaceByID(ctx, build.WorkspaceID)
1418+
if err != nil {
1419+
return err
1420+
}
1421+
1422+
err = q.authorizeContext(ctx, rbac.ActionUpdate, workspace)
13911423
if err != nil {
13921424
return err
13931425
}
@@ -1451,7 +1483,11 @@ func (q *querier) UpdateWorkspaceBuildByID(ctx context.Context, arg database.Upd
14511483
return database.WorkspaceBuild{}, err
14521484
}
14531485

1454-
err = q.authorizeContext(ctx, rbac.ActionUpdate, build)
1486+
workspace, err := q.db.GetWorkspaceByID(ctx, build.WorkspaceID)
1487+
if err != nil {
1488+
return database.WorkspaceBuild{}, err
1489+
}
1490+
err = q.authorizeContext(ctx, rbac.ActionUpdate, workspace.RBACObject())
14551491
if err != nil {
14561492
return database.WorkspaceBuild{}, err
14571493
}

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy