forked from scylladb/gocqlx
-
Notifications
You must be signed in to change notification settings - Fork 0
/
batchx.go
49 lines (42 loc) · 1.6 KB
/
batchx.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package gocqlx
import (
"github.com/gocql/gocql"
)
type Batch struct {
*gocql.Batch
}
// NewBatch creates a new batch operation using defaults defined in the cluster.
func (s *Session) NewBatch(bt gocql.BatchType) *Batch {
return &Batch{
Batch: s.Session.NewBatch(bt),
}
}
// BindStruct binds query named parameters to values from arg using a mapper.
// If value cannot be found an error is reported.
func (b *Batch) BindStruct(qry *Queryx, arg interface{}) error {
args, err := qry.bindStructArgs(arg, nil)
if err != nil {
return err
}
b.Query(qry.Statement(), args...)
return nil
}
// ExecuteBatch executes a batch operation and returns nil if successful
// otherwise an error describing the failure.
func (s *Session) ExecuteBatch(batch *Batch) error {
return s.Session.ExecuteBatch(batch.Batch)
}
// ExecuteBatchCAS executes a batch operation and returns true if successful and
// an iterator (to scan additional rows if more than one conditional statement)
// was sent.
// Further scans on the interator must also remember to include
// the applied boolean as the first argument to *Iter.Scan
func (s *Session) ExecuteBatchCAS(batch *Batch, dest ...interface{}) (applied bool, iter *gocql.Iter, err error) {
return s.Session.ExecuteBatchCAS(batch.Batch, dest...)
}
// MapExecuteBatchCAS executes a batch operation much like ExecuteBatchCAS,
// however it accepts a map rather than a list of arguments for the initial
// scan.
func (s *Session) MapExecuteBatchCAS(batch *Batch, dest map[string]interface{}) (applied bool, iter *gocql.Iter, err error) {
return s.Session.MapExecuteBatchCAS(batch.Batch, dest)
}