mirror of
https://github.com/kevin-DL/services.git
synced 2026-01-17 05:14:52 +00:00
Implement limit and offset for DB (#151)
This commit is contained in:
@@ -162,13 +162,19 @@ func (e *Db) Read(ctx context.Context, req *db.ReadRequest, rsp *db.ReadResponse
|
|||||||
logger.Infof("Reading table '%v'", tableName)
|
logger.Infof("Reading table '%v'", tableName)
|
||||||
|
|
||||||
if !re.Match([]byte(tableName)) {
|
if !re.Match([]byte(tableName)) {
|
||||||
return errors.BadRequest("db.create", fmt.Sprintf("table name %v is invalid", req.Table))
|
return errors.BadRequest("db.read", fmt.Sprintf("table name %v is invalid", req.Table))
|
||||||
}
|
}
|
||||||
|
|
||||||
db, err := e.GetDBConn(ctx)
|
db, err := e.GetDBConn(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if req.Limit > 1000 {
|
||||||
|
return errors.BadRequest("db.read", fmt.Sprintf("limit over 1000 is invalid, you specified %v", req.Limit))
|
||||||
|
}
|
||||||
|
if req.Limit == 0 {
|
||||||
|
req.Limit = 25
|
||||||
|
}
|
||||||
db = db.Table(tableName)
|
db = db.Table(tableName)
|
||||||
for _, query := range queries {
|
for _, query := range queries {
|
||||||
typ := "text"
|
typ := "text"
|
||||||
@@ -193,7 +199,7 @@ func (e *Db) Read(ctx context.Context, req *db.ReadRequest, rsp *db.ReadResponse
|
|||||||
case itemNotEquals:
|
case itemNotEquals:
|
||||||
op = "!="
|
op = "!="
|
||||||
}
|
}
|
||||||
db = db.Where(fmt.Sprintf("(data ->> '%v')::%v %v ?", query.Field, typ, op), query.Value)
|
db = db.Where(fmt.Sprintf("(data ->> '%v')::%v %v ?", query.Field, typ, op), query.Value).Offset(int(req.Offset)).Limit(int(req.Limit))
|
||||||
}
|
}
|
||||||
err = db.Find(&recs).Error
|
err = db.Find(&recs).Error
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
Reference in New Issue
Block a user