What do you guys think about this...
fromClause
: FROM^ { weakKeywords(); } fromRange ( onJoin | pathJoin | COMMA! {
weakKeywords(); } fromRange )*
;
onJoin
: ( ( ( LEFT | RIGHT ) (OUTER)? ) | FULL | INNER )? JOIN^
identifier asAlias ON^ logicalExpression
;
pathJoin
: ( ( ( LEFT | RIGHT ) (OUTER)? ) | FULL | INNER )? JOIN^ (FETCH)?
path (asAlias)? (propertyFetch)? (withClause)?
;
The "pathJoin" is basically what we currently support. The "onJoin"
is what we want to support. Does it look correct to you?