diff --git a/sql3/parser/parser.go b/sql3/parser/parser.go index fe8ebea15..3a8ff4e65 100644 --- a/sql3/parser/parser.go +++ b/sql3/parser/parser.go @@ -2742,8 +2742,12 @@ func (p *Parser) parseOperand() (expr Expr, err error) { case VARIABLE: return &Variable{Name: lit, NamePos: pos}, nil case MIN, MAX: - ident := &Ident{Name: lit, NamePos: pos, Quoted: tok == QIDENT} - return p.parseCall(ident) + pk := p.peek() + if pk == LP { + ident := &Ident{Name: lit, NamePos: pos, Quoted: false} + return p.parseCall(ident) + } + return nil, p.errorExpected(p.pos, pk, "call expression") case STRING: return &StringLit{ValuePos: pos, Value: lit}, nil case FLOAT: diff --git a/sql3/parser/parser_test.go b/sql3/parser/parser_test.go index deb53a5f9..f548692b9 100644 --- a/sql3/parser/parser_test.go +++ b/sql3/parser/parser_test.go @@ -40,6 +40,9 @@ func TestParser_ParseMinMaxColumnConstraints(t *testing.T) { t.Run("ErrNoKey", func(t *testing.T) { AssertParseStatementError(t, `CREATE TABLE tbl (col1 INT MIN`, `1:30: expected expression, found 'EOF'`) }) + t.Run("ErrNoCall", func(t *testing.T) { + AssertParseStatementError(t, `SELECT MIN;`, `1:11: expected call expression, found ';'`) + }) t.Run("Simple", func(t *testing.T) { AssertParseStatement(t, `CREATE TABLE tbl (col1 INT MIN 0)`, &parser.CreateTableStatement{ Create: pos(0),