...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package pouchdb
16
17 import (
18 "context"
19 "fmt"
20
21 "github.com/gopherjs/gopherjs/js"
22
23 "github.com/go-kivik/kivik/v4/driver"
24 internal "github.com/go-kivik/kivik/v4/int/errors"
25 )
26
27 type bulkResult struct {
28 *js.Object
29 OK bool `js:"ok"`
30 ID string `js:"id"`
31 Rev string `js:"rev"`
32 Error string `js:"name"`
33 StatusCode int `js:"status"`
34 Reason string `js:"message"`
35 IsError bool `js:"error"`
36 }
37
38 func (d *db) BulkDocs(ctx context.Context, docs []interface{}, options driver.Options) (results []driver.BulkResult, err error) {
39 defer func() {
40 if r := recover(); r != nil {
41 if e, ok := r.(error); ok {
42 err = e
43 } else {
44 err = fmt.Errorf("%v", r)
45 }
46 }
47 }()
48 opts := map[string]interface{}{}
49 options.Apply(opts)
50 result, err := d.db.BulkDocs(ctx, docs, opts)
51 if err != nil {
52 return nil, err
53 }
54 for result != js.Undefined && result.Length() > 0 {
55 r := &bulkResult{}
56 r.Object = result.Call("shift")
57 var err error
58 if r.IsError {
59 err = &internal.Error{Status: r.StatusCode, Message: r.Reason}
60 }
61 results = append(results, driver.BulkResult{
62 ID: r.ID,
63 Rev: r.Rev,
64 Error: err,
65 })
66 }
67
68 return results, nil
69 }
70
View as plain text