Skip to content

Commit

Permalink
internal/parser/shared: support mongo index on time.Time type (#273)
Browse files Browse the repository at this point in the history
  • Loading branch information
scbizu committed May 29, 2023
1 parent 611b494 commit 7ec857a
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 9 deletions.
4 changes: 4 additions & 0 deletions e2e/mongo/nested/gen_User_mongo_orm.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package nested

import (
"context"
"time"

"github.com/ezbuy/ezorm/v2/pkg/orm"

Expand All @@ -11,6 +12,9 @@ import (
"go.mongodb.org/mongo-driver/mongo/options"
)

// To import `time` package globally to satisfy `time.Time` index in yaml definition
var _ time.Time

var UserIndexes = []mongo.IndexModel{
{
Keys: UserIndexKey_Username,
Expand Down
4 changes: 4 additions & 0 deletions e2e/mongo/user/gen_UserBlog_mongo_orm.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package user

import (
"context"
"time"

"github.com/ezbuy/ezorm/v2/pkg/orm"

Expand All @@ -11,6 +12,9 @@ import (
"go.mongodb.org/mongo-driver/mongo/options"
)

// To import `time` package globally to satisfy `time.Time` index in yaml definition
var _ time.Time

var UserBlogIndexes = []mongo.IndexModel{
{
Keys: UserBlogIndexKey_UserId,
Expand Down
22 changes: 22 additions & 0 deletions e2e/mongo/user/gen_User_mongo_orm.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package user

import (
"context"
"time"

"github.com/ezbuy/ezorm/v2/pkg/orm"

Expand All @@ -11,6 +12,9 @@ import (
"go.mongodb.org/mongo-driver/mongo/options"
)

// To import `time` package globally to satisfy `time.Time` index in yaml definition
var _ time.Time

var UserIndexes = []mongo.IndexModel{
{
Keys: UserIndexKey_UsernameAge,
Expand All @@ -21,6 +25,9 @@ var UserIndexes = []mongo.IndexModel{
{
Keys: UserIndexKey_Age,
},
{
Keys: UserIndexKey_RegisterDate,
},
}

var UserIndexesFunc = func() {
Expand All @@ -36,6 +43,9 @@ var UserIndexKey_Username = bson.D{
var UserIndexKey_Age = bson.D{
{Key: "Age", Value: 1},
}
var UserIndexKey_RegisterDate = bson.D{
{Key: "RegisterDate", Value: 1},
}

func init() {
orm.RegisterEzOrmObjByID("mongo_e2e", "User", newUserFindByID)
Expand Down Expand Up @@ -226,6 +236,18 @@ func (o *_UserMgr) FindByAge(ctx context.Context, Age int32, limit int, offset i
return
}

func (o *_UserMgr) FindByRegisterDate(ctx context.Context, RegisterDate time.Time, limit int, offset int, sortFields interface{}) (result []*User, err error) {
query := bson.M{
"RegisterDate": RegisterDate,
}
cursor, err := o.Query(ctx, query, limit, offset, sortFields)
if err != nil {
return nil, err
}
err = cursor.All(ctx, &result)
return
}

func (o *_UserMgr) Find(ctx context.Context, query interface{}, limit int, offset int, sortFields interface{}) (result []*User, err error) {
cursor, err := o.Query(ctx, query, limit, offset, sortFields)
if err != nil {
Expand Down
10 changes: 6 additions & 4 deletions e2e/mongo/user/gen_User_struct.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,12 @@ const (
type UserMgoSortField_WRP = primitive.D

var (
UserMgoSortFieldIDAsc = primitive.E{Key: "_id", Value: 1}
UserMgoSortFieldIDDesc = primitive.E{Key: "_id", Value: -1}
UserMgoSortFieldAgeAsc = primitive.E{Key: "Age", Value: 1}
UserMgoSortFieldAgeDesc = primitive.E{Key: "Age", Value: -1}
UserMgoSortFieldIDAsc = primitive.E{Key: "_id", Value: 1}
UserMgoSortFieldIDDesc = primitive.E{Key: "_id", Value: -1}
UserMgoSortFieldAgeAsc = primitive.E{Key: "Age", Value: 1}
UserMgoSortFieldAgeDesc = primitive.E{Key: "Age", Value: -1}
UserMgoSortFieldRegisterDateAsc = primitive.E{Key: "registerDate", Value: 1}
UserMgoSortFieldRegisterDateDesc = primitive.E{Key: "registerDate", Value: -1}
)

func (p *User) GetNameSpace() string {
Expand Down
1 change: 1 addition & 0 deletions e2e/mongo/user/user.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ User:
flags: [sort]
- RegisterDate: time.Time
attrs: {bsonTag: "registerDate", jsonTag: "registerDate"}
flags: [sort]
indexes: [[Username, Age]]
table: test_user
dbname: test
Expand Down
15 changes: 15 additions & 0 deletions e2e/mongo/user/user_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -299,11 +299,13 @@ func TestFindByIndexes(t *testing.T) {
u1.UserId = uid1
u1.Username = uname1
u1.Age = globalAge
u1.RegisterDate = time.Now()

u2 := user.Get_UserMgr().NewUser()
u2.UserId = uid2
u2.Username = uname2
u2.Age = globalAge
u2.RegisterDate = time.Now().Add(time.Hour)

cleanFn := initUsersHelper(t, u1, u2)
{
Expand All @@ -326,11 +328,24 @@ func TestFindByIndexes(t *testing.T) {
t.Fatalf("unexpected length of users, got %d, expect: %d", l, 0)
}
}
{
users, err := user.Get_UserMgr().FindAll(ctx, bson.M{}, user.UserMgoSortField_WRP{user.UserMgoSortFieldRegisterDateDesc})
if err != nil {
t.Fatalf("failed to find by username and age: %s", err)
}
if l := len(users); l != 2 {
t.Fatalf("unexpected length of users, got %d, expect: %d", l, 2)
}
if uid := users[0].UserId; uid != uid2 {
t.Fatalf("unexpected uid of users, got: %d, expect: %d", uid, uid2)
}
}

if err := cleanFn(ctx); err != nil {
t.Fatalf("failed to remove all users: %s", err)
}
}

func TestCount(t *testing.T) {
const (
uid1 = 1
Expand Down
14 changes: 9 additions & 5 deletions internal/parser/shared/tpl/mongo_orm.gogo
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,20 @@
{{if ($obj.DbSwitch "mongo")}}
import (
"context"
"time"

"github.com/ezbuy/ezorm/v2/pkg/orm"

"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)

{{- if gt (len $obj.Indexes) 0}}
// To import `time` package globally to satisfy `time.Time` index in yaml definition
var _ time.Time

{{if gt (len $obj.Indexes) 0}}
var {{$obj.Name}}Indexes = []mongo.IndexModel{
{{- range $index := $obj.Indexes}}
{
Expand Down

0 comments on commit 7ec857a

Please sign in to comment.