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)
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)
if err != nil {
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)
for _, query := range queries {
typ := "text"
@@ -193,7 +199,7 @@ func (e *Db) Read(ctx context.Context, req *db.ReadRequest, rsp *db.ReadResponse
case itemNotEquals:
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
if err != nil {