diff --git a/pkg/probo/coredata/migrations/20250128T093900Z.sql b/pkg/probo/coredata/migrations/20250128T093900Z.sql new file mode 100644 index 000000000..29daf0b9d --- /dev/null +++ b/pkg/probo/coredata/migrations/20250128T093900Z.sql @@ -0,0 +1,12 @@ +ALTER TABLE tasks + DROP CONSTRAINT tasks_control_id_fkey, + DROP COLUMN control_id; + +CREATE TABLE controls_tasks ( + task_id TEXT NOT NULL, + control_id TEXT NOT NULL, + created_at TIMESTAMP WITH TIME ZONE NOT NULL, + PRIMARY KEY (task_id, control_id), + FOREIGN KEY (task_id) REFERENCES tasks(id), + FOREIGN KEY (control_id) REFERENCES controls(id) +); diff --git a/pkg/probo/coredata/task.go b/pkg/probo/coredata/task.go index 7a59b46f5..e8d421ebb 100644 --- a/pkg/probo/coredata/task.go +++ b/pkg/probo/coredata/task.go @@ -62,6 +62,22 @@ func (t *Tasks) LoadByControlID( cursor *page.Cursor, ) error { q := ` +WITH control_tasks AS ( + SELECT + t.id, + @control_id AS control_id, + t.content_ref, + t.created_at, + t.updated_at + FROM + tasks t + INNER JOIN + controls_tasks ct ON + ct.task_id = t.id + AND ct.control_id = @control_id + WHERE + %s +) SELECT id, control_id, @@ -69,11 +85,9 @@ SELECT created_at, updated_at FROM - tasks + control_tasks WHERE %s - AND control_id = @control_id - AND %s ` q = fmt.Sprintf(q, scope.SQLFragment(), cursor.SQLFragment())