Skip to content

Commit 71b6191

Browse files
committed
apply foreign keys to UpdateJoin
1 parent c30dd34 commit 71b6191

File tree

1 file changed

+30
-1
lines changed

1 file changed

+30
-1
lines changed

sql/analyzer/apply_foreign_keys.go

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,8 +130,37 @@ func applyForeignKeysToNodes(ctx *sql.Context, a *Analyzer, n sql.Node, cache *f
130130
}
131131
switch updateDest.(type) {
132132
case *plan.UpdatableJoinTable:
133+
updateTargets := updateDest.(*plan.UpdatableJoinTable).UpdateTargets
134+
fkHandlerMap := make(map[string]sql.Node, len(updateTargets))
135+
for tableName, updateTarget := range updateTargets {
136+
fkHandlerMap[tableName] = updateTarget
137+
updateDest, err := plan.GetUpdatable(updateTarget)
138+
if err != nil {
139+
return nil, transform.SameTree, err
140+
}
133141

134-
return n, transform.SameTree, nil
142+
fkTbl, ok := updateDest.(sql.ForeignKeyTable)
143+
if !ok {
144+
continue
145+
}
146+
fkEditor, err := getForeignKeyEditor(ctx, a, fkTbl, cache, fkChain, false)
147+
if err != nil {
148+
return nil, transform.SameTree, err
149+
}
150+
if fkEditor == nil {
151+
continue
152+
}
153+
fkHandlerMap[tableName] = &plan.ForeignKeyHandler{
154+
Table: fkTbl,
155+
Sch: updateDest.Schema(),
156+
OriginalNode: updateTarget,
157+
Editor: fkEditor,
158+
AllUpdaters: fkChain.GetUpdaters(),
159+
}
160+
}
161+
uj := plan.NewUpdateJoin(fkHandlerMap, n.Child.(*plan.UpdateJoin).Child)
162+
nn, err := n.WithChildren(uj)
163+
return nn, transform.NewTree, err
135164
default:
136165
fkTbl, ok := updateDest.(sql.ForeignKeyTable)
137166
// If foreign keys aren't supported then we return

0 commit comments

Comments
 (0)