Implement limit and offset for DB (#151)

This commit is contained in:
Janos Dobronszki
2021-06-10 14:48:18 +01:00
committed by GitHub
parent cf1ce91abd
commit fdbd71f368

View File

@@ -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 {