(out *strings.Builder, diff *schema.MetadataDiff)
| 677 | } |
| 678 | |
| 679 | func writeCreateTables(out *strings.Builder, diff *schema.MetadataDiff) error { |
| 680 | maps := buildCreateObjectMaps(diff) |
| 681 | graph := base.NewGraph() |
| 682 | for _, id := range sortedMapKeys(maps.tables) { |
| 683 | graph.AddNode(id) |
| 684 | } |
| 685 | for tableID, tableDiff := range maps.tables { |
| 686 | for _, fk := range tableDiff.NewTable.GetForeignKeys() { |
| 687 | depID := getMigrationObjectID(fk.GetReferencedSchema(), fk.GetReferencedTable()) |
| 688 | if _, ok := maps.tables[depID]; ok { |
| 689 | graph.AddEdge(depID, tableID) |
| 690 | } |
| 691 | } |
| 692 | } |
| 693 | |
| 694 | orderedIDs, err := graph.TopologicalSort() |
| 695 | if err != nil { |
| 696 | orderedIDs = sortedMapKeys(maps.tables) |
| 697 | } |
| 698 | for _, id := range orderedIDs { |
| 699 | if err := writeTableDiff(out, maps.tables[id]); err != nil { |
| 700 | return err |
| 701 | } |
| 702 | } |
| 703 | return nil |
| 704 | } |
| 705 | |
| 706 | func writeAlterTables(out *strings.Builder, diff *schema.MetadataDiff) error { |
| 707 | for _, tableDiff := range diff.TableChanges { |
no test coverage detected