pgsql: Simplify and standardize conversions between TEXT datums and

From: tgl(at)postgresql(dot)org (Tom Lane)
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Simplify and standardize conversions between TEXT datums and
Date: 2008-03-25 22:42:46
Message-ID: 20080325224246.45CE07558E7@cvs.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Log Message:
-----------
Simplify and standardize conversions between TEXT datums and ordinary C
strings. This patch introduces four support functions cstring_to_text,
cstring_to_text_with_len, text_to_cstring, and text_to_cstring_buffer, and
two macros CStringGetTextDatum and TextDatumGetCString. A number of
existing macros that provided variants on these themes were removed.

Most of the places that need to make such conversions now require just one
function or macro call, in place of the multiple notational layers that used
to be needed. There are no longer any direct calls of textout or textin,
and we got most of the places that were using handmade conversions via
memcpy (there may be a few still lurking, though).

This commit doesn't make any serious effort to eliminate transient memory
leaks caused by detoasting toasted text objects before they reach
text_to_cstring. We changed PG_GETARG_TEXT_P to PG_GETARG_TEXT_PP in a few
places where it was easy, but much more could be done.

Brendan Jurd and Tom Lane

Modified Files:
--------------
pgsql/contrib/adminpack:
adminpack.c (r1.10 -> r1.11)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/adminpack/adminpack.c?r1=1.10&r2=1.11)
pgsql/contrib/chkpass:
chkpass.c (r1.19 -> r1.20)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/chkpass/chkpass.c?r1=1.19&r2=1.20)
pgsql/contrib/dblink:
dblink.c (r1.69 -> r1.70)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/dblink/dblink.c?r1=1.69&r2=1.70)
pgsql/contrib/fuzzystrmatch:
dmetaphone.c (r1.11 -> r1.12)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/fuzzystrmatch/dmetaphone.c?r1=1.11&r2=1.12)
fuzzystrmatch.c (r1.25 -> r1.26)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/fuzzystrmatch/fuzzystrmatch.c?r1=1.25&r2=1.26)
fuzzystrmatch.h (r1.16 -> r1.17)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/fuzzystrmatch/fuzzystrmatch.h?r1=1.16&r2=1.17)
pgsql/contrib/hstore:
hstore_op.c (r1.8 -> r1.9)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/hstore/hstore_op.c?r1=1.8&r2=1.9)
pgsql/contrib/intarray:
_int_bool.c (r1.12 -> r1.13)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/intarray/_int_bool.c?r1=1.12&r2=1.13)
pgsql/contrib/ltree:
ltree_op.c (r1.17 -> r1.18)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/ltree/ltree_op.c?r1=1.17&r2=1.18)
pgsql/contrib/pageinspect:
heapfuncs.c (r1.4 -> r1.5)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/pageinspect/heapfuncs.c?r1=1.4&r2=1.5)
rawpage.c (r1.4 -> r1.5)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/pageinspect/rawpage.c?r1=1.4&r2=1.5)
pgsql/contrib/pgcrypto:
pgcrypto.c (r1.26 -> r1.27)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/pgcrypto/pgcrypto.c?r1=1.26&r2=1.27)
pgsql/contrib/spi:
autoinc.c (r1.13 -> r1.14)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/spi/autoinc.c?r1=1.13&r2=1.14)
insert_username.c (r1.15 -> r1.16)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/spi/insert_username.c?r1=1.15&r2=1.16)
timetravel.c (r1.27 -> r1.28)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/spi/timetravel.c?r1=1.27&r2=1.28)
pgsql/contrib/sslinfo:
sslinfo.c (r1.6 -> r1.7)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/sslinfo/sslinfo.c?r1=1.6&r2=1.7)
pgsql/contrib/tablefunc:
tablefunc.c (r1.51 -> r1.52)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/tablefunc/tablefunc.c?r1=1.51&r2=1.52)
pgsql/contrib/tsearch2:
tsearch2.c (r1.5 -> r1.6)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/tsearch2/tsearch2.c?r1=1.5&r2=1.6)
pgsql/contrib/uuid-ossp:
uuid-ossp.c (r1.7 -> r1.8)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/uuid-ossp/uuid-ossp.c?r1=1.7&r2=1.8)
pgsql/contrib/xml2:
xpath.c (r1.16 -> r1.17)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/xml2/xpath.c?r1=1.16&r2=1.17)
xslt_proc.c (r1.9 -> r1.10)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/contrib/xml2/xslt_proc.c?r1=1.9&r2=1.10)
pgsql/doc/src/sgml:
spi.sgml (r1.60 -> r1.61)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/spi.sgml?r1=1.60&r2=1.61)
pgsql/src/backend/access/common:
reloptions.c (r1.8 -> r1.9)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/common/reloptions.c?r1=1.8&r2=1.9)
pgsql/src/backend/access/transam:
twophase.c (r1.40 -> r1.41)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/twophase.c?r1=1.40&r2=1.41)
xlog.c (r1.294 -> r1.295)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/access/transam/xlog.c?r1=1.294&r2=1.295)
pgsql/src/backend/catalog:
heap.c (r1.327 -> r1.328)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/heap.c?r1=1.327&r2=1.328)
index.c (r1.292 -> r1.293)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/index.c?r1=1.292&r2=1.293)
pg_aggregate.c (r1.90 -> r1.91)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/pg_aggregate.c?r1=1.90&r2=1.91)
pg_constraint.c (r1.38 -> r1.39)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/pg_constraint.c?r1=1.38&r2=1.39)
pg_proc.c (r1.149 -> r1.150)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/pg_proc.c?r1=1.149&r2=1.150)
pg_type.c (r1.116 -> r1.117)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/catalog/pg_type.c?r1=1.116&r2=1.117)
pgsql/src/backend/commands:
comment.c (r1.100 -> r1.101)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/comment.c?r1=1.100&r2=1.101)
functioncmds.c (r1.88 -> r1.89)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/functioncmds.c?r1=1.88&r2=1.89)
prepare.c (r1.81 -> r1.82)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/prepare.c?r1=1.81&r2=1.82)
proclang.c (r1.74 -> r1.75)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/proclang.c?r1=1.74&r2=1.75)
tablecmds.c (r1.243 -> r1.244)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/tablecmds.c?r1=1.243&r2=1.244)
tablespace.c (r1.53 -> r1.54)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/tablespace.c?r1=1.53&r2=1.54)
tsearchcmds.c (r1.9 -> r1.10)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/tsearchcmds.c?r1=1.9&r2=1.10)
typecmds.c (r1.114 -> r1.115)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/typecmds.c?r1=1.114&r2=1.115)
user.c (r1.179 -> r1.180)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/user.c?r1=1.179&r2=1.180)
pgsql/src/backend/executor:
execCurrent.c (r1.5 -> r1.6)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/execCurrent.c?r1=1.5&r2=1.6)
execQual.c (r1.227 -> r1.228)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/execQual.c?r1=1.227&r2=1.228)
functions.c (r1.121 -> r1.122)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/functions.c?r1=1.121&r2=1.122)
nodeAgg.c (r1.156 -> r1.157)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/nodeAgg.c?r1=1.156&r2=1.157)
pgsql/src/backend/libpq:
be-fsstubs.c (r1.88 -> r1.89)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/libpq/be-fsstubs.c?r1=1.88&r2=1.89)
pgsql/src/backend/optimizer/path:
indxpath.c (r1.227 -> r1.228)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/path/indxpath.c?r1=1.227&r2=1.228)
pgsql/src/backend/optimizer/util:
clauses.c (r1.255 -> r1.256)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/optimizer/util/clauses.c?r1=1.255&r2=1.256)
pgsql/src/backend/parser:
parse_utilcmd.c (r2.10 -> r2.11)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/parser/parse_utilcmd.c?r1=2.10&r2=2.11)
pgsql/src/backend/rewrite:
rewriteDefine.c (r1.124 -> r1.125)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/rewrite/rewriteDefine.c?r1=1.124&r2=1.125)
pgsql/src/backend/tsearch:
dict.c (r1.4 -> r1.5)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/tsearch/dict.c?r1=1.4&r2=1.5)
to_tsany.c (r1.10 -> r1.11)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/tsearch/to_tsany.c?r1=1.10&r2=1.11)
pgsql/src/backend/utils/adt:
acl.c (r1.139 -> r1.140)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/acl.c?r1=1.139&r2=1.140)
arrayfuncs.c (r1.141 -> r1.142)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/arrayfuncs.c?r1=1.141&r2=1.142)
bool.c (r1.42 -> r1.43)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/bool.c?r1=1.42&r2=1.43)
cash.c (r1.77 -> r1.78)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/cash.c?r1=1.77&r2=1.78)
date.c (r1.140 -> r1.141)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/date.c?r1=1.140&r2=1.141)
datetime.c (r1.187 -> r1.188)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/datetime.c?r1=1.187&r2=1.188)
dbsize.c (r1.16 -> r1.17)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/dbsize.c?r1=1.16&r2=1.17)
encode.c (r1.21 -> r1.22)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/encode.c?r1=1.21&r2=1.22)
format_type.c (r1.49 -> r1.50)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/format_type.c?r1=1.49&r2=1.50)
formatting.c (r1.138 -> r1.139)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/formatting.c?r1=1.138&r2=1.139)
genfile.c (r1.17 -> r1.18)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/genfile.c?r1=1.17&r2=1.18)
lockfuncs.c (r1.32 -> r1.33)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/lockfuncs.c?r1=1.32&r2=1.33)
nabstime.c (r1.154 -> r1.155)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/nabstime.c?r1=1.154&r2=1.155)
network.c (r1.72 -> r1.73)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/network.c?r1=1.72&r2=1.73)
oracle_compat.c (r1.77 -> r1.78)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/oracle_compat.c?r1=1.77&r2=1.78)
pgstatfuncs.c (r1.48 -> r1.49)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/pgstatfuncs.c?r1=1.48&r2=1.49)
quote.c (r1.24 -> r1.25)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/quote.c?r1=1.24&r2=1.25)
ruleutils.c (r1.269 -> r1.270)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/ruleutils.c?r1=1.269&r2=1.270)
selfuncs.c (r1.246 -> r1.247)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/selfuncs.c?r1=1.246&r2=1.247)
timestamp.c (r1.186 -> r1.187)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/timestamp.c?r1=1.186&r2=1.187)
tsginidx.c (r1.9 -> r1.10)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/tsginidx.c?r1=1.9&r2=1.10)
tsquery.c (r1.15 -> r1.16)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/tsquery.c?r1=1.15&r2=1.16)
tsquery_rewrite.c (r1.11 -> r1.12)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/tsquery_rewrite.c?r1=1.11&r2=1.12)
tsvector_op.c (r1.13 -> r1.14)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/tsvector_op.c?r1=1.13&r2=1.14)
varchar.c (r1.126 -> r1.127)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/varchar.c?r1=1.126&r2=1.127)
varlena.c (r1.163 -> r1.164)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/varlena.c?r1=1.163&r2=1.164)
version.c (r1.16 -> r1.17)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/version.c?r1=1.16&r2=1.17)
xml.c (r1.70 -> r1.71)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/adt/xml.c?r1=1.70&r2=1.71)
pgsql/src/backend/utils/cache:
lsyscache.c (r1.155 -> r1.156)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/cache/lsyscache.c?r1=1.155&r2=1.156)
relcache.c (r1.267 -> r1.268)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/cache/relcache.c?r1=1.267&r2=1.268)
pgsql/src/backend/utils/fmgr:
fmgr.c (r1.113 -> r1.114)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/fmgr/fmgr.c?r1=1.113&r2=1.114)
funcapi.c (r1.38 -> r1.39)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/fmgr/funcapi.c?r1=1.38&r2=1.39)
pgsql/src/backend/utils/init:
flatfiles.c (r1.30 -> r1.31)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/init/flatfiles.c?r1=1.30&r2=1.31)
pgsql/src/backend/utils/misc:
guc.c (r1.439 -> r1.440)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/misc/guc.c?r1=1.439&r2=1.440)
pgsql/src/backend/utils/mmgr:
portalmem.c (r1.107 -> r1.108)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/mmgr/portalmem.c?r1=1.107&r2=1.108)
pgsql/src/include/tsearch:
ts_utils.h (r1.12 -> r1.13)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/tsearch/ts_utils.h?r1=1.12&r2=1.13)
pgsql/src/include/utils:
builtins.h (r1.309 -> r1.310)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/builtins.h?r1=1.309&r2=1.310)
pgsql/src/pl/plperl:
plperl.c (r1.137 -> r1.138)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/pl/plperl/plperl.c?r1=1.137&r2=1.138)
pgsql/src/pl/plpgsql/src:
pl_comp.c (r1.121 -> r1.122)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpgsql/src/pl_comp.c?r1=1.121&r2=1.122)
pl_exec.c (r1.203 -> r1.204)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpgsql/src/pl_exec.c?r1=1.203&r2=1.204)
pgsql/src/pl/plpython:
plpython.c (r1.106 -> r1.107)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpython/plpython.c?r1=1.106&r2=1.107)
pgsql/src/pl/tcl:
pltcl.c (r1.117 -> r1.118)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/pl/tcl/pltcl.c?r1=1.117&r2=1.118)
pgsql/src/test/regress:
regress.c (r1.70 -> r1.71)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/regress.c?r1=1.70&r2=1.71)

Browse pgsql-committers by date

  From Date Subject
Next Message Neil Conway 2008-03-25 22:50:28 pgsql: Update documentation for recent DTrace changes.
Previous Message Andrew Dunstan 2008-03-25 21:34:44 Re: pgsql: Added ECPGget_PGconn() function to ecpglib, courtesy of Mike