123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- package gen
- import (
- "sort"
- "testing"
- "github.com/stretchr/testify/assert"
- "github.com/wuntsong-org/go-zero-plus/tools/goctlwt/model/sql/parser"
- "github.com/wuntsong-org/go-zero-plus/tools/goctlwt/util/stringx"
- )
- func TestGenCacheKeys(t *testing.T) {
- primaryField := &parser.Field{
- Name: stringx.From("id"),
- DataType: "int64",
- Comment: "自增id",
- SeqInIndex: 1,
- }
- mobileField := &parser.Field{
- Name: stringx.From("mobile"),
- DataType: "string",
- Comment: "手机号",
- SeqInIndex: 1,
- }
- classField := &parser.Field{
- Name: stringx.From("class"),
- DataType: "string",
- Comment: "班级",
- SeqInIndex: 1,
- }
- nameField := &parser.Field{
- Name: stringx.From("name"),
- DataType: "string",
- Comment: "姓名",
- SeqInIndex: 2,
- }
- primariCacheKey, uniqueCacheKey := genCacheKeys(parser.Table{
- Name: stringx.From("user"),
- Db: stringx.From("go_zero"),
- PrimaryKey: parser.Primary{
- Field: *primaryField,
- AutoIncrement: true,
- },
- UniqueIndex: map[string][]*parser.Field{
- "mobile_unique": {
- mobileField,
- },
- "class_name_unique": {
- classField,
- nameField,
- },
- },
- Fields: []*parser.Field{
- primaryField,
- mobileField,
- classField,
- nameField,
- {
- Name: stringx.From("createTime"),
- DataType: "time.Time",
- Comment: "创建时间",
- },
- {
- Name: stringx.From("updateTime"),
- DataType: "time.Time",
- Comment: "更新时间",
- },
- },
- })
- t.Run("primaryCacheKey", func(t *testing.T) {
- assert.Equal(t, true, func() bool {
- return cacheKeyEqual(primariCacheKey, Key{
- VarLeft: "cacheGoZeroUserIdPrefix",
- VarRight: `"cache:goZero:user:id:"`,
- VarExpression: `cacheGoZeroUserIdPrefix = "cache:goZero:user:id:"`,
- KeyLeft: "goZeroUserIdKey",
- KeyRight: `fmt.Sprintf("%s%v", cacheGoZeroUserIdPrefix, id)`,
- DataKeyRight: `fmt.Sprintf("%s%v", cacheGoZeroUserIdPrefix, data.ID)`,
- KeyExpression: `goZeroUserIdKey := fmt.Sprintf("%s%v", cacheGoZeroUserIdPrefix, id)`,
- DataKeyExpression: `goZeroUserIdKey := fmt.Sprintf("%s%v", cacheGoZeroUserIdPrefix, data.ID)`,
- FieldNameJoin: []string{"id"},
- })
- }())
- })
- t.Run("uniqueCacheKey", func(t *testing.T) {
- assert.Equal(t, true, func() bool {
- expected := []Key{
- {
- VarLeft: "cacheGoZeroUserClassNamePrefix",
- VarRight: `"cache:goZero:user:class:name:"`,
- VarExpression: `cacheGoZeroUserClassNamePrefix = "cache:goZero:user:class:name:"`,
- KeyLeft: "goZeroUserClassNameKey",
- KeyRight: `fmt.Sprintf("%s%v:%v", cacheGoZeroUserClassNamePrefix, class, name)`,
- DataKeyRight: `fmt.Sprintf("%s%v:%v", cacheGoZeroUserClassNamePrefix, data.Class, data.Name)`,
- KeyExpression: `goZeroUserClassNameKey := fmt.Sprintf("%s%v:%v", cacheGoZeroUserClassNamePrefix, class, name)`,
- DataKeyExpression: `goZeroUserClassNameKey := fmt.Sprintf("%s%v:%v", cacheGoZeroUserClassNamePrefix, data.Class, data.Name)`,
- FieldNameJoin: []string{"class", "name"},
- },
- {
- VarLeft: "cacheGoZeroUserMobilePrefix",
- VarRight: `"cache:goZero:user:mobile:"`,
- VarExpression: `cacheGoZeroUserMobilePrefix = "cache:goZero:user:mobile:"`,
- KeyLeft: "goZeroUserMobileKey",
- KeyRight: `fmt.Sprintf("%s%v", cacheGoZeroUserMobilePrefix, mobile)`,
- DataKeyRight: `fmt.Sprintf("%s%v", cacheGoZeroUserMobilePrefix, data.Mobile)`,
- KeyExpression: `goZeroUserMobileKey := fmt.Sprintf("%s%v", cacheGoZeroUserMobilePrefix, mobile)`,
- DataKeyExpression: `goZeroUserMobileKey := fmt.Sprintf("%s%v", cacheGoZeroUserMobilePrefix, data.Mobile)`,
- FieldNameJoin: []string{"mobile"},
- },
- }
- sort.Slice(uniqueCacheKey, func(i, j int) bool {
- return uniqueCacheKey[i].VarLeft < uniqueCacheKey[j].VarLeft
- })
- if len(expected) != len(uniqueCacheKey) {
- return false
- }
- for index, each := range uniqueCacheKey {
- expecting := expected[index]
- if !cacheKeyEqual(expecting, each) {
- return false
- }
- }
- return true
- }())
- })
- t.Run("no database name", func(t *testing.T) {
- primariCacheKey, _ = genCacheKeys(parser.Table{
- Name: stringx.From("user"),
- Db: stringx.From(""),
- PrimaryKey: parser.Primary{
- Field: *primaryField,
- AutoIncrement: true,
- },
- UniqueIndex: map[string][]*parser.Field{
- "mobile_unique": {
- mobileField,
- },
- "class_name_unique": {
- classField,
- nameField,
- },
- },
- Fields: []*parser.Field{
- primaryField,
- mobileField,
- classField,
- nameField,
- {
- Name: stringx.From("createTime"),
- DataType: "time.Time",
- Comment: "创建时间",
- },
- {
- Name: stringx.From("updateTime"),
- DataType: "time.Time",
- Comment: "更新时间",
- },
- },
- })
- assert.Equal(t, true, func() bool {
- return cacheKeyEqual(primariCacheKey, Key{
- VarLeft: "cacheUserIdPrefix",
- VarRight: `"cache:user:id:"`,
- VarExpression: `cacheUserIdPrefix = "cache:user:id:"`,
- KeyLeft: "userIdKey",
- KeyRight: `fmt.Sprintf("%s%v", cacheUserIdPrefix, id)`,
- DataKeyRight: `fmt.Sprintf("%s%v", cacheUserIdPrefix, data.ID)`,
- KeyExpression: `userIdKey := fmt.Sprintf("%s%v", cacheUserIdPrefix, id)`,
- DataKeyExpression: `userIdKey := fmt.Sprintf("%s%v", cacheUserIdPrefix, data.ID)`,
- FieldNameJoin: []string{"id"},
- })
- }())
- })
- }
- func cacheKeyEqual(k1, k2 Key) bool {
- k1Join := k1.FieldNameJoin
- k2Join := k2.FieldNameJoin
- sort.Strings(k1Join)
- sort.Strings(k2Join)
- if len(k1Join) != len(k2Join) {
- return false
- }
- for index, each := range k1Join {
- k2Item := k2Join[index]
- if each != k2Item {
- return false
- }
- }
- return k1.VarLeft == k2.VarLeft &&
- k1.VarRight == k2.VarRight &&
- k1.VarExpression == k2.VarExpression &&
- k1.KeyLeft == k2.KeyLeft &&
- k1.KeyRight == k2.KeyRight &&
- k1.DataKeyRight == k2.DataKeyRight &&
- k1.DataKeyExpression == k2.DataKeyExpression &&
- k1.KeyExpression == k2.KeyExpression
- }
|