@@ -130,8 +130,37 @@ func applyForeignKeysToNodes(ctx *sql.Context, a *Analyzer, n sql.Node, cache *f
130
130
}
131
131
switch updateDest .(type ) {
132
132
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
+ }
133
141
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
135
164
default :
136
165
fkTbl , ok := updateDest .(sql.ForeignKeyTable )
137
166
// If foreign keys aren't supported then we return
0 commit comments