buildTableEntry converts a single tableMetadata into the response shape at the requested detail level.
(t *tableMetadata, include string)
| 576 | // buildTableEntry converts a single tableMetadata into the response shape at the |
| 577 | // requested detail level. |
| 578 | func buildTableEntry(t *tableMetadata, include string) TableEntry { |
| 579 | rowCount, _ := t.RowCount.Int64() |
| 580 | entry := TableEntry{ |
| 581 | Name: t.Name, |
| 582 | RowCount: rowCount, |
| 583 | Comment: t.Comment, |
| 584 | } |
| 585 | |
| 586 | if include == schemaIncludeSummary { |
| 587 | entry.ColumnCount = len(t.Columns) |
| 588 | return entry |
| 589 | } |
| 590 | |
| 591 | // Derive primary-key columns from indexes (ColumnMetadata has no primary_key field). |
| 592 | pkColumns := primaryKeyColumns(t.Indexes) |
| 593 | |
| 594 | entry.Columns = make([]ColumnEntry, 0, len(t.Columns)) |
| 595 | for _, c := range t.Columns { |
| 596 | col := ColumnEntry{ |
| 597 | Name: c.Name, |
| 598 | Type: c.Type, |
| 599 | Nullable: c.Nullable, |
| 600 | PrimaryKey: pkColumns[c.Name], |
| 601 | } |
| 602 | if include == schemaIncludeDetails { |
| 603 | col.Default = c.Default |
| 604 | col.Comment = c.Comment |
| 605 | } |
| 606 | entry.Columns = append(entry.Columns, col) |
| 607 | } |
| 608 | |
| 609 | if include == schemaIncludeDetails { |
| 610 | entry.Indexes = make([]IndexEntry, 0, len(t.Indexes)) |
| 611 | for _, idx := range t.Indexes { |
| 612 | entry.Indexes = append(entry.Indexes, IndexEntry{ |
| 613 | Name: idx.Name, |
| 614 | Type: idx.Type, |
| 615 | Unique: idx.Unique, |
| 616 | Columns: append([]string{}, idx.Expressions...), |
| 617 | }) |
| 618 | } |
| 619 | slices.SortStableFunc(entry.Indexes, func(a, b IndexEntry) int { |
| 620 | return strings.Compare(a.Name, b.Name) |
| 621 | }) |
| 622 | |
| 623 | entry.ForeignKeys = make([]FKEntry, 0, len(t.ForeignKeys)) |
| 624 | for _, fk := range t.ForeignKeys { |
| 625 | entry.ForeignKeys = append(entry.ForeignKeys, FKEntry{ |
| 626 | Name: fk.Name, |
| 627 | Columns: append([]string{}, fk.Columns...), |
| 628 | ReferencedTable: fk.ReferencedTable, |
| 629 | ReferencedColumns: append([]string{}, fk.ReferencedColumns...), |
| 630 | }) |
| 631 | } |
| 632 | slices.SortStableFunc(entry.ForeignKeys, func(a, b FKEntry) int { |
| 633 | return strings.Compare(a.Name, b.Name) |
| 634 | }) |
| 635 | } |
no test coverage detected