func (a Points) Clone() []Point {
	other := make([]Point, len(a))
	for i, p := range a {
		if p == nil {
			other[i] = nil
			continue
		}
		switch p := p.(type) {
		case *FloatPoint:
			other[i] = p.Clone()
		case *IntegerPoint:
			other[i] = p.Clone()
		case *UnsignedPoint:
			other[i] = p.Clone()
		case *StringPoint:
			other[i] = p.Clone()
		case *BooleanPoint:
			other[i] = p.Clone()
		default:
			panic(fmt.Sprintf("unable to clone point: %T", p))
		}
	}
	return other
}
Clone returns a deep copy of a.
package query
import (
	"bytes"
	"encoding/binary"
	"fmt"
	"io"
	"math"
	"sort"
	"github.com/gogo/protobuf/proto"
	internal "github.com/influxdata/influxdb/query/internal"
	"github.com/influxdata/influxql"
)
const ZeroTime = int64(math.MinInt64)
type Point interface {
	name() string
	tags() Tags
	time() int64
	value() interface{}
	aux() []interface{}
}
type Points []Point