-- name: ListWorkspaceSlotsByProject :many SELECT id, project_sync_setting_id, slot_index, state, path, created_at, updated_at FROM workspace_slots WHERE project_sync_setting_id = $1 ORDER BY slot_index; -- name: UpsertWorkspaceSlot :one INSERT INTO workspace_slots (project_sync_setting_id, slot_index, state, path) VALUES ($1, $2, 'available', $3) ON CONFLICT (project_sync_setting_id, slot_index) DO UPDATE SET path = EXCLUDED.path, updated_at = now() RETURNING id, project_sync_setting_id, slot_index, state, path, created_at, updated_at; -- name: ReserveAvailableWorkspaceSlot :one UPDATE workspace_slots SET state = 'in_use', updated_at = now() WHERE id = ( SELECT id FROM workspace_slots WHERE project_sync_setting_id = $1 AND state = 'available' ORDER BY slot_index LIMIT 1 FOR UPDATE SKIP LOCKED ) RETURNING id, project_sync_setting_id, slot_index, state, path, created_at, updated_at; -- name: UpdateWorkspaceSlotState :one UPDATE workspace_slots SET state = $2, updated_at = now() WHERE id = $1 RETURNING id, project_sync_setting_id, slot_index, state, path, created_at, updated_at;