@@ -53,3 +53,47 @@ COMMENT ON TRIGGER workspace_agent_name_unique_trigger ON workspace_agents IS
53
53
' Use a trigger instead of a unique constraint because existing data may violate
54
54
the uniqueness requirement. A trigger allows us to enforce uniqueness going
55
55
forward without requiring a migration to clean up historical data.' ;
56
+
57
+ -- Handle agent deletion in prebuilds, previously modified in 000323_workspace_latest_builds_optimization.up.sql.
58
+ DROP VIEW workspace_prebuilds;
59
+
60
+ CREATE VIEW workspace_prebuilds AS
61
+ WITH all_prebuildsAS (
62
+ SELECT w .id ,
63
+ w .name ,
64
+ w .template_id ,
65
+ w .created_at
66
+ FROM workspaces w
67
+ WHERE (w .owner_id = ' c42fdf75-3097-471c-8c33-fb52454d81c0' ::uuid)
68
+ ), workspaces_with_latest_presetsAS (
69
+ SELECT DISTINCT ON (workspace_builds .workspace_id )workspace_builds .workspace_id ,
70
+ workspace_builds .template_version_preset_id
71
+ FROM workspace_builds
72
+ WHERE (workspace_builds .template_version_preset_id IS NOT NULL )
73
+ ORDER BY workspace_builds .workspace_id ,workspace_builds .build_number DESC
74
+ ), workspaces_with_agents_statusAS (
75
+ SELECT w .id AS workspace_id,
76
+ bool_and((wa .lifecycle_state = ' ready' ::workspace_agent_lifecycle_state))AS ready
77
+ FROM (((workspaces w
78
+ JOIN workspace_latest_builds wlbON ((wlb .workspace_id = w .id )))
79
+ JOIN workspace_resources wrON ((wr .job_id = wlb .job_id )))
80
+ -- ADD: deleted check for sub agents.
81
+ JOIN workspace_agents waON ((wa .resource_id = wr .id AND wa .deleted = FALSE)))
82
+ WHERE (w .owner_id = ' c42fdf75-3097-471c-8c33-fb52454d81c0' ::uuid)
83
+ GROUP BY w .id
84
+ ), current_presetsAS (
85
+ SELECT w .id AS prebuild_id,
86
+ wlp .template_version_preset_id
87
+ FROM (workspaces w
88
+ JOIN workspaces_with_latest_presets wlpON ((wlp .workspace_id = w .id )))
89
+ WHERE (w .owner_id = ' c42fdf75-3097-471c-8c33-fb52454d81c0' ::uuid)
90
+ )
91
+ SELECT p .id ,
92
+ p .name ,
93
+ p .template_id ,
94
+ p .created_at ,
95
+ COALESCE(a .ready , false)AS ready,
96
+ cp .template_version_preset_id AS current_preset_id
97
+ FROM ((all_prebuilds p
98
+ LEFT JOIN workspaces_with_agents_status aON ((a .workspace_id = p .id )))
99
+ JOIN current_presets cpON ((cp .prebuild_id = p .id )));