add a name generator util func to replace fmt.Sprintf

This commit is contained in:
0x2d3c 2020-09-28 21:26:43 +08:00
parent a2faa41cbe
commit 81818b1284
3 changed files with 70 additions and 6 deletions

View File

@ -53,25 +53,23 @@ func (ns NamingStrategy) JoinTableName(str string) string {
// RelationshipFKName generate fk name for relation // RelationshipFKName generate fk name for relation
func (ns NamingStrategy) RelationshipFKName(rel Relationship) string { func (ns NamingStrategy) RelationshipFKName(rel Relationship) string {
return strings.Replace(fmt.Sprintf("fk_%s_%s", rel.Schema.Table, toDBName(rel.Name)), ".", "_", -1) return genPatternName("fk", charUnderscore, charPoint, rel.Schema.Table, toDBName(rel.Name))
} }
// CheckerName generate checker name // CheckerName generate checker name
func (ns NamingStrategy) CheckerName(table, column string) string { func (ns NamingStrategy) CheckerName(table, column string) string {
return strings.Replace(fmt.Sprintf("chk_%s_%s", table, column), ".", "_", -1) return genPatternName("chk", charUnderscore, charPoint, table, toDBName(column))
} }
// IndexName generate index name // IndexName generate index name
func (ns NamingStrategy) IndexName(table, column string) string { func (ns NamingStrategy) IndexName(table, column string) string {
idxName := fmt.Sprintf("idx_%v_%v", table, toDBName(column)) idxName := genPatternName("idx", charUnderscore, charPoint, table, toDBName(column))
idxName = strings.Replace(idxName, ".", "_", -1)
if utf8.RuneCountInString(idxName) > 64 { if utf8.RuneCountInString(idxName) > 64 {
h := sha1.New() h := sha1.New()
h.Write([]byte(idxName)) h.Write([]byte(idxName))
bs := h.Sum(nil) bs := h.Sum(nil)
idxName = fmt.Sprintf("idx%v%v", table, column)[0:56] + string(bs)[:8] idxName = genPatternName("idx", charBlank, charBlank, table, column)[0:56] + string(bs)[:8]
} }
return idxName return idxName
} }

View File

@ -195,3 +195,24 @@ type embeddedNamer struct {
Table string Table string
Namer Namer
} }
var (
charBlank = ""
charPoint = "."
charUnderscore = "_"
)
// genPatternName generate pattern string, use to replace fmt.Sprintf()
func genPatternName(prefix, intervalBefore, intervalAfter string, vars ...string) string {
for i := range vars {
if intervalBefore != charBlank {
prefix += intervalBefore + vars[i]
continue
}
prefix += vars[i]
}
if intervalAfter == charBlank {
return prefix
}
return strings.Replace(prefix, intervalAfter, intervalBefore, -1)
}

View File

@ -22,3 +22,48 @@ func TestRemoveSettingFromTag(t *testing.T) {
} }
} }
} }
func TestGenPatternName(t *testing.T) {
gives := []struct {
Prefix string
IntervalBefore string
IntervalAfter string
Vars []string
Want string
}{
{
Prefix: "fk",
IntervalBefore: charUnderscore,
IntervalAfter: charPoint,
Vars: []string{"a", "b"},
Want: "fk_a_b",
},
{
Prefix: "idx",
IntervalBefore: charUnderscore,
IntervalAfter: charPoint,
Vars: []string{"a", "b"},
Want: "idx_a_b",
},
{
Prefix: "chk",
IntervalBefore: charUnderscore,
IntervalAfter: charPoint,
Vars: []string{"a", "b"},
Want: "chk_a_b",
},
{
Prefix: "idx",
IntervalBefore: charBlank,
IntervalAfter: charBlank,
Vars: []string{"a", "b"},
Want: "idxab",
},
}
for i := range gives {
if genPatternName(gives[i].Prefix, gives[i].IntervalBefore, gives[i].IntervalAfter, gives[i].Vars...) != gives[i].Want {
t.Errorf("want %s, but got %s", gives[i].Want, genPatternName(gives[i].Prefix, gives[i].IntervalBefore, gives[i].IntervalAfter, gives[i].Vars...))
}
}
}