Skip to content

Commit d55bb22

Browse files
authored
internal/parser/shared: support mongo index on time.Time type (#273)
1 parent 12c342b commit d55bb22

7 files changed

Lines changed: 61 additions & 9 deletions

File tree

e2e/mongo/nested/gen_User_mongo_orm.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package nested
22

33
import (
44
"context"
5+
"time"
56

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

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

15+
// To import `time` package globally to satisfy `time.Time` index in yaml definition
16+
var _ time.Time
17+
1418
var UserIndexes = []mongo.IndexModel{
1519
{
1620
Keys: UserIndexKey_Username,

e2e/mongo/user/gen_UserBlog_mongo_orm.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package user
22

33
import (
44
"context"
5+
"time"
56

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

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

15+
// To import `time` package globally to satisfy `time.Time` index in yaml definition
16+
var _ time.Time
17+
1418
var UserBlogIndexes = []mongo.IndexModel{
1519
{
1620
Keys: UserBlogIndexKey_UserId,

e2e/mongo/user/gen_User_mongo_orm.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package user
22

33
import (
44
"context"
5+
"time"
56

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

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

15+
// To import `time` package globally to satisfy `time.Time` index in yaml definition
16+
var _ time.Time
17+
1418
var UserIndexes = []mongo.IndexModel{
1519
{
1620
Keys: UserIndexKey_UsernameAge,
@@ -21,6 +25,9 @@ var UserIndexes = []mongo.IndexModel{
2125
{
2226
Keys: UserIndexKey_Age,
2327
},
28+
{
29+
Keys: UserIndexKey_RegisterDate,
30+
},
2431
}
2532

2633
var UserIndexesFunc = func() {
@@ -36,6 +43,9 @@ var UserIndexKey_Username = bson.D{
3643
var UserIndexKey_Age = bson.D{
3744
{Key: "Age", Value: 1},
3845
}
46+
var UserIndexKey_RegisterDate = bson.D{
47+
{Key: "RegisterDate", Value: 1},
48+
}
3949

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

239+
func (o *_UserMgr) FindByRegisterDate(ctx context.Context, RegisterDate time.Time, limit int, offset int, sortFields interface{}) (result []*User, err error) {
240+
query := bson.M{
241+
"RegisterDate": RegisterDate,
242+
}
243+
cursor, err := o.Query(ctx, query, limit, offset, sortFields)
244+
if err != nil {
245+
return nil, err
246+
}
247+
err = cursor.All(ctx, &result)
248+
return
249+
}
250+
229251
func (o *_UserMgr) Find(ctx context.Context, query interface{}, limit int, offset int, sortFields interface{}) (result []*User, err error) {
230252
cursor, err := o.Query(ctx, query, limit, offset, sortFields)
231253
if err != nil {

e2e/mongo/user/gen_User_struct.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@ const (
3535
type UserMgoSortField_WRP = primitive.D
3636

3737
var (
38-
UserMgoSortFieldIDAsc = primitive.E{Key: "_id", Value: 1}
39-
UserMgoSortFieldIDDesc = primitive.E{Key: "_id", Value: -1}
40-
UserMgoSortFieldAgeAsc = primitive.E{Key: "Age", Value: 1}
41-
UserMgoSortFieldAgeDesc = primitive.E{Key: "Age", Value: -1}
38+
UserMgoSortFieldIDAsc = primitive.E{Key: "_id", Value: 1}
39+
UserMgoSortFieldIDDesc = primitive.E{Key: "_id", Value: -1}
40+
UserMgoSortFieldAgeAsc = primitive.E{Key: "Age", Value: 1}
41+
UserMgoSortFieldAgeDesc = primitive.E{Key: "Age", Value: -1}
42+
UserMgoSortFieldRegisterDateAsc = primitive.E{Key: "registerDate", Value: 1}
43+
UserMgoSortFieldRegisterDateDesc = primitive.E{Key: "registerDate", Value: -1}
4244
)
4345

4446
func (p *User) GetNameSpace() string {

e2e/mongo/user/user.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ User:
1212
flags: [sort]
1313
- RegisterDate: time.Time
1414
attrs: {bsonTag: "registerDate", jsonTag: "registerDate"}
15+
flags: [sort]
1516
indexes: [[Username, Age]]
1617
table: test_user
1718
dbname: test

e2e/mongo/user/user_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,11 +299,13 @@ func TestFindByIndexes(t *testing.T) {
299299
u1.UserId = uid1
300300
u1.Username = uname1
301301
u1.Age = globalAge
302+
u1.RegisterDate = time.Now()
302303

303304
u2 := user.Get_UserMgr().NewUser()
304305
u2.UserId = uid2
305306
u2.Username = uname2
306307
u2.Age = globalAge
308+
u2.RegisterDate = time.Now().Add(time.Hour)
307309

308310
cleanFn := initUsersHelper(t, u1, u2)
309311
{
@@ -326,11 +328,24 @@ func TestFindByIndexes(t *testing.T) {
326328
t.Fatalf("unexpected length of users, got %d, expect: %d", l, 0)
327329
}
328330
}
331+
{
332+
users, err := user.Get_UserMgr().FindAll(ctx, bson.M{}, user.UserMgoSortField_WRP{user.UserMgoSortFieldRegisterDateDesc})
333+
if err != nil {
334+
t.Fatalf("failed to find by username and age: %s", err)
335+
}
336+
if l := len(users); l != 2 {
337+
t.Fatalf("unexpected length of users, got %d, expect: %d", l, 2)
338+
}
339+
if uid := users[0].UserId; uid != uid2 {
340+
t.Fatalf("unexpected uid of users, got: %d, expect: %d", uid, uid2)
341+
}
342+
}
329343

330344
if err := cleanFn(ctx); err != nil {
331345
t.Fatalf("failed to remove all users: %s", err)
332346
}
333347
}
348+
334349
func TestCount(t *testing.T) {
335350
const (
336351
uid1 = 1

internal/parser/shared/tpl/mongo_orm.gogo

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,20 @@
44
{{if ($obj.DbSwitch "mongo")}}
55
import (
66
"context"
7+
"time"
78

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

10-
"go.mongodb.org/mongo-driver/bson"
11-
"go.mongodb.org/mongo-driver/bson/primitive"
12-
"go.mongodb.org/mongo-driver/mongo"
13-
"go.mongodb.org/mongo-driver/mongo/options"
11+
"go.mongodb.org/mongo-driver/bson"
12+
"go.mongodb.org/mongo-driver/bson/primitive"
13+
"go.mongodb.org/mongo-driver/mongo"
14+
"go.mongodb.org/mongo-driver/mongo/options"
1415
)
1516

16-
{{- if gt (len $obj.Indexes) 0}}
17+
// To import `time` package globally to satisfy `time.Time` index in yaml definition
18+
var _ time.Time
19+
20+
{{if gt (len $obj.Indexes) 0}}
1721
var {{$obj.Name}}Indexes = []mongo.IndexModel{
1822
{{- range $index := $obj.Indexes}}
1923
{

0 commit comments

Comments
 (0)