feat: mark generated and identity columns across writers and DBML
- bun: scanonly+generated for GENERATED columns; scanonly+identity for ALWAYS identity (PK gets identity only) - gorm: <-:false+generated / identity, same primary key rule - dbml: write GENERATED/IDENTITY column notes and read them back into the model - pgsql: emit generation/identity clauses in migration create-table and add-column, no DEFAULT - readmes updated
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
package bun
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.warky.dev/wdevs/relspecgo/pkg/models"
|
||||
)
|
||||
|
||||
func TestBuildBunTag_IdentityColumn(t *testing.T) {
|
||||
mapper := NewTypeMapper("", "")
|
||||
|
||||
build := func(pk bool, identity bool, generation string) *models.Column {
|
||||
col := models.InitColumn("id", "users", "public")
|
||||
col.Type = "bigint"
|
||||
col.IsPrimaryKey = pk
|
||||
col.Identity = identity
|
||||
col.IdentityGeneration = generation
|
||||
return col
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
column *models.Column
|
||||
wantFlag bool
|
||||
wantMarker bool
|
||||
}{
|
||||
{"always identity non-pk is write-blocked", build(false, true, "ALWAYS"), true, true},
|
||||
{"always identity pk is only marked", build(true, true, "ALWAYS"), false, true},
|
||||
{"by default identity is writable", build(false, true, "BY DEFAULT"), false, false},
|
||||
{"non-identity is untouched", build(false, false, ""), false, false},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
tag := mapper.BuildBunTag(tt.column, nil)
|
||||
has := func(s string) bool {
|
||||
for _, p := range strings.Split(tag, ",") {
|
||||
if p == s {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
if has("scanonly") != tt.wantFlag || has("identity") != tt.wantMarker {
|
||||
t.Errorf("tag %q: scanonly/identity = %v/%v, want %v/%v", tag, has("scanonly"), has("identity"), tt.wantFlag, tt.wantMarker)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user