diff --git a/engine_test.go b/engine_test.go index a3c78a3b3..99c0c3516 100644 --- a/engine_test.go +++ b/engine_test.go @@ -1026,7 +1026,7 @@ var queries = []struct { FROM ( SELECT i, - COUNT(DISTINCT s) AS foo + COUNT(s) AS foo FROM mytable GROUP BY i ) AS q diff --git a/sql/parse/parse.go b/sql/parse/parse.go index 7f4342a14..c8a69c1ea 100644 --- a/sql/parse/parse.go +++ b/sql/parse/parse.go @@ -10,11 +10,11 @@ import ( "strings" opentracing "github.com/opentracing/opentracing-go" - "gopkg.in/src-d/go-errors.v1" "github.com/src-d/go-mysql-server/sql" "github.com/src-d/go-mysql-server/sql/expression" "github.com/src-d/go-mysql-server/sql/expression/function" "github.com/src-d/go-mysql-server/sql/plan" + "gopkg.in/src-d/go-errors.v1" "vitess.io/vitess/go/vt/sqlparser" ) @@ -765,6 +765,10 @@ func exprToExpression(e sqlparser.Expr) (sql.Expression, error) { return nil, err } + if v.Distinct { + return nil, ErrUnsupportedSyntax.New("DISTINCT on aggregations") + } + return expression.NewUnresolvedFunction(v.Name.Lowered(), v.IsAggregate(), exprs...), nil case *sqlparser.ParenExpr: diff --git a/sql/parse/parse_test.go b/sql/parse/parse_test.go index c2983fb88..80c5a59ec 100644 --- a/sql/parse/parse_test.go +++ b/sql/parse/parse_test.go @@ -3,12 +3,12 @@ package parse import ( "testing" - errors "gopkg.in/src-d/go-errors.v1" "github.com/src-d/go-mysql-server/sql/expression" "github.com/src-d/go-mysql-server/sql/plan" + errors "gopkg.in/src-d/go-errors.v1" - "github.com/stretchr/testify/require" "github.com/src-d/go-mysql-server/sql" + "github.com/stretchr/testify/require" ) var fixtures = map[string]sql.Node{ @@ -1166,6 +1166,7 @@ var fixturesErrors = map[string]*errors.Kind{ `SELECT '2018-05-01' / INTERVAL 1 DAY`: ErrUnsupportedSyntax, `SELECT INTERVAL 1 DAY + INTERVAL 1 DAY`: ErrUnsupportedSyntax, `SELECT '2018-05-01' + (INTERVAL 1 DAY + INTERVAL 1 DAY)`: ErrUnsupportedSyntax, + `SELECT COUNT(DISTINCT foo) FROM b`: ErrUnsupportedSyntax, } func TestParseErrors(t *testing.T) {