summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavan Deolasee2015-06-04 08:02:02 +0000
committerPavan Deolasee2015-06-04 08:02:02 +0000
commit1e86f652fa5e214a284f9862c67bb976317ac730 (patch)
tree2478baa40ebd47196528ee0a5aa6f6921d8e5bd9
parent3165b5fde927ff766921270bd56d3236b6c09c21 (diff)
parent4cb7d671fddc8855c8def2de51fb23df1c8ac0af (diff)
Merge remote-tracking branch 'remotes/PGSQL/master' into XL_NEW_MASTER
Conflicts: COPYRIGHT configure configure.in contrib/Makefile doc/bug.template src/backend/access/common/heaptuple.c src/backend/access/common/printtup.c src/backend/access/transam/Makefile src/backend/access/transam/clog.c src/backend/access/transam/twophase.c src/backend/access/transam/varsup.c src/backend/access/transam/xact.c src/backend/access/transam/xlog.c src/backend/bootstrap/bootstrap.c src/backend/catalog/Makefile src/backend/catalog/catalog.c src/backend/catalog/dependency.c src/backend/catalog/genbki.pl src/backend/catalog/namespace.c src/backend/catalog/pg_aggregate.c src/backend/catalog/pg_proc.c src/backend/catalog/storage.c src/backend/commands/aggregatecmds.c src/backend/commands/analyze.c src/backend/commands/comment.c src/backend/commands/copy.c src/backend/commands/dbcommands.c src/backend/commands/event_trigger.c src/backend/commands/explain.c src/backend/commands/indexcmds.c src/backend/commands/portalcmds.c src/backend/commands/schemacmds.c src/backend/commands/sequence.c src/backend/commands/tablecmds.c src/backend/commands/trigger.c src/backend/commands/vacuum.c src/backend/commands/variable.c src/backend/commands/view.c src/backend/executor/execAmi.c src/backend/executor/execCurrent.c src/backend/executor/execMain.c src/backend/executor/execProcnode.c src/backend/executor/execTuples.c src/backend/executor/execUtils.c src/backend/executor/nodeAgg.c src/backend/executor/nodeModifyTable.c src/backend/executor/nodeSubplan.c src/backend/executor/nodeWindowAgg.c src/backend/libpq/hba.c src/backend/nodes/copyfuncs.c src/backend/nodes/equalfuncs.c src/backend/nodes/outfuncs.c src/backend/nodes/readfuncs.c src/backend/optimizer/path/allpaths.c src/backend/optimizer/path/costsize.c src/backend/optimizer/plan/createplan.c src/backend/optimizer/plan/planagg.c src/backend/optimizer/plan/planner.c src/backend/optimizer/plan/setrefs.c src/backend/optimizer/plan/subselect.c src/backend/optimizer/prep/preptlist.c src/backend/optimizer/prep/prepunion.c src/backend/optimizer/util/pathnode.c src/backend/optimizer/util/plancat.c src/backend/parser/analyze.c src/backend/parser/gram.y src/backend/parser/parse_agg.c src/backend/parser/parse_relation.c src/backend/parser/parse_utilcmd.c src/backend/postmaster/autovacuum.c src/backend/postmaster/pgstat.c src/backend/postmaster/postmaster.c src/backend/replication/logical/decode.c src/backend/storage/buffer/bufmgr.c src/backend/storage/ipc/ipci.c src/backend/storage/ipc/procarray.c src/backend/storage/ipc/procsignal.c src/backend/storage/lmgr/lock.c src/backend/storage/lmgr/lwlock.c src/backend/storage/lmgr/proc.c src/backend/tcop/dest.c src/backend/tcop/postgres.c src/backend/tcop/pquery.c src/backend/tcop/utility.c src/backend/utils/adt/arrayfuncs.c src/backend/utils/adt/date.c src/backend/utils/adt/dbsize.c src/backend/utils/adt/pseudotypes.c src/backend/utils/adt/ri_triggers.c src/backend/utils/adt/ruleutils.c src/backend/utils/adt/version.c src/backend/utils/cache/inval.c src/backend/utils/cache/lsyscache.c src/backend/utils/cache/plancache.c src/backend/utils/cache/relcache.c src/backend/utils/init/globals.c src/backend/utils/init/miscinit.c src/backend/utils/init/postinit.c src/backend/utils/misc/guc.c src/backend/utils/mmgr/portalmem.c src/backend/utils/sort/tuplesort.c src/backend/utils/sort/tuplestore.c src/backend/utils/time/combocid.c src/backend/utils/time/snapmgr.c src/bin/Makefile src/bin/initdb/initdb.c src/bin/pg_ctl/pg_ctl.c src/bin/pg_dump/pg_dump.c src/bin/pgbench/pgbench.c src/bin/psql/tab-complete.c src/include/access/htup.h src/include/access/rmgrlist.h src/include/access/transam.h src/include/access/xact.h src/include/catalog/catalog.h src/include/catalog/namespace.h src/include/catalog/pg_aggregate.h src/include/catalog/pg_namespace.h src/include/catalog/pg_proc.h src/include/catalog/pg_type.h src/include/commands/explain.h src/include/commands/sequence.h src/include/commands/vacuum.h src/include/commands/variable.h src/include/executor/execdesc.h src/include/executor/executor.h src/include/executor/tuptable.h src/include/miscadmin.h src/include/nodes/execnodes.h src/include/nodes/nodes.h src/include/nodes/params.h src/include/nodes/parsenodes.h src/include/nodes/plannodes.h src/include/nodes/primnodes.h src/include/nodes/relation.h src/include/optimizer/cost.h src/include/optimizer/pathnode.h src/include/optimizer/planmain.h src/include/parser/analyze.h src/include/parser/parse_agg.h src/include/parser/parse_utilcmd.h src/include/pg_config.h.win32 src/include/pgstat.h src/include/storage/backendid.h src/include/storage/barrier.h src/include/storage/lwlock.h src/include/storage/proc.h src/include/storage/procarray.h src/include/storage/procsignal.h src/include/storage/smgr.h src/include/tcop/dest.h src/include/tcop/pquery.h src/include/utils/builtins.h src/include/utils/guc.h src/include/utils/lsyscache.h src/include/utils/plancache.h src/include/utils/portal.h src/include/utils/rel.h src/include/utils/tuplesort.h src/include/utils/tuplestore.h src/test/regress/expected/aggregates.out src/test/regress/expected/create_index.out src/test/regress/expected/foreign_data.out src/test/regress/expected/join.out src/test/regress/expected/macaddr.out src/test/regress/expected/polygon.out src/test/regress/expected/rangetypes.out src/test/regress/expected/update.out src/test/regress/input/constraints.source src/test/regress/pg_regress.c src/test/regress/serial_schedule src/test/regress/sql/rangetypes.sql
-rw-r--r--.dir-locals.el1
-rw-r--r--.gitattributes2
-rw-r--r--.gitignore2
-rw-r--r--COPYRIGHT2
-rw-r--r--config/acx_pthread.m477
-rw-r--r--config/c-compiler.m4204
-rw-r--r--config/c-library.m459
-rw-r--r--config/programs.m428
-rwxr-xr-xconfigure1168
-rw-r--r--configure.in229
-rw-r--r--contrib/Makefile10
-rw-r--r--contrib/adminpack/Makefile3
-rw-r--r--contrib/adminpack/adminpack.c2
-rw-r--r--contrib/auth_delay/Makefile1
-rw-r--r--contrib/auto_explain/Makefile3
-rw-r--r--contrib/auto_explain/auto_explain.c47
-rw-r--r--contrib/btree_gin/Makefile3
-rw-r--r--contrib/btree_gin/btree_gin--unpackaged--1.0.sql2
-rw-r--r--contrib/btree_gin/btree_gin.c380
-rw-r--r--contrib/btree_gist/Makefile6
-rw-r--r--contrib/btree_gist/btree_bit.c2
-rw-r--r--contrib/btree_gist/btree_cash.c11
-rw-r--r--contrib/btree_gist/btree_date.c10
-rw-r--r--contrib/btree_gist/btree_float4.c11
-rw-r--r--contrib/btree_gist/btree_float8.c11
-rw-r--r--contrib/btree_gist/btree_gist--1.0--1.1.sql127
-rw-r--r--contrib/btree_gist/btree_gist--1.1.sql (renamed from contrib/btree_gist/btree_gist--1.0.sql)135
-rw-r--r--contrib/btree_gist/btree_gist--unpackaged--1.0.sql2
-rw-r--r--contrib/btree_gist/btree_gist.control2
-rw-r--r--contrib/btree_gist/btree_int2.c11
-rw-r--r--contrib/btree_gist/btree_int4.c11
-rw-r--r--contrib/btree_gist/btree_int8.c11
-rw-r--r--contrib/btree_gist/btree_interval.c9
-rw-r--r--contrib/btree_gist/btree_macaddr.c11
-rw-r--r--contrib/btree_gist/btree_numeric.c2
-rw-r--r--contrib/btree_gist/btree_oid.c11
-rw-r--r--contrib/btree_gist/btree_time.c11
-rw-r--r--contrib/btree_gist/btree_ts.c37
-rw-r--r--contrib/btree_gist/btree_utils_num.c71
-rw-r--r--contrib/btree_gist/btree_utils_num.h4
-rw-r--r--contrib/btree_gist/btree_utils_var.c83
-rw-r--r--contrib/btree_gist/btree_utils_var.h2
-rw-r--r--contrib/btree_gist/expected/bit.out10
-rw-r--r--contrib/btree_gist/expected/bytea.out17
-rw-r--r--contrib/btree_gist/expected/cash.out6
-rw-r--r--contrib/btree_gist/expected/char.out16
-rw-r--r--contrib/btree_gist/expected/char_1.out16
-rw-r--r--contrib/btree_gist/expected/date.out6
-rw-r--r--contrib/btree_gist/expected/float4.out8
-rw-r--r--contrib/btree_gist/expected/float8.out4
-rw-r--r--contrib/btree_gist/expected/int2.out8
-rw-r--r--contrib/btree_gist/expected/int4.out6
-rw-r--r--contrib/btree_gist/expected/int8.out8
-rw-r--r--contrib/btree_gist/expected/interval.out2
-rw-r--r--contrib/btree_gist/expected/macaddr.out23
-rw-r--r--contrib/btree_gist/expected/numeric.out19
-rw-r--r--contrib/btree_gist/expected/text.out16
-rw-r--r--contrib/btree_gist/expected/text_1.out16
-rw-r--r--contrib/btree_gist/expected/time.out2
-rw-r--r--contrib/btree_gist/expected/timestamp.out2
-rw-r--r--contrib/btree_gist/expected/timestamptz.out2
-rw-r--r--contrib/btree_gist/expected/varbit.out10
-rw-r--r--contrib/btree_gist/sql/bit.sql5
-rw-r--r--contrib/btree_gist/sql/bytea.sql6
-rw-r--r--contrib/btree_gist/sql/char.sql6
-rw-r--r--contrib/btree_gist/sql/macaddr.sql6
-rw-r--r--contrib/btree_gist/sql/numeric.sql6
-rw-r--r--contrib/btree_gist/sql/text.sql6
-rw-r--r--contrib/btree_gist/sql/varbit.sql5
-rw-r--r--contrib/chkpass/Makefile3
-rw-r--r--contrib/chkpass/chkpass--1.0.sql7
-rw-r--r--contrib/chkpass/chkpass--unpackaged--1.0.sql2
-rw-r--r--contrib/chkpass/chkpass.c6
-rw-r--r--contrib/citext/Makefile1
-rw-r--r--contrib/citext/citext--unpackaged--1.0.sql30
-rw-r--r--contrib/cube/Makefile3
-rw-r--r--contrib/cube/cube--unpackaged--1.0.sql2
-rw-r--r--contrib/cube/cube.c5
-rw-r--r--contrib/cube/cubedata.h24
-rw-r--r--contrib/cube/cubeparse.y5
-rw-r--r--contrib/cube/cubescan.l10
-rw-r--r--contrib/dblink/Makefile12
-rw-r--r--contrib/dblink/dblink--unpackaged--1.0.sql2
-rw-r--r--contrib/dblink/dblink.c38
-rw-r--r--contrib/dblink/dblink.h2
-rw-r--r--contrib/dblink/expected/.gitignore1
-rw-r--r--contrib/dblink/expected/dblink.out77
-rw-r--r--contrib/dblink/input/paths.source14
-rw-r--r--contrib/dblink/output/paths.source11
-rw-r--r--contrib/dblink/pg_service.conf7
-rw-r--r--contrib/dblink/sql/.gitignore1
-rw-r--r--contrib/dblink/sql/dblink.sql80
-rw-r--r--contrib/dict_int/Makefile3
-rw-r--r--contrib/dict_int/dict_int--unpackaged--1.0.sql2
-rw-r--r--contrib/dict_int/dict_int.c3
-rw-r--r--contrib/dict_xsyn/Makefile3
-rw-r--r--contrib/dict_xsyn/dict_xsyn--unpackaged--1.0.sql2
-rw-r--r--contrib/dict_xsyn/dict_xsyn.c2
-rw-r--r--contrib/dummy_seclabel/Makefile14
-rw-r--r--contrib/earthdistance/Makefile1
-rw-r--r--contrib/earthdistance/earthdistance--unpackaged--1.0.sql2
-rw-r--r--contrib/earthdistance/earthdistance.c1
-rw-r--r--contrib/file_fdw/Makefile1
-rw-r--r--contrib/file_fdw/file_fdw.c4
-rw-r--r--contrib/file_fdw/input/file_fdw.source32
-rw-r--r--contrib/file_fdw/output/file_fdw.source80
-rw-r--r--contrib/fuzzystrmatch/Makefile6
-rw-r--r--contrib/fuzzystrmatch/dmetaphone.c7
-rw-r--r--contrib/fuzzystrmatch/fuzzystrmatch--unpackaged--1.0.sql2
-rw-r--r--contrib/fuzzystrmatch/fuzzystrmatch.c89
-rw-r--r--contrib/hstore/Makefile3
-rw-r--r--contrib/hstore/crc32.c106
-rw-r--r--contrib/hstore/crc32.h13
-rw-r--r--contrib/hstore/hstore--unpackaged--1.0.sql2
-rw-r--r--contrib/hstore/hstore_gist.c18
-rw-r--r--contrib/hstore/hstore_io.c73
-rw-r--r--contrib/intagg/intagg--unpackaged--1.0.sql2
-rw-r--r--contrib/intarray/Makefile4
-rw-r--r--contrib/intarray/_int.h4
-rw-r--r--contrib/intarray/_int_gist.c20
-rw-r--r--contrib/intarray/_int_op.c1
-rw-r--r--contrib/intarray/_int_tool.c52
-rw-r--r--contrib/intarray/intarray--unpackaged--1.0.sql2
-rw-r--r--contrib/isn/Makefile1
-rw-r--r--contrib/isn/isn--unpackaged--1.0.sql2
-rw-r--r--contrib/isn/isn.c10
-rw-r--r--contrib/isn/isn.h2
-rw-r--r--contrib/lo/Makefile1
-rw-r--r--contrib/lo/lo--unpackaged--1.0.sql2
-rw-r--r--contrib/lo/lo.c1
-rw-r--r--contrib/ltree/Makefile3
-rw-r--r--contrib/ltree/crc32.c114
-rw-r--r--contrib/ltree/ltree--1.0.sql16
-rw-r--r--contrib/ltree/ltree--unpackaged--1.0.sql2
-rw-r--r--contrib/ltree/ltree.h14
-rw-r--r--contrib/oid2name/Makefile2
-rw-r--r--contrib/pageinspect/Makefile9
-rw-r--r--contrib/pageinspect/brinfuncs.c409
-rw-r--r--contrib/pageinspect/fsmfuncs.c2
-rw-r--r--contrib/pageinspect/ginfuncs.c281
-rw-r--r--contrib/pageinspect/heapfuncs.c19
-rw-r--r--contrib/pageinspect/pageinspect--1.0--1.1.sql2
-rw-r--r--contrib/pageinspect/pageinspect--1.1--1.2.sql2
-rw-r--r--contrib/pageinspect/pageinspect--1.2--1.3.sql82
-rw-r--r--contrib/pageinspect/pageinspect--1.3.sql (renamed from contrib/pageinspect/pageinspect--1.2.sql)84
-rw-r--r--contrib/pageinspect/pageinspect--unpackaged--1.0.sql2
-rw-r--r--contrib/pageinspect/pageinspect.control2
-rw-r--r--contrib/pageinspect/rawpage.c12
-rw-r--r--contrib/passwordcheck/Makefile3
-rw-r--r--contrib/passwordcheck/passwordcheck.c3
-rw-r--r--contrib/pg_archivecleanup/Makefile18
-rw-r--r--contrib/pg_buffercache/Makefile5
-rw-r--r--contrib/pg_buffercache/pg_buffercache--1.0--1.1.sql11
-rw-r--r--contrib/pg_buffercache/pg_buffercache--1.1.sql (renamed from contrib/pg_buffercache/pg_buffercache--1.0.sql)5
-rw-r--r--contrib/pg_buffercache/pg_buffercache--unpackaged--1.0.sql2
-rw-r--r--contrib/pg_buffercache/pg_buffercache.control2
-rw-r--r--contrib/pg_buffercache/pg_buffercache_pages.c44
-rw-r--r--contrib/pg_freespacemap/Makefile3
-rw-r--r--contrib/pg_freespacemap/pg_freespacemap--unpackaged--1.0.sql2
-rw-r--r--contrib/pg_freespacemap/pg_freespacemap.c1
-rw-r--r--contrib/pg_prewarm/Makefile3
-rw-r--r--contrib/pg_prewarm/pg_prewarm.c5
-rw-r--r--contrib/pg_standby/Makefile2
-rw-r--r--contrib/pg_standby/pg_standby.c2
-rw-r--r--contrib/pg_stat_statements/Makefile8
-rw-r--r--contrib/pg_stat_statements/pg_stat_statements--1.2--1.3.sql47
-rw-r--r--contrib/pg_stat_statements/pg_stat_statements--1.3.sql (renamed from contrib/pg_stat_statements/pg_stat_statements--1.2.sql)8
-rw-r--r--contrib/pg_stat_statements/pg_stat_statements--unpackaged--1.0.sql2
-rw-r--r--contrib/pg_stat_statements/pg_stat_statements.c82
-rw-r--r--contrib/pg_stat_statements/pg_stat_statements.control2
-rw-r--r--contrib/pg_test_fsync/Makefile2
-rw-r--r--contrib/pg_test_fsync/pg_test_fsync.c19
-rw-r--r--contrib/pg_test_timing/Makefile2
-rw-r--r--contrib/pg_test_timing/pg_test_timing.c2
-rw-r--r--contrib/pg_trgm/Makefile3
-rw-r--r--contrib/pg_trgm/pg_trgm--1.1.sql4
-rw-r--r--contrib/pg_trgm/pg_trgm--unpackaged--1.0.sql2
-rw-r--r--contrib/pg_trgm/trgm.h2
-rw-r--r--contrib/pg_trgm/trgm_op.c8
-rw-r--r--contrib/pg_trgm/trgm_regexp.c7
-rw-r--r--contrib/pg_upgrade/.gitignore6
-rw-r--r--contrib/pg_upgrade/Makefile34
-rw-r--r--contrib/pg_upgrade/dump.c69
-rw-r--r--contrib/pg_upgrade/version_old_8_3.c769
-rw-r--r--contrib/pg_upgrade_support/Makefile16
-rw-r--r--contrib/pg_xlogdump/.gitignore2
-rw-r--r--contrib/pg_xlogdump/Makefile2
-rw-r--r--contrib/pg_xlogdump/compat.c2
-rw-r--r--contrib/pg_xlogdump/pg_xlogdump.c370
-rw-r--r--contrib/pg_xlogdump/rmgrdesc.c8
-rw-r--r--contrib/pg_xlogdump/rmgrdesc.h3
-rw-r--r--contrib/pgbench/.gitignore1
-rw-r--r--contrib/pgbench/Makefile25
-rw-r--r--contrib/pgcrypto/Makefile8
-rw-r--r--contrib/pgcrypto/crypt-des.c3
-rw-r--r--contrib/pgcrypto/expected/pgp-armor.out268
-rw-r--r--contrib/pgcrypto/expected/pgp-decrypt.out8
-rw-r--r--contrib/pgcrypto/expected/pgp-info.out3
-rw-r--r--contrib/pgcrypto/expected/pgp-pubkey-decrypt.out25
-rw-r--r--contrib/pgcrypto/imath.c24
-rw-r--r--contrib/pgcrypto/mbuf.c1
-rw-r--r--contrib/pgcrypto/pgcrypto--1.1--1.2.sql14
-rw-r--r--contrib/pgcrypto/pgcrypto--1.2.sql (renamed from contrib/pgcrypto/pgcrypto--1.1.sql)12
-rw-r--r--contrib/pgcrypto/pgcrypto--unpackaged--1.0.sql2
-rw-r--r--contrib/pgcrypto/pgcrypto.control2
-rw-r--r--contrib/pgcrypto/pgp-armor.c182
-rw-r--r--contrib/pgcrypto/pgp-decrypt.c68
-rw-r--r--contrib/pgcrypto/pgp-pgsql.c283
-rw-r--r--contrib/pgcrypto/pgp.h11
-rw-r--r--contrib/pgcrypto/px.h4
-rw-r--r--contrib/pgcrypto/random.c5
-rw-r--r--contrib/pgcrypto/sql/pgp-armor.sql158
-rw-r--r--contrib/pgcrypto/sql/pgp-decrypt.sql4
-rw-r--r--contrib/pgcrypto/sql/pgp-pubkey-decrypt.sql26
-rw-r--r--contrib/pgrowlocks/Makefile3
-rw-r--r--contrib/pgrowlocks/pgrowlocks--unpackaged--1.0.sql2
-rw-r--r--contrib/pgrowlocks/pgrowlocks.c13
-rw-r--r--contrib/pgstattuple/Makefile3
-rw-r--r--contrib/pgstattuple/pgstattuple--unpackaged--1.0.sql2
-rw-r--r--contrib/pgstattuple/pgstattuple.c14
-rw-r--r--contrib/postgres_fdw/Makefile8
-rw-r--r--contrib/postgres_fdw/connection.c5
-rw-r--r--contrib/postgres_fdw/deparse.c23
-rw-r--r--contrib/postgres_fdw/expected/postgres_fdw.out806
-rw-r--r--contrib/postgres_fdw/option.c2
-rw-r--r--contrib/postgres_fdw/postgres_fdw.c304
-rw-r--r--contrib/postgres_fdw/postgres_fdw.h5
-rw-r--r--contrib/postgres_fdw/sql/postgres_fdw.sql226
-rw-r--r--contrib/seg/Makefile3
-rw-r--r--contrib/seg/seg--unpackaged--1.0.sql2
-rw-r--r--contrib/seg/seg.c10
-rw-r--r--contrib/seg/segdata.h12
-rw-r--r--contrib/seg/segparse.y8
-rw-r--r--contrib/seg/segscan.l10
-rw-r--r--contrib/sepgsql/Makefile3
-rw-r--r--contrib/sepgsql/database.c2
-rw-r--r--contrib/sepgsql/dml.c18
-rw-r--r--contrib/sepgsql/hooks.c2
-rw-r--r--contrib/sepgsql/label.c7
-rwxr-xr-xcontrib/sepgsql/launcher2
-rw-r--r--contrib/sepgsql/proc.c2
-rw-r--r--contrib/sepgsql/relation.c2
-rw-r--r--contrib/sepgsql/schema.c2
-rw-r--r--contrib/sepgsql/selinux.c2
-rw-r--r--contrib/sepgsql/sepgsql.h2
-rw-r--r--contrib/sepgsql/uavc.c2
-rw-r--r--contrib/spi/Makefile1
-rw-r--r--contrib/spi/autoinc--unpackaged--1.0.sql2
-rw-r--r--contrib/spi/insert_username--unpackaged--1.0.sql2
-rw-r--r--contrib/spi/moddatetime--unpackaged--1.0.sql2
-rw-r--r--contrib/spi/refint--unpackaged--1.0.sql2
-rw-r--r--contrib/spi/timetravel--unpackaged--1.0.sql2
-rw-r--r--contrib/spi/timetravel.c25
-rw-r--r--contrib/sslinfo/Makefile3
-rw-r--r--contrib/sslinfo/sslinfo--unpackaged--1.0.sql2
-rw-r--r--contrib/sslinfo/sslinfo.c4
-rw-r--r--contrib/start-scripts/linux35
-rwxr-xr-xcontrib/start-scripts/osx/PostgreSQL2
-rw-r--r--contrib/tablefunc/Makefile1
-rw-r--r--contrib/tablefunc/expected/tablefunc.out32
-rw-r--r--contrib/tablefunc/sql/tablefunc.sql16
-rw-r--r--contrib/tablefunc/tablefunc--unpackaged--1.0.sql2
-rw-r--r--contrib/tablefunc/tablefunc.c165
-rw-r--r--contrib/tablefunc/tablefunc.h2
-rw-r--r--contrib/tcn/Makefile1
-rw-r--r--contrib/tcn/tcn.c4
-rw-r--r--contrib/test_decoding/Makefile6
-rw-r--r--contrib/test_decoding/expected/binary.out2
-rw-r--r--contrib/test_decoding/expected/concurrent_ddl_dml.out124
-rw-r--r--contrib/test_decoding/expected/ddl.out82
-rw-r--r--contrib/test_decoding/expected/decoding_in_xact.out8
-rw-r--r--contrib/test_decoding/expected/decoding_into_rel.out86
-rw-r--r--contrib/test_decoding/expected/ondisk_startup.out43
-rw-r--r--contrib/test_decoding/expected/permissions.out6
-rw-r--r--contrib/test_decoding/expected/prepared.out12
-rw-r--r--contrib/test_decoding/expected/rewrite.out30
-rw-r--r--contrib/test_decoding/expected/toast.out227
-rw-r--r--contrib/test_decoding/specs/concurrent_ddl_dml.spec2
-rw-r--r--contrib/test_decoding/specs/ondisk_startup.spec43
-rw-r--r--contrib/test_decoding/sql/ddl.sql30
-rw-r--r--contrib/test_decoding/sql/decoding_in_xact.sql4
-rw-r--r--contrib/test_decoding/sql/decoding_into_rel.sql31
-rw-r--r--contrib/test_decoding/sql/permissions.sql6
-rw-r--r--contrib/test_decoding/sql/prepared.sql2
-rw-r--r--contrib/test_decoding/sql/rewrite.sql4
-rw-r--r--contrib/test_decoding/sql/toast.sql214
-rw-r--r--contrib/test_decoding/test_decoding.c48
-rw-r--r--contrib/tsearch2/Makefile1
-rw-r--r--contrib/tsearch2/tsearch2--unpackaged--1.0.sql2
-rw-r--r--contrib/tsearch2/tsearch2.c2
-rw-r--r--contrib/unaccent/Makefile3
-rw-r--r--contrib/unaccent/unaccent--unpackaged--1.0.sql2
-rw-r--r--contrib/unaccent/unaccent.c163
-rw-r--r--contrib/uuid-ossp/Makefile3
-rw-r--r--contrib/uuid-ossp/uuid-ossp--unpackaged--1.0.sql2
-rw-r--r--contrib/uuid-ossp/uuid-ossp.c4
-rw-r--r--contrib/vacuumlo/Makefile2
-rw-r--r--contrib/vacuumlo/vacuumlo.c11
-rw-r--r--contrib/xml2/Makefile3
-rw-r--r--contrib/xml2/xml2--unpackaged--1.0.sql2
-rw-r--r--contrib/xml2/xpath.c3
-rw-r--r--contrib/xml2/xslt_proc.c18
-rw-r--r--doc/bug.template2
-rw-r--r--doc/src/sgml/Makefile23
-rw-r--r--doc/src/sgml/array.sgml19
-rw-r--r--doc/src/sgml/auto-explain.sgml77
-rw-r--r--doc/src/sgml/backup.sgml33
-rw-r--r--doc/src/sgml/bgworker.sgml27
-rw-r--r--doc/src/sgml/bki.sgml9
-rw-r--r--doc/src/sgml/brin.sgml490
-rw-r--r--doc/src/sgml/catalogs.sgml307
-rw-r--r--doc/src/sgml/client-auth.sgml38
-rw-r--r--doc/src/sgml/config.sgml894
-rw-r--r--doc/src/sgml/contrib.sgml6
-rw-r--r--doc/src/sgml/custom-scan.sgml285
-rw-r--r--doc/src/sgml/datatype.sgml75
-rw-r--r--doc/src/sgml/datetime.sgml35
-rw-r--r--doc/src/sgml/ddl.sgml310
-rw-r--r--doc/src/sgml/dfunc.sgml25
-rw-r--r--doc/src/sgml/docguide.sgml62
-rw-r--r--doc/src/sgml/dummy-seclabel.sgml74
-rw-r--r--doc/src/sgml/ecpg.sgml13
-rw-r--r--doc/src/sgml/event-trigger.sgml298
-rw-r--r--doc/src/sgml/extend.sgml33
-rw-r--r--doc/src/sgml/fdwhandler.sgml68
-rw-r--r--doc/src/sgml/filelist.sgml5
-rw-r--r--doc/src/sgml/func.sgml882
-rw-r--r--doc/src/sgml/generate-errcodes-table.pl2
-rw-r--r--doc/src/sgml/gin.sgml36
-rw-r--r--doc/src/sgml/gist.sgml81
-rw-r--r--doc/src/sgml/high-availability.sgml6
-rw-r--r--doc/src/sgml/indexam.sgml17
-rw-r--r--doc/src/sgml/indices.sgml36
-rw-r--r--doc/src/sgml/install-windows.sgml4
-rw-r--r--doc/src/sgml/installation.sgml23
-rw-r--r--doc/src/sgml/isn.sgml4
-rw-r--r--doc/src/sgml/json.sgml113
-rw-r--r--doc/src/sgml/keywords.sgml18
-rw-r--r--doc/src/sgml/legal.sgml6
-rw-r--r--doc/src/sgml/libpq.sgml267
-rw-r--r--doc/src/sgml/lobj.sgml8
-rw-r--r--doc/src/sgml/logicaldecoding.sgml256
-rw-r--r--doc/src/sgml/maintenance.sgml18
-rw-r--r--doc/src/sgml/monitoring.sgml559
-rw-r--r--doc/src/sgml/mvcc.sgml192
-rw-r--r--doc/src/sgml/pageinspect.sgml210
-rw-r--r--doc/src/sgml/perform.sgml75
-rw-r--r--doc/src/sgml/pg_xlogdump.sgml12
-rw-r--r--doc/src/sgml/pgbuffercache.sgml7
-rw-r--r--doc/src/sgml/pgcrypto.sgml40
-rw-r--r--doc/src/sgml/pgprewarm.sgml2
-rw-r--r--doc/src/sgml/pgstatstatements.sgml30
-rw-r--r--doc/src/sgml/plpgsql.sgml255
-rw-r--r--doc/src/sgml/plpython.sgml13
-rw-r--r--doc/src/sgml/pltcl.sgml2
-rw-r--r--doc/src/sgml/postgres-fdw.sgml75
-rw-r--r--doc/src/sgml/postgres.sgml2
-rw-r--r--doc/src/sgml/protocol.sgml61
-rw-r--r--doc/src/sgml/queries.sgml158
-rw-r--r--doc/src/sgml/recovery-config.sgml98
-rw-r--r--doc/src/sgml/ref/allfiles.sgml8
-rw-r--r--doc/src/sgml/ref/alter_aggregate.sgml3
-rw-r--r--doc/src/sgml/ref/alter_collation.sgml2
-rw-r--r--doc/src/sgml/ref/alter_conversion.sgml2
-rw-r--r--doc/src/sgml/ref/alter_database.sgml30
-rw-r--r--doc/src/sgml/ref/alter_domain.sgml7
-rw-r--r--doc/src/sgml/ref/alter_event_trigger.sgml2
-rw-r--r--doc/src/sgml/ref/alter_foreign_data_wrapper.sgml2
-rw-r--r--doc/src/sgml/ref/alter_foreign_table.sgml264
-rw-r--r--doc/src/sgml/ref/alter_function.sgml2
-rw-r--r--doc/src/sgml/ref/alter_group.sgml10
-rw-r--r--doc/src/sgml/ref/alter_index.sgml13
-rw-r--r--doc/src/sgml/ref/alter_language.sgml2
-rw-r--r--doc/src/sgml/ref/alter_large_object.sgml2
-rw-r--r--doc/src/sgml/ref/alter_materialized_view.sgml4
-rw-r--r--doc/src/sgml/ref/alter_opclass.sgml11
-rw-r--r--doc/src/sgml/ref/alter_operator.sgml7
-rw-r--r--doc/src/sgml/ref/alter_opfamily.sgml19
-rw-r--r--doc/src/sgml/ref/alter_policy.sgml135
-rw-r--r--doc/src/sgml/ref/alter_role.sgml38
-rw-r--r--doc/src/sgml/ref/alter_schema.sgml2
-rw-r--r--doc/src/sgml/ref/alter_sequence.sgml2
-rw-r--r--doc/src/sgml/ref/alter_server.sgml2
-rw-r--r--doc/src/sgml/ref/alter_system.sgml62
-rw-r--r--doc/src/sgml/ref/alter_table.sgml87
-rw-r--r--doc/src/sgml/ref/alter_tablespace.sgml72
-rw-r--r--doc/src/sgml/ref/alter_tsconfig.sgml2
-rw-r--r--doc/src/sgml/ref/alter_tsdictionary.sgml4
-rw-r--r--doc/src/sgml/ref/alter_type.sgml2
-rw-r--r--doc/src/sgml/ref/alter_user.sgml16
-rw-r--r--doc/src/sgml/ref/alter_user_mapping.sgml2
-rw-r--r--doc/src/sgml/ref/alter_view.sgml42
-rw-r--r--doc/src/sgml/ref/analyze.sgml6
-rw-r--r--doc/src/sgml/ref/cluster.sgml2
-rw-r--r--doc/src/sgml/ref/comment.sgml16
-rw-r--r--doc/src/sgml/ref/copy.sgml14
-rw-r--r--doc/src/sgml/ref/create_aggregate.sgml16
-rw-r--r--doc/src/sgml/ref/create_database.sgml24
-rw-r--r--doc/src/sgml/ref/create_domain.sgml47
-rw-r--r--doc/src/sgml/ref/create_foreign_table.sgml115
-rw-r--r--doc/src/sgml/ref/create_index.sgml64
-rw-r--r--doc/src/sgml/ref/create_materialized_view.sgml14
-rw-r--r--doc/src/sgml/ref/create_policy.sgml340
-rw-r--r--doc/src/sgml/ref/create_role.sgml20
-rw-r--r--doc/src/sgml/ref/create_schema.sgml14
-rw-r--r--doc/src/sgml/ref/create_sequence.sgml19
-rw-r--r--doc/src/sgml/ref/create_table.sgml33
-rw-r--r--doc/src/sgml/ref/create_table_as.sgml13
-rw-r--r--doc/src/sgml/ref/create_tablespace.sgml2
-rw-r--r--doc/src/sgml/ref/create_trigger.sgml2
-rw-r--r--doc/src/sgml/ref/create_type.sgml27
-rw-r--r--doc/src/sgml/ref/create_view.sgml25
-rw-r--r--doc/src/sgml/ref/discard.sgml34
-rw-r--r--doc/src/sgml/ref/drop_policy.sgml109
-rw-r--r--doc/src/sgml/ref/explain.sgml19
-rw-r--r--doc/src/sgml/ref/grant.sgml33
-rw-r--r--doc/src/sgml/ref/import_foreign_schema.sgml168
-rw-r--r--doc/src/sgml/ref/initdb.sgml12
-rw-r--r--doc/src/sgml/ref/lock.sgml6
-rw-r--r--doc/src/sgml/ref/pg_basebackup.sgml2
-rw-r--r--doc/src/sgml/ref/pg_controldata.sgml2
-rw-r--r--doc/src/sgml/ref/pg_ctl-ref.sgml25
-rw-r--r--doc/src/sgml/ref/pg_dump.sgml60
-rw-r--r--doc/src/sgml/ref/pg_isready.sgml5
-rw-r--r--doc/src/sgml/ref/pg_receivexlog.sgml131
-rw-r--r--doc/src/sgml/ref/pg_recvlogical.sgml355
-rw-r--r--doc/src/sgml/ref/pg_resetxlog.sgml24
-rw-r--r--doc/src/sgml/ref/pg_restore.sgml23
-rw-r--r--doc/src/sgml/ref/pg_rewind.sgml237
-rw-r--r--doc/src/sgml/ref/pgarchivecleanup.sgml (renamed from doc/src/sgml/pgarchivecleanup.sgml)10
-rw-r--r--doc/src/sgml/ref/pgbench.sgml (renamed from doc/src/sgml/pgbench.sgml)214
-rw-r--r--doc/src/sgml/ref/pgupgrade.sgml (renamed from doc/src/sgml/pgupgrade.sgml)280
-rw-r--r--doc/src/sgml/ref/postgres-ref.sgml20
-rw-r--r--doc/src/sgml/ref/psql-ref.sgml286
-rw-r--r--doc/src/sgml/ref/reindex.sgml28
-rw-r--r--doc/src/sgml/ref/reindexdb.sgml22
-rw-r--r--doc/src/sgml/ref/security_label.sgml2
-rw-r--r--doc/src/sgml/ref/select.sgml133
-rw-r--r--doc/src/sgml/ref/truncate.sgml6
-rw-r--r--doc/src/sgml/ref/update.sgml74
-rw-r--r--doc/src/sgml/ref/vacuum.sgml1
-rw-r--r--doc/src/sgml/ref/vacuumdb.sgml24
-rw-r--r--doc/src/sgml/reference.sgml8
-rw-r--r--doc/src/sgml/regress.sgml22
-rw-r--r--doc/src/sgml/release-7.4.sgml2
-rw-r--r--doc/src/sgml/release-8.2.sgml2
-rw-r--r--doc/src/sgml/release-8.3.sgml2
-rw-r--r--doc/src/sgml/release-8.4.sgml325
-rw-r--r--doc/src/sgml/release-9.0.sgml1078
-rw-r--r--doc/src/sgml/release-9.1.sgml1205
-rw-r--r--doc/src/sgml/release-9.2.sgml1407
-rw-r--r--doc/src/sgml/release-9.3.sgml3011
-rw-r--r--doc/src/sgml/release-9.4.sgml2283
-rw-r--r--doc/src/sgml/release-old.sgml6
-rw-r--r--doc/src/sgml/rules.sgml23
-rw-r--r--doc/src/sgml/runtime.sgml96
-rw-r--r--doc/src/sgml/spi.sgml2
-rw-r--r--doc/src/sgml/sql.sgml2
-rw-r--r--doc/src/sgml/storage.sgml159
-rw-r--r--doc/src/sgml/stylesheet-man.xsl4
-rw-r--r--doc/src/sgml/stylesheet.dsl15
-rw-r--r--doc/src/sgml/syntax.sgml175
-rw-r--r--doc/src/sgml/test-decoding.sgml4
-rw-r--r--doc/src/sgml/test-parser.sgml90
-rw-r--r--doc/src/sgml/test-shm-mq.sgml71
-rw-r--r--doc/src/sgml/textsearch.sgml2
-rw-r--r--doc/src/sgml/typeconv.sgml109
-rw-r--r--doc/src/sgml/unaccent.sgml44
-rw-r--r--doc/src/sgml/uuid-ossp.sgml2
-rw-r--r--doc/src/sgml/wal.sgml87
-rw-r--r--doc/src/sgml/xaggr.sgml18
-rw-r--r--doc/src/sgml/xfunc.sgml60
-rw-r--r--doc/src/sgml/xindex.sgml2
-rw-r--r--doc/src/sgml/xml2.sgml6
-rw-r--r--doc/src/sgml/xoper.sgml2
-rw-r--r--doc/src/sgml/xtypes.sgml52
-rw-r--r--src/Makefile.global.in52
-rw-r--r--src/Makefile.shlib34
-rw-r--r--src/backend/Makefile2
-rw-r--r--src/backend/access/Makefile2
-rw-r--r--src/backend/access/brin/Makefile18
-rw-r--r--src/backend/access/brin/README189
-rw-r--r--src/backend/access/brin/brin.c1224
-rw-r--r--src/backend/access/brin/brin_minmax.c337
-rw-r--r--src/backend/access/brin/brin_pageops.c675
-rw-r--r--src/backend/access/brin/brin_revmap.c499
-rw-r--r--src/backend/access/brin/brin_tuple.c554
-rw-r--r--src/backend/access/brin/brin_xlog.c284
-rw-r--r--src/backend/access/common/heaptuple.c4
-rw-r--r--src/backend/access/common/indextuple.c5
-rw-r--r--src/backend/access/common/printtup.c2
-rw-r--r--src/backend/access/common/reloptions.c84
-rw-r--r--src/backend/access/common/scankey.c2
-rw-r--r--src/backend/access/common/tupconvert.c2
-rw-r--r--src/backend/access/common/tupdesc.c2
-rw-r--r--src/backend/access/gin/ginarrayproc.c2
-rw-r--r--src/backend/access/gin/ginbtree.c114
-rw-r--r--src/backend/access/gin/ginbulk.c2
-rw-r--r--src/backend/access/gin/gindatapage.c207
-rw-r--r--src/backend/access/gin/ginentrypage.c67
-rw-r--r--src/backend/access/gin/ginfast.c105
-rw-r--r--src/backend/access/gin/ginget.c32
-rw-r--r--src/backend/access/gin/gininsert.c25
-rw-r--r--src/backend/access/gin/ginlogic.c2
-rw-r--r--src/backend/access/gin/ginpostinglist.c3
-rw-r--r--src/backend/access/gin/ginscan.c53
-rw-r--r--src/backend/access/gin/ginutil.c17
-rw-r--r--src/backend/access/gin/ginvacuum.c151
-rw-r--r--src/backend/access/gin/ginxlog.c528
-rw-r--r--src/backend/access/gist/gist.c37
-rw-r--r--src/backend/access/gist/gistbuild.c16
-rw-r--r--src/backend/access/gist/gistbuildbuffers.c8
-rw-r--r--src/backend/access/gist/gistget.c139
-rw-r--r--src/backend/access/gist/gistproc.c99
-rw-r--r--src/backend/access/gist/gistscan.c115
-rw-r--r--src/backend/access/gist/gistsplit.c2
-rw-r--r--src/backend/access/gist/gistutil.c116
-rw-r--r--src/backend/access/gist/gistvacuum.c2
-rw-r--r--src/backend/access/gist/gistxlog.c407
-rw-r--r--src/backend/access/hash/hash.c36
-rw-r--r--src/backend/access/hash/hashfunc.c2
-rw-r--r--src/backend/access/hash/hashinsert.c2
-rw-r--r--src/backend/access/hash/hashovfl.c2
-rw-r--r--src/backend/access/hash/hashpage.c58
-rw-r--r--src/backend/access/hash/hashscan.c2
-rw-r--r--src/backend/access/hash/hashsearch.c2
-rw-r--r--src/backend/access/hash/hashsort.c7
-rw-r--r--src/backend/access/hash/hashutil.c2
-rw-r--r--src/backend/access/heap/README.tuplock31
-rw-r--r--src/backend/access/heap/heapam.c2956
-rw-r--r--src/backend/access/heap/hio.c2
-rw-r--r--src/backend/access/heap/pruneheap.c4
-rw-r--r--src/backend/access/heap/rewriteheap.c44
-rw-r--r--src/backend/access/heap/syncscan.c7
-rw-r--r--src/backend/access/heap/tuptoaster.c163
-rw-r--r--src/backend/access/heap/visibilitymap.c3
-rw-r--r--src/backend/access/index/genam.c79
-rw-r--r--src/backend/access/index/indexam.c14
-rw-r--r--src/backend/access/nbtree/README104
-rw-r--r--src/backend/access/nbtree/nbtcompare.c2
-rw-r--r--src/backend/access/nbtree/nbtinsert.c227
-rw-r--r--src/backend/access/nbtree/nbtpage.c194
-rw-r--r--src/backend/access/nbtree/nbtree.c101
-rw-r--r--src/backend/access/nbtree/nbtsearch.c185
-rw-r--r--src/backend/access/nbtree/nbtsort.c76
-rw-r--r--src/backend/access/nbtree/nbtutils.c101
-rw-r--r--src/backend/access/nbtree/nbtxlog.c761
-rw-r--r--src/backend/access/rmgrdesc/Makefile3
-rw-r--r--src/backend/access/rmgrdesc/brindesc.c97
-rw-r--r--src/backend/access/rmgrdesc/clogdesc.c34
-rw-r--r--src/backend/access/rmgrdesc/committsdesc.c82
-rw-r--r--src/backend/access/rmgrdesc/dbasedesc.c33
-rw-r--r--src/backend/access/rmgrdesc/gindesc.c95
-rw-r--r--src/backend/access/rmgrdesc/gistdesc.c49
-rw-r--r--src/backend/access/rmgrdesc/hashdesc.c10
-rw-r--r--src/backend/access/rmgrdesc/heapdesc.c198
-rw-r--r--src/backend/access/rmgrdesc/mxactdesc.c44
-rw-r--r--src/backend/access/rmgrdesc/nbtdesc.c159
-rw-r--r--src/backend/access/rmgrdesc/relmapdesc.c26
-rw-r--r--src/backend/access/rmgrdesc/seqdesc.c28
-rw-r--r--src/backend/access/rmgrdesc/smgrdesc.c32
-rw-r--r--src/backend/access/rmgrdesc/spgdesc.c118
-rw-r--r--src/backend/access/rmgrdesc/standbydesc.c34
-rw-r--r--src/backend/access/rmgrdesc/tblspcdesc.c32
-rw-r--r--src/backend/access/rmgrdesc/xactdesc.c286
-rw-r--r--src/backend/access/rmgrdesc/xlogdesc.c98
-rw-r--r--src/backend/access/spgist/spgdoinsert.c244
-rw-r--r--src/backend/access/spgist/spginsert.c22
-rw-r--r--src/backend/access/spgist/spgkdtreeproc.c2
-rw-r--r--src/backend/access/spgist/spgquadtreeproc.c2
-rw-r--r--src/backend/access/spgist/spgscan.c3
-rw-r--r--src/backend/access/spgist/spgtextproc.c2
-rw-r--r--src/backend/access/spgist/spgutils.c2
-rw-r--r--src/backend/access/spgist/spgvacuum.c75
-rw-r--r--src/backend/access/spgist/spgxlog.c1017
-rw-r--r--src/backend/access/transam/Makefile7
-rw-r--r--src/backend/access/transam/README286
-rw-r--r--src/backend/access/transam/clog.c32
-rw-r--r--src/backend/access/transam/commit_ts.c941
-rw-r--r--src/backend/access/transam/gtm.c4
-rw-r--r--src/backend/access/transam/multixact.c224
-rw-r--r--src/backend/access/transam/recovery.conf.sample10
-rw-r--r--src/backend/access/transam/rmgr.c8
-rw-r--r--src/backend/access/transam/slru.c4
-rw-r--r--src/backend/access/transam/subtrans.c4
-rw-r--r--src/backend/access/transam/timeline.c10
-rw-r--r--src/backend/access/transam/transam.c2
-rw-r--r--src/backend/access/transam/twophase.c184
-rw-r--r--src/backend/access/transam/twophase_rmgr.c2
-rw-r--r--src/backend/access/transam/varsup.c7
-rw-r--r--src/backend/access/transam/xact.c598
-rw-r--r--src/backend/access/transam/xlog.c2722
-rw-r--r--src/backend/access/transam/xlogarchive.c24
-rw-r--r--src/backend/access/transam/xlogfuncs.c9
-rw-r--r--src/backend/access/transam/xloginsert.c996
-rw-r--r--src/backend/access/transam/xlogreader.c600
-rw-r--r--src/backend/access/transam/xlogutils.c169
-rw-r--r--src/backend/bootstrap/bootparse.y22
-rw-r--r--src/backend/bootstrap/bootscanner.l7
-rw-r--r--src/backend/bootstrap/bootstrap.c158
-rw-r--r--src/backend/catalog/Catalog.pm27
-rw-r--r--src/backend/catalog/Makefile2
-rw-r--r--src/backend/catalog/aclchk.c120
-rw-r--r--src/backend/catalog/catalog.c6
-rw-r--r--src/backend/catalog/dependency.c109
-rw-r--r--src/backend/catalog/genbki.pl71
-rw-r--r--src/backend/catalog/heap.c146
-rw-r--r--src/backend/catalog/index.c104
-rw-r--r--src/backend/catalog/indexing.c2
-rw-r--r--src/backend/catalog/information_schema.sql2
-rw-r--r--src/backend/catalog/namespace.c78
-rw-r--r--src/backend/catalog/objectaccess.c2
-rw-r--r--src/backend/catalog/objectaddress.c1240
-rw-r--r--src/backend/catalog/pg_aggregate.c58
-rw-r--r--src/backend/catalog/pg_collation.c2
-rw-r--r--src/backend/catalog/pg_constraint.c4
-rw-r--r--src/backend/catalog/pg_conversion.c10
-rw-r--r--src/backend/catalog/pg_db_role_setting.c2
-rw-r--r--src/backend/catalog/pg_depend.c2
-rw-r--r--src/backend/catalog/pg_enum.c11
-rw-r--r--src/backend/catalog/pg_inherits.c2
-rw-r--r--src/backend/catalog/pg_largeobject.c2
-rw-r--r--src/backend/catalog/pg_namespace.c2
-rw-r--r--src/backend/catalog/pg_operator.c15
-rw-r--r--src/backend/catalog/pg_proc.c6
-rw-r--r--src/backend/catalog/pg_range.c2
-rw-r--r--src/backend/catalog/pg_shdepend.c6
-rw-r--r--src/backend/catalog/pg_type.c40
-rw-r--r--src/backend/catalog/sql_features.txt14
-rw-r--r--src/backend/catalog/storage.c35
-rw-r--r--src/backend/catalog/system_views.sql77
-rw-r--r--src/backend/catalog/toasting.c74
-rw-r--r--src/backend/commands/Makefile2
-rw-r--r--src/backend/commands/aggregatecmds.c4
-rw-r--r--src/backend/commands/alter.c67
-rw-r--r--src/backend/commands/analyze.c169
-rw-r--r--src/backend/commands/async.c233
-rw-r--r--src/backend/commands/cluster.c74
-rw-r--r--src/backend/commands/collationcmds.c9
-rw-r--r--src/backend/commands/comment.c10
-rw-r--r--src/backend/commands/constraint.c2
-rw-r--r--src/backend/commands/conversioncmds.c4
-rw-r--r--src/backend/commands/copy.c136
-rw-r--r--src/backend/commands/createas.c64
-rw-r--r--src/backend/commands/dbcommands.c251
-rw-r--r--src/backend/commands/define.c2
-rw-r--r--src/backend/commands/discard.c2
-rw-r--r--src/backend/commands/dropcmds.c45
-rw-r--r--src/backend/commands/event_trigger.c325
-rw-r--r--src/backend/commands/explain.c378
-rw-r--r--src/backend/commands/extension.c74
-rw-r--r--src/backend/commands/foreigncmds.c315
-rw-r--r--src/backend/commands/functioncmds.c25
-rw-r--r--src/backend/commands/indexcmds.c154
-rw-r--r--src/backend/commands/lockcmds.c2
-rw-r--r--src/backend/commands/matview.c135
-rw-r--r--src/backend/commands/opclasscmds.c19
-rw-r--r--src/backend/commands/operatorcmds.c14
-rw-r--r--src/backend/commands/policy.c993
-rw-r--r--src/backend/commands/portalcmds.c2
-rw-r--r--src/backend/commands/prepare.c7
-rw-r--r--src/backend/commands/proclang.c158
-rw-r--r--src/backend/commands/schemacmds.c37
-rw-r--r--src/backend/commands/seclabel.c8
-rw-r--r--src/backend/commands/sequence.c160
-rw-r--r--src/backend/commands/tablecmds.c1290
-rw-r--r--src/backend/commands/tablespace.c232
-rw-r--r--src/backend/commands/trigger.c478
-rw-r--r--src/backend/commands/tsearchcmds.c74
-rw-r--r--src/backend/commands/typecmds.c573
-rw-r--r--src/backend/commands/user.c200
-rw-r--r--src/backend/commands/vacuum.c424
-rw-r--r--src/backend/commands/vacuumlazy.c142
-rw-r--r--src/backend/commands/variable.c10
-rw-r--r--src/backend/commands/view.c39
-rw-r--r--src/backend/executor/Makefile2
-rw-r--r--src/backend/executor/execAmi.c95
-rw-r--r--src/backend/executor/execCurrent.c8
-rw-r--r--src/backend/executor/execGrouping.c2
-rw-r--r--src/backend/executor/execJunk.c2
-rw-r--r--src/backend/executor/execMain.c396
-rw-r--r--src/backend/executor/execProcnode.c16
-rw-r--r--src/backend/executor/execQual.c263
-rw-r--r--src/backend/executor/execScan.c4
-rw-r--r--src/backend/executor/execTuples.c76
-rw-r--r--src/backend/executor/execUtils.c22
-rw-r--r--src/backend/executor/functions.c8
-rw-r--r--src/backend/executor/instrument.c2
-rw-r--r--src/backend/executor/nodeAgg.c58
-rw-r--r--src/backend/executor/nodeAppend.c2
-rw-r--r--src/backend/executor/nodeBitmapAnd.c2
-rw-r--r--src/backend/executor/nodeBitmapHeapscan.c2
-rw-r--r--src/backend/executor/nodeBitmapIndexscan.c2
-rw-r--r--src/backend/executor/nodeBitmapOr.c2
-rw-r--r--src/backend/executor/nodeCtescan.c2
-rw-r--r--src/backend/executor/nodeCustom.c126
-rw-r--r--src/backend/executor/nodeForeignscan.c2
-rw-r--r--src/backend/executor/nodeFunctionscan.c37
-rw-r--r--src/backend/executor/nodeGroup.c2
-rw-r--r--src/backend/executor/nodeHash.c357
-rw-r--r--src/backend/executor/nodeHashjoin.c2
-rw-r--r--src/backend/executor/nodeIndexonlyscan.c2
-rw-r--r--src/backend/executor/nodeIndexscan.c2
-rw-r--r--src/backend/executor/nodeLimit.c2
-rw-r--r--src/backend/executor/nodeLockRows.c41
-rw-r--r--src/backend/executor/nodeMaterial.c2
-rw-r--r--src/backend/executor/nodeMergeAppend.c11
-rw-r--r--src/backend/executor/nodeMergejoin.c18
-rw-r--r--src/backend/executor/nodeModifyTable.c2
-rw-r--r--src/backend/executor/nodeNestloop.c2
-rw-r--r--src/backend/executor/nodeRecursiveunion.c2
-rw-r--r--src/backend/executor/nodeResult.c2
-rw-r--r--src/backend/executor/nodeSeqscan.c40
-rw-r--r--src/backend/executor/nodeSetOp.c2
-rw-r--r--src/backend/executor/nodeSort.c2
-rw-r--r--src/backend/executor/nodeSubplan.c121
-rw-r--r--src/backend/executor/nodeSubqueryscan.c2
-rw-r--r--src/backend/executor/nodeTidscan.c32
-rw-r--r--src/backend/executor/nodeUnique.c2
-rw-r--r--src/backend/executor/nodeValuesscan.c33
-rw-r--r--src/backend/executor/nodeWindowAgg.c6
-rw-r--r--src/backend/executor/nodeWorktablescan.c2
-rw-r--r--src/backend/executor/spi.c11
-rw-r--r--src/backend/executor/tstoreReceiver.c2
-rw-r--r--src/backend/foreign/foreign.c43
-rw-r--r--src/backend/lib/Makefile2
-rw-r--r--src/backend/lib/README25
-rw-r--r--src/backend/lib/binaryheap.c4
-rw-r--r--src/backend/lib/hyperloglog.c228
-rw-r--r--src/backend/lib/ilist.c2
-rw-r--r--src/backend/lib/pairingheap.c333
-rw-r--r--src/backend/lib/rbtree.c (renamed from src/backend/utils/misc/rbtree.c)6
-rw-r--r--src/backend/lib/stringinfo.c2
-rw-r--r--src/backend/libpq/Makefile6
-rw-r--r--src/backend/libpq/auth.c78
-rw-r--r--src/backend/libpq/be-fsstubs.c6
-rw-r--r--src/backend/libpq/be-secure-openssl.c1146
-rw-r--r--src/backend/libpq/be-secure.c1078
-rw-r--r--src/backend/libpq/crypt.c12
-rw-r--r--src/backend/libpq/hba.c65
-rw-r--r--src/backend/libpq/ip.c75
-rw-r--r--src/backend/libpq/md5.c2
-rw-r--r--src/backend/libpq/pqcomm.c219
-rw-r--r--src/backend/libpq/pqformat.c2
-rw-r--r--src/backend/libpq/pqmq.c261
-rw-r--r--src/backend/libpq/pqsignal.c2
-rw-r--r--src/backend/main/main.c73
-rw-r--r--src/backend/nls.mk4
-rw-r--r--src/backend/nodes/bitmapset.c114
-rw-r--r--src/backend/nodes/copyfuncs.c197
-rw-r--r--src/backend/nodes/equalfuncs.c142
-rw-r--r--src/backend/nodes/list.c4
-rw-r--r--src/backend/nodes/makefuncs.c2
-rw-r--r--src/backend/nodes/nodeFuncs.c60
-rw-r--r--src/backend/nodes/nodes.c2
-rw-r--r--src/backend/nodes/outfuncs.c153
-rw-r--r--src/backend/nodes/params.c7
-rw-r--r--src/backend/nodes/print.c2
-rw-r--r--src/backend/nodes/read.c2
-rw-r--r--src/backend/nodes/readfuncs.c12
-rw-r--r--src/backend/nodes/tidbitmap.c30
-rw-r--r--src/backend/nodes/value.c2
-rw-r--r--src/backend/optimizer/README34
-rw-r--r--src/backend/optimizer/geqo/geqo_copy.c2
-rw-r--r--src/backend/optimizer/geqo/geqo_eval.c33
-rw-r--r--src/backend/optimizer/geqo/geqo_main.c5
-rw-r--r--src/backend/optimizer/geqo/geqo_misc.c2
-rw-r--r--src/backend/optimizer/geqo/geqo_pool.c28
-rw-r--r--src/backend/optimizer/geqo/geqo_random.c2
-rw-r--r--src/backend/optimizer/geqo/geqo_selection.c2
-rw-r--r--src/backend/optimizer/path/allpaths.c413
-rw-r--r--src/backend/optimizer/path/clausesel.c2
-rw-r--r--src/backend/optimizer/path/costsize.c96
-rw-r--r--src/backend/optimizer/path/equivclass.c43
-rw-r--r--src/backend/optimizer/path/indxpath.c309
-rw-r--r--src/backend/optimizer/path/joinpath.c43
-rw-r--r--src/backend/optimizer/path/joinrels.c7
-rw-r--r--src/backend/optimizer/path/pathkeys.c2
-rw-r--r--src/backend/optimizer/path/tidpath.c2
-rw-r--r--src/backend/optimizer/plan/analyzejoins.c304
-rw-r--r--src/backend/optimizer/plan/createplan.c106
-rw-r--r--src/backend/optimizer/plan/initsplan.c183
-rw-r--r--src/backend/optimizer/plan/planagg.c3
-rw-r--r--src/backend/optimizer/plan/planmain.c2
-rw-r--r--src/backend/optimizer/plan/planner.c120
-rw-r--r--src/backend/optimizer/plan/setrefs.c159
-rw-r--r--src/backend/optimizer/plan/subselect.c195
-rw-r--r--src/backend/optimizer/prep/prepjointree.c461
-rw-r--r--src/backend/optimizer/prep/prepqual.c17
-rw-r--r--src/backend/optimizer/prep/prepsecurity.c74
-rw-r--r--src/backend/optimizer/prep/preptlist.c10
-rw-r--r--src/backend/optimizer/prep/prepunion.c44
-rw-r--r--src/backend/optimizer/util/clauses.c40
-rw-r--r--src/backend/optimizer/util/joininfo.c14
-rw-r--r--src/backend/optimizer/util/orclauses.c19
-rw-r--r--src/backend/optimizer/util/pathnode.c418
-rw-r--r--src/backend/optimizer/util/placeholder.c6
-rw-r--r--src/backend/optimizer/util/plancat.c10
-rw-r--r--src/backend/optimizer/util/predtest.c522
-rw-r--r--src/backend/optimizer/util/relnode.c61
-rw-r--r--src/backend/optimizer/util/restrictinfo.c2
-rw-r--r--src/backend/optimizer/util/tlist.c23
-rw-r--r--src/backend/optimizer/util/var.c8
-rw-r--r--src/backend/parser/analyze.c71
-rw-r--r--src/backend/parser/check_keywords.pl2
-rw-r--r--src/backend/parser/gram.y1664
-rw-r--r--src/backend/parser/keywords.c2
-rw-r--r--src/backend/parser/kwlookup.c2
-rw-r--r--src/backend/parser/parse_agg.c2
-rw-r--r--src/backend/parser/parse_clause.c32
-rw-r--r--src/backend/parser/parse_coerce.c2
-rw-r--r--src/backend/parser/parse_collate.c2
-rw-r--r--src/backend/parser/parse_cte.c2
-rw-r--r--src/backend/parser/parse_expr.c958
-rw-r--r--src/backend/parser/parse_func.c11
-rw-r--r--src/backend/parser/parse_node.c2
-rw-r--r--src/backend/parser/parse_oper.c29
-rw-r--r--src/backend/parser/parse_param.c2
-rw-r--r--src/backend/parser/parse_relation.c306
-rw-r--r--src/backend/parser/parse_target.c35
-rw-r--r--src/backend/parser/parse_type.c54
-rw-r--r--src/backend/parser/parse_utilcmd.c125
-rw-r--r--src/backend/parser/parser.c124
-rw-r--r--src/backend/parser/scan.l59
-rw-r--r--src/backend/parser/scansup.c2
-rw-r--r--src/backend/pgxc/barrier/barrier.c20
-rw-r--r--src/backend/po/de.po9181
-rw-r--r--src/backend/po/es.po10171
-rw-r--r--src/backend/po/fr.po9622
-rw-r--r--src/backend/po/id.po19247
-rw-r--r--src/backend/po/it.po9114
-rw-r--r--src/backend/po/ja.po6
-rw-r--r--src/backend/po/pl.po12558
-rw-r--r--src/backend/po/pt_BR.po8978
-rw-r--r--src/backend/po/ru.po9718
-rw-r--r--src/backend/po/zh_CN.po13695
-rw-r--r--src/backend/po/zh_TW.po22317
-rw-r--r--src/backend/port/Makefile2
-rw-r--r--src/backend/port/atomics.c135
-rw-r--r--src/backend/port/dynloader/aix.h2
-rw-r--r--src/backend/port/dynloader/cygwin.h2
-rw-r--r--src/backend/port/dynloader/freebsd.c2
-rw-r--r--src/backend/port/dynloader/freebsd.h2
-rw-r--r--src/backend/port/dynloader/hpux.c2
-rw-r--r--src/backend/port/dynloader/hpux.h2
-rw-r--r--src/backend/port/dynloader/linux.c2
-rw-r--r--src/backend/port/dynloader/linux.h2
-rw-r--r--src/backend/port/dynloader/netbsd.c2
-rw-r--r--src/backend/port/dynloader/netbsd.h2
-rw-r--r--src/backend/port/dynloader/openbsd.c2
-rw-r--r--src/backend/port/dynloader/openbsd.h2
-rw-r--r--src/backend/port/dynloader/osf.c7
-rw-r--r--src/backend/port/dynloader/osf.h47
-rw-r--r--src/backend/port/dynloader/sco.h2
-rw-r--r--src/backend/port/dynloader/solaris.h2
-rw-r--r--src/backend/port/dynloader/unixware.h2
-rw-r--r--src/backend/port/posix_sema.c14
-rw-r--r--src/backend/port/sysv_sema.c45
-rw-r--r--src/backend/port/sysv_shmem.c6
-rw-r--r--src/backend/port/tas/sunstudio_sparc.s4
-rw-r--r--src/backend/port/tas/sunstudio_x86.s2
-rw-r--r--src/backend/port/unix_latch.c49
-rw-r--r--src/backend/port/win32/crashdump.c2
-rw-r--r--src/backend/port/win32/mingwcompat.c2
-rw-r--r--src/backend/port/win32/security.c2
-rw-r--r--src/backend/port/win32/signal.c2
-rw-r--r--src/backend/port/win32/socket.c7
-rw-r--r--src/backend/port/win32/timer.c2
-rw-r--r--src/backend/port/win32_latch.c33
-rw-r--r--src/backend/port/win32_sema.c60
-rw-r--r--src/backend/port/win32_shmem.c2
-rw-r--r--src/backend/postmaster/autovacuum.c226
-rw-r--r--src/backend/postmaster/bgworker.c64
-rw-r--r--src/backend/postmaster/bgwriter.c30
-rw-r--r--src/backend/postmaster/checkpointer.c67
-rw-r--r--src/backend/postmaster/fork_process.c63
-rw-r--r--src/backend/postmaster/pgarch.c45
-rw-r--r--src/backend/postmaster/pgstat.c320
-rw-r--r--src/backend/postmaster/postmaster.c207
-rw-r--r--src/backend/postmaster/startup.c11
-rw-r--r--src/backend/postmaster/syslogger.c49
-rw-r--r--src/backend/postmaster/walwriter.c25
-rw-r--r--src/backend/regex/regc_pg_locale.c2
-rw-r--r--src/backend/regex/regcomp.c31
-rw-r--r--src/backend/regex/regerror.c2
-rw-r--r--src/backend/regex/regexec.c4
-rw-r--r--src/backend/regex/regexport.c2
-rw-r--r--src/backend/regex/regprefix.c2
-rw-r--r--src/backend/replication/Makefile2
-rw-r--r--src/backend/replication/README2
-rw-r--r--src/backend/replication/basebackup.c59
-rw-r--r--src/backend/replication/libpqwalreceiver/Makefile3
-rw-r--r--src/backend/replication/libpqwalreceiver/libpqwalreceiver.c31
-rw-r--r--src/backend/replication/logical/decode.c335
-rw-r--r--src/backend/replication/logical/logical.c46
-rw-r--r--src/backend/replication/logical/logicalfuncs.c13
-rw-r--r--src/backend/replication/logical/reorderbuffer.c177
-rw-r--r--src/backend/replication/logical/snapbuild.c125
-rw-r--r--src/backend/replication/repl_gram.y4
-rw-r--r--src/backend/replication/repl_scanner.l4
-rw-r--r--src/backend/replication/slot.c117
-rw-r--r--src/backend/replication/slotfuncs.c19
-rw-r--r--src/backend/replication/syncrep.c107
-rw-r--r--src/backend/replication/walreceiver.c34
-rw-r--r--src/backend/replication/walreceiverfuncs.c14
-rw-r--r--src/backend/replication/walsender.c218
-rw-r--r--src/backend/rewrite/Makefile3
-rw-r--r--src/backend/rewrite/rewriteDefine.c51
-rw-r--r--src/backend/rewrite/rewriteHandler.c146
-rw-r--r--src/backend/rewrite/rewriteManip.c44
-rw-r--r--src/backend/rewrite/rewriteRemove.c2
-rw-r--r--src/backend/rewrite/rewriteSupport.c2
-rw-r--r--src/backend/rewrite/rowsecurity.c480
-rw-r--r--src/backend/snowball/Makefile5
-rw-r--r--src/backend/snowball/dict_snowball.c3
-rw-r--r--src/backend/snowball/stopwords/hungarian.stop14
-rw-r--r--src/backend/storage/buffer/README43
-rw-r--r--src/backend/storage/buffer/buf_init.c62
-rw-r--r--src/backend/storage/buffer/buf_table.c5
-rw-r--r--src/backend/storage/buffer/bufmgr.c668
-rw-r--r--src/backend/storage/buffer/freelist.c279
-rw-r--r--src/backend/storage/buffer/localbuf.c68
-rw-r--r--src/backend/storage/file/buffile.c2
-rw-r--r--src/backend/storage/file/copydir.c2
-rw-r--r--src/backend/storage/file/fd.c3
-rw-r--r--src/backend/storage/file/reinit.c49
-rw-r--r--src/backend/storage/freespace/freespace.c2
-rw-r--r--src/backend/storage/freespace/fsmpage.c2
-rw-r--r--src/backend/storage/freespace/indexfsm.c2
-rw-r--r--src/backend/storage/ipc/dsm.c50
-rw-r--r--src/backend/storage/ipc/dsm_impl.c14
-rw-r--r--src/backend/storage/ipc/ipc.c4
-rw-r--r--src/backend/storage/ipc/ipci.c5
-rw-r--r--src/backend/storage/ipc/pmsignal.c4
-rw-r--r--src/backend/storage/ipc/procarray.c14
-rw-r--r--src/backend/storage/ipc/procsignal.c6
-rw-r--r--src/backend/storage/ipc/shm_mq.c147
-rw-r--r--src/backend/storage/ipc/shm_toc.c2
-rw-r--r--src/backend/storage/ipc/shmem.c2
-rw-r--r--src/backend/storage/ipc/shmqueue.c2
-rw-r--r--src/backend/storage/ipc/sinval.c225
-rw-r--r--src/backend/storage/ipc/sinvaladt.c30
-rw-r--r--src/backend/storage/ipc/standby.c44
-rw-r--r--src/backend/storage/large_object/inv_api.c18
-rw-r--r--src/backend/storage/lmgr/deadlock.c2
-rw-r--r--src/backend/storage/lmgr/lmgr.c2
-rw-r--r--src/backend/storage/lmgr/lock.c19
-rw-r--r--src/backend/storage/lmgr/lwlock.c1123
-rw-r--r--src/backend/storage/lmgr/predicate.c23
-rw-r--r--src/backend/storage/lmgr/proc.c188
-rw-r--r--src/backend/storage/lmgr/s_lock.c14
-rw-r--r--src/backend/storage/lmgr/spin.c11
-rw-r--r--src/backend/storage/page/bufpage.c241
-rw-r--r--src/backend/storage/page/checksum.c2
-rw-r--r--src/backend/storage/page/itemptr.c2
-rw-r--r--src/backend/storage/smgr/README2
-rw-r--r--src/backend/storage/smgr/md.c30
-rw-r--r--src/backend/storage/smgr/smgr.c5
-rw-r--r--src/backend/storage/smgr/smgrtype.c2
-rw-r--r--src/backend/tcop/dest.c2
-rw-r--r--src/backend/tcop/fastpath.c31
-rw-r--r--src/backend/tcop/postgres.c377
-rw-r--r--src/backend/tcop/pquery.c2
-rw-r--r--src/backend/tcop/utility.c348
-rw-r--r--src/backend/tsearch/Makefile2
-rw-r--r--src/backend/tsearch/dict.c2
-rw-r--r--src/backend/tsearch/dict_ispell.c2
-rw-r--r--src/backend/tsearch/dict_simple.c2
-rw-r--r--src/backend/tsearch/dict_synonym.c2
-rw-r--r--src/backend/tsearch/dict_thesaurus.c27
-rw-r--r--src/backend/tsearch/regis.c2
-rw-r--r--src/backend/tsearch/spell.c72
-rw-r--r--src/backend/tsearch/to_tsany.c2
-rw-r--r--src/backend/tsearch/ts_locale.c2
-rw-r--r--src/backend/tsearch/ts_parse.c2
-rw-r--r--src/backend/tsearch/ts_selfuncs.c2
-rw-r--r--src/backend/tsearch/ts_typanalyze.c2
-rw-r--r--src/backend/tsearch/ts_utils.c2
-rw-r--r--src/backend/tsearch/wparser.c2
-rw-r--r--src/backend/tsearch/wparser_def.c8
-rw-r--r--src/backend/utils/Gen_dummy_probes.sed2
-rw-r--r--src/backend/utils/Gen_fmgrtab.pl8
-rw-r--r--src/backend/utils/adt/Makefile7
-rw-r--r--src/backend/utils/adt/acl.c121
-rw-r--r--src/backend/utils/adt/array_selfuncs.c2
-rw-r--r--src/backend/utils/adt/array_typanalyze.c5
-rw-r--r--src/backend/utils/adt/array_userfuncs.c632
-rw-r--r--src/backend/utils/adt/arrayfuncs.c1033
-rw-r--r--src/backend/utils/adt/arrayutils.c2
-rw-r--r--src/backend/utils/adt/ascii.c2
-rw-r--r--src/backend/utils/adt/bool.c2
-rw-r--r--src/backend/utils/adt/char.c2
-rw-r--r--src/backend/utils/adt/date.c33
-rw-r--r--src/backend/utils/adt/datetime.c592
-rw-r--r--src/backend/utils/adt/datum.c2
-rw-r--r--src/backend/utils/adt/dbsize.c4
-rw-r--r--src/backend/utils/adt/domains.c80
-rw-r--r--src/backend/utils/adt/encode.c9
-rw-r--r--src/backend/utils/adt/enum.c2
-rw-r--r--src/backend/utils/adt/float.c2
-rw-r--r--src/backend/utils/adt/format_type.c4
-rw-r--r--src/backend/utils/adt/formatting.c324
-rw-r--r--src/backend/utils/adt/genfile.c2
-rw-r--r--src/backend/utils/adt/geo_ops.c147
-rw-r--r--src/backend/utils/adt/geo_selfuncs.c2
-rw-r--r--src/backend/utils/adt/int.c2
-rw-r--r--src/backend/utils/adt/int8.c4
-rw-r--r--src/backend/utils/adt/json.c458
-rw-r--r--src/backend/utils/adt/jsonb.c1417
-rw-r--r--src/backend/utils/adt/jsonb_gin.c2
-rw-r--r--src/backend/utils/adt/jsonb_op.c12
-rw-r--r--src/backend/utils/adt/jsonb_util.c406
-rw-r--r--src/backend/utils/adt/jsonfuncs.c1112
-rw-r--r--src/backend/utils/adt/levenshtein.c (renamed from contrib/fuzzystrmatch/levenshtein.c)100
-rw-r--r--src/backend/utils/adt/like.c2
-rw-r--r--src/backend/utils/adt/like_match.c2
-rw-r--r--src/backend/utils/adt/lockfuncs.c2
-rw-r--r--src/backend/utils/adt/mac.c3
-rw-r--r--src/backend/utils/adt/misc.c46
-rw-r--r--src/backend/utils/adt/nabstime.c2
-rw-r--r--src/backend/utils/adt/name.c4
-rw-r--r--src/backend/utils/adt/network.c27
-rw-r--r--src/backend/utils/adt/network_gist.c29
-rw-r--r--src/backend/utils/adt/network_selfuncs.c982
-rw-r--r--src/backend/utils/adt/numeric.c1115
-rw-r--r--src/backend/utils/adt/numutils.c6
-rw-r--r--src/backend/utils/adt/oid.c2
-rw-r--r--src/backend/utils/adt/oracle_compat.c4
-rw-r--r--src/backend/utils/adt/orderedsetaggs.c88
-rw-r--r--src/backend/utils/adt/pg_locale.c5
-rw-r--r--src/backend/utils/adt/pg_lsn.c2
-rw-r--r--src/backend/utils/adt/pg_upgrade_support.c (renamed from contrib/pg_upgrade_support/pg_upgrade_support.c)64
-rw-r--r--src/backend/utils/adt/pgstatfuncs.c64
-rw-r--r--src/backend/utils/adt/pseudotypes.c2
-rw-r--r--src/backend/utils/adt/quote.c2
-rw-r--r--src/backend/utils/adt/rangetypes.c8
-rw-r--r--src/backend/utils/adt/rangetypes_gist.c12
-rw-r--r--src/backend/utils/adt/rangetypes_selfuncs.c52
-rw-r--r--src/backend/utils/adt/rangetypes_spgist.c277
-rw-r--r--src/backend/utils/adt/rangetypes_typanalyze.c2
-rw-r--r--src/backend/utils/adt/regexp.c65
-rw-r--r--src/backend/utils/adt/regproc.c62
-rw-r--r--src/backend/utils/adt/ri_triggers.c129
-rw-r--r--src/backend/utils/adt/rowtypes.c54
-rw-r--r--src/backend/utils/adt/ruleutils.c325
-rw-r--r--src/backend/utils/adt/selfuncs.c442
-rw-r--r--src/backend/utils/adt/tid.c2
-rw-r--r--src/backend/utils/adt/timestamp.c236
-rw-r--r--src/backend/utils/adt/trigfuncs.c8
-rw-r--r--src/backend/utils/adt/tsginidx.c2
-rw-r--r--src/backend/utils/adt/tsgistidx.c15
-rw-r--r--src/backend/utils/adt/tsquery.c19
-rw-r--r--src/backend/utils/adt/tsquery_cleanup.c2
-rw-r--r--src/backend/utils/adt/tsquery_gist.c2
-rw-r--r--src/backend/utils/adt/tsquery_op.c133
-rw-r--r--src/backend/utils/adt/tsquery_rewrite.c2
-rw-r--r--src/backend/utils/adt/tsquery_util.c2
-rw-r--r--src/backend/utils/adt/tsrank.c33
-rw-r--r--src/backend/utils/adt/tsvector.c2
-rw-r--r--src/backend/utils/adt/tsvector_op.c4
-rw-r--r--src/backend/utils/adt/tsvector_parser.c2
-rw-r--r--src/backend/utils/adt/txid.c8
-rw-r--r--src/backend/utils/adt/uuid.c2
-rw-r--r--src/backend/utils/adt/varbit.c2
-rw-r--r--src/backend/utils/adt/varchar.c2
-rw-r--r--src/backend/utils/adt/varlena.c591
-rw-r--r--src/backend/utils/adt/version.c2
-rw-r--r--src/backend/utils/adt/windowfuncs.c2
-rw-r--r--src/backend/utils/adt/xid.c18
-rw-r--r--src/backend/utils/adt/xml.c77
-rw-r--r--src/backend/utils/cache/attoptcache.c5
-rw-r--r--src/backend/utils/cache/catcache.c73
-rw-r--r--src/backend/utils/cache/evtcache.c7
-rw-r--r--src/backend/utils/cache/inval.c139
-rw-r--r--src/backend/utils/cache/lsyscache.c93
-rw-r--r--src/backend/utils/cache/plancache.c56
-rw-r--r--src/backend/utils/cache/relcache.c204
-rw-r--r--src/backend/utils/cache/relfilenodemap.c6
-rw-r--r--src/backend/utils/cache/relmapper.c42
-rw-r--r--src/backend/utils/cache/spccache.c5
-rw-r--r--src/backend/utils/cache/syscache.c2
-rw-r--r--src/backend/utils/cache/ts_cache.c11
-rw-r--r--src/backend/utils/cache/typcache.c650
-rw-r--r--src/backend/utils/errcodes.txt4
-rw-r--r--src/backend/utils/error/assert.c2
-rw-r--r--src/backend/utils/error/elog.c135
-rw-r--r--src/backend/utils/fmgr/dfmgr.c13
-rw-r--r--src/backend/utils/fmgr/fmgr.c5
-rw-r--r--src/backend/utils/fmgr/funcapi.c2
-rw-r--r--src/backend/utils/generate-errcodes.pl2
-rw-r--r--src/backend/utils/hash/Makefile2
-rw-r--r--src/backend/utils/hash/dynahash.c36
-rw-r--r--src/backend/utils/hash/hashfn.c10
-rw-r--r--src/backend/utils/hash/pg_crc.c97
-rw-r--r--src/backend/utils/init/globals.c13
-rw-r--r--src/backend/utils/init/miscinit.c124
-rw-r--r--src/backend/utils/init/postinit.c114
-rw-r--r--src/backend/utils/mb/Unicode/Makefile2
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_BIG5.pl2
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_EUC_CN.pl2
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_EUC_JIS_2004.pl2
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_EUC_JP.pl2
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_EUC_KR.pl2
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_EUC_TW.pl2
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_GB18030.pl2
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_SHIFT_JIS_2004.pl2
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_SJIS.pl2
-rw-r--r--src/backend/utils/mb/Unicode/UCS_to_most.pl2
-rw-r--r--src/backend/utils/mb/Unicode/ucs2utf.pl2
-rw-r--r--src/backend/utils/mb/conv.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/ascii_and_mic/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/ascii_and_mic/ascii_and_mic.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/cyrillic_and_mic/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/cyrillic_and_mic/cyrillic_and_mic.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/euc2004_sjis2004/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/euc2004_sjis2004/euc2004_sjis2004.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_cn_and_mic/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_cn_and_mic/euc_cn_and_mic.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_kr_and_mic/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_kr_and_mic/euc_kr_and_mic.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_tw_and_big5/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_tw_and_big5/euc_tw_and_big5.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/latin2_and_win1250/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/latin2_and_win1250/latin2_and_win1250.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/latin_and_mic/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/latin_and_mic/latin_and_mic.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/proc.mk2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_ascii/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_ascii/utf8_and_ascii.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_big5/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_big5/utf8_and_big5.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc2004/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc2004/utf8_and_euc2004.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/utf8_and_euc_cn.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/utf8_and_euc_jp.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/utf8_and_euc_kr.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/utf8_and_euc_tw.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_gb18030/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_gb18030/utf8_and_gb18030.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_gbk/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_gbk/utf8_and_gbk.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_iso8859/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_iso8859_1/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_iso8859_1/utf8_and_iso8859_1.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_johab/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_johab/utf8_and_johab.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_sjis/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_sjis/utf8_and_sjis.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_sjis2004/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_sjis2004/utf8_and_sjis2004.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_uhc/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_uhc/utf8_and_uhc.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_win/Makefile1
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c2
-rw-r--r--src/backend/utils/mb/encnames.c2
-rw-r--r--src/backend/utils/mb/mbutils.c2
-rw-r--r--src/backend/utils/misc/Makefile2
-rwxr-xr-xsrc/backend/utils/misc/check_guc2
-rw-r--r--src/backend/utils/misc/guc-file.l123
-rw-r--r--src/backend/utils/misc/guc.c1805
-rw-r--r--src/backend/utils/misc/help_config.c2
-rw-r--r--src/backend/utils/misc/pg_rusage.c2
-rw-r--r--src/backend/utils/misc/postgresql.conf.sample20
-rw-r--r--src/backend/utils/misc/ps_status.c26
-rw-r--r--src/backend/utils/misc/rls.c114
-rw-r--r--src/backend/utils/misc/superuser.c2
-rw-r--r--src/backend/utils/misc/timeout.c46
-rw-r--r--src/backend/utils/misc/tzparser.c79
-rw-r--r--src/backend/utils/mmgr/README243
-rw-r--r--src/backend/utils/mmgr/aset.c75
-rw-r--r--src/backend/utils/mmgr/mcxt.c268
-rw-r--r--src/backend/utils/mmgr/portalmem.c2
-rw-r--r--src/backend/utils/probes.d2
-rw-r--r--src/backend/utils/resowner/resowner.c2
-rw-r--r--src/backend/utils/sort/logtape.c21
-rw-r--r--src/backend/utils/sort/sortsupport.c96
-rw-r--r--src/backend/utils/sort/tuplesort.c729
-rw-r--r--src/backend/utils/sort/tuplestore.c68
-rw-r--r--src/backend/utils/time/combocid.c5
-rw-r--r--src/backend/utils/time/snapmgr.c113
-rw-r--r--src/backend/utils/time/tqual.c40
-rw-r--r--src/bin/Makefile19
-rw-r--r--src/bin/initdb/Makefile2
-rw-r--r--src/bin/initdb/findtimezone.c2
-rw-r--r--src/bin/initdb/initdb.c276
-rw-r--r--src/bin/initdb/nls.mk4
-rw-r--r--src/bin/initdb/po/de.po331
-rw-r--r--src/bin/initdb/po/es.po459
-rw-r--r--src/bin/initdb/po/fr.po485
-rw-r--r--src/bin/initdb/po/it.po457
-rw-r--r--src/bin/initdb/po/ja.po2
-rw-r--r--src/bin/initdb/po/pl.po468
-rw-r--r--src/bin/initdb/po/pt_BR.po453
-rw-r--r--src/bin/initdb/po/ru.po457
-rw-r--r--src/bin/initdb/po/sv.po1031
-rw-r--r--src/bin/initdb/po/zh_CN.po501
-rw-r--r--src/bin/initdb/t/001_initdb.pl20
-rw-r--r--src/bin/pg_archivecleanup/.gitignore (renamed from contrib/pg_archivecleanup/.gitignore)0
-rw-r--r--src/bin/pg_archivecleanup/Makefile27
-rw-r--r--src/bin/pg_archivecleanup/pg_archivecleanup.c (renamed from contrib/pg_archivecleanup/pg_archivecleanup.c)9
-rw-r--r--src/bin/pg_basebackup/Makefile4
-rw-r--r--src/bin/pg_basebackup/nls.mk2
-rw-r--r--src/bin/pg_basebackup/pg_basebackup.c125
-rw-r--r--src/bin/pg_basebackup/pg_receivexlog.c221
-rw-r--r--src/bin/pg_basebackup/pg_recvlogical.c167
-rw-r--r--src/bin/pg_basebackup/po/cs.po914
-rw-r--r--src/bin/pg_basebackup/po/de.po685
-rw-r--r--src/bin/pg_basebackup/po/es.po678
-rw-r--r--src/bin/pg_basebackup/po/fr.po905
-rw-r--r--src/bin/pg_basebackup/po/it.po660
-rw-r--r--src/bin/pg_basebackup/po/ja.po837
-rw-r--r--src/bin/pg_basebackup/po/pl.po738
-rw-r--r--src/bin/pg_basebackup/po/pt_BR.po661
-rw-r--r--src/bin/pg_basebackup/po/ru.po768
-rw-r--r--src/bin/pg_basebackup/po/zh_CN.po785
-rw-r--r--src/bin/pg_basebackup/receivelog.c806
-rw-r--r--src/bin/pg_basebackup/receivelog.h20
-rw-r--r--src/bin/pg_basebackup/streamutil.c201
-rw-r--r--src/bin/pg_basebackup/streamutil.h27
-rw-r--r--src/bin/pg_basebackup/t/010_pg_basebackup.pl30
-rw-r--r--src/bin/pg_basebackup/t/020_pg_receivexlog.pl2
-rw-r--r--src/bin/pg_config/Makefile2
-rw-r--r--src/bin/pg_config/pg_config.c2
-rw-r--r--src/bin/pg_config/po/es.po35
-rw-r--r--src/bin/pg_config/po/pt_BR.po18
-rw-r--r--src/bin/pg_config/po/ru.po42
-rw-r--r--src/bin/pg_config/po/sv.po97
-rw-r--r--src/bin/pg_config/t/001_pg_config.pl2
-rw-r--r--src/bin/pg_controldata/Makefile2
-rw-r--r--src/bin/pg_controldata/nls.mk2
-rw-r--r--src/bin/pg_controldata/pg_controldata.c60
-rw-r--r--src/bin/pg_controldata/po/de.po23
-rw-r--r--src/bin/pg_controldata/po/es.po141
-rw-r--r--src/bin/pg_controldata/po/fr.po144
-rw-r--r--src/bin/pg_controldata/po/it.po139
-rw-r--r--src/bin/pg_controldata/po/pl.po147
-rw-r--r--src/bin/pg_controldata/po/pt_BR.po139
-rw-r--r--src/bin/pg_controldata/po/ru.po156
-rw-r--r--src/bin/pg_controldata/po/sv.po431
-rw-r--r--src/bin/pg_controldata/po/zh_CN.po176
-rw-r--r--src/bin/pg_controldata/t/001_pg_controldata.pl4
-rw-r--r--src/bin/pg_ctl/Makefile2
-rw-r--r--src/bin/pg_ctl/nls.mk4
-rw-r--r--src/bin/pg_ctl/pg_ctl.c77
-rw-r--r--src/bin/pg_ctl/po/de.po331
-rw-r--r--src/bin/pg_ctl/po/es.po341
-rw-r--r--src/bin/pg_ctl/po/fr.po343
-rw-r--r--src/bin/pg_ctl/po/it.po345
-rw-r--r--src/bin/pg_ctl/po/ja.po2
-rw-r--r--src/bin/pg_ctl/po/pl.po355
-rw-r--r--src/bin/pg_ctl/po/pt_BR.po329
-rw-r--r--src/bin/pg_ctl/po/ru.po340
-rw-r--r--src/bin/pg_ctl/po/sv.po587
-rw-r--r--src/bin/pg_ctl/po/zh_CN.po406
-rw-r--r--src/bin/pg_ctl/po/zh_TW.po770
-rw-r--r--src/bin/pg_ctl/t/001_start_stop.pl12
-rw-r--r--src/bin/pg_ctl/t/002_status.pl10
-rw-r--r--src/bin/pg_dump/Makefile2
-rw-r--r--src/bin/pg_dump/common.c35
-rw-r--r--src/bin/pg_dump/compress_io.c43
-rw-r--r--src/bin/pg_dump/compress_io.h3
-rw-r--r--src/bin/pg_dump/dumputils.c12
-rw-r--r--src/bin/pg_dump/dumputils.h40
-rw-r--r--src/bin/pg_dump/keywords.c2
-rw-r--r--src/bin/pg_dump/nls.mk3
-rw-r--r--src/bin/pg_dump/parallel.c66
-rw-r--r--src/bin/pg_dump/parallel.h32
-rw-r--r--src/bin/pg_dump/pg_backup.h117
-rw-r--r--src/bin/pg_dump/pg_backup_archiver.c287
-rw-r--r--src/bin/pg_dump/pg_backup_archiver.h89
-rw-r--r--src/bin/pg_dump/pg_backup_custom.c9
-rw-r--r--src/bin/pg_dump/pg_backup_db.c39
-rw-r--r--src/bin/pg_dump/pg_backup_db.h11
-rw-r--r--src/bin/pg_dump/pg_backup_directory.c19
-rw-r--r--src/bin/pg_dump/pg_backup_null.c14
-rw-r--r--src/bin/pg_dump/pg_backup_tar.c13
-rw-r--r--src/bin/pg_dump/pg_backup_utils.c4
-rw-r--r--src/bin/pg_dump/pg_backup_utils.h14
-rw-r--r--src/bin/pg_dump/pg_dump.c1662
-rw-r--r--src/bin/pg_dump/pg_dump.h106
-rw-r--r--src/bin/pg_dump/pg_dump_sort.c98
-rw-r--r--src/bin/pg_dump/pg_dumpall.c126
-rw-r--r--src/bin/pg_dump/pg_restore.c30
-rw-r--r--src/bin/pg_dump/po/de.po927
-rw-r--r--src/bin/pg_dump/po/es.po927
-rw-r--r--src/bin/pg_dump/po/fr.po1583
-rw-r--r--src/bin/pg_dump/po/it.po949
-rw-r--r--src/bin/pg_dump/po/ja.po4
-rw-r--r--src/bin/pg_dump/po/pl.po437
-rw-r--r--src/bin/pg_dump/po/pt_BR.po923
-rw-r--r--src/bin/pg_dump/po/ru.po959
-rw-r--r--src/bin/pg_dump/po/zh_CN.po1487
-rw-r--r--src/bin/pg_resetxlog/Makefile2
-rw-r--r--src/bin/pg_resetxlog/nls.mk2
-rw-r--r--src/bin/pg_resetxlog/pg_resetxlog.c152
-rw-r--r--src/bin/pg_resetxlog/po/de.po270
-rw-r--r--src/bin/pg_resetxlog/po/es.po303
-rw-r--r--src/bin/pg_resetxlog/po/fr.po279
-rw-r--r--src/bin/pg_resetxlog/po/it.po270
-rw-r--r--src/bin/pg_resetxlog/po/pl.po291
-rw-r--r--src/bin/pg_resetxlog/po/pt_BR.po264
-rw-r--r--src/bin/pg_resetxlog/po/ru.po267
-rw-r--r--src/bin/pg_resetxlog/po/sv.po550
-rw-r--r--src/bin/pg_resetxlog/po/zh_CN.po330
-rw-r--r--src/bin/pg_rewind/.gitignore7
-rw-r--r--src/bin/pg_rewind/Makefile51
-rw-r--r--src/bin/pg_rewind/RewindTest.pm287
-rw-r--r--src/bin/pg_rewind/copy_fetch.c264
-rw-r--r--src/bin/pg_rewind/datapagemap.c126
-rw-r--r--src/bin/pg_rewind/datapagemap.h32
-rw-r--r--src/bin/pg_rewind/fetch.c61
-rw-r--r--src/bin/pg_rewind/fetch.h46
-rw-r--r--src/bin/pg_rewind/file_ops.c305
-rw-r--r--src/bin/pg_rewind/file_ops.h24
-rw-r--r--src/bin/pg_rewind/filemap.c673
-rw-r--r--src/bin/pg_rewind/filemap.h105
-rw-r--r--src/bin/pg_rewind/libpq_fetch.c469
-rw-r--r--src/bin/pg_rewind/logging.c144
-rw-r--r--src/bin/pg_rewind/logging.h35
-rw-r--r--src/bin/pg_rewind/nls.mk9
-rw-r--r--src/bin/pg_rewind/parsexlog.c378
-rw-r--r--src/bin/pg_rewind/pg_rewind.c567
-rw-r--r--src/bin/pg_rewind/pg_rewind.h44
-rw-r--r--src/bin/pg_rewind/t/001_basic.pl88
-rw-r--r--src/bin/pg_rewind/t/002_databases.pl50
-rw-r--r--src/bin/pg_rewind/t/003_extrafiles.pl73
-rw-r--r--src/bin/pg_rewind/timeline.c131
-rw-r--r--src/bin/pg_upgrade/.gitignore8
-rw-r--r--src/bin/pg_upgrade/IMPLEMENTATION (renamed from contrib/pg_upgrade/IMPLEMENTATION)2
-rw-r--r--src/bin/pg_upgrade/Makefile42
-rw-r--r--src/bin/pg_upgrade/TESTING (renamed from contrib/pg_upgrade/TESTING)2
-rw-r--r--src/bin/pg_upgrade/check.c (renamed from contrib/pg_upgrade/check.c)431
-rw-r--r--src/bin/pg_upgrade/controldata.c (renamed from contrib/pg_upgrade/controldata.c)166
-rw-r--r--src/bin/pg_upgrade/dump.c139
-rw-r--r--src/bin/pg_upgrade/exec.c (renamed from contrib/pg_upgrade/exec.c)5
-rw-r--r--src/bin/pg_upgrade/file.c (renamed from contrib/pg_upgrade/file.c)4
-rw-r--r--src/bin/pg_upgrade/function.c (renamed from contrib/pg_upgrade/function.c)119
-rw-r--r--src/bin/pg_upgrade/info.c (renamed from contrib/pg_upgrade/info.c)217
-rw-r--r--src/bin/pg_upgrade/option.c (renamed from contrib/pg_upgrade/option.c)52
-rw-r--r--src/bin/pg_upgrade/page.c (renamed from contrib/pg_upgrade/page.c)4
-rw-r--r--src/bin/pg_upgrade/parallel.c (renamed from contrib/pg_upgrade/parallel.c)4
-rw-r--r--src/bin/pg_upgrade/pg_upgrade.c (renamed from contrib/pg_upgrade/pg_upgrade.c)166
-rw-r--r--src/bin/pg_upgrade/pg_upgrade.h (renamed from contrib/pg_upgrade/pg_upgrade.h)79
-rw-r--r--src/bin/pg_upgrade/relfilenode.c (renamed from contrib/pg_upgrade/relfilenode.c)10
-rw-r--r--src/bin/pg_upgrade/server.c (renamed from contrib/pg_upgrade/server.c)26
-rw-r--r--src/bin/pg_upgrade/tablespace.c (renamed from contrib/pg_upgrade/tablespace.c)4
-rw-r--r--src/bin/pg_upgrade/test.sh (renamed from contrib/pg_upgrade/test.sh)65
-rw-r--r--src/bin/pg_upgrade/util.c (renamed from contrib/pg_upgrade/util.c)13
-rw-r--r--src/bin/pg_upgrade/version.c (renamed from contrib/pg_upgrade/version.c)4
-rw-r--r--src/bin/pgbench/.gitignore3
-rw-r--r--src/bin/pgbench/Makefile42
-rw-r--r--src/bin/pgbench/exprparse.y98
-rw-r--r--src/bin/pgbench/exprscan.l129
-rw-r--r--src/bin/pgbench/pgbench.c (renamed from contrib/pgbench/pgbench.c)1082
-rw-r--r--src/bin/pgbench/pgbench.h60
-rw-r--r--src/bin/pgevent/Makefile2
-rw-r--r--src/bin/pgevent/pgevent.c4
-rw-r--r--src/bin/psql/Makefile2
-rw-r--r--src/bin/psql/command.c635
-rw-r--r--src/bin/psql/command.h2
-rw-r--r--src/bin/psql/common.c198
-rw-r--r--src/bin/psql/common.h14
-rw-r--r--src/bin/psql/copy.c21
-rw-r--r--src/bin/psql/copy.h2
-rw-r--r--src/bin/psql/create_help.pl2
-rw-r--r--src/bin/psql/describe.c310
-rw-r--r--src/bin/psql/describe.h2
-rw-r--r--src/bin/psql/help.c234
-rw-r--r--src/bin/psql/help.h6
-rw-r--r--src/bin/psql/input.c182
-rw-r--r--src/bin/psql/input.h5
-rw-r--r--src/bin/psql/large_obj.c18
-rw-r--r--src/bin/psql/large_obj.h2
-rw-r--r--src/bin/psql/mainloop.c45
-rw-r--r--src/bin/psql/mainloop.h2
-rw-r--r--src/bin/psql/mbprint.c2
-rw-r--r--src/bin/psql/nls.mk3
-rw-r--r--src/bin/psql/po/de.po2587
-rw-r--r--src/bin/psql/po/es.po2600
-rw-r--r--src/bin/psql/po/fr.po2607
-rw-r--r--src/bin/psql/po/it.po2577
-rw-r--r--src/bin/psql/po/ja.po16
-rw-r--r--src/bin/psql/po/pl.po2674
-rw-r--r--src/bin/psql/po/pt_BR.po2577
-rw-r--r--src/bin/psql/po/ru.po2653
-rw-r--r--src/bin/psql/po/zh_CN.po2774
-rw-r--r--src/bin/psql/print.c645
-rw-r--r--src/bin/psql/print.h17
-rw-r--r--src/bin/psql/prompt.c7
-rw-r--r--src/bin/psql/prompt.h2
-rw-r--r--src/bin/psql/psqlscan.h2
-rw-r--r--src/bin/psql/psqlscan.l30
-rw-r--r--src/bin/psql/settings.h18
-rw-r--r--src/bin/psql/startup.c124
-rw-r--r--src/bin/psql/stringutils.c2
-rw-r--r--src/bin/psql/stringutils.h2
-rw-r--r--src/bin/psql/tab-complete.c666
-rw-r--r--src/bin/psql/tab-complete.h2
-rw-r--r--src/bin/psql/variables.c17
-rw-r--r--src/bin/psql/variables.h4
-rw-r--r--src/bin/scripts/Makefile2
-rw-r--r--src/bin/scripts/clusterdb.c2
-rw-r--r--src/bin/scripts/common.c25
-rw-r--r--src/bin/scripts/common.h8
-rw-r--r--src/bin/scripts/createdb.c2
-rw-r--r--src/bin/scripts/createlang.c2
-rw-r--r--src/bin/scripts/createuser.c2
-rw-r--r--src/bin/scripts/dropdb.c2
-rw-r--r--src/bin/scripts/droplang.c2
-rw-r--r--src/bin/scripts/dropuser.c2
-rw-r--r--src/bin/scripts/nls.mk4
-rw-r--r--src/bin/scripts/pg_isready.c12
-rw-r--r--src/bin/scripts/po/de.po327
-rw-r--r--src/bin/scripts/po/es.po333
-rw-r--r--src/bin/scripts/po/fr.po661
-rw-r--r--src/bin/scripts/po/it.po327
-rw-r--r--src/bin/scripts/po/pl.po327
-rw-r--r--src/bin/scripts/po/pt_BR.po325
-rw-r--r--src/bin/scripts/po/ru.po333
-rw-r--r--src/bin/scripts/po/sv.po1063
-rw-r--r--src/bin/scripts/po/zh_CN.po423
-rw-r--r--src/bin/scripts/reindexdb.c40
-rw-r--r--src/bin/scripts/t/010_clusterdb.pl4
-rw-r--r--src/bin/scripts/t/011_clusterdb_all.pl2
-rw-r--r--src/bin/scripts/t/020_createdb.pl4
-rw-r--r--src/bin/scripts/t/030_createlang.pl2
-rw-r--r--src/bin/scripts/t/040_createuser.pl2
-rw-r--r--src/bin/scripts/t/050_dropdb.pl2
-rw-r--r--src/bin/scripts/t/060_droplang.pl2
-rw-r--r--src/bin/scripts/t/070_dropuser.pl2
-rw-r--r--src/bin/scripts/t/080_pg_isready.pl2
-rw-r--r--src/bin/scripts/t/090_reindexdb.pl13
-rw-r--r--src/bin/scripts/t/091_reindexdb_all.pl2
-rw-r--r--src/bin/scripts/t/100_vacuumdb.pl4
-rw-r--r--src/bin/scripts/t/101_vacuumdb_all.pl2
-rw-r--r--src/bin/scripts/t/102_vacuumdb_stages.pl19
-rw-r--r--src/bin/scripts/vacuumdb.c803
-rw-r--r--src/common/Makefile7
-rw-r--r--src/common/exec.c14
-rw-r--r--src/common/fe_memutils.c45
-rw-r--r--src/common/pg_lzcompress.c (renamed from src/backend/utils/adt/pg_lzcompress.c)99
-rw-r--r--src/common/pgfnames.c2
-rw-r--r--src/common/psprintf.c2
-rw-r--r--src/common/relpath.c4
-rw-r--r--src/common/restricted_token.c193
-rw-r--r--src/common/rmtree.c2
-rw-r--r--src/common/string.c43
-rw-r--r--src/common/username.c16
-rw-r--r--src/common/wait_error.c2
-rw-r--r--src/include/Makefile2
-rw-r--r--src/include/access/attnum.h2
-rw-r--r--src/include/access/brin.h52
-rw-r--r--src/include/access/brin_internal.h94
-rw-r--r--src/include/access/brin_page.h95
-rw-r--r--src/include/access/brin_pageops.h36
-rw-r--r--src/include/access/brin_revmap.h39
-rw-r--r--src/include/access/brin_tuple.h96
-rw-r--r--src/include/access/brin_xlog.h132
-rw-r--r--src/include/access/clog.h10
-rw-r--r--src/include/access/commit_ts.h74
-rw-r--r--src/include/access/genam.h4
-rw-r--r--src/include/access/gin.h13
-rw-r--r--src/include/access/gin_private.h130
-rw-r--r--src/include/access/gist.h7
-rw-r--r--src/include/access/gist_private.h78
-rw-r--r--src/include/access/gistscan.h2
-rw-r--r--src/include/access/hash.h13
-rw-r--r--src/include/access/heapam.h10
-rw-r--r--src/include/access/heapam_xlog.h168
-rw-r--r--src/include/access/hio.h2
-rw-r--r--src/include/access/htup.h2
-rw-r--r--src/include/access/htup_details.h13
-rw-r--r--src/include/access/itup.h3
-rw-r--r--src/include/access/multixact.h18
-rw-r--r--src/include/access/nbtree.h140
-rw-r--r--src/include/access/printtup.h2
-rw-r--r--src/include/access/reloptions.h6
-rw-r--r--src/include/access/relscan.h8
-rw-r--r--src/include/access/rewriteheap.h2
-rw-r--r--src/include/access/rmgr.h2
-rw-r--r--src/include/access/rmgrlist.h42
-rw-r--r--src/include/access/sdir.h2
-rw-r--r--src/include/access/skey.h2
-rw-r--r--src/include/access/slru.h2
-rw-r--r--src/include/access/spgist.h10
-rw-r--r--src/include/access/spgist_private.h157
-rw-r--r--src/include/access/subtrans.h2
-rw-r--r--src/include/access/sysattr.h2
-rw-r--r--src/include/access/timeline.h2
-rw-r--r--src/include/access/transam.h8
-rw-r--r--src/include/access/tupconvert.h2
-rw-r--r--src/include/access/tupdesc.h2
-rw-r--r--src/include/access/tupmacs.h2
-rw-r--r--src/include/access/tuptoaster.h10
-rw-r--r--src/include/access/twophase.h2
-rw-r--r--src/include/access/twophase_rmgr.h2
-rw-r--r--src/include/access/valid.h2
-rw-r--r--src/include/access/visibilitymap.h2
-rw-r--r--src/include/access/xact.h232
-rw-r--r--src/include/access/xlog.h135
-rw-r--r--src/include/access/xlog_fn.h2
-rw-r--r--src/include/access/xlog_internal.h65
-rw-r--r--src/include/access/xlogdefs.h2
-rw-r--r--src/include/access/xloginsert.h60
-rw-r--r--src/include/access/xlogreader.h81
-rw-r--r--src/include/access/xlogrecord.h216
-rw-r--r--src/include/access/xlogutils.h24
-rw-r--r--src/include/bootstrap/bootstrap.h14
-rw-r--r--src/include/c.h130
-rw-r--r--src/include/catalog/binary_upgrade.h7
-rw-r--r--src/include/catalog/catalog.h2
-rw-r--r--src/include/catalog/catversion.h4
-rw-r--r--src/include/catalog/dependency.h3
-rw-r--r--src/include/catalog/genbki.h22
-rw-r--r--src/include/catalog/heap.h11
-rw-r--r--src/include/catalog/index.h27
-rw-r--r--src/include/catalog/indexing.h24
-rw-r--r--src/include/catalog/namespace.h8
-rw-r--r--src/include/catalog/objectaccess.h4
-rw-r--r--src/include/catalog/objectaddress.h18
-rw-r--r--src/include/catalog/pg_aggregate.h40
-rw-r--r--src/include/catalog/pg_am.h6
-rw-r--r--src/include/catalog/pg_amop.h234
-rw-r--r--src/include/catalog/pg_amproc.h384
-rw-r--r--src/include/catalog/pg_attrdef.h2
-rw-r--r--src/include/catalog/pg_attribute.h12
-rw-r--r--src/include/catalog/pg_auth_members.h2
-rw-r--r--src/include/catalog/pg_authid.h14
-rw-r--r--src/include/catalog/pg_cast.h6
-rw-r--r--src/include/catalog/pg_class.h26
-rw-r--r--src/include/catalog/pg_collation.h2
-rw-r--r--src/include/catalog/pg_collation_fn.h2
-rw-r--r--src/include/catalog/pg_constraint.h2
-rw-r--r--src/include/catalog/pg_control.h12
-rw-r--r--src/include/catalog/pg_conversion.h2
-rw-r--r--src/include/catalog/pg_conversion_fn.h7
-rw-r--r--src/include/catalog/pg_database.h2
-rw-r--r--src/include/catalog/pg_db_role_setting.h2
-rw-r--r--src/include/catalog/pg_default_acl.h2
-rw-r--r--src/include/catalog/pg_depend.h2
-rw-r--r--src/include/catalog/pg_description.h4
-rw-r--r--src/include/catalog/pg_enum.h2
-rw-r--r--src/include/catalog/pg_event_trigger.h2
-rw-r--r--src/include/catalog/pg_extension.h6
-rw-r--r--src/include/catalog/pg_foreign_data_wrapper.h2
-rw-r--r--src/include/catalog/pg_foreign_server.h2
-rw-r--r--src/include/catalog/pg_foreign_table.h2
-rw-r--r--src/include/catalog/pg_index.h2
-rw-r--r--src/include/catalog/pg_inherits.h2
-rw-r--r--src/include/catalog/pg_inherits_fn.h2
-rw-r--r--src/include/catalog/pg_language.h2
-rw-r--r--src/include/catalog/pg_largeobject.h4
-rw-r--r--src/include/catalog/pg_largeobject_metadata.h2
-rw-r--r--src/include/catalog/pg_namespace.h2
-rw-r--r--src/include/catalog/pg_opclass.h34
-rw-r--r--src/include/catalog/pg_operator.h39
-rw-r--r--src/include/catalog/pg_opfamily.h25
-rw-r--r--src/include/catalog/pg_pltemplate.h6
-rw-r--r--src/include/catalog/pg_policy.h53
-rw-r--r--src/include/catalog/pg_proc.h256
-rw-r--r--src/include/catalog/pg_proc_fn.h5
-rw-r--r--src/include/catalog/pg_range.h2
-rw-r--r--src/include/catalog/pg_rewrite.h2
-rw-r--r--src/include/catalog/pg_seclabel.h6
-rw-r--r--src/include/catalog/pg_shdepend.h2
-rw-r--r--src/include/catalog/pg_shdescription.h4
-rw-r--r--src/include/catalog/pg_shseclabel.h6
-rw-r--r--src/include/catalog/pg_statistic.h2
-rw-r--r--src/include/catalog/pg_tablespace.h2
-rw-r--r--src/include/catalog/pg_trigger.h4
-rw-r--r--src/include/catalog/pg_ts_config.h2
-rw-r--r--src/include/catalog/pg_ts_config_map.h2
-rw-r--r--src/include/catalog/pg_ts_dict.h2
-rw-r--r--src/include/catalog/pg_ts_parser.h2
-rw-r--r--src/include/catalog/pg_ts_template.h2
-rw-r--r--src/include/catalog/pg_type.h2
-rw-r--r--src/include/catalog/pg_type_fn.h7
-rw-r--r--src/include/catalog/pg_user_mapping.h2
-rw-r--r--src/include/catalog/storage.h2
-rw-r--r--src/include/catalog/storage_xlog.h10
-rw-r--r--src/include/catalog/toasting.h5
-rw-r--r--src/include/commands/alter.h10
-rw-r--r--src/include/commands/async.h14
-rw-r--r--src/include/commands/cluster.h7
-rw-r--r--src/include/commands/collationcmds.h5
-rw-r--r--src/include/commands/comment.h5
-rw-r--r--src/include/commands/conversioncmds.h5
-rw-r--r--src/include/commands/copy.h2
-rw-r--r--src/include/commands/createas.h5
-rw-r--r--src/include/commands/dbcommands.h48
-rw-r--r--src/include/commands/dbcommands_xlog.h44
-rw-r--r--src/include/commands/defrem.h52
-rw-r--r--src/include/commands/discard.h2
-rw-r--r--src/include/commands/event_trigger.h14
-rw-r--r--src/include/commands/explain.h10
-rw-r--r--src/include/commands/extension.h15
-rw-r--r--src/include/commands/lockcmds.h2
-rw-r--r--src/include/commands/matview.h5
-rw-r--r--src/include/commands/policy.h35
-rw-r--r--src/include/commands/portalcmds.h2
-rw-r--r--src/include/commands/prepare.h2
-rw-r--r--src/include/commands/proclang.h3
-rw-r--r--src/include/commands/schemacmds.h7
-rw-r--r--src/include/commands/seclabel.h4
-rw-r--r--src/include/commands/sequence.h15
-rw-r--r--src/include/commands/tablecmds.h19
-rw-r--r--src/include/commands/tablespace.h16
-rw-r--r--src/include/commands/trigger.h7
-rw-r--r--src/include/commands/typecmds.h34
-rw-r--r--src/include/commands/user.h5
-rw-r--r--src/include/commands/vacuum.h36
-rw-r--r--src/include/commands/variable.h2
-rw-r--r--src/include/commands/view.h5
-rw-r--r--src/include/common/fe_memutils.h26
-rw-r--r--src/include/common/pg_lzcompress.h (renamed from src/include/utils/pg_lzcompress.h)31
-rw-r--r--src/include/common/relpath.h2
-rw-r--r--src/include/common/restricted_token.h24
-rw-r--r--src/include/common/string.h15
-rw-r--r--src/include/common/username.h2
-rw-r--r--src/include/datatype/timestamp.h6
-rw-r--r--src/include/executor/execdebug.h2
-rw-r--r--src/include/executor/execdesc.h2
-rw-r--r--src/include/executor/executor.h13
-rw-r--r--src/include/executor/functions.h2
-rw-r--r--src/include/executor/hashjoin.h29
-rw-r--r--src/include/executor/instrument.h4
-rw-r--r--src/include/executor/nodeAgg.h2
-rw-r--r--src/include/executor/nodeAppend.h2
-rw-r--r--src/include/executor/nodeBitmapAnd.h2
-rw-r--r--src/include/executor/nodeBitmapHeapscan.h2
-rw-r--r--src/include/executor/nodeBitmapIndexscan.h2
-rw-r--r--src/include/executor/nodeBitmapOr.h2
-rw-r--r--src/include/executor/nodeCtescan.h2
-rw-r--r--src/include/executor/nodeCustom.h29
-rw-r--r--src/include/executor/nodeForeignscan.h2
-rw-r--r--src/include/executor/nodeFunctionscan.h2
-rw-r--r--src/include/executor/nodeGroup.h2
-rw-r--r--src/include/executor/nodeHash.h2
-rw-r--r--src/include/executor/nodeHashjoin.h2
-rw-r--r--src/include/executor/nodeIndexonlyscan.h2
-rw-r--r--src/include/executor/nodeIndexscan.h2
-rw-r--r--src/include/executor/nodeLimit.h2
-rw-r--r--src/include/executor/nodeLockRows.h2
-rw-r--r--src/include/executor/nodeMaterial.h2
-rw-r--r--src/include/executor/nodeMergeAppend.h2
-rw-r--r--src/include/executor/nodeMergejoin.h2
-rw-r--r--src/include/executor/nodeModifyTable.h2
-rw-r--r--src/include/executor/nodeNestloop.h2
-rw-r--r--src/include/executor/nodeRecursiveunion.h2
-rw-r--r--src/include/executor/nodeResult.h2
-rw-r--r--src/include/executor/nodeSeqscan.h4
-rw-r--r--src/include/executor/nodeSetOp.h2
-rw-r--r--src/include/executor/nodeSort.h2
-rw-r--r--src/include/executor/nodeSubplan.h2
-rw-r--r--src/include/executor/nodeSubqueryscan.h2
-rw-r--r--src/include/executor/nodeTidscan.h4
-rw-r--r--src/include/executor/nodeUnique.h2
-rw-r--r--src/include/executor/nodeValuesscan.h4
-rw-r--r--src/include/executor/nodeWindowAgg.h2
-rw-r--r--src/include/executor/nodeWorktablescan.h2
-rw-r--r--src/include/executor/spi.h2
-rw-r--r--src/include/executor/spi_priv.h2
-rw-r--r--src/include/executor/tstoreReceiver.h2
-rw-r--r--src/include/executor/tuptable.h2
-rw-r--r--src/include/fmgr.h11
-rw-r--r--src/include/foreign/fdwapi.h10
-rw-r--r--src/include/foreign/foreign.h2
-rw-r--r--src/include/funcapi.h2
-rw-r--r--src/include/getaddrinfo.h2
-rw-r--r--src/include/getopt_long.h3
-rw-r--r--src/include/lib/binaryheap.h2
-rw-r--r--src/include/lib/hyperloglog.h67
-rw-r--r--src/include/lib/ilist.h2
-rw-r--r--src/include/lib/pairingheap.h102
-rw-r--r--src/include/lib/rbtree.h (renamed from src/include/utils/rbtree.h)4
-rw-r--r--src/include/lib/stringinfo.h11
-rw-r--r--src/include/libpq/auth.h2
-rw-r--r--src/include/libpq/be-fsstubs.h4
-rw-r--r--src/include/libpq/crypt.h2
-rw-r--r--src/include/libpq/ip.h7
-rw-r--r--src/include/libpq/libpq-be.h35
-rw-r--r--src/include/libpq/libpq-fs.h2
-rw-r--r--src/include/libpq/libpq.h62
-rw-r--r--src/include/libpq/md5.h2
-rw-r--r--src/include/libpq/pqcomm.h2
-rw-r--r--src/include/libpq/pqformat.h2
-rw-r--r--src/include/libpq/pqmq.h23
-rw-r--r--src/include/libpq/pqsignal.h2
-rw-r--r--src/include/mb/pg_wchar.h6
-rw-r--r--src/include/miscadmin.h31
-rw-r--r--src/include/nodes/bitmapset.h8
-rw-r--r--src/include/nodes/execnodes.h70
-rw-r--r--src/include/nodes/lockoptions.h46
-rw-r--r--src/include/nodes/makefuncs.h2
-rw-r--r--src/include/nodes/memnodes.h7
-rw-r--r--src/include/nodes/nodeFuncs.h2
-rw-r--r--src/include/nodes/nodes.h12
-rw-r--r--src/include/nodes/params.h4
-rw-r--r--src/include/nodes/parsenodes.h203
-rw-r--r--src/include/nodes/pg_list.h3
-rw-r--r--src/include/nodes/plannodes.h52
-rw-r--r--src/include/nodes/primnodes.h52
-rw-r--r--src/include/nodes/print.h2
-rw-r--r--src/include/nodes/readfuncs.h2
-rw-r--r--src/include/nodes/relation.h78
-rw-r--r--src/include/nodes/replnodes.h2
-rw-r--r--src/include/nodes/tidbitmap.h6
-rw-r--r--src/include/nodes/value.h2
-rw-r--r--src/include/optimizer/clauses.h2
-rw-r--r--src/include/optimizer/cost.h2
-rw-r--r--src/include/optimizer/geqo.h2
-rw-r--r--src/include/optimizer/geqo_copy.h2
-rw-r--r--src/include/optimizer/geqo_gene.h2
-rw-r--r--src/include/optimizer/geqo_misc.h2
-rw-r--r--src/include/optimizer/geqo_mutation.h2
-rw-r--r--src/include/optimizer/geqo_pool.h2
-rw-r--r--src/include/optimizer/geqo_random.h2
-rw-r--r--src/include/optimizer/geqo_recombination.h2
-rw-r--r--src/include/optimizer/geqo_selection.h2
-rw-r--r--src/include/optimizer/joininfo.h2
-rw-r--r--src/include/optimizer/orclauses.h2
-rw-r--r--src/include/optimizer/pathnode.h4
-rw-r--r--src/include/optimizer/paths.h9
-rw-r--r--src/include/optimizer/placeholder.h2
-rw-r--r--src/include/optimizer/plancat.h2
-rw-r--r--src/include/optimizer/planmain.h8
-rw-r--r--src/include/optimizer/planner.h5
-rw-r--r--src/include/optimizer/predtest.h2
-rw-r--r--src/include/optimizer/prep.h7
-rw-r--r--src/include/optimizer/restrictinfo.h2
-rw-r--r--src/include/optimizer/subselect.h2
-rw-r--r--src/include/optimizer/tlist.h4
-rw-r--r--src/include/optimizer/var.h2
-rw-r--r--src/include/parser/analyze.h7
-rw-r--r--src/include/parser/gramparse.h4
-rw-r--r--src/include/parser/keywords.h2
-rw-r--r--src/include/parser/kwlist.h9
-rw-r--r--src/include/parser/parse_agg.h2
-rw-r--r--src/include/parser/parse_clause.h2
-rw-r--r--src/include/parser/parse_coerce.h2
-rw-r--r--src/include/parser/parse_collate.h2
-rw-r--r--src/include/parser/parse_cte.h2
-rw-r--r--src/include/parser/parse_expr.h3
-rw-r--r--src/include/parser/parse_func.h14
-rw-r--r--src/include/parser/parse_node.h3
-rw-r--r--src/include/parser/parse_oper.h2
-rw-r--r--src/include/parser/parse_param.h2
-rw-r--r--src/include/parser/parse_relation.h27
-rw-r--r--src/include/parser/parse_target.h2
-rw-r--r--src/include/parser/parse_type.h3
-rw-r--r--src/include/parser/parse_utilcmd.h2
-rw-r--r--src/include/parser/parser.h2
-rw-r--r--src/include/parser/parsetree.h2
-rw-r--r--src/include/parser/scanner.h17
-rw-r--r--src/include/parser/scansup.h2
-rw-r--r--src/include/pg_config.h.in79
-rw-r--r--src/include/pg_config.h.win3268
-rw-r--r--src/include/pg_config_manual.h68
-rw-r--r--src/include/pg_getopt.h2
-rw-r--r--src/include/pg_trace.h2
-rw-r--r--src/include/pgstat.h77
-rw-r--r--src/include/pgtar.h12
-rw-r--r--src/include/pgtime.h15
-rw-r--r--src/include/port.h40
-rw-r--r--src/include/port/atomics.h531
-rw-r--r--src/include/port/atomics/arch-arm.h25
-rw-r--r--src/include/port/atomics/arch-hppa.h17
-rw-r--r--src/include/port/atomics/arch-ia64.h26
-rw-r--r--src/include/port/atomics/arch-ppc.h26
-rw-r--r--src/include/port/atomics/arch-x86.h255
-rw-r--r--src/include/port/atomics/fallback.h148
-rw-r--r--src/include/port/atomics/generic-acc.h114
-rw-r--r--src/include/port/atomics/generic-gcc.h236
-rw-r--r--src/include/port/atomics/generic-msvc.h111
-rw-r--r--src/include/port/atomics/generic-sunpro.h110
-rw-r--r--src/include/port/atomics/generic-xlc.h109
-rw-r--r--src/include/port/atomics/generic.h387
-rw-r--r--src/include/port/osf.h4
-rw-r--r--src/include/port/pg_crc32c.h93
-rw-r--r--src/include/port/win32.h1
-rw-r--r--src/include/portability/instr_time.h2
-rw-r--r--src/include/portability/mem.h10
-rw-r--r--src/include/postgres.h58
-rw-r--r--src/include/postgres_fe.h2
-rw-r--r--src/include/postmaster/autovacuum.h6
-rw-r--r--src/include/postmaster/bgworker.h5
-rw-r--r--src/include/postmaster/bgworker_internals.h4
-rw-r--r--src/include/postmaster/bgwriter.h6
-rw-r--r--src/include/postmaster/fork_process.h2
-rw-r--r--src/include/postmaster/pgarch.h4
-rw-r--r--src/include/postmaster/postmaster.h6
-rw-r--r--src/include/postmaster/startup.h4
-rw-r--r--src/include/postmaster/syslogger.h6
-rw-r--r--src/include/postmaster/walwriter.h4
-rw-r--r--src/include/regex/regexport.h2
-rw-r--r--src/include/replication/basebackup.h2
-rw-r--r--src/include/replication/decode.h5
-rw-r--r--src/include/replication/logical.h2
-rw-r--r--src/include/replication/logicalfuncs.h2
-rw-r--r--src/include/replication/output_plugin.h2
-rw-r--r--src/include/replication/reorderbuffer.h14
-rw-r--r--src/include/replication/slot.h8
-rw-r--r--src/include/replication/snapbuild.h2
-rw-r--r--src/include/replication/syncrep.h7
-rw-r--r--src/include/replication/walreceiver.h4
-rw-r--r--src/include/replication/walsender.h3
-rw-r--r--src/include/replication/walsender_private.h12
-rw-r--r--src/include/rewrite/prs2lock.h2
-rw-r--r--src/include/rewrite/rewriteDefine.h9
-rw-r--r--src/include/rewrite/rewriteHandler.h2
-rw-r--r--src/include/rewrite/rewriteManip.h2
-rw-r--r--src/include/rewrite/rewriteRemove.h2
-rw-r--r--src/include/rewrite/rewriteSupport.h2
-rw-r--r--src/include/rewrite/rowsecurity.h45
-rw-r--r--src/include/rusagestub.h2
-rw-r--r--src/include/snowball/header.h2
-rw-r--r--src/include/storage/backendid.h2
-rw-r--r--src/include/storage/barrier.h166
-rw-r--r--src/include/storage/block.h2
-rw-r--r--src/include/storage/buf.h2
-rw-r--r--src/include/storage/buf_internals.h44
-rw-r--r--src/include/storage/buffile.h2
-rw-r--r--src/include/storage/bufmgr.h27
-rw-r--r--src/include/storage/bufpage.h6
-rw-r--r--src/include/storage/checksum.h2
-rw-r--r--src/include/storage/checksum_impl.h2
-rw-r--r--src/include/storage/copydir.h2
-rw-r--r--src/include/storage/dsm.h11
-rw-r--r--src/include/storage/dsm_impl.h4
-rw-r--r--src/include/storage/fd.h2
-rw-r--r--src/include/storage/freespace.h2
-rw-r--r--src/include/storage/fsm_internals.h4
-rw-r--r--src/include/storage/indexfsm.h2
-rw-r--r--src/include/storage/ipc.h4
-rw-r--r--src/include/storage/item.h2
-rw-r--r--src/include/storage/itemid.h2
-rw-r--r--src/include/storage/itemptr.h4
-rw-r--r--src/include/storage/large_object.h2
-rw-r--r--src/include/storage/latch.h11
-rw-r--r--src/include/storage/lmgr.h2
-rw-r--r--src/include/storage/lock.h6
-rw-r--r--src/include/storage/lwlock.h48
-rw-r--r--src/include/storage/off.h2
-rw-r--r--src/include/storage/pg_sema.h4
-rw-r--r--src/include/storage/pg_shmem.h2
-rw-r--r--src/include/storage/pmsignal.h2
-rw-r--r--src/include/storage/pos.h2
-rw-r--r--src/include/storage/predicate.h2
-rw-r--r--src/include/storage/predicate_internals.h4
-rw-r--r--src/include/storage/proc.h9
-rw-r--r--src/include/storage/procarray.h2
-rw-r--r--src/include/storage/procsignal.h2
-rw-r--r--src/include/storage/reinit.h4
-rw-r--r--src/include/storage/relfilenode.h2
-rw-r--r--src/include/storage/s_lock.h278
-rw-r--r--src/include/storage/shm_mq.h16
-rw-r--r--src/include/storage/shm_toc.h2
-rw-r--r--src/include/storage/shmem.h2
-rw-r--r--src/include/storage/sinval.h9
-rw-r--r--src/include/storage/sinvaladt.h2
-rw-r--r--src/include/storage/smgr.h2
-rw-r--r--src/include/storage/spin.h2
-rw-r--r--src/include/storage/standby.h14
-rw-r--r--src/include/tcop/dest.h2
-rw-r--r--src/include/tcop/fastpath.h3
-rw-r--r--src/include/tcop/pquery.h2
-rw-r--r--src/include/tcop/tcopdebug.h2
-rw-r--r--src/include/tcop/tcopprot.h13
-rw-r--r--src/include/tcop/utility.h2
-rw-r--r--src/include/tsearch/dicts/regis.h4
-rw-r--r--src/include/tsearch/dicts/spell.h8
-rw-r--r--src/include/tsearch/ts_cache.h2
-rw-r--r--src/include/tsearch/ts_locale.h2
-rw-r--r--src/include/tsearch/ts_public.h2
-rw-r--r--src/include/tsearch/ts_type.h16
-rw-r--r--src/include/tsearch/ts_utils.h2
-rw-r--r--src/include/utils/acl.h10
-rw-r--r--src/include/utils/array.h90
-rw-r--r--src/include/utils/ascii.h2
-rw-r--r--src/include/utils/attoptcache.h2
-rw-r--r--src/include/utils/builtins.h48
-rw-r--r--src/include/utils/bytea.h2
-rw-r--r--src/include/utils/catcache.h6
-rw-r--r--src/include/utils/combocid.h2
-rw-r--r--src/include/utils/date.h8
-rw-r--r--src/include/utils/datetime.h61
-rw-r--r--src/include/utils/datum.h2
-rw-r--r--src/include/utils/dynahash.h2
-rw-r--r--src/include/utils/dynamic_loader.h2
-rw-r--r--src/include/utils/elog.h125
-rw-r--r--src/include/utils/evtcache.h5
-rw-r--r--src/include/utils/fmgrtab.h2
-rw-r--r--src/include/utils/formatting.h2
-rw-r--r--src/include/utils/geo_decls.h12
-rw-r--r--src/include/utils/guc.h68
-rw-r--r--src/include/utils/guc_tables.h2
-rw-r--r--src/include/utils/help_config.h4
-rw-r--r--src/include/utils/hsearch.h39
-rw-r--r--src/include/utils/inet.h3
-rw-r--r--src/include/utils/int8.h2
-rw-r--r--src/include/utils/inval.h6
-rw-r--r--src/include/utils/json.h4
-rw-r--r--src/include/utils/jsonapi.h9
-rw-r--r--src/include/utils/jsonb.h147
-rw-r--r--src/include/utils/logtape.h2
-rw-r--r--src/include/utils/lsyscache.h6
-rw-r--r--src/include/utils/memdebug.h2
-rw-r--r--src/include/utils/memutils.h9
-rw-r--r--src/include/utils/nabstime.h2
-rw-r--r--src/include/utils/numeric.h2
-rw-r--r--src/include/utils/palloc.h40
-rw-r--r--src/include/utils/pg_crc.h173
-rw-r--r--src/include/utils/pg_crc_tables.h516
-rw-r--r--src/include/utils/pg_locale.h2
-rw-r--r--src/include/utils/pg_lsn.h2
-rw-r--r--src/include/utils/pg_rusage.h2
-rw-r--r--src/include/utils/plancache.h8
-rw-r--r--src/include/utils/portal.h2
-rw-r--r--src/include/utils/rangetypes.h3
-rw-r--r--src/include/utils/rel.h57
-rw-r--r--src/include/utils/relcache.h4
-rw-r--r--src/include/utils/relfilenodemap.h2
-rw-r--r--src/include/utils/relmapper.h12
-rw-r--r--src/include/utils/reltrigger.h2
-rw-r--r--src/include/utils/resowner.h2
-rw-r--r--src/include/utils/resowner_private.h2
-rw-r--r--src/include/utils/rls.h58
-rw-r--r--src/include/utils/ruleutils.h35
-rw-r--r--src/include/utils/selfuncs.h3
-rw-r--r--src/include/utils/snapmgr.h2
-rw-r--r--src/include/utils/snapshot.h10
-rw-r--r--src/include/utils/sortsupport.h141
-rw-r--r--src/include/utils/spccache.h2
-rw-r--r--src/include/utils/syscache.h2
-rw-r--r--src/include/utils/timeout.h2
-rw-r--r--src/include/utils/timestamp.h4
-rw-r--r--src/include/utils/tqual.h2
-rw-r--r--src/include/utils/tuplesort.h6
-rw-r--r--src/include/utils/tuplestore.h2
-rw-r--r--src/include/utils/typcache.h39
-rw-r--r--src/include/utils/tzparser.h12
-rw-r--r--src/include/utils/uuid.h2
-rw-r--r--src/include/utils/varbit.h5
-rw-r--r--src/include/utils/xml.h2
-rw-r--r--src/include/windowapi.h2
-rw-r--r--src/interfaces/ecpg/compatlib/Makefile7
-rw-r--r--src/interfaces/ecpg/ecpglib/Makefile12
-rw-r--r--src/interfaces/ecpg/ecpglib/data.c71
-rw-r--r--src/interfaces/ecpg/ecpglib/descriptor.c6
-rw-r--r--src/interfaces/ecpg/ecpglib/execute.c280
-rw-r--r--src/interfaces/ecpg/ecpglib/extern.h8
-rw-r--r--src/interfaces/ecpg/ecpglib/memory.c22
-rw-r--r--src/interfaces/ecpg/ecpglib/misc.c2
-rw-r--r--src/interfaces/ecpg/ecpglib/pg_type.h2
-rw-r--r--src/interfaces/ecpg/ecpglib/po/es.po92
-rw-r--r--src/interfaces/ecpg/ecpglib/po/pt_BR.po92
-rw-r--r--src/interfaces/ecpg/ecpglib/prepare.c2
-rw-r--r--src/interfaces/ecpg/include/ecpglib.h4
-rw-r--r--src/interfaces/ecpg/pgtypeslib/Makefile7
-rw-r--r--src/interfaces/ecpg/pgtypeslib/datetime.c10
-rw-r--r--src/interfaces/ecpg/pgtypeslib/dt.h34
-rw-r--r--src/interfaces/ecpg/pgtypeslib/dt_common.c511
-rw-r--r--src/interfaces/ecpg/pgtypeslib/timestamp.c2
-rw-r--r--src/interfaces/ecpg/preproc/Makefile4
-rw-r--r--src/interfaces/ecpg/preproc/check_rules.pl2
-rw-r--r--src/interfaces/ecpg/preproc/ecpg.c2
-rw-r--r--src/interfaces/ecpg/preproc/ecpg.header8
-rw-r--r--src/interfaces/ecpg/preproc/ecpg_keywords.c4
-rw-r--r--src/interfaces/ecpg/preproc/extern.h8
-rw-r--r--src/interfaces/ecpg/preproc/keywords.c3
-rw-r--r--src/interfaces/ecpg/preproc/parse.pl16
-rw-r--r--src/interfaces/ecpg/preproc/parser.c135
-rw-r--r--src/interfaces/ecpg/preproc/pgc.l20
-rw-r--r--src/interfaces/ecpg/preproc/po/de.po206
-rw-r--r--src/interfaces/ecpg/preproc/po/es.po181
-rw-r--r--src/interfaces/ecpg/preproc/po/fr.po321
-rw-r--r--src/interfaces/ecpg/preproc/po/it.po181
-rw-r--r--src/interfaces/ecpg/preproc/po/pl.po205
-rw-r--r--src/interfaces/ecpg/preproc/po/pt_BR.po181
-rw-r--r--src/interfaces/ecpg/preproc/po/ru.po211
-rw-r--r--src/interfaces/ecpg/preproc/po/zh_CN.po209
-rw-r--r--src/interfaces/ecpg/test/Makefile7
-rw-r--r--src/interfaces/ecpg/test/Makefile.regress2
-rw-r--r--src/interfaces/ecpg/test/connect/test5.pgc18
-rw-r--r--src/interfaces/ecpg/test/expected/connect-test5.c82
-rw-r--r--src/interfaces/ecpg/test/expected/connect-test5.stderr18
-rw-r--r--src/interfaces/ecpg/test/expected/sql-array.c180
-rw-r--r--src/interfaces/ecpg/test/expected/sql-array.stderr124
-rw-r--r--src/interfaces/ecpg/test/expected/sql-array.stdout20
-rw-r--r--src/interfaces/ecpg/test/expected/sql-oldexec.c109
-rw-r--r--src/interfaces/ecpg/test/expected/sql-oldexec.stderr144
-rw-r--r--src/interfaces/ecpg/test/pg_regress_ecpg.c5
-rw-r--r--src/interfaces/ecpg/test/sql/array.pgc50
-rw-r--r--src/interfaces/ecpg/test/sql/oldexec.pgc5
-rw-r--r--src/interfaces/libpq/Makefile19
-rw-r--r--src/interfaces/libpq/exports.txt5
-rw-r--r--src/interfaces/libpq/fe-auth.c56
-rw-r--r--src/interfaces/libpq/fe-auth.h4
-rw-r--r--src/interfaces/libpq/fe-connect.c304
-rw-r--r--src/interfaces/libpq/fe-exec.c33
-rw-r--r--src/interfaces/libpq/fe-lobj.c12
-rw-r--r--src/interfaces/libpq/fe-misc.c77
-rw-r--r--src/interfaces/libpq/fe-print.c2
-rw-r--r--src/interfaces/libpq/fe-protocol2.c3
-rw-r--r--src/interfaces/libpq/fe-protocol3.c2
-rw-r--r--src/interfaces/libpq/fe-secure-openssl.c1677
-rw-r--r--src/interfaces/libpq/fe-secure.c1475
-rw-r--r--src/interfaces/libpq/libpq-events.c2
-rw-r--r--src/interfaces/libpq/libpq-events.h2
-rw-r--r--src/interfaces/libpq/libpq-fe.h9
-rw-r--r--src/interfaces/libpq/libpq-int.h53
-rw-r--r--src/interfaces/libpq/libpq.rc.in10
-rw-r--r--src/interfaces/libpq/po/de.po347
-rw-r--r--src/interfaces/libpq/po/es.po325
-rw-r--r--src/interfaces/libpq/po/it.po277
-rw-r--r--src/interfaces/libpq/po/ja.po4
-rw-r--r--src/interfaces/libpq/po/pt_BR.po279
-rw-r--r--src/interfaces/libpq/po/ru.po355
-rw-r--r--src/interfaces/libpq/po/zh_CN.po346
-rw-r--r--src/interfaces/libpq/pqexpbuffer.c6
-rw-r--r--src/interfaces/libpq/pqexpbuffer.h12
-rw-r--r--src/interfaces/libpq/pthread-win32.c2
-rw-r--r--src/interfaces/libpq/test/expected.out14
-rw-r--r--src/interfaces/libpq/test/uri-regress.c2
-rw-r--r--src/interfaces/libpq/win32.c9
-rw-r--r--src/interfaces/libpq/win32.mak14
-rw-r--r--src/makefiles/Makefile.cygwin4
-rw-r--r--src/makefiles/Makefile.osf10
-rw-r--r--src/makefiles/Makefile.win328
-rw-r--r--src/makefiles/pgxs.mk57
-rw-r--r--src/pl/plperl/GNUmakefile3
-rw-r--r--src/pl/plperl/expected/plperl_array.out3
-rw-r--r--src/pl/plperl/nls.mk2
-rw-r--r--src/pl/plperl/plperl.c40
-rw-r--r--src/pl/plperl/plperl.h6
-rw-r--r--src/pl/plperl/po/es.po79
-rw-r--r--src/pl/plperl/po/pt_BR.po162
-rw-r--r--src/pl/plperl/po/sv.po190
-rw-r--r--src/pl/plpgsql/src/Makefile5
-rw-r--r--src/pl/plpgsql/src/generate-plerrcodes.pl2
-rw-r--r--src/pl/plpgsql/src/pl_comp.c13
-rw-r--r--src/pl/plpgsql/src/pl_exec.c763
-rw-r--r--src/pl/plpgsql/src/pl_funcs.c40
-rw-r--r--src/pl/plpgsql/src/pl_gram.y162
-rw-r--r--src/pl/plpgsql/src/pl_handler.c18
-rw-r--r--src/pl/plpgsql/src/pl_scanner.c148
-rw-r--r--src/pl/plpgsql/src/plpgsql.h30
-rw-r--r--src/pl/plpgsql/src/po/de.po345
-rw-r--r--src/pl/plpgsql/src/po/es.po342
-rw-r--r--src/pl/plpgsql/src/po/fr.po345
-rw-r--r--src/pl/plpgsql/src/po/it.po341
-rw-r--r--src/pl/plpgsql/src/po/pl.po355
-rw-r--r--src/pl/plpgsql/src/po/pt_BR.po347
-rw-r--r--src/pl/plpgsql/src/po/ru.po345
-rw-r--r--src/pl/plpgsql/src/po/zh_CN.po478
-rw-r--r--src/pl/plpython/Makefile9
-rw-r--r--src/pl/plpython/expected/plpython_composite.out12
-rw-r--r--src/pl/plpython/expected/plpython_spi.out15
-rw-r--r--src/pl/plpython/expected/plpython_types.out21
-rw-r--r--src/pl/plpython/expected/plpython_types_3.out21
-rw-r--r--src/pl/plpython/generate-spiexceptions.pl2
-rw-r--r--src/pl/plpython/nls.mk2
-rw-r--r--src/pl/plpython/plpy_elog.h15
-rw-r--r--src/pl/plpython/plpy_exec.c4
-rw-r--r--src/pl/plpython/plpy_main.c2
-rw-r--r--src/pl/plpython/plpy_plpymodule.c23
-rw-r--r--src/pl/plpython/plpy_procedure.c3
-rw-r--r--src/pl/plpython/plpy_spi.c9
-rw-r--r--src/pl/plpython/plpy_typeio.c47
-rw-r--r--src/pl/plpython/plpython.h2
-rw-r--r--src/pl/plpython/po/de.po148
-rw-r--r--src/pl/plpython/po/es.po87
-rw-r--r--src/pl/plpython/po/fr.po292
-rw-r--r--src/pl/plpython/po/it.po98
-rw-r--r--src/pl/plpython/po/pl.po157
-rw-r--r--src/pl/plpython/po/pt_BR.po96
-rw-r--r--src/pl/plpython/po/ro.po336
-rw-r--r--src/pl/plpython/po/ru.po152
-rw-r--r--src/pl/plpython/po/zh_CN.po211
-rw-r--r--src/pl/plpython/sql/plpython_composite.sql2
-rw-r--r--src/pl/plpython/sql/plpython_spi.sql12
-rw-r--r--src/pl/plpython/sql/plpython_types.sql3
-rw-r--r--src/pl/tcl/Makefile3
-rw-r--r--src/pl/tcl/pltcl.c21
-rw-r--r--src/pl/tcl/po/es.po20
-rw-r--r--src/pl/tcl/po/pt_BR.po20
-rw-r--r--src/port/Makefile10
-rw-r--r--src/port/chklocale.c2
-rw-r--r--src/port/crypt.c2
-rw-r--r--src/port/dirent.c2
-rw-r--r--src/port/dirmod.c14
-rw-r--r--src/port/fls.c2
-rw-r--r--src/port/fseeko.c2
-rw-r--r--src/port/getaddrinfo.c2
-rw-r--r--src/port/gethostname.c33
-rw-r--r--src/port/getopt_long.c16
-rw-r--r--src/port/getpeereid.c2
-rw-r--r--src/port/getrusage.c2
-rw-r--r--src/port/gettimeofday.c76
-rw-r--r--src/port/isinf.c2
-rw-r--r--src/port/kill.c31
-rw-r--r--src/port/mkdtemp.c293
-rw-r--r--src/port/noblock.c2
-rw-r--r--src/port/open.c2
-rw-r--r--src/port/path.c13
-rw-r--r--src/port/pg_crc.c21
-rw-r--r--src/port/pg_crc32c_choose.c63
-rw-r--r--src/port/pg_crc32c_sb8.c1169
-rw-r--r--src/port/pg_crc32c_sse42.c67
-rw-r--r--src/port/pgcheckdir.c25
-rw-r--r--src/port/pgsleep.c2
-rw-r--r--src/port/pgstrcasecmp.c2
-rw-r--r--src/port/pqsignal.c2
-rw-r--r--src/port/quotes.c2
-rw-r--r--src/port/random.c2
-rw-r--r--src/port/rint.c81
-rw-r--r--src/port/snprintf.c72
-rw-r--r--src/port/sprompt.c2
-rw-r--r--src/port/srandom.c2
-rw-r--r--src/port/strlcpy.c2
-rw-r--r--src/port/system.c2
-rw-r--r--src/port/tar.c14
-rw-r--r--src/port/thread.c29
-rw-r--r--src/port/unsetenv.c2
-rw-r--r--src/port/win32env.c2
-rw-r--r--src/port/win32error.c2
-rw-r--r--src/port/win32setlocale.c164
-rw-r--r--src/port/win32ver.rc6
-rw-r--r--src/template/cygwin2
-rw-r--r--src/template/hpux3
-rw-r--r--src/template/osf6
-rw-r--r--src/template/win322
-rw-r--r--src/test/Makefile18
-rw-r--r--src/test/examples/testlo.c2
-rw-r--r--src/test/examples/testlo64.c2
-rw-r--r--src/test/isolation/Makefile7
-rw-r--r--src/test/isolation/expected/alter-table-1.out1374
-rw-r--r--src/test/isolation/expected/alter-table-2.out1389
-rw-r--r--src/test/isolation/expected/alter-table-3.out947
-rw-r--r--src/test/isolation/expected/create-trigger.out421
-rw-r--r--src/test/isolation/expected/eval-plan-qual.out55
-rw-r--r--src/test/isolation/expected/nowait-2.out43
-rw-r--r--src/test/isolation/expected/nowait-3.out17
-rw-r--r--src/test/isolation/expected/nowait-4.out19
-rw-r--r--src/test/isolation/expected/nowait-4_1.out19
-rw-r--r--src/test/isolation/expected/nowait-5.out37
-rw-r--r--src/test/isolation/expected/nowait.out65
-rw-r--r--src/test/isolation/expected/skip-locked-2.out49
-rw-r--r--src/test/isolation/expected/skip-locked-3.out19
-rw-r--r--src/test/isolation/expected/skip-locked-4.out21
-rw-r--r--src/test/isolation/expected/skip-locked-4_1.out19
-rw-r--r--src/test/isolation/expected/skip-locked.out401
-rw-r--r--src/test/isolation/expected/tuplelock-conflict.out469
-rw-r--r--src/test/isolation/isolation_main.c2
-rw-r--r--src/test/isolation/isolation_schedule13
-rw-r--r--src/test/isolation/isolationtester.h2
-rw-r--r--src/test/isolation/specparse.y2
-rw-r--r--src/test/isolation/specs/alter-table-2.spec30
-rw-r--r--src/test/isolation/specs/alter-table-3.spec30
-rw-r--r--src/test/isolation/specs/create-trigger.spec28
-rw-r--r--src/test/isolation/specs/eval-plan-qual.spec25
-rw-r--r--src/test/isolation/specs/nowait-2.spec37
-rw-r--r--src/test/isolation/specs/nowait-3.spec33
-rw-r--r--src/test/isolation/specs/nowait-4.spec35
-rw-r--r--src/test/isolation/specs/nowait-5.spec57
-rw-r--r--src/test/isolation/specs/nowait.spec25
-rw-r--r--src/test/isolation/specs/skip-locked-2.spec41
-rw-r--r--src/test/isolation/specs/skip-locked-3.spec36
-rw-r--r--src/test/isolation/specs/skip-locked-4.spec36
-rw-r--r--src/test/isolation/specs/skip-locked.spec28
-rw-r--r--src/test/isolation/specs/tuplelock-conflict.spec63
-rw-r--r--src/test/isolation/specscanner.l2
-rw-r--r--src/test/modules/Makefile19
-rw-r--r--src/test/modules/commit_ts/.gitignore (renamed from contrib/test_parser/.gitignore)0
-rw-r--r--src/test/modules/commit_ts/Makefile15
-rw-r--r--src/test/modules/commit_ts/commit_ts.conf1
-rw-r--r--src/test/modules/commit_ts/expected/commit_timestamp.out39
-rw-r--r--src/test/modules/commit_ts/expected/commit_timestamp_1.out34
-rw-r--r--src/test/modules/commit_ts/sql/commit_timestamp.sql24
-rw-r--r--src/test/modules/dummy_seclabel/.gitignore (renamed from contrib/test_shm_mq/.gitignore)0
-rw-r--r--src/test/modules/dummy_seclabel/Makefile20
-rw-r--r--src/test/modules/dummy_seclabel/README43
-rw-r--r--src/test/modules/dummy_seclabel/dummy_seclabel--1.0.sql8
-rw-r--r--src/test/modules/dummy_seclabel/dummy_seclabel.c (renamed from contrib/dummy_seclabel/dummy_seclabel.c)14
-rw-r--r--src/test/modules/dummy_seclabel/dummy_seclabel.control4
-rw-r--r--src/test/modules/dummy_seclabel/expected/dummy_seclabel.out105
-rw-r--r--src/test/modules/dummy_seclabel/sql/dummy_seclabel.sql102
-rw-r--r--src/test/modules/test_parser/.gitignore4
-rw-r--r--src/test/modules/test_parser/Makefile (renamed from contrib/test_parser/Makefile)9
-rw-r--r--src/test/modules/test_parser/README61
-rw-r--r--src/test/modules/test_parser/expected/test_parser.out (renamed from contrib/test_parser/expected/test_parser.out)0
-rw-r--r--src/test/modules/test_parser/sql/test_parser.sql (renamed from contrib/test_parser/sql/test_parser.sql)0
-rw-r--r--src/test/modules/test_parser/test_parser--1.0.sql (renamed from contrib/test_parser/test_parser--1.0.sql)2
-rw-r--r--src/test/modules/test_parser/test_parser--unpackaged--1.0.sql (renamed from contrib/test_parser/test_parser--unpackaged--1.0.sql)4
-rw-r--r--src/test/modules/test_parser/test_parser.c (renamed from contrib/test_parser/test_parser.c)5
-rw-r--r--src/test/modules/test_parser/test_parser.control (renamed from contrib/test_parser/test_parser.control)0
-rw-r--r--src/test/modules/test_shm_mq/.gitignore4
-rw-r--r--src/test/modules/test_shm_mq/Makefile (renamed from contrib/test_shm_mq/Makefile)9
-rw-r--r--src/test/modules/test_shm_mq/README49
-rw-r--r--src/test/modules/test_shm_mq/expected/test_shm_mq.out (renamed from contrib/test_shm_mq/expected/test_shm_mq.out)0
-rw-r--r--src/test/modules/test_shm_mq/setup.c (renamed from contrib/test_shm_mq/setup.c)10
-rw-r--r--src/test/modules/test_shm_mq/sql/test_shm_mq.sql (renamed from contrib/test_shm_mq/sql/test_shm_mq.sql)0
-rw-r--r--src/test/modules/test_shm_mq/test.c (renamed from contrib/test_shm_mq/test.c)12
-rw-r--r--src/test/modules/test_shm_mq/test_shm_mq--1.0.sql (renamed from contrib/test_shm_mq/test_shm_mq--1.0.sql)2
-rw-r--r--src/test/modules/test_shm_mq/test_shm_mq.control (renamed from contrib/test_shm_mq/test_shm_mq.control)0
-rw-r--r--src/test/modules/test_shm_mq/test_shm_mq.h (renamed from contrib/test_shm_mq/test_shm_mq.h)4
-rw-r--r--src/test/modules/test_shm_mq/worker.c (renamed from contrib/test_shm_mq/worker.c)13
-rw-r--r--src/test/modules/worker_spi/Makefile (renamed from contrib/worker_spi/Makefile)7
-rw-r--r--src/test/modules/worker_spi/worker_spi--1.0.sql (renamed from contrib/worker_spi/worker_spi--1.0.sql)2
-rw-r--r--src/test/modules/worker_spi/worker_spi.c (renamed from contrib/worker_spi/worker_spi.c)16
-rw-r--r--src/test/modules/worker_spi/worker_spi.control (renamed from contrib/worker_spi/worker_spi.control)0
-rw-r--r--src/test/performance/results/PgSQL.97092616
-rwxr-xr-xsrc/test/performance/runtests.pl148
-rw-r--r--src/test/performance/sqls/connection1
-rw-r--r--src/test/performance/sqls/crtsimple4
-rw-r--r--src/test/performance/sqls/crtsimpleidx4
-rw-r--r--src/test/performance/sqls/drpsimple4
-rw-r--r--src/test/performance/sqls/inssimple28
-rw-r--r--src/test/performance/sqls/inssimple.data8192
-rw-r--r--src/test/performance/sqls/orbsimple1
-rw-r--r--src/test/performance/sqls/slcsimple13
-rw-r--r--src/test/performance/sqls/slcsimple.data8192
-rw-r--r--src/test/performance/sqls/vacuum4
-rwxr-xr-xsrc/test/performance/start-pgsql.sh6
-rw-r--r--src/test/perl/TestLib.pm111
-rw-r--r--src/test/regress/.gitignore4
-rw-r--r--src/test/regress/GNUmakefile25
-rw-r--r--src/test/regress/expected/aggregates.out53
-rw-r--r--src/test/regress/expected/alter_table.out146
-rw-r--r--src/test/regress/expected/arrays.out304
-rw-r--r--src/test/regress/expected/brin.out182
-rw-r--r--src/test/regress/expected/btree_index.out23
-rw-r--r--src/test/regress/expected/collate.out19
-rw-r--r--src/test/regress/expected/copy2.out34
-rw-r--r--src/test/regress/expected/create_cast.out4
-rw-r--r--src/test/regress/expected/create_index.out325
-rw-r--r--src/test/regress/expected/create_operator.out7
-rw-r--r--src/test/regress/expected/create_table.out32
-rw-r--r--src/test/regress/expected/create_type.out8
-rw-r--r--src/test/regress/expected/create_view.out52
-rw-r--r--src/test/regress/expected/dependency.out20
-rw-r--r--src/test/regress/expected/domain.out30
-rw-r--r--src/test/regress/expected/enum.out1
-rw-r--r--src/test/regress/expected/equivclass.out383
-rw-r--r--src/test/regress/expected/event_trigger.out195
-rw-r--r--src/test/regress/expected/foreign_data.out695
-rw-r--r--src/test/regress/expected/gin.out23
-rw-r--r--src/test/regress/expected/gist.out165
-rw-r--r--src/test/regress/expected/inet.out31
-rw-r--r--src/test/regress/expected/int2.out20
-rw-r--r--src/test/regress/expected/int4.out20
-rw-r--r--src/test/regress/expected/int8-exp-three-digits.out20
-rw-r--r--src/test/regress/expected/int8.out20
-rw-r--r--src/test/regress/expected/interval.out10
-rw-r--r--src/test/regress/expected/join.out301
-rw-r--r--src/test/regress/expected/json.out579
-rw-r--r--src/test/regress/expected/json_1.out583
-rw-r--r--src/test/regress/expected/jsonb.out795
-rw-r--r--src/test/regress/expected/jsonb_1.out801
-rw-r--r--src/test/regress/expected/lock.out8
-rw-r--r--src/test/regress/expected/macaddr.out35
-rw-r--r--src/test/regress/expected/matview.out20
-rw-r--r--src/test/regress/expected/numeric.out109
-rw-r--r--src/test/regress/expected/object_address.out426
-rw-r--r--src/test/regress/expected/opr_sanity.out153
-rw-r--r--src/test/regress/expected/plpgsql.out94
-rw-r--r--src/test/regress/expected/polygon.out89
-rw-r--r--src/test/regress/expected/polymorphism.out67
-rw-r--r--src/test/regress/expected/privileges.out83
-rw-r--r--src/test/regress/expected/psql.out2102
-rw-r--r--src/test/regress/expected/rangefuncs.out74
-rw-r--r--src/test/regress/expected/rangetypes.out55
-rw-r--r--src/test/regress/expected/regex.out8
-rw-r--r--src/test/regress/expected/replica_identity.out1
-rw-r--r--src/test/regress/expected/rolenames.out940
-rw-r--r--src/test/regress/expected/rowsecurity.out2183
-rw-r--r--src/test/regress/expected/rowtypes.out166
-rw-r--r--src/test/regress/expected/rules.out100
-rw-r--r--src/test/regress/expected/sanity_check.out1
-rw-r--r--src/test/regress/expected/security_label.out47
-rw-r--r--src/test/regress/expected/sequence.out125
-rw-r--r--src/test/regress/expected/sequence_1.out131
-rw-r--r--src/test/regress/expected/spgist.out39
-rw-r--r--src/test/regress/expected/stats.out74
-rw-r--r--src/test/regress/expected/subselect.out122
-rw-r--r--src/test/regress/expected/timestamptz.out682
-rw-r--r--src/test/regress/expected/type_sanity.out49
-rw-r--r--src/test/regress/expected/union.out28
-rw-r--r--src/test/regress/expected/updatable_views.out334
-rw-r--r--src/test/regress/expected/update.out81
-rw-r--r--src/test/regress/expected/uuid.out1
-rw-r--r--src/test/regress/expected/vacuum.out14
-rw-r--r--src/test/regress/expected/window.out41
-rw-r--r--src/test/regress/expected/with.out27
-rw-r--r--src/test/regress/expected/xml.out43
-rw-r--r--src/test/regress/expected/xml_1.out28
-rw-r--r--src/test/regress/input/constraints.source25
-rw-r--r--src/test/regress/input/create_function_1.source13
-rw-r--r--src/test/regress/input/largeobject.source88
-rw-r--r--src/test/regress/input/security_label.source108
-rw-r--r--src/test/regress/input/tablespace.source8
-rw-r--r--src/test/regress/output/constraints.source37
-rw-r--r--src/test/regress/output/create_function_1.source12
-rw-r--r--src/test/regress/output/largeobject.source112
-rw-r--r--src/test/regress/output/largeobject_1.source112
-rw-r--r--src/test/regress/output/misc.source9
-rw-r--r--src/test/regress/output/security_label.source123
-rw-r--r--src/test/regress/output/tablespace.source7
-rw-r--r--src/test/regress/parallel_schedule11
-rw-r--r--src/test/regress/pg_regress.c485
-rw-r--r--src/test/regress/pg_regress.h2
-rw-r--r--src/test/regress/pg_regress_main.c2
-rw-r--r--src/test/regress/regress.c300
-rw-r--r--src/test/regress/serial_schedule10
-rw-r--r--src/test/regress/sql/aggregates.sql2
-rw-r--r--src/test/regress/sql/alter_table.sql75
-rw-r--r--src/test/regress/sql/arrays.sql120
-rw-r--r--src/test/regress/sql/brin.sql186
-rw-r--r--src/test/regress/sql/btree_index.sql28
-rw-r--r--src/test/regress/sql/collate.sql9
-rw-r--r--src/test/regress/sql/copy2.sql19
-rw-r--r--src/test/regress/sql/create_cast.sql4
-rw-r--r--src/test/regress/sql/create_index.sql80
-rw-r--r--src/test/regress/sql/create_operator.sql2
-rw-r--r--src/test/regress/sql/create_table.sql11
-rw-r--r--src/test/regress/sql/create_type.sql8
-rw-r--r--src/test/regress/sql/create_view.sql34
-rw-r--r--src/test/regress/sql/domain.sql27
-rw-r--r--src/test/regress/sql/equivclass.sql224
-rw-r--r--src/test/regress/sql/event_trigger.sql176
-rw-r--r--src/test/regress/sql/foreign_data.sql168
-rw-r--r--src/test/regress/sql/gin.sql29
-rw-r--r--src/test/regress/sql/gist.sql98
-rw-r--r--src/test/regress/sql/inet.sql9
-rw-r--r--src/test/regress/sql/int2.sql10
-rw-r--r--src/test/regress/sql/int4.sql10
-rw-r--r--src/test/regress/sql/int8.sql10
-rw-r--r--src/test/regress/sql/interval.sql2
-rw-r--r--src/test/regress/sql/join.sql109
-rw-r--r--src/test/regress/sql/json.sql152
-rw-r--r--src/test/regress/sql/jsonb.sql268
-rw-r--r--src/test/regress/sql/lock.sql5
-rw-r--r--src/test/regress/sql/macaddr.sql7
-rw-r--r--src/test/regress/sql/matview.sql15
-rw-r--r--src/test/regress/sql/numeric.sql30
-rw-r--r--src/test/regress/sql/object_address.sql184
-rw-r--r--src/test/regress/sql/opr_sanity.sql54
-rw-r--r--src/test/regress/sql/plpgsql.sql80
-rw-r--r--src/test/regress/sql/polygon.sql69
-rw-r--r--src/test/regress/sql/polymorphism.sql16
-rw-r--r--src/test/regress/sql/privileges.sql25
-rw-r--r--src/test/regress/sql/psql.sql147
-rw-r--r--src/test/regress/sql/rangefuncs.sql31
-rw-r--r--src/test/regress/sql/rangetypes.sql9
-rw-r--r--src/test/regress/sql/regex.sql4
-rw-r--r--src/test/regress/sql/rolenames.sql434
-rw-r--r--src/test/regress/sql/rowsecurity.sql893
-rw-r--r--src/test/regress/sql/rowtypes.sql44
-rw-r--r--src/test/regress/sql/rules.sql18
-rw-r--r--src/test/regress/sql/security_label.sql49
-rw-r--r--src/test/regress/sql/sequence.sql76
-rw-r--r--src/test/regress/sql/spgist.sql50
-rw-r--r--src/test/regress/sql/stats.sql70
-rw-r--r--src/test/regress/sql/subselect.sql45
-rw-r--r--src/test/regress/sql/timestamptz.sql142
-rw-r--r--src/test/regress/sql/type_sanity.sql32
-rw-r--r--src/test/regress/sql/union.sql16
-rw-r--r--src/test/regress/sql/updatable_views.sql19
-rw-r--r--src/test/regress/sql/update.sql22
-rw-r--r--src/test/regress/sql/vacuum.sql9
-rw-r--r--src/test/regress/sql/window.sql20
-rw-r--r--src/test/regress/sql/with.sql5
-rw-r--r--src/test/regress/sql/xml.sql6
-rw-r--r--src/test/ssl/.gitignore3
-rw-r--r--src/test/ssl/Makefile126
-rw-r--r--src/test/ssl/README83
-rw-r--r--src/test/ssl/ServerSetup.pm111
-rw-r--r--src/test/ssl/cas.config65
-rw-r--r--src/test/ssl/client.config13
-rw-r--r--src/test/ssl/client_ca.config11
-rw-r--r--src/test/ssl/root_ca.config9
-rw-r--r--src/test/ssl/server-cn-and-alt-names.config25
-rw-r--r--src/test/ssl/server-cn-only.config14
-rw-r--r--src/test/ssl/server-multiple-alt-names.config20
-rw-r--r--src/test/ssl/server-no-names.config17
-rw-r--r--src/test/ssl/server-revoked.config16
-rw-r--r--src/test/ssl/server-single-alt-name.config18
-rw-r--r--src/test/ssl/server_ca.config11
-rw-r--r--src/test/ssl/ssl/.gitignore2
-rw-r--r--src/test/ssl/ssl/both-cas-1.crt39
-rw-r--r--src/test/ssl/ssl/both-cas-2.crt39
-rw-r--r--src/test/ssl/ssl/client-revoked.crt12
-rw-r--r--src/test/ssl/ssl/client-revoked.key15
-rw-r--r--src/test/ssl/ssl/client.crl9
-rw-r--r--src/test/ssl/ssl/client.crt12
-rw-r--r--src/test/ssl/ssl/client.key15
-rw-r--r--src/test/ssl/ssl/client_ca.crt13
-rw-r--r--src/test/ssl/ssl/client_ca.key15
-rw-r--r--src/test/ssl/ssl/root+client.crl17
-rw-r--r--src/test/ssl/ssl/root+client_ca.crt26
-rw-r--r--src/test/ssl/ssl/root+server.crl17
-rw-r--r--src/test/ssl/ssl/root+server_ca.crt26
-rw-r--r--src/test/ssl/ssl/root.crl8
-rw-r--r--src/test/ssl/ssl/root_ca.crt13
-rw-r--r--src/test/ssl/ssl/root_ca.key15
-rw-r--r--src/test/ssl/ssl/server-cn-and-alt-names.crt15
-rw-r--r--src/test/ssl/ssl/server-cn-and-alt-names.key15
-rw-r--r--src/test/ssl/ssl/server-cn-only.crt13
-rw-r--r--src/test/ssl/ssl/server-cn-only.key15
-rw-r--r--src/test/ssl/ssl/server-multiple-alt-names.crt15
-rw-r--r--src/test/ssl/ssl/server-multiple-alt-names.key15
-rw-r--r--src/test/ssl/ssl/server-no-names.crt12
-rw-r--r--src/test/ssl/ssl/server-no-names.key15
-rw-r--r--src/test/ssl/ssl/server-revoked.crt13
-rw-r--r--src/test/ssl/ssl/server-revoked.key15
-rw-r--r--src/test/ssl/ssl/server-single-alt-name.crt13
-rw-r--r--src/test/ssl/ssl/server-single-alt-name.key15
-rw-r--r--src/test/ssl/ssl/server-ss.crt13
-rw-r--r--src/test/ssl/ssl/server-ss.key15
-rw-r--r--src/test/ssl/ssl/server.crl9
-rw-r--r--src/test/ssl/ssl/server_ca.crt13
-rw-r--r--src/test/ssl/ssl/server_ca.key15
-rw-r--r--src/test/ssl/t/001_ssltests.pl223
-rw-r--r--src/test/thread/Makefile2
-rw-r--r--src/test/thread/README2
-rw-r--r--src/test/thread/thread_test.c2
-rw-r--r--src/timezone/Makefile5
-rw-r--r--src/timezone/data/africa795
-rw-r--r--src/timezone/data/antarctica182
-rw-r--r--src/timezone/data/asia1111
-rw-r--r--src/timezone/data/australasia1035
-rw-r--r--src/timezone/data/backward11
-rw-r--r--src/timezone/data/backzone601
-rw-r--r--src/timezone/data/etcetera3
-rw-r--r--src/timezone/data/europe1426
-rw-r--r--src/timezone/data/factory1
-rw-r--r--src/timezone/data/iso3166.tab12
-rw-r--r--src/timezone/data/leapseconds12
-rw-r--r--src/timezone/data/northamerica767
-rw-r--r--src/timezone/data/pacificnew1
-rw-r--r--src/timezone/data/southamerica513
-rw-r--r--src/timezone/data/systemv1
-rwxr-xr-xsrc/timezone/data/yearistype.sh4
-rw-r--r--src/timezone/data/zone.tab75
-rw-r--r--src/timezone/data/zone1970.tab371
-rw-r--r--src/timezone/known_abbrevs.txt149
-rw-r--r--src/timezone/localtime.c108
-rw-r--r--src/timezone/pgtz.c5
-rw-r--r--src/timezone/pgtz.h2
-rw-r--r--src/timezone/tznames/Africa.txt7
-rw-r--r--src/timezone/tznames/America.txt40
-rw-r--r--src/timezone/tznames/Antarctica.txt17
-rw-r--r--src/timezone/tznames/Asia.txt126
-rw-r--r--src/timezone/tznames/Atlantic.txt10
-rw-r--r--src/timezone/tznames/Australia26
-rw-r--r--src/timezone/tznames/Australia.txt62
-rw-r--r--src/timezone/tznames/Default213
-rw-r--r--src/timezone/tznames/Europe.txt19
-rw-r--r--src/timezone/tznames/Indian.txt2
-rw-r--r--src/timezone/tznames/Pacific.txt48
-rw-r--r--src/timezone/tznames/README25
-rw-r--r--src/timezone/zic.c33
-rwxr-xr-xsrc/tools/ccsym16
-rwxr-xr-xsrc/tools/check_bison_recursion.pl2
-rwxr-xr-xsrc/tools/copyright.pl12
-rw-r--r--src/tools/editors/emacs.samples8
-rwxr-xr-xsrc/tools/find_typedef37
-rw-r--r--src/tools/findoidjoins/Makefile2
-rw-r--r--src/tools/findoidjoins/findoidjoins.c2
-rwxr-xr-xsrc/tools/git_changelog2
-rw-r--r--src/tools/ifaddrs/Makefile2
-rw-r--r--src/tools/msvc/Install.pm243
-rw-r--r--src/tools/msvc/MSBuildProject.pm2
-rw-r--r--src/tools/msvc/Mkvcbuild.pm317
-rw-r--r--src/tools/msvc/Project.pm40
-rw-r--r--src/tools/msvc/Solution.pm51
-rw-r--r--src/tools/msvc/VCBuildProject.pm2
-rw-r--r--src/tools/msvc/VSObjectFactory.pm28
-rwxr-xr-xsrc/tools/msvc/clean.bat19
-rw-r--r--src/tools/msvc/config_default.pl28
-rw-r--r--src/tools/msvc/vcregress.pl104
-rw-r--r--src/tools/pgindent/typedefs.list4
-rw-r--r--src/tools/valgrind.supp33
-rwxr-xr-xsrc/tools/version_stamp.pl4
-rwxr-xr-xsrc/tools/win32tzlist.pl2
-rw-r--r--src/tutorial/complex.c1
-rw-r--r--src/tutorial/complex.source2
-rw-r--r--src/tutorial/funcs.c1
-rw-r--r--src/tutorial/funcs_new.c1
-rw-r--r--src/tutorial/syscat.source2
2499 files changed, 233708 insertions, 147062 deletions
diff --git a/.dir-locals.el b/.dir-locals.el
index bc1bc7b16e..d8827a669a 100644
--- a/.dir-locals.el
+++ b/.dir-locals.el
@@ -13,6 +13,7 @@
(perl-brace-offset . 0)
(perl-brace-imaginary-offset . 0)
(perl-label-offset . -2)
+ (indent-tabs-mode . t)
(tab-width . 4)))
(sgml-mode . ((fill-column . 78)
(indent-tabs-mode . nil))))
diff --git a/.gitattributes b/.gitattributes
index a13116aaf6..9466800e12 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -14,6 +14,7 @@ README.* conflict-marker-size=32
# Certain data files that contain special whitespace, and other special cases
*.data -whitespace
contrib/tsearch2/sql/tsearch2.sql whitespace=space-before-tab,blank-at-eof,-blank-at-eol
+contrib/pgcrypto/sql/pgp-armor.sql whitespace=-blank-at-eol
doc/bug.template whitespace=space-before-tab,-blank-at-eof,blank-at-eol
src/backend/catalog/sql_features.txt whitespace=space-before-tab,blank-at-eof,-blank-at-eol
src/backend/tsearch/hunspell_sample.affix whitespace=-blank-at-eof
@@ -33,3 +34,4 @@ src/backend/regex/re_syntax.n -whitespace
src/backend/snowball/libstemmer/*.c -whitespace
src/backend/utils/mb/Unicode/*-std.txt -whitespace
src/include/snowball/libstemmer/* -whitespace
+src/timezone/data/* -whitespace
diff --git a/.gitignore b/.gitignore
index 1b6a4837cb..d42475b167 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,6 @@
# Global excludes across all subdirectories
*.o
+*.obj
*.so
*.so.[0-9]
*.so.[0-9].[0-9]
@@ -29,6 +30,7 @@ lib*.pc
# Local excludes in root directory
/GNUmakefile
+/config.cache
/config.log
/config.status
/pgsql.sln
diff --git a/COPYRIGHT b/COPYRIGHT
index 080b638ecc..12db0c7efd 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -2,7 +2,7 @@ Postgres-XL Cluster Database Management System
Portions Copyright (c) 2012-2014, TransLattice, Inc.
Portions Copyright (c) 2010-2013, Postgres-XC Development Group
-Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group
+Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
Portions Copyright (c) 1994, The Regents of the University of California
diff --git a/config/acx_pthread.m4 b/config/acx_pthread.m4
index 6ff241eba1..581164b1e5 100644
--- a/config/acx_pthread.m4
+++ b/config/acx_pthread.m4
@@ -1,8 +1,7 @@
-dnl PGSGL: When updating, comment out port-specific part below;
-dnl see the comment below with the word "PostgreSQL".
-dnl
-dnl Available from the GNU Autoconf Macro Archive at:
+dnl This is based on an old macro from the GNU Autoconf Macro Archive at:
dnl http://www.gnu.org/software/ac-archive/htmldoc/acx_pthread.html
+dnl but it's been rather heavily hacked --- beware of blindly dropping in
+dnl upstream changes!
dnl
AC_DEFUN([ACX_PTHREAD], [
AC_REQUIRE([AC_CANONICAL_HOST])
@@ -144,8 +143,9 @@ _ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
# Check both linking and compiling, because they might tolerate different options.
if test "`(eval $ac_link 2>&1 1>&5)`" = "" && test "`(eval $ac_compile 2>&1 1>&5)`" = ""; then
- # we continue with more flags because Linux needs -lpthread
- # for libpq builds on PostgreSQL. The test above only
+ # The original macro breaks out of the loop at this point,
+ # but we continue trying flags because Linux needs -lpthread
+ # too to build libpq successfully. The test above only
# tests for building binaries, not shared libraries.
PTHREAD_LIBS=" $tryPTHREAD_LIBS $PTHREAD_LIBS"
PTHREAD_CFLAGS="$PTHREAD_CFLAGS $tryPTHREAD_CFLAGS"
@@ -160,69 +160,12 @@ _ACEOF
done
fi
-# Various other checks:
-if test "x$acx_pthread_ok" = xyes; then
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
- # Detect AIX lossage: threads are created detached by default
- # and the JOINABLE attribute has a nonstandard name (UNDETACHED).
- AC_MSG_CHECKING([for joinable pthread attribute])
- AC_TRY_LINK([#include <pthread.h>],
- [int attr=PTHREAD_CREATE_JOINABLE;],
- ok=PTHREAD_CREATE_JOINABLE, ok=unknown)
- if test x"$ok" = xunknown; then
- AC_TRY_LINK([#include <pthread.h>],
- [int attr=PTHREAD_CREATE_UNDETACHED;],
- ok=PTHREAD_CREATE_UNDETACHED, ok=unknown)
- fi
- if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then
- AC_DEFINE(PTHREAD_CREATE_JOINABLE, $ok,
- [Define to the necessary symbol if this constant
- uses a non-standard name on your system.])
- fi
- AC_MSG_RESULT(${ok})
- if test x"$ok" = xunknown; then
- AC_MSG_WARN([we do not know how to create joinable pthreads])
- fi
-
- AC_MSG_CHECKING([if more special flags are required for pthreads])
- flag=no
-# We always add these in PostgreSQL
-# case "${host_cpu}-${host_os}" in
-# *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
-# *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
-# esac
- AC_MSG_RESULT(${flag})
- if test "x$flag" != xno; then
- PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
- fi
-
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
-
-# Supporting cc_r would require a special CC in all places that
-# use libpq, and that is ugly, so we don't do it. Users can still
-# define their compiler as cc_r to do thread builds of everything.
- # More AIX lossage: must compile with cc_r
- AC_CHECK_PROG(PTHREAD_CC, cc_r, cc_r, ${CC})
-else
- PTHREAD_CC="$CC"
-fi
+# The original macro has a bunch of other tests here, which we have removed
+# because (a) Postgres doesn't need them, and (b) $acx_pthread_ok is not
+# meaningful at this point.
AC_SUBST(PTHREAD_LIBS)
AC_SUBST(PTHREAD_CFLAGS)
-AC_SUBST(PTHREAD_CC)
-
-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$acx_pthread_ok" = xyes; then
- ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
- :
-else
- acx_pthread_ok=no
- $2
-fi
+
AC_LANG_RESTORE
])dnl ACX_PTHREAD
diff --git a/config/c-compiler.m4 b/config/c-compiler.m4
index 802f5539d3..4ef0de65a8 100644
--- a/config/c-compiler.m4
+++ b/config/c-compiler.m4
@@ -51,6 +51,27 @@ fi
])# PGAC_C_INLINE
+# PGAC_C_PRINTF_ARCHETYPE
+# -----------------------
+# Set the format archetype used by gcc to check printf type functions. We
+# prefer "gnu_printf", which includes what glibc uses, such as %m for error
+# strings and %lld for 64 bit long longs. GCC 4.4 introduced it. It makes a
+# dramatic difference on Windows.
+AC_DEFUN([PGAC_PRINTF_ARCHETYPE],
+[AC_CACHE_CHECK([for printf format archetype], pgac_cv_printf_archetype,
+[ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+[extern int
+pgac_write(int ignore, const char *fmt,...)
+__attribute__((format(gnu_printf, 2, 3)));], [])],
+ [pgac_cv_printf_archetype=gnu_printf],
+ [pgac_cv_printf_archetype=printf])
+ac_c_werror_flag=$ac_save_c_werror_flag])
+AC_DEFINE_UNQUOTED([PG_PRINTF_ATTRIBUTE], [$pgac_cv_printf_archetype],
+ [Define to gnu_printf if compiler supports it, else printf.])
+])# PGAC_PRINTF_ARCHETYPE
+
# PGAC_TYPE_64BIT_INT(TYPE)
# -------------------------
@@ -104,6 +125,43 @@ undefine([Ac_cachevar])dnl
])# PGAC_TYPE_64BIT_INT
+# PGAC_TYPE_128BIT_INT
+# ---------------------
+# Check if __int128 is a working 128 bit integer type, and if so
+# define PG_INT128_TYPE to that typename. This currently only detects
+# a GCC/clang extension, but support for different environments may be
+# added in the future.
+#
+# For the moment we only test for support for 128bit math; support for
+# 128bit literals and snprintf is not required.
+AC_DEFUN([PGAC_TYPE_128BIT_INT],
+[AC_CACHE_CHECK([for __int128], [pgac_cv__128bit_int],
+[AC_LINK_IFELSE([AC_LANG_PROGRAM([
+/*
+ * These are globals to discourage the compiler from folding all the
+ * arithmetic tests down to compile-time constants. We do not have
+ * convenient support for 64bit literals at this point...
+ */
+__int128 a = 48828125;
+__int128 b = 97656255;
+],[
+__int128 c,d;
+a = (a << 12) + 1; /* 200000000001 */
+b = (b << 12) + 5; /* 400000000005 */
+/* use the most relevant arithmetic ops */
+c = a * b;
+d = (c + b) / b;
+/* return different values, to prevent optimizations */
+if (d != a+1)
+ return 0;
+return 1;
+])],
+[pgac_cv__128bit_int=yes],
+[pgac_cv__128bit_int=no])])
+if test x"$pgac_cv__128bit_int" = xyes ; then
+ AC_DEFINE(PG_INT128_TYPE, __int128, [Define to the name of a signed 128-bit integer type.])
+fi])# PGAC_TYPE_128BIT_INT
+
# PGAC_C_FUNCNAME_SUPPORT
# -----------------------
@@ -172,6 +230,23 @@ fi])# PGAC_C_TYPES_COMPATIBLE
+# PGAC_C_BUILTIN_BSWAP32
+# -------------------------
+# Check if the C compiler understands __builtin_bswap32(),
+# and define HAVE__BUILTIN_BSWAP32 if so.
+AC_DEFUN([PGAC_C_BUILTIN_BSWAP32],
+[AC_CACHE_CHECK(for __builtin_bswap32, pgac_cv__builtin_bswap32,
+[AC_TRY_COMPILE([static unsigned long int x = __builtin_bswap32(0xaabbccdd);],
+[],
+[pgac_cv__builtin_bswap32=yes],
+[pgac_cv__builtin_bswap32=no])])
+if test x"$pgac_cv__builtin_bswap32" = xyes ; then
+AC_DEFINE(HAVE__BUILTIN_BSWAP32, 1,
+ [Define to 1 if your compiler understands __builtin_bswap32.])
+fi])# PGAC_C_BUILTIN_BSWAP32
+
+
+
# PGAC_C_BUILTIN_CONSTANT_P
# -------------------------
# Check if the C compiler understands __builtin_constant_p(),
@@ -300,3 +375,132 @@ if test x"$Ac_cachevar" = x"yes"; then
fi
undefine([Ac_cachevar])dnl
])# PGAC_PROG_CC_LDFLAGS_OPT
+
+# PGAC_HAVE_GCC__SYNC_CHAR_TAS
+# -------------------------
+# Check if the C compiler understands __sync_lock_test_and_set(char),
+# and define HAVE_GCC__SYNC_CHAR_TAS
+#
+# NB: There are platforms where test_and_set is available but compare_and_swap
+# is not, so test this separately.
+# NB: Some platforms only do 32bit tas, others only do 8bit tas. Test both.
+AC_DEFUN([PGAC_HAVE_GCC__SYNC_CHAR_TAS],
+[AC_CACHE_CHECK(for builtin __sync char locking functions, pgac_cv_gcc_sync_char_tas,
+[AC_TRY_LINK([],
+ [char lock = 0;
+ __sync_lock_test_and_set(&lock, 1);
+ __sync_lock_release(&lock);],
+ [pgac_cv_gcc_sync_char_tas="yes"],
+ [pgac_cv_gcc_sync_char_tas="no"])])
+if test x"$pgac_cv_gcc_sync_char_tas" = x"yes"; then
+ AC_DEFINE(HAVE_GCC__SYNC_CHAR_TAS, 1, [Define to 1 if you have __sync_lock_test_and_set(char *) and friends.])
+fi])# PGAC_HAVE_GCC__SYNC_CHAR_TAS
+
+# PGAC_HAVE_GCC__SYNC_INT32_TAS
+# -------------------------
+# Check if the C compiler understands __sync_lock_test_and_set(),
+# and define HAVE_GCC__SYNC_INT32_TAS
+AC_DEFUN([PGAC_HAVE_GCC__SYNC_INT32_TAS],
+[AC_CACHE_CHECK(for builtin __sync int32 locking functions, pgac_cv_gcc_sync_int32_tas,
+[AC_TRY_LINK([],
+ [int lock = 0;
+ __sync_lock_test_and_set(&lock, 1);
+ __sync_lock_release(&lock);],
+ [pgac_cv_gcc_sync_int32_tas="yes"],
+ [pgac_cv_gcc_sync_int32_tas="no"])])
+if test x"$pgac_cv_gcc_sync_int32_tas" = x"yes"; then
+ AC_DEFINE(HAVE_GCC__SYNC_INT32_TAS, 1, [Define to 1 if you have __sync_lock_test_and_set(int *) and friends.])
+fi])# PGAC_HAVE_GCC__SYNC_INT32_TAS
+
+# PGAC_HAVE_GCC__SYNC_INT32_CAS
+# -------------------------
+# Check if the C compiler understands __sync_compare_and_swap() for 32bit
+# types, and define HAVE_GCC__SYNC_INT32_CAS if so.
+AC_DEFUN([PGAC_HAVE_GCC__SYNC_INT32_CAS],
+[AC_CACHE_CHECK(for builtin __sync int32 atomic operations, pgac_cv_gcc_sync_int32_cas,
+[AC_TRY_LINK([],
+ [int val = 0;
+ __sync_val_compare_and_swap(&val, 0, 37);],
+ [pgac_cv_gcc_sync_int32_cas="yes"],
+ [pgac_cv_gcc_sync_int32_cas="no"])])
+if test x"$pgac_cv_gcc_sync_int32_cas" = x"yes"; then
+ AC_DEFINE(HAVE_GCC__SYNC_INT32_CAS, 1, [Define to 1 if you have __sync_compare_and_swap(int *, int, int).])
+fi])# PGAC_HAVE_GCC__SYNC_INT32_CAS
+
+# PGAC_HAVE_GCC__SYNC_INT64_CAS
+# -------------------------
+# Check if the C compiler understands __sync_compare_and_swap() for 64bit
+# types, and define HAVE_GCC__SYNC_INT64_CAS if so.
+AC_DEFUN([PGAC_HAVE_GCC__SYNC_INT64_CAS],
+[AC_CACHE_CHECK(for builtin __sync int64 atomic operations, pgac_cv_gcc_sync_int64_cas,
+[AC_TRY_LINK([],
+ [PG_INT64_TYPE lock = 0;
+ __sync_val_compare_and_swap(&lock, 0, (PG_INT64_TYPE) 37);],
+ [pgac_cv_gcc_sync_int64_cas="yes"],
+ [pgac_cv_gcc_sync_int64_cas="no"])])
+if test x"$pgac_cv_gcc_sync_int64_cas" = x"yes"; then
+ AC_DEFINE(HAVE_GCC__SYNC_INT64_CAS, 1, [Define to 1 if you have __sync_compare_and_swap(int64 *, int64, int64).])
+fi])# PGAC_HAVE_GCC__SYNC_INT64_CAS
+
+# PGAC_HAVE_GCC__ATOMIC_INT32_CAS
+# -------------------------
+# Check if the C compiler understands __atomic_compare_exchange_n() for 32bit
+# types, and define HAVE_GCC__ATOMIC_INT32_CAS if so.
+AC_DEFUN([PGAC_HAVE_GCC__ATOMIC_INT32_CAS],
+[AC_CACHE_CHECK(for builtin __atomic int32 atomic operations, pgac_cv_gcc_atomic_int32_cas,
+[AC_TRY_LINK([],
+ [int val = 0;
+ int expect = 0;
+ __atomic_compare_exchange_n(&val, &expect, 37, 0, __ATOMIC_SEQ_CST, __ATOMIC_RELAXED);],
+ [pgac_cv_gcc_atomic_int32_cas="yes"],
+ [pgac_cv_gcc_atomic_int32_cas="no"])])
+if test x"$pgac_cv_gcc_atomic_int32_cas" = x"yes"; then
+ AC_DEFINE(HAVE_GCC__ATOMIC_INT32_CAS, 1, [Define to 1 if you have __atomic_compare_exchange_n(int *, int *, int).])
+fi])# PGAC_HAVE_GCC__ATOMIC_INT32_CAS
+
+# PGAC_HAVE_GCC__ATOMIC_INT64_CAS
+# -------------------------
+# Check if the C compiler understands __atomic_compare_exchange_n() for 64bit
+# types, and define HAVE_GCC__ATOMIC_INT64_CAS if so.
+AC_DEFUN([PGAC_HAVE_GCC__ATOMIC_INT64_CAS],
+[AC_CACHE_CHECK(for builtin __atomic int64 atomic operations, pgac_cv_gcc_atomic_int64_cas,
+[AC_TRY_LINK([],
+ [PG_INT64_TYPE val = 0;
+ PG_INT64_TYPE expect = 0;
+ __atomic_compare_exchange_n(&val, &expect, 37, 0, __ATOMIC_SEQ_CST, __ATOMIC_RELAXED);],
+ [pgac_cv_gcc_atomic_int64_cas="yes"],
+ [pgac_cv_gcc_atomic_int64_cas="no"])])
+if test x"$pgac_cv_gcc_atomic_int64_cas" = x"yes"; then
+ AC_DEFINE(HAVE_GCC__ATOMIC_INT64_CAS, 1, [Define to 1 if you have __atomic_compare_exchange_n(int64 *, int *, int64).])
+fi])# PGAC_HAVE_GCC__ATOMIC_INT64_CAS
+
+# PGAC_SSE42_CRC32_INTRINSICS
+# -----------------------
+# Check if the compiler supports the x86 CRC instructions added in SSE 4.2,
+# using the _mm_crc32_u8 and _mm_crc32_u32 intrinsic functions. (We don't
+# test the 8-byte variant, _mm_crc32_u64, but it is assumed to be present if
+# the other ones are, on x86-64 platforms)
+#
+# An optional compiler flag can be passed as argument (e.g. -msse4.2). If the
+# intrinsics are supported, sets pgac_sse42_crc32_intrinsics, and CFLAGS_SSE42.
+AC_DEFUN([PGAC_SSE42_CRC32_INTRINSICS],
+[define([Ac_cachevar], [AS_TR_SH([pgac_cv_sse42_crc32_intrinsics_$1])])dnl
+AC_CACHE_CHECK([for _mm_crc32_u8 and _mm_crc32_u32 with CFLAGS=$1], [Ac_cachevar],
+[pgac_save_CFLAGS=$CFLAGS
+CFLAGS="$pgac_save_CFLAGS $1"
+ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
+AC_TRY_LINK([#include <nmmintrin.h>],
+ [unsigned int crc = 0;
+ crc = _mm_crc32_u8(crc, 0);
+ crc = _mm_crc32_u32(crc, 0);],
+ [Ac_cachevar=yes],
+ [Ac_cachevar=no])
+ac_c_werror_flag=$ac_save_c_werror_flag
+CFLAGS="$pgac_save_CFLAGS"])
+if test x"$Ac_cachevar" = x"yes"; then
+ CFLAGS_SSE42="$1"
+ pgac_sse42_crc32_intrinsics=yes
+fi
+undefine([Ac_cachevar])dnl
+])# PGAC_SSE42_CRC32_INTRINSICS
diff --git a/config/c-library.m4 b/config/c-library.m4
index 8f45010593..933d95e8ef 100644
--- a/config/c-library.m4
+++ b/config/c-library.m4
@@ -79,30 +79,6 @@ AH_VERBATIM(GETTIMEOFDAY_1ARG_,
])# PGAC_FUNC_GETTIMEOFDAY_1ARG
-# PGAC_FUNC_GETPWUID_R_5ARG
-# ---------------------------
-# Check if getpwuid_r() takes a fifth argument (later POSIX standard, not draft version)
-# If so, define GETPWUID_R_5ARG
-AC_DEFUN([PGAC_FUNC_GETPWUID_R_5ARG],
-[AC_CACHE_CHECK(whether getpwuid_r takes a fifth argument,
-pgac_cv_func_getpwuid_r_5arg,
-[AC_TRY_COMPILE([#include <sys/types.h>
-#include <pwd.h>],
-[uid_t uid;
-struct passwd *space;
-char *buf;
-size_t bufsize;
-struct passwd **result;
-getpwuid_r(uid, space, buf, bufsize, result);],
-[pgac_cv_func_getpwuid_r_5arg=yes],
-[pgac_cv_func_getpwuid_r_5arg=no])])
-if test x"$pgac_cv_func_getpwuid_r_5arg" = xyes ; then
- AC_DEFINE(GETPWUID_R_5ARG, 1,
- [Define to 1 if getpwuid_r() takes a 5th argument.])
-fi
-])# PGAC_FUNC_GETPWUID_R_5ARG
-
-
# PGAC_FUNC_STRERROR_R_INT
# ---------------------------
# Check if strerror_r() returns an int (SUSv3) rather than a char * (GNU libc)
@@ -221,22 +197,22 @@ HAVE_POSIX_SIGNALS=$pgac_cv_func_posix_signals
AC_SUBST(HAVE_POSIX_SIGNALS)])# PGAC_FUNC_POSIX_SIGNALS
-# PGAC_FUNC_SNPRINTF_LONG_LONG_INT_FORMAT
+# PGAC_FUNC_SNPRINTF_LONG_LONG_INT_MODIFIER
# ---------------------------------------
-# Determine which format snprintf uses for long long int. We handle
-# %lld, %qd, %I64d. The result is in shell variable
-# LONG_LONG_INT_FORMAT.
+# Determine which length modifier snprintf uses for long long int. We
+# handle ll, q, and I64. The result is in shell variable
+# LONG_LONG_INT_MODIFIER.
#
# MinGW uses '%I64d', though gcc throws an warning with -Wall,
# while '%lld' doesn't generate a warning, but doesn't work.
#
-AC_DEFUN([PGAC_FUNC_SNPRINTF_LONG_LONG_INT_FORMAT],
-[AC_MSG_CHECKING([snprintf format for long long int])
-AC_CACHE_VAL(pgac_cv_snprintf_long_long_int_format,
-[for pgac_format in '%lld' '%qd' '%I64d'; do
+AC_DEFUN([PGAC_FUNC_SNPRINTF_LONG_LONG_INT_MODIFIER],
+[AC_MSG_CHECKING([snprintf length modifier for long long int])
+AC_CACHE_VAL(pgac_cv_snprintf_long_long_int_modifier,
+[for pgac_modifier in 'll' 'q' 'I64'; do
AC_TRY_RUN([#include <stdio.h>
typedef long long int ac_int64;
-#define INT64_FORMAT "$pgac_format"
+#define INT64_FORMAT "%${pgac_modifier}d"
ac_int64 a = 20000001;
ac_int64 b = 40000005;
@@ -258,19 +234,19 @@ int does_int64_snprintf_work()
main() {
exit(! does_int64_snprintf_work());
}],
-[pgac_cv_snprintf_long_long_int_format=$pgac_format; break],
+[pgac_cv_snprintf_long_long_int_modifier=$pgac_modifier; break],
[],
-[pgac_cv_snprintf_long_long_int_format=cross; break])
+[pgac_cv_snprintf_long_long_int_modifier=cross; break])
done])dnl AC_CACHE_VAL
-LONG_LONG_INT_FORMAT=''
+LONG_LONG_INT_MODIFIER=''
-case $pgac_cv_snprintf_long_long_int_format in
+case $pgac_cv_snprintf_long_long_int_modifier in
cross) AC_MSG_RESULT([cannot test (not on host machine)]);;
- ?*) AC_MSG_RESULT([$pgac_cv_snprintf_long_long_int_format])
- LONG_LONG_INT_FORMAT=$pgac_cv_snprintf_long_long_int_format;;
+ ?*) AC_MSG_RESULT([$pgac_cv_snprintf_long_long_int_modifier])
+ LONG_LONG_INT_MODIFIER=$pgac_cv_snprintf_long_long_int_modifier;;
*) AC_MSG_RESULT(none);;
-esac])# PGAC_FUNC_SNPRINTF_LONG_LONG_INT_FORMAT
+esac])# PGAC_FUNC_SNPRINTF_LONG_LONG_INT_MODIFIER
# PGAC_FUNC_SNPRINTF_ARG_CONTROL
@@ -327,7 +303,8 @@ int main()
*/
bufz[0] = '\0'; /* in case snprintf fails to emit anything */
snprintf(bufz, sizeof(bufz), "%zu", ~((size_t) 0));
- snprintf(buf64, sizeof(buf64), UINT64_FORMAT, (PG_INT64_TYPE) ~((size_t) 0));
+ snprintf(buf64, sizeof(buf64), "%" INT64_MODIFIER "u",
+ (unsigned PG_INT64_TYPE) ~((size_t) 0));
if (strcmp(bufz, buf64) != 0)
return 1;
return 0;
diff --git a/config/programs.m4 b/config/programs.m4
index 76c0158973..ed6711df16 100644
--- a/config/programs.m4
+++ b/config/programs.m4
@@ -116,6 +116,34 @@ AC_SUBST(FLEXFLAGS)
+# PGAC_LDAP_SAFE
+# --------------
+# PostgreSQL sometimes loads libldap_r and plain libldap into the same
+# process. Check for OpenLDAP versions known not to tolerate doing so; assume
+# non-OpenLDAP implementations are safe. The dblink test suite exercises the
+# hazardous interaction directly.
+
+AC_DEFUN([PGAC_LDAP_SAFE],
+[AC_CACHE_CHECK([for compatible LDAP implementation], [pgac_cv_ldap_safe],
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+[#include <ldap.h>
+#if !defined(LDAP_VENDOR_VERSION) || \
+ (defined(LDAP_API_FEATURE_X_OPENLDAP) && \
+ LDAP_VENDOR_VERSION >= 20424 && LDAP_VENDOR_VERSION <= 20431)
+choke me
+#endif], [])],
+[pgac_cv_ldap_safe=yes],
+[pgac_cv_ldap_safe=no])])
+
+if test "$pgac_cv_ldap_safe" != yes; then
+ AC_MSG_WARN([
+*** With OpenLDAP versions 2.4.24 through 2.4.31, inclusive, each backend
+*** process that loads libpq (via WAL receiver, dblink, or postgres_fdw) and
+*** also uses LDAP will crash on exit.])
+fi])
+
+
+
# PGAC_CHECK_READLINE
# -------------------
# Check for the readline library and dependent libraries, either
diff --git a/configure b/configure
index b39568a552..7b9a6ed87b 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for PostgreSQL 9.4beta1 (Postgres-XL 9.4beta1.0).
+# Generated by GNU Autoconf 2.69 for PostgreSQL 9.5devel (Postgres-XL 9.5devel).
#
# Report bugs to <bugs@postgres-xl.org>.
#
@@ -11,7 +11,7 @@
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
#
-# Copyright (c) 1996-2014, PostgreSQL Global Development Group
+# Copyright (c) 1996-2015, PostgreSQL Global Development Group
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##
@@ -582,9 +582,9 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='PostgreSQL'
PACKAGE_TARNAME='postgresql'
-PACKAGE_VERSION='9.4beta1 (Postgres-XL 9.4beta1.0)'
-PACKAGE_XC_VERSION='9.4beta1'
-PACKAGE_STRING='PostgreSQL 9.4beta1 (Postgres-XL 9.4beta1.0)'
+PACKAGE_VERSION='9.5devel (Postgres-XL 9.5devel)'
+PACKAGE_XC_VERSION='9.5devel'
+PACKAGE_STRING='PostgreSQL 9.5devel (Postgres-XL 9.5devel)'
PACKAGE_BUGREPORT='bugs@postgres-xl.org'
PACKAGE_URL=''
@@ -631,6 +631,8 @@ vpath_build
PROVE
OSX
XSLTPROC
+XMLLINT
+DBTOEPUB
COLLATEINDEX
DOCBOOKSTYLE
have_docbook
@@ -649,11 +651,12 @@ MSGMERGE
MSGFMT_FLAGS
MSGFMT
HAVE_POSIX_SIGNALS
+PG_CRC32C_OBJS
+CFLAGS_SSE42
LDAP_LIBS_BE
LDAP_LIBS_FE
PTHREAD_CFLAGS
PTHREAD_LIBS
-PTHREAD_CC
acx_pthread_config
have_win32_dbghelp
HAVE_IPV6
@@ -729,6 +732,7 @@ CPPFLAGS
LDFLAGS
CFLAGS
CC
+enable_tap_tests
enable_dtrace
DTRACEFLAGS
DTRACE
@@ -804,10 +808,12 @@ enable_nls
with_pgport
enable_rpath
enable_spinlocks
+enable_atomics
enable_debug
enable_profiling
enable_coverage
enable_dtrace
+enable_tap_tests
with_blocksize
with_segsize
with_wal_blocksize
@@ -1392,7 +1398,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures PostgreSQL 9.4beta1 (Postgres-XL 9.4beta1.0) to adapt to many kinds of systems.
+\`configure' configures PostgreSQL 9.5devel (Postgres-XL 9.5devel) to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1457,7 +1463,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of PostgreSQL 9.4beta1 (Postgres-XL 9.4beta1.0):";;
+ short | recursive ) echo "Configuration of PostgreSQL 9.5devel (Postgres-XL 9.5devel):";;
esac
cat <<\_ACEOF
@@ -1472,10 +1478,12 @@ Optional Features:
--disable-rpath do not embed shared library search path in
executables
--disable-spinlocks do not use spinlocks
+ --disable-atomics do not use atomic operations
--enable-debug build with debugging symbols (-g)
--enable-profiling build with profiling enabled
--enable-coverage build with coverage testing instrumentation
--enable-dtrace build with DTrace support
+ --enable-tap-tests enable TAP tests (requires Perl and IPC::Run)
--enable-depend turn on automatic dependency tracking
--enable-cassert enable assertion checks (for debugging)
--disable-thread-safety disable thread-safety in client libraries
@@ -1605,14 +1613,14 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-PostgreSQL configure 9.4beta1 (Postgres-XL 9.4beta1.0)
+PostgreSQL configure 9.5devel (Postgres-XL 9.5devel)
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
-Copyright (c) 1996-2014, PostgreSQL Global Development Group
+Copyright (c) 1996-2015, PostgreSQL Global Development Group
_ACEOF
exit
fi
@@ -2316,7 +2324,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by PostgreSQL $as_me 9.4beta1 (Postgres-XL 9.4beta1.0), which was
+It was created by PostgreSQL $as_me 9.5devel (Postgres-XL 9.5devel), which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2867,7 +2875,6 @@ dragonfly*) template=netbsd ;;
mingw*) template=win32 ;;
netbsd*) template=netbsd ;;
openbsd*) template=openbsd ;;
- osf*) template=osf ;;
sco*) template=sco ;;
solaris*) template=solaris ;;
sysv5*) template=unixware ;;
@@ -3159,6 +3166,33 @@ fi
#
+# Atomic operations
+#
+
+
+# Check whether --enable-atomics was given.
+if test "${enable_atomics+set}" = set; then :
+ enableval=$enable_atomics;
+ case $enableval in
+ yes)
+ :
+ ;;
+ no)
+ :
+ ;;
+ *)
+ as_fn_error $? "no argument expected for --enable-atomics option" "$LINENO" 5
+ ;;
+ esac
+
+else
+ enable_atomics=yes
+
+fi
+
+
+
+#
# --enable-debug adds -g to compiler flags
#
@@ -3449,6 +3483,34 @@ fi
#
+# TAP tests
+#
+
+
+# Check whether --enable-tap-tests was given.
+if test "${enable_tap_tests+set}" = set; then :
+ enableval=$enable_tap_tests;
+ case $enableval in
+ yes)
+ :
+ ;;
+ no)
+ :
+ ;;
+ *)
+ as_fn_error $? "no argument expected for --enable-tap-tests option" "$LINENO" 5
+ ;;
+ esac
+
+else
+ enable_tap_tests=no
+
+fi
+
+
+
+
+#
# Block size
#
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for block size" >&5
@@ -4338,6 +4400,10 @@ else
fi
fi
+# CFLAGS we determined above will be added back at the end
+user_CFLAGS=$CFLAGS
+CFLAGS=""
+
# set CFLAGS_VECTOR from the environment, if available
if test "$ac_env_CFLAGS_VECTOR_set" = set; then
CFLAGS_VECTOR=$ac_env_CFLAGS_VECTOR_value
@@ -4349,7 +4415,7 @@ fi
# but has its own. Also check other compiler-specific flags here.
if test "$GCC" = yes -a "$ICC" = no; then
- CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -Wpointer-arith"
+ CFLAGS="-Wall -Wmissing-prototypes -Wpointer-arith"
# These work in some but not all gcc versions
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wdeclaration-after-statement" >&5
$as_echo_n "checking whether $CC supports -Wdeclaration-after-statement... " >&6; }
@@ -4671,6 +4737,47 @@ if test x"$pgac_cv_prog_cc_cflags__ftree_vectorize" = x"yes"; then
CFLAGS_VECTOR="${CFLAGS_VECTOR} -ftree-vectorize"
fi
+ # We want to suppress clang's unhelpful unused-command-line-argument warnings
+ # but gcc won't complain about unrecognized -Wno-foo switches, so we have to
+ # test for the positive form and if that works, add the negative form
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -Wunused-command-line-argument" >&5
+$as_echo_n "checking whether $CC supports -Wunused-command-line-argument... " >&6; }
+if ${pgac_cv_prog_cc_cflags__Wunused_command_line_argument+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
+CFLAGS="$pgac_save_CFLAGS -Wunused-command-line-argument"
+ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pgac_cv_prog_cc_cflags__Wunused_command_line_argument=yes
+else
+ pgac_cv_prog_cc_cflags__Wunused_command_line_argument=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_c_werror_flag=$ac_save_c_werror_flag
+CFLAGS="$pgac_save_CFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_prog_cc_cflags__Wunused_command_line_argument" >&5
+$as_echo "$pgac_cv_prog_cc_cflags__Wunused_command_line_argument" >&6; }
+if test x"$pgac_cv_prog_cc_cflags__Wunused_command_line_argument" = x"yes"; then
+ NOT_THE_CFLAGS="${NOT_THE_CFLAGS} -Wunused-command-line-argument"
+fi
+
+ if test -n "$NOT_THE_CFLAGS"; then
+ CFLAGS="$CFLAGS -Wno-unused-command-line-argument"
+ fi
elif test "$ICC" = yes; then
# Intel's compiler has a bug/misoptimization in checking for
# division by NAN (NaN == 0), -mp1 fixes it, so add it to the CFLAGS.
@@ -4856,7 +4963,12 @@ if test "$PORTNAME" = "win32"; then
CPPFLAGS="$CPPFLAGS -I$srcdir/src/include/port/win32 -DEXEC_BACKEND"
fi
-# Check if the compiler still works with the template settings
+# Now that we're done automatically adding stuff to CFLAGS, put back the
+# user-specified flags (if any) at the end. This lets users override
+# the automatic additions.
+CFLAGS="$CFLAGS $user_CFLAGS"
+
+# Check if the compiler still works with the final flag settings
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler still works" >&5
$as_echo_n "checking whether the C compiler still works... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -5506,7 +5618,7 @@ if test "${with_openssl+set}" = set; then :
case $withval in
yes)
-$as_echo "#define USE_SSL 1" >>confdefs.h
+$as_echo "#define USE_OPENSSL 1" >>confdefs.h
;;
no)
@@ -7673,7 +7785,7 @@ return socket ();
return 0;
}
_ACEOF
-for ac_lib in '' socket wsock32; do
+for ac_lib in '' socket ws2_32; do
if test -z "$ac_lib"; then
ac_res="none required"
else
@@ -8362,6 +8474,17 @@ $as_echo "$as_me: WARNING:
*** Not using spinlocks will cause poor performance." >&2;}
fi
+if test "$enable_atomics" = yes; then
+
+$as_echo "#define HAVE_ATOMICS 1" >>confdefs.h
+
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+*** Not using atomic operations will cause poor performance." >&5
+$as_echo "$as_me: WARNING:
+*** Not using atomic operations will cause poor performance." >&2;}
+fi
+
if test "$with_gssapi" = yes ; then
if test "$PORTNAME" != "win32"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gss_init_sec_context" >&5
@@ -8641,6 +8764,17 @@ else
fi
fi
+ for ac_func in SSL_get_current_compression
+do :
+ ac_fn_c_check_func "$LINENO" "SSL_get_current_compression" "ac_cv_func_SSL_get_current_compression"
+if test "x$ac_cv_func_SSL_get_current_compression" = xyes; then :
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_SSL_GET_CURRENT_COMPRESSION 1
+_ACEOF
+
+fi
+done
+
fi
if test "$with_pam" = yes ; then
@@ -9125,7 +9259,7 @@ fi
done
-for ac_header in crypt.h dld.h fp_class.h getopt.h ieeefp.h ifaddrs.h langinfo.h poll.h pwd.h sys/ioctl.h sys/ipc.h sys/poll.h sys/pstat.h sys/resource.h sys/select.h sys/sem.h sys/shm.h sys/socket.h sys/sockio.h sys/tas.h sys/time.h sys/un.h termios.h ucred.h utime.h wchar.h wctype.h
+for ac_header in atomic.h crypt.h dld.h fp_class.h getopt.h ieeefp.h ifaddrs.h langinfo.h mbarrier.h poll.h pwd.h sys/ioctl.h sys/ipc.h sys/poll.h sys/pstat.h sys/resource.h sys/select.h sys/sem.h sys/shm.h sys/socket.h sys/sockio.h sys/tas.h sys/time.h sys/un.h termios.h ucred.h utime.h wchar.h wctype.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
@@ -9494,6 +9628,47 @@ fi
done
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for compatible LDAP implementation" >&5
+$as_echo_n "checking for compatible LDAP implementation... " >&6; }
+if ${pgac_cv_ldap_safe+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <ldap.h>
+#if !defined(LDAP_VENDOR_VERSION) || \
+ (defined(LDAP_API_FEATURE_X_OPENLDAP) && \
+ LDAP_VENDOR_VERSION >= 20424 && LDAP_VENDOR_VERSION <= 20431)
+choke me
+#endif
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pgac_cv_ldap_safe=yes
+else
+ pgac_cv_ldap_safe=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_ldap_safe" >&5
+$as_echo "$pgac_cv_ldap_safe" >&6; }
+
+if test "$pgac_cv_ldap_safe" != yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+*** With OpenLDAP versions 2.4.24 through 2.4.31, inclusive, each backend
+*** process that loads libpq (via WAL receiver, dblink, or postgres_fdw) and
+*** also uses LDAP will crash on exit." >&5
+$as_echo "$as_me: WARNING:
+*** With OpenLDAP versions 2.4.24 through 2.4.31, inclusive, each backend
+*** process that loads libpq (via WAL receiver, dblink, or postgres_fdw) and
+*** also uses LDAP will crash on exit." >&2;}
+fi
else
for ac_header in winldap.h
do :
@@ -9983,6 +10158,42 @@ _ACEOF
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for printf format archetype" >&5
+$as_echo_n "checking for printf format archetype... " >&6; }
+if ${pgac_cv_printf_archetype+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+extern int
+pgac_write(int ignore, const char *fmt,...)
+__attribute__((format(gnu_printf, 2, 3)));
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pgac_cv_printf_archetype=gnu_printf
+else
+ pgac_cv_printf_archetype=printf
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_printf_archetype" >&5
+$as_echo "$pgac_cv_printf_archetype" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define PG_PRINTF_ATTRIBUTE $pgac_cv_printf_archetype
+_ACEOF
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for flexible array members" >&5
$as_echo_n "checking for flexible array members... " >&6; }
@@ -10177,6 +10388,36 @@ if test x"$pgac_cv__types_compatible" = xyes ; then
$as_echo "#define HAVE__BUILTIN_TYPES_COMPATIBLE_P 1" >>confdefs.h
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_bswap32" >&5
+$as_echo_n "checking for __builtin_bswap32... " >&6; }
+if ${pgac_cv__builtin_bswap32+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+static unsigned long int x = __builtin_bswap32(0xaabbccdd);
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ pgac_cv__builtin_bswap32=yes
+else
+ pgac_cv__builtin_bswap32=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv__builtin_bswap32" >&5
+$as_echo "$pgac_cv__builtin_bswap32" >&6; }
+if test x"$pgac_cv__builtin_bswap32" = xyes ; then
+
+$as_echo "#define HAVE__BUILTIN_BSWAP32 1" >>confdefs.h
+
+fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __builtin_constant_p" >&5
$as_echo_n "checking for __builtin_constant_p... " >&6; }
if ${pgac_cv__builtin_constant_p+:} false; then :
@@ -11219,7 +11460,7 @@ fi
LIBS_including_readline="$LIBS"
LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'`
-for ac_func in cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll pstat readlink setproctitle setsid shm_open sigprocmask symlink sync_file_range towlower utime utimes wcstombs wcstombs_l
+for ac_func in cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll pstat pthread_is_threaded_np readlink setproctitle setsid shm_open sigprocmask symlink sync_file_range towlower utime utimes wcstombs wcstombs_l
do :
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
@@ -11662,6 +11903,19 @@ esac
fi
+ac_fn_c_check_func "$LINENO" "mkdtemp" "ac_cv_func_mkdtemp"
+if test "x$ac_cv_func_mkdtemp" = xyes; then :
+ $as_echo "#define HAVE_MKDTEMP 1" >>confdefs.h
+
+else
+ case " $LIBOBJS " in
+ *" mkdtemp.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS mkdtemp.$ac_objext"
+ ;;
+esac
+
+fi
+
ac_fn_c_check_func "$LINENO" "random" "ac_cv_func_random"
if test "x$ac_cv_func_random" = xyes; then :
$as_echo "#define HAVE_RANDOM 1" >>confdefs.h
@@ -11789,10 +12043,9 @@ esac
# System's version of getaddrinfo(), if any, may be used only if we found
# a definition for struct addrinfo; see notes in src/include/getaddrinfo.h.
-# (Note: the AC_REPLACE_FUNCS probe fails on Windows, where the available
-# versions of getaddrinfo don't follow normal C call protocol. This is OK
-# because we want to use our own getaddrinfo.c on Windows anyway.)
-if test x"$ac_cv_type_struct_addrinfo" = xyes ; then
+# We use only our own getaddrinfo.c on Windows, but it's time to revisit that.
+if test x"$ac_cv_type_struct_addrinfo" = xyes && \
+ test "$PORTNAME" != "win32"; then
ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo"
if test "x$ac_cv_func_getaddrinfo" = xyes; then :
$as_echo "#define HAVE_GETADDRINFO 1" >>confdefs.h
@@ -11869,7 +12122,7 @@ esac
fi
-# Win32 support
+# Win32 (really MinGW) support
if test "$PORTNAME" = "win32"; then
ac_fn_c_check_func "$LINENO" "gettimeofday" "ac_cv_func_gettimeofday"
if test "x$ac_cv_func_gettimeofday" = xyes; then :
@@ -11886,6 +12139,12 @@ fi
case " $LIBOBJS " in
+ *" dirmod.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS dirmod.$ac_objext"
+ ;;
+esac
+
+ case " $LIBOBJS " in
*" kill.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS kill.$ac_objext"
;;
@@ -11950,6 +12209,16 @@ else
fi
+# Cygwin needs only a bit of that
+if test "$PORTNAME" = "cygwin"; then
+ case " $LIBOBJS " in
+ *" dirmod.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS dirmod.$ac_objext"
+ ;;
+esac
+
+fi
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sigsetjmp" >&5
$as_echo_n "checking for sigsetjmp... " >&6; }
if ${pgac_cv_func_sigsetjmp+:} false; then :
@@ -12103,40 +12372,6 @@ fi
done
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for builtin locking functions" >&5
-$as_echo_n "checking for builtin locking functions... " >&6; }
-if ${pgac_cv_gcc_int_atomics+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-int lock = 0;
- __sync_lock_test_and_set(&lock, 1);
- __sync_lock_release(&lock);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- pgac_cv_gcc_int_atomics="yes"
-else
- pgac_cv_gcc_int_atomics="no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_gcc_int_atomics" >&5
-$as_echo "$pgac_cv_gcc_int_atomics" >&6; }
-if test x"$pgac_cv_gcc_int_atomics" = x"yes"; then
-
-$as_echo "#define HAVE_GCC_INT_ATOMICS 1" >>confdefs.h
-
-fi
-
# Lastly, restore full LIBS list and check for readline/libedit symbols
LIBS="$LIBS_including_readline"
@@ -12437,8 +12672,9 @@ _ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
# Check both linking and compiling, because they might tolerate different options.
if test "`(eval $ac_link 2>&1 1>&5)`" = "" && test "`(eval $ac_compile 2>&1 1>&5)`" = ""; then
- # we continue with more flags because Linux needs -lpthread
- # for libpq builds on PostgreSQL. The test above only
+ # The original macro breaks out of the loop at this point,
+ # but we continue trying flags because Linux needs -lpthread
+ # too to build libpq successfully. The test above only
# tests for building binaries, not shared libraries.
PTHREAD_LIBS=" $tryPTHREAD_LIBS $PTHREAD_LIBS"
PTHREAD_CFLAGS="$PTHREAD_CFLAGS $tryPTHREAD_CFLAGS"
@@ -12454,144 +12690,13 @@ $as_echo "$acx_pthread_ok" >&6; }
done
fi
-# Various other checks:
-if test "x$acx_pthread_ok" = xyes; then
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
-
- # Detect AIX lossage: threads are created detached by default
- # and the JOINABLE attribute has a nonstandard name (UNDETACHED).
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
-$as_echo_n "checking for joinable pthread attribute... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <pthread.h>
-int
-main ()
-{
-int attr=PTHREAD_CREATE_JOINABLE;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ok=PTHREAD_CREATE_JOINABLE
-else
- ok=unknown
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- if test x"$ok" = xunknown; then
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <pthread.h>
-int
-main ()
-{
-int attr=PTHREAD_CREATE_UNDETACHED;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ok=PTHREAD_CREATE_UNDETACHED
-else
- ok=unknown
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
- fi
- if test x"$ok" != xPTHREAD_CREATE_JOINABLE; then
-
-$as_echo "#define PTHREAD_CREATE_JOINABLE \$ok" >>confdefs.h
+# The original macro has a bunch of other tests here, which we have removed
+# because (a) Postgres doesn't need them, and (b) $acx_pthread_ok is not
+# meaningful at this point.
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ok}" >&5
-$as_echo "${ok}" >&6; }
- if test x"$ok" = xunknown; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: we do not know how to create joinable pthreads" >&5
-$as_echo "$as_me: WARNING: we do not know how to create joinable pthreads" >&2;}
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5
-$as_echo_n "checking if more special flags are required for pthreads... " >&6; }
- flag=no
-# We always add these in PostgreSQL
-# case "${host_cpu}-${host_os}" in
-# *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
-# *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
-# esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5
-$as_echo "${flag}" >&6; }
- if test "x$flag" != xno; then
- PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
- fi
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
-# Supporting cc_r would require a special CC in all places that
-# use libpq, and that is ugly, so we don't do it. Users can still
-# define their compiler as cc_r to do thread builds of everything.
- # More AIX lossage: must compile with cc_r
- # Extract the first word of "cc_r", so it can be a program name with args.
-set dummy cc_r; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_PTHREAD_CC+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$PTHREAD_CC"; then
- ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
- ac_cv_prog_PTHREAD_CC="cc_r"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_prog_PTHREAD_CC" && ac_cv_prog_PTHREAD_CC="${CC}"
-fi
-fi
-PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
-if test -n "$PTHREAD_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
-$as_echo "$PTHREAD_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-else
- PTHREAD_CC="$CC"
-fi
-
-
-
-
-
-# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$acx_pthread_ok" = xyes; then
-
-$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
-
- :
-else
- acx_pthread_ok=no
-
-fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -12605,15 +12710,6 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
# enables 5-arg getpwuid_r, among other things.
PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS"
-
-# At this point, we don't want to muck with the compiler name for threading.
-# Let's see who fails, perhaps AIX. 2004-04-23
-if test "$PTHREAD_CC" != "$CC"; then
-as_fn_error $? "
-PostgreSQL does not support platforms that require a special compiler
-for thread safety; use --disable-thread-safety to disable thread safety." "$LINENO" 5
-fi
-
# Check for *_r functions
_CFLAGS="$CFLAGS"
_LIBS="$LIBS"
@@ -12646,43 +12742,6 @@ done
# Do test here with the proper thread flags
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getpwuid_r takes a fifth argument" >&5
-$as_echo_n "checking whether getpwuid_r takes a fifth argument... " >&6; }
-if ${pgac_cv_func_getpwuid_r_5arg+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <pwd.h>
-int
-main ()
-{
-uid_t uid;
-struct passwd *space;
-char *buf;
-size_t bufsize;
-struct passwd **result;
-getpwuid_r(uid, space, buf, bufsize, result);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- pgac_cv_func_getpwuid_r_5arg=yes
-else
- pgac_cv_func_getpwuid_r_5arg=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_func_getpwuid_r_5arg" >&5
-$as_echo "$pgac_cv_func_getpwuid_r_5arg" >&6; }
-if test x"$pgac_cv_func_getpwuid_r_5arg" = xyes ; then
-
-$as_echo "#define GETPWUID_R_5ARG 1" >>confdefs.h
-
-fi
-
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns int" >&5
$as_echo_n "checking whether strerror_r returns int... " >&6; }
if ${pgac_cv_func_strerror_r_int+:} false; then :
@@ -13183,20 +13242,20 @@ fi
if test "$HAVE_LONG_LONG_INT_64" = yes ; then
if test $pgac_need_repl_snprintf = no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking snprintf format for long long int" >&5
-$as_echo_n "checking snprintf format for long long int... " >&6; }
-if ${pgac_cv_snprintf_long_long_int_format+:} false; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking snprintf length modifier for long long int" >&5
+$as_echo_n "checking snprintf length modifier for long long int... " >&6; }
+if ${pgac_cv_snprintf_long_long_int_modifier+:} false; then :
$as_echo_n "(cached) " >&6
else
- for pgac_format in '%lld' '%qd' '%I64d'; do
+ for pgac_modifier in 'll' 'q' 'I64'; do
if test "$cross_compiling" = yes; then :
- pgac_cv_snprintf_long_long_int_format=cross; break
+ pgac_cv_snprintf_long_long_int_modifier=cross; break
else
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <stdio.h>
typedef long long int ac_int64;
-#define INT64_FORMAT "$pgac_format"
+#define INT64_FORMAT "%${pgac_modifier}d"
ac_int64 a = 20000001;
ac_int64 b = 40000005;
@@ -13220,7 +13279,7 @@ main() {
}
_ACEOF
if ac_fn_c_try_run "$LINENO"; then :
- pgac_cv_snprintf_long_long_int_format=$pgac_format; break
+ pgac_cv_snprintf_long_long_int_modifier=$pgac_modifier; break
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
@@ -13229,44 +13288,36 @@ fi
done
fi
-LONG_LONG_INT_FORMAT=''
+LONG_LONG_INT_MODIFIER=''
-case $pgac_cv_snprintf_long_long_int_format in
+case $pgac_cv_snprintf_long_long_int_modifier in
cross) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cannot test (not on host machine)" >&5
$as_echo "cannot test (not on host machine)" >&6; };;
- ?*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_snprintf_long_long_int_format" >&5
-$as_echo "$pgac_cv_snprintf_long_long_int_format" >&6; }
- LONG_LONG_INT_FORMAT=$pgac_cv_snprintf_long_long_int_format;;
+ ?*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_snprintf_long_long_int_modifier" >&5
+$as_echo "$pgac_cv_snprintf_long_long_int_modifier" >&6; }
+ LONG_LONG_INT_MODIFIER=$pgac_cv_snprintf_long_long_int_modifier;;
*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
$as_echo "none" >&6; };;
esac
- if test "$LONG_LONG_INT_FORMAT" = ""; then
+ if test "$LONG_LONG_INT_MODIFIER" = ""; then
# Force usage of our own snprintf, since system snprintf is broken
pgac_need_repl_snprintf=yes
- LONG_LONG_INT_FORMAT='%lld'
+ LONG_LONG_INT_MODIFIER='ll'
fi
else
# Here if we previously decided we needed to use our own snprintf
- LONG_LONG_INT_FORMAT='%lld'
+ LONG_LONG_INT_MODIFIER='ll'
fi
- LONG_LONG_UINT_FORMAT=`echo "$LONG_LONG_INT_FORMAT" | sed 's/d$/u/'`
- INT64_FORMAT="\"$LONG_LONG_INT_FORMAT\""
- UINT64_FORMAT="\"$LONG_LONG_UINT_FORMAT\""
else
# Here if we are not using 'long long int' at all
- INT64_FORMAT='"%ld"'
- UINT64_FORMAT='"%lu"'
+ LONG_LONG_INT_MODIFIER='l'
fi
-
-cat >>confdefs.h <<_ACEOF
-#define INT64_FORMAT $INT64_FORMAT
-_ACEOF
-
+INT64_MODIFIER="\"$LONG_LONG_INT_MODIFIER\""
cat >>confdefs.h <<_ACEOF
-#define UINT64_FORMAT $UINT64_FORMAT
+#define INT64_MODIFIER $INT64_MODIFIER
_ACEOF
@@ -13297,7 +13348,8 @@ int main()
*/
bufz[0] = '\0'; /* in case snprintf fails to emit anything */
snprintf(bufz, sizeof(bufz), "%zu", ~((size_t) 0));
- snprintf(buf64, sizeof(buf64), UINT64_FORMAT, (PG_INT64_TYPE) ~((size_t) 0));
+ snprintf(buf64, sizeof(buf64), "%" INT64_MODIFIER "u",
+ (unsigned PG_INT64_TYPE) ~((size_t) 0));
if (strcmp(bufz, buf64) != 0)
return 1;
return 0;
@@ -13806,7 +13858,493 @@ _ACEOF
fi
+# Check for extensions offering the integer scalar type __int128.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __int128" >&5
+$as_echo_n "checking for __int128... " >&6; }
+if ${pgac_cv__128bit_int+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+/*
+ * These are globals to discourage the compiler from folding all the
+ * arithmetic tests down to compile-time constants. We do not have
+ * convenient support for 64bit literals at this point...
+ */
+__int128 a = 48828125;
+__int128 b = 97656255;
+int
+main ()
+{
+
+__int128 c,d;
+a = (a << 12) + 1; /* 200000000001 */
+b = (b << 12) + 5; /* 400000000005 */
+/* use the most relevant arithmetic ops */
+c = a * b;
+d = (c + b) / b;
+/* return different values, to prevent optimizations */
+if (d != a+1)
+ return 0;
+return 1;
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pgac_cv__128bit_int=yes
+else
+ pgac_cv__128bit_int=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv__128bit_int" >&5
+$as_echo "$pgac_cv__128bit_int" >&6; }
+if test x"$pgac_cv__128bit_int" = xyes ; then
+
+$as_echo "#define PG_INT128_TYPE __int128" >>confdefs.h
+
+fi
+
+# Check for various atomic operations now that we have checked how to declare
+# 64bit integers.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for builtin __sync char locking functions" >&5
+$as_echo_n "checking for builtin __sync char locking functions... " >&6; }
+if ${pgac_cv_gcc_sync_char_tas+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+char lock = 0;
+ __sync_lock_test_and_set(&lock, 1);
+ __sync_lock_release(&lock);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pgac_cv_gcc_sync_char_tas="yes"
+else
+ pgac_cv_gcc_sync_char_tas="no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_gcc_sync_char_tas" >&5
+$as_echo "$pgac_cv_gcc_sync_char_tas" >&6; }
+if test x"$pgac_cv_gcc_sync_char_tas" = x"yes"; then
+
+$as_echo "#define HAVE_GCC__SYNC_CHAR_TAS 1" >>confdefs.h
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for builtin __sync int32 locking functions" >&5
+$as_echo_n "checking for builtin __sync int32 locking functions... " >&6; }
+if ${pgac_cv_gcc_sync_int32_tas+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+int lock = 0;
+ __sync_lock_test_and_set(&lock, 1);
+ __sync_lock_release(&lock);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pgac_cv_gcc_sync_int32_tas="yes"
+else
+ pgac_cv_gcc_sync_int32_tas="no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_gcc_sync_int32_tas" >&5
+$as_echo "$pgac_cv_gcc_sync_int32_tas" >&6; }
+if test x"$pgac_cv_gcc_sync_int32_tas" = x"yes"; then
+
+$as_echo "#define HAVE_GCC__SYNC_INT32_TAS 1" >>confdefs.h
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for builtin __sync int32 atomic operations" >&5
+$as_echo_n "checking for builtin __sync int32 atomic operations... " >&6; }
+if ${pgac_cv_gcc_sync_int32_cas+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+int val = 0;
+ __sync_val_compare_and_swap(&val, 0, 37);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pgac_cv_gcc_sync_int32_cas="yes"
+else
+ pgac_cv_gcc_sync_int32_cas="no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_gcc_sync_int32_cas" >&5
+$as_echo "$pgac_cv_gcc_sync_int32_cas" >&6; }
+if test x"$pgac_cv_gcc_sync_int32_cas" = x"yes"; then
+
+$as_echo "#define HAVE_GCC__SYNC_INT32_CAS 1" >>confdefs.h
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for builtin __sync int64 atomic operations" >&5
+$as_echo_n "checking for builtin __sync int64 atomic operations... " >&6; }
+if ${pgac_cv_gcc_sync_int64_cas+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+PG_INT64_TYPE lock = 0;
+ __sync_val_compare_and_swap(&lock, 0, (PG_INT64_TYPE) 37);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pgac_cv_gcc_sync_int64_cas="yes"
+else
+ pgac_cv_gcc_sync_int64_cas="no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_gcc_sync_int64_cas" >&5
+$as_echo "$pgac_cv_gcc_sync_int64_cas" >&6; }
+if test x"$pgac_cv_gcc_sync_int64_cas" = x"yes"; then
+
+$as_echo "#define HAVE_GCC__SYNC_INT64_CAS 1" >>confdefs.h
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for builtin __atomic int32 atomic operations" >&5
+$as_echo_n "checking for builtin __atomic int32 atomic operations... " >&6; }
+if ${pgac_cv_gcc_atomic_int32_cas+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+int val = 0;
+ int expect = 0;
+ __atomic_compare_exchange_n(&val, &expect, 37, 0, __ATOMIC_SEQ_CST, __ATOMIC_RELAXED);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pgac_cv_gcc_atomic_int32_cas="yes"
+else
+ pgac_cv_gcc_atomic_int32_cas="no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_gcc_atomic_int32_cas" >&5
+$as_echo "$pgac_cv_gcc_atomic_int32_cas" >&6; }
+if test x"$pgac_cv_gcc_atomic_int32_cas" = x"yes"; then
+
+$as_echo "#define HAVE_GCC__ATOMIC_INT32_CAS 1" >>confdefs.h
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for builtin __atomic int64 atomic operations" >&5
+$as_echo_n "checking for builtin __atomic int64 atomic operations... " >&6; }
+if ${pgac_cv_gcc_atomic_int64_cas+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+PG_INT64_TYPE val = 0;
+ PG_INT64_TYPE expect = 0;
+ __atomic_compare_exchange_n(&val, &expect, 37, 0, __ATOMIC_SEQ_CST, __ATOMIC_RELAXED);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pgac_cv_gcc_atomic_int64_cas="yes"
+else
+ pgac_cv_gcc_atomic_int64_cas="no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_gcc_atomic_int64_cas" >&5
+$as_echo "$pgac_cv_gcc_atomic_int64_cas" >&6; }
+if test x"$pgac_cv_gcc_atomic_int64_cas" = x"yes"; then
+
+$as_echo "#define HAVE_GCC__ATOMIC_INT64_CAS 1" >>confdefs.h
+
+fi
+
+
+# Check for x86 cpuid instruction
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __get_cpuid" >&5
+$as_echo_n "checking for __get_cpuid... " >&6; }
+if ${pgac_cv__get_cpuid+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <cpuid.h>
+int
+main ()
+{
+unsigned int exx[4] = {0, 0, 0, 0};
+ __get_cpuid(1, &exx[0], &exx[1], &exx[2], &exx[3]);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pgac_cv__get_cpuid="yes"
+else
+ pgac_cv__get_cpuid="no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv__get_cpuid" >&5
+$as_echo "$pgac_cv__get_cpuid" >&6; }
+if test x"$pgac_cv__get_cpuid" = x"yes"; then
+
+$as_echo "#define HAVE__GET_CPUID 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __cpuid" >&5
+$as_echo_n "checking for __cpuid... " >&6; }
+if ${pgac_cv__cpuid+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <intrin.h>
+int
+main ()
+{
+unsigned int exx[4] = {0, 0, 0, 0};
+ __get_cpuid(exx[0], 1);
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pgac_cv__cpuid="yes"
+else
+ pgac_cv__cpuid="no"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv__cpuid" >&5
+$as_echo "$pgac_cv__cpuid" >&6; }
+if test x"$pgac_cv__cpuid" = x"yes"; then
+
+$as_echo "#define HAVE__CPUID 1" >>confdefs.h
+
+fi
+
+# Check for Intel SSE 4.2 intrinsics to do CRC calculations.
+#
+# First check if the _mm_crc32_u8 and _mm_crc32_u64 intrinsics can be used
+# with the default compiler flags. If not, check if adding the -msse4.2
+# flag helps. CFLAGS_SSE42 is set to -msse4.2 if that's required.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for _mm_crc32_u8 and _mm_crc32_u32 with CFLAGS=" >&5
+$as_echo_n "checking for _mm_crc32_u8 and _mm_crc32_u32 with CFLAGS=... " >&6; }
+if ${pgac_cv_sse42_crc32_intrinsics_+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
+CFLAGS="$pgac_save_CFLAGS "
+ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <nmmintrin.h>
+int
+main ()
+{
+unsigned int crc = 0;
+ crc = _mm_crc32_u8(crc, 0);
+ crc = _mm_crc32_u32(crc, 0);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pgac_cv_sse42_crc32_intrinsics_=yes
+else
+ pgac_cv_sse42_crc32_intrinsics_=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ac_c_werror_flag=$ac_save_c_werror_flag
+CFLAGS="$pgac_save_CFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_sse42_crc32_intrinsics_" >&5
+$as_echo "$pgac_cv_sse42_crc32_intrinsics_" >&6; }
+if test x"$pgac_cv_sse42_crc32_intrinsics_" = x"yes"; then
+ CFLAGS_SSE42=""
+ pgac_sse42_crc32_intrinsics=yes
+fi
+
+if test x"$pgac_sse42_crc32_intrinsics" != x"yes"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _mm_crc32_u8 and _mm_crc32_u32 with CFLAGS=-msse4.2" >&5
+$as_echo_n "checking for _mm_crc32_u8 and _mm_crc32_u32 with CFLAGS=-msse4.2... " >&6; }
+if ${pgac_cv_sse42_crc32_intrinsics__msse4_2+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
+CFLAGS="$pgac_save_CFLAGS -msse4.2"
+ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#include <nmmintrin.h>
+int
+main ()
+{
+unsigned int crc = 0;
+ crc = _mm_crc32_u8(crc, 0);
+ crc = _mm_crc32_u32(crc, 0);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ pgac_cv_sse42_crc32_intrinsics__msse4_2=yes
+else
+ pgac_cv_sse42_crc32_intrinsics__msse4_2=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+ac_c_werror_flag=$ac_save_c_werror_flag
+CFLAGS="$pgac_save_CFLAGS"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $pgac_cv_sse42_crc32_intrinsics__msse4_2" >&5
+$as_echo "$pgac_cv_sse42_crc32_intrinsics__msse4_2" >&6; }
+if test x"$pgac_cv_sse42_crc32_intrinsics__msse4_2" = x"yes"; then
+ CFLAGS_SSE42="-msse4.2"
+ pgac_sse42_crc32_intrinsics=yes
+fi
+
+fi
+
+
+# Are we targeting a processor that supports SSE 4.2? gcc, clang and icc all
+# define __SSE4_2__ in that case.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+#ifndef __SSE4_2__
+#error __SSE4_2__ not defined
+#endif
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+ SSE4_2_TARGETED=1
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+# Select CRC-32C implementation.
+#
+# If we are targeting a processor that has SSE 4.2 instructions, we can use the
+# special CRC instructions for calculating CRC-32C. If we're not targeting such
+# a processor, but we can nevertheless produce code that uses the SSE
+# intrinsics, perhaps with some extra CFLAGS, compile both implementations and
+# select which one to use at runtime, depending on whether SSE 4.2 is supported
+# by the processor we're running on.
+#
+# You can override this logic by setting the appropriate USE_*_CRC32 flag to 1
+# in the template or configure command line.
+if test x"$USE_SSE42_CRC32C" = x"" && test x"$USE_SSE42_CRC32C_WITH_RUNTIME_CHECK" = x"" && test x"$USE_SLICING_BY_8_CRC32C" = x""; then
+ if test x"$pgac_sse42_crc32_intrinsics" = x"yes" && test x"$SSE4_2_TARGETED" = x"1" ; then
+ USE_SSE42_CRC32C=1
+ else
+ # the CPUID instruction is needed for the runtime check.
+ if test x"$pgac_sse42_crc32_intrinsics" = x"yes" && (test x"$pgac_cv__get_cpuid" = x"yes" || test x"$pgac_cv__cpuid" = x"yes"); then
+ USE_SSE42_CRC32C_WITH_RUNTIME_CHECK=1
+ else
+ # fall back to slicing-by-8 algorithm which doesn't require any special
+ # CPU support.
+ USE_SLICING_BY_8_CRC32C=1
+ fi
+ fi
+fi
+
+# Set PG_CRC32C_OBJS appropriately depending on the selected implementation.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking which CRC-32C implementation to use" >&5
+$as_echo_n "checking which CRC-32C implementation to use... " >&6; }
+if test x"$USE_SSE42_CRC32C" = x"1"; then
+
+$as_echo "#define USE_SSE42_CRC32C 1" >>confdefs.h
+
+ PG_CRC32C_OBJS="pg_crc32c_sse42.o"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: SSE 4.2" >&5
+$as_echo "SSE 4.2" >&6; }
+else
+ if test x"$USE_SSE42_CRC32C_WITH_RUNTIME_CHECK" = x"1"; then
+
+$as_echo "#define USE_SSE42_CRC32C_WITH_RUNTIME_CHECK 1" >>confdefs.h
+
+ PG_CRC32C_OBJS="pg_crc32c_sse42.o pg_crc32c_sb8.o pg_crc32c_choose.o"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: SSE 4.2 with runtime check" >&5
+$as_echo "SSE 4.2 with runtime check" >&6; }
+ else
+
+$as_echo "#define USE_SLICING_BY_8_CRC32C 1" >>confdefs.h
+
+ PG_CRC32C_OBJS="pg_crc32c_sb8.o"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: slicing-by-8" >&5
+$as_echo "slicing-by-8" >&6; }
+ fi
+fi
+
+
+
+# Check that POSIX signals are available if thread safety is enabled.
if test "$PORTNAME" != "win32"
then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for POSIX signal interface" >&5
@@ -14503,6 +15041,90 @@ fi
fi
+for ac_prog in dbtoepub
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_DBTOEPUB+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$DBTOEPUB"; then
+ ac_cv_prog_DBTOEPUB="$DBTOEPUB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_DBTOEPUB="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+DBTOEPUB=$ac_cv_prog_DBTOEPUB
+if test -n "$DBTOEPUB"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DBTOEPUB" >&5
+$as_echo "$DBTOEPUB" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$DBTOEPUB" && break
+done
+
+for ac_prog in xmllint
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_XMLLINT+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ if test -n "$XMLLINT"; then
+ ac_cv_prog_XMLLINT="$XMLLINT" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+ IFS=$as_save_IFS
+ test -z "$as_dir" && as_dir=.
+ for ac_exec_ext in '' $ac_executable_extensions; do
+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+ ac_cv_prog_XMLLINT="$ac_prog"
+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+ break 2
+ fi
+done
+ done
+IFS=$as_save_IFS
+
+fi
+fi
+XMLLINT=$ac_cv_prog_XMLLINT
+if test -n "$XMLLINT"; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XMLLINT" >&5
+$as_echo "$XMLLINT" >&6; }
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+ test -n "$XMLLINT" && break
+done
+
for ac_prog in xsltproc
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -14591,7 +15213,8 @@ done
#
# Check for test tools
#
-for ac_prog in prove
+if test "$enable_tap_tests" = yes; then
+ for ac_prog in prove
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
@@ -14633,6 +15256,13 @@ fi
test -n "$PROVE" && break
done
+ if test -z "$PROVE"; then
+ as_fn_error $? "prove not found" "$LINENO" 5
+ fi
+ if test -z "$PERL"; then
+ as_fn_error $? "Perl not found" "$LINENO" 5
+ fi
+fi
# Thread testing
@@ -15412,7 +16042,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by PostgreSQL $as_me 9.4beta1 (Postgres-XL 9.4beta1.0), which was
+This file was extended by PostgreSQL $as_me 9.5devel (Postgres-XL 9.5devel), which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -15482,7 +16112,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-PostgreSQL config.status 9.4beta1 (Postgres-XL 9.4beta1)
+PostgreSQL config.status 9.5devel (Postgres-XL 9.5devel)
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.in b/configure.in
index 1c5f1ef350..6de315e2b5 100644
--- a/configure.in
+++ b/configure.in
@@ -17,13 +17,13 @@ dnl Read the Autoconf manual for details.
dnl
m4_pattern_forbid(^PGAC_)dnl to catch undefined macros
-AC_INIT([PostgreSQL], [9.4beta1 (Postgres-XL 9.4beta1)], [bugs@postgres-xl.org])
+AC_INIT([PostgreSQL], [9.5devel (Postgres-XL 9.5devel)], [bugs@postgres-xl.org])
m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.69], [], [m4_fatal([Autoconf version 2.69 is required.
Untested combinations of 'autoconf' and PostgreSQL versions are not
recommended. You can remove the check from 'configure.in' but it is then
your responsibility whether the result works or not.])])
-AC_COPYRIGHT([Copyright (c) 1996-2014, PostgreSQL Global Development Group])
+AC_COPYRIGHT([Copyright (c) 1996-2015, PostgreSQL Global Development Group])
AC_CONFIG_SRCDIR([src/backend/access/common/heaptuple.c])
AC_CONFIG_AUX_DIR(config)
AC_PREFIX_DEFAULT(/usr/local/pgsql)
@@ -69,7 +69,6 @@ dragonfly*) template=netbsd ;;
mingw*) template=win32 ;;
netbsd*) template=netbsd ;;
openbsd*) template=openbsd ;;
- osf*) template=osf ;;
sco*) template=sco ;;
solaris*) template=solaris ;;
sysv5*) template=unixware ;;
@@ -180,6 +179,12 @@ PGAC_ARG_BOOL(enable, spinlocks, yes,
[do not use spinlocks])
#
+# Atomic operations
+#
+PGAC_ARG_BOOL(enable, atomics, yes,
+ [do not use atomic operations])
+
+#
# --enable-debug adds -g to compiler flags
#
PGAC_ARG_BOOL(enable, debug, no,
@@ -224,6 +229,13 @@ AC_SUBST(DTRACEFLAGS)])
AC_SUBST(enable_dtrace)
#
+# TAP tests
+#
+PGAC_ARG_BOOL(enable, tap-tests, no,
+ [enable TAP tests (requires Perl and IPC::Run)])
+AC_SUBST(enable_tap_tests)
+
+#
# Block size
#
AC_MSG_CHECKING([for block size])
@@ -402,6 +414,10 @@ else
fi
fi
+# CFLAGS we determined above will be added back at the end
+user_CFLAGS=$CFLAGS
+CFLAGS=""
+
# set CFLAGS_VECTOR from the environment, if available
if test "$ac_env_CFLAGS_VECTOR_set" = set; then
CFLAGS_VECTOR=$ac_env_CFLAGS_VECTOR_value
@@ -413,7 +429,7 @@ fi
# but has its own. Also check other compiler-specific flags here.
if test "$GCC" = yes -a "$ICC" = no; then
- CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -Wpointer-arith"
+ CFLAGS="-Wall -Wmissing-prototypes -Wpointer-arith"
# These work in some but not all gcc versions
PGAC_PROG_CC_CFLAGS_OPT([-Wdeclaration-after-statement])
PGAC_PROG_CC_CFLAGS_OPT([-Wendif-labels])
@@ -429,6 +445,13 @@ if test "$GCC" = yes -a "$ICC" = no; then
# Optimization flags for specific files that benefit from vectorization
PGAC_PROG_CC_VAR_OPT(CFLAGS_VECTOR, [-funroll-loops])
PGAC_PROG_CC_VAR_OPT(CFLAGS_VECTOR, [-ftree-vectorize])
+ # We want to suppress clang's unhelpful unused-command-line-argument warnings
+ # but gcc won't complain about unrecognized -Wno-foo switches, so we have to
+ # test for the positive form and if that works, add the negative form
+ PGAC_PROG_CC_VAR_OPT(NOT_THE_CFLAGS, [-Wunused-command-line-argument])
+ if test -n "$NOT_THE_CFLAGS"; then
+ CFLAGS="$CFLAGS -Wno-unused-command-line-argument"
+ fi
elif test "$ICC" = yes; then
# Intel's compiler has a bug/misoptimization in checking for
# division by NAN (NaN == 0), -mp1 fixes it, so add it to the CFLAGS.
@@ -476,7 +499,12 @@ if test "$PORTNAME" = "win32"; then
CPPFLAGS="$CPPFLAGS -I$srcdir/src/include/port/win32 -DEXEC_BACKEND"
fi
-# Check if the compiler still works with the template settings
+# Now that we're done automatically adding stuff to CFLAGS, put back the
+# user-specified flags (if any) at the end. This lets users override
+# the automatic additions.
+CFLAGS="$CFLAGS $user_CFLAGS"
+
+# Check if the compiler still works with the final flag settings
AC_MSG_CHECKING([whether the C compiler still works])
AC_TRY_LINK([], [return 0;],
[AC_MSG_RESULT(yes)],
@@ -658,7 +686,7 @@ AC_MSG_RESULT([$with_bonjour])
#
AC_MSG_CHECKING([whether to build with OpenSSL support])
PGAC_ARG_BOOL(with, openssl, no, [build with OpenSSL support],
- [AC_DEFINE([USE_SSL], 1, [Define to build with (Open)SSL support. (--with-openssl)])])
+ [AC_DEFINE([USE_OPENSSL], 1, [Define to build with OpenSSL support. (--with-openssl)])])
AC_MSG_RESULT([$with_openssl])
AC_SUBST(with_openssl)
@@ -892,7 +920,7 @@ fi
AC_CHECK_LIB(m, main)
AC_SEARCH_LIBS(setproctitle, util)
AC_SEARCH_LIBS(dlopen, dl)
-AC_SEARCH_LIBS(socket, [socket wsock32])
+AC_SEARCH_LIBS(socket, [socket ws2_32])
AC_SEARCH_LIBS(shl_load, dld)
# We only use libld in port/dynloader/aix.c
case $host_os in
@@ -937,6 +965,13 @@ else
*** Not using spinlocks will cause poor performance.])
fi
+if test "$enable_atomics" = yes; then
+ AC_DEFINE(HAVE_ATOMICS, 1, [Define to 1 if you want to use atomics if available.])
+else
+ AC_MSG_WARN([
+*** Not using atomic operations will cause poor performance.])
+fi
+
if test "$with_gssapi" = yes ; then
if test "$PORTNAME" != "win32"; then
AC_SEARCH_LIBS(gss_init_sec_context, [gssapi_krb5 gss 'gssapi -lkrb5 -lcrypto'], [],
@@ -955,6 +990,7 @@ if test "$with_openssl" = yes ; then
AC_SEARCH_LIBS(CRYPTO_new_ex_data, eay32 crypto, [], [AC_MSG_ERROR([library 'eay32' or 'crypto' is required for OpenSSL])])
AC_SEARCH_LIBS(SSL_library_init, ssleay32 ssl, [], [AC_MSG_ERROR([library 'ssleay32' or 'ssl' is required for OpenSSL])])
fi
+ AC_CHECK_FUNCS([SSL_get_current_compression])
fi
if test "$with_pam" = yes ; then
@@ -1003,7 +1039,7 @@ AC_SUBST(UUID_LIBS)
##
dnl sys/socket.h is required by AC_FUNC_ACCEPT_ARGTYPES
-AC_CHECK_HEADERS([crypt.h dld.h fp_class.h getopt.h ieeefp.h ifaddrs.h langinfo.h poll.h pwd.h sys/ioctl.h sys/ipc.h sys/poll.h sys/pstat.h sys/resource.h sys/select.h sys/sem.h sys/shm.h sys/socket.h sys/sockio.h sys/tas.h sys/time.h sys/un.h termios.h ucred.h utime.h wchar.h wctype.h])
+AC_CHECK_HEADERS([atomic.h crypt.h dld.h fp_class.h getopt.h ieeefp.h ifaddrs.h langinfo.h mbarrier.h poll.h pwd.h sys/ioctl.h sys/ipc.h sys/poll.h sys/pstat.h sys/resource.h sys/select.h sys/sem.h sys/shm.h sys/socket.h sys/sockio.h sys/tas.h sys/time.h sys/un.h termios.h ucred.h utime.h wchar.h wctype.h])
# On BSD, test for net/if.h will fail unless sys/socket.h
# is included first.
@@ -1101,6 +1137,7 @@ if test "$with_ldap" = yes ; then
if test "$PORTNAME" != "win32"; then
AC_CHECK_HEADERS(ldap.h, [],
[AC_MSG_ERROR([header file <ldap.h> is required for LDAP])])
+ PGAC_LDAP_SAFE
else
AC_CHECK_HEADERS(winldap.h, [],
[AC_MSG_ERROR([header file <winldap.h> is required for LDAP])],
@@ -1149,11 +1186,13 @@ fi
m4_defun([AC_PROG_CC_STDC], []) dnl We don't want that.
AC_C_BIGENDIAN
PGAC_C_INLINE
+PGAC_PRINTF_ARCHETYPE
AC_C_FLEXIBLE_ARRAY_MEMBER
PGAC_C_SIGNED
PGAC_C_FUNCNAME_SUPPORT
PGAC_C_STATIC_ASSERT
PGAC_C_TYPES_COMPATIBLE
+PGAC_C_BUILTIN_BSWAP32
PGAC_C_BUILTIN_CONSTANT_P
PGAC_C_BUILTIN_UNREACHABLE
PGAC_C_VA_ARGS
@@ -1243,7 +1282,7 @@ PGAC_FUNC_GETTIMEOFDAY_1ARG
LIBS_including_readline="$LIBS"
LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'`
-AC_CHECK_FUNCS([cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll pstat readlink setproctitle setsid shm_open sigprocmask symlink sync_file_range towlower utime utimes wcstombs wcstombs_l])
+AC_CHECK_FUNCS([cbrt dlopen fdatasync getifaddrs getpeerucred getrlimit mbstowcs_l memmove poll pstat pthread_is_threaded_np readlink setproctitle setsid shm_open sigprocmask symlink sync_file_range towlower utime utimes wcstombs wcstombs_l])
AC_REPLACE_FUNCS(fseeko)
case $host_os in
@@ -1357,7 +1396,7 @@ else
AC_CHECK_FUNCS([fpclass fp_class fp_class_d class], [break])
fi
-AC_REPLACE_FUNCS([crypt fls getopt getrusage inet_aton random rint srandom strerror strlcat strlcpy])
+AC_REPLACE_FUNCS([crypt fls getopt getrusage inet_aton mkdtemp random rint srandom strerror strlcat strlcpy])
case $host_os in
@@ -1376,10 +1415,9 @@ esac
# System's version of getaddrinfo(), if any, may be used only if we found
# a definition for struct addrinfo; see notes in src/include/getaddrinfo.h.
-# (Note: the AC_REPLACE_FUNCS probe fails on Windows, where the available
-# versions of getaddrinfo don't follow normal C call protocol. This is OK
-# because we want to use our own getaddrinfo.c on Windows anyway.)
-if test x"$ac_cv_type_struct_addrinfo" = xyes ; then
+# We use only our own getaddrinfo.c on Windows, but it's time to revisit that.
+if test x"$ac_cv_type_struct_addrinfo" = xyes && \
+ test "$PORTNAME" != "win32"; then
AC_REPLACE_FUNCS([getaddrinfo])
else
AC_LIBOBJ(getaddrinfo)
@@ -1405,9 +1443,10 @@ if test "$PORTNAME" = "win32"; then
AC_LIBOBJ(getopt_long)
fi
-# Win32 support
+# Win32 (really MinGW) support
if test "$PORTNAME" = "win32"; then
AC_REPLACE_FUNCS(gettimeofday)
+ AC_LIBOBJ(dirmod)
AC_LIBOBJ(kill)
AC_LIBOBJ(open)
AC_LIBOBJ(system)
@@ -1428,6 +1467,11 @@ else
AC_SUBST(have_win32_dbghelp,no)
fi
+# Cygwin needs only a bit of that
+if test "$PORTNAME" = "cygwin"; then
+ AC_LIBOBJ(dirmod)
+fi
+
dnl Cannot use AC_CHECK_FUNC because sigsetjmp may be a macro
dnl (especially on GNU libc)
dnl See also comments in c.h.
@@ -1467,17 +1511,6 @@ fi
AC_CHECK_FUNCS([strtoll strtoq], [break])
AC_CHECK_FUNCS([strtoull strtouq], [break])
-AC_CACHE_CHECK([for builtin locking functions], pgac_cv_gcc_int_atomics,
-[AC_TRY_LINK([],
- [int lock = 0;
- __sync_lock_test_and_set(&lock, 1);
- __sync_lock_release(&lock);],
- [pgac_cv_gcc_int_atomics="yes"],
- [pgac_cv_gcc_int_atomics="no"])])
-if test x"$pgac_cv_gcc_int_atomics" = x"yes"; then
- AC_DEFINE(HAVE_GCC_INT_ATOMICS, 1, [Define to 1 if you have __sync_lock_test_and_set(int *) and friends.])
-fi
-
# Lastly, restore full LIBS list and check for readline/libedit symbols
LIBS="$LIBS_including_readline"
@@ -1503,15 +1536,6 @@ ACX_PTHREAD # set thread flags
# enables 5-arg getpwuid_r, among other things.
PTHREAD_CFLAGS="$PTHREAD_CFLAGS -D_REENTRANT -D_THREAD_SAFE -D_POSIX_PTHREAD_SEMANTICS"
-
-# At this point, we don't want to muck with the compiler name for threading.
-# Let's see who fails, perhaps AIX. 2004-04-23
-if test "$PTHREAD_CC" != "$CC"; then
-AC_MSG_ERROR([
-PostgreSQL does not support platforms that require a special compiler
-for thread safety; use --disable-thread-safety to disable thread safety.])
-fi
-
# Check for *_r functions
_CFLAGS="$CFLAGS"
_LIBS="$LIBS"
@@ -1526,7 +1550,6 @@ fi
AC_CHECK_FUNCS([strerror_r getpwuid_r gethostbyname_r])
# Do test here with the proper thread flags
-PGAC_FUNC_GETPWUID_R_5ARG
PGAC_FUNC_STRERROR_R_INT
CFLAGS="$_CFLAGS"
@@ -1650,30 +1673,25 @@ fi
if test "$HAVE_LONG_LONG_INT_64" = yes ; then
if test $pgac_need_repl_snprintf = no; then
- PGAC_FUNC_SNPRINTF_LONG_LONG_INT_FORMAT
- if test "$LONG_LONG_INT_FORMAT" = ""; then
+ PGAC_FUNC_SNPRINTF_LONG_LONG_INT_MODIFIER
+ if test "$LONG_LONG_INT_MODIFIER" = ""; then
# Force usage of our own snprintf, since system snprintf is broken
pgac_need_repl_snprintf=yes
- LONG_LONG_INT_FORMAT='%lld'
+ LONG_LONG_INT_MODIFIER='ll'
fi
else
# Here if we previously decided we needed to use our own snprintf
- LONG_LONG_INT_FORMAT='%lld'
+ LONG_LONG_INT_MODIFIER='ll'
fi
- LONG_LONG_UINT_FORMAT=`echo "$LONG_LONG_INT_FORMAT" | sed 's/d$/u/'`
- INT64_FORMAT="\"$LONG_LONG_INT_FORMAT\""
- UINT64_FORMAT="\"$LONG_LONG_UINT_FORMAT\""
else
# Here if we are not using 'long long int' at all
- INT64_FORMAT='"%ld"'
- UINT64_FORMAT='"%lu"'
+ LONG_LONG_INT_MODIFIER='l'
fi
-AC_DEFINE_UNQUOTED(INT64_FORMAT, $INT64_FORMAT,
- [Define to the appropriate snprintf format for 64-bit ints.])
+INT64_MODIFIER="\"$LONG_LONG_INT_MODIFIER\""
-AC_DEFINE_UNQUOTED(UINT64_FORMAT, $UINT64_FORMAT,
- [Define to the appropriate snprintf format for unsigned 64-bit ints.])
+AC_DEFINE_UNQUOTED(INT64_MODIFIER, $INT64_MODIFIER,
+ [Define to the appropriate snprintf length modifier for 64-bit ints.])
# Also force use of our snprintf if the system's doesn't support the %z flag.
if test "$pgac_need_repl_snprintf" = no; then
@@ -1760,7 +1778,108 @@ AC_CHECK_TYPES([int8, uint8, int64, uint64], [], [],
# C, but is missing on some old platforms.
AC_CHECK_TYPES(sig_atomic_t, [], [], [#include <signal.h>])
+# Check for extensions offering the integer scalar type __int128.
+PGAC_TYPE_128BIT_INT
+
+# Check for various atomic operations now that we have checked how to declare
+# 64bit integers.
+PGAC_HAVE_GCC__SYNC_CHAR_TAS
+PGAC_HAVE_GCC__SYNC_INT32_TAS
+PGAC_HAVE_GCC__SYNC_INT32_CAS
+PGAC_HAVE_GCC__SYNC_INT64_CAS
+PGAC_HAVE_GCC__ATOMIC_INT32_CAS
+PGAC_HAVE_GCC__ATOMIC_INT64_CAS
+
+
+# Check for x86 cpuid instruction
+AC_CACHE_CHECK([for __get_cpuid], [pgac_cv__get_cpuid],
+[AC_TRY_LINK([#include <cpuid.h>],
+ [unsigned int exx[4] = {0, 0, 0, 0};
+ __get_cpuid(1, &exx[0], &exx[1], &exx[2], &exx[3]);
+ ],
+ [pgac_cv__get_cpuid="yes"],
+ [pgac_cv__get_cpuid="no"])])
+if test x"$pgac_cv__get_cpuid" = x"yes"; then
+ AC_DEFINE(HAVE__GET_CPUID, 1, [Define to 1 if you have __get_cpuid.])
+fi
+
+AC_CACHE_CHECK([for __cpuid], [pgac_cv__cpuid],
+[AC_TRY_LINK([#include <intrin.h>],
+ [unsigned int exx[4] = {0, 0, 0, 0};
+ __get_cpuid(exx[0], 1);
+ ],
+ [pgac_cv__cpuid="yes"],
+ [pgac_cv__cpuid="no"])])
+if test x"$pgac_cv__cpuid" = x"yes"; then
+ AC_DEFINE(HAVE__CPUID, 1, [Define to 1 if you have __cpuid.])
+fi
+
+# Check for Intel SSE 4.2 intrinsics to do CRC calculations.
+#
+# First check if the _mm_crc32_u8 and _mm_crc32_u64 intrinsics can be used
+# with the default compiler flags. If not, check if adding the -msse4.2
+# flag helps. CFLAGS_SSE42 is set to -msse4.2 if that's required.
+PGAC_SSE42_CRC32_INTRINSICS([])
+if test x"$pgac_sse42_crc32_intrinsics" != x"yes"; then
+ PGAC_SSE42_CRC32_INTRINSICS([-msse4.2])
+fi
+AC_SUBST(CFLAGS_SSE42)
+
+# Are we targeting a processor that supports SSE 4.2? gcc, clang and icc all
+# define __SSE4_2__ in that case.
+AC_TRY_COMPILE([], [
+#ifndef __SSE4_2__
+#error __SSE4_2__ not defined
+#endif
+], [SSE4_2_TARGETED=1])
+
+# Select CRC-32C implementation.
+#
+# If we are targeting a processor that has SSE 4.2 instructions, we can use the
+# special CRC instructions for calculating CRC-32C. If we're not targeting such
+# a processor, but we can nevertheless produce code that uses the SSE
+# intrinsics, perhaps with some extra CFLAGS, compile both implementations and
+# select which one to use at runtime, depending on whether SSE 4.2 is supported
+# by the processor we're running on.
+#
+# You can override this logic by setting the appropriate USE_*_CRC32 flag to 1
+# in the template or configure command line.
+if test x"$USE_SSE42_CRC32C" = x"" && test x"$USE_SSE42_CRC32C_WITH_RUNTIME_CHECK" = x"" && test x"$USE_SLICING_BY_8_CRC32C" = x""; then
+ if test x"$pgac_sse42_crc32_intrinsics" = x"yes" && test x"$SSE4_2_TARGETED" = x"1" ; then
+ USE_SSE42_CRC32C=1
+ else
+ # the CPUID instruction is needed for the runtime check.
+ if test x"$pgac_sse42_crc32_intrinsics" = x"yes" && (test x"$pgac_cv__get_cpuid" = x"yes" || test x"$pgac_cv__cpuid" = x"yes"); then
+ USE_SSE42_CRC32C_WITH_RUNTIME_CHECK=1
+ else
+ # fall back to slicing-by-8 algorithm which doesn't require any special
+ # CPU support.
+ USE_SLICING_BY_8_CRC32C=1
+ fi
+ fi
+fi
+
+# Set PG_CRC32C_OBJS appropriately depending on the selected implementation.
+AC_MSG_CHECKING([which CRC-32C implementation to use])
+if test x"$USE_SSE42_CRC32C" = x"1"; then
+ AC_DEFINE(USE_SSE42_CRC32C, 1, [Define to 1 use Intel SSE 4.2 CRC instructions.])
+ PG_CRC32C_OBJS="pg_crc32c_sse42.o"
+ AC_MSG_RESULT(SSE 4.2)
+else
+ if test x"$USE_SSE42_CRC32C_WITH_RUNTIME_CHECK" = x"1"; then
+ AC_DEFINE(USE_SSE42_CRC32C_WITH_RUNTIME_CHECK, 1, [Define to 1 to use Intel SSSE 4.2 CRC instructions with a runtime check.])
+ PG_CRC32C_OBJS="pg_crc32c_sse42.o pg_crc32c_sb8.o pg_crc32c_choose.o"
+ AC_MSG_RESULT(SSE 4.2 with runtime check)
+ else
+ AC_DEFINE(USE_SLICING_BY_8_CRC32C, 1, [Define to 1 to use Intel SSE 4.2 CRC instructions with a runtime check.])
+ PG_CRC32C_OBJS="pg_crc32c_sb8.o"
+ AC_MSG_RESULT(slicing-by-8)
+ fi
+fi
+AC_SUBST(PG_CRC32C_OBJS)
+
+# Check that POSIX signals are available if thread safety is enabled.
if test "$PORTNAME" != "win32"
then
PGAC_FUNC_POSIX_SIGNALS
@@ -1872,13 +1991,23 @@ PGAC_PROG_JADE
PGAC_CHECK_DOCBOOK(4.2)
PGAC_PATH_DOCBOOK_STYLESHEETS
PGAC_PATH_COLLATEINDEX
+AC_CHECK_PROGS(DBTOEPUB, dbtoepub)
+AC_CHECK_PROGS(XMLLINT, xmllint)
AC_CHECK_PROGS(XSLTPROC, xsltproc)
AC_CHECK_PROGS(OSX, [osx sgml2xml sx])
#
# Check for test tools
#
-AC_CHECK_PROGS(PROVE, prove)
+if test "$enable_tap_tests" = yes; then
+ AC_CHECK_PROGS(PROVE, prove)
+ if test -z "$PROVE"; then
+ AC_MSG_ERROR([prove not found])
+ fi
+ if test -z "$PERL"; then
+ AC_MSG_ERROR([Perl not found])
+ fi
+fi
# Thread testing
diff --git a/contrib/Makefile b/contrib/Makefile
index 9b6ac2ec5a..b8230aadf7 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -16,7 +16,6 @@ SUBDIRS = \
dblink \
dict_int \
dict_xsyn \
- dummy_seclabel \
earthdistance \
file_fdw \
fuzzystrmatch \
@@ -29,7 +28,6 @@ SUBDIRS = \
oid2name \
pageinspect \
passwordcheck \
- pg_archivecleanup \
pg_buffercache \
pg_freespacemap \
pg_prewarm \
@@ -38,9 +36,6 @@ SUBDIRS = \
pg_test_fsync \
pg_test_timing \
pg_trgm \
- pg_upgrade \
- pg_upgrade_support \
- pgbench \
pgcrypto \
pgrowlocks \
pgstattuple \
@@ -53,13 +48,10 @@ SUBDIRS = \
tablefunc \
tcn \
test_decoding \
- test_parser \
- test_shm_mq \
tsearch2 \
unaccent \
vacuumlo \
- stormstats \
- worker_spi
+ stormstats
ifeq ($(with_openssl),yes)
SUBDIRS += sslinfo
diff --git a/contrib/adminpack/Makefile b/contrib/adminpack/Makefile
index 5cbc8f0c71..f065f84bfb 100644
--- a/contrib/adminpack/Makefile
+++ b/contrib/adminpack/Makefile
@@ -1,11 +1,12 @@
# contrib/adminpack/Makefile
MODULE_big = adminpack
-OBJS = adminpack.o
+OBJS = adminpack.o $(WIN32RES)
PG_CPPFLAGS = -I$(libpq_srcdir)
EXTENSION = adminpack
DATA = adminpack--1.0.sql
+PGFILEDESC = "adminpack - support functions for pgAdmin"
ifdef USE_PGXS
PG_CONFIG = pg_config
diff --git a/contrib/adminpack/adminpack.c b/contrib/adminpack/adminpack.c
index 8193b1f1d0..2937a9caca 100644
--- a/contrib/adminpack/adminpack.c
+++ b/contrib/adminpack/adminpack.c
@@ -3,7 +3,7 @@
* adminpack.c
*
*
- * Copyright (c) 2002-2014, PostgreSQL Global Development Group
+ * Copyright (c) 2002-2015, PostgreSQL Global Development Group
*
* Author: Andreas Pflug <pgadmin@pse-consulting.de>
*
diff --git a/contrib/auth_delay/Makefile b/contrib/auth_delay/Makefile
index 09d2d5418c..4b86ec37f0 100644
--- a/contrib/auth_delay/Makefile
+++ b/contrib/auth_delay/Makefile
@@ -1,6 +1,7 @@
# contrib/auth_delay/Makefile
MODULES = auth_delay
+PGFILEDESC = "auth_delay - delay authentication failure reports"
ifdef USE_PGXS
PG_CONFIG = pg_config
diff --git a/contrib/auto_explain/Makefile b/contrib/auto_explain/Makefile
index 2d1443fe48..fcf36c5ab0 100644
--- a/contrib/auto_explain/Makefile
+++ b/contrib/auto_explain/Makefile
@@ -1,7 +1,8 @@
# contrib/auto_explain/Makefile
MODULE_big = auto_explain
-OBJS = auto_explain.o
+OBJS = auto_explain.o $(WIN32RES)
+PGFILEDESC = "auto_explain - logging facility for execution plans"
ifdef USE_PGXS
PG_CONFIG = pg_config
diff --git a/contrib/auto_explain/auto_explain.c b/contrib/auto_explain/auto_explain.c
index cbbd25753f..2a184ed886 100644
--- a/contrib/auto_explain/auto_explain.c
+++ b/contrib/auto_explain/auto_explain.c
@@ -3,7 +3,7 @@
* auto_explain.c
*
*
- * Copyright (c) 2008-2014, PostgreSQL Global Development Group
+ * Copyright (c) 2008-2015, PostgreSQL Global Development Group
*
* IDENTIFICATION
* contrib/auto_explain/auto_explain.c
@@ -26,7 +26,7 @@ static bool auto_explain_log_analyze = false;
static bool auto_explain_log_verbose = false;
static bool auto_explain_log_buffers = false;
static bool auto_explain_log_triggers = false;
-static bool auto_explain_log_timing = false;
+static bool auto_explain_log_timing = true;
static int auto_explain_log_format = EXPLAIN_FORMAT_TEXT;
static bool auto_explain_log_nested_statements = false;
@@ -200,8 +200,6 @@ explain_ExecutorStart(QueryDesc *queryDesc, int eflags)
queryDesc->instrument_options |= INSTRUMENT_TIMER;
else
queryDesc->instrument_options |= INSTRUMENT_ROWS;
-
-
if (auto_explain_log_buffers)
queryDesc->instrument_options |= INSTRUMENT_BUFFERS;
}
@@ -296,30 +294,31 @@ explain_ExecutorEnd(QueryDesc *queryDesc)
msec = queryDesc->totaltime->total * 1000.0;
if (msec >= auto_explain_log_min_duration)
{
- ExplainState es;
-
- ExplainInitState(&es);
- es.analyze = (queryDesc->instrument_options && auto_explain_log_analyze);
- es.verbose = auto_explain_log_verbose;
- es.buffers = (es.analyze && auto_explain_log_buffers);
- es.format = auto_explain_log_format;
-
- ExplainBeginOutput(&es);
- ExplainQueryText(&es, queryDesc);
- ExplainPrintPlan(&es, queryDesc);
- if (es.analyze && auto_explain_log_triggers)
- ExplainPrintTriggers(&es, queryDesc);
- ExplainEndOutput(&es);
+ ExplainState *es = NewExplainState();
+
+ es->analyze = (queryDesc->instrument_options && auto_explain_log_analyze);
+ es->verbose = auto_explain_log_verbose;
+ es->buffers = (es->analyze && auto_explain_log_buffers);
+ es->timing = (es->analyze && auto_explain_log_timing);
+ es->summary = es->analyze;
+ es->format = auto_explain_log_format;
+
+ ExplainBeginOutput(es);
+ ExplainQueryText(es, queryDesc);
+ ExplainPrintPlan(es, queryDesc);
+ if (es->analyze && auto_explain_log_triggers)
+ ExplainPrintTriggers(es, queryDesc);
+ ExplainEndOutput(es);
/* Remove last line break */
- if (es.str->len > 0 && es.str->data[es.str->len - 1] == '\n')
- es.str->data[--es.str->len] = '\0';
+ if (es->str->len > 0 && es->str->data[es->str->len - 1] == '\n')
+ es->str->data[--es->str->len] = '\0';
/* Fix JSON to output an object */
if (auto_explain_log_format == EXPLAIN_FORMAT_JSON)
{
- es.str->data[0] = '{';
- es.str->data[es.str->len - 1] = '}';
+ es->str->data[0] = '{';
+ es->str->data[es->str->len - 1] = '}';
}
/*
@@ -330,10 +329,10 @@ explain_ExecutorEnd(QueryDesc *queryDesc)
*/
ereport(LOG,
(errmsg("duration: %.3f ms plan:\n%s",
- msec, es.str->data),
+ msec, es->str->data),
errhidestmt(true)));
- pfree(es.str->data);
+ pfree(es->str->data);
}
}
diff --git a/contrib/btree_gin/Makefile b/contrib/btree_gin/Makefile
index 09fd3e6e11..0492091599 100644
--- a/contrib/btree_gin/Makefile
+++ b/contrib/btree_gin/Makefile
@@ -1,10 +1,11 @@
# contrib/btree_gin/Makefile
MODULE_big = btree_gin
-OBJS = btree_gin.o
+OBJS = btree_gin.o $(WIN32RES)
EXTENSION = btree_gin
DATA = btree_gin--1.0.sql btree_gin--unpackaged--1.0.sql
+PGFILEDESC = "btree_gin - B-tree equivalent GIN operator classes"
REGRESS = install_btree_gin int2 int4 int8 float4 float8 money oid \
timestamp timestamptz time timetz date interval \
diff --git a/contrib/btree_gin/btree_gin--unpackaged--1.0.sql b/contrib/btree_gin/btree_gin--unpackaged--1.0.sql
index 8dfafc1e8b..3dae2dd38f 100644
--- a/contrib/btree_gin/btree_gin--unpackaged--1.0.sql
+++ b/contrib/btree_gin/btree_gin--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/btree_gin/btree_gin--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION btree_gin" to load this file. \quit
+\echo Use "CREATE EXTENSION btree_gin FROM unpackaged" to load this file. \quit
ALTER EXTENSION btree_gin ADD function gin_btree_consistent(internal,smallint,anyelement,integer,internal,internal);
ALTER EXTENSION btree_gin ADD function gin_extract_value_int2(smallint,internal);
diff --git a/contrib/btree_gin/btree_gin.c b/contrib/btree_gin/btree_gin.c
index 87d23e0350..1a5bb3cdc6 100644
--- a/contrib/btree_gin/btree_gin.c
+++ b/contrib/btree_gin/btree_gin.c
@@ -17,34 +17,30 @@
PG_MODULE_MAGIC;
-typedef struct TypeInfo
-{
- bool is_varlena;
- Datum (*leftmostvalue) (void);
- Datum (*typecmp) (FunctionCallInfo);
-} TypeInfo;
-
typedef struct QueryInfo
{
StrategyNumber strategy;
Datum datum;
+ bool is_varlena;
+ Datum (*typecmp) (FunctionCallInfo);
} QueryInfo;
-#define GIN_EXTRACT_VALUE(type) \
-PG_FUNCTION_INFO_V1(gin_extract_value_##type); \
-Datum \
-gin_extract_value_##type(PG_FUNCTION_ARGS) \
-{ \
- Datum datum = PG_GETARG_DATUM(0); \
- int32 *nentries = (int32 *) PG_GETARG_POINTER(1); \
- Datum *entries = (Datum *) palloc(sizeof(Datum)); \
- \
- if ( TypeInfo_##type.is_varlena ) \
- datum = PointerGetDatum(PG_DETOAST_DATUM(datum)); \
- entries[0] = datum; \
- *nentries = 1; \
- \
- PG_RETURN_POINTER(entries); \
+
+/*** GIN support functions shared by all datatypes ***/
+
+static Datum
+gin_btree_extract_value(FunctionCallInfo fcinfo, bool is_varlena)
+{
+ Datum datum = PG_GETARG_DATUM(0);
+ int32 *nentries = (int32 *) PG_GETARG_POINTER(1);
+ Datum *entries = (Datum *) palloc(sizeof(Datum));
+
+ if (is_varlena)
+ datum = PointerGetDatum(PG_DETOAST_DATUM(datum));
+ entries[0] = datum;
+ *nentries = 1;
+
+ PG_RETURN_POINTER(entries);
}
/*
@@ -55,49 +51,51 @@ gin_extract_value_##type(PG_FUNCTION_ARGS) \
* key, and work forward until the supplied query datum (which must be
* sent along inside the QueryInfo structure).
*/
+static Datum
+gin_btree_extract_query(FunctionCallInfo fcinfo,
+ bool is_varlena,
+ Datum (*leftmostvalue) (void),
+ Datum (*typecmp) (FunctionCallInfo))
+{
+ Datum datum = PG_GETARG_DATUM(0);
+ int32 *nentries = (int32 *) PG_GETARG_POINTER(1);
+ StrategyNumber strategy = PG_GETARG_UINT16(2);
+ bool **partialmatch = (bool **) PG_GETARG_POINTER(3);
+ Pointer **extra_data = (Pointer **) PG_GETARG_POINTER(4);
+ Datum *entries = (Datum *) palloc(sizeof(Datum));
+ QueryInfo *data = (QueryInfo *) palloc(sizeof(QueryInfo));
+ bool *ptr_partialmatch;
+
+ *nentries = 1;
+ ptr_partialmatch = *partialmatch = (bool *) palloc(sizeof(bool));
+ *ptr_partialmatch = false;
+ if (is_varlena)
+ datum = PointerGetDatum(PG_DETOAST_DATUM(datum));
+ data->strategy = strategy;
+ data->datum = datum;
+ data->is_varlena = is_varlena;
+ data->typecmp = typecmp;
+ *extra_data = (Pointer *) palloc(sizeof(Pointer));
+ **extra_data = (Pointer) data;
+
+ switch (strategy)
+ {
+ case BTLessStrategyNumber:
+ case BTLessEqualStrategyNumber:
+ entries[0] = leftmostvalue();
+ *ptr_partialmatch = true;
+ break;
+ case BTGreaterEqualStrategyNumber:
+ case BTGreaterStrategyNumber:
+ *ptr_partialmatch = true;
+ case BTEqualStrategyNumber:
+ entries[0] = datum;
+ break;
+ default:
+ elog(ERROR, "unrecognized strategy number: %d", strategy);
+ }
-#define GIN_EXTRACT_QUERY(type) \
-PG_FUNCTION_INFO_V1(gin_extract_query_##type); \
-Datum \
-gin_extract_query_##type(PG_FUNCTION_ARGS) \
-{ \
- Datum datum = PG_GETARG_DATUM(0); \
- int32 *nentries = (int32 *) PG_GETARG_POINTER(1); \
- StrategyNumber strategy = PG_GETARG_UINT16(2); \
- bool **partialmatch = (bool **) PG_GETARG_POINTER(3); \
- Pointer **extra_data = (Pointer **) PG_GETARG_POINTER(4); \
- Datum *entries = (Datum *) palloc(sizeof(Datum)); \
- QueryInfo *data = (QueryInfo *) palloc(sizeof(QueryInfo)); \
- bool *ptr_partialmatch; \
- \
- *nentries = 1; \
- ptr_partialmatch = *partialmatch = (bool *) palloc(sizeof(bool)); \
- *ptr_partialmatch = false; \
- if ( TypeInfo_##type.is_varlena ) \
- datum = PointerGetDatum(PG_DETOAST_DATUM(datum)); \
- data->strategy = strategy; \
- data->datum = datum; \
- *extra_data = (Pointer *) palloc(sizeof(Pointer)); \
- **extra_data = (Pointer) data; \
- \
- switch (strategy) \
- { \
- case BTLessStrategyNumber: \
- case BTLessEqualStrategyNumber: \
- entries[0] = TypeInfo_##type.leftmostvalue(); \
- *ptr_partialmatch = true; \
- break; \
- case BTGreaterEqualStrategyNumber: \
- case BTGreaterStrategyNumber: \
- *ptr_partialmatch = true; \
- case BTEqualStrategyNumber: \
- entries[0] = datum; \
- break; \
- default: \
- elog(ERROR, "unrecognized strategy number: %d", strategy); \
- } \
- \
- PG_RETURN_POINTER(entries); \
+ PG_RETURN_POINTER(entries);
}
/*
@@ -105,78 +103,70 @@ gin_extract_query_##type(PG_FUNCTION_ARGS) \
* strategy it is a left-most value. So, use original datum from QueryInfo
* to decide to stop scanning or not. Datum b is always from index.
*/
-#define GIN_COMPARE_PREFIX(type) \
-PG_FUNCTION_INFO_V1(gin_compare_prefix_##type); \
-Datum \
-gin_compare_prefix_##type(PG_FUNCTION_ARGS) \
-{ \
- Datum a = PG_GETARG_DATUM(0); \
- Datum b = PG_GETARG_DATUM(1); \
- QueryInfo *data = (QueryInfo *) PG_GETARG_POINTER(3); \
- int32 res, \
- cmp; \
- \
- cmp = DatumGetInt32(DirectFunctionCall2Coll( \
- TypeInfo_##type.typecmp, \
- PG_GET_COLLATION(), \
- (data->strategy == BTLessStrategyNumber || \
- data->strategy == BTLessEqualStrategyNumber) \
- ? data->datum : a, \
- b)); \
- \
- switch (data->strategy) \
- { \
- case BTLessStrategyNumber: \
- /* If original datum > indexed one then return match */ \
- if (cmp > 0) \
- res = 0; \
- else \
- res = 1; \
- break; \
- case BTLessEqualStrategyNumber: \
- /* The same except equality */ \
- if (cmp >= 0) \
- res = 0; \
- else \
- res = 1; \
- break; \
- case BTEqualStrategyNumber: \
- if (cmp != 0) \
- res = 1; \
- else \
- res = 0; \
- break; \
- case BTGreaterEqualStrategyNumber: \
- /* If original datum <= indexed one then return match */ \
- if (cmp <= 0) \
- res = 0; \
- else \
- res = 1; \
- break; \
- case BTGreaterStrategyNumber: \
- /* If original datum <= indexed one then return match */ \
- /* If original datum == indexed one then continue scan */ \
- if (cmp < 0) \
- res = 0; \
- else if (cmp == 0) \
- res = -1; \
- else \
- res = 1; \
- break; \
- default: \
- elog(ERROR, "unrecognized strategy number: %d", \
- data->strategy); \
- res = 0; \
- } \
- \
- PG_RETURN_INT32(res); \
-}
-
-#define GIN_SUPPORT(type) \
- GIN_EXTRACT_VALUE(type) \
- GIN_EXTRACT_QUERY(type) \
- GIN_COMPARE_PREFIX(type)
+static Datum
+gin_btree_compare_prefix(FunctionCallInfo fcinfo)
+{
+ Datum a = PG_GETARG_DATUM(0);
+ Datum b = PG_GETARG_DATUM(1);
+ QueryInfo *data = (QueryInfo *) PG_GETARG_POINTER(3);
+ int32 res,
+ cmp;
+
+ cmp = DatumGetInt32(DirectFunctionCall2Coll(
+ data->typecmp,
+ PG_GET_COLLATION(),
+ (data->strategy == BTLessStrategyNumber ||
+ data->strategy == BTLessEqualStrategyNumber)
+ ? data->datum : a,
+ b));
+
+ switch (data->strategy)
+ {
+ case BTLessStrategyNumber:
+ /* If original datum > indexed one then return match */
+ if (cmp > 0)
+ res = 0;
+ else
+ res = 1;
+ break;
+ case BTLessEqualStrategyNumber:
+ /* The same except equality */
+ if (cmp >= 0)
+ res = 0;
+ else
+ res = 1;
+ break;
+ case BTEqualStrategyNumber:
+ if (cmp != 0)
+ res = 1;
+ else
+ res = 0;
+ break;
+ case BTGreaterEqualStrategyNumber:
+ /* If original datum <= indexed one then return match */
+ if (cmp <= 0)
+ res = 0;
+ else
+ res = 1;
+ break;
+ case BTGreaterStrategyNumber:
+ /* If original datum <= indexed one then return match */
+ /* If original datum == indexed one then continue scan */
+ if (cmp < 0)
+ res = 0;
+ else if (cmp == 0)
+ res = -1;
+ else
+ res = 1;
+ break;
+ default:
+ elog(ERROR, "unrecognized strategy number: %d",
+ data->strategy);
+ res = 0;
+ }
+ PG_RETURN_INT32(res);
+}
PG_FUNCTION_INFO_V1(gin_btree_consistent);
Datum
@@ -188,23 +178,45 @@ gin_btree_consistent(PG_FUNCTION_ARGS)
PG_RETURN_BOOL(true);
}
+/*** GIN_SUPPORT macro defines the datatype specific functions ***/
+
+#define GIN_SUPPORT(type, is_varlena, leftmostvalue, typecmp) \
+PG_FUNCTION_INFO_V1(gin_extract_value_##type); \
+Datum \
+gin_extract_value_##type(PG_FUNCTION_ARGS) \
+{ \
+ return gin_btree_extract_value(fcinfo, is_varlena); \
+} \
+PG_FUNCTION_INFO_V1(gin_extract_query_##type); \
+Datum \
+gin_extract_query_##type(PG_FUNCTION_ARGS) \
+{ \
+ return gin_btree_extract_query(fcinfo, \
+ is_varlena, leftmostvalue, typecmp); \
+} \
+PG_FUNCTION_INFO_V1(gin_compare_prefix_##type); \
+Datum \
+gin_compare_prefix_##type(PG_FUNCTION_ARGS) \
+{ \
+ return gin_btree_compare_prefix(fcinfo); \
+}
+
+
+/*** Datatype specifications ***/
+
static Datum
leftmostvalue_int2(void)
{
return Int16GetDatum(SHRT_MIN);
}
-static TypeInfo TypeInfo_int2 = {false, leftmostvalue_int2, btint2cmp};
-
-GIN_SUPPORT(int2)
+GIN_SUPPORT(int2, false, leftmostvalue_int2, btint2cmp)
static Datum
leftmostvalue_int4(void)
{
return Int32GetDatum(INT_MIN);
}
-static TypeInfo TypeInfo_int4 = {false, leftmostvalue_int4, btint4cmp};
-
-GIN_SUPPORT(int4)
+GIN_SUPPORT(int4, false, leftmostvalue_int4, btint4cmp)
static Datum
leftmostvalue_int8(void)
@@ -214,27 +226,21 @@ leftmostvalue_int8(void)
*/
return Int64GetDatum(SEQ_MINVALUE);
}
-static TypeInfo TypeInfo_int8 = {false, leftmostvalue_int8, btint8cmp};
-
-GIN_SUPPORT(int8)
+GIN_SUPPORT(int8, false, leftmostvalue_int8, btint8cmp)
static Datum
leftmostvalue_float4(void)
{
return Float4GetDatum(-get_float4_infinity());
}
-static TypeInfo TypeInfo_float4 = {false, leftmostvalue_float4, btfloat4cmp};
-
-GIN_SUPPORT(float4)
+GIN_SUPPORT(float4, false, leftmostvalue_float4, btfloat4cmp)
static Datum
leftmostvalue_float8(void)
{
return Float8GetDatum(-get_float8_infinity());
}
-static TypeInfo TypeInfo_float8 = {false, leftmostvalue_float8, btfloat8cmp};
-
-GIN_SUPPORT(float8)
+GIN_SUPPORT(float8, false, leftmostvalue_float8, btfloat8cmp)
static Datum
leftmostvalue_money(void)
@@ -244,40 +250,30 @@ leftmostvalue_money(void)
*/
return Int64GetDatum(SEQ_MINVALUE);
}
-static TypeInfo TypeInfo_money = {false, leftmostvalue_money, cash_cmp};
-
-GIN_SUPPORT(money)
+GIN_SUPPORT(money, false, leftmostvalue_money, cash_cmp)
static Datum
leftmostvalue_oid(void)
{
return ObjectIdGetDatum(0);
}
-static TypeInfo TypeInfo_oid = {false, leftmostvalue_oid, btoidcmp};
-
-GIN_SUPPORT(oid)
+GIN_SUPPORT(oid, false, leftmostvalue_oid, btoidcmp)
static Datum
leftmostvalue_timestamp(void)
{
return TimestampGetDatum(DT_NOBEGIN);
}
-static TypeInfo TypeInfo_timestamp = {false, leftmostvalue_timestamp, timestamp_cmp};
-
-GIN_SUPPORT(timestamp)
-
-static TypeInfo TypeInfo_timestamptz = {false, leftmostvalue_timestamp, timestamp_cmp};
+GIN_SUPPORT(timestamp, false, leftmostvalue_timestamp, timestamp_cmp)
-GIN_SUPPORT(timestamptz)
+GIN_SUPPORT(timestamptz, false, leftmostvalue_timestamp, timestamp_cmp)
static Datum
leftmostvalue_time(void)
{
return TimeADTGetDatum(0);
}
-static TypeInfo TypeInfo_time = {false, leftmostvalue_time, time_cmp};
-
-GIN_SUPPORT(time)
+GIN_SUPPORT(time, false, leftmostvalue_time, time_cmp)
static Datum
leftmostvalue_timetz(void)
@@ -289,18 +285,14 @@ leftmostvalue_timetz(void)
return TimeTzADTPGetDatum(v);
}
-static TypeInfo TypeInfo_timetz = {false, leftmostvalue_timetz, timetz_cmp};
-
-GIN_SUPPORT(timetz)
+GIN_SUPPORT(timetz, false, leftmostvalue_timetz, timetz_cmp)
static Datum
leftmostvalue_date(void)
{
return DateADTGetDatum(DATEVAL_NOBEGIN);
}
-static TypeInfo TypeInfo_date = {false, leftmostvalue_date, date_cmp};
-
-GIN_SUPPORT(date)
+GIN_SUPPORT(date, false, leftmostvalue_date, date_cmp)
static Datum
leftmostvalue_interval(void)
@@ -312,9 +304,7 @@ leftmostvalue_interval(void)
v->month = 0;
return IntervalPGetDatum(v);
}
-static TypeInfo TypeInfo_interval = {false, leftmostvalue_interval, interval_cmp};
-
-GIN_SUPPORT(interval)
+GIN_SUPPORT(interval, false, leftmostvalue_interval, interval_cmp)
static Datum
leftmostvalue_macaddr(void)
@@ -323,47 +313,32 @@ leftmostvalue_macaddr(void)
return MacaddrPGetDatum(v);
}
-static TypeInfo TypeInfo_macaddr = {false, leftmostvalue_macaddr, macaddr_cmp};
-
-GIN_SUPPORT(macaddr)
+GIN_SUPPORT(macaddr, false, leftmostvalue_macaddr, macaddr_cmp)
static Datum
leftmostvalue_inet(void)
{
- return DirectFunctionCall3(inet_in,
- CStringGetDatum("0.0.0.0/0"),
- ObjectIdGetDatum(0),
- Int32GetDatum(-1));
+ return DirectFunctionCall1(inet_in, CStringGetDatum("0.0.0.0/0"));
}
-static TypeInfo TypeInfo_inet = {true, leftmostvalue_inet, network_cmp};
+GIN_SUPPORT(inet, true, leftmostvalue_inet, network_cmp)
-GIN_SUPPORT(inet)
-
-static TypeInfo TypeInfo_cidr = {true, leftmostvalue_inet, network_cmp};
-
-GIN_SUPPORT(cidr)
+GIN_SUPPORT(cidr, true, leftmostvalue_inet, network_cmp)
static Datum
leftmostvalue_text(void)
{
return PointerGetDatum(cstring_to_text_with_len("", 0));
}
-static TypeInfo TypeInfo_text = {true, leftmostvalue_text, bttextcmp};
-
-GIN_SUPPORT(text)
+GIN_SUPPORT(text, true, leftmostvalue_text, bttextcmp)
static Datum
leftmostvalue_char(void)
{
return CharGetDatum(SCHAR_MIN);
}
-static TypeInfo TypeInfo_char = {false, leftmostvalue_char, btcharcmp};
-
-GIN_SUPPORT(char)
-
-static TypeInfo TypeInfo_bytea = {true, leftmostvalue_text, byteacmp};
+GIN_SUPPORT(char, false, leftmostvalue_char, btcharcmp)
-GIN_SUPPORT(bytea)
+GIN_SUPPORT(bytea, true, leftmostvalue_text, byteacmp)
static Datum
leftmostvalue_bit(void)
@@ -373,9 +348,7 @@ leftmostvalue_bit(void)
ObjectIdGetDatum(0),
Int32GetDatum(-1));
}
-static TypeInfo TypeInfo_bit = {true, leftmostvalue_bit, bitcmp};
-
-GIN_SUPPORT(bit)
+GIN_SUPPORT(bit, true, leftmostvalue_bit, bitcmp)
static Datum
leftmostvalue_varbit(void)
@@ -385,9 +358,7 @@ leftmostvalue_varbit(void)
ObjectIdGetDatum(0),
Int32GetDatum(-1));
}
-static TypeInfo TypeInfo_varbit = {true, leftmostvalue_varbit, bitcmp};
-
-GIN_SUPPORT(varbit)
+GIN_SUPPORT(varbit, true, leftmostvalue_varbit, bitcmp)
/*
* Numeric type hasn't a real left-most value, so we use PointerGetDatum(NULL)
@@ -431,7 +402,4 @@ leftmostvalue_numeric(void)
{
return PointerGetDatum(NULL);
}
-
-static TypeInfo TypeInfo_numeric = {true, leftmostvalue_numeric, gin_numeric_cmp};
-
-GIN_SUPPORT(numeric)
+GIN_SUPPORT(numeric, true, leftmostvalue_numeric, gin_numeric_cmp)
diff --git a/contrib/btree_gist/Makefile b/contrib/btree_gist/Makefile
index ba4af14658..9b7d61dff7 100644
--- a/contrib/btree_gist/Makefile
+++ b/contrib/btree_gist/Makefile
@@ -6,10 +6,12 @@ OBJS = btree_gist.o btree_utils_num.o btree_utils_var.o btree_int2.o \
btree_int4.o btree_int8.o btree_float4.o btree_float8.o btree_cash.o \
btree_oid.o btree_ts.o btree_time.o btree_date.o btree_interval.o \
btree_macaddr.o btree_inet.o btree_text.o btree_bytea.o btree_bit.o \
- btree_numeric.o
+ btree_numeric.o $(WIN32RES)
EXTENSION = btree_gist
-DATA = btree_gist--1.0.sql btree_gist--unpackaged--1.0.sql
+DATA = btree_gist--1.1.sql btree_gist--unpackaged--1.0.sql \
+ btree_gist--1.0--1.1.sql
+PGFILEDESC = "btree_gist - B-tree equivalent GIST operator classes"
REGRESS = init int2 int4 int8 float4 float8 cash oid timestamp timestamptz \
time timetz date interval macaddr inet cidr text varchar char bytea \
diff --git a/contrib/btree_gist/btree_bit.c b/contrib/btree_gist/btree_bit.c
index 76297515c5..af210439f0 100644
--- a/contrib/btree_gist/btree_bit.c
+++ b/contrib/btree_gist/btree_bit.c
@@ -99,7 +99,7 @@ gbt_bit_l2n(GBT_VARKEY *leaf)
o = gbt_bit_xfrm(r.lower);
r.upper = r.lower = o;
- out = gbt_var_key_copy(&r, TRUE);
+ out = gbt_var_key_copy(&r);
pfree(o);
return out;
diff --git a/contrib/btree_gist/btree_cash.c b/contrib/btree_gist/btree_cash.c
index 63f86ebeef..aa14735338 100644
--- a/contrib/btree_gist/btree_cash.c
+++ b/contrib/btree_gist/btree_cash.c
@@ -17,6 +17,7 @@ typedef struct
** Cash ops
*/
PG_FUNCTION_INFO_V1(gbt_cash_compress);
+PG_FUNCTION_INFO_V1(gbt_cash_fetch);
PG_FUNCTION_INFO_V1(gbt_cash_union);
PG_FUNCTION_INFO_V1(gbt_cash_picksplit);
PG_FUNCTION_INFO_V1(gbt_cash_consistent);
@@ -119,11 +120,17 @@ Datum
gbt_cash_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
+Datum
+gbt_cash_fetch(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
+}
Datum
gbt_cash_consistent(PG_FUNCTION_ARGS)
diff --git a/contrib/btree_gist/btree_date.c b/contrib/btree_gist/btree_date.c
index 7a4c6aa600..bb516a9500 100644
--- a/contrib/btree_gist/btree_date.c
+++ b/contrib/btree_gist/btree_date.c
@@ -17,6 +17,7 @@ typedef struct
** date ops
*/
PG_FUNCTION_INFO_V1(gbt_date_compress);
+PG_FUNCTION_INFO_V1(gbt_date_fetch);
PG_FUNCTION_INFO_V1(gbt_date_union);
PG_FUNCTION_INFO_V1(gbt_date_picksplit);
PG_FUNCTION_INFO_V1(gbt_date_consistent);
@@ -130,12 +131,17 @@ Datum
gbt_date_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
+Datum
+gbt_date_fetch(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
+}
Datum
gbt_date_consistent(PG_FUNCTION_ARGS)
diff --git a/contrib/btree_gist/btree_float4.c b/contrib/btree_gist/btree_float4.c
index 778d8dad84..13dc4a5c0f 100644
--- a/contrib/btree_gist/btree_float4.c
+++ b/contrib/btree_gist/btree_float4.c
@@ -16,6 +16,7 @@ typedef struct float4key
** float4 ops
*/
PG_FUNCTION_INFO_V1(gbt_float4_compress);
+PG_FUNCTION_INFO_V1(gbt_float4_fetch);
PG_FUNCTION_INFO_V1(gbt_float4_union);
PG_FUNCTION_INFO_V1(gbt_float4_picksplit);
PG_FUNCTION_INFO_V1(gbt_float4_consistent);
@@ -112,11 +113,17 @@ Datum
gbt_float4_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
+Datum
+gbt_float4_fetch(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
+}
Datum
gbt_float4_consistent(PG_FUNCTION_ARGS)
diff --git a/contrib/btree_gist/btree_float8.c b/contrib/btree_gist/btree_float8.c
index c898bf2d97..c3a2415733 100644
--- a/contrib/btree_gist/btree_float8.c
+++ b/contrib/btree_gist/btree_float8.c
@@ -16,6 +16,7 @@ typedef struct float8key
** float8 ops
*/
PG_FUNCTION_INFO_V1(gbt_float8_compress);
+PG_FUNCTION_INFO_V1(gbt_float8_fetch);
PG_FUNCTION_INFO_V1(gbt_float8_union);
PG_FUNCTION_INFO_V1(gbt_float8_picksplit);
PG_FUNCTION_INFO_V1(gbt_float8_consistent);
@@ -119,11 +120,17 @@ Datum
gbt_float8_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
+Datum
+gbt_float8_fetch(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
+}
Datum
gbt_float8_consistent(PG_FUNCTION_ARGS)
diff --git a/contrib/btree_gist/btree_gist--1.0--1.1.sql b/contrib/btree_gist/btree_gist--1.0--1.1.sql
new file mode 100644
index 0000000000..2633beabe0
--- /dev/null
+++ b/contrib/btree_gist/btree_gist--1.0--1.1.sql
@@ -0,0 +1,127 @@
+/* contrib/btree_gist/btree_gist--1.0--1.1.sql */
+
+-- complain if script is sourced in psql, rather than via CREATE EXTENSION
+\echo Use "ALTER EXTENSION btree_gist UPDATE TO '1.1'" to load this file. \quit
+
+-- Index-only scan support new in 9.5.
+CREATE FUNCTION gbt_oid_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_int2_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_int4_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_int8_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_float4_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_float8_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_ts_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_time_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_date_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_intv_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_cash_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_macad_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_var_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+ALTER OPERATOR FAMILY gist_oid_ops USING gist ADD
+ FUNCTION 9 (oid, oid) gbt_oid_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_int2_ops USING gist ADD
+ FUNCTION 9 (int2, int2) gbt_int2_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_int4_ops USING gist ADD
+ FUNCTION 9 (int4, int4) gbt_int4_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_int8_ops USING gist ADD
+ FUNCTION 9 (int8, int8) gbt_int8_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_float4_ops USING gist ADD
+ FUNCTION 9 (float4, float4) gbt_float4_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_float8_ops USING gist ADD
+ FUNCTION 9 (float8, float8) gbt_float8_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_timestamp_ops USING gist ADD
+ FUNCTION 9 (timestamp, timestamp) gbt_ts_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_timestamptz_ops USING gist ADD
+ FUNCTION 9 (timestamptz, timestamptz) gbt_ts_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_time_ops USING gist ADD
+ FUNCTION 9 (time, time) gbt_time_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_date_ops USING gist ADD
+ FUNCTION 9 (date, date) gbt_date_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_interval_ops USING gist ADD
+ FUNCTION 9 (interval, interval) gbt_intv_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_cash_ops USING gist ADD
+ FUNCTION 9 (money, money) gbt_cash_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_macaddr_ops USING gist ADD
+ FUNCTION 9 (macaddr, macaddr) gbt_macad_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_text_ops USING gist ADD
+ FUNCTION 9 (text, text) gbt_var_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_bpchar_ops USING gist ADD
+ FUNCTION 9 (bpchar, bpchar) gbt_var_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_bytea_ops USING gist ADD
+ FUNCTION 9 (bytea, bytea) gbt_var_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_numeric_ops USING gist ADD
+ FUNCTION 9 (numeric, numeric) gbt_var_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_bit_ops USING gist ADD
+ FUNCTION 9 (bit, bit) gbt_var_fetch (internal) ;
+
+ALTER OPERATOR FAMILY gist_vbit_ops USING gist ADD
+ FUNCTION 9 (varbit, varbit) gbt_var_fetch (internal) ;
diff --git a/contrib/btree_gist/btree_gist--1.0.sql b/contrib/btree_gist/btree_gist--1.1.sql
index c5c958753e..cdec964c05 100644
--- a/contrib/btree_gist/btree_gist--1.0.sql
+++ b/contrib/btree_gist/btree_gist--1.1.sql
@@ -249,6 +249,11 @@ RETURNS float8
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
+CREATE FUNCTION gbt_oid_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
CREATE FUNCTION gbt_oid_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
@@ -264,6 +269,11 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
+CREATE FUNCTION gbt_var_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
CREATE FUNCTION gbt_oid_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
@@ -305,11 +315,12 @@ AS
-- Add operators that are new in 9.1. We do it like this, leaving them
-- "loose" in the operator family rather than bound into the opclass, because
-- that's the only state that can be reproduced during an upgrade from 9.0.
-
ALTER OPERATOR FAMILY gist_oid_ops USING gist ADD
OPERATOR 6 <> (oid, oid) ,
OPERATOR 15 <-> (oid, oid) FOR ORDER BY pg_catalog.oid_ops ,
- FUNCTION 8 (oid, oid) gbt_oid_distance (internal, oid, int2, oid) ;
+ FUNCTION 8 (oid, oid) gbt_oid_distance (internal, oid, int2, oid) ,
+ -- Also add support function for index-only-scans, added in 9.5.
+ FUNCTION 9 (oid, oid) gbt_oid_fetch (internal) ;
--
@@ -335,6 +346,11 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
+CREATE FUNCTION gbt_int2_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
CREATE FUNCTION gbt_int2_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
@@ -376,8 +392,8 @@ AS
ALTER OPERATOR FAMILY gist_int2_ops USING gist ADD
OPERATOR 6 <> (int2, int2) ,
OPERATOR 15 <-> (int2, int2) FOR ORDER BY pg_catalog.integer_ops ,
- FUNCTION 8 (int2, int2) gbt_int2_distance (internal, int2, int2, oid) ;
-
+ FUNCTION 8 (int2, int2) gbt_int2_distance (internal, int2, int2, oid) ,
+ FUNCTION 9 (int2, int2) gbt_int2_fetch (internal) ;
--
--
@@ -402,6 +418,11 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
+CREATE FUNCTION gbt_int4_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
CREATE FUNCTION gbt_int4_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
@@ -443,7 +464,8 @@ AS
ALTER OPERATOR FAMILY gist_int4_ops USING gist ADD
OPERATOR 6 <> (int4, int4) ,
OPERATOR 15 <-> (int4, int4) FOR ORDER BY pg_catalog.integer_ops ,
- FUNCTION 8 (int4, int4) gbt_int4_distance (internal, int4, int2, oid) ;
+ FUNCTION 8 (int4, int4) gbt_int4_distance (internal, int4, int2, oid) ,
+ FUNCTION 9 (int4, int4) gbt_int4_fetch (internal) ;
--
@@ -469,6 +491,11 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
+CREATE FUNCTION gbt_int8_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
CREATE FUNCTION gbt_int8_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
@@ -510,8 +537,8 @@ AS
ALTER OPERATOR FAMILY gist_int8_ops USING gist ADD
OPERATOR 6 <> (int8, int8) ,
OPERATOR 15 <-> (int8, int8) FOR ORDER BY pg_catalog.integer_ops ,
- FUNCTION 8 (int8, int8) gbt_int8_distance (internal, int8, int2, oid) ;
-
+ FUNCTION 8 (int8, int8) gbt_int8_distance (internal, int8, int2, oid) ,
+ FUNCTION 9 (int8, int8) gbt_int8_fetch (internal) ;
--
--
@@ -536,6 +563,11 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
+CREATE FUNCTION gbt_float4_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
CREATE FUNCTION gbt_float4_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
@@ -577,8 +609,8 @@ AS
ALTER OPERATOR FAMILY gist_float4_ops USING gist ADD
OPERATOR 6 <> (float4, float4) ,
OPERATOR 15 <-> (float4, float4) FOR ORDER BY pg_catalog.float_ops ,
- FUNCTION 8 (float4, float4) gbt_float4_distance (internal, float4, int2, oid) ;
-
+ FUNCTION 8 (float4, float4) gbt_float4_distance (internal, float4, int2, oid) ,
+ FUNCTION 9 (float4, float4) gbt_float4_fetch (internal) ;
--
--
@@ -603,6 +635,11 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
+CREATE FUNCTION gbt_float8_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
CREATE FUNCTION gbt_float8_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
@@ -644,8 +681,8 @@ AS
ALTER OPERATOR FAMILY gist_float8_ops USING gist ADD
OPERATOR 6 <> (float8, float8) ,
OPERATOR 15 <-> (float8, float8) FOR ORDER BY pg_catalog.float_ops ,
- FUNCTION 8 (float8, float8) gbt_float8_distance (internal, float8, int2, oid) ;
-
+ FUNCTION 8 (float8, float8) gbt_float8_distance (internal, float8, int2, oid) ,
+ FUNCTION 9 (float8, float8) gbt_float8_fetch (internal) ;
--
--
@@ -685,6 +722,11 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
+CREATE FUNCTION gbt_ts_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
CREATE FUNCTION gbt_ts_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
@@ -726,8 +768,8 @@ AS
ALTER OPERATOR FAMILY gist_timestamp_ops USING gist ADD
OPERATOR 6 <> (timestamp, timestamp) ,
OPERATOR 15 <-> (timestamp, timestamp) FOR ORDER BY pg_catalog.interval_ops ,
- FUNCTION 8 (timestamp, timestamp) gbt_ts_distance (internal, timestamp, int2, oid) ;
-
+ FUNCTION 8 (timestamp, timestamp) gbt_ts_distance (internal, timestamp, int2, oid) ,
+ FUNCTION 9 (timestamp, timestamp) gbt_ts_fetch (internal) ;
-- Create the operator class
CREATE OPERATOR CLASS gist_timestamptz_ops
@@ -750,8 +792,8 @@ AS
ALTER OPERATOR FAMILY gist_timestamptz_ops USING gist ADD
OPERATOR 6 <> (timestamptz, timestamptz) ,
OPERATOR 15 <-> (timestamptz, timestamptz) FOR ORDER BY pg_catalog.interval_ops ,
- FUNCTION 8 (timestamptz, timestamptz) gbt_tstz_distance (internal, timestamptz, int2, oid) ;
-
+ FUNCTION 8 (timestamptz, timestamptz) gbt_tstz_distance (internal, timestamptz, int2, oid) ,
+ FUNCTION 9 (timestamptz, timestamptz) gbt_ts_fetch (internal) ;
--
--
@@ -786,6 +828,11 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
+CREATE FUNCTION gbt_time_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
CREATE FUNCTION gbt_time_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
@@ -827,7 +874,8 @@ AS
ALTER OPERATOR FAMILY gist_time_ops USING gist ADD
OPERATOR 6 <> (time, time) ,
OPERATOR 15 <-> (time, time) FOR ORDER BY pg_catalog.interval_ops ,
- FUNCTION 8 (time, time) gbt_time_distance (internal, time, int2, oid) ;
+ FUNCTION 8 (time, time) gbt_time_distance (internal, time, int2, oid) ,
+ FUNCTION 9 (time, time) gbt_time_fetch (internal) ;
CREATE OPERATOR CLASS gist_timetz_ops
@@ -849,6 +897,7 @@ AS
ALTER OPERATOR FAMILY gist_timetz_ops USING gist ADD
OPERATOR 6 <> (timetz, timetz) ;
+ -- no 'fetch' function, as the compress function is lossy.
--
@@ -874,6 +923,11 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
+CREATE FUNCTION gbt_date_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
CREATE FUNCTION gbt_date_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
@@ -915,7 +969,8 @@ AS
ALTER OPERATOR FAMILY gist_date_ops USING gist ADD
OPERATOR 6 <> (date, date) ,
OPERATOR 15 <-> (date, date) FOR ORDER BY pg_catalog.integer_ops ,
- FUNCTION 8 (date, date) gbt_date_distance (internal, date, int2, oid) ;
+ FUNCTION 8 (date, date) gbt_date_distance (internal, date, int2, oid) ,
+ FUNCTION 9 (date, date) gbt_date_fetch (internal) ;
--
@@ -946,6 +1001,11 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
+CREATE FUNCTION gbt_intv_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
CREATE FUNCTION gbt_intv_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
@@ -987,7 +1047,8 @@ AS
ALTER OPERATOR FAMILY gist_interval_ops USING gist ADD
OPERATOR 6 <> (interval, interval) ,
OPERATOR 15 <-> (interval, interval) FOR ORDER BY pg_catalog.interval_ops ,
- FUNCTION 8 (interval, interval) gbt_intv_distance (internal, interval, int2, oid) ;
+ FUNCTION 8 (interval, interval) gbt_intv_distance (internal, interval, int2, oid) ,
+ FUNCTION 9 (interval, interval) gbt_intv_fetch (internal) ;
--
@@ -1013,6 +1074,11 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
+CREATE FUNCTION gbt_cash_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
CREATE FUNCTION gbt_cash_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
@@ -1054,7 +1120,8 @@ AS
ALTER OPERATOR FAMILY gist_cash_ops USING gist ADD
OPERATOR 6 <> (money, money) ,
OPERATOR 15 <-> (money, money) FOR ORDER BY pg_catalog.money_ops ,
- FUNCTION 8 (money, money) gbt_cash_distance (internal, money, int2, oid) ;
+ FUNCTION 8 (money, money) gbt_cash_distance (internal, money, int2, oid) ,
+ FUNCTION 9 (money, money) gbt_cash_fetch (internal) ;
--
@@ -1075,6 +1142,11 @@ RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
+CREATE FUNCTION gbt_macad_fetch(internal)
+RETURNS internal
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
CREATE FUNCTION gbt_macad_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
@@ -1114,7 +1186,8 @@ AS
STORAGE gbtreekey16;
ALTER OPERATOR FAMILY gist_macaddr_ops USING gist ADD
- OPERATOR 6 <> (macaddr, macaddr) ;
+ OPERATOR 6 <> (macaddr, macaddr) ,
+ FUNCTION 9 (macaddr, macaddr) gbt_macad_fetch (internal);
--
@@ -1184,7 +1257,8 @@ AS
STORAGE gbtreekey_var;
ALTER OPERATOR FAMILY gist_text_ops USING gist ADD
- OPERATOR 6 <> (text, text) ;
+ OPERATOR 6 <> (text, text) ,
+ FUNCTION 9 (text, text) gbt_var_fetch (internal) ;
---- Create the operator class
@@ -1206,8 +1280,8 @@ AS
STORAGE gbtreekey_var;
ALTER OPERATOR FAMILY gist_bpchar_ops USING gist ADD
- OPERATOR 6 <> (bpchar, bpchar) ;
-
+ OPERATOR 6 <> (bpchar, bpchar) ,
+ FUNCTION 9 (bpchar, bpchar) gbt_var_fetch (internal) ;
--
--
@@ -1265,7 +1339,8 @@ AS
STORAGE gbtreekey_var;
ALTER OPERATOR FAMILY gist_bytea_ops USING gist ADD
- OPERATOR 6 <> (bytea, bytea) ;
+ OPERATOR 6 <> (bytea, bytea) ,
+ FUNCTION 9 (bytea, bytea) gbt_var_fetch (internal) ;
--
@@ -1325,7 +1400,8 @@ AS
STORAGE gbtreekey_var;
ALTER OPERATOR FAMILY gist_numeric_ops USING gist ADD
- OPERATOR 6 <> (numeric, numeric) ;
+ OPERATOR 6 <> (numeric, numeric) ,
+ FUNCTION 9 (numeric, numeric) gbt_var_fetch (internal) ;
--
@@ -1384,7 +1460,8 @@ AS
STORAGE gbtreekey_var;
ALTER OPERATOR FAMILY gist_bit_ops USING gist ADD
- OPERATOR 6 <> (bit, bit) ;
+ OPERATOR 6 <> (bit, bit) ,
+ FUNCTION 9 (bit, bit) gbt_var_fetch (internal) ;
-- Create the operator class
@@ -1406,7 +1483,8 @@ AS
STORAGE gbtreekey_var;
ALTER OPERATOR FAMILY gist_vbit_ops USING gist ADD
- OPERATOR 6 <> (varbit, varbit) ;
+ OPERATOR 6 <> (varbit, varbit) ,
+ FUNCTION 9 (varbit, varbit) gbt_var_fetch (internal) ;
--
@@ -1467,7 +1545,7 @@ AS
ALTER OPERATOR FAMILY gist_inet_ops USING gist ADD
OPERATOR 6 <> (inet, inet) ;
-
+ -- no fetch support, the compress function is lossy
-- Create the operator class
CREATE OPERATOR CLASS gist_cidr_ops
@@ -1489,3 +1567,4 @@ AS
ALTER OPERATOR FAMILY gist_cidr_ops USING gist ADD
OPERATOR 6 <> (inet, inet) ;
+ -- no fetch support, the compress function is lossy
diff --git a/contrib/btree_gist/btree_gist--unpackaged--1.0.sql b/contrib/btree_gist/btree_gist--unpackaged--1.0.sql
index 838ad7ec1e..e9913ab7f2 100644
--- a/contrib/btree_gist/btree_gist--unpackaged--1.0.sql
+++ b/contrib/btree_gist/btree_gist--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/btree_gist/btree_gist--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION btree_gist" to load this file. \quit
+\echo Use "CREATE EXTENSION btree_gist FROM unpackaged" to load this file. \quit
ALTER EXTENSION btree_gist ADD type gbtreekey4;
ALTER EXTENSION btree_gist ADD function gbtreekey4_in(cstring);
diff --git a/contrib/btree_gist/btree_gist.control b/contrib/btree_gist/btree_gist.control
index 10e2f949c1..c7adfeb358 100644
--- a/contrib/btree_gist/btree_gist.control
+++ b/contrib/btree_gist/btree_gist.control
@@ -1,5 +1,5 @@
# btree_gist extension
comment = 'support for indexing common datatypes in GiST'
-default_version = '1.0'
+default_version = '1.1'
module_pathname = '$libdir/btree_gist'
relocatable = true
diff --git a/contrib/btree_gist/btree_int2.c b/contrib/btree_gist/btree_int2.c
index a88aae6453..54dc1cc518 100644
--- a/contrib/btree_gist/btree_int2.c
+++ b/contrib/btree_gist/btree_int2.c
@@ -16,6 +16,7 @@ typedef struct int16key
** int16 ops
*/
PG_FUNCTION_INFO_V1(gbt_int2_compress);
+PG_FUNCTION_INFO_V1(gbt_int2_fetch);
PG_FUNCTION_INFO_V1(gbt_int2_union);
PG_FUNCTION_INFO_V1(gbt_int2_picksplit);
PG_FUNCTION_INFO_V1(gbt_int2_consistent);
@@ -119,11 +120,17 @@ Datum
gbt_int2_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
+Datum
+gbt_int2_fetch(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
+}
Datum
gbt_int2_consistent(PG_FUNCTION_ARGS)
diff --git a/contrib/btree_gist/btree_int4.c b/contrib/btree_gist/btree_int4.c
index 889a512078..ddbcf52746 100644
--- a/contrib/btree_gist/btree_int4.c
+++ b/contrib/btree_gist/btree_int4.c
@@ -16,6 +16,7 @@ typedef struct int32key
** int32 ops
*/
PG_FUNCTION_INFO_V1(gbt_int4_compress);
+PG_FUNCTION_INFO_V1(gbt_int4_fetch);
PG_FUNCTION_INFO_V1(gbt_int4_union);
PG_FUNCTION_INFO_V1(gbt_int4_picksplit);
PG_FUNCTION_INFO_V1(gbt_int4_consistent);
@@ -120,11 +121,17 @@ Datum
gbt_int4_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
+Datum
+gbt_int4_fetch(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
+}
Datum
gbt_int4_consistent(PG_FUNCTION_ARGS)
diff --git a/contrib/btree_gist/btree_int8.c b/contrib/btree_gist/btree_int8.c
index 8685cee176..44bf69a4fb 100644
--- a/contrib/btree_gist/btree_int8.c
+++ b/contrib/btree_gist/btree_int8.c
@@ -16,6 +16,7 @@ typedef struct int64key
** int64 ops
*/
PG_FUNCTION_INFO_V1(gbt_int8_compress);
+PG_FUNCTION_INFO_V1(gbt_int8_fetch);
PG_FUNCTION_INFO_V1(gbt_int8_union);
PG_FUNCTION_INFO_V1(gbt_int8_picksplit);
PG_FUNCTION_INFO_V1(gbt_int8_consistent);
@@ -120,11 +121,17 @@ Datum
gbt_int8_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
+Datum
+gbt_int8_fetch(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
+}
Datum
gbt_int8_consistent(PG_FUNCTION_ARGS)
diff --git a/contrib/btree_gist/btree_interval.c b/contrib/btree_gist/btree_interval.c
index 68d80e8e0a..acccb8b42e 100644
--- a/contrib/btree_gist/btree_interval.c
+++ b/contrib/btree_gist/btree_interval.c
@@ -18,6 +18,7 @@ typedef struct
** Interval ops
*/
PG_FUNCTION_INFO_V1(gbt_intv_compress);
+PG_FUNCTION_INFO_V1(gbt_intv_fetch);
PG_FUNCTION_INFO_V1(gbt_intv_decompress);
PG_FUNCTION_INFO_V1(gbt_intv_union);
PG_FUNCTION_INFO_V1(gbt_intv_picksplit);
@@ -175,6 +176,14 @@ gbt_intv_compress(PG_FUNCTION_ARGS)
}
Datum
+gbt_intv_fetch(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
+}
+
+Datum
gbt_intv_decompress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
diff --git a/contrib/btree_gist/btree_macaddr.c b/contrib/btree_gist/btree_macaddr.c
index ed58a1b742..87d96c00ac 100644
--- a/contrib/btree_gist/btree_macaddr.c
+++ b/contrib/btree_gist/btree_macaddr.c
@@ -19,6 +19,7 @@ typedef struct
** OID ops
*/
PG_FUNCTION_INFO_V1(gbt_macad_compress);
+PG_FUNCTION_INFO_V1(gbt_macad_fetch);
PG_FUNCTION_INFO_V1(gbt_macad_union);
PG_FUNCTION_INFO_V1(gbt_macad_picksplit);
PG_FUNCTION_INFO_V1(gbt_macad_consistent);
@@ -110,11 +111,17 @@ Datum
gbt_macad_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
+Datum
+gbt_macad_fetch(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
+}
Datum
gbt_macad_consistent(PG_FUNCTION_ARGS)
diff --git a/contrib/btree_gist/btree_numeric.c b/contrib/btree_gist/btree_numeric.c
index 02ccca8647..47b00209c8 100644
--- a/contrib/btree_gist/btree_numeric.c
+++ b/contrib/btree_gist/btree_numeric.c
@@ -170,7 +170,7 @@ gbt_numeric_penalty(PG_FUNCTION_ARGS)
uk;
rk = gbt_var_key_readable(org);
- uni = PointerGetDatum(gbt_var_key_copy(&rk, TRUE));
+ uni = PointerGetDatum(gbt_var_key_copy(&rk));
gbt_var_bin_union(&uni, newe, PG_GET_COLLATION(), &tinfo);
ok = gbt_var_key_readable(org);
uk = gbt_var_key_readable((GBT_VARKEY *) DatumGetPointer(uni));
diff --git a/contrib/btree_gist/btree_oid.c b/contrib/btree_gist/btree_oid.c
index f6b7bfa05b..ac61a76aa0 100644
--- a/contrib/btree_gist/btree_oid.c
+++ b/contrib/btree_gist/btree_oid.c
@@ -16,6 +16,7 @@ typedef struct
** OID ops
*/
PG_FUNCTION_INFO_V1(gbt_oid_compress);
+PG_FUNCTION_INFO_V1(gbt_oid_fetch);
PG_FUNCTION_INFO_V1(gbt_oid_union);
PG_FUNCTION_INFO_V1(gbt_oid_picksplit);
PG_FUNCTION_INFO_V1(gbt_oid_consistent);
@@ -120,11 +121,17 @@ Datum
gbt_oid_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
+Datum
+gbt_oid_fetch(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
+}
Datum
gbt_oid_consistent(PG_FUNCTION_ARGS)
diff --git a/contrib/btree_gist/btree_time.c b/contrib/btree_gist/btree_time.c
index cdf81711e7..41d9959214 100644
--- a/contrib/btree_gist/btree_time.c
+++ b/contrib/btree_gist/btree_time.c
@@ -19,6 +19,7 @@ typedef struct
*/
PG_FUNCTION_INFO_V1(gbt_time_compress);
PG_FUNCTION_INFO_V1(gbt_timetz_compress);
+PG_FUNCTION_INFO_V1(gbt_time_fetch);
PG_FUNCTION_INFO_V1(gbt_time_union);
PG_FUNCTION_INFO_V1(gbt_time_picksplit);
PG_FUNCTION_INFO_V1(gbt_time_consistent);
@@ -157,9 +158,8 @@ Datum
gbt_time_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
@@ -193,6 +193,13 @@ gbt_timetz_compress(PG_FUNCTION_ARGS)
PG_RETURN_POINTER(retval);
}
+Datum
+gbt_time_fetch(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
+}
Datum
gbt_time_consistent(PG_FUNCTION_ARGS)
diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c
index a13dcc8bea..c746c2319c 100644
--- a/contrib/btree_gist/btree_ts.c
+++ b/contrib/btree_gist/btree_ts.c
@@ -19,6 +19,7 @@ typedef struct
*/
PG_FUNCTION_INFO_V1(gbt_ts_compress);
PG_FUNCTION_INFO_V1(gbt_tstz_compress);
+PG_FUNCTION_INFO_V1(gbt_ts_fetch);
PG_FUNCTION_INFO_V1(gbt_ts_union);
PG_FUNCTION_INFO_V1(gbt_ts_picksplit);
PG_FUNCTION_INFO_V1(gbt_ts_consistent);
@@ -153,7 +154,7 @@ ts_dist(PG_FUNCTION_ARGS)
p->day = INT_MAX;
p->month = INT_MAX;
#ifdef HAVE_INT64_TIMESTAMP
- p->time = INT64CONST(0x7FFFFFFFFFFFFFFF);
+ p->time = PG_INT64_MAX;
#else
p->time = DBL_MAX;
#endif
@@ -181,7 +182,7 @@ tstz_dist(PG_FUNCTION_ARGS)
p->day = INT_MAX;
p->month = INT_MAX;
#ifdef HAVE_INT64_TIMESTAMP
- p->time = INT64CONST(0x7FFFFFFFFFFFFFFF);
+ p->time = PG_INT64_MAX;
#else
p->time = DBL_MAX;
#endif
@@ -200,27 +201,11 @@ tstz_dist(PG_FUNCTION_ARGS)
**************************************************/
-static Timestamp
+static inline Timestamp
tstz_to_ts_gmt(TimestampTz ts)
{
- Timestamp gmt;
- int val,
- tz;
-
- gmt = ts;
- DecodeSpecial(0, "gmt", &val);
-
- if (ts < DT_NOEND && ts > DT_NOBEGIN)
- {
- tz = val * 60;
-
-#ifdef HAVE_INT64_TIMESTAMP
- gmt -= (tz * INT64CONST(1000000));
-#else
- gmt -= tz;
-#endif
- }
- return gmt;
+ /* No timezone correction is needed, since GMT is offset 0 by definition */
+ return (Timestamp) ts;
}
@@ -228,9 +213,8 @@ Datum
gbt_ts_compress(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval = NULL;
- PG_RETURN_POINTER(gbt_num_compress(retval, entry, &tinfo));
+ PG_RETURN_POINTER(gbt_num_compress(entry, &tinfo));
}
@@ -260,6 +244,13 @@ gbt_tstz_compress(PG_FUNCTION_ARGS)
PG_RETURN_POINTER(retval);
}
+Datum
+gbt_ts_fetch(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+
+ PG_RETURN_POINTER(gbt_num_fetch(entry, &tinfo));
+}
Datum
gbt_ts_consistent(PG_FUNCTION_ARGS)
diff --git a/contrib/btree_gist/btree_utils_num.c b/contrib/btree_gist/btree_utils_num.c
index 505633c98b..5bfe659f91 100644
--- a/contrib/btree_gist/btree_utils_num.c
+++ b/contrib/btree_gist/btree_utils_num.c
@@ -11,8 +11,10 @@
GISTENTRY *
-gbt_num_compress(GISTENTRY *retval, GISTENTRY *entry, const gbtree_ninfo *tinfo)
+gbt_num_compress(GISTENTRY *entry, const gbtree_ninfo *tinfo)
{
+ GISTENTRY *retval;
+
if (entry->leafkey)
{
union
@@ -91,6 +93,64 @@ gbt_num_compress(GISTENTRY *retval, GISTENTRY *entry, const gbtree_ninfo *tinfo)
return retval;
}
+/*
+ * Convert a compressed leaf item back to the original type, for index-only
+ * scans.
+ */
+GISTENTRY *
+gbt_num_fetch(GISTENTRY *entry, const gbtree_ninfo *tinfo)
+{
+ GISTENTRY *retval;
+ Datum datum;
+
+ Assert(tinfo->indexsize >= 2 * tinfo->size);
+
+ /*
+ * Get the original Datum from the stored datum. On leaf entries, the
+ * lower and upper bound are the same. We just grab the lower bound and
+ * return it.
+ */
+ switch (tinfo->t)
+ {
+ case gbt_t_int2:
+ datum = Int16GetDatum(*(int16 *) entry->key);
+ break;
+ case gbt_t_int4:
+ datum = Int32GetDatum(*(int32 *) entry->key);
+ break;
+ case gbt_t_int8:
+ datum = Int64GetDatum(*(int64 *) entry->key);
+ break;
+ case gbt_t_oid:
+ datum = ObjectIdGetDatum(*(Oid *) entry->key);
+ break;
+ case gbt_t_float4:
+ datum = Float4GetDatum(*(float4 *) entry->key);
+ break;
+ case gbt_t_float8:
+ datum = Float8GetDatum(*(float8 *) entry->key);
+ break;
+ case gbt_t_date:
+ datum = DateADTGetDatum(*(DateADT *) entry->key);
+ break;
+ case gbt_t_time:
+ datum = TimeADTGetDatum(*(TimeADT *) entry->key);
+ break;
+ case gbt_t_ts:
+ datum = TimestampGetDatum(*(Timestamp *) entry->key);
+ break;
+ case gbt_t_cash:
+ datum = CashGetDatum(*(Cash *) entry->key);
+ break;
+ default:
+ datum = PointerGetDatum(entry->key);
+ }
+
+ retval = palloc(sizeof(GISTENTRY));
+ gistentryinit(*retval, datum, entry->rel, entry->page, entry->offset,
+ FALSE);
+ return retval;
+}
@@ -147,13 +207,8 @@ gbt_num_same(const GBT_NUMKEY *a, const GBT_NUMKEY *b, const gbtree_ninfo *tinfo
b2.lower = &(((GBT_NUMKEY *) b)[0]);
b2.upper = &(((GBT_NUMKEY *) b)[tinfo->size]);
- if (
- (*tinfo->f_eq) (b1.lower, b2.lower) &&
- (*tinfo->f_eq) (b1.upper, b2.upper)
- )
- return TRUE;
- return FALSE;
-
+ return ((*tinfo->f_eq) (b1.lower, b2.lower) &&
+ (*tinfo->f_eq) (b1.upper, b2.upper));
}
diff --git a/contrib/btree_gist/btree_utils_num.h b/contrib/btree_gist/btree_utils_num.h
index 0d79cd2a7f..a33491bc09 100644
--- a/contrib/btree_gist/btree_utils_num.h
+++ b/contrib/btree_gist/btree_utils_num.h
@@ -128,9 +128,9 @@ extern float8 gbt_num_distance(const GBT_NUMKEY_R *key, const void *query,
extern GIST_SPLITVEC *gbt_num_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v,
const gbtree_ninfo *tinfo);
-extern GISTENTRY *gbt_num_compress(GISTENTRY *retval, GISTENTRY *entry,
- const gbtree_ninfo *tinfo);
+extern GISTENTRY *gbt_num_compress(GISTENTRY *entry, const gbtree_ninfo *tinfo);
+extern GISTENTRY *gbt_num_fetch(GISTENTRY *entry, const gbtree_ninfo *tinfo);
extern void *gbt_num_union(GBT_NUMKEY *out, const GistEntryVector *entryvec,
const gbtree_ninfo *tinfo);
diff --git a/contrib/btree_gist/btree_utils_var.c b/contrib/btree_gist/btree_utils_var.c
index b7dd060a94..78e8662add 100644
--- a/contrib/btree_gist/btree_utils_var.c
+++ b/contrib/btree_gist/btree_utils_var.c
@@ -29,6 +29,7 @@ typedef struct
PG_FUNCTION_INFO_V1(gbt_var_decompress);
+PG_FUNCTION_INFO_V1(gbt_var_fetch);
Datum
@@ -66,26 +67,37 @@ gbt_var_key_readable(const GBT_VARKEY *k)
}
+/*
+ * Create a leaf-entry to store in the index, from a single Datum.
+ */
+static GBT_VARKEY *
+gbt_var_key_from_datum(const struct varlena *u)
+{
+ int32 lowersize = VARSIZE(u);
+ GBT_VARKEY *r;
+
+ r = (GBT_VARKEY *) palloc(lowersize + VARHDRSZ);
+ memcpy(VARDATA(r), u, lowersize);
+ SET_VARSIZE(r, lowersize + VARHDRSZ);
+
+ return r;
+}
+
+/*
+ * Create an entry to store in the index, from lower and upper bound.
+ */
GBT_VARKEY *
-gbt_var_key_copy(const GBT_VARKEY_R *u, bool force_node)
+gbt_var_key_copy(const GBT_VARKEY_R *u)
{
- GBT_VARKEY *r = NULL;
int32 lowersize = VARSIZE(u->lower);
int32 uppersize = VARSIZE(u->upper);
+ GBT_VARKEY *r;
+
+ r = (GBT_VARKEY *) palloc0(INTALIGN(lowersize) + uppersize + VARHDRSZ);
+ memcpy(VARDATA(r), u->lower, lowersize);
+ memcpy(VARDATA(r) + INTALIGN(lowersize), u->upper, uppersize);
+ SET_VARSIZE(r, INTALIGN(lowersize) + uppersize + VARHDRSZ);
- if (u->lower == u->upper && !force_node)
- { /* leaf key mode */
- r = (GBT_VARKEY *) palloc(lowersize + VARHDRSZ);
- memcpy(VARDATA(r), u->lower, lowersize);
- SET_VARSIZE(r, lowersize + VARHDRSZ);
- }
- else
- { /* node key mode */
- r = (GBT_VARKEY *) palloc0(INTALIGN(lowersize) + uppersize + VARHDRSZ);
- memcpy(VARDATA(r), u->lower, lowersize);
- memcpy(VARDATA(r) + INTALIGN(lowersize), u->upper, uppersize);
- SET_VARSIZE(r, INTALIGN(lowersize) + uppersize + VARHDRSZ);
- }
return r;
}
@@ -255,18 +267,17 @@ gbt_var_bin_union(Datum *u, GBT_VARKEY *e, Oid collation,
}
if (update)
- *u = PointerGetDatum(gbt_var_key_copy(&nr, TRUE));
+ *u = PointerGetDatum(gbt_var_key_copy(&nr));
}
else
{
nr.lower = eo.lower;
nr.upper = eo.upper;
- *u = PointerGetDatum(gbt_var_key_copy(&nr, TRUE));
+ *u = PointerGetDatum(gbt_var_key_copy(&nr));
}
}
-
GISTENTRY *
gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo *tinfo)
{
@@ -274,12 +285,10 @@ gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo *tinfo)
if (entry->leafkey)
{
- GBT_VARKEY *r = NULL;
- bytea *leaf = (bytea *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
- GBT_VARKEY_R u;
+ struct varlena *leaf = PG_DETOAST_DATUM(entry->key);
+ GBT_VARKEY *r;
- u.lower = u.upper = leaf;
- r = gbt_var_key_copy(&u, FALSE);
+ r = gbt_var_key_from_datum(leaf);
retval = palloc(sizeof(GISTENTRY));
gistentryinit(*retval, PointerGetDatum(r),
@@ -293,6 +302,22 @@ gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo *tinfo)
}
+Datum
+gbt_var_fetch(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(PG_DETOAST_DATUM(entry->key));
+ GBT_VARKEY_R r = gbt_var_key_readable(key);
+ GISTENTRY *retval;
+
+ retval = palloc(sizeof(GISTENTRY));
+ gistentryinit(*retval, PointerGetDatum(r.lower),
+ entry->rel, entry->page,
+ entry->offset, TRUE);
+
+ PG_RETURN_POINTER(retval);
+}
+
GBT_VARKEY *
gbt_var_union(const GistEntryVector *entryvec, int32 *size, Oid collation,
@@ -308,7 +333,7 @@ gbt_var_union(const GistEntryVector *entryvec, int32 *size, Oid collation,
cur = (GBT_VARKEY *) DatumGetPointer(entryvec->vector[0].key);
rk = gbt_var_key_readable(cur);
- out = PointerGetDatum(gbt_var_key_copy(&rk, TRUE));
+ out = PointerGetDatum(gbt_var_key_copy(&rk));
for (i = 1; i < numranges; i++)
{
@@ -337,7 +362,6 @@ bool
gbt_var_same(Datum d1, Datum d2, Oid collation,
const gbtree_vinfo *tinfo)
{
- bool result;
GBT_VARKEY *t1 = (GBT_VARKEY *) DatumGetPointer(d1);
GBT_VARKEY *t2 = (GBT_VARKEY *) DatumGetPointer(d2);
GBT_VARKEY_R r1,
@@ -346,13 +370,8 @@ gbt_var_same(Datum d1, Datum d2, Oid collation,
r1 = gbt_var_key_readable(t1);
r2 = gbt_var_key_readable(t2);
- if (t1 && t2)
- result = ((*tinfo->f_cmp) (r1.lower, r2.lower, collation) == 0 &&
- (*tinfo->f_cmp) (r1.upper, r2.upper, collation) == 0);
- else
- result = (t1 == NULL && t2 == NULL);
-
- return result;
+ return ((*tinfo->f_cmp) (r1.lower, r2.lower, collation) == 0 &&
+ (*tinfo->f_cmp) (r1.upper, r2.upper, collation) == 0);
}
diff --git a/contrib/btree_gist/btree_utils_var.h b/contrib/btree_gist/btree_utils_var.h
index 7a3eeec01a..9a7c4d1055 100644
--- a/contrib/btree_gist/btree_utils_var.h
+++ b/contrib/btree_gist/btree_utils_var.h
@@ -47,7 +47,7 @@ typedef struct
extern GBT_VARKEY_R gbt_var_key_readable(const GBT_VARKEY *k);
-extern GBT_VARKEY *gbt_var_key_copy(const GBT_VARKEY_R *u, bool force_node);
+extern GBT_VARKEY *gbt_var_key_copy(const GBT_VARKEY_R *u);
extern GISTENTRY *gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo *tinfo);
diff --git a/contrib/btree_gist/expected/bit.out b/contrib/btree_gist/expected/bit.out
index ae82304600..8606baf366 100644
--- a/contrib/btree_gist/expected/bit.out
+++ b/contrib/btree_gist/expected/bit.out
@@ -64,3 +64,13 @@ SELECT count(*) FROM bittmp WHERE a > '011011000100010111011000110000100';
350
(1 row)
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT a FROM bittmp WHERE a BETWEEN '1000000' and '1000001';
+ QUERY PLAN
+-----------------------------------------------------------------------
+ Index Only Scan using bitidx on bittmp
+ Index Cond: ((a >= B'1000000'::"bit") AND (a <= B'1000001'::"bit"))
+(2 rows)
+
diff --git a/contrib/btree_gist/expected/bytea.out b/contrib/btree_gist/expected/bytea.out
index 917fac1812..b9efa73c08 100644
--- a/contrib/btree_gist/expected/bytea.out
+++ b/contrib/btree_gist/expected/bytea.out
@@ -71,3 +71,20 @@ SELECT count(*) FROM byteatmp WHERE a = '2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbed
1
(1 row)
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT a FROM byteatmp where a > 'ffa'::bytea;
+ QUERY PLAN
+--------------------------------------------
+ Index Only Scan using byteaidx on byteatmp
+ Index Cond: (a > '\x666661'::bytea)
+(2 rows)
+
+SELECT a FROM byteatmp where a > 'ffa'::bytea;
+ a
+--------------------------------
+ \x666662656532373363376262
+ \x6666626663313331336339633835
+(2 rows)
+
diff --git a/contrib/btree_gist/expected/cash.out b/contrib/btree_gist/expected/cash.out
index a4100d844e..cacbd71854 100644
--- a/contrib/btree_gist/expected/cash.out
+++ b/contrib/btree_gist/expected/cash.out
@@ -74,10 +74,10 @@ SELECT count(*) FROM moneytmp WHERE a > '22649.64'::money;
EXPLAIN (COSTS OFF)
SELECT a, a <-> '21472.79' FROM moneytmp ORDER BY a <-> '21472.79' LIMIT 3;
- QUERY PLAN
------------------------------------------------
+ QUERY PLAN
+--------------------------------------------------
Limit
- -> Index Scan using moneyidx on moneytmp
+ -> Index Only Scan using moneyidx on moneytmp
Order By: (a <-> '$21,472.79'::money)
(3 rows)
diff --git a/contrib/btree_gist/expected/char.out b/contrib/btree_gist/expected/char.out
index 5260995a75..d715c045cc 100644
--- a/contrib/btree_gist/expected/char.out
+++ b/contrib/btree_gist/expected/char.out
@@ -64,3 +64,19 @@ SELECT count(*) FROM chartmp WHERE a > '31b0'::char(32);
400
(1 row)
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT * FROM chartmp WHERE a BETWEEN '31a' AND '31c';
+ QUERY PLAN
+---------------------------------------------------------------
+ Index Only Scan using charidx on chartmp
+ Index Cond: ((a >= '31a'::bpchar) AND (a <= '31c'::bpchar))
+(2 rows)
+
+SELECT * FROM chartmp WHERE a BETWEEN '31a' AND '31c';
+ a
+------
+ 31b0
+(1 row)
+
diff --git a/contrib/btree_gist/expected/char_1.out b/contrib/btree_gist/expected/char_1.out
index a1d24876d8..867318002b 100644
--- a/contrib/btree_gist/expected/char_1.out
+++ b/contrib/btree_gist/expected/char_1.out
@@ -64,3 +64,19 @@ SELECT count(*) FROM chartmp WHERE a > '31b0'::char(32);
214
(1 row)
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT * FROM chartmp WHERE a BETWEEN '31a' AND '31c';
+ QUERY PLAN
+---------------------------------------------------------------
+ Index Only Scan using charidx on chartmp
+ Index Cond: ((a >= '31a'::bpchar) AND (a <= '31c'::bpchar))
+(2 rows)
+
+SELECT * FROM chartmp WHERE a BETWEEN '31a' AND '31c';
+ a
+------
+ 31b0
+(1 row)
+
diff --git a/contrib/btree_gist/expected/date.out b/contrib/btree_gist/expected/date.out
index 4a360bea6d..5db864bb82 100644
--- a/contrib/btree_gist/expected/date.out
+++ b/contrib/btree_gist/expected/date.out
@@ -74,10 +74,10 @@ SELECT count(*) FROM datetmp WHERE a > '2001-02-13'::date;
EXPLAIN (COSTS OFF)
SELECT a, a <-> '2001-02-13' FROM datetmp ORDER BY a <-> '2001-02-13' LIMIT 3;
- QUERY PLAN
-----------------------------------------------
+ QUERY PLAN
+------------------------------------------------
Limit
- -> Index Scan using dateidx on datetmp
+ -> Index Only Scan using dateidx on datetmp
Order By: (a <-> '02-13-2001'::date)
(3 rows)
diff --git a/contrib/btree_gist/expected/float4.out b/contrib/btree_gist/expected/float4.out
index 1695f7805a..abbd9eef4e 100644
--- a/contrib/btree_gist/expected/float4.out
+++ b/contrib/btree_gist/expected/float4.out
@@ -74,11 +74,11 @@ SELECT count(*) FROM float4tmp WHERE a > -179.0::float4;
EXPLAIN (COSTS OFF)
SELECT a, a <-> '-179.0' FROM float4tmp ORDER BY a <-> '-179.0' LIMIT 3;
- QUERY PLAN
------------------------------------------------
+ QUERY PLAN
+----------------------------------------------------
Limit
- -> Index Scan using float4idx on float4tmp
- Order By: (a <-> (-179)::real)
+ -> Index Only Scan using float4idx on float4tmp
+ Order By: (a <-> '-179'::real)
(3 rows)
SELECT a, a <-> '-179.0' FROM float4tmp ORDER BY a <-> '-179.0' LIMIT 3;
diff --git a/contrib/btree_gist/expected/float8.out b/contrib/btree_gist/expected/float8.out
index 7d2228b797..5111dbdfae 100644
--- a/contrib/btree_gist/expected/float8.out
+++ b/contrib/btree_gist/expected/float8.out
@@ -77,8 +77,8 @@ SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3;
QUERY PLAN
-----------------------------------------------------
Limit
- -> Index Scan using float8idx on float8tmp
- Order By: (a <-> (-1890)::double precision)
+ -> Index Only Scan using float8idx on float8tmp
+ Order By: (a <-> '-1890'::double precision)
(3 rows)
SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3;
diff --git a/contrib/btree_gist/expected/int2.out b/contrib/btree_gist/expected/int2.out
index b1cc3b14b2..50a332939b 100644
--- a/contrib/btree_gist/expected/int2.out
+++ b/contrib/btree_gist/expected/int2.out
@@ -74,11 +74,11 @@ SELECT count(*) FROM int2tmp WHERE a > 237::int2;
EXPLAIN (COSTS OFF)
SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3;
- QUERY PLAN
--------------------------------------------
+ QUERY PLAN
+------------------------------------------------
Limit
- -> Index Scan using int2idx on int2tmp
- Order By: (a <-> 237::smallint)
+ -> Index Only Scan using int2idx on int2tmp
+ Order By: (a <-> '237'::smallint)
(3 rows)
SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3;
diff --git a/contrib/btree_gist/expected/int4.out b/contrib/btree_gist/expected/int4.out
index 41bed1f6e3..6bbdc7c3f4 100644
--- a/contrib/btree_gist/expected/int4.out
+++ b/contrib/btree_gist/expected/int4.out
@@ -74,10 +74,10 @@ SELECT count(*) FROM int4tmp WHERE a > 237::int4;
EXPLAIN (COSTS OFF)
SELECT a, a <-> '237' FROM int4tmp ORDER BY a <-> '237' LIMIT 3;
- QUERY PLAN
--------------------------------------------
+ QUERY PLAN
+------------------------------------------------
Limit
- -> Index Scan using int4idx on int4tmp
+ -> Index Only Scan using int4idx on int4tmp
Order By: (a <-> 237)
(3 rows)
diff --git a/contrib/btree_gist/expected/int8.out b/contrib/btree_gist/expected/int8.out
index ff0af4a5fb..eff77c26b5 100644
--- a/contrib/btree_gist/expected/int8.out
+++ b/contrib/btree_gist/expected/int8.out
@@ -74,11 +74,11 @@ SELECT count(*) FROM int8tmp WHERE a > 464571291354841::int8;
EXPLAIN (COSTS OFF)
SELECT a, a <-> '464571291354841' FROM int8tmp ORDER BY a <-> '464571291354841' LIMIT 3;
- QUERY PLAN
----------------------------------------------------
+ QUERY PLAN
+-----------------------------------------------------
Limit
- -> Index Scan using int8idx on int8tmp
- Order By: (a <-> 464571291354841::bigint)
+ -> Index Only Scan using int8idx on int8tmp
+ Order By: (a <-> '464571291354841'::bigint)
(3 rows)
SELECT a, a <-> '464571291354841' FROM int8tmp ORDER BY a <-> '464571291354841' LIMIT 3;
diff --git a/contrib/btree_gist/expected/interval.out b/contrib/btree_gist/expected/interval.out
index 6955251a04..875380978e 100644
--- a/contrib/btree_gist/expected/interval.out
+++ b/contrib/btree_gist/expected/interval.out
@@ -77,7 +77,7 @@ SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21
QUERY PLAN
---------------------------------------------------------------------------
Limit
- -> Index Scan using intervalidx on intervaltmp
+ -> Index Only Scan using intervalidx on intervaltmp
Order By: (a <-> '@ 199 days 21 hours 21 mins 23 secs'::interval)
(3 rows)
diff --git a/contrib/btree_gist/expected/macaddr.out b/contrib/btree_gist/expected/macaddr.out
index 3f0271bd25..c0a4c6287f 100644
--- a/contrib/btree_gist/expected/macaddr.out
+++ b/contrib/btree_gist/expected/macaddr.out
@@ -64,3 +64,26 @@ SELECT count(*) FROM macaddrtmp WHERE a > '22:00:5c:e5:9b:0d'::macaddr;
540
(1 row)
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT * FROM macaddrtmp WHERE a < '02:03:04:05:06:07'::macaddr;
+ QUERY PLAN
+--------------------------------------------------
+ Index Only Scan using macaddridx on macaddrtmp
+ Index Cond: (a < '02:03:04:05:06:07'::macaddr)
+(2 rows)
+
+SELECT * FROM macaddrtmp WHERE a < '02:03:04:05:06:07'::macaddr;
+ a
+-------------------
+ 01:02:37:05:4f:36
+ 01:02:37:05:4f:36
+ 01:02:37:05:4f:36
+ 01:02:37:05:4f:36
+ 01:43:b5:79:eb:0f
+ 01:43:b5:79:eb:0f
+ 01:43:b5:79:eb:0f
+ 01:43:b5:79:eb:0f
+(8 rows)
+
diff --git a/contrib/btree_gist/expected/numeric.out b/contrib/btree_gist/expected/numeric.out
index 1ab7ae6486..ae839b8ec8 100644
--- a/contrib/btree_gist/expected/numeric.out
+++ b/contrib/btree_gist/expected/numeric.out
@@ -186,3 +186,22 @@ SELECT count(*) FROM numerictmp WHERE a > 0 ;
576
(1 row)
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT * FROM numerictmp WHERE a BETWEEN 1 AND 300 ORDER BY a;
+ QUERY PLAN
+---------------------------------------------------------------------
+ Sort
+ Sort Key: a
+ -> Index Only Scan using numericidx on numerictmp
+ Index Cond: ((a >= '1'::numeric) AND (a <= '300'::numeric))
+(4 rows)
+
+SELECT * FROM numerictmp WHERE a BETWEEN 1 AND 300 ORDER BY a;
+ a
+------------
+ 204.035430
+ 207.400532
+(2 rows)
+
diff --git a/contrib/btree_gist/expected/text.out b/contrib/btree_gist/expected/text.out
index 4905cb023b..bb4e2e62d1 100644
--- a/contrib/btree_gist/expected/text.out
+++ b/contrib/btree_gist/expected/text.out
@@ -71,3 +71,19 @@ SELECT count(*) FROM texttmp WHERE a = '2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb
1
(1 row)
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT * FROM texttmp WHERE a BETWEEN '31a' AND '31c';
+ QUERY PLAN
+-----------------------------------------------------------
+ Index Only Scan using textidx on texttmp
+ Index Cond: ((a >= '31a'::text) AND (a <= '31c'::text))
+(2 rows)
+
+SELECT * FROM texttmp WHERE a BETWEEN '31a' AND '31c';
+ a
+------
+ 31b0
+(1 row)
+
diff --git a/contrib/btree_gist/expected/text_1.out b/contrib/btree_gist/expected/text_1.out
index e2b9c1b6b7..8ef1ffb2d1 100644
--- a/contrib/btree_gist/expected/text_1.out
+++ b/contrib/btree_gist/expected/text_1.out
@@ -71,3 +71,19 @@ SELECT count(*) FROM texttmp WHERE a = '2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb
1
(1 row)
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT * FROM texttmp WHERE a BETWEEN '31a' AND '31c';
+ QUERY PLAN
+-----------------------------------------------------------
+ Index Only Scan using textidx on texttmp
+ Index Cond: ((a >= '31a'::text) AND (a <= '31c'::text))
+(2 rows)
+
+SELECT * FROM texttmp WHERE a BETWEEN '31a' AND '31c';
+ a
+------
+ 31b0
+(1 row)
+
diff --git a/contrib/btree_gist/expected/time.out b/contrib/btree_gist/expected/time.out
index 1b9da4e192..ec95ef77c5 100644
--- a/contrib/btree_gist/expected/time.out
+++ b/contrib/btree_gist/expected/time.out
@@ -77,7 +77,7 @@ SELECT a, a <-> '10:57:11' FROM timetmp ORDER BY a <-> '10:57:11' LIMIT 3;
QUERY PLAN
--------------------------------------------------------------
Limit
- -> Index Scan using timeidx on timetmp
+ -> Index Only Scan using timeidx on timetmp
Order By: (a <-> '10:57:11'::time without time zone)
(3 rows)
diff --git a/contrib/btree_gist/expected/timestamp.out b/contrib/btree_gist/expected/timestamp.out
index cc3624f084..0d94f2f245 100644
--- a/contrib/btree_gist/expected/timestamp.out
+++ b/contrib/btree_gist/expected/timestamp.out
@@ -77,7 +77,7 @@ SELECT a, a <-> '2004-10-26 08:55:08' FROM timestamptmp ORDER BY a <-> '2004-10-
QUERY PLAN
-----------------------------------------------------------------------------------
Limit
- -> Index Scan using timestampidx on timestamptmp
+ -> Index Only Scan using timestampidx on timestamptmp
Order By: (a <-> 'Tue Oct 26 08:55:08 2004'::timestamp without time zone)
(3 rows)
diff --git a/contrib/btree_gist/expected/timestamptz.out b/contrib/btree_gist/expected/timestamptz.out
index 88d2404c44..75a15a4256 100644
--- a/contrib/btree_gist/expected/timestamptz.out
+++ b/contrib/btree_gist/expected/timestamptz.out
@@ -197,7 +197,7 @@ SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '
QUERY PLAN
------------------------------------------------------------------------------------
Limit
- -> Index Scan using timestamptzidx on timestamptztmp
+ -> Index Only Scan using timestamptzidx on timestamptztmp
Order By: (a <-> 'Tue Dec 18 04:59:54 2018 PST'::timestamp with time zone)
(3 rows)
diff --git a/contrib/btree_gist/expected/varbit.out b/contrib/btree_gist/expected/varbit.out
index e6765f4231..538ace85c9 100644
--- a/contrib/btree_gist/expected/varbit.out
+++ b/contrib/btree_gist/expected/varbit.out
@@ -64,3 +64,13 @@ SELECT count(*) FROM varbittmp WHERE a > '1110100111010'::varbit;
50
(1 row)
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT a FROM bittmp WHERE a BETWEEN '1000000' and '1000001';
+ QUERY PLAN
+-----------------------------------------------------------------------
+ Index Only Scan using bitidx on bittmp
+ Index Cond: ((a >= B'1000000'::"bit") AND (a <= B'1000001'::"bit"))
+(2 rows)
+
diff --git a/contrib/btree_gist/sql/bit.sql b/contrib/btree_gist/sql/bit.sql
index a6b6ab3b3b..a733042023 100644
--- a/contrib/btree_gist/sql/bit.sql
+++ b/contrib/btree_gist/sql/bit.sql
@@ -29,3 +29,8 @@ SELECT count(*) FROM bittmp WHERE a = '011011000100010111011000110000100';
SELECT count(*) FROM bittmp WHERE a >= '011011000100010111011000110000100';
SELECT count(*) FROM bittmp WHERE a > '011011000100010111011000110000100';
+
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT a FROM bittmp WHERE a BETWEEN '1000000' and '1000001';
diff --git a/contrib/btree_gist/sql/bytea.sql b/contrib/btree_gist/sql/bytea.sql
index 37aff339e2..6885f5e56d 100644
--- a/contrib/btree_gist/sql/bytea.sql
+++ b/contrib/btree_gist/sql/bytea.sql
@@ -32,3 +32,9 @@ SELECT count(*) FROM byteatmp WHERE a >= '31b0'::bytea;
SELECT count(*) FROM byteatmp WHERE a > '31b0'::bytea;
SELECT count(*) FROM byteatmp WHERE a = '2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809'::bytea;
+
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT a FROM byteatmp where a > 'ffa'::bytea;
+SELECT a FROM byteatmp where a > 'ffa'::bytea;
diff --git a/contrib/btree_gist/sql/char.sql b/contrib/btree_gist/sql/char.sql
index 9ae0f1fb3f..f6eb52e672 100644
--- a/contrib/btree_gist/sql/char.sql
+++ b/contrib/btree_gist/sql/char.sql
@@ -29,3 +29,9 @@ SELECT count(*) FROM chartmp WHERE a = '31b0'::char(32);
SELECT count(*) FROM chartmp WHERE a >= '31b0'::char(32);
SELECT count(*) FROM chartmp WHERE a > '31b0'::char(32);
+
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT * FROM chartmp WHERE a BETWEEN '31a' AND '31c';
+SELECT * FROM chartmp WHERE a BETWEEN '31a' AND '31c';
diff --git a/contrib/btree_gist/sql/macaddr.sql b/contrib/btree_gist/sql/macaddr.sql
index d9c54b2930..85c271f7ce 100644
--- a/contrib/btree_gist/sql/macaddr.sql
+++ b/contrib/btree_gist/sql/macaddr.sql
@@ -29,3 +29,9 @@ SELECT count(*) FROM macaddrtmp WHERE a = '22:00:5c:e5:9b:0d'::macaddr;
SELECT count(*) FROM macaddrtmp WHERE a >= '22:00:5c:e5:9b:0d'::macaddr;
SELECT count(*) FROM macaddrtmp WHERE a > '22:00:5c:e5:9b:0d'::macaddr;
+
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT * FROM macaddrtmp WHERE a < '02:03:04:05:06:07'::macaddr;
+SELECT * FROM macaddrtmp WHERE a < '02:03:04:05:06:07'::macaddr;
diff --git a/contrib/btree_gist/sql/numeric.sql b/contrib/btree_gist/sql/numeric.sql
index ae4ef7c689..dbb2f2f183 100644
--- a/contrib/btree_gist/sql/numeric.sql
+++ b/contrib/btree_gist/sql/numeric.sql
@@ -75,3 +75,9 @@ SELECT count(*) FROM numerictmp WHERE a = 0 ;
SELECT count(*) FROM numerictmp WHERE a >= 0 ;
SELECT count(*) FROM numerictmp WHERE a > 0 ;
+
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT * FROM numerictmp WHERE a BETWEEN 1 AND 300 ORDER BY a;
+SELECT * FROM numerictmp WHERE a BETWEEN 1 AND 300 ORDER BY a;
diff --git a/contrib/btree_gist/sql/text.sql b/contrib/btree_gist/sql/text.sql
index 0d411a9a41..46597e731d 100644
--- a/contrib/btree_gist/sql/text.sql
+++ b/contrib/btree_gist/sql/text.sql
@@ -32,3 +32,9 @@ SELECT count(*) FROM texttmp WHERE a >= '31b0'::text;
SELECT count(*) FROM texttmp WHERE a > '31b0'::text;
SELECT count(*) FROM texttmp WHERE a = '2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809 2eb2c961c1cbf6 cf8d7b68cb9a2f36 7bbedb4ae7 06ec46c55611a466eb7e3edcc009ca6 e 5ed9cd0ea5a4e55d601027c56a 64cacf3a42afc 90e63000c34506993345355640 79bce 173bb7 c5 574ea7c921cb0f25 089d56d16dff24f336e4740 6870470f1f9afcb4f7c56c9f b97e117fc965 7013029 e48f6dd481 7d00e1e227beef84a9 904d4c34241f cb5c0f14 3a8a70 f51a73164e92052fbb53b4cc2f1fed 3c3fecaa0270175 2521ef03594 fa05756812648f450fb 13c2f b39a0729d6182e9 15b5ea204fe73 d8991afd72d21acd188df1 a29fff57ab897338 de549b3ed5a024534c007125c 2fcf3e5c3e3 7427b6daec5c3f 473 8 a5d9 840410976ac2eeab58e1ca8bf46c2b7 1db9cc85a336f1291ea19922 db808f3548cda91 2e379ce80af12bd7ed56d0338c a ea67a7c847f6620fc894f0ba10044 0e 52e97d975af7201d8 d95e6f08184d8ff 19762476fa 42f278f3534f3f2be0abaed71 f0aba11835e4e1d94 e8534cf677046eafb8f5f761865 ffbee273c7bb 2bb77f6e780 c77e81851c491 e a9f45d765b01a030d5d317 ff7345a22bc360 c87363ba121297b063e83 13ea32e9618d 40304f6c2a7e92c1c66ff4208e a781b4a21419abfdf5eb467e4d48908 8a65656e514b2b3ef8f86310aaf85 4 90b7b2862e3dbc8f0eef3dfc6075bfa eb94a1c a58abb5def4fa43840e6e2716 260e6eaebb 42415d712bf83944dcd1204e 305254fc3b849150b5 5bbd7f8471dcd3621 2ae0548115a250 0c1988e9 76f98bef45639b7 0d5a28f01dc b71 c046576faa4d49eff8 c1e8d01c 10c86c457ea050455a742da4f8 ea7676af85c71c7eeca635 6a07137227404d a4 7186172 8150f31c9a15401c f1bb9057a9938bfa 22b482be08f424ec4 21daea994293589 15bff393f6b17fef24786dd6f9 d5a2d 4b3b5dd9370543e b4a93b2ac4341945d06 d384447812e0 4e3c97e9b8f7 f7d4d644b2a1d373 5102c b9531f725674b28 1aa16e7e34285797c1439 51aa762ea14b40fb8876c887eea6 45a62d3d5d3e946250904697486591 b3f1a8 243524767bf846d 8 95 45a922872 dd2497eb1e3da8d513d2 7821db9e14d4f 24c4f085de60d7c0c6ea3fc6bc e4c9f8c68596d7d afd6c8cb0f2516b87f24bbd8 61d2e457c70949 d2d362cdc657 3605f9d27fd6d72 32de91d66fe5bf537530 859e1a08b65 9b5a55f 4116cda9fddeb843964002 e81f3b2c0ca566ad3dbbc6e234 0d3b1d54 10c440be5c0bca95 7dad841f a61f041967972e805ccfee55c deee9cc16e92ab197 7627554073c1f56b9e 21bebcbfd2e2282f84 7b121a83eeb91db8bda81ba88c634b46394 59885ebc737617addaaf0cb809'::text;
+
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT * FROM texttmp WHERE a BETWEEN '31a' AND '31c';
+SELECT * FROM texttmp WHERE a BETWEEN '31a' AND '31c';
diff --git a/contrib/btree_gist/sql/varbit.sql b/contrib/btree_gist/sql/varbit.sql
index 73e9273802..e2a33b5a1b 100644
--- a/contrib/btree_gist/sql/varbit.sql
+++ b/contrib/btree_gist/sql/varbit.sql
@@ -29,3 +29,8 @@ SELECT count(*) FROM varbittmp WHERE a = '1110100111010'::varbit;
SELECT count(*) FROM varbittmp WHERE a >= '1110100111010'::varbit;
SELECT count(*) FROM varbittmp WHERE a > '1110100111010'::varbit;
+
+-- Test index-only scans
+SET enable_bitmapscan=off;
+EXPLAIN (COSTS OFF)
+SELECT a FROM bittmp WHERE a BETWEEN '1000000' and '1000001';
diff --git a/contrib/chkpass/Makefile b/contrib/chkpass/Makefile
index b775aef17d..a2599ea239 100644
--- a/contrib/chkpass/Makefile
+++ b/contrib/chkpass/Makefile
@@ -1,10 +1,11 @@
# contrib/chkpass/Makefile
MODULE_big = chkpass
-OBJS = chkpass.o
+OBJS = chkpass.o $(WIN32RES)
EXTENSION = chkpass
DATA = chkpass--1.0.sql chkpass--unpackaged--1.0.sql
+PGFILEDESC = "chkpass - encrypted password data type"
SHLIB_LINK = $(filter -lcrypt, $(LIBS))
diff --git a/contrib/chkpass/chkpass--1.0.sql b/contrib/chkpass/chkpass--1.0.sql
index d1fbedc446..406a61924c 100644
--- a/contrib/chkpass/chkpass--1.0.sql
+++ b/contrib/chkpass/chkpass--1.0.sql
@@ -10,12 +10,15 @@
CREATE FUNCTION chkpass_in(cstring)
RETURNS chkpass
AS 'MODULE_PATHNAME'
- LANGUAGE C STRICT;
+ LANGUAGE C STRICT VOLATILE;
+-- Note: chkpass_in actually is volatile, because of its use of random().
+-- In hindsight that was a bad idea, but there's no way to change it without
+-- breaking some usage patterns.
CREATE FUNCTION chkpass_out(chkpass)
RETURNS cstring
AS 'MODULE_PATHNAME'
- LANGUAGE C STRICT;
+ LANGUAGE C STRICT IMMUTABLE;
CREATE TYPE chkpass (
internallength = 16,
diff --git a/contrib/chkpass/chkpass--unpackaged--1.0.sql b/contrib/chkpass/chkpass--unpackaged--1.0.sql
index 7bbfb142a6..8bdecddfa5 100644
--- a/contrib/chkpass/chkpass--unpackaged--1.0.sql
+++ b/contrib/chkpass/chkpass--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/chkpass/chkpass--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION chkpass" to load this file. \quit
+\echo Use "CREATE EXTENSION chkpass FROM unpackaged" to load this file. \quit
ALTER EXTENSION chkpass ADD type chkpass;
ALTER EXTENSION chkpass ADD function chkpass_in(cstring);
diff --git a/contrib/chkpass/chkpass.c b/contrib/chkpass/chkpass.c
index 283ad9a538..9425c089b5 100644
--- a/contrib/chkpass/chkpass.c
+++ b/contrib/chkpass/chkpass.c
@@ -65,7 +65,7 @@ chkpass_in(PG_FUNCTION_ARGS)
/* special case to let us enter encrypted passwords */
if (*str == ':')
{
- result = (chkpass *) palloc(sizeof(chkpass));
+ result = (chkpass *) palloc0(sizeof(chkpass));
strlcpy(result->password, str + 1, 13 + 1);
PG_RETURN_POINTER(result);
}
@@ -75,7 +75,7 @@ chkpass_in(PG_FUNCTION_ARGS)
(errcode(ERRCODE_DATA_EXCEPTION),
errmsg("password \"%s\" is weak", str)));
- result = (chkpass *) palloc(sizeof(chkpass));
+ result = (chkpass *) palloc0(sizeof(chkpass));
mysalt[0] = salt_chars[random() & 0x3f];
mysalt[1] = salt_chars[random() & 0x3f];
@@ -107,7 +107,7 @@ chkpass_out(PG_FUNCTION_ARGS)
result = (char *) palloc(16);
result[0] = ':';
- strcpy(result + 1, password->password);
+ strlcpy(result + 1, password->password, 15);
PG_RETURN_CSTRING(result);
}
diff --git a/contrib/citext/Makefile b/contrib/citext/Makefile
index 65942528dd..267854b5de 100644
--- a/contrib/citext/Makefile
+++ b/contrib/citext/Makefile
@@ -4,6 +4,7 @@ MODULES = citext
EXTENSION = citext
DATA = citext--1.0.sql citext--unpackaged--1.0.sql
+PGFILEDESC = "citext - case-insensitive character string data type"
REGRESS = citext
diff --git a/contrib/citext/citext--unpackaged--1.0.sql b/contrib/citext/citext--unpackaged--1.0.sql
index 102743c528..ef6d6b0639 100644
--- a/contrib/citext/citext--unpackaged--1.0.sql
+++ b/contrib/citext/citext--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/citext/citext--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION citext" to load this file. \quit
+\echo Use "CREATE EXTENSION citext FROM unpackaged" to load this file. \quit
ALTER EXTENSION citext ADD type citext;
ALTER EXTENSION citext ADD function citextin(cstring);
@@ -105,7 +105,12 @@ UPDATE pg_catalog.pg_attribute SET attcollation = 100
FROM typeoids
WHERE atttypid = typeoids.typoid;
-UPDATE pg_catalog.pg_index SET indcollation[0] = 100
+-- Updating the index indcollations is particularly tedious, but since we
+-- don't currently allow SQL assignment to individual elements of oidvectors,
+-- there's little choice.
+
+UPDATE pg_catalog.pg_index SET indcollation =
+ pg_catalog.regexp_replace(indcollation::pg_catalog.text, '^0', '100')::pg_catalog.oidvector
WHERE indclass[0] IN (
WITH RECURSIVE typeoids(typoid) AS
( SELECT 'citext'::pg_catalog.regtype UNION
@@ -115,7 +120,8 @@ WHERE indclass[0] IN (
WHERE opcintype = typeoids.typoid
);
-UPDATE pg_catalog.pg_index SET indcollation[1] = 100
+UPDATE pg_catalog.pg_index SET indcollation =
+ pg_catalog.regexp_replace(indcollation::pg_catalog.text, E'^(\\d+) 0', E'\\1 100')::pg_catalog.oidvector
WHERE indclass[1] IN (
WITH RECURSIVE typeoids(typoid) AS
( SELECT 'citext'::pg_catalog.regtype UNION
@@ -125,7 +131,8 @@ WHERE indclass[1] IN (
WHERE opcintype = typeoids.typoid
);
-UPDATE pg_catalog.pg_index SET indcollation[2] = 100
+UPDATE pg_catalog.pg_index SET indcollation =
+ pg_catalog.regexp_replace(indcollation::pg_catalog.text, E'^(\\d+ \\d+) 0', E'\\1 100')::pg_catalog.oidvector
WHERE indclass[2] IN (
WITH RECURSIVE typeoids(typoid) AS
( SELECT 'citext'::pg_catalog.regtype UNION
@@ -135,7 +142,8 @@ WHERE indclass[2] IN (
WHERE opcintype = typeoids.typoid
);
-UPDATE pg_catalog.pg_index SET indcollation[3] = 100
+UPDATE pg_catalog.pg_index SET indcollation =
+ pg_catalog.regexp_replace(indcollation::pg_catalog.text, E'^(\\d+ \\d+ \\d+) 0', E'\\1 100')::pg_catalog.oidvector
WHERE indclass[3] IN (
WITH RECURSIVE typeoids(typoid) AS
( SELECT 'citext'::pg_catalog.regtype UNION
@@ -145,7 +153,8 @@ WHERE indclass[3] IN (
WHERE opcintype = typeoids.typoid
);
-UPDATE pg_catalog.pg_index SET indcollation[4] = 100
+UPDATE pg_catalog.pg_index SET indcollation =
+ pg_catalog.regexp_replace(indcollation::pg_catalog.text, E'^(\\d+ \\d+ \\d+ \\d+) 0', E'\\1 100')::pg_catalog.oidvector
WHERE indclass[4] IN (
WITH RECURSIVE typeoids(typoid) AS
( SELECT 'citext'::pg_catalog.regtype UNION
@@ -155,7 +164,8 @@ WHERE indclass[4] IN (
WHERE opcintype = typeoids.typoid
);
-UPDATE pg_catalog.pg_index SET indcollation[5] = 100
+UPDATE pg_catalog.pg_index SET indcollation =
+ pg_catalog.regexp_replace(indcollation::pg_catalog.text, E'^(\\d+ \\d+ \\d+ \\d+ \\d+) 0', E'\\1 100')::pg_catalog.oidvector
WHERE indclass[5] IN (
WITH RECURSIVE typeoids(typoid) AS
( SELECT 'citext'::pg_catalog.regtype UNION
@@ -165,7 +175,8 @@ WHERE indclass[5] IN (
WHERE opcintype = typeoids.typoid
);
-UPDATE pg_catalog.pg_index SET indcollation[6] = 100
+UPDATE pg_catalog.pg_index SET indcollation =
+ pg_catalog.regexp_replace(indcollation::pg_catalog.text, E'^(\\d+ \\d+ \\d+ \\d+ \\d+ \\d+) 0', E'\\1 100')::pg_catalog.oidvector
WHERE indclass[6] IN (
WITH RECURSIVE typeoids(typoid) AS
( SELECT 'citext'::pg_catalog.regtype UNION
@@ -175,7 +186,8 @@ WHERE indclass[6] IN (
WHERE opcintype = typeoids.typoid
);
-UPDATE pg_catalog.pg_index SET indcollation[7] = 100
+UPDATE pg_catalog.pg_index SET indcollation =
+ pg_catalog.regexp_replace(indcollation::pg_catalog.text, E'^(\\d+ \\d+ \\d+ \\d+ \\d+ \\d+ \\d+) 0', E'\\1 100')::pg_catalog.oidvector
WHERE indclass[7] IN (
WITH RECURSIVE typeoids(typoid) AS
( SELECT 'citext'::pg_catalog.regtype UNION
diff --git a/contrib/cube/Makefile b/contrib/cube/Makefile
index b5cd5d0f33..67f7867761 100644
--- a/contrib/cube/Makefile
+++ b/contrib/cube/Makefile
@@ -1,10 +1,11 @@
# contrib/cube/Makefile
MODULE_big = cube
-OBJS= cube.o cubeparse.o
+OBJS= cube.o cubeparse.o $(WIN32RES)
EXTENSION = cube
DATA = cube--1.0.sql cube--unpackaged--1.0.sql
+PGFILEDESC = "cube - multidimensional cube data type"
REGRESS = cube
diff --git a/contrib/cube/cube--unpackaged--1.0.sql b/contrib/cube/cube--unpackaged--1.0.sql
index 6859682786..1065512a29 100644
--- a/contrib/cube/cube--unpackaged--1.0.sql
+++ b/contrib/cube/cube--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/cube/cube--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION cube" to load this file. \quit
+\echo Use "CREATE EXTENSION cube FROM unpackaged" to load this file. \quit
ALTER EXTENSION cube ADD type cube;
ALTER EXTENSION cube ADD function cube_in(cstring);
diff --git a/contrib/cube/cube.c b/contrib/cube/cube.c
index b0305ef431..b9ccad994a 100644
--- a/contrib/cube/cube.c
+++ b/contrib/cube/cube.c
@@ -26,11 +26,6 @@ PG_MODULE_MAGIC;
#define ARRPTR(x) ( (double *) ARR_DATA_PTR(x) )
#define ARRNELEMS(x) ArrayGetNItems( ARR_NDIM(x), ARR_DIMS(x))
-extern int cube_yyparse(NDBOX **result);
-extern void cube_yyerror(NDBOX **result, const char *message);
-extern void cube_scanner_init(const char *str);
-extern void cube_scanner_finish(void);
-
/*
** Input/Output routines
*/
diff --git a/contrib/cube/cubedata.h b/contrib/cube/cubedata.h
index 5d44e11081..59c23ded6a 100644
--- a/contrib/cube/cubedata.h
+++ b/contrib/cube/cubedata.h
@@ -23,11 +23,10 @@ typedef struct NDBOX
unsigned int header;
/*
- * Variable length array. The lower left coordinates for each dimension
- * come first, followed by upper right coordinates unless the point flag
- * is set.
+ * The lower left coordinates for each dimension come first, followed by
+ * upper right coordinates unless the point flag is set.
*/
- double x[1];
+ double x[FLEXIBLE_ARRAY_MEMBER];
} NDBOX;
#define POINT_BIT 0x80000000
@@ -41,9 +40,18 @@ typedef struct NDBOX
#define LL_COORD(cube, i) ( (cube)->x[i] )
#define UR_COORD(cube, i) ( IS_POINT(cube) ? (cube)->x[i] : (cube)->x[(i) + DIM(cube)] )
-#define POINT_SIZE(_dim) (offsetof(NDBOX, x[0]) + sizeof(double)*(_dim))
-#define CUBE_SIZE(_dim) (offsetof(NDBOX, x[0]) + sizeof(double)*(_dim)*2)
+#define POINT_SIZE(_dim) (offsetof(NDBOX, x) + sizeof(double)*(_dim))
+#define CUBE_SIZE(_dim) (offsetof(NDBOX, x) + sizeof(double)*(_dim)*2)
-#define DatumGetNDBOX(x) ((NDBOX*)DatumGetPointer(x))
-#define PG_GETARG_NDBOX(x) DatumGetNDBOX( PG_DETOAST_DATUM(PG_GETARG_DATUM(x)) )
+#define DatumGetNDBOX(x) ((NDBOX *) PG_DETOAST_DATUM(x))
+#define PG_GETARG_NDBOX(x) DatumGetNDBOX(PG_GETARG_DATUM(x))
#define PG_RETURN_NDBOX(x) PG_RETURN_POINTER(x)
+
+/* in cubescan.l */
+extern int cube_yylex(void);
+extern void cube_yyerror(NDBOX **result, const char *message) pg_attribute_noreturn();
+extern void cube_scanner_init(const char *str);
+extern void cube_scanner_finish(void);
+
+/* in cubeparse.y */
+extern int cube_yyparse(NDBOX **result);
diff --git a/contrib/cube/cubeparse.y b/contrib/cube/cubeparse.y
index 0baee8e132..33606c741c 100644
--- a/contrib/cube/cubeparse.y
+++ b/contrib/cube/cubeparse.y
@@ -22,14 +22,9 @@
#define YYMALLOC palloc
#define YYFREE pfree
-extern int cube_yylex(void);
-
static char *scanbuf;
static int scanbuflen;
-extern int cube_yyparse(NDBOX **result);
-extern void cube_yyerror(NDBOX **result, const char *message);
-
static int delim_count(char *s, char delim);
static NDBOX * write_box(unsigned int dim, char *str1, char *str2);
static NDBOX * write_point_as_box(char *s, int dim);
diff --git a/contrib/cube/cubescan.l b/contrib/cube/cubescan.l
index e383b59d3d..4408e28387 100644
--- a/contrib/cube/cubescan.l
+++ b/contrib/cube/cubescan.l
@@ -4,8 +4,6 @@
* contrib/cube/cubescan.l
*/
-#include "postgres.h"
-
/* No reason to constrain amount of data slurped */
#define YY_READ_BUF_SIZE 16777216
@@ -24,12 +22,6 @@ static YY_BUFFER_STATE scanbufhandle;
/* this is now declared in cubeparse.y: */
/* static char *scanbuf; */
/* static int scanbuflen; */
-
-/* flex 2.5.4 doesn't bother with a decl for this */
-int cube_yylex(void);
-
-void cube_scanner_init(const char *str);
-void cube_scanner_finish(void);
%}
%option 8bit
@@ -60,7 +52,7 @@ float ({integer}|{real})([eE]{integer})?
%%
-void __attribute__((noreturn))
+void
yyerror(NDBOX **result, const char *message)
{
if (*yytext == YY_END_OF_BUFFER_CHAR)
diff --git a/contrib/dblink/Makefile b/contrib/dblink/Makefile
index 32314a0abb..b8d515716d 100644
--- a/contrib/dblink/Makefile
+++ b/contrib/dblink/Makefile
@@ -1,24 +1,24 @@
# contrib/dblink/Makefile
MODULE_big = dblink
-OBJS = dblink.o
+OBJS = dblink.o $(WIN32RES)
PG_CPPFLAGS = -I$(libpq_srcdir)
SHLIB_LINK = $(libpq)
-SHLIB_PREREQS = submake-libpq
EXTENSION = dblink
DATA = dblink--1.1.sql dblink--1.0--1.1.sql dblink--unpackaged--1.0.sql
+PGFILEDESC = "dblink - connect to other PostgreSQL databases"
-REGRESS = dblink
-
-# the db name is hard-coded in the tests
-override USE_MODULE_DB =
+REGRESS = paths dblink
+REGRESS_OPTS = --dlpath=$(top_builddir)/src/test/regress
+EXTRA_CLEAN = sql/paths.sql expected/paths.out
ifdef USE_PGXS
PG_CONFIG = pg_config
PGXS := $(shell $(PG_CONFIG) --pgxs)
include $(PGXS)
else
+SHLIB_PREREQS = submake-libpq
subdir = contrib/dblink
top_builddir = ../..
include $(top_builddir)/src/Makefile.global
diff --git a/contrib/dblink/dblink--unpackaged--1.0.sql b/contrib/dblink/dblink--unpackaged--1.0.sql
index 29f5bed0c1..f3923b5b35 100644
--- a/contrib/dblink/dblink--unpackaged--1.0.sql
+++ b/contrib/dblink/dblink--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/dblink/dblink--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION dblink" to load this file. \quit
+\echo Use "CREATE EXTENSION dblink FROM unpackaged" to load this file. \quit
ALTER EXTENSION dblink ADD function dblink_connect(text);
ALTER EXTENSION dblink ADD function dblink_connect(text,text);
diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c
index a81853fa91..c5892d37cb 100644
--- a/contrib/dblink/dblink.c
+++ b/contrib/dblink/dblink.c
@@ -9,7 +9,7 @@
* Shridhar Daithankar <shridhar_daithankar@persistent.co.in>
*
* contrib/dblink/dblink.c
- * Copyright (c) 2001-2014, PostgreSQL Global Development Group
+ * Copyright (c) 2001-2015, PostgreSQL Global Development Group
* ALL RIGHTS RESERVED;
*
* Permission to use, copy, modify, and distribute this software and its
@@ -94,8 +94,8 @@ static void materializeQueryResult(FunctionCallInfo fcinfo,
const char *conname,
const char *sql,
bool fail);
-static PGresult *storeQueryResult(storeInfo *sinfo, PGconn *conn, const char *sql);
-static void storeRow(storeInfo *sinfo, PGresult *res, bool first);
+static PGresult *storeQueryResult(volatile storeInfo *sinfo, PGconn *conn, const char *sql);
+static void storeRow(volatile storeInfo *sinfo, PGresult *res, bool first);
static remoteConn *getConnectionByName(const char *name);
static HTAB *createConnHash(void);
static void createNewConnection(const char *name, remoteConn *rconn);
@@ -966,17 +966,24 @@ materializeQueryResult(FunctionCallInfo fcinfo,
{
ReturnSetInfo *rsinfo = (ReturnSetInfo *) fcinfo->resultinfo;
PGresult *volatile res = NULL;
- storeInfo sinfo;
+ volatile storeInfo sinfo;
/* prepTuplestoreResult must have been called previously */
Assert(rsinfo->returnMode == SFRM_Materialize);
/* initialize storeInfo to empty */
- memset(&sinfo, 0, sizeof(sinfo));
+ memset((void *) &sinfo, 0, sizeof(sinfo));
sinfo.fcinfo = fcinfo;
PG_TRY();
{
+ /* Create short-lived memory context for data conversions */
+ sinfo.tmpcontext = AllocSetContextCreate(CurrentMemoryContext,
+ "dblink temporary context",
+ ALLOCSET_DEFAULT_MINSIZE,
+ ALLOCSET_DEFAULT_INITSIZE,
+ ALLOCSET_DEFAULT_MAXSIZE);
+
/* execute query, collecting any tuples into the tuplestore */
res = storeQueryResult(&sinfo, conn, sql);
@@ -1041,6 +1048,12 @@ materializeQueryResult(FunctionCallInfo fcinfo,
PQclear(res);
res = NULL;
}
+
+ /* clean up data conversion short-lived memory context */
+ if (sinfo.tmpcontext != NULL)
+ MemoryContextDelete(sinfo.tmpcontext);
+ sinfo.tmpcontext = NULL;
+
PQclear(sinfo.last_res);
sinfo.last_res = NULL;
PQclear(sinfo.cur_res);
@@ -1064,7 +1077,7 @@ materializeQueryResult(FunctionCallInfo fcinfo,
* Execute query, and send any result rows to sinfo->tuplestore.
*/
static PGresult *
-storeQueryResult(storeInfo *sinfo, PGconn *conn, const char *sql)
+storeQueryResult(volatile storeInfo *sinfo, PGconn *conn, const char *sql)
{
bool first = true;
int nestlevel = -1;
@@ -1132,7 +1145,7 @@ storeQueryResult(storeInfo *sinfo, PGconn *conn, const char *sql)
* (in this case the PGresult might contain either zero or one row).
*/
static void
-storeRow(storeInfo *sinfo, PGresult *res, bool first)
+storeRow(volatile storeInfo *sinfo, PGresult *res, bool first)
{
int nfields = PQnfields(res);
HeapTuple tuple;
@@ -1204,15 +1217,6 @@ storeRow(storeInfo *sinfo, PGresult *res, bool first)
if (sinfo->cstrs)
pfree(sinfo->cstrs);
sinfo->cstrs = (char **) palloc(nfields * sizeof(char *));
-
- /* Create short-lived memory context for data conversions */
- if (!sinfo->tmpcontext)
- sinfo->tmpcontext =
- AllocSetContextCreate(CurrentMemoryContext,
- "dblink temporary context",
- ALLOCSET_DEFAULT_MINSIZE,
- ALLOCSET_DEFAULT_INITSIZE,
- ALLOCSET_DEFAULT_MAXSIZE);
}
/* Should have a single-row result if we get here */
@@ -2976,7 +2980,7 @@ applyRemoteGucs(PGconn *conn)
/* Apply the option (this will throw error on failure) */
(void) set_config_option(gucName, remoteVal,
PGC_USERSET, PGC_S_SESSION,
- GUC_ACTION_SAVE, true, 0);
+ GUC_ACTION_SAVE, true, 0, false);
}
return nestlevel;
diff --git a/contrib/dblink/dblink.h b/contrib/dblink/dblink.h
index 270d619ed6..de6c06df8e 100644
--- a/contrib/dblink/dblink.h
+++ b/contrib/dblink/dblink.h
@@ -9,7 +9,7 @@
* Shridhar Daithankar <shridhar_daithankar@persistent.co.in>
*
* contrib/dblink/dblink.h
- * Copyright (c) 2001-2014, PostgreSQL Global Development Group
+ * Copyright (c) 2001-2015, PostgreSQL Global Development Group
* ALL RIGHTS RESERVED;
*
* Permission to use, copy, modify, and distribute this software and its
diff --git a/contrib/dblink/expected/.gitignore b/contrib/dblink/expected/.gitignore
new file mode 100644
index 0000000000..d9c7942c64
--- /dev/null
+++ b/contrib/dblink/expected/.gitignore
@@ -0,0 +1 @@
+/paths.out
diff --git a/contrib/dblink/expected/dblink.out b/contrib/dblink/expected/dblink.out
index f237c43d3d..a49b5629a1 100644
--- a/contrib/dblink/expected/dblink.out
+++ b/contrib/dblink/expected/dblink.out
@@ -88,9 +88,12 @@ SELECT dblink_build_sql_delete('"MySchema"."Foo"','1 2',2,'{"0", "a"}');
DELETE FROM "MySchema"."Foo" WHERE f1 = '0' AND f2 = 'a'
(1 row)
+CREATE FUNCTION connection_parameters() RETURNS text LANGUAGE SQL AS $f$
+ SELECT $$dbname='$$||current_database()||$$' port=$$||current_setting('port');
+$f$;
-- regular old dblink
SELECT *
-FROM dblink('dbname=contrib_regression','SELECT * FROM foo') AS t(a int, b text, c text[])
+FROM dblink(connection_parameters(),'SELECT * FROM foo') AS t(a int, b text, c text[])
WHERE t.a > 7;
a | b | c
---+---+------------
@@ -103,8 +106,35 @@ SELECT *
FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[])
WHERE t.a > 7;
ERROR: connection not available
+-- The first-level connection's backend will crash on exit given OpenLDAP
+-- [2.4.24, 2.4.31]. We won't see evidence of any crash until the victim
+-- process terminates and the postmaster responds. If process termination
+-- entails writing a core dump, that can take awhile. Wait for the process to
+-- vanish. At that point, the postmaster has called waitpid() on the crashed
+-- process, and it will accept no new connections until it has reinitialized
+-- the cluster. (We can't exploit pg_stat_activity, because the crash happens
+-- after the backend updates shared memory to reflect its impending exit.)
+DO $pl$
+DECLARE
+ detail text;
+BEGIN
+ PERFORM wait_pid(crash_pid)
+ FROM dblink(connection_parameters(), $$
+ SELECT pg_backend_pid() FROM dblink(
+ 'service=test_ldap '||connection_parameters(),
+ -- This string concatenation is a hack to shoehorn a
+ -- set_pgservicefile call into the SQL statement.
+ 'SELECT 1' || set_pgservicefile('pg_service.conf')
+ ) t(c int)
+ $$) AS t(crash_pid int);
+EXCEPTION WHEN OTHERS THEN
+ GET STACKED DIAGNOSTICS detail = PG_EXCEPTION_DETAIL;
+ -- Expected error in a non-LDAP build.
+ IF NOT detail LIKE 'syntax error in service file%' THEN RAISE; END IF;
+END
+$pl$;
-- create a persistent connection
-SELECT dblink_connect('dbname=contrib_regression');
+SELECT dblink_connect(connection_parameters());
dblink_connect
----------------
OK
@@ -240,14 +270,14 @@ WHERE t.a > 7;
ERROR: connection not available
-- put more data into our slave table, first using arbitrary connection syntax
-- but truncate the actual return value so we can use diff to check for success
-SELECT substr(dblink_exec('dbname=contrib_regression','INSERT INTO foo VALUES(10,''k'',''{"a10","b10","c10"}'')'),1,6);
+SELECT substr(dblink_exec(connection_parameters(),'INSERT INTO foo VALUES(10,''k'',''{"a10","b10","c10"}'')'),1,6);
substr
--------
INSERT
(1 row)
-- create a persistent connection
-SELECT dblink_connect('dbname=contrib_regression');
+SELECT dblink_connect(connection_parameters());
dblink_connect
----------------
OK
@@ -347,7 +377,7 @@ ERROR: could not establish connection
DETAIL: missing "=" after "myconn" in connection info string
-- create a named persistent connection
-SELECT dblink_connect('myconn','dbname=contrib_regression');
+SELECT dblink_connect('myconn',connection_parameters());
dblink_connect
----------------
OK
@@ -376,10 +406,10 @@ CONTEXT: Error occurred on dblink connection named "myconn": could not execute
-- create a second named persistent connection
-- should error with "duplicate connection name"
-SELECT dblink_connect('myconn','dbname=contrib_regression');
+SELECT dblink_connect('myconn',connection_parameters());
ERROR: duplicate connection name
-- create a second named persistent connection with a new name
-SELECT dblink_connect('myconn2','dbname=contrib_regression');
+SELECT dblink_connect('myconn2',connection_parameters());
dblink_connect
----------------
OK
@@ -574,7 +604,7 @@ ERROR: could not establish connection
DETAIL: missing "=" after "myconn" in connection info string
-- create a named persistent connection
-SELECT dblink_connect('myconn','dbname=contrib_regression');
+SELECT dblink_connect('myconn',connection_parameters());
dblink_connect
----------------
OK
@@ -650,7 +680,7 @@ SELECT dblink_disconnect('myconn');
SELECT dblink_disconnect('myconn');
ERROR: connection "myconn" not available
-- test asynchronous queries
-SELECT dblink_connect('dtest1', 'dbname=contrib_regression');
+SELECT dblink_connect('dtest1', connection_parameters());
dblink_connect
----------------
OK
@@ -663,7 +693,7 @@ SELECT * from
1
(1 row)
-SELECT dblink_connect('dtest2', 'dbname=contrib_regression');
+SELECT dblink_connect('dtest2', connection_parameters());
dblink_connect
----------------
OK
@@ -676,7 +706,7 @@ SELECT * from
1
(1 row)
-SELECT dblink_connect('dtest3', 'dbname=contrib_regression');
+SELECT dblink_connect('dtest3', connection_parameters());
dblink_connect
----------------
OK
@@ -750,7 +780,7 @@ SELECT * from result;
10 | k | {a10,b10,c10}
(11 rows)
-SELECT dblink_connect('dtest1', 'dbname=contrib_regression');
+SELECT dblink_connect('dtest1', connection_parameters());
dblink_connect
----------------
OK
@@ -782,18 +812,23 @@ SELECT dblink_disconnect('dtest1');
(1 row)
-- test foreign data wrapper functionality
-CREATE USER dblink_regression_test;
-CREATE SERVER fdtest FOREIGN DATA WRAPPER dblink_fdw
- OPTIONS (dbname 'contrib_regression');
+CREATE ROLE dblink_regression_test;
+DO $d$
+ BEGIN
+ EXECUTE $$CREATE SERVER fdtest FOREIGN DATA WRAPPER dblink_fdw
+ OPTIONS (dbname '$$||current_database()||$$',
+ port '$$||current_setting('port')||$$'
+ )$$;
+ END;
+$d$;
CREATE USER MAPPING FOR public SERVER fdtest
OPTIONS (server 'localhost'); -- fail, can't specify server here
ERROR: invalid option "server"
HINT: Valid options in this context are: user, password
-CREATE USER MAPPING FOR public SERVER fdtest;
+CREATE USER MAPPING FOR public SERVER fdtest OPTIONS (user :'USER');
GRANT USAGE ON FOREIGN SERVER fdtest TO dblink_regression_test;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO dblink_regression_test;
-\set ORIGINAL_USER :USER
-\c - dblink_regression_test
+SET SESSION AUTHORIZATION dblink_regression_test;
-- should fail
SELECT dblink_connect('myconn', 'fdtest');
ERROR: password is required
@@ -821,14 +856,14 @@ SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[])
10 | k | {a10,b10,c10}
(11 rows)
-\c - :ORIGINAL_USER
+\c - -
REVOKE USAGE ON FOREIGN SERVER fdtest FROM dblink_regression_test;
REVOKE EXECUTE ON FUNCTION dblink_connect_u(text, text) FROM dblink_regression_test;
DROP USER dblink_regression_test;
DROP USER MAPPING FOR public SERVER fdtest;
DROP SERVER fdtest;
-- test asynchronous notifications
-SELECT dblink_connect('dbname=contrib_regression');
+SELECT dblink_connect(connection_parameters());
dblink_connect
----------------
OK
@@ -917,7 +952,7 @@ SELECT dblink_build_sql_delete('test_dropped', '1', 1,
SET datestyle = ISO, MDY;
SET intervalstyle = postgres;
SET timezone = UTC;
-SELECT dblink_connect('myconn','dbname=contrib_regression');
+SELECT dblink_connect('myconn',connection_parameters());
dblink_connect
----------------
OK
diff --git a/contrib/dblink/input/paths.source b/contrib/dblink/input/paths.source
new file mode 100644
index 0000000000..aab3a3b2bf
--- /dev/null
+++ b/contrib/dblink/input/paths.source
@@ -0,0 +1,14 @@
+-- Initialization that requires path substitution.
+
+CREATE FUNCTION putenv(text)
+ RETURNS void
+ AS '@libdir@/regress@DLSUFFIX@', 'regress_putenv'
+ LANGUAGE C STRICT;
+
+CREATE FUNCTION wait_pid(int)
+ RETURNS void
+ AS '@libdir@/regress@DLSUFFIX@'
+ LANGUAGE C STRICT;
+
+CREATE FUNCTION set_pgservicefile(text) RETURNS void LANGUAGE SQL
+ AS $$SELECT putenv('PGSERVICEFILE=@abs_srcdir@/' || $1)$$;
diff --git a/contrib/dblink/output/paths.source b/contrib/dblink/output/paths.source
new file mode 100644
index 0000000000..e1097f0996
--- /dev/null
+++ b/contrib/dblink/output/paths.source
@@ -0,0 +1,11 @@
+-- Initialization that requires path substitution.
+CREATE FUNCTION putenv(text)
+ RETURNS void
+ AS '@libdir@/regress@DLSUFFIX@', 'regress_putenv'
+ LANGUAGE C STRICT;
+CREATE FUNCTION wait_pid(int)
+ RETURNS void
+ AS '@libdir@/regress@DLSUFFIX@'
+ LANGUAGE C STRICT;
+CREATE FUNCTION set_pgservicefile(text) RETURNS void LANGUAGE SQL
+ AS $$SELECT putenv('PGSERVICEFILE=@abs_srcdir@/' || $1)$$;
diff --git a/contrib/dblink/pg_service.conf b/contrib/dblink/pg_service.conf
new file mode 100644
index 0000000000..92201f0ad4
--- /dev/null
+++ b/contrib/dblink/pg_service.conf
@@ -0,0 +1,7 @@
+# pg_service.conf for minimally exercising libpq use of LDAP.
+
+# Having failed to reach an LDAP server, libpq essentially ignores the
+# "service=test_ldap" in its connection string. Contact the "discard"
+# service; the test works whether or not it answers.
+[test_ldap]
+ldap://127.0.0.1:9/base?attribute?one?filter
diff --git a/contrib/dblink/sql/.gitignore b/contrib/dblink/sql/.gitignore
new file mode 100644
index 0000000000..d17507846d
--- /dev/null
+++ b/contrib/dblink/sql/.gitignore
@@ -0,0 +1 @@
+/paths.sql
diff --git a/contrib/dblink/sql/dblink.sql b/contrib/dblink/sql/dblink.sql
index 2a107601c5..ea78cc2929 100644
--- a/contrib/dblink/sql/dblink.sql
+++ b/contrib/dblink/sql/dblink.sql
@@ -55,9 +55,13 @@ SELECT dblink_build_sql_update('"MySchema"."Foo"','1 2',2,'{"0", "a"}','{"99", "
-- build a delete statement based on a local tuple,
SELECT dblink_build_sql_delete('"MySchema"."Foo"','1 2',2,'{"0", "a"}');
+CREATE FUNCTION connection_parameters() RETURNS text LANGUAGE SQL AS $f$
+ SELECT $$dbname='$$||current_database()||$$' port=$$||current_setting('port');
+$f$;
+
-- regular old dblink
SELECT *
-FROM dblink('dbname=contrib_regression','SELECT * FROM foo') AS t(a int, b text, c text[])
+FROM dblink(connection_parameters(),'SELECT * FROM foo') AS t(a int, b text, c text[])
WHERE t.a > 7;
-- should generate "connection not available" error
@@ -65,8 +69,36 @@ SELECT *
FROM dblink('SELECT * FROM foo') AS t(a int, b text, c text[])
WHERE t.a > 7;
+-- The first-level connection's backend will crash on exit given OpenLDAP
+-- [2.4.24, 2.4.31]. We won't see evidence of any crash until the victim
+-- process terminates and the postmaster responds. If process termination
+-- entails writing a core dump, that can take awhile. Wait for the process to
+-- vanish. At that point, the postmaster has called waitpid() on the crashed
+-- process, and it will accept no new connections until it has reinitialized
+-- the cluster. (We can't exploit pg_stat_activity, because the crash happens
+-- after the backend updates shared memory to reflect its impending exit.)
+DO $pl$
+DECLARE
+ detail text;
+BEGIN
+ PERFORM wait_pid(crash_pid)
+ FROM dblink(connection_parameters(), $$
+ SELECT pg_backend_pid() FROM dblink(
+ 'service=test_ldap '||connection_parameters(),
+ -- This string concatenation is a hack to shoehorn a
+ -- set_pgservicefile call into the SQL statement.
+ 'SELECT 1' || set_pgservicefile('pg_service.conf')
+ ) t(c int)
+ $$) AS t(crash_pid int);
+EXCEPTION WHEN OTHERS THEN
+ GET STACKED DIAGNOSTICS detail = PG_EXCEPTION_DETAIL;
+ -- Expected error in a non-LDAP build.
+ IF NOT detail LIKE 'syntax error in service file%' THEN RAISE; END IF;
+END
+$pl$;
+
-- create a persistent connection
-SELECT dblink_connect('dbname=contrib_regression');
+SELECT dblink_connect(connection_parameters());
-- use the persistent connection
SELECT *
@@ -127,10 +159,10 @@ WHERE t.a > 7;
-- put more data into our slave table, first using arbitrary connection syntax
-- but truncate the actual return value so we can use diff to check for success
-SELECT substr(dblink_exec('dbname=contrib_regression','INSERT INTO foo VALUES(10,''k'',''{"a10","b10","c10"}'')'),1,6);
+SELECT substr(dblink_exec(connection_parameters(),'INSERT INTO foo VALUES(10,''k'',''{"a10","b10","c10"}'')'),1,6);
-- create a persistent connection
-SELECT dblink_connect('dbname=contrib_regression');
+SELECT dblink_connect(connection_parameters());
-- put more data into our slave table, using persistent connection syntax
-- but truncate the actual return value so we can use diff to check for success
@@ -176,7 +208,7 @@ FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[])
WHERE t.a > 7;
-- create a named persistent connection
-SELECT dblink_connect('myconn','dbname=contrib_regression');
+SELECT dblink_connect('myconn',connection_parameters());
-- use the named persistent connection
SELECT *
@@ -190,10 +222,10 @@ WHERE t.a > 7;
-- create a second named persistent connection
-- should error with "duplicate connection name"
-SELECT dblink_connect('myconn','dbname=contrib_regression');
+SELECT dblink_connect('myconn',connection_parameters());
-- create a second named persistent connection with a new name
-SELECT dblink_connect('myconn2','dbname=contrib_regression');
+SELECT dblink_connect('myconn2',connection_parameters());
-- use the second named persistent connection
SELECT *
@@ -279,7 +311,7 @@ FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[])
WHERE t.a > 7;
-- create a named persistent connection
-SELECT dblink_connect('myconn','dbname=contrib_regression');
+SELECT dblink_connect('myconn',connection_parameters());
-- put more data into our slave table, using named persistent connection syntax
-- but truncate the actual return value so we can use diff to check for success
@@ -313,15 +345,15 @@ SELECT dblink_disconnect('myconn');
SELECT dblink_disconnect('myconn');
-- test asynchronous queries
-SELECT dblink_connect('dtest1', 'dbname=contrib_regression');
+SELECT dblink_connect('dtest1', connection_parameters());
SELECT * from
dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1;
-SELECT dblink_connect('dtest2', 'dbname=contrib_regression');
+SELECT dblink_connect('dtest2', connection_parameters());
SELECT * from
dblink_send_query('dtest2', 'select * from foo where f1 > 2 and f1 < 7') as t1;
-SELECT dblink_connect('dtest3', 'dbname=contrib_regression');
+SELECT dblink_connect('dtest3', connection_parameters());
SELECT * from
dblink_send_query('dtest3', 'select * from foo where f1 > 6') as t1;
@@ -350,7 +382,7 @@ SELECT dblink_disconnect('dtest3');
SELECT * from result;
-SELECT dblink_connect('dtest1', 'dbname=contrib_regression');
+SELECT dblink_connect('dtest1', connection_parameters());
SELECT * from
dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1;
@@ -359,25 +391,31 @@ SELECT dblink_error_message('dtest1');
SELECT dblink_disconnect('dtest1');
-- test foreign data wrapper functionality
-CREATE USER dblink_regression_test;
-CREATE SERVER fdtest FOREIGN DATA WRAPPER dblink_fdw
- OPTIONS (dbname 'contrib_regression');
+CREATE ROLE dblink_regression_test;
+DO $d$
+ BEGIN
+ EXECUTE $$CREATE SERVER fdtest FOREIGN DATA WRAPPER dblink_fdw
+ OPTIONS (dbname '$$||current_database()||$$',
+ port '$$||current_setting('port')||$$'
+ )$$;
+ END;
+$d$;
+
CREATE USER MAPPING FOR public SERVER fdtest
OPTIONS (server 'localhost'); -- fail, can't specify server here
-CREATE USER MAPPING FOR public SERVER fdtest;
+CREATE USER MAPPING FOR public SERVER fdtest OPTIONS (user :'USER');
GRANT USAGE ON FOREIGN SERVER fdtest TO dblink_regression_test;
GRANT EXECUTE ON FUNCTION dblink_connect_u(text, text) TO dblink_regression_test;
-\set ORIGINAL_USER :USER
-\c - dblink_regression_test
+SET SESSION AUTHORIZATION dblink_regression_test;
-- should fail
SELECT dblink_connect('myconn', 'fdtest');
-- should succeed
SELECT dblink_connect_u('myconn', 'fdtest');
SELECT * FROM dblink('myconn','SELECT * FROM foo') AS t(a int, b text, c text[]);
-\c - :ORIGINAL_USER
+\c - -
REVOKE USAGE ON FOREIGN SERVER fdtest FROM dblink_regression_test;
REVOKE EXECUTE ON FUNCTION dblink_connect_u(text, text) FROM dblink_regression_test;
DROP USER dblink_regression_test;
@@ -385,7 +423,7 @@ DROP USER MAPPING FOR public SERVER fdtest;
DROP SERVER fdtest;
-- test asynchronous notifications
-SELECT dblink_connect('dbname=contrib_regression');
+SELECT dblink_connect(connection_parameters());
--should return listen
SELECT dblink_exec('LISTEN regression');
@@ -431,7 +469,7 @@ SELECT dblink_build_sql_delete('test_dropped', '1', 1,
SET datestyle = ISO, MDY;
SET intervalstyle = postgres;
SET timezone = UTC;
-SELECT dblink_connect('myconn','dbname=contrib_regression');
+SELECT dblink_connect('myconn',connection_parameters());
SELECT dblink_exec('myconn', 'SET datestyle = GERMAN, DMY;');
-- single row synchronous case
diff --git a/contrib/dict_int/Makefile b/contrib/dict_int/Makefile
index 3a3fc368dc..f6ae24aa4d 100644
--- a/contrib/dict_int/Makefile
+++ b/contrib/dict_int/Makefile
@@ -1,10 +1,11 @@
# contrib/dict_int/Makefile
MODULE_big = dict_int
-OBJS = dict_int.o
+OBJS = dict_int.o $(WIN32RES)
EXTENSION = dict_int
DATA = dict_int--1.0.sql dict_int--unpackaged--1.0.sql
+PGFILEDESC = "dict_int - add-on dictionary template for full-text search"
REGRESS = dict_int
diff --git a/contrib/dict_int/dict_int--unpackaged--1.0.sql b/contrib/dict_int/dict_int--unpackaged--1.0.sql
index ef59b046ee..1b2d862e1f 100644
--- a/contrib/dict_int/dict_int--unpackaged--1.0.sql
+++ b/contrib/dict_int/dict_int--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/dict_int/dict_int--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION dict_int" to load this file. \quit
+\echo Use "CREATE EXTENSION dict_int FROM unpackaged" to load this file. \quit
ALTER EXTENSION dict_int ADD function dintdict_init(internal);
ALTER EXTENSION dict_int ADD function dintdict_lexize(internal,internal,internal,internal);
diff --git a/contrib/dict_int/dict_int.c b/contrib/dict_int/dict_int.c
index 79067a86f0..73cb73de9b 100644
--- a/contrib/dict_int/dict_int.c
+++ b/contrib/dict_int/dict_int.c
@@ -3,7 +3,7 @@
* dict_int.c
* Text search dictionary for integers
*
- * Copyright (c) 2007-2014, PostgreSQL Global Development Group
+ * Copyright (c) 2007-2015, PostgreSQL Global Development Group
*
* IDENTIFICATION
* contrib/dict_int/dict_int.c
@@ -17,7 +17,6 @@
PG_MODULE_MAGIC;
-
typedef struct
{
int maxlen;
diff --git a/contrib/dict_xsyn/Makefile b/contrib/dict_xsyn/Makefile
index ce92baa478..0c401cf3c8 100644
--- a/contrib/dict_xsyn/Makefile
+++ b/contrib/dict_xsyn/Makefile
@@ -1,11 +1,12 @@
# contrib/dict_xsyn/Makefile
MODULE_big = dict_xsyn
-OBJS = dict_xsyn.o
+OBJS = dict_xsyn.o $(WIN32RES)
EXTENSION = dict_xsyn
DATA = dict_xsyn--1.0.sql dict_xsyn--unpackaged--1.0.sql
DATA_TSEARCH = xsyn_sample.rules
+PGFILEDESC = "dict_xsyn - add-on dictionary template for full-text search"
REGRESS = dict_xsyn
diff --git a/contrib/dict_xsyn/dict_xsyn--unpackaged--1.0.sql b/contrib/dict_xsyn/dict_xsyn--unpackaged--1.0.sql
index 1d193f7981..7533da1902 100644
--- a/contrib/dict_xsyn/dict_xsyn--unpackaged--1.0.sql
+++ b/contrib/dict_xsyn/dict_xsyn--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/dict_xsyn/dict_xsyn--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION dict_xsyn" to load this file. \quit
+\echo Use "CREATE EXTENSION dict_xsyn FROM unpackaged" to load this file. \quit
ALTER EXTENSION dict_xsyn ADD function dxsyn_init(internal);
ALTER EXTENSION dict_xsyn ADD function dxsyn_lexize(internal,internal,internal,internal);
diff --git a/contrib/dict_xsyn/dict_xsyn.c b/contrib/dict_xsyn/dict_xsyn.c
index 1c27565f5e..dacb2cc638 100644
--- a/contrib/dict_xsyn/dict_xsyn.c
+++ b/contrib/dict_xsyn/dict_xsyn.c
@@ -3,7 +3,7 @@
* dict_xsyn.c
* Extended synonym dictionary
*
- * Copyright (c) 2007-2014, PostgreSQL Global Development Group
+ * Copyright (c) 2007-2015, PostgreSQL Global Development Group
*
* IDENTIFICATION
* contrib/dict_xsyn/dict_xsyn.c
diff --git a/contrib/dummy_seclabel/Makefile b/contrib/dummy_seclabel/Makefile
deleted file mode 100644
index 105400f5f9..0000000000
--- a/contrib/dummy_seclabel/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-# contrib/dummy_seclabel/Makefile
-
-MODULES = dummy_seclabel
-
-ifdef USE_PGXS
-PG_CONFIG = pg_config
-PGXS := $(shell $(PG_CONFIG) --pgxs)
-include $(PGXS)
-else
-subdir = contrib/dummy_seclabel
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
-include $(top_srcdir)/contrib/contrib-global.mk
-endif
diff --git a/contrib/earthdistance/Makefile b/contrib/earthdistance/Makefile
index 48a7cf8c7c..93dcbe3a31 100644
--- a/contrib/earthdistance/Makefile
+++ b/contrib/earthdistance/Makefile
@@ -4,6 +4,7 @@ MODULES = earthdistance
EXTENSION = earthdistance
DATA = earthdistance--1.0.sql earthdistance--unpackaged--1.0.sql
+PGFILEDESC = "earthdistance - calculate distances on the surface of the Earth"
REGRESS = earthdistance
REGRESS_OPTS = --extra-install=contrib/cube
diff --git a/contrib/earthdistance/earthdistance--unpackaged--1.0.sql b/contrib/earthdistance/earthdistance--unpackaged--1.0.sql
index 362e0ac107..ae787f6877 100644
--- a/contrib/earthdistance/earthdistance--unpackaged--1.0.sql
+++ b/contrib/earthdistance/earthdistance--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/earthdistance/earthdistance--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION earthdistance" to load this file. \quit
+\echo Use "CREATE EXTENSION earthdistance FROM unpackaged" to load this file. \quit
ALTER EXTENSION earthdistance ADD function earth();
ALTER EXTENSION earthdistance ADD type earth;
diff --git a/contrib/earthdistance/earthdistance.c b/contrib/earthdistance/earthdistance.c
index 6bbebdfd1a..861b166373 100644
--- a/contrib/earthdistance/earthdistance.c
+++ b/contrib/earthdistance/earthdistance.c
@@ -10,7 +10,6 @@
#define M_PI 3.14159265358979323846
#endif
-
PG_MODULE_MAGIC;
/* Earth's radius is in statute miles. */
diff --git a/contrib/file_fdw/Makefile b/contrib/file_fdw/Makefile
index 4616cec633..4da9f2d697 100644
--- a/contrib/file_fdw/Makefile
+++ b/contrib/file_fdw/Makefile
@@ -4,6 +4,7 @@ MODULES = file_fdw
EXTENSION = file_fdw
DATA = file_fdw--1.0.sql
+PGFILEDESC = "file_fdw - foreign data wrapper for files"
REGRESS = file_fdw
diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
index 5a4d5aac21..4368897581 100644
--- a/contrib/file_fdw/file_fdw.c
+++ b/contrib/file_fdw/file_fdw.c
@@ -3,7 +3,7 @@
* file_fdw.c
* foreign-data wrapper for server-side flat files.
*
- * Copyright (c) 2010-2014, PostgreSQL Global Development Group
+ * Copyright (c) 2010-2015, PostgreSQL Global Development Group
*
* IDENTIFICATION
* contrib/file_fdw/file_fdw.c
@@ -932,7 +932,7 @@ estimate_size(PlannerInfo *root, RelOptInfo *baserel,
int tuple_width;
tuple_width = MAXALIGN(baserel->width) +
- MAXALIGN(sizeof(HeapTupleHeaderData));
+ MAXALIGN(SizeofHeapTupleHeader);
ntuples = clamp_row_est((double) stat_buf.st_size /
(double) tuple_width);
}
diff --git a/contrib/file_fdw/input/file_fdw.source b/contrib/file_fdw/input/file_fdw.source
index b608372825..416753dcad 100644
--- a/contrib/file_fdw/input/file_fdw.source
+++ b/contrib/file_fdw/input/file_fdw.source
@@ -62,7 +62,7 @@ CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', null '
CREATE FOREIGN TABLE tbl () SERVER file_server; -- ERROR
CREATE FOREIGN TABLE agg_text (
- a int2,
+ a int2 CHECK (a >= 0),
b float4
) SERVER file_server
OPTIONS (format 'text', filename '@abs_srcdir@/data/agg.data', delimiter ' ', null '\N');
@@ -72,11 +72,13 @@ CREATE FOREIGN TABLE agg_csv (
b float4
) SERVER file_server
OPTIONS (format 'csv', filename '@abs_srcdir@/data/agg.csv', header 'true', delimiter ';', quote '@', escape '"', null '');
+ALTER FOREIGN TABLE agg_csv ADD CHECK (a >= 0);
CREATE FOREIGN TABLE agg_bad (
a int2,
b float4
) SERVER file_server
OPTIONS (format 'csv', filename '@abs_srcdir@/data/agg.bad', header 'true', delimiter ';', quote '@', escape '"', null '');
+ALTER FOREIGN TABLE agg_bad ADD CHECK (a >= 0);
-- per-column options tests
CREATE FOREIGN TABLE text_csv (
@@ -131,9 +133,35 @@ SELECT tableoid::regclass, b FROM agg_csv;
INSERT INTO agg_csv VALUES(1,2.0);
UPDATE agg_csv SET a = 1;
DELETE FROM agg_csv WHERE a = 100;
--- but this should be ignored
+-- but this should be allowed
SELECT * FROM agg_csv FOR UPDATE;
+-- constraint exclusion tests
+\t on
+EXPLAIN (VERBOSE, COSTS FALSE) SELECT * FROM agg_csv WHERE a < 0;
+\t off
+SELECT * FROM agg_csv WHERE a < 0;
+SET constraint_exclusion = 'on';
+\t on
+EXPLAIN (VERBOSE, COSTS FALSE) SELECT * FROM agg_csv WHERE a < 0;
+\t off
+SELECT * FROM agg_csv WHERE a < 0;
+RESET constraint_exclusion;
+
+-- table inheritance tests
+CREATE TABLE agg (a int2, b float4);
+ALTER FOREIGN TABLE agg_csv INHERIT agg;
+SELECT tableoid::regclass, * FROM agg;
+SELECT tableoid::regclass, * FROM agg_csv;
+SELECT tableoid::regclass, * FROM ONLY agg;
+-- updates aren't supported
+UPDATE agg SET a = 1;
+DELETE FROM agg WHERE a = 100;
+-- but this should be allowed
+SELECT tableoid::regclass, * FROM agg FOR UPDATE;
+ALTER FOREIGN TABLE agg_csv NO INHERIT agg;
+DROP TABLE agg;
+
-- privilege tests
SET ROLE file_fdw_superuser;
SELECT * FROM agg_text ORDER BY a;
diff --git a/contrib/file_fdw/output/file_fdw.source b/contrib/file_fdw/output/file_fdw.source
index bc183b8874..8719694276 100644
--- a/contrib/file_fdw/output/file_fdw.source
+++ b/contrib/file_fdw/output/file_fdw.source
@@ -78,7 +78,7 @@ ERROR: COPY null representation cannot use newline or carriage return
CREATE FOREIGN TABLE tbl () SERVER file_server; -- ERROR
ERROR: filename is required for file_fdw foreign tables
CREATE FOREIGN TABLE agg_text (
- a int2,
+ a int2 CHECK (a >= 0),
b float4
) SERVER file_server
OPTIONS (format 'text', filename '@abs_srcdir@/data/agg.data', delimiter ' ', null '\N');
@@ -88,11 +88,13 @@ CREATE FOREIGN TABLE agg_csv (
b float4
) SERVER file_server
OPTIONS (format 'csv', filename '@abs_srcdir@/data/agg.csv', header 'true', delimiter ';', quote '@', escape '"', null '');
+ALTER FOREIGN TABLE agg_csv ADD CHECK (a >= 0);
CREATE FOREIGN TABLE agg_bad (
a int2,
b float4
) SERVER file_server
OPTIONS (format 'csv', filename '@abs_srcdir@/data/agg.bad', header 'true', delimiter ';', quote '@', escape '"', null '');
+ALTER FOREIGN TABLE agg_bad ADD CHECK (a >= 0);
-- per-column options tests
CREATE FOREIGN TABLE text_csv (
word1 text OPTIONS (force_not_null 'true'),
@@ -210,7 +212,7 @@ UPDATE agg_csv SET a = 1;
ERROR: cannot update foreign table "agg_csv"
DELETE FROM agg_csv WHERE a = 100;
ERROR: cannot delete from foreign table "agg_csv"
--- but this should be ignored
+-- but this should be allowed
SELECT * FROM agg_csv FOR UPDATE;
a | b
-----+---------
@@ -219,6 +221,74 @@ SELECT * FROM agg_csv FOR UPDATE;
42 | 324.78
(3 rows)
+-- constraint exclusion tests
+\t on
+EXPLAIN (VERBOSE, COSTS FALSE) SELECT * FROM agg_csv WHERE a < 0;
+ Foreign Scan on public.agg_csv
+ Output: a, b
+ Filter: (agg_csv.a < 0)
+ Foreign File: @abs_srcdir@/data/agg.csv
+
+\t off
+SELECT * FROM agg_csv WHERE a < 0;
+ a | b
+---+---
+(0 rows)
+
+SET constraint_exclusion = 'on';
+\t on
+EXPLAIN (VERBOSE, COSTS FALSE) SELECT * FROM agg_csv WHERE a < 0;
+ Result
+ Output: a, b
+ One-Time Filter: false
+
+\t off
+SELECT * FROM agg_csv WHERE a < 0;
+ a | b
+---+---
+(0 rows)
+
+RESET constraint_exclusion;
+-- table inheritance tests
+CREATE TABLE agg (a int2, b float4);
+ALTER FOREIGN TABLE agg_csv INHERIT agg;
+SELECT tableoid::regclass, * FROM agg;
+ tableoid | a | b
+----------+-----+---------
+ agg_csv | 100 | 99.097
+ agg_csv | 0 | 0.09561
+ agg_csv | 42 | 324.78
+(3 rows)
+
+SELECT tableoid::regclass, * FROM agg_csv;
+ tableoid | a | b
+----------+-----+---------
+ agg_csv | 100 | 99.097
+ agg_csv | 0 | 0.09561
+ agg_csv | 42 | 324.78
+(3 rows)
+
+SELECT tableoid::regclass, * FROM ONLY agg;
+ tableoid | a | b
+----------+---+---
+(0 rows)
+
+-- updates aren't supported
+UPDATE agg SET a = 1;
+ERROR: cannot update foreign table "agg_csv"
+DELETE FROM agg WHERE a = 100;
+ERROR: cannot delete from foreign table "agg_csv"
+-- but this should be allowed
+SELECT tableoid::regclass, * FROM agg FOR UPDATE;
+ tableoid | a | b
+----------+-----+---------
+ agg_csv | 100 | 99.097
+ agg_csv | 0 | 0.09561
+ agg_csv | 42 | 324.78
+(3 rows)
+
+ALTER FOREIGN TABLE agg_csv NO INHERIT agg;
+DROP TABLE agg;
-- privilege tests
SET ROLE file_fdw_superuser;
SELECT * FROM agg_text ORDER BY a;
@@ -265,9 +335,9 @@ RESET ROLE;
DROP EXTENSION file_fdw CASCADE;
NOTICE: drop cascades to 8 other objects
DETAIL: drop cascades to server file_server
-drop cascades to user mapping for file_fdw_user
-drop cascades to user mapping for file_fdw_superuser
-drop cascades to user mapping for no_priv_user
+drop cascades to user mapping for file_fdw_user on server file_server
+drop cascades to user mapping for file_fdw_superuser on server file_server
+drop cascades to user mapping for no_priv_user on server file_server
drop cascades to foreign table agg_text
drop cascades to foreign table agg_csv
drop cascades to foreign table agg_bad
diff --git a/contrib/fuzzystrmatch/Makefile b/contrib/fuzzystrmatch/Makefile
index 834b679b10..0327d9510a 100644
--- a/contrib/fuzzystrmatch/Makefile
+++ b/contrib/fuzzystrmatch/Makefile
@@ -1,10 +1,11 @@
# contrib/fuzzystrmatch/Makefile
MODULE_big = fuzzystrmatch
-OBJS = fuzzystrmatch.o dmetaphone.o
+OBJS = fuzzystrmatch.o dmetaphone.o $(WIN32RES)
EXTENSION = fuzzystrmatch
DATA = fuzzystrmatch--1.0.sql fuzzystrmatch--unpackaged--1.0.sql
+PGFILEDESC = "fuzzystrmatch - similarities and distance between strings"
ifdef USE_PGXS
PG_CONFIG = pg_config
@@ -16,6 +17,3 @@ top_builddir = ../..
include $(top_builddir)/src/Makefile.global
include $(top_srcdir)/contrib/contrib-global.mk
endif
-
-# levenshtein.c is #included by fuzzystrmatch.c
-fuzzystrmatch.o: fuzzystrmatch.c levenshtein.c
diff --git a/contrib/fuzzystrmatch/dmetaphone.c b/contrib/fuzzystrmatch/dmetaphone.c
index 5001288bb6..7c8457e734 100644
--- a/contrib/fuzzystrmatch/dmetaphone.c
+++ b/contrib/fuzzystrmatch/dmetaphone.c
@@ -195,7 +195,7 @@ dmetaphone_alt(PG_FUNCTION_ARGS)
* in a case like this.
*/
-#define META_FREE(x) /* pfree((x)) */
+#define META_FREE(x) ((void)true) /* pfree((x)) */
#else /* not defined DMETAPHONE_MAIN */
/* use the standard malloc library when not running in PostgreSQL */
@@ -247,7 +247,7 @@ NewMetaString(char *init_str)
META_MALLOC(s->str, s->bufsize, char);
assert(s->str != NULL);
- strncpy(s->str, init_str, s->length + 1);
+ memcpy(s->str, init_str, s->length + 1);
s->free_string_on_destroy = 1;
return s;
@@ -359,7 +359,10 @@ StringAt(metastring *s, int start, int length,...)
{
test = va_arg(ap, char *);
if (*test && (strncmp(pos, test, length) == 0))
+ {
+ va_end(ap);
return 1;
+ }
}
while (strcmp(test, "") != 0);
diff --git a/contrib/fuzzystrmatch/fuzzystrmatch--unpackaged--1.0.sql b/contrib/fuzzystrmatch/fuzzystrmatch--unpackaged--1.0.sql
index b9a805a4fe..14491a9fa7 100644
--- a/contrib/fuzzystrmatch/fuzzystrmatch--unpackaged--1.0.sql
+++ b/contrib/fuzzystrmatch/fuzzystrmatch--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/fuzzystrmatch/fuzzystrmatch--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION fuzzystrmatch" to load this file. \quit
+\echo Use "CREATE EXTENSION fuzzystrmatch FROM unpackaged" to load this file. \quit
ALTER EXTENSION fuzzystrmatch ADD function levenshtein(text,text);
ALTER EXTENSION fuzzystrmatch ADD function levenshtein(text,text,integer,integer,integer);
diff --git a/contrib/fuzzystrmatch/fuzzystrmatch.c b/contrib/fuzzystrmatch/fuzzystrmatch.c
index 7a53d8a008..f9508a574f 100644
--- a/contrib/fuzzystrmatch/fuzzystrmatch.c
+++ b/contrib/fuzzystrmatch/fuzzystrmatch.c
@@ -6,7 +6,7 @@
* Joe Conway <mail@joeconway.com>
*
* contrib/fuzzystrmatch/fuzzystrmatch.c
- * Copyright (c) 2001-2014, PostgreSQL Global Development Group
+ * Copyright (c) 2001-2015, PostgreSQL Global Development Group
* ALL RIGHTS RESERVED;
*
* metaphone()
@@ -154,23 +154,6 @@ getcode(char c)
/* These prevent GH from becoming F */
#define NOGHTOF(c) (getcode(c) & 16) /* BDH */
-/* Faster than memcmp(), for this use case. */
-static inline bool
-rest_of_char_same(const char *s1, const char *s2, int len)
-{
- while (len > 0)
- {
- len--;
- if (s1[len] != s2[len])
- return false;
- }
- return true;
-}
-
-#include "levenshtein.c"
-#define LEVENSHTEIN_LESS_EQUAL
-#include "levenshtein.c"
-
PG_FUNCTION_INFO_V1(levenshtein_with_costs);
Datum
levenshtein_with_costs(PG_FUNCTION_ARGS)
@@ -180,8 +163,20 @@ levenshtein_with_costs(PG_FUNCTION_ARGS)
int ins_c = PG_GETARG_INT32(2);
int del_c = PG_GETARG_INT32(3);
int sub_c = PG_GETARG_INT32(4);
-
- PG_RETURN_INT32(levenshtein_internal(src, dst, ins_c, del_c, sub_c));
+ const char *s_data;
+ const char *t_data;
+ int s_bytes,
+ t_bytes;
+
+ /* Extract a pointer to the actual character data */
+ s_data = VARDATA_ANY(src);
+ t_data = VARDATA_ANY(dst);
+ /* Determine length of each string in bytes and characters */
+ s_bytes = VARSIZE_ANY_EXHDR(src);
+ t_bytes = VARSIZE_ANY_EXHDR(dst);
+
+ PG_RETURN_INT32(varstr_levenshtein(s_data, s_bytes, t_data, t_bytes, ins_c,
+ del_c, sub_c));
}
@@ -191,8 +186,20 @@ levenshtein(PG_FUNCTION_ARGS)
{
text *src = PG_GETARG_TEXT_PP(0);
text *dst = PG_GETARG_TEXT_PP(1);
-
- PG_RETURN_INT32(levenshtein_internal(src, dst, 1, 1, 1));
+ const char *s_data;
+ const char *t_data;
+ int s_bytes,
+ t_bytes;
+
+ /* Extract a pointer to the actual character data */
+ s_data = VARDATA_ANY(src);
+ t_data = VARDATA_ANY(dst);
+ /* Determine length of each string in bytes and characters */
+ s_bytes = VARSIZE_ANY_EXHDR(src);
+ t_bytes = VARSIZE_ANY_EXHDR(dst);
+
+ PG_RETURN_INT32(varstr_levenshtein(s_data, s_bytes, t_data, t_bytes, 1, 1,
+ 1));
}
@@ -206,8 +213,21 @@ levenshtein_less_equal_with_costs(PG_FUNCTION_ARGS)
int del_c = PG_GETARG_INT32(3);
int sub_c = PG_GETARG_INT32(4);
int max_d = PG_GETARG_INT32(5);
-
- PG_RETURN_INT32(levenshtein_less_equal_internal(src, dst, ins_c, del_c, sub_c, max_d));
+ const char *s_data;
+ const char *t_data;
+ int s_bytes,
+ t_bytes;
+
+ /* Extract a pointer to the actual character data */
+ s_data = VARDATA_ANY(src);
+ t_data = VARDATA_ANY(dst);
+ /* Determine length of each string in bytes and characters */
+ s_bytes = VARSIZE_ANY_EXHDR(src);
+ t_bytes = VARSIZE_ANY_EXHDR(dst);
+
+ PG_RETURN_INT32(varstr_levenshtein_less_equal(s_data, s_bytes, t_data,
+ t_bytes, ins_c, del_c,
+ sub_c, max_d));
}
@@ -218,8 +238,20 @@ levenshtein_less_equal(PG_FUNCTION_ARGS)
text *src = PG_GETARG_TEXT_PP(0);
text *dst = PG_GETARG_TEXT_PP(1);
int max_d = PG_GETARG_INT32(2);
-
- PG_RETURN_INT32(levenshtein_less_equal_internal(src, dst, 1, 1, 1, max_d));
+ const char *s_data;
+ const char *t_data;
+ int s_bytes,
+ t_bytes;
+
+ /* Extract a pointer to the actual character data */
+ s_data = VARDATA_ANY(src);
+ t_data = VARDATA_ANY(dst);
+ /* Determine length of each string in bytes and characters */
+ s_bytes = VARSIZE_ANY_EXHDR(src);
+ t_bytes = VARSIZE_ANY_EXHDR(dst);
+
+ PG_RETURN_INT32(varstr_levenshtein_less_equal(s_data, s_bytes, t_data,
+ t_bytes, 1, 1, 1, max_d));
}
@@ -248,11 +280,6 @@ metaphone(PG_FUNCTION_ARGS)
errmsg("argument exceeds the maximum length of %d bytes",
MAX_METAPHONE_STRLEN)));
- if (!(str_i_len > 0))
- ereport(ERROR,
- (errcode(ERRCODE_ZERO_LENGTH_CHARACTER_STRING),
- errmsg("argument is empty string")));
-
reqlen = PG_GETARG_INT32(1);
if (reqlen > MAX_METAPHONE_STRLEN)
ereport(ERROR,
diff --git a/contrib/hstore/Makefile b/contrib/hstore/Makefile
index 2b60fbed0e..82908de9da 100644
--- a/contrib/hstore/Makefile
+++ b/contrib/hstore/Makefile
@@ -2,12 +2,13 @@
MODULE_big = hstore
OBJS = hstore_io.o hstore_op.o hstore_gist.o hstore_gin.o hstore_compat.o \
- crc32.o
+ $(WIN32RES)
EXTENSION = hstore
DATA = hstore--1.3.sql hstore--1.2--1.3.sql \
hstore--1.1--1.2.sql hstore--1.0--1.1.sql \
hstore--unpackaged--1.0.sql
+PGFILEDESC = "hstore - key/value pair data type"
REGRESS = hstore
diff --git a/contrib/hstore/crc32.c b/contrib/hstore/crc32.c
deleted file mode 100644
index c82fc66472..0000000000
--- a/contrib/hstore/crc32.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * contrib/hstore/crc32.c
- *
- * Both POSIX and CRC32 checksums */
-
-#include <sys/types.h>
-#include <stdio.h>
-#include <sys/types.h>
-
-#include "crc32.h"
-
-/*
- * This code implements the AUTODIN II polynomial
- * The variable corresponding to the macro argument "crc" should
- * be an unsigned long.
- * Original code by Spencer Garrett <srg@quick.com>
- */
-
-#define _CRC32_(crc, ch) (crc = (crc >> 8) ^ crc32tab[(crc ^ (ch)) & 0xff])
-
-/* generated using the AUTODIN II polynomial
- * x^32 + x^26 + x^23 + x^22 + x^16 +
- * x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1
- */
-
-static const unsigned int crc32tab[256] = {
- 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
- 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
- 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
- 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
- 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
- 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
- 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
- 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
- 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
- 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
- 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
- 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
- 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
- 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
- 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
- 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
- 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
- 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
- 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
- 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
- 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
- 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
- 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
- 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
- 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
- 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
- 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
- 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
- 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
- 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
- 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
- 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
- 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
- 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
- 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
- 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
- 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
- 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
- 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
- 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
- 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
- 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
- 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
- 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
- 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
- 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
- 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
- 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
- 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
- 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
- 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
- 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
- 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
- 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
- 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
-};
-
-unsigned int
-crc32_sz(char *buf, int size)
-{
- unsigned int crc = ~((unsigned int) 0);
- char *p;
- int len,
- nr;
-
- len = 0;
- nr = size;
- for (len += nr, p = buf; nr--; ++p)
- _CRC32_(crc, *p);
- return ~crc;
-}
diff --git a/contrib/hstore/crc32.h b/contrib/hstore/crc32.h
deleted file mode 100644
index f5bfd82517..0000000000
--- a/contrib/hstore/crc32.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- * contrib/hstore/crc32.h
- */
-#ifndef _CRC32_H
-#define _CRC32_H
-
-/* Returns crc32 of data block */
-extern unsigned int crc32_sz(char *buf, int size);
-
-/* Returns crc32 of null-terminated string */
-#define crc32(buf) crc32_sz((buf),strlen(buf))
-
-#endif
diff --git a/contrib/hstore/hstore--unpackaged--1.0.sql b/contrib/hstore/hstore--unpackaged--1.0.sql
index b7e73f4123..19a7802805 100644
--- a/contrib/hstore/hstore--unpackaged--1.0.sql
+++ b/contrib/hstore/hstore--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/hstore/hstore--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION hstore" to load this file. \quit
+\echo Use "CREATE EXTENSION hstore FROM unpackaged" to load this file. \quit
ALTER EXTENSION hstore ADD type hstore;
ALTER EXTENSION hstore ADD function hstore_in(cstring);
diff --git a/contrib/hstore/hstore_gist.c b/contrib/hstore/hstore_gist.c
index d4a9aaa4c1..06f3c9359b 100644
--- a/contrib/hstore/hstore_gist.c
+++ b/contrib/hstore/hstore_gist.c
@@ -6,8 +6,8 @@
#include "access/gist.h"
#include "access/skey.h"
#include "catalog/pg_type.h"
+#include "utils/pg_crc.h"
-#include "crc32.h"
#include "hstore.h"
/* bigint defines */
@@ -41,7 +41,7 @@ typedef struct
{
int32 vl_len_; /* varlena header (do not touch directly!) */
int32 flag;
- char data[1];
+ char data[FLEXIBLE_ARRAY_MEMBER];
} GISTTYPE;
#define ALLISTRUE 0x04
@@ -68,6 +68,20 @@ typedef struct
#define WISH_F(a,b,c) (double)( -(double)(((a)-(b))*((a)-(b))*((a)-(b)))*(c) )
+/* shorthand for calculating CRC-32 of a single chunk of data. */
+static pg_crc32
+crc32_sz(char *buf, int size)
+{
+ pg_crc32 crc;
+
+ INIT_TRADITIONAL_CRC32(crc);
+ COMP_TRADITIONAL_CRC32(crc, buf, size);
+ FIN_TRADITIONAL_CRC32(crc);
+
+ return crc;
+}
+
+
PG_FUNCTION_INFO_V1(ghstore_in);
PG_FUNCTION_INFO_V1(ghstore_out);
diff --git a/contrib/hstore/hstore_io.c b/contrib/hstore/hstore_io.c
index 6acd18fdb0..25a33abebc 100644
--- a/contrib/hstore/hstore_io.c
+++ b/contrib/hstore/hstore_io.c
@@ -12,6 +12,7 @@
#include "libpq/pqformat.h"
#include "utils/builtins.h"
#include "utils/json.h"
+#include "utils/jsonapi.h"
#include "utils/jsonb.h"
#include "utils/lsyscache.h"
#include "utils/memutils.h"
@@ -746,7 +747,7 @@ typedef struct RecordIOData
Oid record_type;
int32 record_typmod;
int ncolumns;
- ColumnIOData columns[1]; /* VARIABLE LENGTH ARRAY */
+ ColumnIOData columns[FLEXIBLE_ARRAY_MEMBER];
} RecordIOData;
PG_FUNCTION_INFO_V1(hstore_from_record);
@@ -804,8 +805,8 @@ hstore_from_record(PG_FUNCTION_ARGS)
{
fcinfo->flinfo->fn_extra =
MemoryContextAlloc(fcinfo->flinfo->fn_mcxt,
- sizeof(RecordIOData) - sizeof(ColumnIOData)
- + ncolumns * sizeof(ColumnIOData));
+ offsetof(RecordIOData, columns) +
+ ncolumns * sizeof(ColumnIOData));
my_extra = (RecordIOData *) fcinfo->flinfo->fn_extra;
my_extra->record_type = InvalidOid;
my_extra->record_typmod = 0;
@@ -815,8 +816,8 @@ hstore_from_record(PG_FUNCTION_ARGS)
my_extra->record_typmod != tupTypmod)
{
MemSet(my_extra, 0,
- sizeof(RecordIOData) - sizeof(ColumnIOData)
- + ncolumns * sizeof(ColumnIOData));
+ offsetof(RecordIOData, columns) +
+ ncolumns * sizeof(ColumnIOData));
my_extra->record_type = tupType;
my_extra->record_typmod = tupTypmod;
my_extra->ncolumns = ncolumns;
@@ -995,8 +996,8 @@ hstore_populate_record(PG_FUNCTION_ARGS)
{
fcinfo->flinfo->fn_extra =
MemoryContextAlloc(fcinfo->flinfo->fn_mcxt,
- sizeof(RecordIOData) - sizeof(ColumnIOData)
- + ncolumns * sizeof(ColumnIOData));
+ offsetof(RecordIOData, columns) +
+ ncolumns * sizeof(ColumnIOData));
my_extra = (RecordIOData *) fcinfo->flinfo->fn_extra;
my_extra->record_type = InvalidOid;
my_extra->record_typmod = 0;
@@ -1006,8 +1007,8 @@ hstore_populate_record(PG_FUNCTION_ARGS)
my_extra->record_typmod != tupTypmod)
{
MemSet(my_extra, 0,
- sizeof(RecordIOData) - sizeof(ColumnIOData)
- + ncolumns * sizeof(ColumnIOData));
+ offsetof(RecordIOData, columns) +
+ ncolumns * sizeof(ColumnIOData));
my_extra->record_type = tupType;
my_extra->record_typmod = tupTypmod;
my_extra->ncolumns = ncolumns;
@@ -1246,7 +1247,6 @@ hstore_to_json_loose(PG_FUNCTION_ARGS)
int count = HS_COUNT(in);
char *base = STRPTR(in);
HEntry *entries = ARRPTR(in);
- bool is_number;
StringInfoData tmp,
dst;
@@ -1273,48 +1273,9 @@ hstore_to_json_loose(PG_FUNCTION_ARGS)
appendStringInfoString(&dst, "false");
else
{
- is_number = false;
resetStringInfo(&tmp);
appendBinaryStringInfo(&tmp, HS_VAL(entries, base, i), HS_VALLEN(entries, i));
-
- /*
- * don't treat something with a leading zero followed by another
- * digit as numeric - could be a zip code or similar
- */
- if (tmp.len > 0 &&
- !(tmp.data[0] == '0' &&
- isdigit((unsigned char) tmp.data[1])) &&
- strspn(tmp.data, "+-0123456789Ee.") == tmp.len)
- {
- /*
- * might be a number. See if we can input it as a numeric
- * value. Ignore any actual parsed value.
- */
- char *endptr = "junk";
- long lval;
-
- lval = strtol(tmp.data, &endptr, 10);
- (void) lval;
- if (*endptr == '\0')
- {
- /*
- * strol man page says this means the whole string is
- * valid
- */
- is_number = true;
- }
- else
- {
- /* not an int - try a double */
- double dval;
-
- dval = strtod(tmp.data, &endptr);
- (void) dval;
- if (*endptr == '\0')
- is_number = true;
- }
- }
- if (is_number)
+ if (IsValidJsonNumber(tmp.data, tmp.len))
appendBinaryStringInfo(&dst, tmp.data, tmp.len);
else
escape_json(&dst, tmp.data);
@@ -1383,7 +1344,7 @@ hstore_to_jsonb(PG_FUNCTION_ARGS)
JsonbParseState *state = NULL;
JsonbValue *res;
- res = pushJsonbValue(&state, WJB_BEGIN_OBJECT, NULL);
+ (void) pushJsonbValue(&state, WJB_BEGIN_OBJECT, NULL);
for (i = 0; i < count; i++)
{
@@ -1394,7 +1355,7 @@ hstore_to_jsonb(PG_FUNCTION_ARGS)
key.val.string.len = HS_KEYLEN(entries, i);
key.val.string.val = HS_KEY(entries, base, i);
- res = pushJsonbValue(&state, WJB_KEY, &key);
+ (void) pushJsonbValue(&state, WJB_KEY, &key);
if (HS_VALISNULL(entries, i))
{
@@ -1406,7 +1367,7 @@ hstore_to_jsonb(PG_FUNCTION_ARGS)
val.val.string.len = HS_VALLEN(entries, i);
val.val.string.val = HS_VAL(entries, base, i);
}
- res = pushJsonbValue(&state, WJB_VALUE, &val);
+ (void) pushJsonbValue(&state, WJB_VALUE, &val);
}
res = pushJsonbValue(&state, WJB_END_OBJECT, NULL);
@@ -1430,7 +1391,7 @@ hstore_to_jsonb_loose(PG_FUNCTION_ARGS)
initStringInfo(&tmp);
- res = pushJsonbValue(&state, WJB_BEGIN_OBJECT, NULL);
+ (void) pushJsonbValue(&state, WJB_BEGIN_OBJECT, NULL);
for (i = 0; i < count; i++)
{
@@ -1441,7 +1402,7 @@ hstore_to_jsonb_loose(PG_FUNCTION_ARGS)
key.val.string.len = HS_KEYLEN(entries, i);
key.val.string.val = HS_KEY(entries, base, i);
- res = pushJsonbValue(&state, WJB_KEY, &key);
+ (void) pushJsonbValue(&state, WJB_KEY, &key);
if (HS_VALISNULL(entries, i))
{
@@ -1516,7 +1477,7 @@ hstore_to_jsonb_loose(PG_FUNCTION_ARGS)
val.val.string.val = HS_VAL(entries, base, i);
}
}
- res = pushJsonbValue(&state, WJB_VALUE, &val);
+ (void) pushJsonbValue(&state, WJB_VALUE, &val);
}
res = pushJsonbValue(&state, WJB_END_OBJECT, NULL);
diff --git a/contrib/intagg/intagg--unpackaged--1.0.sql b/contrib/intagg/intagg--unpackaged--1.0.sql
index 6a6663d092..a0b13f3f69 100644
--- a/contrib/intagg/intagg--unpackaged--1.0.sql
+++ b/contrib/intagg/intagg--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/intagg/intagg--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION intagg" to load this file. \quit
+\echo Use "CREATE EXTENSION intagg FROM unpackaged" to load this file. \quit
ALTER EXTENSION intagg ADD function int_agg_state(internal,integer);
ALTER EXTENSION intagg ADD function int_agg_final_array(internal);
diff --git a/contrib/intarray/Makefile b/contrib/intarray/Makefile
index 71f820ec4a..920c5b1ba0 100644
--- a/contrib/intarray/Makefile
+++ b/contrib/intarray/Makefile
@@ -1,10 +1,12 @@
# contrib/intarray/Makefile
MODULE_big = _int
-OBJS = _int_bool.o _int_gist.o _int_op.o _int_tool.o _intbig_gist.o _int_gin.o
+OBJS = _int_bool.o _int_gist.o _int_op.o _int_tool.o \
+ _intbig_gist.o _int_gin.o $(WIN32RES)
EXTENSION = intarray
DATA = intarray--1.0.sql intarray--unpackaged--1.0.sql
+PGFILEDESC = "intarray - functions and operators for arrays of integers"
REGRESS = _int
diff --git a/contrib/intarray/_int.h b/contrib/intarray/_int.h
index 7f93206e89..d524f0fed5 100644
--- a/contrib/intarray/_int.h
+++ b/contrib/intarray/_int.h
@@ -73,7 +73,7 @@ typedef struct
{
int32 vl_len_; /* varlena header (do not touch directly!) */
int32 flag;
- char data[1];
+ char data[FLEXIBLE_ARRAY_MEMBER];
} GISTTYPE;
#define ALLISTRUE 0x04
@@ -133,7 +133,7 @@ typedef struct QUERYTYPE
{
int32 vl_len_; /* varlena header (do not touch directly!) */
int32 size; /* number of ITEMs */
- ITEM items[1]; /* variable length array */
+ ITEM items[FLEXIBLE_ARRAY_MEMBER];
} QUERYTYPE;
#define HDRSIZEQT offsetof(QUERYTYPE, items)
diff --git a/contrib/intarray/_int_gist.c b/contrib/intarray/_int_gist.c
index 53abcc45a5..07108eb15e 100644
--- a/contrib/intarray/_int_gist.c
+++ b/contrib/intarray/_int_gist.c
@@ -3,6 +3,8 @@
*/
#include "postgres.h"
+#include <limits.h>
+
#include "access/gist.h"
#include "access/skey.h"
@@ -191,7 +193,7 @@ g_int_compress(PG_FUNCTION_ARGS)
cand = 1;
while (len > MAXNUMRANGE * 2)
{
- min = 0x7fffffff;
+ min = INT_MAX;
for (i = 2; i < len; i += 2)
if (min > (dr[i] - dr[i - 1]))
{
@@ -416,9 +418,7 @@ g_int_picksplit(PG_FUNCTION_ARGS)
size_waste = size_union - size_inter;
pfree(union_d);
-
- if (inter_d != (ArrayType *) NULL)
- pfree(inter_d);
+ pfree(inter_d);
/*
* are these a more promising split that what we've already seen?
@@ -517,10 +517,8 @@ g_int_picksplit(PG_FUNCTION_ARGS)
/* pick which page to add it to */
if (size_alpha - size_l < size_beta - size_r + WISH_F(v->spl_nleft, v->spl_nright, 0.01))
{
- if (datum_l)
- pfree(datum_l);
- if (union_dr)
- pfree(union_dr);
+ pfree(datum_l);
+ pfree(union_dr);
datum_l = union_dl;
size_l = size_alpha;
*left++ = i;
@@ -528,10 +526,8 @@ g_int_picksplit(PG_FUNCTION_ARGS)
}
else
{
- if (datum_r)
- pfree(datum_r);
- if (union_dl)
- pfree(union_dl);
+ pfree(datum_r);
+ pfree(union_dl);
datum_r = union_dr;
size_r = size_beta;
*right++ = i;
diff --git a/contrib/intarray/_int_op.c b/contrib/intarray/_int_op.c
index 70849be57f..537174175b 100644
--- a/contrib/intarray/_int_op.c
+++ b/contrib/intarray/_int_op.c
@@ -6,7 +6,6 @@
#include "_int.h"
-
PG_MODULE_MAGIC;
PG_FUNCTION_INFO_V1(_int_different);
diff --git a/contrib/intarray/_int_tool.c b/contrib/intarray/_int_tool.c
index 511c7acb54..3c52912bbf 100644
--- a/contrib/intarray/_int_tool.c
+++ b/contrib/intarray/_int_tool.c
@@ -184,40 +184,34 @@ rt__int_size(ArrayType *a, float *size)
*size = (float) ARRNELEMS(a);
}
+/* qsort_arg comparison function for isort() */
+static int
+isort_cmp(const void *a, const void *b, void *arg)
+{
+ int32 aval = *((const int32 *) a);
+ int32 bval = *((const int32 *) b);
+
+ if (aval < bval)
+ return -1;
+ if (aval > bval)
+ return 1;
+
+ /*
+ * Report if we have any duplicates. If there are equal keys, qsort must
+ * compare them at some point, else it wouldn't know whether one should go
+ * before or after the other.
+ */
+ *((bool *) arg) = true;
+ return 0;
+}
+
/* Sort the given data (len >= 2). Return true if any duplicates found */
bool
isort(int32 *a, int len)
{
- int32 cur,
- prev;
- int32 *pcur,
- *pprev,
- *end;
- bool r = FALSE;
+ bool r = false;
- /*
- * We use a simple insertion sort. While this is O(N^2) in the worst
- * case, it's quite fast if the input is already sorted or nearly so.
- * Also, for not-too-large inputs it's faster than more complex methods
- * anyhow.
- */
- end = a + len;
- for (pcur = a + 1; pcur < end; pcur++)
- {
- cur = *pcur;
- for (pprev = pcur - 1; pprev >= a; pprev--)
- {
- prev = *pprev;
- if (prev <= cur)
- {
- if (prev == cur)
- r = TRUE;
- break;
- }
- pprev[1] = prev;
- }
- pprev[1] = cur;
- }
+ qsort_arg(a, len, sizeof(int32), isort_cmp, (void *) &r);
return r;
}
diff --git a/contrib/intarray/intarray--unpackaged--1.0.sql b/contrib/intarray/intarray--unpackaged--1.0.sql
index 5de64bf0ab..63814cef98 100644
--- a/contrib/intarray/intarray--unpackaged--1.0.sql
+++ b/contrib/intarray/intarray--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/intarray/intarray--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION intarray" to load this file. \quit
+\echo Use "CREATE EXTENSION intarray FROM unpackaged" to load this file. \quit
ALTER EXTENSION intarray ADD type query_int;
ALTER EXTENSION intarray ADD function bqarr_in(cstring);
diff --git a/contrib/isn/Makefile b/contrib/isn/Makefile
index bd8f193e93..75c07a8296 100644
--- a/contrib/isn/Makefile
+++ b/contrib/isn/Makefile
@@ -4,6 +4,7 @@ MODULES = isn
EXTENSION = isn
DATA = isn--1.0.sql isn--unpackaged--1.0.sql
+PGFILEDESC = "isn - data types for international product numbering standards"
ifdef USE_PGXS
PG_CONFIG = pg_config
diff --git a/contrib/isn/isn--unpackaged--1.0.sql b/contrib/isn/isn--unpackaged--1.0.sql
index 30e5012156..8a19d6a475 100644
--- a/contrib/isn/isn--unpackaged--1.0.sql
+++ b/contrib/isn/isn--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/isn/isn--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION isn" to load this file. \quit
+\echo Use "CREATE EXTENSION isn FROM unpackaged" to load this file. \quit
ALTER EXTENSION isn ADD type ean13;
ALTER EXTENSION isn ADD function ean13_in(cstring);
diff --git a/contrib/isn/isn.c b/contrib/isn/isn.c
index 1124744979..5fbd253491 100644
--- a/contrib/isn/isn.c
+++ b/contrib/isn/isn.c
@@ -4,7 +4,7 @@
* PostgreSQL type definitions for ISNs (ISBN, ISMN, ISSN, EAN13, UPC)
*
* Author: German Mendez Bravo (Kronuz)
- * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
*
* IDENTIFICATION
* contrib/isn/isn.c
@@ -825,18 +825,18 @@ string2ean(const char *str, bool errorOK, ean13 *result,
goto eanwrongtype;
break;
case ISMN:
- strncpy(buf, "9790", 4); /* this isn't for sure yet, for now
+ memcpy(buf, "9790", 4); /* this isn't for sure yet, for now
* ISMN it's only 9790 */
valid = (valid && ((rcheck = checkdig(buf, 13)) == check || magic));
break;
case ISBN:
- strncpy(buf, "978", 3);
+ memcpy(buf, "978", 3);
valid = (valid && ((rcheck = weight_checkdig(buf + 3, 10)) == check || magic));
break;
case ISSN:
- strncpy(buf + 10, "00", 2); /* append 00 as the normal issue
+ memcpy(buf + 10, "00", 2); /* append 00 as the normal issue
* publication code */
- strncpy(buf, "977", 3);
+ memcpy(buf, "977", 3);
valid = (valid && ((rcheck = weight_checkdig(buf + 3, 8)) == check || magic));
break;
case UPC:
diff --git a/contrib/isn/isn.h b/contrib/isn/isn.h
index aca00d8ffa..4548eafea9 100644
--- a/contrib/isn/isn.h
+++ b/contrib/isn/isn.h
@@ -4,7 +4,7 @@
* PostgreSQL type definitions for ISNs (ISBN, ISMN, ISSN, EAN13, UPC)
*
* Author: German Mendez Bravo (Kronuz)
- * Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1996-2015, PostgreSQL Global Development Group
*
* IDENTIFICATION
* contrib/isn/isn.h
diff --git a/contrib/lo/Makefile b/contrib/lo/Makefile
index 66b337c17a..b956aa4fa1 100644
--- a/contrib/lo/Makefile
+++ b/contrib/lo/Makefile
@@ -4,6 +4,7 @@ MODULES = lo
EXTENSION = lo
DATA = lo--1.0.sql lo--unpackaged--1.0.sql
+PGFILEDESC = "lo - management for large objects"
ifdef USE_PGXS
PG_CONFIG = pg_config
diff --git a/contrib/lo/lo--unpackaged--1.0.sql b/contrib/lo/lo--unpackaged--1.0.sql
index 053185ba1d..d6bcf1a46e 100644
--- a/contrib/lo/lo--unpackaged--1.0.sql
+++ b/contrib/lo/lo--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/lo/lo--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION lo" to load this file. \quit
+\echo Use "CREATE EXTENSION lo FROM unpackaged" to load this file. \quit
ALTER EXTENSION lo ADD domain lo;
ALTER EXTENSION lo ADD function lo_oid(lo);
diff --git a/contrib/lo/lo.c b/contrib/lo/lo.c
index 4dee64724d..953659305f 100644
--- a/contrib/lo/lo.c
+++ b/contrib/lo/lo.c
@@ -12,7 +12,6 @@
#include "libpq/be-fsstubs.h"
#include "utils/rel.h"
-
PG_MODULE_MAGIC;
#define atooid(x) ((Oid) strtoul((x), NULL, 10))
diff --git a/contrib/ltree/Makefile b/contrib/ltree/Makefile
index 65d42f875f..a41e45723d 100644
--- a/contrib/ltree/Makefile
+++ b/contrib/ltree/Makefile
@@ -2,11 +2,12 @@
MODULE_big = ltree
OBJS = ltree_io.o ltree_op.o lquery_op.o _ltree_op.o crc32.o \
- ltxtquery_io.o ltxtquery_op.o ltree_gist.o _ltree_gist.o
+ ltxtquery_io.o ltxtquery_op.o ltree_gist.o _ltree_gist.o $(WIN32RES)
PG_CPPFLAGS = -DLOWER_NODE
EXTENSION = ltree
DATA = ltree--1.0.sql ltree--unpackaged--1.0.sql
+PGFILEDESC = "ltree - hierarchical label data type"
REGRESS = ltree
diff --git a/contrib/ltree/crc32.c b/contrib/ltree/crc32.c
index ea1a661fef..1c08d264f7 100644
--- a/contrib/ltree/crc32.c
+++ b/contrib/ltree/crc32.c
@@ -1,7 +1,12 @@
-/* Both POSIX and CRC32 checksums */
-
/* contrib/ltree/crc32.c */
+/*
+ * Implements CRC-32, as used in ltree.
+ *
+ * Note that the CRC is used in the on-disk format of GiST indexes, so we
+ * must stay backwards-compatible!
+ */
+
#include "postgres.h"
#include <sys/types.h>
@@ -15,100 +20,23 @@
#define TOLOWER(x) (x)
#endif
+#include "utils/pg_crc.h"
#include "crc32.h"
-/*
- * This code implements the AUTODIN II polynomial
- * The variable corresponding to the macro argument "crc" should
- * be an unsigned long.
- * Oroginal code by Spencer Garrett <srg@quick.com>
- */
-
-#define _CRC32_(crc, ch) ((crc) = ((crc) >> 8) ^ crc32tab[((crc) ^ (ch)) & 0xff])
-
-/* generated using the AUTODIN II polynomial
- * x^32 + x^26 + x^23 + x^22 + x^16 +
- * x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1
- */
-
-static const unsigned int crc32tab[256] = {
- 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
- 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
- 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
- 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
- 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
- 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
- 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
- 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
- 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
- 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
- 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
- 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
- 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
- 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
- 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
- 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
- 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
- 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
- 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
- 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
- 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
- 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
- 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
- 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
- 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
- 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
- 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
- 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
- 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
- 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
- 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
- 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
- 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
- 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
- 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
- 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
- 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
- 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
- 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
- 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
- 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
- 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
- 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
- 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
- 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
- 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
- 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
- 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
- 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
- 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
- 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
- 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
- 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
- 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
- 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
- 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
- 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
- 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
- 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
- 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
- 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
- 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
- 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
- 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
-};
-
unsigned int
ltree_crc32_sz(char *buf, int size)
{
- unsigned int crc = ~((unsigned int) 0);
- char *p;
- int len,
- nr;
-
- len = 0;
- nr = size;
- for (len += nr, p = buf; nr--; ++p)
- _CRC32_(crc, TOLOWER((unsigned int) *p));
- return ~crc;
+ pg_crc32 crc;
+ char *p = buf;
+
+ INIT_TRADITIONAL_CRC32(crc);
+ while (size > 0)
+ {
+ char c = (char) TOLOWER(*p);
+ COMP_TRADITIONAL_CRC32(crc, &c, 1);
+ size--;
+ p++;
+ }
+ FIN_TRADITIONAL_CRC32(crc);
+ return (unsigned int) crc;
}
diff --git a/contrib/ltree/ltree--1.0.sql b/contrib/ltree/ltree--1.0.sql
index 5a2f375a4f..7d55fc603f 100644
--- a/contrib/ltree/ltree--1.0.sql
+++ b/contrib/ltree/ltree--1.0.sql
@@ -6,12 +6,12 @@
CREATE FUNCTION ltree_in(cstring)
RETURNS ltree
AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT;
+LANGUAGE C STRICT IMMUTABLE;
CREATE FUNCTION ltree_out(ltree)
RETURNS cstring
AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT;
+LANGUAGE C STRICT IMMUTABLE;
CREATE TYPE ltree (
INTERNALLENGTH = -1,
@@ -303,12 +303,12 @@ CREATE OPERATOR CLASS ltree_ops
CREATE FUNCTION lquery_in(cstring)
RETURNS lquery
AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT;
+LANGUAGE C STRICT IMMUTABLE;
CREATE FUNCTION lquery_out(lquery)
RETURNS cstring
AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT;
+LANGUAGE C STRICT IMMUTABLE;
CREATE TYPE lquery (
INTERNALLENGTH = -1,
@@ -414,12 +414,12 @@ CREATE OPERATOR ^? (
CREATE FUNCTION ltxtq_in(cstring)
RETURNS ltxtquery
AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT;
+LANGUAGE C STRICT IMMUTABLE;
CREATE FUNCTION ltxtq_out(ltxtquery)
RETURNS cstring
AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT;
+LANGUAGE C STRICT IMMUTABLE;
CREATE TYPE ltxtquery (
INTERNALLENGTH = -1,
@@ -481,12 +481,12 @@ CREATE OPERATOR ^@ (
CREATE FUNCTION ltree_gist_in(cstring)
RETURNS ltree_gist
AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT;
+LANGUAGE C STRICT IMMUTABLE;
CREATE FUNCTION ltree_gist_out(ltree_gist)
RETURNS cstring
AS 'MODULE_PATHNAME'
-LANGUAGE C STRICT;
+LANGUAGE C STRICT IMMUTABLE;
CREATE TYPE ltree_gist (
internallength = -1,
diff --git a/contrib/ltree/ltree--unpackaged--1.0.sql b/contrib/ltree/ltree--unpackaged--1.0.sql
index 1e24fa56c6..30a94c2fc5 100644
--- a/contrib/ltree/ltree--unpackaged--1.0.sql
+++ b/contrib/ltree/ltree--unpackaged--1.0.sql
@@ -1,7 +1,7 @@
/* contrib/ltree/ltree--unpackaged--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
-\echo Use "CREATE EXTENSION ltree" to load this file. \quit
+\echo Use "CREATE EXTENSION ltree FROM unpackaged" to load this file. \quit
ALTER EXTENSION ltree ADD type ltree;
ALTER EXTENSION ltree ADD function ltree_in(cstring);
diff --git a/contrib/ltree/ltree.h b/contrib/ltree/ltree.h
index 1b1305b483..c604357dbf 100644
--- a/contrib/ltree/ltree.h
+++ b/contrib/ltree/ltree.h
@@ -10,7 +10,7 @@
typedef struct
{
uint16 len;
- char name[1];
+ char name[FLEXIBLE_ARRAY_MEMBER];
} ltree_level;
#define LEVEL_HDRSIZE (offsetof(ltree_level,name))
@@ -20,7 +20,7 @@ typedef struct
{
int32 vl_len_; /* varlena header (do not touch directly!) */
uint16 numlevel;
- char data[1];
+ char data[FLEXIBLE_ARRAY_MEMBER];
} ltree;
#define LTREE_HDRSIZE MAXALIGN( offsetof(ltree, data) )
@@ -34,7 +34,7 @@ typedef struct
int32 val;
uint16 len;
uint8 flag;
- char name[1];
+ char name[FLEXIBLE_ARRAY_MEMBER];
} lquery_variant;
#define LVAR_HDRSIZE MAXALIGN(offsetof(lquery_variant, name))
@@ -51,7 +51,7 @@ typedef struct
uint16 numvar;
uint16 low;
uint16 high;
- char variants[1];
+ char variants[FLEXIBLE_ARRAY_MEMBER];
} lquery_level;
#define LQL_HDRSIZE MAXALIGN( offsetof(lquery_level,variants) )
@@ -72,7 +72,7 @@ typedef struct
uint16 numlevel;
uint16 firstgood;
uint16 flag;
- char data[1];
+ char data[FLEXIBLE_ARRAY_MEMBER];
} lquery;
#define LQUERY_HDRSIZE MAXALIGN( offsetof(lquery, data) )
@@ -107,7 +107,7 @@ typedef struct
{
int32 vl_len_; /* varlena header (do not touch directly!) */
int32 size;
- char data[1];
+ char data[FLEXIBLE_ARRAY_MEMBER];
} ltxtquery;
#define HDRSIZEQT MAXALIGN(VARHDRSZ + sizeof(int32))
@@ -208,7 +208,7 @@ typedef struct
{
int32 vl_len_; /* varlena header (do not touch directly!) */
uint32 flag;
- char data[1];
+ char data[FLEXIBLE_ARRAY_MEMBER];
} ltree_gist;
#define LTG_ONENODE 0x01
diff --git a/contrib/oid2name/Makefile b/contrib/oid2name/Makefile
index f695b4a84e..3414b4a5cc 100644
--- a/contrib/oid2name/Makefile
+++ b/contrib/oid2name/Makefile
@@ -4,7 +4,7 @@ PGFILEDESC = "oid2name - examine the file structure"
PGAPPICON = win32
PROGRAM = oid2name
-OBJS = oid2name.o
+OBJS = oid2name.o $(WIN32RES)
PG_CPPFLAGS = -I$(libpq_srcdir)
PG_LIBS = $(libpq_pgport)
diff --git a/contrib/pageinspect/Makefile b/contrib/pageinspect/Makefile
index ee78cb2989..aec5258a1b 100644
--- a/contrib/pageinspect/Makefile
+++ b/contrib/pageinspect/Makefile
@@ -1,11 +1,14 @@
# contrib/pageinspect/Makefile
MODULE_big = pageinspect
-OBJS = rawpage.o heapfuncs.o btreefuncs.o fsmfuncs.o
+OBJS = rawpage.o heapfuncs.o btreefuncs.o fsmfuncs.o \
+ brinfuncs.o ginfuncs.o $(WIN32RES)
EXTENSION = pageinspect
-DATA = pageinspect--1.2.sql pageinspect--1.0--1.1.sql \
- pageinspect--1.1--1.2.sql pageinspect--unpackaged--1.0.sql
+DATA = pageinspect--1.3.sql pageinspect--1.2--1.3.sql \
+ pageinspect--1.1--1.2.sql pageinspect--1.0--1.1.sql \
+ pageinspect--unpackaged--1.0.sql
+PGFILEDESC = "pageinspect - functions to inspect contents of database pages"
ifdef USE_PGXS
PG_CONFIG = pg_config
diff --git a/contrib/pageinspect/brinfuncs.c b/contrib/pageinspect/brinfuncs.c
new file mode 100644
index 0000000000..1b15a7bdfe
--- /dev/null
+++ b/contrib/pageinspect/brinfuncs.c
@@ -0,0 +1,409 @@
+/*
+ * brinfuncs.c
+ * Functions to investigate BRIN indexes
+ *
+ * Copyright (c) 2014-2015, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ * contrib/pageinspect/brinfuncs.c
+ */
+#include "postgres.h"
+
+#include "access/htup_details.h"
+#include "access/brin.h"
+#include "access/brin_internal.h"
+#include "access/brin_page.h"
+#include "access/brin_revmap.h"
+#include "access/brin_tuple.h"
+#include "catalog/index.h"
+#include "catalog/pg_type.h"
+#include "funcapi.h"
+#include "lib/stringinfo.h"
+#include "utils/array.h"
+#include "utils/builtins.h"
+#include "utils/lsyscache.h"
+#include "utils/rel.h"
+#include "miscadmin.h"
+
+
+PG_FUNCTION_INFO_V1(brin_page_type);
+PG_FUNCTION_INFO_V1(brin_page_items);
+PG_FUNCTION_INFO_V1(brin_metapage_info);
+PG_FUNCTION_INFO_V1(brin_revmap_data);
+
+typedef struct brin_column_state
+{
+ int nstored;
+ FmgrInfo outputFn[FLEXIBLE_ARRAY_MEMBER];
+} brin_column_state;
+
+typedef struct brin_page_state
+{
+ BrinDesc *bdesc;
+ Page page;
+ OffsetNumber offset;
+ bool unusedItem;
+ bool done;
+ AttrNumber attno;
+ BrinMemTuple *dtup;
+ brin_column_state *columns[FLEXIBLE_ARRAY_MEMBER];
+} brin_page_state;
+
+
+static Page verify_brin_page(bytea *raw_page, uint16 type,
+ const char *strtype);
+
+Datum
+brin_page_type(PG_FUNCTION_ARGS)
+{
+ bytea *raw_page = PG_GETARG_BYTEA_P(0);
+ Page page = VARDATA(raw_page);
+ char *type;
+
+ switch (BrinPageType(page))
+ {
+ case BRIN_PAGETYPE_META:
+ type = "meta";
+ break;
+ case BRIN_PAGETYPE_REVMAP:
+ type = "revmap";
+ break;
+ case BRIN_PAGETYPE_REGULAR:
+ type = "regular";
+ break;
+ default:
+ type = psprintf("unknown (%02x)", BrinPageType(page));
+ break;
+ }
+
+ PG_RETURN_TEXT_P(cstring_to_text(type));
+}
+
+/*
+ * Verify that the given bytea contains a BRIN page of the indicated page
+ * type, or die in the attempt. A pointer to the page is returned.
+ */
+static Page
+verify_brin_page(bytea *raw_page, uint16 type, const char *strtype)
+{
+ Page page;
+ int raw_page_size;
+
+ raw_page_size = VARSIZE(raw_page) - VARHDRSZ;
+
+ if (raw_page_size < SizeOfPageHeaderData)
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+ errmsg("input page too small"),
+ errdetail("Expected size %d, got %d", raw_page_size, BLCKSZ)));
+
+ page = VARDATA(raw_page);
+
+ /* verify the special space says this page is what we want */
+ if (BrinPageType(page) != type)
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+ errmsg("page is not a BRIN page of type \"%s\"", strtype),
+ errdetail("Expected special type %08x, got %08x.",
+ type, BrinPageType(page))));
+
+ return page;
+}
+
+
+/*
+ * Extract all item values from a BRIN index page
+ *
+ * Usage: SELECT * FROM brin_page_items(get_raw_page('idx', 1), 'idx'::regclass);
+ */
+Datum
+brin_page_items(PG_FUNCTION_ARGS)
+{
+ brin_page_state *state;
+ FuncCallCont