Merge pull request #6004 from influxdata/js-5728-improper-semicolon-handling

Properly handle semi-colons as part of the main query loop
pull/6065/head
Jonathan A. Sternberg 2016-03-22 16:45:56 -04:00
commit cabcf4f2ae
3 changed files with 14 additions and 3 deletions

View File

@ -12,6 +12,7 @@
### Bugfixes
- [#5152](https://github.com/influxdata/influxdb/issues/5152): Fix where filters when a tag and a filter are combined with OR.
- [#5728](https://github.com/influxdata/influxdb/issues/5728): Properly handle semi-colons as part of the main query loop.
## v0.11.0 [unreleased]

View File

@ -63,14 +63,17 @@ func MustParseExpr(s string) Expr {
// ParseQuery parses an InfluxQL string and returns a Query AST object.
func (p *Parser) ParseQuery() (*Query, error) {
var statements Statements
var semi bool
semi := true
for {
if tok, _, _ := p.scanIgnoreWhitespace(); tok == EOF {
if tok, pos, lit := p.scanIgnoreWhitespace(); tok == EOF {
return &Query{Statements: statements}, nil
} else if !semi && tok == SEMICOLON {
} else if tok == SEMICOLON {
semi = true
} else {
if !semi {
return nil, newParseError(tokstr(tok, lit), []string{";"}, pos)
}
p.unscan()
s, err := p.ParseStatement()
if err != nil {

View File

@ -51,6 +51,13 @@ func TestParser_ParseQuery_ParseError(t *testing.T) {
}
}
func TestParser_ParseQuery_NoSemicolon(t *testing.T) {
_, err := influxql.NewParser(strings.NewReader(`CREATE DATABASE foo CREATE DATABASE bar`)).ParseQuery()
if err == nil || err.Error() != `found CREATE, expected ; at line 1, char 21` {
t.Fatalf("unexpected error: %s", err)
}
}
// Ensure the parser can parse strings into Statement ASTs.
func TestParser_ParseStatement(t *testing.T) {
// For use in various tests.