Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Support DELETE with JOIN on subquery
  • Loading branch information
gwillem committed Jul 17, 2025
commit 880e669f978a59c8699f81f9e4332b82fadaef05
11 changes: 11 additions & 0 deletions internal/endtoend/testdata/delete_join/mysql/db/query.sql.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 6 additions & 1 deletion internal/endtoend/testdata/delete_join/mysql/query.sql
Original file line number Diff line number Diff line change
Expand Up @@ -26,4 +26,9 @@ FROM
RIGHT JOIN primary_table as pt ON jt.primary_table_id = pt.id
WHERE
jt.id = ?
AND pt.user_id = ?;
AND pt.user_id = ?;

-- name: DeleteJoinWithSubquery :exec
DELETE pt
FROM primary_table pt
JOIN (SELECT 1 as id) jt ON pt.id = jt.id;
9 changes: 9 additions & 0 deletions internal/engine/dolphin/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ func convertToRangeVarList(list *ast.List, result *ast.List) {
if !ok {
if list, check := rel.Larg.(*ast.List); check {
convertToRangeVarList(list, result)
} else if subselect, check := rel.Larg.(*ast.RangeSubselect); check {
// Handle subqueries in JOIN clauses
result.Items = append(result.Items, subselect)
} else {
panic("expected range var")
}
Expand All @@ -64,6 +67,9 @@ func convertToRangeVarList(list *ast.List, result *ast.List) {
if !ok {
if list, check := rel.Rarg.(*ast.List); check {
convertToRangeVarList(list, result)
} else if subselect, check := rel.Rarg.(*ast.RangeSubselect); check {
// Handle subqueries in JOIN clauses
result.Items = append(result.Items, subselect)
} else {
panic("expected range var")
}
Expand All @@ -75,6 +81,9 @@ func convertToRangeVarList(list *ast.List, result *ast.List) {
case *ast.RangeVar:
result.Items = append(result.Items, rel)

case *ast.RangeSubselect:
result.Items = append(result.Items, rel)

default:
panic("expected range var")
}
Expand Down
Loading