Thread: pgsql: Simplify and standardize conversions between TEXT datums and
pgsql: Simplify and standardize conversions between TEXT datums and
From
tgl@postgresql.org (Tom Lane)
Date:
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)