Skip to content

Commit

Permalink
增加和字段类型绑定的列名函数
Browse files Browse the repository at this point in the history
  • Loading branch information
yangyile committed Dec 8, 2024
1 parent a5b96cf commit 72321b8
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 21 deletions.
30 changes: 9 additions & 21 deletions internal/examples/example3/example3_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,21 +85,14 @@ func selectFunc2(t *testing.T, db *gorm.DB) []*UserOrder {
order := &Order{}
orderColumns := order.Columns()

const (
columnUserID = gormcnm.ColumnName[uint]("user_id")
columnUserName = gormcnm.ColumnName[string]("user_name")
columnOrderID = gormcnm.ColumnName[uint]("order_id")
columnOrderAmount = gormcnm.ColumnName[float64]("order_amount")
)

//这是使用名称的逻辑
var results []*UserOrder
require.NoError(t, db.Table(user.TableName()).
Select(userColumns.ColumnOperationClass.MergeStmts(
userColumns.ID.WithTable(user).AsName(columnUserID),
userColumns.Name.WithTable(user).AsName(columnUserName),
orderColumns.ID.WithTable(order).AsName(columnOrderID),
orderColumns.Amount.WithTable(order).AsName(columnOrderAmount),
userColumns.ID.WithTable(user).AsName(gormcnm.ColumnName[uint]("user_id")),
userColumns.Name.WithTable(user).AsName("user_name"),
orderColumns.ID.WithTable(order).AsName(gormcnm.New[uint]("order_id")),
orderColumns.Amount.WithTable(order).AsName("order_amount"),
)).
Joins(userColumns.LEFTJOIN(order.TableName()).On(orderColumns.UserID.WithTable(order).Eq(userColumns.ID.WithTable(user)))).
Order(userColumns.ID.WithTable(user).Ob("asc").Ob(orderColumns.ID.WithTable(order).Ob("asc")).Ox()).
Expand All @@ -114,21 +107,16 @@ func selectFunc3(t *testing.T, db *gorm.DB) []*UserOrder {
order := &Order{}
orderColumns := order.Columns()

const (
columnUserID = gormcnm.ColumnName[uint]("user_id")
columnUserName = gormcnm.ColumnName[string]("user_name")
columnOrderID = gormcnm.ColumnName[uint]("order_id")
columnOrderAmount = gormcnm.ColumnName[float64]("order_amount")
)
userOrder := &UserOrder{}

//这是使用名称的逻辑
var results []*UserOrder
require.NoError(t, db.Table(user.TableName()).
Select(userColumns.ColumnOperationClass.MergeStmts(
userColumns.ID.TC(user).AsName(columnUserID),
userColumns.Name.TC(user).AsName(columnUserName),
orderColumns.ID.TC(order).AsName(columnOrderID),
orderColumns.Amount.TC(order).AsName(columnOrderAmount),
userColumns.ID.TC(user).AsName(gormcnm.Cnm(userOrder.UserID, "user_id")),
userColumns.Name.TC(user).AsName(gormcnm.Cnm(userOrder.UserName, "user_name")),
orderColumns.ID.TC(order).AsName(gormcnm.Cnm(userOrder.OrderID, "order_id")),
orderColumns.Amount.TC(order).AsName(gormcnm.Cnm(userOrder.OrderAmount, "order_amount")),
)).
Joins(userColumns.LEFTJOIN(order.TableName()).On(orderColumns.UserID.TC(order).Eq(userColumns.ID.TC(user)))).
Order(userColumns.ID.TC(user).Ob("asc").Ob(orderColumns.ID.TC(order).Ob("asc")).Ox()).
Expand Down
9 changes: 9 additions & 0 deletions new_column_name.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package gormcnm

func New[T any](name string) ColumnName[T] {
return ColumnName[T](name)
}

func Cnm[T any](v T, name string) ColumnName[T] {
return ColumnName[T](name)
}
32 changes: 32 additions & 0 deletions new_column_name_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package gormcnm

import (
"testing"

"github.com/stretchr/testify/require"
)

func TestNew(t *testing.T) {
columnName := New[string]("name")

qs, value := columnName.Eq("abc")
t.Log(qs, value)

require.Equal(t, "name=?", qs)
require.Equal(t, "abc", value)
}

func TestCnm(t *testing.T) {
type Example struct {
Name string `gorm:"column:name;primary_key;type:varchar(100);"`
}

res := Example{}
columnName := Cnm(res.Name, "name")

qs, value := columnName.Eq("abc")
t.Log(qs, value)

require.Equal(t, "name=?", qs)
require.Equal(t, "abc", value)
}

0 comments on commit 72321b8

Please sign in to comment.