Skip to content

Commit b0eece8

Browse files
committed
Optimize SQL per Mathias suggestion
1 parent 72f1e88 commit b0eece8

File tree

3 files changed

+24
-31
lines changed

3 files changed

+24
-31
lines changed

coderd/database/queries/workspacebuildparameters.sql

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -16,33 +16,25 @@ WHERE
1616
workspace_build_id = $1;
1717

1818
-- name: GetUserWorkspaceBuildParameters :many
19-
SELECT
20-
sub.name,
21-
sub.value
22-
FROM (
23-
SELECT
24-
wbp.name,
25-
wbp.value,
26-
wb.created_at,
27-
ROW_NUMBER() OVER (PARTITION BY wbp.name ORDER BY wb.created_at DESC) as rn
28-
FROM
29-
workspace_build_parameters wbp
30-
JOIN
31-
workspace_builds wb ON wb.id = wbp.workspace_build_id
32-
JOIN
33-
workspaces w ON w.id = wb.workspace_id
34-
JOIN
35-
template_version_parameters tvp ON tvp.template_version_id = wb.template_version_id
36-
WHERE
37-
w.owner_id = $1
38-
AND wb.transition = 'start'
39-
AND w.template_id = $2
40-
AND tvp.ephemeral = false
41-
AND tvp.name = wbp.name
42-
) sub
19+
-- name: GetUserWorkspaceBuildParameters :many
20+
SELECT DISTINCT ON (tvp.name)
21+
tvp.name,
22+
wbp.value
23+
FROM
24+
workspace_build_parameters wbp
25+
JOIN
26+
workspace_builds wb ON wb.id = wbp.workspace_build_id
27+
JOIN
28+
workspaces w ON w.id = wb.workspace_id
29+
JOIN
30+
template_version_parameters tvp ON tvp.template_version_id = wb.template_version_id
4331
WHERE
44-
sub.rn = 1
45-
ORDER BY sub.created_at DESC
46-
-- If there are many distinct parameters,
47-
-- we only want the most recent ones.
32+
w.owner_id = $1
33+
AND wb.transition = 'start'
34+
AND w.template_id = $2
35+
AND tvp.ephemeral = false
36+
AND tvp.name = wbp.name
37+
ORDER BY
38+
tvp.name, wb.created_at DESC
4839
LIMIT 100;
40+

coderd/users.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -609,7 +609,7 @@ func (api *API) userAutofillParameters(rw http.ResponseWriter, r *http.Request)
609609
return
610610
}
611611

612-
var sdkParams []codersdk.UserParameter
612+
sdkParams := []codersdk.UserParameter{}
613613
for _, param := range params {
614614
sdkParams = append(sdkParams, codersdk.UserParameter{
615615
Name: param.Name,

coderd/users_test.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1821,8 +1821,9 @@ func TestUserAutofillParameters(t *testing.T) {
18211821

18221822
// Verify that latest parameter value is returned.
18231823
dbfake.WorkspaceBuild(t, db, database.Workspace{
1824-
OwnerID: u2.ID,
1825-
TemplateID: version.Template.ID,
1824+
OrganizationID: u1.OrganizationID,
1825+
OwnerID: u2.ID,
1826+
TemplateID: version.Template.ID,
18261827
}).Params(
18271828
database.WorkspaceBuildParameter{
18281829
Name: "param",

0 commit comments

Comments
 (0)