assignTableDefs handles tree.TableDefs nodes for *vitess.DDL targets. This also sorts table defs by whether they're dependent on other table defs evaluating first. Some table defs, such as indexes, affect other defs, such as columns, and they're therefore dependent on columns being handled first.
(ctx *Context, node tree.TableDefs, target *vitess.DDL)
| 156 | // dependent on other table defs evaluating first. Some table defs, such as indexes, affect other defs, such as columns, |
| 157 | // and they're therefore dependent on columns being handled first. |
| 158 | func assignTableDefs(ctx *Context, node tree.TableDefs, target *vitess.DDL) error { |
| 159 | sortedNode := make(tree.TableDefs, len(node)) |
| 160 | copy(sortedNode, node) |
| 161 | sort.Slice(sortedNode, func(i, j int) bool { |
| 162 | var cmps [2]int |
| 163 | for cmpsIdx := range []tree.TableDef{sortedNode[i], sortedNode[j]} { |
| 164 | switch sortedNode[i].(type) { |
| 165 | case *tree.IndexTableDef: |
| 166 | cmps[cmpsIdx] = 1 |
| 167 | case *tree.UniqueConstraintTableDef: |
| 168 | cmps[cmpsIdx] = 2 |
| 169 | default: |
| 170 | cmps[cmpsIdx] = 0 |
| 171 | } |
| 172 | } |
| 173 | return cmps[0] < cmps[1] |
| 174 | }) |
| 175 | for i := range sortedNode { |
| 176 | if err := assignTableDef(ctx, sortedNode[i], target); err != nil { |
| 177 | return err |
| 178 | } |
| 179 | } |
| 180 | return nil |
| 181 | } |
no test coverage detected