diff --git a/cqlr.go b/cqlr.go index f95c426..67667b8 100644 --- a/cqlr.go +++ b/cqlr.go @@ -82,6 +82,26 @@ func (b *Binding) Close() error { return nil } +func (b *Binding) ScanMany(dest interface{}) (int, error) { + + v := reflect.ValueOf(dest) + + if v.Kind() != reflect.Ptr || v.IsNil() { + return 0, ErrInvalidPtrToSlice + } + + sp := v.Elem() + ep := reflect.New(reflect.TypeOf(dest).Elem().Elem()) + + i := 0 + for b.Scan(ep.Interface()) { + sp.Set(reflect.Append(sp, reflect.Indirect(ep))) + i = i + 1 + } + + return i, nil +} + func (b *Binding) Scan(dest interface{}) bool { v := reflect.ValueOf(dest) @@ -160,6 +180,9 @@ func (b *Binding) compile(v reflect.Value, cols []gocql.ColumnInfo) error { for i := 0; i < s.NumField(); i++ { f := s.Field(i) tag := f.Tag.Get("cql") + if tag == "" { + tag = f.Tag.Get("json") + } if tag != "" { b.strategy[tag] = indirect.Field(i) } else { @@ -215,5 +238,6 @@ func (b *Binding) compile(v reflect.Value, cols []gocql.ColumnInfo) error { } var ( - ErrMissingStrategy = errors.New("insufficient column mapping") + ErrMissingStrategy = errors.New("insufficient column mapping") + ErrInvalidPtrToSlice = errors.New("Invalid pointer to slice") )