// TODO(irfansharif): This can be refactored away to use // sqlbase.EncodeDTuple([]byte, parser.DTuple) func (n *distinctNode) encodeValues(values parser.DTuple) ([]byte, []byte, error) { var prefix, suffix []byte var err error for i, val := range values { if n.columnsInOrder != nil && n.columnsInOrder[i] { if prefix == nil { prefix = make([]byte, 0, 100) } prefix, err = sqlbase.EncodeDatum(prefix, val) } else { if suffix == nil { suffix = make([]byte, 0, 100) } suffix, err = sqlbase.EncodeDatum(suffix, val) } if err != nil { break } } return prefix, suffix, err }
// encode returns the encoding of a row from a given side (left or right), // according to the columns specified by the equality constraints. func (p *joinPredicate) encode(b []byte, row parser.DTuple, cols []int) ([]byte, bool, error) { var err error containsNull := false for _, colIdx := range cols { if row[colIdx] == parser.DNull { containsNull = true } b, err = sqlbase.EncodeDatum(b, row[colIdx]) if err != nil { return nil, false, err } } return b, containsNull, nil }
func (a *aggregateFuncHolder) add(bucket []byte, d parser.Datum) error { if a.seen != nil { encoded, err := sqlbase.EncodeDatum(bucket, d) if err != nil { return err } if _, ok := a.seen[string(encoded)]; ok { // skip return nil } a.seen[string(encoded)] = struct{}{} } impl, ok := a.buckets[string(bucket)] if !ok { impl = a.create() a.buckets[string(bucket)] = impl } impl.Add(d) return nil }