mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-20 04:20:55 +01:00
Maniphest - fix blocking / blocked task queries
Summary: Fixes T7392. I kind of stink at SQL so my approach here was to "start over" conceptually and this way makes the most sense to me - we basically do one join on the dependency table and then a second join back from the dependency table to the main task table. In the where clause we filter the resulting rows, first checking the data from dependency join for existence as appropros and then checking the second join for main task table for the proper "open" task values. Test Plan: made a task X be blocked by task Y. closed task y. search for "not blocked" tasks and saw task X. Reviewers: epriestley Reviewed By: epriestley Subscribers: Korvin, epriestley Maniphest Tasks: T7392 Differential Revision: https://secure.phabricator.com/D11962
This commit is contained in:
parent
1e5f96e773
commit
05510aa41f
1 changed files with 12 additions and 12 deletions
|
@ -588,21 +588,25 @@ final class ManiphestTaskQuery extends PhabricatorCursorPagedPolicyAwareQuery {
|
|||
if ($this->blockingTasks === true) {
|
||||
$parts[] = qsprintf(
|
||||
$conn,
|
||||
'blocking.dst IS NOT NULL');
|
||||
'blocking.dst IS NOT NULL AND blockingtask.status IN (%Ls)',
|
||||
ManiphestTaskStatus::getOpenStatusConstants());
|
||||
} else if ($this->blockingTasks === false) {
|
||||
$parts[] = qsprintf(
|
||||
$conn,
|
||||
'blocking.dst IS NULL');
|
||||
'blocking.dst IS NULL OR blockingtask.status NOT IN (%Ls)',
|
||||
ManiphestTaskStatus::getOpenStatusConstants());
|
||||
}
|
||||
|
||||
if ($this->blockedTasks === true) {
|
||||
$parts[] = qsprintf(
|
||||
$conn,
|
||||
'blocked.dst IS NOT NULL');
|
||||
'blocked.dst IS NOT NULL AND blockedtask.status IN (%Ls)',
|
||||
ManiphestTaskStatus::getOpenStatusConstants());
|
||||
} else if ($this->blockedTasks === false) {
|
||||
$parts[] = qsprintf(
|
||||
$conn,
|
||||
'blocked.dst IS NULL');
|
||||
'blocked.dst IS NULL OR blockedtask.status NOT IN (%Ls)',
|
||||
ManiphestTaskStatus::getOpenStatusConstants());
|
||||
}
|
||||
|
||||
return '('.implode(') OR (', $parts).')';
|
||||
|
@ -792,24 +796,20 @@ final class ManiphestTaskQuery extends PhabricatorCursorPagedPolicyAwareQuery {
|
|||
$conn_r,
|
||||
'LEFT JOIN %T blocking ON blocking.src = task.phid '.
|
||||
'AND blocking.type = %d '.
|
||||
'LEFT JOIN %T blockingtask ON blocking.dst = blockingtask.phid '.
|
||||
'AND blockingtask.status IN (%Ls)',
|
||||
'LEFT JOIN %T blockingtask ON blocking.dst = blockingtask.phid',
|
||||
$edge_table,
|
||||
ManiphestTaskDependedOnByTaskEdgeType::EDGECONST,
|
||||
id(new ManiphestTask())->getTableName(),
|
||||
ManiphestTaskStatus::getOpenStatusConstants());
|
||||
id(new ManiphestTask())->getTableName());
|
||||
}
|
||||
if ($this->shouldJoinBlockedTasks()) {
|
||||
$joins[] = qsprintf(
|
||||
$conn_r,
|
||||
'LEFT JOIN %T blocked ON blocked.src = task.phid '.
|
||||
'AND blocked.type = %d '.
|
||||
'LEFT JOIN %T blockedtask ON blocked.dst = blockedtask.phid '.
|
||||
'AND blockedtask.status IN (%Ls)',
|
||||
'LEFT JOIN %T blockedtask ON blocked.dst = blockedtask.phid',
|
||||
$edge_table,
|
||||
ManiphestTaskDependsOnTaskEdgeType::EDGECONST,
|
||||
id(new ManiphestTask())->getTableName(),
|
||||
ManiphestTaskStatus::getOpenStatusConstants());
|
||||
id(new ManiphestTask())->getTableName());
|
||||
}
|
||||
|
||||
if ($this->anyProjectPHIDs || $this->anyUserProjectPHIDs) {
|
||||
|
|
Loading…
Reference in a new issue