From 1ce61a83778929901c3aa4baad77908243457a4b Mon Sep 17 00:00:00 2001 From: what Date: Thu, 20 Apr 2023 16:50:48 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=20=E6=96=B0=E5=A2=9E=20orm=20helper?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- helper/orm.go | 30 ++++++++++++++++++++++++++++++ orm.go | 8 +++++++- support/orm/join.go | 1 - support/orm/orderBy.go | 36 ------------------------------------ support/orm/relation.go | 1 - 5 files changed, 37 insertions(+), 39 deletions(-) create mode 100644 helper/orm.go delete mode 100644 support/orm/join.go delete mode 100644 support/orm/orderBy.go delete mode 100644 support/orm/relation.go diff --git a/helper/orm.go b/helper/orm.go new file mode 100644 index 0000000..3266e49 --- /dev/null +++ b/helper/orm.go @@ -0,0 +1,30 @@ +package helper + +import ( + "git.fsdpf.net/go/contracts" + "git.fsdpf.net/go/contracts/base" +) + +// @title 创建关联模型 +// @param t 关联类型 +// @param m 关联模型 +// @param rResource 链接父模型 +// @param rField 连接父模型字段, 如 xx_id +// @param rForeignKey 关联外键, 如 id +type NewOrmRelationModel func(t contracts.RelationType, m contracts.Model, rResource, rField, rForeignKey string) contracts.Model + +type NewOrmJoin func(t contracts.RelationType, res contracts.Resource, alias, rResource, rField, rForeignKey string) contracts.Join + +type NewOrmCondition func(typ contracts.ConditionType, describe string) contracts.Condition + +type NewOrmConditionExpr func(rResource, rField, token string, operator contracts.ConditionOperator, tType contracts.ConditionTokenType, ignoreEmptyParma bool) contracts.ConditionExpr + +type NewOrmConditionFuncExpr func(rResource, rField, token, fn, fnParam, string, operator contracts.ConditionOperator, tType contracts.ConditionTokenType, ignoreEmptyParma bool) contracts.ConditionExpr + +type NewOrmConditionByRes func(items []base.ResCondition) contracts.Condition + +type NewOrmQueryField func(rField base.ResField, t contracts.QueryDataType, alias string, options int) contracts.QueryField + +type NewOrderBy func(sql string, direction contracts.OrderByDirection) contracts.OrderBy + +type NewGroupBy func(sql string) contracts.GroupBy diff --git a/orm.go b/orm.go index db18375..5b5cde5 100644 --- a/orm.go +++ b/orm.go @@ -2,7 +2,7 @@ package contracts import ( "reflect" - + "git.fsdpf.net/go/db" ) @@ -14,6 +14,7 @@ type QueryDataType string type ConditionType string type ConditionOperator string type ConditionTokenType string +type OrderByDirection string const ( OrmExecute_Query OrmExecute = iota @@ -69,6 +70,11 @@ const ( QueryDataType_Json QueryDataType = "json" ) +const ( + OrderByDirection_ASC OrderByDirection = db.ORDER_ASC + OrderByDirection_DESC OrderByDirection = db.ORDER_DESC +) + const ( QueryField_IsExpr = 1 << iota QueryField_IsOmitempty diff --git a/support/orm/join.go b/support/orm/join.go deleted file mode 100644 index 5800656..0000000 --- a/support/orm/join.go +++ /dev/null @@ -1 +0,0 @@ -package orm diff --git a/support/orm/orderBy.go b/support/orm/orderBy.go deleted file mode 100644 index d715992..0000000 --- a/support/orm/orderBy.go +++ /dev/null @@ -1,36 +0,0 @@ -package orm - -import ( - "git.fsdpf.net/go/contracts" - "git.fsdpf.net/go/db" -) - -type OrderByDirection string -type OrderByType string - -const ( - OrderByDirection_ASC OrderByDirection = db.ORDER_ASC - OrderByDirection_DESC OrderByDirection = db.ORDER_DESC -) - -type OrderBy struct { - sql string // SQL 或 字段 - direction OrderByDirection // 排序方向 -} - -func NewOrderBy(sql string, params ...OrderByDirection) contracts.OrderBy { - direction := OrderByDirection_ASC - if len(params) > 0 { - direction = params[0] - } - - return OrderBy{sql, direction} -} - -func (this OrderBy) ToSql() db.Expression { - return db.Raw(this.sql + " " + string(this.direction)) -} - -func (this OrderBy) Inject(dbBuilder *db.Builder, m contracts.Model) { - dbBuilder.OrderBy(this.ToSql()) -} diff --git a/support/orm/relation.go b/support/orm/relation.go deleted file mode 100644 index 5800656..0000000 --- a/support/orm/relation.go +++ /dev/null @@ -1 +0,0 @@ -package orm