diff --git a/support/join.go b/support/orm/join.go similarity index 100% rename from support/join.go rename to support/orm/join.go diff --git a/support/orm/orderBy.go b/support/orm/orderBy.go new file mode 100644 index 0000000..d715992 --- /dev/null +++ b/support/orm/orderBy.go @@ -0,0 +1,36 @@ +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/relation.go b/support/orm/relation.go similarity index 100% rename from support/relation.go rename to support/orm/relation.go