pgsql: Simplify and standardize conversions between TEXT datums and - Mailing list pgsql-committers

From tgl@postgresql.org (Tom Lane)
Subject pgsql: Simplify and standardize conversions between TEXT datums and
Date
Msg-id 20080325224246.45CE07558E7@cvs.postgresql.org
Whole thread Raw
List 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)

pgsql-committers by date:

Previous
From: Andrew Dunstan
Date:
Subject: Re: pgsql: Added ECPGget_PGconn() function to ecpglib, courtesy of Mike
Next
From: neilc@postgresql.org (Neil Conway)
Date:
Subject: pgsql: Update documentation for recent DTrace changes.