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

Skip to content

Commit d74b072

Browse files
committed
Without CTE
1 parent ba13e03 commit d74b072

File tree

3 files changed

+80
-96
lines changed

3 files changed

+80
-96
lines changed

coderd/database/modelqueries.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,9 +133,9 @@ func (q *sqlQuerier) GetAuthorizedWorkspaces(ctx context.Context, arg GetWorkspa
133133
pq.Array(arg.TemplateIds),
134134
arg.Name,
135135
arg.HasAgent,
136+
arg.AgentInactiveDisconnectTimeoutSeconds,
136137
arg.Offset,
137138
arg.Limit,
138-
arg.AgentInactiveDisconnectTimeoutSeconds,
139139
)
140140
if err != nil {
141141
return nil, xerrors.Errorf("get authorized workspaces: %w", err)

coderd/database/queries.sql.go

Lines changed: 42 additions & 50 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/workspaces.sql

Lines changed: 37 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -38,47 +38,6 @@ WHERE
3838
);
3939

4040
-- name: GetWorkspaces :many
41-
WITH workspace_builds_agents AS (
42-
SELECT
43-
workspace_builds.workspace_id AS workspace_id,
44-
workspace_builds.build_number AS build_number,
45-
workspace_agents.id AS agent_id,
46-
(
47-
CASE
48-
WHEN workspace_agents.first_connected_at IS NULL THEN
49-
CASE
50-
WHEN workspace_agents.connection_timeout_seconds > 0 AND NOW() - workspace_agents.created_at > workspace_agents.connection_timeout_seconds * INTERVAL '1 second' THEN
51-
'timeout'
52-
ELSE
53-
'connecting'
54-
END
55-
WHEN workspace_agents.disconnected_at > workspace_agents.last_connected_at THEN
56-
'disconnected'
57-
WHEN NOW() - workspace_agents.last_connected_at > INTERVAL '1 second' * @agent_inactive_disconnect_timeout_seconds :: bigint THEN
58-
'disconnected'
59-
WHEN workspace_agents.last_connected_at IS NOT NULL THEN
60-
'connected'
61-
ELSE
62-
NULL
63-
END
64-
) AS agent_status
65-
FROM
66-
workspace_builds
67-
JOIN
68-
provisioner_jobs
69-
ON
70-
provisioner_jobs.id = workspace_builds.job_id
71-
JOIN
72-
workspace_resources
73-
ON
74-
workspace_resources.job_id = provisioner_jobs.id
75-
JOIN
76-
workspace_agents
77-
ON
78-
workspace_agents.resource_id = workspace_resources.id
79-
WHERE
80-
workspace_builds.transition = 'start'::workspace_transition
81-
)
8241
SELECT
8342
workspaces.*, COUNT(*) OVER () as count
8443
FROM
@@ -208,11 +167,44 @@ WHERE
208167
AND CASE
209168
WHEN @has_agent :: text != '' THEN
210169
(
211-
SELECT COUNT(*) FROM workspace_builds_agents
170+
SELECT COUNT(*)
171+
FROM
172+
workspace_builds
173+
JOIN
174+
provisioner_jobs
175+
ON
176+
provisioner_jobs.id = workspace_builds.job_id
177+
JOIN
178+
workspace_resources
179+
ON
180+
workspace_resources.job_id = provisioner_jobs.id
181+
JOIN
182+
workspace_agents
183+
ON
184+
workspace_agents.resource_id = workspace_resources.id
212185
WHERE
213-
workspace_builds_agents.workspace_id = workspaces.id AND
214-
workspace_builds_agents.build_number = latest_build.build_number AND
215-
agent_status = @has_agent
186+
workspace_builds.workspace_id = workspaces.id AND
187+
workspace_builds.build_number = latest_build.build_number AND
188+
workspace_builds.transition = 'start'::workspace_transition AND
189+
@has_agent = (
190+
CASE
191+
WHEN workspace_agents.first_connected_at IS NULL THEN
192+
CASE
193+
WHEN workspace_agents.connection_timeout_seconds > 0 AND NOW() - workspace_agents.created_at > workspace_agents.connection_timeout_seconds * INTERVAL '1 second' THEN
194+
'timeout'
195+
ELSE
196+
'connecting'
197+
END
198+
WHEN workspace_agents.disconnected_at > workspace_agents.last_connected_at THEN
199+
'disconnected'
200+
WHEN NOW() - workspace_agents.last_connected_at > INTERVAL '1 second' * @agent_inactive_disconnect_timeout_seconds :: bigint THEN
201+
'disconnected'
202+
WHEN workspace_agents.last_connected_at IS NOT NULL THEN
203+
'connected'
204+
ELSE
205+
NULL
206+
END
207+
)
216208
) > 0
217209
ELSE true
218210
END

0 commit comments

Comments
 (0)