@@ -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