diff --git a/qcode/lex.go b/qcode/lex.go index 4a35a0d..03858e2 100644 --- a/qcode/lex.go +++ b/qcode/lex.go @@ -398,7 +398,7 @@ func isSpace(r rune) bool { // isEndOfLine reports whether r is an end-of-line character. func isEndOfLine(r rune) bool { - return r == '\r' || r == '\n' + return r == '\r' || r == '\n' || r == eof } // isAlphaNumeric reports whether r is an alphabetic, digit, or underscore. diff --git a/qcode/parse_test.go b/qcode/parse_test.go index 8ca96b1..bb1b2e2 100644 --- a/qcode/parse_test.go +++ b/qcode/parse_test.go @@ -58,6 +58,14 @@ func TestCompile(t *testing.T) { } } +func TestInvalidCompile(t *testing.T) { + qcompile, _ := NewCompiler(Config{}) + _, err := qcompile.CompileQuery(`#`) + if err == nil { + t.Fatal(errors.New("expecting an error")) + } +} + func TestEmptyCompile(t *testing.T) { qcompile, _ := NewCompiler(Config{}) _, err := qcompile.CompileQuery(``) diff --git a/qcode/qcode.go b/qcode/qcode.go index e2cefa5..2308d05 100644 --- a/qcode/qcode.go +++ b/qcode/qcode.go @@ -1,6 +1,7 @@ package qcode import ( + "errors" "fmt" "strings" @@ -355,6 +356,10 @@ func (com *Compiler) compileQuery(op *Operation) (*Query, error) { } } + if selRoot == nil { + return nil, errors.New("invalid query") + } + return &Query{selRoot}, nil }