I am not sure why the update breaks so many tests neither if there is a
problem with the LOOKAHEAD but regarding CALCITE-2844, I would be inclined
to modify lines around [3] to make it work.

In particular, I would try to make <TABLE> with parentheses optional (just
in case you didn't try this so far).

Best,
Stamatis

[3]
https://github.com/apache/calcite/blob/81fa5314e94e86b6cf8df244b03f9d57c884f54d/core/src/main/codegen/templates/Parser.jj#L1884

Στις Κυρ, 31 Μαρ 2019 στις 5:16 μ.μ., ο/η Muhammad Gelbana <
[email protected]> έγραψε:

> I was trying to support selecting from table functions[1]. I tried
> extending TableRef2[2] (Production ?) to support table functions by adding
>
> > LOOKAHEAD(3)
> >
> tableRef = TableFunctionCall(getPos()))
> >
> |
> >
> before
>
> > LOOKAHEAD(2)
> > tableRef = CompoundIdentifier()
> >
>
> but it broke other tests. I tried putting my modification at the end of the
> choices while increasing the CompoundIdentifier() lookahead to 3 to avoid
> that choice when it faces the left bracket, but it didn't work too. I tried
> setting aggresively high lookahead values such as 50, and it didn't work
> too. I won't be surprised if I'm doing anything wrong as I'm not accustomed
> to working with grammar files anyway.
>
> The only thing I'm considering now is to create a new production (I'm not
> sure if I'm using this word correctly) such as TableRef3 and have that
> going down the common path between TableFunctionCall() and
> CompoundIdentifier() because TableFunctionCall() eventually attempts to
> cosnume a CompoundIdentifier(). This way I won't have to bother about
> tuning lookaheads I suppose.
>
> I can create a branch of what I've accomplished so far if you wish.
>
> [1] https://issues.apache.org/jira/browse/CALCITE-2844
> [2]
>
> https://github.com/apache/calcite/blob/master/core/src/main/codegen/templates/Parser.jj#L1811
>
> Thanks,
> Gelbana
>
>
> On Sun, Mar 31, 2019 at 4:15 PM Hongze Zhang <[email protected]> wrote:
>
> > Just out of my curiosity, could you please share your case about
> > "LOOKAHEAD doest not work as expected"? Does changing to JavaCC 5.0
> > actually fixes the problem?
> >
> > Thanks,
> > Hongze
> >
> >
> > > On Mar 31, 2019, at 19:17, Muhammad Gelbana <[email protected]>
> wrote:
> > >
> > > I'm facing trouble with supporting selecting from table function for
> > Babel
> > > parser and I beleive that LOOKAHEAD isn't working as expected too.
> > > I thought it might actually be a bug so I checked out the master branch
> > and
> > > updated the JavaCC maven plugin version to 2.6 (it's currently 2.4),
> but
> > > that failed *142* test cases and errored *9*.
> > >
> > > The plugin v2.4 imports the JavaCC library v4
> > > The plugin v2.6 imports the JavaCC library v5
> > >
> > > Unfortunately the release notes for the JavaCC library are broken and
> I'm
> > > not aware of another source for the release notes for that project.
> > > Should I open a Jira to upgrade that plugin version ?
> > >
> > > Thanks,
> > > Gelbana
> > >
> > >
> > > On Thu, Mar 28, 2019 at 4:18 AM Rui Li <[email protected]> wrote:
> > >
> > >> Thanks Hongze, that's good to know.
> > >>
> > >> On Thu, Mar 28, 2019 at 8:43 AM Hongze Zhang <[email protected]>
> wrote:
> > >>
> > >>>> Besides, if I enable forceLaCheck, JavaCC suggests to use a
> lookahead
> > >> of
> > >>> 3
> > >>>> or more. I guess we'd better get rid of these warnings if we want to
> > >>> stick
> > >>>> to lookahead(2).
> > >>>
> > >>> That makes sense. Actually we had a discussion[1] on moving to
> > >>> "LOOKAHEAD=1", and seems we are close to finish it. By doing this we
> > have
> > >>> extra benefits that we don't need to turn forceLaCheck on and JavaCC
> > >> should
> > >>> give suggestions during maven build.
> > >>>
> > >>> Hongze
> > >>>
> > >>>
> > >>> [1] https://issues.apache.org/jira/browse/CALCITE-2847
> > >>>
> > >>>> On Mar 27, 2019, at 10:40, Rui Li <[email protected]> wrote:
> > >>>>
> > >>>> Thanks Hongze for looking into the issue! Are you suggesting this is
> > >> more
> > >>>> likely to be a JavaCC bug?
> > >>>> I filed a ticket anyway in case we want to further track it:
> > >>>> https://issues.apache.org/jira/browse/CALCITE-2957
> > >>>> Besides, if I enable forceLaCheck, JavaCC suggests to use a
> lookahead
> > >> of
> > >>> 3
> > >>>> or more. I guess we'd better get rid of these warnings if we want to
> > >>> stick
> > >>>> to lookahead(2).
> > >>>>
> > >>>> On Wed, Mar 27, 2019 at 8:54 AM Hongze Zhang <[email protected]>
> > >> wrote:
> > >>>>
> > >>>>> Thanks, Yuzhao.
> > >>>>>
> > >>>>> Since the more generic problem is that the production "E()"[1]
> causes
> > >>> the
> > >>>>> parent production's looking ahead returns too early, I tried to
> find
> > a
> > >>> bad
> > >>>>> case of the same reason under current default setting LOOKAHEAD=2
> but
> > >> it
> > >>>>> seems that under this number we didn't have a chance to meet the
> > issue
> > >>> yet.
> > >>>>>
> > >>>>> So after that I suggest to not to treat this as a Calcite's issue
> > >>>>> currently.
> > >>>>>
> > >>>>> Best,
> > >>>>> Hongze
> > >>>>>
> > >>>>> [1]
> > >>>>>
> > >>>
> > >>
> >
> https://github.com/apache/calcite/blob/11c067f9992d9c8bc29e2326dd8b299ad1e9dbdc/core/src/main/codegen/templates/Parser.jj#L335
> > >>>>>
> > >>>>>> On Mar 26, 2019, at 20:42, Yuzhao Chen <[email protected]>
> > wrote:
> > >>>>>>
> > >>>>>> Maybe we should fire a jira if it is a bug.
> > >>>>>>
> > >>>>>> Best,
> > >>>>>> Danny Chan
> > >>>>>> 在 2019年3月26日 +0800 PM8:33,Hongze Zhang <[email protected]>,写道:
> > >>>>>>> Ops, correct a typo:
> > >>>>>>>
> > >>>>>>> "... after uncommenting a line ..." -> "... after commenting a
> line
> > >>>>>>> ...".
> > >>>>>>>
> > >>>>>>> Best,
> > >>>>>>> Hongze
> > >>>>>>>
> > >>>>>>> ------ Original Message ------
> > >>>>>>> From: "Hongze Zhang" <[email protected]>
> > >>>>>>> To: [email protected]
> > >>>>>>> Sent: 2019/3/26 19:28:08
> > >>>>>>> Subject: Re: Calcite doesn't work with LOOKAHEAD(3)
> > >>>>>>>
> > >>>>>>>> Firstly, thank you very much for sharing the case, Rui!
> > >>>>>>>>
> > >>>>>>>> I have run a test with the SQL you provided and also run into
> the
> > >>> same
> > >>>>> exception (under a global LOOKAHEAD 3). After debugging the
> generated
> > >>>>> parser code, I think the problem is probably in the generated
> > >> LOOKAHEAD
> > >>>>> method SqlParserImpl#jj_3R_42():
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>>> final private boolean jj_3R_42() {
> > >>>>>>>>> if (!jj_rescan) trace_call("SqlSelect(LOOKING AHEAD...)");
> > >>>>>>>>> if (jj_scan_token(SELECT)) { if (!jj_rescan)
> > >>>>> trace_return("SqlSelect(LOOKAHEAD FAILED)"); return true; }
> > >>>>>>>>> if (jj_3R_190()) { if (!jj_rescan)
> > >> trace_return("SqlSelect(LOOKAHEAD
> > >>>>> FAILED)"); return true; }
> > >>>>>>>>> { if (!jj_rescan) trace_return("SqlSelect(LOOKAHEAD
> SUCCEEDED)");
> > >>>>> return false; }
> > >>>>>>>>> }
> > >>>>>>>>
> > >>>>>>>> The LOOKAHEAD method checks only a single token <SELECT>. This
> is
> > >>>>> definitely not enough since we have already set the number to 3.
> > >>>>>>>>
> > >>>>>>>> Unfortunately I didn't find a root cause so far, but after
> > >>>>> uncommenting a line[1] in production "SqlSelect()" then everything
> > >> goes
> > >>>>> back to normal. I'm inclined to believe JavaCC has some unexpected
> > >>> behavior
> > >>>>> when dealing with LOOKAHEAD on a production with the shape like
> > >>>>> "SqlSelectKeywords()"[2].
> > >>>>>>>>
> > >>>>>>>> Please feel free to log a JIRA ticket with which we can track
> > >> further
> > >>>>> information of the issue.
> > >>>>>>>>
> > >>>>>>>> Best,
> > >>>>>>>> Hongze
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>> [1]
> > >>>>>
> > >>>
> > >>
> >
> https://github.com/apache/calcite/blob/1b430721c0d9e22b2252ffcd893b42959cb7966c/core/src/main/codegen/templates/Parser.jj#L1030
> > >>>>>>>> [2]
> > >>>>>
> > >>>
> > >>
> >
> https://github.com/apache/calcite/blob/1b430721c0d9e22b2252ffcd893b42959cb7966c/core/src/main/codegen/templates/Parser.jj#L288
> > >>>>>>>>
> > >>>>>>>> ------ Original Message ------
> > >>>>>>>> From: "Rui Li" <[email protected]>
> > >>>>>>>> To: [email protected]
> > >>>>>>>> Sent: 2019/3/26 16:53:44
> > >>>>>>>> Subject: Calcite doesn't work with LOOKAHEAD(3)
> > >>>>>>>>
> > >>>>>>>>> Hi,
> > >>>>>>>>>
> > >>>>>>>>> I'm trying to extend Calcite grammar to support some custom
> > >>>>> statements. And
> > >>>>>>>>> I need to increase LOOKAHEAD to 3 to resolve some ambiguity.
> But
> > >>> when
> > >>>>> I did
> > >>>>>>>>> that, the parser fails to parse queries like:
> > >>>>>>>>> * select t.key from (select key from src) t*
> > >>>>>>>>>
> > >>>>>>>>> With exception:
> > >>>>>>>>> *Caused by: org.apache.calcite.sql.parser.impl.ParseException:*
> > >>>>>>>>> *Encountered "( select key" at line 1, column 19.*
> > >>>>>>>>> *Was expecting one of:*
> > >>>>>>>>> * <IDENTIFIER> ...*
> > >>>>>>>>> * <QUOTED_IDENTIFIER> ...*
> > >>>>>>>>> * <BACK_QUOTED_IDENTIFIER> ...*
> > >>>>>>>>> * <BRACKET_QUOTED_IDENTIFIER> ...*
> > >>>>>>>>> * <UNICODE_QUOTED_IDENTIFIER> ...*
> > >>>>>>>>> * "LATERAL" ...*
> > >>>>>>>>> * "(" "WITH" ...*
> > >>>>>>>>> *...*
> > >>>>>>>>>
> > >>>>>>>>> So I'm wondering whether there's some limitation on the
> LOOKAHEAD
> > >> we
> > >>>>> can
> > >>>>>>>>> use?
> > >>>>>>>>>
> > >>>>>>>>> --
> > >>>>>>>>> Best regards!
> > >>>>>>>>> Rui Li
> > >>>>>
> > >>>>>
> > >>>>
> > >>>> --
> > >>>> Best regards!
> > >>>> Rui Li
> > >>>
> > >>>
> > >>
> > >> --
> > >> Best regards!
> > >> Rui Li
> > >>
> >
> >
>

Reply via email to