Re: Extending outfuncs support to utility statements
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Andres Freund <andres@anarazel.de>
Cc: Peter Eisentraut <peter.eisentraut@enterprisedb.com>,
pgsql-hackers@lists.postgresql.org
Date: 2022-09-22T20:57:14Z
Lists: pgsql-hackers
Attachments
- v2-0001-Fix-reading-of-most-negative-integer-value-nodes.patch (text/x-diff) patch v2-0001
- v2-0002-Fix-reading-of-BitString-nodes.patch (text/x-diff) patch v2-0002
- v2-0003-Add-read-support-for-some-missing-raw-parse-nodes.patch (text/x-diff)
Andres Freund <andres@anarazel.de> writes: > On 2022-09-22 12:48:47 -0400, Tom Lane wrote: >> After staring at the code a bit, I think we don't need to touch >> pg_strtok() per se. I propose that this can be resolved with changes >> at the next higher level. Let's make outToken print NULL as <> as >> it always has, but print an empty string as "" (two double quotes). >> If the raw input string is two double quotes, print it as \"" to >> disambiguate. This'd require a catversion bump when committed, >> but I don't think there are any showstopper problems otherwise. > Makes sense to me. Here is a version of all-but-the-last patch in Peter's series. I left off the last one because it fails check-world: we now get through the core regression tests okay, but then the pg_dump tests fail on the new SQL function. To fix that, we would have to extend ruleutils.c's get_utility_query_def() to be able to fully reconstruct any legal utility query ... which seems like a pretty dauntingly large amount of tedious manual effort to start with, and then also a nontrivial additional requirement on any future patch that adds new utility syntax. Are we sure it's worth going there? But I think it's probably worth committing what we have here just on testability grounds. Some notes: 0001, 0002 not changed. I tweaked 0003 a bit, mainly because I think it's probably not very safe to apply strncmp to a string we don't know the length of. It might be difficult to fall off the end of memory that way, but I wouldn't bet it's impossible. Also, adding the length checks gets rid of the need for a grotty order dependency in _readA_Expr(). 0004 fixes the empty-string problem as per above. I did not like what you'd done about imprecise floats one bit. I think we ought to do it as in 0005 instead: drop all the hard-wired precision assumptions and just print per Ryu. 0006, 0007, 0008 are basically the same as your previous 0004, 0005, 0006, except for getting rid of the float hacking in 0005. If you're good with this approach to the float issue, I think this set is committable (minus 0006 of course, and don't forget the catversion bump). regards, tom lane
Commits
-
Avoid copying undefined data in _readA_Const().
- e060cd59fabd 16.0 landed
-
Enable WRITE_READ_PARSE_PLAN_TREES of rewritten utility statements
- 787102b56373 16.0 landed
-
Implement WRITE_READ_PARSE_PLAN_TREES for raw parse trees
- 40ad8f9deed2 16.0 landed
-
Don't lose precision for float fields of Nodes.
- acd624644bc4 16.0 landed
-
Fix write/read of empty string fields in Nodes.
- 8999f5ed3cd7 16.0 landed
-
Add read support for some missing raw parse nodes
- a6bc3301925e 16.0 landed
-
Fix reading of BitString nodes
- 2cb1a5a8d4ae 16.0 landed
-
Fix reading of most-negative integer value nodes
- 43f4b349152d 16.0 landed