Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save jordanlewis/154b1e694efb1b0a45fd0e4dbe9fe96b to your computer and use it in GitHub Desktop.
Save jordanlewis/154b1e694efb1b0a45fd0e4dbe9fe96b to your computer and use it in GitHub Desktop.
func newSingleDistinct(
input colexecbase.Operator, distinctColIdx int, outputCol []bool, t *types.T,
) (colexecbase.Operator, error) {
switch typeconv.TypeFamilyToCanonicalTypeFamily(t.Family()) {
case types.BoolFamily:
switch t.Width() {
case -1:
default:
return &distinctBoolOp{
OneInputNode: NewOneInputNode(input),
distinctColIdx: distinctColIdx,
outputCol: outputCol,
}, nil
}
case types.BytesFamily:
switch t.Width() {
case -1:
default:
return &distinctBytesOp{
OneInputNode: NewOneInputNode(input),
distinctColIdx: distinctColIdx,
outputCol: outputCol,
}, nil
}
case types.DecimalFamily:
switch t.Width() {
case -1:
default:
return &distinctDecimalOp{
OneInputNode: NewOneInputNode(input),
distinctColIdx: distinctColIdx,
outputCol: outputCol,
}, nil
}
case types.IntFamily:
switch t.Width() {
case 16:
return &distinctInt16Op{
OneInputNode: NewOneInputNode(input),
distinctColIdx: distinctColIdx,
outputCol: outputCol,
}, nil
case 32:
return &distinctInt32Op{
OneInputNode: NewOneInputNode(input),
distinctColIdx: distinctColIdx,
outputCol: outputCol,
}, nil
case -1:
default:
return &distinctInt64Op{
OneInputNode: NewOneInputNode(input),
distinctColIdx: distinctColIdx,
outputCol: outputCol,
}, nil
}
case types.FloatFamily:
switch t.Width() {
case -1:
default:
return &distinctFloat64Op{
OneInputNode: NewOneInputNode(input),
distinctColIdx: distinctColIdx,
outputCol: outputCol,
}, nil
}
case types.TimestampTZFamily:
switch t.Width() {
case -1:
default:
return &distinctTimestampOp{
OneInputNode: NewOneInputNode(input),
distinctColIdx: distinctColIdx,
outputCol: outputCol,
}, nil
}
case types.IntervalFamily:
switch t.Width() {
case -1:
default:
return &distinctIntervalOp{
OneInputNode: NewOneInputNode(input),
distinctColIdx: distinctColIdx,
outputCol: outputCol,
}, nil
}
case typeconv.DatumVecCanonicalTypeFamily:
switch t.Width() {
case -1:
default:
return &distinctDatumOp{
OneInputNode: NewOneInputNode(input),
distinctColIdx: distinctColIdx,
outputCol: outputCol,
}, nil
}
}
return nil, errors.Errorf("unsupported distinct type %s", t)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment