Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4ca1810d07 |
@@ -4,6 +4,7 @@ import (
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"os"
|
||||
"sort"
|
||||
"strings"
|
||||
|
||||
"github.com/google/uuid"
|
||||
@@ -155,8 +156,15 @@ func (w *Writer) mapTableFields(table *models.Table) models.DCTXTable {
|
||||
},
|
||||
}
|
||||
|
||||
columnNames := make([]string, 0, len(table.Columns))
|
||||
for name := range table.Columns {
|
||||
columnNames = append(columnNames, name)
|
||||
}
|
||||
sort.Strings(columnNames)
|
||||
|
||||
i := 0
|
||||
for _, column := range table.Columns {
|
||||
for _, colName := range columnNames {
|
||||
column := table.Columns[colName]
|
||||
dctxTable.Fields[i] = w.mapField(column)
|
||||
i++
|
||||
}
|
||||
@@ -165,12 +173,27 @@ func (w *Writer) mapTableFields(table *models.Table) models.DCTXTable {
|
||||
}
|
||||
|
||||
func (w *Writer) mapTableKeys(table *models.Table) []models.DCTXKey {
|
||||
keys := make([]models.DCTXKey, len(table.Indexes))
|
||||
i := 0
|
||||
indexes := make([]*models.Index, 0, len(table.Indexes))
|
||||
for _, index := range table.Indexes {
|
||||
keys[i] = w.mapKey(index, table)
|
||||
i++
|
||||
indexes = append(indexes, index)
|
||||
}
|
||||
|
||||
// Stable ordering for deterministic output and test reproducibility:
|
||||
// primary keys first, then lexicographic by index name.
|
||||
sort.Slice(indexes, func(i, j int) bool {
|
||||
iPrimary := strings.HasSuffix(indexes[i].Name, "_pkey")
|
||||
jPrimary := strings.HasSuffix(indexes[j].Name, "_pkey")
|
||||
if iPrimary != jPrimary {
|
||||
return iPrimary
|
||||
}
|
||||
return indexes[i].Name < indexes[j].Name
|
||||
})
|
||||
|
||||
keys := make([]models.DCTXKey, len(indexes))
|
||||
for i, index := range indexes {
|
||||
keys[i] = w.mapKey(index, table)
|
||||
}
|
||||
|
||||
return keys
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user