diff --git a/parser/parser.go b/parser/parser.go index 7548ad7..5c82cd0 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -430,21 +430,27 @@ func (p *parser) extendOperator(pipe, keyword Token) (*ExtendOperator, error) { if !ok { return op, fmt.Errorf("expected '=' followed by expression for assignment, got EOF") } - switch sep.Kind { - case TokenAssign: - col.Assign = sep.Span - col.X, err = p.expr() - if err != nil { - return op, makeErrorOpaque(err) - } - sep, ok = p.next() - if !ok || sep.Kind != TokenComma { - return op, nil - } - default: - p.prev() + + // Unlike in project, extend must be an assignment after + // the column name token. And afterwards the token must be + // a comma as a separator + if sep.Kind != TokenAssign { + return op, makeErrorOpaque(err) + } + + col.Assign = sep.Span + col.X, err = p.expr() + if err != nil { + return op, makeErrorOpaque(err) + } + sep, ok = p.next() + if !ok { return op, nil } + if sep.Kind != TokenComma { + return op, fmt.Errorf("expected '=' followed by expression for assignment, got EOF") + + } } } diff --git a/parser/parser_test.go b/parser/parser_test.go index ef74b16..0a0bb5d 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -1218,6 +1218,42 @@ var parserTests = []struct { }, }, }, + { + name: "ExtendError", + query: "StormEvents | extend FooFooF=1 State", + err: true, + want: &TabularExpr{ + Source: &TableRef{ + Table: &Ident{ + Name: "StormEvents", + NameSpan: newSpan(0, 11), + }, + }, + Operators: []TabularOperator{ + &ExtendOperator{ + Pipe: newSpan(12, 13), + Keyword: newSpan(14, 20), + Cols: []*ExtendColumn{ + { + Name: &Ident{ + Name: "FooFooF", + NameSpan: newSpan(21, 28), + }, + Assign: Span{ + Start: 28, + End: 29, + }, + X: &BasicLit{ + Kind: TokenNumber, + Value: "1", + ValueSpan: newSpan(29, 30), + }, + }, + }, + }, + }, + }, + }, { name: "UniqueCombination", query: "StormEvents | summarize by State, EventType",