func curs(pairs ...interface{}) queryCursor { if len(pairs)%2 != 0 { panic("curs() takes only even pairs") } pre := &bytes.Buffer{} if _, err := cmpbin.WriteUint(pre, uint64(len(pairs)/2)); err != nil { panic(err) } post := serialize.Invertible(&bytes.Buffer{}) for i := 0; i < len(pairs); i += 2 { k, v := pairs[i].(string), pairs[i+1] col, err := dstore.ParseIndexColumn(k) if err != nil { panic(err) } post.SetInvert(col.Descending) if err := serialize.WriteIndexColumn(pre, col); err != nil { panic(err) } if err := serialize.WriteProperty(post, serialize.WithoutContext, prop(v)); err != nil { panic(err) } } return queryCursor(serialize.Join(pre.Bytes(), post.Bytes())) }
func indx(kind string, orders ...string) *ds.IndexDefinition { ancestor := false if kind[len(kind)-1] == '!' { ancestor = true kind = kind[:len(kind)-1] } ret := &ds.IndexDefinition{Kind: kind, Ancestor: ancestor} for _, o := range orders { col, err := ds.ParseIndexColumn(o) if err != nil { panic(err) } ret.SortBy = append(ret.SortBy, col) } return ret }