Go to file
Tom Lane 2d04277121 Make serialization of Nodes' scalar-array fields more robust.
When the ability to print variable-length-array fields was first
added to outfuncs.c, there was no corresponding read capability,
as it was used only for debug dumps of planner-internal Nodes.
Not a lot of thought seems to have been put into the output format:
it's just the space-separated array elements and nothing else.
Later such fields appeared in Plan nodes, and still later we grew
read support so that Plans could be transferred to parallel workers,
but the original text format wasn't rethought.  It seems inadequate
to me because (a) no cross-check is possible that we got the right
number of array entries, (b) we can't tell the difference between
a NULL pointer and a zero-length array, and (c) except for
WRITE_INDEX_ARRAY, we'd crash if a non-zero length is specified
when the pointer is NULL, a situation that can arise in some fields
that we currently conveniently avoid printing.

Since we're currently in a campaign to make the Node infrastructure
generally more it-just-works-without-thinking-about-it, now seems
like a good time to improve this.

Let's adopt a format similar to that used for Lists, that is "<>"
for a NULL pointer or "(item item item)" otherwise.  Also retool
the code to not have so many copies of the identical logic.

I bumped catversion out of an abundance of caution, although I think
that we don't use any such array fields in Nodes that can get into
the catalogs.

Discussion: https://postgr.es/m/1528424.1658272135@sss.pgh.pa.us
2022-07-20 13:04:33 -04:00
config Unify DLSUFFIX on Darwin 2022-07-06 07:41:33 +02:00
contrib Tweak detail and hint messages to be consistent with project policy 2022-07-20 09:50:12 +09:00
doc Document the ability to specify TableAM for pgbench 2022-07-20 15:49:37 +03:00
src Make serialization of Nodes' scalar-array fields more robust. 2022-07-20 13:04:33 -04:00
.cirrus.yml
.dir-locals.el
.editorconfig
.git-blame-ignore-revs Add 82d0ffae3 to git-blame-ignore-revs. 2022-06-30 11:08:12 -04:00
.gitattributes
.gitignore
aclocal.m4
configure Add wal_sync_method=fdatasync for Windows. 2022-07-20 13:55:52 +12:00
configure.ac Add wal_sync_method=fdatasync for Windows. 2022-07-20 13:55:52 +12:00
COPYRIGHT
GNUmakefile.in Run tests of libpq on installcheck-world, checkprep and check-world 2022-06-03 13:15:20 +09:00
HISTORY
Makefile
README
README.git

PostgreSQL Database Management System
=====================================

This directory contains the source code distribution of the PostgreSQL
database management system.

PostgreSQL is an advanced object-relational database management system
that supports an extended subset of the SQL standard, including
transactions, foreign keys, subqueries, triggers, user-defined types
and functions.  This distribution also contains C language bindings.

PostgreSQL has many language interfaces, many of which are listed here:

	https://www.postgresql.org/download/

See the file INSTALL for instructions on how to build and install
PostgreSQL.  That file also lists supported operating systems and
hardware platforms and contains information regarding any other
software packages that are required to build or run the PostgreSQL
system.  Copyright and license information can be found in the
file COPYRIGHT.  A comprehensive documentation set is included in this
distribution; it can be read as described in the installation
instructions.

The latest version of this software may be obtained at
https://www.postgresql.org/download/.  For more information look at our
web site located at https://www.postgresql.org/.