fix: writer/reader correctness and determinism issues

- merge: cloneTable keeps relationships; skip-tables applies to new schemas
- diff: detect schema description/owner changes
- prisma: reader no longer turns relation fields into columns, enum
  detection via declared names; writer type mapping is ordered
- typeorm writer: keep explicit SQL types that cannot be inferred
- drizzle: enum columns call the enum constant; reader resolves them
- mysql/mssql/sqlite writers: honour OutputPath, deterministic column
  and constraint order; mssql live execute covers full schema
- template: ToYAML recovers from panics; Merge nil-pointer loop
- regenerate drizzle fixtures
This commit is contained in:
2026-10-03 21:33:59 +02:00
parent 08e1417393
commit a32647ee16
15 changed files with 301 additions and 180 deletions
+7 -1
View File
@@ -30,7 +30,13 @@ func ToJSONPretty(v interface{}, indent string) string {
// ToYAML converts a value to YAML string
// Usage: {{ .Database | toYAML }}
func ToYAML(v interface{}) string {
func ToYAML(v interface{}) (out string) {
// yaml.v3 panics (rather than returning an error) for unsupported types such as channels.
defer func() {
if r := recover(); r != nil {
out = fmt.Sprintf("error: failed to marshal: %v", r)
}
}()
data, err := yaml.Marshal(v)
if err != nil {
return fmt.Sprintf("error: failed to marshal: %v", err)
+2 -5
View File
@@ -101,11 +101,8 @@ func Merge(maps ...interface{}) map[interface{}]interface{} {
for _, m := range maps {
v := reflect.ValueOf(m)
// Dereference pointers
for v.Kind() == reflect.Pointer {
if v.IsNil() {
continue
}
// Dereference pointers; a nil pointer contributes nothing
for v.Kind() == reflect.Pointer && !v.IsNil() {
v = v.Elem()
}