| From: | Henson Choi <assam258(at)gmail(dot)com> |
|---|---|
| To: | Ashutosh Bapat <ashutosh(dot)bapat(dot)oss(at)gmail(dot)com> |
| Cc: | Alexander Lakhin <exclusion(at)gmail(dot)com>, Peter Eisentraut <peter(at)eisentraut(dot)org>, Amit Langote <amitlangote09(at)gmail(dot)com>, Junwang Zhao <zhjwpku(at)gmail(dot)com>, Vik Fearing <vik(at)postgresfriends(dot)org>, Ajay Pal <ajay(dot)pal(dot)k(at)gmail(dot)com>, Imran Zaheer <imran(dot)zhir(at)gmail(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org> |
| Subject: | Re: SQL Property Graph Queries (SQL/PGQ) |
| Date: | 2026-03-24 01:05:28 |
| Message-ID: | CAAAe_zCg4xpB7Giu_KjLaa39LKF=cVm58tBveezLxpLLVC8=rw@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-hackers |
Hi Ashutosh,
I have also added a few tests. I didn't add queries with all the
> patterns you mentioned above. I tested a few by hand and all of them
> worked as expected. Can you please check?
>
I tested all the patterns and they all work correctly. No crashes,
correct results.
One thing I noticed while reviewing the rewriter changes: the Assert
at generate_queries_for_path_pattern() that checks alternating
implicit/explicit elements doesn't actually work:
#ifdef USE_ASSERT_CHECKING
GraphElementPattern *prev_gep = NULL;
#endif
...
Assert(!prev_gep || prev_gep->implicit != gep->implicit);
prev_gep is never updated in the loop -- it stays NULL throughout,
so the Assert is always trivially true. It needs a
"prev_gep = gep;" at the end of the loop body to actually perform
the intended check.
> Yes. That's a grammar issue. gram.y doesn't support it. Peter, do you
> remember or know the reason why we don't support full edge left or
> right? In fact, I am wondering what's the difference between full edge
> left or right and full edge any direction?
>
I looked into this. The lexer tokenizes "]->` as "]" + RIGHT_ARROW,
so gram.y needs two alternatives -- just like the existing full edge
right rule already does. The full edge left or right was simply
missing both forms. Adding them fixes it:
| '<' '-' '[' ... ']' '-' '>'
| '<' '-' '[' ... ']' RIGHT_ARROW
Per the standard, <-[]-> matches left or right direction while -[]-
matches any direction. For simple directed graphs the results are
the same, so EDGE_PATTERN_ANY seems like a reasonable mapping.
Regards,
Henson
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Tender Wang | 2026-03-24 01:10:07 | Re: Fix "could not find memoization table entry" |
| Previous Message | Amit Langote | 2026-03-24 00:59:33 | Re: Batching in executor |