Thread: Possible to modify query language in an extension?
Noob here. I'm getting started on building a Postgres extension.
I'd like to add some keywords/clauses to the SELECT statement. For my particular application, the syntax with new keywords would be way better than trying to do it through functions alone. I would add some new keywords followed by expressions similar to those allowed in WHERE and GROUP BY clauses. The new SELECT would return multiple result sets.
I did find an example where someone did modify the parser: http://www.neilconway.org/talks/hacking/hack_slides.pdf
Question: is it possible to do this in an extension? Or do I have to fork the Postgres codebase itself?
Obviously, I'd prefer the former. Forks are bad.
Chris Cleveland <ccleve+github@dieselpoint.com> writes: > I'd like to add some keywords/clauses to the SELECT statement. Yeah, you'll have to modify gram.y (and a pile of other places) if you want to do that. That's certainly something we do all the time, but bison doesn't provide any way to add grammar productions on-the-fly, so it does imply core-code mods. > ... The new SELECT would return multiple result sets. And that sounds like you'd also be redefining the wire protocol, hence having to touch client-side code as well as the server. regards, tom lane
On Sun, Mar 17, 2019 at 12:21 AM Tom Lane <tgl@sss.pgh.pa.us> wrote: > Chris Cleveland <ccleve+github@dieselpoint.com> writes: > > I'd like to add some keywords/clauses to the SELECT statement. > > Yeah, you'll have to modify gram.y (and a pile of other places) > if you want to do that. That's certainly something we do all > the time, but bison doesn't provide any way to add grammar > productions on-the-fly, so it does imply core-code mods. > > > ... The new SELECT would return multiple result sets. > > And that sounds like you'd also be redefining the wire protocol, > hence having to touch client-side code as well as the server. Long story short, this sounds like a VERY hard project. Chris, you will probably want to think about some other approach to achieving your objective, because this sounds like a project that even an expert coder would spend a lot of time trying to get done. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company