dosubot[bot] commented on issue #8449:
URL:
https://github.com/apache/incubator-devlake/issues/8449#issuecomment-2908931285
<!-- Answer -->
You are correct in your analysis: the current SQL DELETE statement in
`link_pr_and_issue.go` is likely causing the issue where collecting data for
one project deletes all `pull_request_issues` entries for other projects. The
relevant code is as follows:
```sql
DELETE FROM pull_request_issues
WHERE pull_request_id IN (
SELECT pr.id
FROM pull_requests pr
LEFT JOIN project_mapping pm
ON pm.table = 'repos'
AND pm.row_id = pr.base_repo_id
AND pm.project_name = ?
)
```
This query uses a `LEFT JOIN` and filters by `pm.project_name = ?`, but
because it's a `LEFT JOIN` without a corresponding `WHERE` clause to ensure
only the intended project's records are affected, it can result in deleting
entries from other projects as well. This matches your observation and the
described behavior.
No similar issues or discussions were found in the repository, and there are
no recent changes addressing this in the codebase since v1.0.1.
**Suggested approach:**
To fix this, the query should ensure that only records associated with the
specific project are deleted. You can achieve this by using an `INNER JOIN` or
by adding a `WHERE` clause to the subquery to strictly filter by the project.
For example:
```sql
DELETE FROM pull_request_issues
WHERE pull_request_id IN (
SELECT pr.id
FROM pull_requests pr
INNER JOIN project_mapping pm
ON pm.table = 'repos'
AND pm.row_id = pr.base_repo_id
WHERE pm.project_name = ?
)
```
This change ensures that only `pull_request_issues` linked to pull requests
belonging to the specified project are deleted, preventing data loss from other
projects.
You can find the relevant code and logic in the [`clearHistoryData` function
in
link_pr_and_issue.go](https://github.com/apache/incubator-devlake/blob/main/backend/plugins/linker/tasks/link_pr_and_issue.go).
Let me know if you need further details or guidance on implementing this
change.
<!-- Dosu Comment Footer -->
*To continue talking to [Dosu](https://go.dosu.dev/dosubot), mention
@dosu-bot.*
---
<sup>Help Dosu learn! Give it feedback: [Great
Response](https://app.dosu.dev/response-feedback/e8965d7b-7170-4fd5-a902-29d383535fff?feedback_type=great_response)
| [Irrelevant
Answer](https://app.dosu.dev/response-feedback/e8965d7b-7170-4fd5-a902-29d383535fff?feedback_type=irrelevant_answer)
| [Incorrect
Sources](https://app.dosu.dev/response-feedback/e8965d7b-7170-4fd5-a902-29d383535fff?feedback_type=incorrect_sources)
| [Too
Verbose](https://app.dosu.dev/response-feedback/e8965d7b-7170-4fd5-a902-29d383535fff?feedback_type=too_verbose)
|
[Hallucination](https://app.dosu.dev/response-feedback/e8965d7b-7170-4fd5-a902-29d383535fff?feedback_type=hallucination)
| [Bug
Report](https://app.dosu.dev/response-feedback/e8965d7b-7170-4fd5-a902-29d383535fff?feedback_type=bug_report)
|
[Other](https://app.dosu.dev/response-feedback/e8965d7b-7170-4fd5-a902-29d383535fff?feedback_type=other)</sup>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]