summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael P2011-07-05 03:16:11 +0000
committerMichael P2011-07-06 03:40:35 +0000
commit0bbfc1e6338b5d98d6cb83fa75f2c38f527d4d4b (patch)
tree46fa412a31d08ea6e53d488ae7bc231df0b273da
parent091b0e828cf0fd5bbd1f9ae58ab96fc983e55d77 (diff)
parenta4bebdd92624e018108c2610fc3f2c1584b6c687 (diff)
Merge commit 'a4bebdd92624e018108c2610fc3f2c1584b6c687' into master
This is the commit merge of Postgres-XC with the intersection of PostgreSQL REL9_1_STABLE and master branches. Conflicts: COPYRIGHT contrib/pgbench/pgbench.c src/Makefile src/backend/access/transam/recovery.conf.sample src/backend/access/transam/varsup.c src/backend/access/transam/xlog.c src/backend/catalog/Makefile src/backend/catalog/dependency.c src/backend/catalog/system_views.sql src/backend/commands/copy.c src/backend/commands/explain.c src/backend/commands/sequence.c src/backend/commands/tablecmds.c src/backend/commands/vacuum.c src/backend/executor/nodeAgg.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/plan/createplan.c src/backend/optimizer/plan/setrefs.c src/backend/parser/gram.y src/backend/parser/parse_utilcmd.c src/backend/postmaster/postmaster.c src/backend/rewrite/rewriteHandler.c src/backend/storage/lmgr/proc.c src/backend/tcop/postgres.c src/backend/utils/adt/ruleutils.c src/backend/utils/init/postinit.c src/backend/utils/misc/guc.c src/backend/utils/misc/postgresql.conf.sample src/backend/utils/sort/tuplesort.c src/bin/initdb/initdb.c src/bin/pg_ctl/pg_ctl.c src/bin/pg_dump/pg_dump.c src/include/access/xlog.h src/include/catalog/catversion.h src/include/catalog/indexing.h src/include/catalog/pg_aggregate.h src/include/catalog/pg_proc.h src/include/commands/copy.h src/include/nodes/parsenodes.h src/include/nodes/primnodes.h src/include/optimizer/pathnode.h src/include/parser/kwlist.h src/include/storage/procarray.h src/test/regress/expected/.gitignore src/test/regress/expected/aggregates.out src/test/regress/expected/alter_table.out src/test/regress/expected/bit.out src/test/regress/expected/box.out src/test/regress/expected/delete.out src/test/regress/expected/float4.out src/test/regress/expected/float8.out src/test/regress/expected/int2.out src/test/regress/expected/int8.out src/test/regress/expected/interval.out src/test/regress/expected/numeric.out src/test/regress/expected/point.out src/test/regress/expected/polygon.out src/test/regress/expected/sequence.out src/test/regress/expected/timestamp.out src/test/regress/expected/timestamptz.out src/test/regress/expected/transactions.out src/test/regress/expected/window.out src/test/regress/input/misc.source src/test/regress/output/create_misc_1.source src/test/regress/output/misc.source src/test/regress/sql/aggregates.sql src/test/regress/sql/alter_table.sql src/test/regress/sql/bit.sql src/test/regress/sql/box.sql src/test/regress/sql/delete.sql src/test/regress/sql/domain.sql src/test/regress/sql/float4.sql src/test/regress/sql/float8.sql src/test/regress/sql/int2.sql src/test/regress/sql/int8.sql src/test/regress/sql/interval.sql src/test/regress/sql/lseg.sql src/test/regress/sql/numeric.sql src/test/regress/sql/path.sql src/test/regress/sql/point.sql src/test/regress/sql/polygon.sql src/test/regress/sql/portals.sql src/test/regress/sql/sequence.sql src/test/regress/sql/timestamp.sql src/test/regress/sql/timestamptz.sql src/test/regress/sql/transactions.sql src/test/regress/sql/window.sql src/test/regress/sql/with.sql
-rw-r--r--.gitignore32
-rw-r--r--COPYRIGHT2
-rw-r--r--GNUmakefile.in56
-rw-r--r--Makefile2
-rw-r--r--README3
-rw-r--r--README.git (renamed from README.CVS)6
-rw-r--r--aclocal.m42
-rw-r--r--config/Makefile2
-rw-r--r--config/ac_func_accept_argtypes.m414
-rw-r--r--config/acx_pthread.m43
-rw-r--r--config/c-compiler.m439
-rw-r--r--config/c-library.m431
-rwxr-xr-xconfig/config.guess223
-rwxr-xr-xconfig/config.sub115
-rw-r--r--config/docbook.m42
-rw-r--r--config/general.m44
-rwxr-xr-xconfig/install-sh2
-rwxr-xr-xconfig/missing2
-rw-r--r--config/perl.m44
-rw-r--r--config/prep_buildtree6
-rw-r--r--config/programs.m426
-rw-r--r--config/python.m42
-rw-r--r--config/tcl.m42
-rwxr-xr-xconfigure1123
-rw-r--r--configure.in136
-rw-r--r--contrib/Makefile22
-rw-r--r--contrib/README27
-rw-r--r--contrib/adminpack/Makefile9
-rw-r--r--contrib/adminpack/adminpack--1.0.sql (renamed from contrib/adminpack/adminpack.sql.in)18
-rw-r--r--contrib/adminpack/adminpack.c45
-rw-r--r--contrib/adminpack/adminpack.control6
-rw-r--r--contrib/adminpack/uninstall_adminpack.sql10
-rw-r--r--contrib/auth_delay/Makefile14
-rw-r--r--contrib/auth_delay/auth_delay.c71
-rw-r--r--contrib/auto_explain/Makefile2
-rw-r--r--contrib/auto_explain/auto_explain.c38
-rw-r--r--contrib/btree_gin/.gitignore4
-rw-r--r--contrib/btree_gin/Makefile9
-rw-r--r--contrib/btree_gin/btree_gin--1.0.sql (renamed from contrib/btree_gin/btree_gin.sql.in)141
-rw-r--r--contrib/btree_gin/btree_gin--unpackaged--1.0.sql116
-rw-r--r--contrib/btree_gin/btree_gin.c14
-rw-r--r--contrib/btree_gin/btree_gin.control5
-rw-r--r--contrib/btree_gin/expected/cidr.out2
-rw-r--r--contrib/btree_gin/expected/date.out2
-rw-r--r--contrib/btree_gin/expected/inet.out2
-rw-r--r--contrib/btree_gin/expected/install_btree_gin.out4
-rw-r--r--contrib/btree_gin/expected/interval.out2
-rw-r--r--contrib/btree_gin/expected/macaddr.out2
-rw-r--r--contrib/btree_gin/expected/time.out2
-rw-r--r--contrib/btree_gin/expected/timestamp.out2
-rw-r--r--contrib/btree_gin/expected/timestamptz.out2
-rw-r--r--contrib/btree_gin/expected/timetz.out2
-rw-r--r--contrib/btree_gin/sql/cidr.sql2
-rw-r--r--contrib/btree_gin/sql/date.sql2
-rw-r--r--contrib/btree_gin/sql/inet.sql2
-rw-r--r--contrib/btree_gin/sql/install_btree_gin.sql6
-rw-r--r--contrib/btree_gin/sql/interval.sql2
-rw-r--r--contrib/btree_gin/sql/macaddr.sql2
-rw-r--r--contrib/btree_gin/sql/time.sql2
-rw-r--r--contrib/btree_gin/sql/timestamp.sql2
-rw-r--r--contrib/btree_gin/sql/timestamptz.sql2
-rw-r--r--contrib/btree_gin/sql/timetz.sql2
-rw-r--r--contrib/btree_gin/uninstall_btree_gin.sql98
-rw-r--r--contrib/btree_gist/.gitignore4
-rw-r--r--contrib/btree_gist/Makefile24
-rw-r--r--contrib/btree_gist/btree_bit.c59
-rw-r--r--contrib/btree_gist/btree_bytea.c55
-rw-r--r--contrib/btree_gist/btree_cash.c54
-rw-r--r--contrib/btree_gist/btree_date.c51
-rw-r--r--contrib/btree_gist/btree_float4.c48
-rw-r--r--contrib/btree_gist/btree_float8.c54
-rw-r--r--contrib/btree_gist/btree_gist--1.0.sql (renamed from contrib/btree_gist/btree_gist.sql.in)632
-rw-r--r--contrib/btree_gist/btree_gist--unpackaged--1.0.sql476
-rw-r--r--contrib/btree_gist/btree_gist.c2
-rw-r--r--contrib/btree_gist/btree_gist.control5
-rw-r--r--contrib/btree_gist/btree_gist.h4
-rw-r--r--contrib/btree_gist/btree_inet.c5
-rw-r--r--contrib/btree_gist/btree_int2.c51
-rw-r--r--contrib/btree_gist/btree_int4.c55
-rw-r--r--contrib/btree_gist/btree_int8.c55
-rw-r--r--contrib/btree_gist/btree_interval.c59
-rw-r--r--contrib/btree_gist/btree_macaddr.c5
-rw-r--r--contrib/btree_gist/btree_numeric.c58
-rw-r--r--contrib/btree_gist/btree_oid.c55
-rw-r--r--contrib/btree_gist/btree_text.c62
-rw-r--r--contrib/btree_gist/btree_time.c51
-rw-r--r--contrib/btree_gist/btree_ts.c123
-rw-r--r--contrib/btree_gist/btree_utils_num.c53
-rw-r--r--contrib/btree_gist/btree_utils_num.h41
-rw-r--r--contrib/btree_gist/btree_utils_var.c157
-rw-r--r--contrib/btree_gist/btree_utils_var.h40
-rw-r--r--contrib/btree_gist/data/interval.data2
-rw-r--r--contrib/btree_gist/data/macaddr.data2
-rw-r--r--contrib/btree_gist/data/numeric.data2
-rw-r--r--contrib/btree_gist/data/text.data2
-rw-r--r--contrib/btree_gist/data/timetz.data2
-rw-r--r--contrib/btree_gist/data/varbit.data2
-rw-r--r--contrib/btree_gist/expected/cash.out25
-rw-r--r--contrib/btree_gist/expected/date.out25
-rw-r--r--contrib/btree_gist/expected/float4.out25
-rw-r--r--contrib/btree_gist/expected/float8.out25
-rw-r--r--contrib/btree_gist/expected/init.out8
-rw-r--r--contrib/btree_gist/expected/int2.out25
-rw-r--r--contrib/btree_gist/expected/int4.out25
-rw-r--r--contrib/btree_gist/expected/int8.out25
-rw-r--r--contrib/btree_gist/expected/interval.out25
-rw-r--r--contrib/btree_gist/expected/not_equal.out40
-rw-r--r--contrib/btree_gist/expected/time.out25
-rw-r--r--contrib/btree_gist/expected/timestamp.out25
-rw-r--r--contrib/btree_gist/expected/timestamptz.out25
-rw-r--r--contrib/btree_gist/sql/cash.sql6
-rw-r--r--contrib/btree_gist/sql/cidr.sql1
-rw-r--r--contrib/btree_gist/sql/date.sql5
-rw-r--r--contrib/btree_gist/sql/float4.sql6
-rw-r--r--contrib/btree_gist/sql/float8.sql6
-rw-r--r--contrib/btree_gist/sql/inet.sql1
-rw-r--r--contrib/btree_gist/sql/init.sql10
-rw-r--r--contrib/btree_gist/sql/int2.sql5
-rw-r--r--contrib/btree_gist/sql/int4.sql5
-rw-r--r--contrib/btree_gist/sql/int8.sql5
-rw-r--r--contrib/btree_gist/sql/interval.sql5
-rw-r--r--contrib/btree_gist/sql/macaddr.sql1
-rw-r--r--contrib/btree_gist/sql/not_equal.sql32
-rw-r--r--contrib/btree_gist/sql/time.sql5
-rw-r--r--contrib/btree_gist/sql/timestamp.sql5
-rw-r--r--contrib/btree_gist/sql/timestamptz.sql6
-rw-r--r--contrib/btree_gist/uninstall_btree_gist.sql280
-rw-r--r--contrib/chkpass/Makefile8
-rw-r--r--contrib/chkpass/chkpass--1.0.sql (renamed from contrib/chkpass/chkpass.sql.in)16
-rw-r--r--contrib/chkpass/chkpass--unpackaged--1.0.sql10
-rw-r--r--contrib/chkpass/chkpass.c2
-rw-r--r--contrib/chkpass/chkpass.control5
-rw-r--r--contrib/chkpass/uninstall_chkpass.sql16
-rw-r--r--contrib/citext/.gitignore4
-rw-r--r--contrib/citext/Makefile8
-rw-r--r--contrib/citext/citext--1.0.sql (renamed from contrib/citext/citext.sql.in)84
-rw-r--r--contrib/citext/citext--unpackaged--1.0.sql88
-rw-r--r--contrib/citext/citext.c46
-rw-r--r--contrib/citext/citext.control5
-rw-r--r--contrib/citext/expected/citext.out11
-rw-r--r--contrib/citext/expected/citext_1.out11
-rw-r--r--contrib/citext/sql/citext.sql14
-rw-r--r--contrib/citext/uninstall_citext.sql80
-rw-r--r--contrib/contrib-global.mk2
-rw-r--r--contrib/cube/.cvsignore2
-rw-r--r--contrib/cube/.gitignore6
-rw-r--r--contrib/cube/CHANGES4
-rw-r--r--contrib/cube/Makefile7
-rw-r--r--contrib/cube/cube--1.0.sql (renamed from contrib/cube/cube.sql.in)84
-rw-r--r--contrib/cube/cube--unpackaged--1.0.sql53
-rw-r--r--contrib/cube/cube.c10
-rw-r--r--contrib/cube/cube.control5
-rw-r--r--contrib/cube/cubedata.h2
-rw-r--r--contrib/cube/cubeparse.y34
-rw-r--r--contrib/cube/cubescan.l8
-rw-r--r--contrib/cube/expected/cube.out20
-rw-r--r--contrib/cube/expected/cube_1.out20
-rw-r--r--contrib/cube/expected/cube_2.out20
-rw-r--r--contrib/cube/expected/cube_3.out1128
-rw-r--r--contrib/cube/sql/cube.sql22
-rw-r--r--contrib/cube/uninstall_cube.sql98
-rw-r--r--contrib/dblink/.gitignore4
-rw-r--r--contrib/dblink/Makefile11
-rw-r--r--contrib/dblink/dblink--1.0.sql (renamed from contrib/dblink/dblink.sql.in)89
-rw-r--r--contrib/dblink/dblink--unpackaged--1.0.sql43
-rw-r--r--contrib/dblink/dblink.c28
-rw-r--r--contrib/dblink/dblink.control5
-rw-r--r--contrib/dblink/dblink.h4
-rw-r--r--contrib/dblink/expected/dblink.out20
-rw-r--r--contrib/dblink/sql/dblink.sql23
-rw-r--r--contrib/dblink/uninstall_dblink.sql86
-rw-r--r--contrib/dict_int/.gitignore4
-rw-r--r--contrib/dict_int/Makefile8
-rw-r--r--contrib/dict_int/dict_int--1.0.sql (renamed from contrib/dict_int/dict_int.sql.in)9
-rw-r--r--contrib/dict_int/dict_int--unpackaged--1.0.sql6
-rw-r--r--contrib/dict_int/dict_int.c4
-rw-r--r--contrib/dict_int/dict_int.control5
-rw-r--r--contrib/dict_int/expected/dict_int.out8
-rw-r--r--contrib/dict_int/sql/dict_int.sql10
-rw-r--r--contrib/dict_int/uninstall_dict_int.sql12
-rw-r--r--contrib/dict_xsyn/.gitignore4
-rw-r--r--contrib/dict_xsyn/Makefile8
-rw-r--r--contrib/dict_xsyn/dict_xsyn--1.0.sql (renamed from contrib/dict_xsyn/dict_xsyn.sql.in)9
-rw-r--r--contrib/dict_xsyn/dict_xsyn--unpackaged--1.0.sql6
-rw-r--r--contrib/dict_xsyn/dict_xsyn.c4
-rw-r--r--contrib/dict_xsyn/dict_xsyn.control5
-rw-r--r--contrib/dict_xsyn/expected/dict_xsyn.out8
-rw-r--r--contrib/dict_xsyn/sql/dict_xsyn.sql10
-rw-r--r--contrib/dict_xsyn/uninstall_dict_xsyn.sql12
-rw-r--r--contrib/dummy_seclabel/Makefile14
-rw-r--r--contrib/dummy_seclabel/dummy_seclabel.c49
-rw-r--r--contrib/earthdistance/.gitignore4
-rw-r--r--contrib/earthdistance/Makefile9
-rw-r--r--contrib/earthdistance/earthdistance--1.0.sql (renamed from contrib/earthdistance/earthdistance.sql.in)29
-rw-r--r--contrib/earthdistance/earthdistance--unpackaged--1.0.sql13
-rw-r--r--contrib/earthdistance/earthdistance.c2
-rw-r--r--contrib/earthdistance/earthdistance.control6
-rw-r--r--contrib/earthdistance/expected/earthdistance.out9
-rw-r--r--contrib/earthdistance/sql/earthdistance.sql12
-rw-r--r--contrib/earthdistance/uninstall_earthdistance.sql26
-rw-r--r--contrib/file_fdw/.gitignore4
-rw-r--r--contrib/file_fdw/Makefile21
-rw-r--r--contrib/file_fdw/data/agg.bad4
-rw-r--r--contrib/file_fdw/data/agg.csv4
-rw-r--r--contrib/file_fdw/data/agg.data4
-rw-r--r--contrib/file_fdw/expected/.gitignore1
-rw-r--r--contrib/file_fdw/file_fdw--1.0.sql15
-rw-r--r--contrib/file_fdw/file_fdw.c536
-rw-r--r--contrib/file_fdw/file_fdw.control5
-rw-r--r--contrib/file_fdw/input/file_fdw.source131
-rw-r--r--contrib/file_fdw/output/file_fdw.source225
-rw-r--r--contrib/file_fdw/sql/.gitignore1
-rw-r--r--contrib/fuzzystrmatch/Makefile10
-rw-r--r--contrib/fuzzystrmatch/dmetaphone.c2
-rw-r--r--contrib/fuzzystrmatch/fuzzystrmatch--1.0.sql41
-rw-r--r--contrib/fuzzystrmatch/fuzzystrmatch--unpackaged--1.0.sql20
-rw-r--r--contrib/fuzzystrmatch/fuzzystrmatch.c167
-rw-r--r--contrib/fuzzystrmatch/fuzzystrmatch.control5
-rw-r--r--contrib/fuzzystrmatch/fuzzystrmatch.sql.in36
-rw-r--r--contrib/fuzzystrmatch/levenshtein.c403
-rw-r--r--contrib/fuzzystrmatch/uninstall_fuzzystrmatch.sql20
-rw-r--r--contrib/hstore/.gitignore4
-rw-r--r--contrib/hstore/Makefile20
-rw-r--r--contrib/hstore/crc32.c2
-rw-r--r--contrib/hstore/crc32.h2
-rw-r--r--contrib/hstore/expected/hstore.out22
-rw-r--r--contrib/hstore/hstore--1.0.sql (renamed from contrib/hstore/hstore.sql.in)109
-rw-r--r--contrib/hstore/hstore--unpackaged--1.0.sql89
-rw-r--r--contrib/hstore/hstore.control5
-rw-r--r--contrib/hstore/hstore.h2
-rw-r--r--contrib/hstore/hstore_compat.c5
-rw-r--r--contrib/hstore/hstore_gin.c115
-rw-r--r--contrib/hstore/hstore_gist.c26
-rw-r--r--contrib/hstore/hstore_io.c10
-rw-r--r--contrib/hstore/hstore_op.c42
-rw-r--r--contrib/hstore/sql/hstore.sql20
-rw-r--r--contrib/hstore/uninstall_hstore.sql86
-rw-r--r--contrib/intagg/Makefile5
-rw-r--r--contrib/intagg/intagg--1.0.sql (renamed from contrib/intagg/int_aggregate.sql)11
-rw-r--r--contrib/intagg/intagg--unpackaged--1.0.sql6
-rw-r--r--contrib/intagg/intagg.control4
-rw-r--r--contrib/intagg/uninstall_int_aggregate.sql12
-rw-r--r--contrib/intarray/.gitignore4
-rw-r--r--contrib/intarray/Makefile10
-rw-r--r--contrib/intarray/_int.h82
-rw-r--r--contrib/intarray/_int_bool.c319
-rw-r--r--contrib/intarray/_int_gin.c123
-rw-r--r--contrib/intarray/_int_gist.c33
-rw-r--r--contrib/intarray/_int_op.c111
-rw-r--r--contrib/intarray/_int_tool.c117
-rw-r--r--contrib/intarray/_intbig_gist.c19
-rwxr-xr-xcontrib/intarray/bench/bench.pl23
-rwxr-xr-xcontrib/intarray/bench/create_test.pl6
-rw-r--r--contrib/intarray/expected/_int.out8
-rw-r--r--contrib/intarray/intarray--1.0.sql (renamed from contrib/intarray/_int.sql.in)101
-rw-r--r--contrib/intarray/intarray--unpackaged--1.0.sql108
-rw-r--r--contrib/intarray/intarray.control5
-rw-r--r--contrib/intarray/sql/_int.sql10
-rw-r--r--contrib/intarray/uninstall__int.sql128
-rw-r--r--contrib/isn/EAN13.h2
-rw-r--r--contrib/isn/ISBN.h376
-rw-r--r--contrib/isn/ISMN.h2
-rw-r--r--contrib/isn/ISSN.h2
-rw-r--r--contrib/isn/Makefile7
-rw-r--r--contrib/isn/UPC.h2
-rw-r--r--contrib/isn/isn--1.0.sql (renamed from contrib/isn/isn.sql.in)495
-rw-r--r--contrib/isn/isn--unpackaged--1.0.sql461
-rw-r--r--contrib/isn/isn.c23
-rw-r--r--contrib/isn/isn.control5
-rw-r--r--contrib/isn/isn.h4
-rw-r--r--contrib/isn/uninstall_isn.sql24
-rw-r--r--contrib/lo/Makefile7
-rw-r--r--contrib/lo/lo--1.0.sql (renamed from contrib/lo/lo.sql.in)9
-rw-r--r--contrib/lo/lo--unpackaged--1.0.sql5
-rw-r--r--contrib/lo/lo.c2
-rw-r--r--contrib/lo/lo.control5
-rw-r--r--contrib/lo/lo_test.sql2
-rw-r--r--contrib/lo/uninstall_lo.sql17
-rw-r--r--contrib/ltree/.gitignore4
-rw-r--r--contrib/ltree/Makefile10
-rw-r--r--contrib/ltree/_ltree_gist.c6
-rw-r--r--contrib/ltree/_ltree_op.c8
-rw-r--r--contrib/ltree/crc32.c2
-rw-r--r--contrib/ltree/crc32.h2
-rw-r--r--contrib/ltree/expected/ltree.out8
-rw-r--r--contrib/ltree/lquery_op.c9
-rw-r--r--contrib/ltree/ltree--1.0.sql (renamed from contrib/ltree/ltree.sql.in)151
-rw-r--r--contrib/ltree/ltree--unpackaged--1.0.sql131
-rw-r--r--contrib/ltree/ltree.control5
-rw-r--r--contrib/ltree/ltree.h2
-rw-r--r--contrib/ltree/ltree_gist.c6
-rw-r--r--contrib/ltree/ltree_io.c2
-rw-r--r--contrib/ltree/ltree_op.c10
-rw-r--r--contrib/ltree/ltreetest.sql2
-rw-r--r--contrib/ltree/ltxtquery_io.c6
-rw-r--r--contrib/ltree/ltxtquery_op.c2
-rw-r--r--contrib/ltree/sql/ltree.sql11
-rw-r--r--contrib/ltree/uninstall_ltree.sql240
-rw-r--r--contrib/oid2name/.gitignore1
-rw-r--r--contrib/oid2name/Makefile4
-rw-r--r--contrib/oid2name/oid2name.c2
-rw-r--r--contrib/pageinspect/Makefile14
-rw-r--r--contrib/pageinspect/btreefuncs.c2
-rw-r--r--contrib/pageinspect/fsmfuncs.c6
-rw-r--r--contrib/pageinspect/heapfuncs.c8
-rw-r--r--contrib/pageinspect/pageinspect--1.0.sql (renamed from contrib/pageinspect/pageinspect.sql.in)25
-rw-r--r--contrib/pageinspect/pageinspect--unpackaged--1.0.sql28
-rw-r--r--contrib/pageinspect/pageinspect.control5
-rw-r--r--contrib/pageinspect/rawpage.c9
-rw-r--r--contrib/pageinspect/uninstall_pageinspect.sql13
-rw-r--r--contrib/passwordcheck/Makefile2
-rw-r--r--contrib/passwordcheck/passwordcheck.c4
-rw-r--r--contrib/pg_archivecleanup/.gitignore1
-rw-r--r--contrib/pg_archivecleanup/Makefile4
-rw-r--r--contrib/pg_archivecleanup/pg_archivecleanup.c34
-rw-r--r--contrib/pg_buffercache/Makefile8
-rw-r--r--contrib/pg_buffercache/pg_buffercache--1.0.sql (renamed from contrib/pg_buffercache/pg_buffercache.sql.in)13
-rw-r--r--contrib/pg_buffercache/pg_buffercache--unpackaged--1.0.sql4
-rw-r--r--contrib/pg_buffercache/pg_buffercache.control5
-rw-r--r--contrib/pg_buffercache/pg_buffercache_pages.c2
-rw-r--r--contrib/pg_buffercache/uninstall_pg_buffercache.sql8
-rw-r--r--contrib/pg_freespacemap/Makefile8
-rw-r--r--contrib/pg_freespacemap/pg_freespacemap--1.0.sql (renamed from contrib/pg_freespacemap/pg_freespacemap.sql.in)10
-rw-r--r--contrib/pg_freespacemap/pg_freespacemap--unpackaged--1.0.sql4
-rw-r--r--contrib/pg_freespacemap/pg_freespacemap.c2
-rw-r--r--contrib/pg_freespacemap/pg_freespacemap.control5
-rw-r--r--contrib/pg_freespacemap/uninstall_pg_freespacemap.sql7
-rw-r--r--contrib/pg_standby/.gitignore1
-rw-r--r--contrib/pg_standby/Makefile4
-rw-r--r--contrib/pg_standby/pg_standby.c34
-rw-r--r--contrib/pg_stat_statements/Makefile7
-rw-r--r--contrib/pg_stat_statements/pg_stat_statements--1.0.sql (renamed from contrib/pg_stat_statements/pg_stat_statements.sql.in)5
-rw-r--r--contrib/pg_stat_statements/pg_stat_statements--unpackaged--1.0.sql5
-rw-r--r--contrib/pg_stat_statements/pg_stat_statements.c38
-rw-r--r--contrib/pg_stat_statements/pg_stat_statements.control5
-rw-r--r--contrib/pg_stat_statements/uninstall_pg_stat_statements.sql8
-rw-r--r--contrib/pg_test_fsync/.gitignore1
-rw-r--r--contrib/pg_test_fsync/Makefile18
-rw-r--r--contrib/pg_test_fsync/pg_test_fsync.c527
-rw-r--r--contrib/pg_trgm/.gitignore4
-rw-r--r--contrib/pg_trgm/Makefile7
-rw-r--r--contrib/pg_trgm/expected/pg_trgm.out121
-rw-r--r--contrib/pg_trgm/pg_trgm--1.0.sql163
-rw-r--r--contrib/pg_trgm/pg_trgm--unpackaged--1.0.sql95
-rw-r--r--contrib/pg_trgm/pg_trgm.control5
-rw-r--r--contrib/pg_trgm/pg_trgm.sql.in132
-rw-r--r--contrib/pg_trgm/sql/pg_trgm.sql38
-rw-r--r--contrib/pg_trgm/trgm.h31
-rw-r--r--contrib/pg_trgm/trgm_gin.c165
-rw-r--r--contrib/pg_trgm/trgm_gist.c225
-rw-r--r--contrib/pg_trgm/trgm_op.c311
-rw-r--r--contrib/pg_trgm/uninstall_pg_trgm.sql42
-rw-r--r--contrib/pg_upgrade/.gitignore1
-rw-r--r--contrib/pg_upgrade/IMPLEMENTATION4
-rw-r--r--contrib/pg_upgrade/Makefile5
-rw-r--r--contrib/pg_upgrade/TESTING27
-rw-r--r--contrib/pg_upgrade/check.c540
-rw-r--r--contrib/pg_upgrade/controldata.c251
-rw-r--r--contrib/pg_upgrade/dump.c35
-rw-r--r--contrib/pg_upgrade/exec.c339
-rw-r--r--contrib/pg_upgrade/file.c145
-rw-r--r--contrib/pg_upgrade/function.c208
-rw-r--r--contrib/pg_upgrade/info.c485
-rw-r--r--contrib/pg_upgrade/option.c231
-rw-r--r--contrib/pg_upgrade/page.c33
-rw-r--r--contrib/pg_upgrade/pg_upgrade.c356
-rw-r--r--contrib/pg_upgrade/pg_upgrade.h249
-rw-r--r--contrib/pg_upgrade/relfilenode.c188
-rw-r--r--contrib/pg_upgrade/server.c349
-rw-r--r--contrib/pg_upgrade/tablespace.c52
-rw-r--r--contrib/pg_upgrade/util.c144
-rw-r--r--contrib/pg_upgrade/version.c40
-rw-r--r--contrib/pg_upgrade/version_old_8_3.c342
-rw-r--r--contrib/pg_upgrade_support/Makefile5
-rw-r--r--contrib/pg_upgrade_support/pg_upgrade_support.c167
-rw-r--r--contrib/pgbench/.gitignore1
-rw-r--r--contrib/pgbench/Makefile4
-rw-r--r--contrib/pgbench/pgbench.c434
-rw-r--r--contrib/pgcrypto/.gitignore4
-rw-r--r--contrib/pgcrypto/Makefile11
-rw-r--r--contrib/pgcrypto/blf.c2
-rw-r--r--contrib/pgcrypto/blf.h2
-rw-r--r--contrib/pgcrypto/crypt-blowfish.c2
-rw-r--r--contrib/pgcrypto/crypt-des.c2
-rw-r--r--contrib/pgcrypto/crypt-gensalt.c2
-rw-r--r--contrib/pgcrypto/crypt-md5.c2
-rw-r--r--contrib/pgcrypto/expected/blowfish.out8
-rw-r--r--contrib/pgcrypto/expected/crypt-blowfish.out2
-rw-r--r--contrib/pgcrypto/expected/init.out8
-rw-r--r--contrib/pgcrypto/expected/rijndael.out8
-rw-r--r--contrib/pgcrypto/fortuna.c2
-rw-r--r--contrib/pgcrypto/fortuna.h2
-rw-r--r--contrib/pgcrypto/imath.c2
-rw-r--r--contrib/pgcrypto/imath.h2
-rw-r--r--contrib/pgcrypto/internal-sha2.c2
-rw-r--r--contrib/pgcrypto/internal.c2
-rw-r--r--contrib/pgcrypto/mbuf.c2
-rw-r--r--contrib/pgcrypto/mbuf.h2
-rw-r--r--contrib/pgcrypto/md5.c2
-rw-r--r--contrib/pgcrypto/md5.h2
-rw-r--r--contrib/pgcrypto/openssl.c2
-rw-r--r--contrib/pgcrypto/pgcrypto--1.0.sql (renamed from contrib/pgcrypto/pgcrypto.sql.in)72
-rw-r--r--contrib/pgcrypto/pgcrypto--unpackaged--1.0.sql35
-rw-r--r--contrib/pgcrypto/pgcrypto.c2
-rw-r--r--contrib/pgcrypto/pgcrypto.control5
-rw-r--r--contrib/pgcrypto/pgcrypto.h2
-rw-r--r--contrib/pgcrypto/pgp-armor.c2
-rw-r--r--contrib/pgcrypto/pgp-cfb.c2
-rw-r--r--contrib/pgcrypto/pgp-compress.c2
-rw-r--r--contrib/pgcrypto/pgp-decrypt.c2
-rw-r--r--contrib/pgcrypto/pgp-encrypt.c2
-rw-r--r--contrib/pgcrypto/pgp-info.c2
-rw-r--r--contrib/pgcrypto/pgp-mpi-internal.c2
-rw-r--r--contrib/pgcrypto/pgp-mpi-openssl.c2
-rw-r--r--contrib/pgcrypto/pgp-mpi.c2
-rw-r--r--contrib/pgcrypto/pgp-pgsql.c2
-rw-r--r--contrib/pgcrypto/pgp-pubdec.c2
-rw-r--r--contrib/pgcrypto/pgp-pubenc.c6
-rw-r--r--contrib/pgcrypto/pgp-pubkey.c2
-rw-r--r--contrib/pgcrypto/pgp-s2k.c14
-rw-r--r--contrib/pgcrypto/pgp.c2
-rw-r--r--contrib/pgcrypto/pgp.h2
-rw-r--r--contrib/pgcrypto/px-crypt.c2
-rw-r--r--contrib/pgcrypto/px-crypt.h2
-rw-r--r--contrib/pgcrypto/px-hmac.c4
-rw-r--r--contrib/pgcrypto/px.c8
-rw-r--r--contrib/pgcrypto/px.h2
-rw-r--r--contrib/pgcrypto/random.c2
-rw-r--r--contrib/pgcrypto/rijndael.c2
-rw-r--r--contrib/pgcrypto/rijndael.h2
-rw-r--r--contrib/pgcrypto/rijndael.tbl3
-rw-r--r--contrib/pgcrypto/sha1.c2
-rw-r--r--contrib/pgcrypto/sha1.h2
-rw-r--r--contrib/pgcrypto/sha2.c2
-rw-r--r--contrib/pgcrypto/sha2.h2
-rw-r--r--contrib/pgcrypto/sql/3des.sql1
-rw-r--r--contrib/pgcrypto/sql/blowfish.sql9
-rw-r--r--contrib/pgcrypto/sql/cast5.sql1
-rw-r--r--contrib/pgcrypto/sql/crypt-blowfish.sql3
-rw-r--r--contrib/pgcrypto/sql/crypt-des.sql1
-rw-r--r--contrib/pgcrypto/sql/crypt-md5.sql1
-rw-r--r--contrib/pgcrypto/sql/crypt-xdes.sql1
-rw-r--r--contrib/pgcrypto/sql/des.sql1
-rw-r--r--contrib/pgcrypto/sql/hmac-md5.sql2
-rw-r--r--contrib/pgcrypto/sql/hmac-sha1.sql2
-rw-r--r--contrib/pgcrypto/sql/init.sql11
-rw-r--r--contrib/pgcrypto/sql/md5.sql1
-rw-r--r--contrib/pgcrypto/sql/pgp-compression.sql1
-rw-r--r--contrib/pgcrypto/sql/pgp-encrypt-DISABLED.sql2
-rw-r--r--contrib/pgcrypto/sql/pgp-encrypt.sql1
-rw-r--r--contrib/pgcrypto/sql/pgp-info.sql1
-rw-r--r--contrib/pgcrypto/sql/pgp-pubkey-DISABLED.sql2
-rw-r--r--contrib/pgcrypto/sql/pgp-pubkey-decrypt.sql1
-rw-r--r--contrib/pgcrypto/sql/pgp-pubkey-encrypt.sql2
-rw-r--r--contrib/pgcrypto/sql/pgp-zlib-DISABLED.sql2
-rw-r--r--contrib/pgcrypto/sql/rijndael.sql9
-rw-r--r--contrib/pgcrypto/sql/sha1.sql1
-rw-r--r--contrib/pgcrypto/sql/sha2.sql2
-rw-r--r--contrib/pgcrypto/uninstall_pgcrypto.sql46
-rw-r--r--contrib/pgrowlocks/Makefile13
-rw-r--r--contrib/pgrowlocks/pgrowlocks--1.0.sql (renamed from contrib/pgrowlocks/pgrowlocks.sql.in)7
-rw-r--r--contrib/pgrowlocks/pgrowlocks--unpackaged--1.0.sql3
-rw-r--r--contrib/pgrowlocks/pgrowlocks.c2
-rw-r--r--contrib/pgrowlocks/pgrowlocks.control5
-rw-r--r--contrib/pgrowlocks/uninstall_pgrowlocks.sql6
-rw-r--r--contrib/pgstattuple/Makefile13
-rw-r--r--contrib/pgstattuple/pgstatindex.c2
-rw-r--r--contrib/pgstattuple/pgstattuple--1.0.sql (renamed from contrib/pgstattuple/pgstattuple.sql.in)13
-rw-r--r--contrib/pgstattuple/pgstattuple--unpackaged--1.0.sql6
-rw-r--r--contrib/pgstattuple/pgstattuple.c5
-rw-r--r--contrib/pgstattuple/pgstattuple.control5
-rw-r--r--contrib/pgstattuple/uninstall_pgstattuple.sql9
-rw-r--r--contrib/seg/.cvsignore2
-rw-r--r--contrib/seg/.gitignore6
-rw-r--r--contrib/seg/Makefile8
-rw-r--r--contrib/seg/expected/seg.out12
-rw-r--r--contrib/seg/expected/seg_1.out12
-rw-r--r--contrib/seg/seg--1.0.sql (renamed from contrib/seg/seg.sql.in)74
-rw-r--r--contrib/seg/seg--unpackaged--1.0.sql51
-rw-r--r--contrib/seg/seg.c199
-rw-r--r--contrib/seg/seg.control5
-rw-r--r--contrib/seg/segdata.h2
-rw-r--r--contrib/seg/segparse.y6
-rw-r--r--contrib/seg/segscan.l6
-rwxr-xr-xcontrib/seg/sort-segments.pl2
-rw-r--r--contrib/seg/sql/seg.sql14
-rw-r--r--contrib/seg/uninstall_seg.sql94
-rw-r--r--contrib/sepgsql/.gitignore7
-rw-r--r--contrib/sepgsql/Makefile22
-rw-r--r--contrib/sepgsql/dml.c367
-rw-r--r--contrib/sepgsql/expected/dml.out183
-rw-r--r--contrib/sepgsql/expected/label.out117
-rw-r--r--contrib/sepgsql/expected/misc.out5
-rw-r--r--contrib/sepgsql/hooks.c462
-rw-r--r--contrib/sepgsql/label.c528
-rwxr-xr-xcontrib/sepgsql/launcher52
-rw-r--r--contrib/sepgsql/proc.c159
-rw-r--r--contrib/sepgsql/relation.c276
-rw-r--r--contrib/sepgsql/schema.c99
-rw-r--r--contrib/sepgsql/selinux.c939
-rw-r--r--contrib/sepgsql/sepgsql-regtest.te85
-rw-r--r--contrib/sepgsql/sepgsql.h291
-rw-r--r--contrib/sepgsql/sepgsql.sql.in36
-rw-r--r--contrib/sepgsql/sql/dml.sql119
-rw-r--r--contrib/sepgsql/sql/label.sql81
-rw-r--r--contrib/sepgsql/sql/misc.sql5
-rw-r--r--contrib/spi/Makefile12
-rw-r--r--contrib/spi/autoinc--1.0.sql6
-rw-r--r--contrib/spi/autoinc--unpackaged--1.0.sql3
-rw-r--r--contrib/spi/autoinc.c8
-rw-r--r--contrib/spi/autoinc.control5
-rw-r--r--contrib/spi/autoinc.example10
-rw-r--r--contrib/spi/autoinc.sql.in9
-rw-r--r--contrib/spi/insert_username--1.0.sql6
-rw-r--r--contrib/spi/insert_username--unpackaged--1.0.sql3
-rw-r--r--contrib/spi/insert_username.c8
-rw-r--r--contrib/spi/insert_username.control5
-rw-r--r--contrib/spi/insert_username.example3
-rw-r--r--contrib/spi/insert_username.sql.in9
-rw-r--r--contrib/spi/moddatetime--1.0.sql6
-rw-r--r--contrib/spi/moddatetime--unpackaged--1.0.sql3
-rw-r--r--contrib/spi/moddatetime.c46
-rw-r--r--contrib/spi/moddatetime.control5
-rw-r--r--contrib/spi/moddatetime.example2
-rw-r--r--contrib/spi/moddatetime.sql.in9
-rw-r--r--contrib/spi/refint--1.0.sql11
-rw-r--r--contrib/spi/refint--unpackaged--1.0.sql4
-rw-r--r--contrib/spi/refint.c10
-rw-r--r--contrib/spi/refint.control5
-rw-r--r--contrib/spi/refint.example10
-rw-r--r--contrib/spi/refint.sql.in14
-rw-r--r--contrib/spi/timetravel--1.0.sql16
-rw-r--r--contrib/spi/timetravel--unpackaged--1.0.sql5
-rw-r--r--contrib/spi/timetravel.c10
-rw-r--r--contrib/spi/timetravel.control5
-rw-r--r--contrib/spi/timetravel.example18
-rw-r--r--contrib/spi/timetravel.sql.in19
-rw-r--r--contrib/sslinfo/Makefile7
-rw-r--r--contrib/sslinfo/sslinfo--1.0.sql37
-rw-r--r--contrib/sslinfo/sslinfo--unpackaged--1.0.sql19
-rw-r--r--contrib/sslinfo/sslinfo.c30
-rw-r--r--contrib/sslinfo/sslinfo.control5
-rw-r--r--contrib/sslinfo/sslinfo.sql.in32
-rw-r--r--contrib/sslinfo/uninstall_sslinfo.sql12
-rw-r--r--contrib/start-scripts/freebsd2
-rw-r--r--contrib/start-scripts/linux2
-rwxr-xr-xcontrib/start-scripts/osx/PostgreSQL4
-rw-r--r--contrib/tablefunc/.gitignore4
-rw-r--r--contrib/tablefunc/Makefile8
-rw-r--r--contrib/tablefunc/expected/tablefunc.out8
-rw-r--r--contrib/tablefunc/sql/tablefunc.sql11
-rw-r--r--contrib/tablefunc/tablefunc--1.0.sql (renamed from contrib/tablefunc/tablefunc.sql.in)27
-rw-r--r--contrib/tablefunc/tablefunc--unpackaged--1.0.sql16
-rw-r--r--contrib/tablefunc/tablefunc.c24
-rw-r--r--contrib/tablefunc/tablefunc.control5
-rw-r--r--contrib/tablefunc/tablefunc.h4
-rw-r--r--contrib/tablefunc/uninstall_tablefunc.sql32
-rw-r--r--contrib/test_parser/.gitignore4
-rw-r--r--contrib/test_parser/Makefile8
-rw-r--r--contrib/test_parser/expected/test_parser.out10
-rw-r--r--contrib/test_parser/sql/test_parser.sql12
-rw-r--r--contrib/test_parser/test_parser--1.0.sql (renamed from contrib/test_parser/test_parser.sql.in)13
-rw-r--r--contrib/test_parser/test_parser--unpackaged--1.0.sql7
-rw-r--r--contrib/test_parser/test_parser.c4
-rw-r--r--contrib/test_parser/test_parser.control5
-rw-r--r--contrib/test_parser/uninstall_test_parser.sql14
-rw-r--r--contrib/tsearch2/.gitignore4
-rw-r--r--contrib/tsearch2/Makefile8
-rw-r--r--contrib/tsearch2/expected/tsearch2.out16
-rw-r--r--contrib/tsearch2/expected/tsearch2_1.out16
-rw-r--r--contrib/tsearch2/sql/tsearch2.sql21
-rw-r--r--contrib/tsearch2/tsearch2--1.0.sql (renamed from contrib/tsearch2/tsearch2.sql.in)59
-rw-r--r--contrib/tsearch2/tsearch2--unpackaged--1.0.sql141
-rw-r--r--contrib/tsearch2/tsearch2.c10
-rw-r--r--contrib/tsearch2/tsearch2.control7
-rw-r--r--contrib/tsearch2/uninstall_tsearch2.sql96
-rw-r--r--contrib/unaccent/.gitignore4
-rw-r--r--contrib/unaccent/Makefile12
-rw-r--r--contrib/unaccent/expected/unaccent.out4
-rw-r--r--contrib/unaccent/sql/unaccent.sql6
-rw-r--r--contrib/unaccent/unaccent--1.0.sql31
-rw-r--r--contrib/unaccent/unaccent--unpackaged--1.0.sql13
-rw-r--r--contrib/unaccent/unaccent.c6
-rw-r--r--contrib/unaccent/unaccent.control5
-rw-r--r--contrib/unaccent/unaccent.sql.in34
-rw-r--r--contrib/unaccent/uninstall_unaccent.sql11
-rw-r--r--contrib/uuid-ossp/Makefile7
-rw-r--r--contrib/uuid-ossp/uninstall_uuid-ossp.sql16
-rw-r--r--contrib/uuid-ossp/uuid-ossp--1.0.sql (renamed from contrib/uuid-ossp/uuid-ossp.sql.in)25
-rw-r--r--contrib/uuid-ossp/uuid-ossp--unpackaged--1.0.sql12
-rw-r--r--contrib/uuid-ossp/uuid-ossp.c4
-rw-r--r--contrib/uuid-ossp/uuid-ossp.control5
-rw-r--r--contrib/vacuumlo/.gitignore1
-rw-r--r--contrib/vacuumlo/Makefile4
-rw-r--r--contrib/vacuumlo/vacuumlo.c4
-rw-r--r--contrib/xml2/.gitignore4
-rw-r--r--contrib/xml2/Makefile10
-rw-r--r--contrib/xml2/expected/xml2.out78
-rw-r--r--contrib/xml2/expected/xml2_1.out60
-rw-r--r--contrib/xml2/pgxml.sql.in77
-rw-r--r--contrib/xml2/sql/xml2.sql62
-rw-r--r--contrib/xml2/uninstall_pgxml.sql33
-rw-r--r--contrib/xml2/xml2--1.0.sql70
-rw-r--r--contrib/xml2/xml2--unpackaged--1.0.sql26
-rw-r--r--contrib/xml2/xml2.control6
-rw-r--r--contrib/xml2/xpath.c173
-rw-r--r--contrib/xml2/xslt_proc.c52
-rw-r--r--doc/KNOWN_BUGS1
-rw-r--r--doc/MISSING_FEATURES1
-rw-r--r--doc/Makefile4
-rw-r--r--doc/bug.template4
-rw-r--r--doc/src/Makefile4
-rw-r--r--doc/src/sgml/.cvsignore6
-rw-r--r--doc/src/sgml/.gitignore33
-rw-r--r--doc/src/sgml/Makefile22
-rw-r--r--doc/src/sgml/README.links12
-rw-r--r--doc/src/sgml/acronyms.sgml28
-rw-r--r--doc/src/sgml/adminpack.sgml6
-rw-r--r--doc/src/sgml/advanced.sgml14
-rw-r--r--doc/src/sgml/arch-dev.sgml4
-rw-r--r--doc/src/sgml/array.sgml8
-rw-r--r--doc/src/sgml/auth-delay.sgml67
-rw-r--r--doc/src/sgml/auto-explain.sgml61
-rw-r--r--doc/src/sgml/backup.sgml246
-rw-r--r--doc/src/sgml/biblio.sgml8
-rw-r--r--doc/src/sgml/bki.sgml4
-rw-r--r--doc/src/sgml/btree-gin.sgml16
-rw-r--r--doc/src/sgml/btree-gist.sgml72
-rw-r--r--doc/src/sgml/catalogs.sgml1369
-rw-r--r--doc/src/sgml/charset.sgml316
-rw-r--r--doc/src/sgml/chkpass.sgml8
-rw-r--r--doc/src/sgml/citext.sgml92
-rw-r--r--doc/src/sgml/client-auth.sgml354
-rw-r--r--doc/src/sgml/config.sgml806
-rw-r--r--doc/src/sgml/contacts.sgml4
-rw-r--r--doc/src/sgml/contrib-spi.sgml29
-rw-r--r--doc/src/sgml/contrib.sgml56
-rw-r--r--doc/src/sgml/cube.sgml113
-rw-r--r--doc/src/sgml/cvs.sgml271
-rw-r--r--doc/src/sgml/datatype.sgml294
-rw-r--r--doc/src/sgml/datetime.sgml24
-rw-r--r--doc/src/sgml/dblink.sgml899
-rw-r--r--doc/src/sgml/ddl.sgml126
-rw-r--r--doc/src/sgml/dfunc.sgml10
-rw-r--r--doc/src/sgml/dict-int.sgml8
-rw-r--r--doc/src/sgml/dict-xsyn.sgml12
-rw-r--r--doc/src/sgml/diskusage.sgml9
-rw-r--r--doc/src/sgml/dml.sgml2
-rw-r--r--doc/src/sgml/docguide.sgml57
-rw-r--r--doc/src/sgml/dummy-seclabel.sgml74
-rw-r--r--doc/src/sgml/earthdistance.sgml24
-rw-r--r--doc/src/sgml/ecpg.sgml6772
-rw-r--r--doc/src/sgml/errcodes.sgml1408
-rw-r--r--doc/src/sgml/extend.sgml911
-rw-r--r--doc/src/sgml/external-projects.sgml54
-rw-r--r--doc/src/sgml/fdwhandler.sgml212
-rw-r--r--doc/src/sgml/features.sgml2
-rw-r--r--doc/src/sgml/file-fdw.sgml138
-rw-r--r--doc/src/sgml/filelist.sgml299
-rwxr-xr-xdoc/src/sgml/fixrtf2
-rw-r--r--doc/src/sgml/func.sgml3047
-rw-r--r--doc/src/sgml/fuzzystrmatch.sgml74
-rw-r--r--doc/src/sgml/generate-errcodes-table.pl56
-rw-r--r--doc/src/sgml/generate_history.pl14
-rw-r--r--doc/src/sgml/geqo.sgml2
-rw-r--r--doc/src/sgml/gin.sgml301
-rw-r--r--doc/src/sgml/gist.sgml132
-rw-r--r--doc/src/sgml/high-availability.sgml511
-rw-r--r--doc/src/sgml/history.sgml6
-rw-r--r--doc/src/sgml/hstore.sgml110
-rw-r--r--doc/src/sgml/indexam.sgml202
-rw-r--r--doc/src/sgml/indices.sgml73
-rw-r--r--doc/src/sgml/info.sgml4
-rw-r--r--doc/src/sgml/information_schema.sgml523
-rw-r--r--doc/src/sgml/install-windows.sgml (renamed from doc/src/sgml/install-win32.sgml)185
-rw-r--r--doc/src/sgml/installation.sgml427
-rw-r--r--doc/src/sgml/intagg.sgml46
-rw-r--r--doc/src/sgml/intarray.sgml57
-rw-r--r--doc/src/sgml/intro.sgml2
-rw-r--r--doc/src/sgml/isn.sgml66
-rw-r--r--doc/src/sgml/jadetex.cfg2
-rw-r--r--doc/src/sgml/keywords.sgml136
-rw-r--r--doc/src/sgml/legal.sgml8
-rw-r--r--doc/src/sgml/libpq.sgml1979
-rw-r--r--doc/src/sgml/lo.sgml16
-rw-r--r--doc/src/sgml/lobj.sgml46
-rw-r--r--doc/src/sgml/ltree.sgml126
-rw-r--r--doc/src/sgml/maintenance.sgml18
-rw-r--r--doc/src/sgml/manage-ag.sgml7
-rw-r--r--doc/src/sgml/mk_feature_tables.pl2
-rw-r--r--doc/src/sgml/monitoring.sgml435
-rw-r--r--doc/src/sgml/mvcc.sgml621
-rw-r--r--doc/src/sgml/nls.sgml12
-rw-r--r--doc/src/sgml/notation.sgml2
-rw-r--r--doc/src/sgml/oid2name.sgml14
-rw-r--r--doc/src/sgml/pageinspect.sgml43
-rw-r--r--doc/src/sgml/passwordcheck.sgml4
-rw-r--r--doc/src/sgml/perform.sgml58
-rw-r--r--doc/src/sgml/pgarchivecleanup.sgml82
-rw-r--r--doc/src/sgml/pgbench.sgml159
-rw-r--r--doc/src/sgml/pgbuffercache.sgml57
-rw-r--r--doc/src/sgml/pgcrypto.sgml346
-rw-r--r--doc/src/sgml/pgfreespacemap.sgml14
-rw-r--r--doc/src/sgml/pgrowlocks.sgml16
-rw-r--r--doc/src/sgml/pgstandby.sgml52
-rw-r--r--doc/src/sgml/pgstatstatements.sgml24
-rw-r--r--doc/src/sgml/pgstattuple.sgml23
-rw-r--r--doc/src/sgml/pgtestfsync.sgml74
-rw-r--r--doc/src/sgml/pgtrgm.sgml78
-rw-r--r--doc/src/sgml/pgupgrade.sgml512
-rw-r--r--doc/src/sgml/planstats.sgml6
-rw-r--r--doc/src/sgml/plhandler.sgml11
-rw-r--r--doc/src/sgml/plperl.sgml309
-rw-r--r--doc/src/sgml/plpgsql.sgml489
-rw-r--r--doc/src/sgml/plpython.sgml380
-rw-r--r--doc/src/sgml/pltcl.sgml73
-rw-r--r--doc/src/sgml/postgres.sgml11
-rw-r--r--doc/src/sgml/problems.sgml22
-rw-r--r--doc/src/sgml/protocol.sgml445
-rw-r--r--doc/src/sgml/queries.sgml227
-rw-r--r--doc/src/sgml/query.sgml12
-rw-r--r--doc/src/sgml/recovery-config.sgml109
-rw-r--r--doc/src/sgml/ref/abort.sgml4
-rw-r--r--doc/src/sgml/ref/allfiles.sgml336
-rw-r--r--doc/src/sgml/ref/alter_aggregate.sgml10
-rw-r--r--doc/src/sgml/ref/alter_collation.sgml128
-rw-r--r--doc/src/sgml/ref/alter_conversion.sgml20
-rw-r--r--doc/src/sgml/ref/alter_database.sgml10
-rw-r--r--doc/src/sgml/ref/alter_default_privileges.sgml14
-rw-r--r--doc/src/sgml/ref/alter_domain.sgml36
-rw-r--r--doc/src/sgml/ref/alter_extension.sgml291
-rw-r--r--doc/src/sgml/ref/alter_foreign_data_wrapper.sgml41
-rw-r--r--doc/src/sgml/ref/alter_foreign_table.sgml315
-rw-r--r--doc/src/sgml/ref/alter_function.sgml12
-rw-r--r--doc/src/sgml/ref/alter_group.sgml6
-rw-r--r--doc/src/sgml/ref/alter_index.sgml10
-rw-r--r--doc/src/sgml/ref/alter_language.sgml4
-rw-r--r--[-rwxr-xr-x]doc/src/sgml/ref/alter_large_object.sgml4
-rw-r--r--doc/src/sgml/ref/alter_opclass.sgml20
-rw-r--r--doc/src/sgml/ref/alter_operator.sgml22
-rw-r--r--doc/src/sgml/ref/alter_opfamily.sgml48
-rw-r--r--doc/src/sgml/ref/alter_role.sgml9
-rw-r--r--doc/src/sgml/ref/alter_schema.sgml4
-rw-r--r--doc/src/sgml/ref/alter_sequence.sgml8
-rw-r--r--doc/src/sgml/ref/alter_server.sgml2
-rw-r--r--doc/src/sgml/ref/alter_table.sgml187
-rw-r--r--doc/src/sgml/ref/alter_tablespace.sgml12
-rw-r--r--doc/src/sgml/ref/alter_trigger.sgml2
-rw-r--r--doc/src/sgml/ref/alter_tsconfig.sgml22
-rw-r--r--doc/src/sgml/ref/alter_tsdictionary.sgml26
-rw-r--r--doc/src/sgml/ref/alter_tsparser.sgml20
-rw-r--r--doc/src/sgml/ref/alter_tstemplate.sgml20
-rw-r--r--doc/src/sgml/ref/alter_type.sgml237
-rw-r--r--doc/src/sgml/ref/alter_user.sgml9
-rw-r--r--doc/src/sgml/ref/alter_user_mapping.sgml2
-rw-r--r--doc/src/sgml/ref/alter_view.sgml10
-rw-r--r--doc/src/sgml/ref/analyze.sgml2
-rw-r--r--doc/src/sgml/ref/begin.sgml25
-rw-r--r--doc/src/sgml/ref/checkpoint.sgml2
-rw-r--r--doc/src/sgml/ref/close.sgml8
-rw-r--r--doc/src/sgml/ref/cluster.sgml69
-rw-r--r--doc/src/sgml/ref/clusterdb.sgml26
-rw-r--r--doc/src/sgml/ref/comment.sgml79
-rw-r--r--doc/src/sgml/ref/commit.sgml8
-rw-r--r--doc/src/sgml/ref/commit_prepared.sgml6
-rw-r--r--doc/src/sgml/ref/copy.sgml22
-rw-r--r--doc/src/sgml/ref/create_aggregate.sgml16
-rw-r--r--doc/src/sgml/ref/create_cast.sgml29
-rw-r--r--doc/src/sgml/ref/create_collation.sgml177
-rw-r--r--doc/src/sgml/ref/create_constraint.sgml171
-rw-r--r--doc/src/sgml/ref/create_conversion.sgml6
-rw-r--r--doc/src/sgml/ref/create_database.sgml2
-rw-r--r--doc/src/sgml/ref/create_domain.sgml15
-rw-r--r--doc/src/sgml/ref/create_extension.sgml205
-rw-r--r--doc/src/sgml/ref/create_foreign_data_wrapper.sgml65
-rw-r--r--doc/src/sgml/ref/create_foreign_table.sgml197
-rw-r--r--doc/src/sgml/ref/create_function.sgml4
-rw-r--r--doc/src/sgml/ref/create_group.sgml14
-rw-r--r--doc/src/sgml/ref/create_index.sgml28
-rw-r--r--doc/src/sgml/ref/create_language.sgml17
-rw-r--r--doc/src/sgml/ref/create_opclass.sgml38
-rw-r--r--doc/src/sgml/ref/create_operator.sgml12
-rw-r--r--doc/src/sgml/ref/create_opfamily.sgml6
-rw-r--r--doc/src/sgml/ref/create_role.sgml33
-rw-r--r--doc/src/sgml/ref/create_rule.sgml12
-rw-r--r--doc/src/sgml/ref/create_schema.sgml2
-rw-r--r--doc/src/sgml/ref/create_sequence.sgml6
-rw-r--r--doc/src/sgml/ref/create_server.sgml2
-rw-r--r--doc/src/sgml/ref/create_table.sgml89
-rw-r--r--doc/src/sgml/ref/create_table_as.sgml18
-rw-r--r--doc/src/sgml/ref/create_tablespace.sgml4
-rw-r--r--doc/src/sgml/ref/create_trigger.sgml201
-rw-r--r--doc/src/sgml/ref/create_tsconfig.sgml8
-rw-r--r--doc/src/sgml/ref/create_tsdictionary.sgml10
-rw-r--r--doc/src/sgml/ref/create_tsparser.sgml6
-rw-r--r--doc/src/sgml/ref/create_tstemplate.sgml6
-rw-r--r--doc/src/sgml/ref/create_type.sgml52
-rw-r--r--doc/src/sgml/ref/create_user.sgml13
-rw-r--r--doc/src/sgml/ref/create_user_mapping.sgml4
-rw-r--r--doc/src/sgml/ref/create_view.sgml18
-rw-r--r--doc/src/sgml/ref/createdb.sgml52
-rw-r--r--doc/src/sgml/ref/createlang.sgml56
-rw-r--r--doc/src/sgml/ref/createuser.sgml27
-rw-r--r--doc/src/sgml/ref/deallocate.sgml2
-rw-r--r--doc/src/sgml/ref/declare.sgml2
-rw-r--r--doc/src/sgml/ref/delete.sgml18
-rw-r--r--doc/src/sgml/ref/discard.sgml2
-rw-r--r--doc/src/sgml/ref/do.sgml2
-rw-r--r--doc/src/sgml/ref/drop_aggregate.sgml2
-rw-r--r--doc/src/sgml/ref/drop_cast.sgml8
-rw-r--r--doc/src/sgml/ref/drop_collation.sgml110
-rw-r--r--doc/src/sgml/ref/drop_conversion.sgml6
-rw-r--r--doc/src/sgml/ref/drop_database.sgml8
-rw-r--r--doc/src/sgml/ref/drop_domain.sgml8
-rw-r--r--doc/src/sgml/ref/drop_extension.sgml121
-rw-r--r--doc/src/sgml/ref/drop_foreign_data_wrapper.sgml2
-rw-r--r--doc/src/sgml/ref/drop_foreign_table.sgml112
-rw-r--r--doc/src/sgml/ref/drop_function.sgml8
-rw-r--r--doc/src/sgml/ref/drop_group.sgml2
-rw-r--r--doc/src/sgml/ref/drop_index.sgml4
-rw-r--r--doc/src/sgml/ref/drop_language.sgml19
-rw-r--r--doc/src/sgml/ref/drop_opclass.sgml12
-rw-r--r--doc/src/sgml/ref/drop_operator.sgml10
-rw-r--r--doc/src/sgml/ref/drop_opfamily.sgml8
-rw-r--r--doc/src/sgml/ref/drop_owned.sgml2
-rw-r--r--doc/src/sgml/ref/drop_role.sgml8
-rw-r--r--doc/src/sgml/ref/drop_rule.sgml6
-rw-r--r--doc/src/sgml/ref/drop_schema.sgml14
-rw-r--r--doc/src/sgml/ref/drop_sequence.sgml14
-rw-r--r--doc/src/sgml/ref/drop_server.sgml2
-rw-r--r--doc/src/sgml/ref/drop_table.sgml16
-rw-r--r--doc/src/sgml/ref/drop_tablespace.sgml4
-rw-r--r--doc/src/sgml/ref/drop_trigger.sgml12
-rw-r--r--doc/src/sgml/ref/drop_tsconfig.sgml8
-rw-r--r--doc/src/sgml/ref/drop_tsdictionary.sgml8
-rw-r--r--doc/src/sgml/ref/drop_tsparser.sgml8
-rw-r--r--doc/src/sgml/ref/drop_tstemplate.sgml8
-rw-r--r--doc/src/sgml/ref/drop_type.sgml12
-rw-r--r--doc/src/sgml/ref/drop_user.sgml2
-rw-r--r--doc/src/sgml/ref/drop_user_mapping.sgml2
-rw-r--r--doc/src/sgml/ref/drop_view.sgml14
-rw-r--r--doc/src/sgml/ref/dropdb.sgml16
-rw-r--r--doc/src/sgml/ref/droplang.sgml58
-rw-r--r--doc/src/sgml/ref/dropuser.sgml20
-rw-r--r--doc/src/sgml/ref/ecpg-ref.sgml39
-rw-r--r--doc/src/sgml/ref/end.sgml8
-rw-r--r--doc/src/sgml/ref/execute.sgml2
-rw-r--r--doc/src/sgml/ref/explain.sgml57
-rw-r--r--doc/src/sgml/ref/fetch.sgml5
-rw-r--r--doc/src/sgml/ref/grant.sgml68
-rw-r--r--doc/src/sgml/ref/initdb.sgml32
-rw-r--r--doc/src/sgml/ref/insert.sgml41
-rw-r--r--doc/src/sgml/ref/listen.sgml2
-rw-r--r--doc/src/sgml/ref/load.sgml2
-rw-r--r--doc/src/sgml/ref/lock.sgml18
-rw-r--r--doc/src/sgml/ref/move.sgml22
-rw-r--r--doc/src/sgml/ref/notify.sgml2
-rw-r--r--doc/src/sgml/ref/pg_basebackup.sgml437
-rw-r--r--doc/src/sgml/ref/pg_config-ref.sgml4
-rw-r--r--doc/src/sgml/ref/pg_controldata.sgml7
-rw-r--r--doc/src/sgml/ref/pg_ctl-ref.sgml250
-rw-r--r--doc/src/sgml/ref/pg_dump.sgml185
-rw-r--r--doc/src/sgml/ref/pg_dumpall.sgml125
-rw-r--r--doc/src/sgml/ref/pg_resetxlog.sgml6
-rw-r--r--doc/src/sgml/ref/pg_restore.sgml103
-rw-r--r--doc/src/sgml/ref/postgres-ref.sgml31
-rw-r--r--doc/src/sgml/ref/postmaster.sgml2
-rw-r--r--doc/src/sgml/ref/prepare.sgml4
-rw-r--r--doc/src/sgml/ref/prepare_transaction.sgml4
-rw-r--r--doc/src/sgml/ref/psql-ref.sgml646
-rw-r--r--doc/src/sgml/ref/reassign_owned.sgml2
-rw-r--r--doc/src/sgml/ref/reindex.sgml2
-rw-r--r--doc/src/sgml/ref/reindexdb.sgml32
-rw-r--r--doc/src/sgml/ref/release_savepoint.sgml6
-rw-r--r--doc/src/sgml/ref/reset.sgml2
-rw-r--r--doc/src/sgml/ref/revoke.sgml14
-rw-r--r--doc/src/sgml/ref/rollback.sgml2
-rw-r--r--doc/src/sgml/ref/rollback_prepared.sgml6
-rw-r--r--doc/src/sgml/ref/rollback_to.sgml2
-rw-r--r--doc/src/sgml/ref/savepoint.sgml8
-rw-r--r--doc/src/sgml/ref/security_label.sgml206
-rw-r--r--doc/src/sgml/ref/select.sgml202
-rw-r--r--doc/src/sgml/ref/select_into.sgml16
-rw-r--r--doc/src/sgml/ref/set.sgml6
-rw-r--r--doc/src/sgml/ref/set_constraints.sgml2
-rw-r--r--doc/src/sgml/ref/set_role.sgml2
-rw-r--r--doc/src/sgml/ref/set_session_auth.sgml2
-rw-r--r--doc/src/sgml/ref/set_transaction.sgml73
-rw-r--r--doc/src/sgml/ref/show.sgml2
-rw-r--r--doc/src/sgml/ref/start_transaction.sgml13
-rw-r--r--doc/src/sgml/ref/truncate.sgml65
-rw-r--r--doc/src/sgml/ref/unlisten.sgml2
-rw-r--r--doc/src/sgml/ref/update.sgml18
-rw-r--r--doc/src/sgml/ref/vacuum.sgml11
-rw-r--r--doc/src/sgml/ref/vacuumdb.sgml16
-rw-r--r--doc/src/sgml/ref/values.sgml4
-rw-r--r--doc/src/sgml/reference.ced1597
-rw-r--r--doc/src/sgml/reference.sgml14
-rw-r--r--doc/src/sgml/regress.sgml125
-rw-r--r--doc/src/sgml/release-7.4.sgml204
-rw-r--r--doc/src/sgml/release-8.0.sgml260
-rw-r--r--doc/src/sgml/release-8.1.sgml507
-rw-r--r--doc/src/sgml/release-8.2.sgml838
-rw-r--r--doc/src/sgml/release-8.3.sgml976
-rw-r--r--doc/src/sgml/release-8.4.sgml1231
-rw-r--r--doc/src/sgml/release-9.0.sgml2919
-rw-r--r--doc/src/sgml/release-9.1.sgml2811
-rw-r--r--doc/src/sgml/release-alpha.sgml1486
-rw-r--r--doc/src/sgml/release-old.sgml242
-rw-r--r--doc/src/sgml/release.sgml16
-rw-r--r--doc/src/sgml/rowtypes.sgml6
-rw-r--r--doc/src/sgml/rules.sgml212
-rw-r--r--doc/src/sgml/runtime.sgml447
-rw-r--r--doc/src/sgml/seg.sgml197
-rw-r--r--doc/src/sgml/sepgsql.sgml552
-rw-r--r--doc/src/sgml/sourcerepo.sgml97
-rw-r--r--doc/src/sgml/sources.sgml39
-rw-r--r--doc/src/sgml/spi.sgml25
-rw-r--r--doc/src/sgml/sql.sgml362
-rw-r--r--doc/src/sgml/sslinfo.sgml32
-rw-r--r--doc/src/sgml/standalone-install.sgml8
-rw-r--r--doc/src/sgml/start.sgml13
-rw-r--r--doc/src/sgml/storage.sgml90
-rw-r--r--doc/src/sgml/stylesheet-man.xsl44
-rw-r--r--doc/src/sgml/stylesheet.css6
-rw-r--r--doc/src/sgml/stylesheet.dsl113
-rw-r--r--doc/src/sgml/syntax.sgml241
-rw-r--r--doc/src/sgml/tablefunc.sgml250
-rw-r--r--doc/src/sgml/test-parser.sgml8
-rw-r--r--doc/src/sgml/textsearch.sgml535
-rw-r--r--doc/src/sgml/trigger.sgml153
-rw-r--r--doc/src/sgml/tsearch2.sgml28
-rw-r--r--doc/src/sgml/typeconv.sgml4
-rw-r--r--doc/src/sgml/unaccent.sgml113
-rw-r--r--doc/src/sgml/user-manag.sgml126
-rw-r--r--doc/src/sgml/uuid-ossp.sgml38
-rw-r--r--doc/src/sgml/vacuumlo.sgml14
-rw-r--r--doc/src/sgml/wal.sgml173
-rw-r--r--doc/src/sgml/xaggr.sgml24
-rw-r--r--doc/src/sgml/xfunc.sgml496
-rw-r--r--doc/src/sgml/xindex.sgml126
-rw-r--r--doc/src/sgml/xml2.sgml274
-rw-r--r--doc/src/sgml/xoper.sgml10
-rw-r--r--doc/src/sgml/xplang.sgml23
-rw-r--r--doc/src/sgml/xtypes.sgml19
-rw-r--r--src/.gitignore3
-rw-r--r--src/Makefile64
-rw-r--r--src/Makefile.global.in100
-rw-r--r--src/Makefile.shlib15
-rw-r--r--src/backend/.gitignore2
-rw-r--r--src/backend/Makefile37
-rw-r--r--src/backend/access/Makefile2
-rw-r--r--src/backend/access/common/Makefile2
-rw-r--r--src/backend/access/common/heaptuple.c6
-rw-r--r--src/backend/access/common/indextuple.c6
-rw-r--r--src/backend/access/common/printtup.c4
-rw-r--r--src/backend/access/common/reloptions.c11
-rw-r--r--src/backend/access/common/scankey.c18
-rw-r--r--src/backend/access/common/tupconvert.c4
-rw-r--r--src/backend/access/common/tupdesc.c50
-rw-r--r--src/backend/access/gin/Makefile2
-rw-r--r--src/backend/access/gin/README204
-rw-r--r--src/backend/access/gin/ginarrayproc.c189
-rw-r--r--src/backend/access/gin/ginbtree.c59
-rw-r--r--src/backend/access/gin/ginbulk.c220
-rw-r--r--src/backend/access/gin/gindatapage.c94
-rw-r--r--src/backend/access/gin/ginentrypage.c363
-rw-r--r--src/backend/access/gin/ginfast.c193
-rw-r--r--src/backend/access/gin/ginget.c1186
-rw-r--r--src/backend/access/gin/gininsert.c356
-rw-r--r--src/backend/access/gin/ginscan.c479
-rw-r--r--src/backend/access/gin/ginutil.c412
-rw-r--r--src/backend/access/gin/ginvacuum.c57
-rw-r--r--src/backend/access/gin/ginxlog.c337
-rw-r--r--src/backend/access/gist/Makefile2
-rw-r--r--src/backend/access/gist/README299
-rw-r--r--src/backend/access/gist/gist.c1063
-rw-r--r--src/backend/access/gist/gistget.c838
-rw-r--r--src/backend/access/gist/gistproc.c113
-rw-r--r--src/backend/access/gist/gistscan.c222
-rw-r--r--src/backend/access/gist/gistsplit.c85
-rw-r--r--src/backend/access/gist/gistutil.c108
-rw-r--r--src/backend/access/gist/gistvacuum.c70
-rw-r--r--src/backend/access/gist/gistxlog.c804
-rw-r--r--src/backend/access/hash/Makefile2
-rw-r--r--src/backend/access/hash/README2
-rw-r--r--src/backend/access/hash/hash.c64
-rw-r--r--src/backend/access/hash/hashfunc.c4
-rw-r--r--src/backend/access/hash/hashinsert.c4
-rw-r--r--src/backend/access/hash/hashovfl.c13
-rw-r--r--src/backend/access/hash/hashpage.c26
-rw-r--r--src/backend/access/hash/hashscan.c4
-rw-r--r--src/backend/access/hash/hashsearch.c4
-rw-r--r--src/backend/access/hash/hashsort.c4
-rw-r--r--src/backend/access/hash/hashutil.c15
-rw-r--r--src/backend/access/heap/Makefile2
-rw-r--r--src/backend/access/heap/README.HOT8
-rw-r--r--src/backend/access/heap/heapam.c172
-rw-r--r--src/backend/access/heap/hio.c6
-rw-r--r--src/backend/access/heap/pruneheap.c7
-rw-r--r--src/backend/access/heap/rewriteheap.c25
-rw-r--r--src/backend/access/heap/syncscan.c4
-rw-r--r--src/backend/access/heap/tuptoaster.c4
-rw-r--r--src/backend/access/heap/visibilitymap.c9
-rw-r--r--src/backend/access/index/Makefile2
-rw-r--r--src/backend/access/index/genam.c37
-rw-r--r--src/backend/access/index/indexam.c80
-rw-r--r--src/backend/access/nbtree/Makefile2
-rw-r--r--src/backend/access/nbtree/README4
-rw-r--r--src/backend/access/nbtree/nbtcompare.c4
-rw-r--r--src/backend/access/nbtree/nbtinsert.c158
-rw-r--r--src/backend/access/nbtree/nbtpage.c76
-rw-r--r--src/backend/access/nbtree/nbtree.c75
-rw-r--r--src/backend/access/nbtree/nbtsearch.c26
-rw-r--r--src/backend/access/nbtree/nbtsort.c30
-rw-r--r--src/backend/access/nbtree/nbtutils.c36
-rw-r--r--src/backend/access/nbtree/nbtxlog.c23
-rw-r--r--src/backend/access/transam/Makefile2
-rw-r--r--src/backend/access/transam/README81
-rw-r--r--src/backend/access/transam/clog.c12
-rw-r--r--src/backend/access/transam/multixact.c12
-rw-r--r--src/backend/access/transam/recovery.conf.sample57
-rw-r--r--src/backend/access/transam/rmgr.c4
-rw-r--r--src/backend/access/transam/slru.c28
-rw-r--r--src/backend/access/transam/subtrans.c6
-rw-r--r--src/backend/access/transam/transam.c4
-rw-r--r--src/backend/access/transam/twophase.c64
-rw-r--r--src/backend/access/transam/twophase_rmgr.c9
-rw-r--r--src/backend/access/transam/varsup.c22
-rw-r--r--src/backend/access/transam/xact.c222
-rw-r--r--src/backend/access/transam/xlog.c1589
-rw-r--r--src/backend/access/transam/xlogutils.c20
-rw-r--r--src/backend/bootstrap/.cvsignore2
-rw-r--r--src/backend/bootstrap/.gitignore2
-rw-r--r--src/backend/bootstrap/Makefile4
-rw-r--r--src/backend/bootstrap/bootparse.y7
-rw-r--r--src/backend/bootstrap/bootscanner.l4
-rw-r--r--src/backend/bootstrap/bootstrap.c59
-rw-r--r--src/backend/catalog/.cvsignore4
-rw-r--r--src/backend/catalog/.gitignore4
-rw-r--r--src/backend/catalog/Catalog.pm4
-rw-r--r--src/backend/catalog/Makefile14
-rw-r--r--src/backend/catalog/README2
-rw-r--r--src/backend/catalog/aclchk.c286
-rw-r--r--src/backend/catalog/catalog.c152
-rw-r--r--src/backend/catalog/dependency.c283
-rw-r--r--src/backend/catalog/genbki.pl7
-rw-r--r--src/backend/catalog/heap.c235
-rw-r--r--src/backend/catalog/index.c808
-rw-r--r--src/backend/catalog/indexing.c4
-rw-r--r--src/backend/catalog/information_schema.sql200
-rw-r--r--src/backend/catalog/namespace.c432
-rw-r--r--src/backend/catalog/objectaddress.c887
-rw-r--r--src/backend/catalog/pg_aggregate.c4
-rw-r--r--src/backend/catalog/pg_collation.c180
-rw-r--r--src/backend/catalog/pg_constraint.c128
-rw-r--r--src/backend/catalog/pg_conversion.c12
-rw-r--r--src/backend/catalog/pg_db_role_setting.c4
-rw-r--r--src/backend/catalog/pg_depend.c164
-rw-r--r--src/backend/catalog/pg_enum.c418
-rw-r--r--src/backend/catalog/pg_inherits.c4
-rw-r--r--src/backend/catalog/pg_largeobject.c4
-rw-r--r--src/backend/catalog/pg_namespace.c19
-rw-r--r--src/backend/catalog/pg_operator.c18
-rw-r--r--src/backend/catalog/pg_proc.c53
-rw-r--r--src/backend/catalog/pg_shdepend.c14
-rw-r--r--src/backend/catalog/pg_type.c47
-rw-r--r--src/backend/catalog/sql_features.txt26
-rw-r--r--src/backend/catalog/storage.c126
-rw-r--r--src/backend/catalog/system_views.sql582
-rw-r--r--src/backend/catalog/toasting.c63
-rw-r--r--src/backend/commands/Makefile9
-rw-r--r--src/backend/commands/aggregatecmds.c10
-rw-r--r--src/backend/commands/alter.c296
-rw-r--r--src/backend/commands/analyze.c200
-rw-r--r--src/backend/commands/async.c22
-rw-r--r--src/backend/commands/cluster.c339
-rw-r--r--src/backend/commands/collationcmds.c443
-rw-r--r--src/backend/commands/comment.c1247
-rw-r--r--src/backend/commands/constraint.c4
-rw-r--r--src/backend/commands/conversioncmds.c88
-rw-r--r--src/backend/commands/copy.c1598
-rw-r--r--src/backend/commands/dbcommands.c163
-rw-r--r--src/backend/commands/define.c4
-rw-r--r--src/backend/commands/discard.c7
-rw-r--r--src/backend/commands/explain.c477
-rw-r--r--src/backend/commands/extension.c2763
-rw-r--r--src/backend/commands/foreigncmds.c330
-rw-r--r--src/backend/commands/functioncmds.c147
-rw-r--r--src/backend/commands/indexcmds.c315
-rw-r--r--src/backend/commands/lockcmds.c4
-rw-r--r--src/backend/commands/opclasscmds.c592
-rw-r--r--src/backend/commands/operatorcmds.c63
-rw-r--r--src/backend/commands/portalcmds.c15
-rw-r--r--src/backend/commands/prepare.c12
-rw-r--r--src/backend/commands/proclang.c61
-rw-r--r--src/backend/commands/schemacmds.c29
-rw-r--r--src/backend/commands/seclabel.c336
-rw-r--r--src/backend/commands/sequence.c302
-rw-r--r--src/backend/commands/tablecmds.c2403
-rw-r--r--src/backend/commands/tablespace.c176
-rw-r--r--src/backend/commands/trigger.c851
-rw-r--r--src/backend/commands/tsearchcmds.c266
-rw-r--r--src/backend/commands/typecmds.c225
-rw-r--r--src/backend/commands/user.c110
-rw-r--r--src/backend/commands/vacuum.c169
-rw-r--r--src/backend/commands/vacuumlazy.c205
-rw-r--r--src/backend/commands/variable.c935
-rw-r--r--src/backend/commands/view.c63
-rw-r--r--src/backend/common.mk8
-rw-r--r--src/backend/executor/Makefile6
-rw-r--r--src/backend/executor/README7
-rw-r--r--src/backend/executor/execAmi.c84
-rw-r--r--src/backend/executor/execCurrent.c27
-rw-r--r--src/backend/executor/execGrouping.c16
-rw-r--r--src/backend/executor/execJunk.c36
-rw-r--r--src/backend/executor/execMain.c554
-rw-r--r--src/backend/executor/execProcnode.c36
-rw-r--r--src/backend/executor/execQual.c367
-rw-r--r--src/backend/executor/execScan.c9
-rw-r--r--src/backend/executor/execTuples.c16
-rw-r--r--src/backend/executor/execUtils.c49
-rw-r--r--src/backend/executor/functions.c559
-rw-r--r--src/backend/executor/instrument.c4
-rw-r--r--src/backend/executor/nodeAgg.c43
-rw-r--r--src/backend/executor/nodeAppend.c14
-rw-r--r--src/backend/executor/nodeBitmapAnd.c13
-rw-r--r--src/backend/executor/nodeBitmapHeapscan.c32
-rw-r--r--src/backend/executor/nodeBitmapIndexscan.c67
-rw-r--r--src/backend/executor/nodeBitmapOr.c13
-rw-r--r--src/backend/executor/nodeCtescan.c8
-rw-r--r--src/backend/executor/nodeForeignscan.c209
-rw-r--r--src/backend/executor/nodeFunctionscan.c17
-rw-r--r--src/backend/executor/nodeGroup.c16
-rw-r--r--src/backend/executor/nodeHash.c159
-rw-r--r--src/backend/executor/nodeHashjoin.c621
-rw-r--r--src/backend/executor/nodeIndexscan.c234
-rw-r--r--src/backend/executor/nodeLimit.c80
-rw-r--r--src/backend/executor/nodeLockRows.c70
-rw-r--r--src/backend/executor/nodeMaterial.c24
-rw-r--r--src/backend/executor/nodeMergeAppend.c398
-rw-r--r--src/backend/executor/nodeMergejoin.c55
-rw-r--r--src/backend/executor/nodeModifyTable.c720
-rw-r--r--src/backend/executor/nodeNestloop.c66
-rw-r--r--src/backend/executor/nodeRecursiveunion.c19
-rw-r--r--src/backend/executor/nodeResult.c14
-rw-r--r--src/backend/executor/nodeSeqscan.c15
-rw-r--r--src/backend/executor/nodeSetOp.c14
-rw-r--r--src/backend/executor/nodeSort.c17
-rw-r--r--src/backend/executor/nodeSubplan.c48
-rw-r--r--src/backend/executor/nodeSubqueryscan.c12
-rw-r--r--src/backend/executor/nodeTidscan.c15
-rw-r--r--src/backend/executor/nodeUnique.c10
-rw-r--r--src/backend/executor/nodeValuesscan.c10
-rw-r--r--src/backend/executor/nodeWindowAgg.c31
-rw-r--r--src/backend/executor/nodeWorktablescan.c8
-rw-r--r--src/backend/executor/spi.c115
-rw-r--r--src/backend/executor/tstoreReceiver.c4
-rw-r--r--src/backend/foreign/Makefile2
-rw-r--r--src/backend/foreign/foreign.c243
-rw-r--r--src/backend/lib/Makefile2
-rw-r--r--src/backend/lib/dllist.c4
-rw-r--r--src/backend/lib/stringinfo.c4
-rw-r--r--src/backend/libpq/Makefile2
-rw-r--r--src/backend/libpq/README.SSL4
-rw-r--r--src/backend/libpq/auth.c525
-rw-r--r--src/backend/libpq/be-fsstubs.c11
-rw-r--r--src/backend/libpq/be-secure.c6
-rw-r--r--src/backend/libpq/crypt.c4
-rw-r--r--src/backend/libpq/hba.c245
-rw-r--r--src/backend/libpq/ip.c12
-rw-r--r--src/backend/libpq/md5.c4
-rw-r--r--src/backend/libpq/pg_hba.conf.sample39
-rw-r--r--src/backend/libpq/pqcomm.c276
-rw-r--r--src/backend/libpq/pqformat.c4
-rw-r--r--src/backend/libpq/pqsignal.c6
-rw-r--r--src/backend/main/Makefile2
-rw-r--r--src/backend/main/main.c62
-rw-r--r--src/backend/nls.mk9
-rw-r--r--src/backend/nodes/Makefile2
-rw-r--r--src/backend/nodes/README6
-rw-r--r--src/backend/nodes/bitmapset.c4
-rw-r--r--src/backend/nodes/copyfuncs.c374
-rw-r--r--src/backend/nodes/equalfuncs.c235
-rw-r--r--src/backend/nodes/list.c4
-rw-r--r--src/backend/nodes/makefuncs.c135
-rw-r--r--src/backend/nodes/nodeFuncs.c582
-rw-r--r--src/backend/nodes/nodes.c4
-rw-r--r--src/backend/nodes/outfuncs.c299
-rw-r--r--src/backend/nodes/params.c6
-rw-r--r--src/backend/nodes/print.c12
-rw-r--r--src/backend/nodes/read.c4
-rw-r--r--src/backend/nodes/readfuncs.c129
-rw-r--r--src/backend/nodes/tidbitmap.c4
-rw-r--r--src/backend/nodes/value.c4
-rw-r--r--src/backend/optimizer/Makefile2
-rw-r--r--src/backend/optimizer/README45
-rw-r--r--src/backend/optimizer/geqo/Makefile2
-rw-r--r--src/backend/optimizer/geqo/geqo_copy.c4
-rw-r--r--src/backend/optimizer/geqo/geqo_cx.c2
-rw-r--r--src/backend/optimizer/geqo/geqo_erx.c2
-rw-r--r--src/backend/optimizer/geqo/geqo_eval.c4
-rw-r--r--src/backend/optimizer/geqo/geqo_main.c16
-rw-r--r--src/backend/optimizer/geqo/geqo_misc.c4
-rw-r--r--src/backend/optimizer/geqo/geqo_mutation.c2
-rw-r--r--src/backend/optimizer/geqo/geqo_ox1.c2
-rw-r--r--src/backend/optimizer/geqo/geqo_ox2.c2
-rw-r--r--src/backend/optimizer/geqo/geqo_pmx.c2
-rw-r--r--src/backend/optimizer/geqo/geqo_pool.c4
-rw-r--r--src/backend/optimizer/geqo/geqo_px.c2
-rw-r--r--src/backend/optimizer/geqo/geqo_random.c4
-rw-r--r--src/backend/optimizer/geqo/geqo_recombination.c2
-rw-r--r--src/backend/optimizer/geqo/geqo_selection.c4
-rw-r--r--src/backend/optimizer/path/Makefile2
-rw-r--r--src/backend/optimizer/path/allpaths.c264
-rw-r--r--src/backend/optimizer/path/clausesel.c4
-rw-r--r--src/backend/optimizer/path/costsize.c448
-rw-r--r--src/backend/optimizer/path/equivclass.c215
-rw-r--r--src/backend/optimizer/path/indxpath.c506
-rw-r--r--src/backend/optimizer/path/joinpath.c142
-rw-r--r--src/backend/optimizer/path/joinrels.c80
-rw-r--r--src/backend/optimizer/path/orindxpath.c4
-rw-r--r--src/backend/optimizer/path/pathkeys.c427
-rw-r--r--src/backend/optimizer/path/tidpath.c4
-rw-r--r--src/backend/optimizer/plan/Makefile2
-rw-r--r--src/backend/optimizer/plan/README44
-rw-r--r--src/backend/optimizer/plan/analyzejoins.c110
-rw-r--r--src/backend/optimizer/plan/createplan.c715
-rw-r--r--src/backend/optimizer/plan/initsplan.c93
-rw-r--r--src/backend/optimizer/plan/planagg.c818
-rw-r--r--src/backend/optimizer/plan/planmain.c92
-rw-r--r--src/backend/optimizer/plan/planner.c277
-rw-r--r--src/backend/optimizer/plan/setrefs.c308
-rw-r--r--src/backend/optimizer/plan/subselect.c323
-rw-r--r--src/backend/optimizer/prep/Makefile2
-rw-r--r--src/backend/optimizer/prep/prepjointree.c187
-rw-r--r--src/backend/optimizer/prep/prepqual.c383
-rw-r--r--src/backend/optimizer/prep/preptlist.c92
-rw-r--r--src/backend/optimizer/prep/prepunion.c170
-rw-r--r--src/backend/optimizer/util/Makefile2
-rw-r--r--src/backend/optimizer/util/clauses.c520
-rw-r--r--src/backend/optimizer/util/joininfo.c38
-rw-r--r--src/backend/optimizer/util/pathnode.c178
-rw-r--r--src/backend/optimizer/util/placeholder.c242
-rw-r--r--src/backend/optimizer/util/plancat.c238
-rw-r--r--src/backend/optimizer/util/predtest.c29
-rw-r--r--src/backend/optimizer/util/relnode.c4
-rw-r--r--src/backend/optimizer/util/restrictinfo.c4
-rw-r--r--src/backend/optimizer/util/tlist.c46
-rw-r--r--src/backend/optimizer/util/var.c7
-rw-r--r--src/backend/parser/.cvsignore3
-rw-r--r--src/backend/parser/.gitignore3
-rw-r--r--src/backend/parser/Makefile8
-rw-r--r--src/backend/parser/README3
-rw-r--r--src/backend/parser/analyze.c492
-rw-r--r--src/backend/parser/gram.y1633
-rw-r--r--src/backend/parser/keywords.c4
-rw-r--r--src/backend/parser/kwlookup.c4
-rw-r--r--src/backend/parser/parse_agg.c74
-rw-r--r--src/backend/parser/parse_clause.c63
-rw-r--r--src/backend/parser/parse_coerce.c176
-rw-r--r--src/backend/parser/parse_collate.c773
-rw-r--r--src/backend/parser/parse_cte.c112
-rw-r--r--src/backend/parser/parse_expr.c298
-rw-r--r--src/backend/parser/parse_func.c51
-rw-r--r--src/backend/parser/parse_node.c64
-rw-r--r--src/backend/parser/parse_oper.c81
-rw-r--r--src/backend/parser/parse_param.c14
-rw-r--r--src/backend/parser/parse_relation.c102
-rw-r--r--src/backend/parser/parse_target.c197
-rw-r--r--src/backend/parser/parse_type.c115
-rw-r--r--src/backend/parser/parse_utilcmd.c542
-rw-r--r--src/backend/parser/parser.c4
-rw-r--r--src/backend/parser/scan.l12
-rw-r--r--src/backend/parser/scansup.c4
-rw-r--r--src/backend/pgxc/plan/planner.c7
-rw-r--r--src/backend/pgxc/pool/poolutils.c7
-rw-r--r--src/backend/pgxc/pool/postgresql_fdw.c4
-rw-r--r--src/backend/po/de.po20152
-rw-r--r--src/backend/po/es.po18769
-rw-r--r--src/backend/po/fr.po17210
-rw-r--r--src/backend/po/ja.po21406
-rw-r--r--src/backend/po/pt_BR.po24388
-rw-r--r--src/backend/po/zh_CN.po17232
-rw-r--r--src/backend/po/zh_TW.po22318
-rw-r--r--src/backend/port/.gitignore5
-rw-r--r--src/backend/port/Makefile14
-rwxr-xr-xsrc/backend/port/aix/mkldexport.sh6
-rw-r--r--src/backend/port/darwin/Makefile2
-rw-r--r--src/backend/port/darwin/README4
-rw-r--r--src/backend/port/darwin/system.c2
-rw-r--r--src/backend/port/dynloader/aix.c2
-rw-r--r--src/backend/port/dynloader/aix.h4
-rw-r--r--src/backend/port/dynloader/bsdi.c4
-rw-r--r--src/backend/port/dynloader/bsdi.h4
-rw-r--r--src/backend/port/dynloader/cygwin.c2
-rw-r--r--src/backend/port/dynloader/cygwin.h4
-rw-r--r--src/backend/port/dynloader/darwin.c4
-rw-r--r--src/backend/port/dynloader/darwin.h2
-rw-r--r--src/backend/port/dynloader/dgux.c2
-rw-r--r--src/backend/port/dynloader/dgux.h4
-rw-r--r--src/backend/port/dynloader/freebsd.c15
-rw-r--r--src/backend/port/dynloader/freebsd.h4
-rw-r--r--src/backend/port/dynloader/hpux.c4
-rw-r--r--src/backend/port/dynloader/hpux.h4
-rw-r--r--src/backend/port/dynloader/irix.c2
-rw-r--r--src/backend/port/dynloader/irix.h4
-rw-r--r--src/backend/port/dynloader/linux.c4
-rw-r--r--src/backend/port/dynloader/linux.h4
-rw-r--r--src/backend/port/dynloader/netbsd.c9
-rw-r--r--src/backend/port/dynloader/netbsd.h4
-rw-r--r--src/backend/port/dynloader/nextstep.c2
-rw-r--r--src/backend/port/dynloader/nextstep.h2
-rw-r--r--src/backend/port/dynloader/openbsd.c16
-rw-r--r--src/backend/port/dynloader/openbsd.h4
-rw-r--r--src/backend/port/dynloader/osf.c2
-rw-r--r--src/backend/port/dynloader/osf.h4
-rw-r--r--src/backend/port/dynloader/sco.c2
-rw-r--r--src/backend/port/dynloader/sco.h4
-rw-r--r--src/backend/port/dynloader/solaris.c2
-rw-r--r--src/backend/port/dynloader/solaris.h4
-rw-r--r--src/backend/port/dynloader/sunos4.c2
-rw-r--r--src/backend/port/dynloader/sunos4.h4
-rw-r--r--src/backend/port/dynloader/svr4.c2
-rw-r--r--src/backend/port/dynloader/svr4.h4
-rw-r--r--src/backend/port/dynloader/ultrix4.c4
-rw-r--r--src/backend/port/dynloader/ultrix4.h4
-rw-r--r--src/backend/port/dynloader/univel.c2
-rw-r--r--src/backend/port/dynloader/univel.h4
-rw-r--r--src/backend/port/dynloader/unixware.c2
-rw-r--r--src/backend/port/dynloader/unixware.h4
-rw-r--r--src/backend/port/dynloader/win32.c2
-rw-r--r--src/backend/port/dynloader/win32.h2
-rw-r--r--src/backend/port/ipc_test.c8
-rw-r--r--src/backend/port/nextstep/Makefile2
-rw-r--r--src/backend/port/nextstep/port.c2
-rw-r--r--src/backend/port/pipe.c (renamed from src/port/pipe.c)12
-rw-r--r--src/backend/port/posix_sema.c4
-rw-r--r--src/backend/port/sysv_sema.c12
-rw-r--r--src/backend/port/sysv_shmem.c50
-rw-r--r--src/backend/port/tas/sunstudio_sparc.s8
-rw-r--r--src/backend/port/tas/sunstudio_x86.s4
-rw-r--r--src/backend/port/unix_latch.c432
-rw-r--r--src/backend/port/win32/Makefile5
-rw-r--r--src/backend/port/win32/crashdump.c170
-rw-r--r--src/backend/port/win32/mingwcompat.c4
-rw-r--r--src/backend/port/win32/security.c10
-rw-r--r--src/backend/port/win32/signal.c4
-rw-r--r--src/backend/port/win32/socket.c31
-rw-r--r--src/backend/port/win32/timer.c6
-rw-r--r--src/backend/port/win32_latch.c216
-rw-r--r--src/backend/port/win32_sema.c4
-rw-r--r--src/backend/port/win32_shmem.c4
-rw-r--r--src/backend/postmaster/Makefile2
-rw-r--r--src/backend/postmaster/autovacuum.c118
-rw-r--r--src/backend/postmaster/bgwriter.c166
-rw-r--r--src/backend/postmaster/fork_process.c4
-rw-r--r--src/backend/postmaster/pgarch.c4
-rw-r--r--src/backend/postmaster/pgstat.c222
-rw-r--r--src/backend/postmaster/postmaster.c239
-rw-r--r--src/backend/postmaster/syslogger.c111
-rw-r--r--src/backend/postmaster/walwriter.c4
-rw-r--r--src/backend/regex/Makefile5
-rw-r--r--src/backend/regex/regc_color.c2
-rw-r--r--src/backend/regex/regc_cvec.c2
-rw-r--r--src/backend/regex/regc_lex.c4
-rw-r--r--src/backend/regex/regc_locale.c167
-rw-r--r--src/backend/regex/regc_nfa.c2
-rw-r--r--src/backend/regex/regc_pg_locale.c658
-rw-r--r--src/backend/regex/regcomp.c20
-rw-r--r--src/backend/regex/rege_dfa.c2
-rw-r--r--src/backend/regex/regerror.c2
-rw-r--r--src/backend/regex/regexec.c7
-rw-r--r--src/backend/regex/regfree.c2
-rw-r--r--src/backend/replication/.gitignore3
-rw-r--r--src/backend/replication/Makefile27
-rw-r--r--src/backend/replication/README33
-rw-r--r--src/backend/replication/basebackup.c866
-rw-r--r--src/backend/replication/libpqwalreceiver/Makefile5
-rw-r--r--src/backend/replication/libpqwalreceiver/libpqwalreceiver.c69
-rw-r--r--src/backend/replication/repl_gram.y169
-rw-r--r--src/backend/replication/repl_scanner.l171
-rw-r--r--src/backend/replication/syncrep.c675
-rw-r--r--src/backend/replication/walreceiver.c191
-rw-r--r--src/backend/replication/walreceiverfuncs.c17
-rw-r--r--src/backend/replication/walsender.c986
-rw-r--r--src/backend/rewrite/Makefile2
-rw-r--r--src/backend/rewrite/rewriteDefine.c47
-rw-r--r--src/backend/rewrite/rewriteHandler.c412
-rw-r--r--src/backend/rewrite/rewriteManip.c12
-rw-r--r--src/backend/rewrite/rewriteRemove.c4
-rw-r--r--src/backend/rewrite/rewriteSupport.c88
-rw-r--r--src/backend/snowball/.gitignore1
-rw-r--r--src/backend/snowball/Makefile4
-rw-r--r--src/backend/snowball/README2
-rw-r--r--src/backend/snowball/dict_snowball.c4
-rw-r--r--src/backend/snowball/snowball.sql.in3
-rw-r--r--src/backend/snowball/snowball_func.sql.in3
-rw-r--r--src/backend/snowball/stopwords/english.stop1
-rw-r--r--src/backend/storage/Makefile2
-rw-r--r--src/backend/storage/buffer/Makefile2
-rw-r--r--src/backend/storage/buffer/README4
-rw-r--r--src/backend/storage/buffer/buf_init.c4
-rw-r--r--src/backend/storage/buffer/buf_table.c4
-rw-r--r--src/backend/storage/buffer/bufmgr.c211
-rw-r--r--src/backend/storage/buffer/freelist.c6
-rw-r--r--src/backend/storage/buffer/localbuf.c58
-rw-r--r--src/backend/storage/file/Makefile4
-rw-r--r--src/backend/storage/file/buffile.c4
-rw-r--r--src/backend/storage/file/copydir.c10
-rw-r--r--src/backend/storage/file/fd.c287
-rw-r--r--src/backend/storage/file/reinit.c400
-rw-r--r--src/backend/storage/freespace/Makefile2
-rw-r--r--src/backend/storage/freespace/README5
-rw-r--r--src/backend/storage/freespace/freespace.c8
-rw-r--r--src/backend/storage/freespace/fsmpage.c4
-rw-r--r--src/backend/storage/freespace/indexfsm.c4
-rw-r--r--src/backend/storage/ipc/Makefile2
-rw-r--r--src/backend/storage/ipc/README4
-rw-r--r--src/backend/storage/ipc/ipc.c8
-rw-r--r--src/backend/storage/ipc/ipci.c11
-rw-r--r--src/backend/storage/ipc/pmsignal.c55
-rw-r--r--src/backend/storage/ipc/procarray.c285
-rw-r--r--src/backend/storage/ipc/procsignal.c9
-rw-r--r--src/backend/storage/ipc/shmem.c6
-rw-r--r--src/backend/storage/ipc/shmqueue.c33
-rw-r--r--src/backend/storage/ipc/sinval.c4
-rw-r--r--src/backend/storage/ipc/sinvaladt.c4
-rw-r--r--src/backend/storage/ipc/standby.c115
-rw-r--r--src/backend/storage/large_object/Makefile2
-rw-r--r--src/backend/storage/large_object/inv_api.c30
-rw-r--r--src/backend/storage/lmgr/Makefile6
-rw-r--r--src/backend/storage/lmgr/README21
-rw-r--r--src/backend/storage/lmgr/README-SSI585
-rw-r--r--src/backend/storage/lmgr/deadlock.c4
-rw-r--r--src/backend/storage/lmgr/lmgr.c7
-rw-r--r--src/backend/storage/lmgr/lock.c137
-rw-r--r--src/backend/storage/lmgr/lwlock.c8
-rw-r--r--src/backend/storage/lmgr/predicate.c4768
-rw-r--r--src/backend/storage/lmgr/proc.c29
-rw-r--r--src/backend/storage/lmgr/s_lock.c4
-rw-r--r--src/backend/storage/lmgr/spin.c4
-rw-r--r--src/backend/storage/page/Makefile2
-rw-r--r--src/backend/storage/page/bufpage.c4
-rw-r--r--src/backend/storage/page/itemptr.c4
-rw-r--r--src/backend/storage/smgr/Makefile2
-rw-r--r--src/backend/storage/smgr/README2
-rw-r--r--src/backend/storage/smgr/md.c154
-rw-r--r--src/backend/storage/smgr/smgr.c86
-rw-r--r--src/backend/storage/smgr/smgrtype.c4
-rw-r--r--src/backend/tcop/Makefile2
-rw-r--r--src/backend/tcop/dest.c4
-rw-r--r--src/backend/tcop/fastpath.c21
-rw-r--r--src/backend/tcop/postgres.c193
-rw-r--r--src/backend/tcop/pquery.c114
-rw-r--r--src/backend/tcop/utility.c430
-rw-r--r--src/backend/tsearch/Makefile4
-rw-r--r--src/backend/tsearch/dict.c4
-rw-r--r--src/backend/tsearch/dict_ispell.c9
-rw-r--r--src/backend/tsearch/dict_simple.c4
-rw-r--r--src/backend/tsearch/dict_synonym.c4
-rw-r--r--src/backend/tsearch/dict_thesaurus.c6
-rw-r--r--src/backend/tsearch/regis.c8
-rw-r--r--src/backend/tsearch/spell.c173
-rw-r--r--src/backend/tsearch/thesaurus_sample.ths1
-rw-r--r--src/backend/tsearch/to_tsany.c4
-rw-r--r--src/backend/tsearch/ts_locale.c40
-rw-r--r--src/backend/tsearch/ts_parse.c4
-rw-r--r--src/backend/tsearch/ts_selfuncs.c193
-rw-r--r--src/backend/tsearch/ts_typanalyze.c4
-rw-r--r--src/backend/tsearch/ts_utils.c4
-rw-r--r--src/backend/tsearch/wparser.c10
-rw-r--r--src/backend/tsearch/wparser_def.c763
-rw-r--r--src/backend/utils/.cvsignore2
-rw-r--r--src/backend/utils/.gitignore4
-rw-r--r--src/backend/utils/Gen_dummy_probes.sed4
-rw-r--r--src/backend/utils/Gen_fmgrtab.pl10
-rw-r--r--src/backend/utils/Makefile11
-rw-r--r--src/backend/utils/adt/Makefile4
-rw-r--r--src/backend/utils/adt/acl.c141
-rw-r--r--src/backend/utils/adt/array_userfuncs.c11
-rw-r--r--src/backend/utils/adt/arrayfuncs.c482
-rw-r--r--src/backend/utils/adt/arrayutils.c6
-rw-r--r--src/backend/utils/adt/ascii.c4
-rw-r--r--src/backend/utils/adt/bool.c4
-rw-r--r--src/backend/utils/adt/cash.c161
-rw-r--r--src/backend/utils/adt/char.c4
-rw-r--r--src/backend/utils/adt/date.c39
-rw-r--r--src/backend/utils/adt/datetime.c162
-rw-r--r--src/backend/utils/adt/datum.c4
-rw-r--r--src/backend/utils/adt/dbsize.c101
-rw-r--r--src/backend/utils/adt/domains.c4
-rw-r--r--src/backend/utils/adt/encode.c4
-rw-r--r--src/backend/utils/adt/enum.c263
-rw-r--r--src/backend/utils/adt/float.c4
-rw-r--r--src/backend/utils/adt/format_type.c30
-rw-r--r--src/backend/utils/adt/formatting.c389
-rw-r--r--src/backend/utils/adt/genfile.c209
-rw-r--r--src/backend/utils/adt/geo_ops.c89
-rw-r--r--src/backend/utils/adt/geo_selfuncs.c4
-rw-r--r--src/backend/utils/adt/inet_cidr_ntop.c (renamed from src/backend/utils/adt/inet_net_ntop.c)237
-rw-r--r--src/backend/utils/adt/inet_net_pton.c2
-rw-r--r--src/backend/utils/adt/int.c28
-rw-r--r--src/backend/utils/adt/int8.c29
-rw-r--r--src/backend/utils/adt/like.c102
-rw-r--r--src/backend/utils/adt/like_match.c16
-rw-r--r--src/backend/utils/adt/lockfuncs.c240
-rw-r--r--src/backend/utils/adt/mac.c2
-rw-r--r--src/backend/utils/adt/misc.c4
-rw-r--r--src/backend/utils/adt/nabstime.c33
-rw-r--r--src/backend/utils/adt/name.c4
-rw-r--r--src/backend/utils/adt/network.c62
-rw-r--r--src/backend/utils/adt/numeric.c281
-rw-r--r--src/backend/utils/adt/numutils.c124
-rw-r--r--src/backend/utils/adt/oid.c7
-rw-r--r--src/backend/utils/adt/oracle_compat.c13
-rw-r--r--src/backend/utils/adt/pg_locale.c660
-rw-r--r--src/backend/utils/adt/pg_lzcompress.c4
-rw-r--r--src/backend/utils/adt/pgstatfuncs.c457
-rw-r--r--src/backend/utils/adt/pseudotypes.c114
-rw-r--r--src/backend/utils/adt/quote.c79
-rw-r--r--src/backend/utils/adt/regexp.c46
-rw-r--r--src/backend/utils/adt/regproc.c8
-rw-r--r--src/backend/utils/adt/ri_triggers.c126
-rw-r--r--src/backend/utils/adt/rowtypes.c26
-rw-r--r--src/backend/utils/adt/ruleutils.c841
-rw-r--r--src/backend/utils/adt/selfuncs.c863
-rw-r--r--src/backend/utils/adt/tid.c4
-rw-r--r--src/backend/utils/adt/timestamp.c8
-rw-r--r--src/backend/utils/adt/trigfuncs.c4
-rw-r--r--src/backend/utils/adt/tsginidx.c118
-rw-r--r--src/backend/utils/adt/tsgistidx.c4
-rw-r--r--src/backend/utils/adt/tsquery.c8
-rw-r--r--src/backend/utils/adt/tsquery_cleanup.c4
-rw-r--r--src/backend/utils/adt/tsquery_gist.c4
-rw-r--r--src/backend/utils/adt/tsquery_op.c20
-rw-r--r--src/backend/utils/adt/tsquery_rewrite.c4
-rw-r--r--src/backend/utils/adt/tsquery_util.c17
-rw-r--r--src/backend/utils/adt/tsrank.c10
-rw-r--r--src/backend/utils/adt/tsvector.c4
-rw-r--r--src/backend/utils/adt/tsvector_op.c88
-rw-r--r--src/backend/utils/adt/tsvector_parser.c4
-rw-r--r--src/backend/utils/adt/txid.c4
-rw-r--r--src/backend/utils/adt/uuid.c4
-rw-r--r--src/backend/utils/adt/varbit.c65
-rw-r--r--src/backend/utils/adt/varchar.c31
-rw-r--r--src/backend/utils/adt/varlena.c863
-rw-r--r--src/backend/utils/adt/version.c4
-rw-r--r--src/backend/utils/adt/windowfuncs.c4
-rw-r--r--src/backend/utils/adt/xid.c4
-rw-r--r--src/backend/utils/adt/xml.c275
-rw-r--r--src/backend/utils/cache/Makefile2
-rw-r--r--src/backend/utils/cache/attoptcache.c4
-rw-r--r--src/backend/utils/cache/catcache.c15
-rw-r--r--src/backend/utils/cache/inval.c23
-rw-r--r--src/backend/utils/cache/lsyscache.c296
-rw-r--r--src/backend/utils/cache/plancache.c9
-rw-r--r--src/backend/utils/cache/relcache.c288
-rw-r--r--src/backend/utils/cache/relmapper.c4
-rw-r--r--src/backend/utils/cache/spccache.c4
-rw-r--r--src/backend/utils/cache/syscache.c45
-rw-r--r--src/backend/utils/cache/ts_cache.c40
-rw-r--r--src/backend/utils/cache/typcache.c784
-rw-r--r--src/backend/utils/errcodes.txt455
-rw-r--r--src/backend/utils/error/Makefile2
-rw-r--r--src/backend/utils/error/assert.c4
-rw-r--r--src/backend/utils/error/elog.c147
-rw-r--r--src/backend/utils/fmgr/Makefile2
-rw-r--r--src/backend/utils/fmgr/README20
-rw-r--r--src/backend/utils/fmgr/dfmgr.c8
-rw-r--r--src/backend/utils/fmgr/fmgr.c251
-rw-r--r--src/backend/utils/fmgr/funcapi.c25
-rw-r--r--src/backend/utils/generate-errcodes.pl41
-rw-r--r--src/backend/utils/hash/Makefile2
-rw-r--r--src/backend/utils/hash/dynahash.c10
-rw-r--r--src/backend/utils/hash/hashfn.c4
-rw-r--r--src/backend/utils/hash/pg_crc.c4
-rw-r--r--src/backend/utils/init/Makefile2
-rw-r--r--src/backend/utils/init/globals.c12
-rw-r--r--src/backend/utils/init/miscinit.c148
-rw-r--r--src/backend/utils/init/postinit.c196
-rw-r--r--src/backend/utils/mb/Makefile2
-rw-r--r--src/backend/utils/mb/README2
-rw-r--r--src/backend/utils/mb/Unicode/ISO10646-GB18030.TXT1
-rw-r--r--src/backend/utils/mb/Unicode/Makefile4
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_BIG5.pl5
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_EUC_CN.pl6
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_EUC_JIS_2004.pl14
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_EUC_JP.pl6
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_EUC_KR.pl6
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_EUC_TW.pl6
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_GB18030.pl4
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_SHIFT_JIS_2004.pl12
-rwxr-xr-xsrc/backend/utils/mb/Unicode/UCS_to_SJIS.pl6
-rw-r--r--src/backend/utils/mb/Unicode/UCS_to_most.pl4
-rw-r--r--src/backend/utils/mb/Unicode/euc_cn_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/euc_jp_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/euc_tw_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/gb18030_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/gbk_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/iso8859_10_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/iso8859_13_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/iso8859_14_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/iso8859_15_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/iso8859_16_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/iso8859_2_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/iso8859_3_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/iso8859_4_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/iso8859_5_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/iso8859_6_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/iso8859_7_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/iso8859_8_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/iso8859_9_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/koi8r_to_utf8.map2
-rw-r--r--src/backend/utils/mb/Unicode/ucs2utf.pl8
-rw-r--r--src/backend/utils/mb/conv.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/.gitignore1
-rw-r--r--src/backend/utils/mb/conversion_procs/Makefile9
-rw-r--r--src/backend/utils/mb/conversion_procs/ascii_and_mic/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/ascii_and_mic/ascii_and_mic.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/cyrillic_and_mic/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/cyrillic_and_mic/cyrillic_and_mic.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/euc2004_sjis2004/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/euc2004_sjis2004/euc2004_sjis2004.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_cn_and_mic/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_cn_and_mic/euc_cn_and_mic.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_jp_and_sjis/euc_jp_and_sjis.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_kr_and_mic/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_kr_and_mic/euc_kr_and_mic.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_tw_and_big5/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_tw_and_big5/big5.c2
-rw-r--r--src/backend/utils/mb/conversion_procs/euc_tw_and_big5/euc_tw_and_big5.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/latin2_and_win1250/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/latin2_and_win1250/latin2_and_win1250.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/latin_and_mic/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/latin_and_mic/latin_and_mic.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_ascii/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_ascii/utf8_and_ascii.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_big5/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_big5/utf8_and_big5.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_cyrillic/utf8_and_cyrillic.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc2004/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc2004/utf8_and_euc2004.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_cn/utf8_and_euc_cn.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_jp/utf8_and_euc_jp.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_kr/utf8_and_euc_kr.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_euc_tw/utf8_and_euc_tw.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_gb18030/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_gb18030/utf8_and_gb18030.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_gbk/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_gbk/utf8_and_gbk.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_iso8859/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_iso8859/utf8_and_iso8859.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_iso8859_1/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_iso8859_1/utf8_and_iso8859_1.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_johab/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_johab/utf8_and_johab.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_sjis/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_sjis/utf8_and_sjis.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_sjis2004/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_sjis2004/utf8_and_sjis2004.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_uhc/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_uhc/utf8_and_uhc.c4
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_win/Makefile2
-rw-r--r--src/backend/utils/mb/conversion_procs/utf8_and_win/utf8_and_win.c4
-rw-r--r--src/backend/utils/mb/encnames.c2
-rw-r--r--src/backend/utils/mb/iso.c2
-rw-r--r--src/backend/utils/mb/mbutils.c357
-rw-r--r--src/backend/utils/mb/wchar.c20
-rw-r--r--src/backend/utils/mb/win1251.c2
-rw-r--r--src/backend/utils/mb/win866.c2
-rw-r--r--src/backend/utils/mb/wstrcmp.c2
-rw-r--r--src/backend/utils/mb/wstrncmp.c2
-rw-r--r--src/backend/utils/misc/.cvsignore1
-rw-r--r--src/backend/utils/misc/.gitignore1
-rw-r--r--src/backend/utils/misc/Makefile4
-rw-r--r--src/backend/utils/misc/README205
-rwxr-xr-xsrc/backend/utils/misc/check_guc24
-rw-r--r--src/backend/utils/misc/guc-file.l219
-rw-r--r--src/backend/utils/misc/guc.c2640
-rw-r--r--src/backend/utils/misc/help_config.c4
-rw-r--r--src/backend/utils/misc/pg_rusage.c4
-rw-r--r--src/backend/utils/misc/postgresql.conf.sample63
-rw-r--r--src/backend/utils/misc/ps_status.c6
-rw-r--r--src/backend/utils/misc/rbtree.c464
-rw-r--r--src/backend/utils/misc/superuser.c4
-rw-r--r--src/backend/utils/misc/tzparser.c156
-rw-r--r--src/backend/utils/mmgr/Makefile2
-rw-r--r--src/backend/utils/mmgr/README4
-rw-r--r--src/backend/utils/mmgr/aset.c66
-rw-r--r--src/backend/utils/mmgr/mcxt.c23
-rw-r--r--src/backend/utils/mmgr/portalmem.c222
-rw-r--r--src/backend/utils/probes.d16
-rw-r--r--src/backend/utils/resowner/Makefile2
-rw-r--r--src/backend/utils/resowner/README2
-rw-r--r--src/backend/utils/resowner/resowner.c10
-rw-r--r--src/backend/utils/sort/Makefile2
-rw-r--r--src/backend/utils/sort/logtape.c4
-rw-r--r--src/backend/utils/sort/tuplesort.c419
-rw-r--r--src/backend/utils/sort/tuplestore.c56
-rw-r--r--src/backend/utils/time/Makefile2
-rw-r--r--src/backend/utils/time/combocid.c4
-rw-r--r--src/backend/utils/time/snapmgr.c86
-rw-r--r--src/backend/utils/time/tqual.c24
-rw-r--r--src/bcc32.mak10
-rw-r--r--src/bin/Makefile9
-rw-r--r--src/bin/initdb/.gitignore4
-rw-r--r--src/bin/initdb/Makefile8
-rw-r--r--src/bin/initdb/initdb.c548
-rw-r--r--src/bin/initdb/nls.mk4
-rw-r--r--src/bin/initdb/po/cs.po4
-rw-r--r--src/bin/initdb/po/de.po319
-rw-r--r--src/bin/initdb/po/es.po294
-rw-r--r--src/bin/initdb/po/fr.po6
-rw-r--r--src/bin/initdb/po/it.po22
-rw-r--r--src/bin/initdb/po/ja.po301
-rw-r--r--src/bin/initdb/po/ko.po809
-rw-r--r--src/bin/initdb/po/pt_BR.po4
-rw-r--r--src/bin/initdb/po/ro.po845
-rw-r--r--src/bin/initdb/po/ru.po748
-rw-r--r--src/bin/initdb/po/sv.po295
-rw-r--r--src/bin/initdb/po/tr.po346
-rw-r--r--src/bin/initdb/po/zh_CN.po636
-rw-r--r--src/bin/initdb/po/zh_TW.po875
-rw-r--r--src/bin/pg_basebackup/.gitignore1
-rw-r--r--src/bin/pg_basebackup/Makefile38
-rw-r--r--src/bin/pg_basebackup/nls.mk5
-rw-r--r--src/bin/pg_basebackup/pg_basebackup.c1124
-rw-r--r--src/bin/pg_basebackup/po/de.po365
-rw-r--r--src/bin/pg_basebackup/po/es.po353
-rw-r--r--src/bin/pg_config/.gitignore1
-rw-r--r--src/bin/pg_config/Makefile8
-rw-r--r--src/bin/pg_config/nls.mk4
-rw-r--r--src/bin/pg_config/pg_config.c4
-rw-r--r--src/bin/pg_config/po/es.po111
-rw-r--r--src/bin/pg_config/po/fr.po108
-rw-r--r--src/bin/pg_config/po/ja.po112
-rw-r--r--src/bin/pg_config/po/ko.po126
-rw-r--r--src/bin/pg_config/po/pt_BR.po77
-rw-r--r--src/bin/pg_config/po/ro.po219
-rw-r--r--src/bin/pg_config/po/ru.po274
-rw-r--r--src/bin/pg_config/po/sv.po102
-rw-r--r--src/bin/pg_config/po/ta.po2
-rw-r--r--src/bin/pg_config/po/tr.po105
-rw-r--r--src/bin/pg_config/po/zh_CN.po246
-rw-r--r--src/bin/pg_config/po/zh_TW.po304
-rw-r--r--src/bin/pg_controldata/.gitignore3
-rw-r--r--src/bin/pg_controldata/Makefile8
-rw-r--r--src/bin/pg_controldata/nls.mk4
-rw-r--r--src/bin/pg_controldata/pg_controldata.c2
-rw-r--r--src/bin/pg_controldata/po/es.po110
-rw-r--r--src/bin/pg_controldata/po/fr.po2
-rw-r--r--src/bin/pg_controldata/po/ja.po151
-rw-r--r--src/bin/pg_controldata/po/ko.po139
-rw-r--r--src/bin/pg_controldata/po/pt_BR.po9
-rw-r--r--src/bin/pg_controldata/po/ro.po341
-rw-r--r--src/bin/pg_controldata/po/ru.po365
-rw-r--r--src/bin/pg_controldata/po/tr.po155
-rw-r--r--src/bin/pg_controldata/po/zh_CN.po283
-rw-r--r--src/bin/pg_controldata/po/zh_TW.po338
-rw-r--r--src/bin/pg_ctl/.gitignore1
-rw-r--r--src/bin/pg_ctl/Makefile8
-rw-r--r--src/bin/pg_ctl/nls.mk4
-rw-r--r--src/bin/pg_ctl/pg_ctl.c568
-rw-r--r--src/bin/pg_ctl/po/de.po399
-rw-r--r--src/bin/pg_ctl/po/fr.po2
-rw-r--r--src/bin/pg_ctl/po/ja.po267
-rw-r--r--src/bin/pg_ctl/po/ru.po628
-rw-r--r--src/bin/pg_ctl/po/tr.po299
-rw-r--r--src/bin/pg_ctl/po/zh_CN.po533
-rw-r--r--src/bin/pg_ctl/po/zh_TW.po771
-rw-r--r--src/bin/pg_dump/.gitignore5
-rw-r--r--src/bin/pg_dump/Makefile14
-rw-r--r--src/bin/pg_dump/README8
-rw-r--r--src/bin/pg_dump/common.c92
-rw-r--r--src/bin/pg_dump/compress_io.c684
-rw-r--r--src/bin/pg_dump/compress_io.h70
-rw-r--r--src/bin/pg_dump/dumputils.c13
-rw-r--r--src/bin/pg_dump/dumputils.h6
-rw-r--r--src/bin/pg_dump/keywords.c4
-rw-r--r--src/bin/pg_dump/nls.mk4
-rw-r--r--src/bin/pg_dump/pg_backup.h10
-rw-r--r--src/bin/pg_dump/pg_backup_archiver.c352
-rw-r--r--src/bin/pg_dump/pg_backup_archiver.h27
-rw-r--r--src/bin/pg_dump/pg_backup_custom.c438
-rw-r--r--src/bin/pg_dump/pg_backup_db.c2
-rw-r--r--src/bin/pg_dump/pg_backup_db.h2
-rw-r--r--src/bin/pg_dump/pg_backup_directory.c683
-rw-r--r--src/bin/pg_dump/pg_backup_files.c2
-rw-r--r--src/bin/pg_dump/pg_backup_null.c2
-rw-r--r--src/bin/pg_dump/pg_backup_tar.c10
-rw-r--r--src/bin/pg_dump/pg_backup_tar.h2
-rw-r--r--src/bin/pg_dump/pg_dump.c2670
-rw-r--r--src/bin/pg_dump/pg_dump.h35
-rw-r--r--src/bin/pg_dump/pg_dump_sort.c80
-rw-r--r--src/bin/pg_dump/pg_dumpall.c144
-rw-r--r--src/bin/pg_dump/pg_restore.c59
-rw-r--r--src/bin/pg_dump/po/de.po985
-rw-r--r--src/bin/pg_dump/po/es.po883
-rw-r--r--src/bin/pg_dump/po/fr.po38
-rw-r--r--src/bin/pg_dump/po/it.po6
-rw-r--r--src/bin/pg_dump/po/ja.po953
-rw-r--r--src/bin/pg_dump/po/ko.po2147
-rw-r--r--src/bin/pg_dump/po/pt_BR.po744
-rw-r--r--src/bin/pg_dump/po/tr.po1155
-rw-r--r--src/bin/pg_dump/po/zh_CN.po2141
-rw-r--r--src/bin/pg_dump/po/zh_TW.po2213
-rw-r--r--src/bin/pg_resetxlog/.gitignore3
-rw-r--r--src/bin/pg_resetxlog/Makefile8
-rw-r--r--src/bin/pg_resetxlog/nls.mk4
-rw-r--r--src/bin/pg_resetxlog/pg_resetxlog.c4
-rw-r--r--src/bin/pg_resetxlog/po/es.po165
-rw-r--r--src/bin/pg_resetxlog/po/fr.po2
-rw-r--r--src/bin/pg_resetxlog/po/ja.po176
-rw-r--r--src/bin/pg_resetxlog/po/ko.po227
-rw-r--r--src/bin/pg_resetxlog/po/pt_BR.po7
-rw-r--r--src/bin/pg_resetxlog/po/ro.po420
-rw-r--r--src/bin/pg_resetxlog/po/ru.po2
-rw-r--r--src/bin/pg_resetxlog/po/tr.po215
-rw-r--r--src/bin/pg_resetxlog/po/zh_CN.po354
-rw-r--r--src/bin/pg_resetxlog/po/zh_TW.po475
-rw-r--r--src/bin/pgevent/Makefile4
-rw-r--r--src/bin/pgevent/README2
-rw-r--r--src/bin/pgevent/pgevent.c2
-rw-r--r--src/bin/pgevent/pgmsgevent.h2
-rw-r--r--src/bin/psql/.cvsignore3
-rw-r--r--src/bin/psql/.gitignore8
-rw-r--r--src/bin/psql/Makefile8
-rw-r--r--src/bin/psql/command.c415
-rw-r--r--src/bin/psql/command.h4
-rw-r--r--src/bin/psql/common.c23
-rw-r--r--src/bin/psql/common.h6
-rw-r--r--src/bin/psql/copy.c4
-rw-r--r--src/bin/psql/copy.h4
-rw-r--r--src/bin/psql/create_help.pl4
-rw-r--r--src/bin/psql/describe.c801
-rw-r--r--src/bin/psql/describe.h20
-rw-r--r--src/bin/psql/help.c92
-rw-r--r--src/bin/psql/help.h4
-rw-r--r--src/bin/psql/input.c4
-rw-r--r--src/bin/psql/input.h4
-rw-r--r--src/bin/psql/large_obj.c6
-rw-r--r--src/bin/psql/large_obj.h4
-rw-r--r--src/bin/psql/mainloop.c4
-rw-r--r--src/bin/psql/mainloop.h4
-rw-r--r--src/bin/psql/mbprint.c28
-rw-r--r--src/bin/psql/mbprint.h2
-rw-r--r--src/bin/psql/nls.mk4
-rw-r--r--src/bin/psql/po/cs.po2
-rw-r--r--src/bin/psql/po/de.po2291
-rw-r--r--src/bin/psql/po/es.po1625
-rw-r--r--src/bin/psql/po/fr.po1198
-rw-r--r--src/bin/psql/po/ja.po1649
-rw-r--r--src/bin/psql/po/pt_BR.po4399
-rw-r--r--src/bin/psql/po/zh_CN.po4343
-rw-r--r--src/bin/psql/po/zh_TW.po5626
-rw-r--r--src/bin/psql/print.c8
-rw-r--r--src/bin/psql/print.h4
-rw-r--r--src/bin/psql/prompt.c4
-rw-r--r--src/bin/psql/prompt.h4
-rw-r--r--src/bin/psql/psqlscan.h4
-rw-r--r--src/bin/psql/psqlscan.l56
-rw-r--r--src/bin/psql/settings.h4
-rw-r--r--src/bin/psql/startup.c18
-rw-r--r--src/bin/psql/stringutils.c4
-rw-r--r--src/bin/psql/stringutils.h4
-rw-r--r--src/bin/psql/tab-complete.c712
-rw-r--r--src/bin/psql/tab-complete.h4
-rw-r--r--src/bin/psql/variables.c4
-rw-r--r--src/bin/psql/variables.h4
-rw-r--r--src/bin/scripts/.gitignore15
-rw-r--r--src/bin/scripts/Makefile24
-rw-r--r--src/bin/scripts/clusterdb.c4
-rw-r--r--src/bin/scripts/common.c4
-rw-r--r--src/bin/scripts/common.h4
-rw-r--r--src/bin/scripts/createdb.c15
-rw-r--r--src/bin/scripts/createlang.c14
-rw-r--r--src/bin/scripts/createuser.c4
-rw-r--r--src/bin/scripts/dropdb.c8
-rw-r--r--src/bin/scripts/droplang.c166
-rw-r--r--src/bin/scripts/dropuser.c4
-rw-r--r--src/bin/scripts/nls.mk4
-rw-r--r--src/bin/scripts/po/cs.po2
-rw-r--r--src/bin/scripts/po/fr.po2
-rw-r--r--src/bin/scripts/po/ja.po448
-rw-r--r--src/bin/scripts/po/ko.po565
-rw-r--r--src/bin/scripts/po/ro.po905
-rw-r--r--src/bin/scripts/po/tr.po160
-rw-r--r--src/bin/scripts/po/zh_CN.po672
-rw-r--r--src/bin/scripts/po/zh_TW.po954
-rw-r--r--src/bin/scripts/reindexdb.c4
-rw-r--r--src/bin/scripts/vacuumdb.c4
-rw-r--r--src/include/.gitignore5
-rw-r--r--src/include/Makefile8
-rw-r--r--src/include/access/attnum.h4
-rw-r--r--src/include/access/clog.h4
-rw-r--r--src/include/access/genam.h14
-rw-r--r--src/include/access/gin.h594
-rw-r--r--src/include/access/gin_private.h722
-rw-r--r--src/include/access/gist.h25
-rw-r--r--src/include/access/gist_private.h211
-rw-r--r--src/include/access/gistscan.h4
-rw-r--r--src/include/access/hash.h13
-rw-r--r--src/include/access/heapam.h8
-rw-r--r--src/include/access/hio.h8
-rw-r--r--src/include/access/htup.h27
-rw-r--r--src/include/access/itup.h6
-rw-r--r--src/include/access/multixact.h4
-rw-r--r--src/include/access/nbtree.h5
-rw-r--r--src/include/access/printtup.h4
-rw-r--r--src/include/access/reloptions.h4
-rw-r--r--src/include/access/relscan.h17
-rw-r--r--src/include/access/rewriteheap.h6
-rw-r--r--src/include/access/rmgr.h2
-rw-r--r--src/include/access/sdir.h4
-rw-r--r--src/include/access/skey.h30
-rw-r--r--src/include/access/slru.h9
-rw-r--r--src/include/access/subtrans.h4
-rw-r--r--src/include/access/sysattr.h4
-rw-r--r--src/include/access/transam.h4
-rw-r--r--src/include/access/tupconvert.h4
-rw-r--r--src/include/access/tupdesc.h10
-rw-r--r--src/include/access/tupmacs.h4
-rw-r--r--src/include/access/tuptoaster.h4
-rw-r--r--src/include/access/twophase.h4
-rw-r--r--src/include/access/twophase_rmgr.h9
-rw-r--r--src/include/access/valid.h9
-rw-r--r--src/include/access/visibilitymap.h4
-rw-r--r--src/include/access/xact.h35
-rw-r--r--src/include/access/xlog.h34
-rw-r--r--src/include/access/xlog_internal.h23
-rw-r--r--src/include/access/xlogdefs.h23
-rw-r--r--src/include/access/xlogutils.h4
-rw-r--r--src/include/bootstrap/bootstrap.h4
-rw-r--r--src/include/c.h8
-rw-r--r--src/include/catalog/.gitignore1
-rw-r--r--src/include/catalog/catalog.h19
-rw-r--r--src/include/catalog/catversion.h8
-rw-r--r--src/include/catalog/dependency.h36
-rwxr-xr-xsrc/include/catalog/duplicate_oids9
-rw-r--r--src/include/catalog/genbki.h7
-rw-r--r--src/include/catalog/heap.h10
-rw-r--r--src/include/catalog/index.h33
-rw-r--r--src/include/catalog/indexing.h26
-rw-r--r--src/include/catalog/namespace.h22
-rw-r--r--src/include/catalog/objectaccess.h46
-rw-r--r--src/include/catalog/objectaddress.h37
-rw-r--r--src/include/catalog/pg_aggregate.h18
-rw-r--r--src/include/catalog/pg_am.h66
-rw-r--r--src/include/catalog/pg_amop.h751
-rw-r--r--src/include/catalog/pg_amproc.h6
-rw-r--r--src/include/catalog/pg_attrdef.h12
-rw-r--r--src/include/catalog/pg_attribute.h18
-rw-r--r--src/include/catalog/pg_auth_members.h4
-rw-r--r--src/include/catalog/pg_authid.h16
-rw-r--r--src/include/catalog/pg_cast.h11
-rw-r--r--src/include/catalog/pg_class.h46
-rw-r--r--src/include/catalog/pg_collation.h76
-rw-r--r--src/include/catalog/pg_collation_fn.h23
-rw-r--r--src/include/catalog/pg_constraint.h53
-rw-r--r--src/include/catalog/pg_control.h9
-rw-r--r--src/include/catalog/pg_conversion.h4
-rw-r--r--src/include/catalog/pg_conversion_fn.h4
-rw-r--r--src/include/catalog/pg_database.h6
-rw-r--r--src/include/catalog/pg_db_role_setting.h4
-rw-r--r--src/include/catalog/pg_default_acl.h4
-rw-r--r--src/include/catalog/pg_depend.h4
-rw-r--r--src/include/catalog/pg_description.h4
-rw-r--r--src/include/catalog/pg_enum.h15
-rw-r--r--src/include/catalog/pg_extension.h74
-rw-r--r--src/include/catalog/pg_foreign_data_wrapper.h16
-rw-r--r--src/include/catalog/pg_foreign_server.h4
-rw-r--r--src/include/catalog/pg_foreign_table.h53
-rw-r--r--src/include/catalog/pg_index.h34
-rw-r--r--src/include/catalog/pg_inherits.h4
-rw-r--r--src/include/catalog/pg_inherits_fn.h4
-rw-r--r--src/include/catalog/pg_language.h4
-rw-r--r--src/include/catalog/pg_largeobject.h4
-rw-r--r--[-rwxr-xr-x]src/include/catalog/pg_largeobject_metadata.h4
-rw-r--r--src/include/catalog/pg_namespace.h4
-rw-r--r--src/include/catalog/pg_opclass.h5
-rw-r--r--src/include/catalog/pg_operator.h726
-rw-r--r--src/include/catalog/pg_opfamily.h5
-rw-r--r--src/include/catalog/pg_pltemplate.h12
-rw-r--r--src/include/catalog/pg_proc.h1282
-rw-r--r--src/include/catalog/pg_proc_fn.h4
-rw-r--r--src/include/catalog/pg_rewrite.h8
-rw-r--r--src/include/catalog/pg_seclabel.h43
-rw-r--r--src/include/catalog/pg_shdepend.h4
-rw-r--r--src/include/catalog/pg_shdescription.h4
-rw-r--r--src/include/catalog/pg_statistic.h6
-rw-r--r--src/include/catalog/pg_tablespace.h4
-rw-r--r--src/include/catalog/pg_trigger.h37
-rw-r--r--src/include/catalog/pg_ts_config.h4
-rw-r--r--src/include/catalog/pg_ts_config_map.h4
-rw-r--r--src/include/catalog/pg_ts_dict.h4
-rw-r--r--src/include/catalog/pg_ts_parser.h4
-rw-r--r--src/include/catalog/pg_ts_template.h4
-rw-r--r--src/include/catalog/pg_type.h296
-rw-r--r--src/include/catalog/pg_type_fn.h8
-rw-r--r--src/include/catalog/pg_user_mapping.h4
-rw-r--r--src/include/catalog/storage.h11
-rw-r--r--src/include/catalog/toasting.h5
-rwxr-xr-xsrc/include/catalog/unused_oids2
-rw-r--r--src/include/commands/alter.h11
-rw-r--r--src/include/commands/async.h4
-rw-r--r--src/include/commands/cluster.h8
-rw-r--r--src/include/commands/collationcmds.h28
-rw-r--r--src/include/commands/comment.h4
-rw-r--r--src/include/commands/conversioncmds.h6
-rw-r--r--src/include/commands/copy.h18
-rw-r--r--src/include/commands/dbcommands.h12
-rw-r--r--src/include/commands/defrem.h28
-rw-r--r--src/include/commands/discard.h4
-rw-r--r--src/include/commands/explain.h15
-rw-r--r--src/include/commands/extension.h49
-rw-r--r--src/include/commands/lockcmds.h4
-rw-r--r--src/include/commands/portalcmds.h4
-rw-r--r--src/include/commands/prepare.h4
-rw-r--r--src/include/commands/proclang.h3
-rw-r--r--src/include/commands/schemacmds.h4
-rw-r--r--src/include/commands/seclabel.h35
-rw-r--r--src/include/commands/sequence.h8
-rw-r--r--src/include/commands/tablecmds.h23
-rw-r--r--src/include/commands/tablespace.h8
-rw-r--r--src/include/commands/trigger.h71
-rw-r--r--src/include/commands/typecmds.h8
-rw-r--r--src/include/commands/user.h2
-rw-r--r--src/include/commands/vacuum.h33
-rw-r--r--src/include/commands/variable.h39
-rw-r--r--src/include/commands/view.h4
-rw-r--r--src/include/executor/execdebug.h4
-rw-r--r--src/include/executor/execdefs.h33
-rw-r--r--src/include/executor/execdesc.h4
-rw-r--r--src/include/executor/executor.h38
-rw-r--r--src/include/executor/functions.h13
-rw-r--r--src/include/executor/hashjoin.h11
-rw-r--r--src/include/executor/instrument.h4
-rw-r--r--src/include/executor/nodeAgg.h6
-rw-r--r--src/include/executor/nodeAppend.h6
-rw-r--r--src/include/executor/nodeBitmapAnd.h6
-rw-r--r--src/include/executor/nodeBitmapHeapscan.h6
-rw-r--r--src/include/executor/nodeBitmapIndexscan.h6
-rw-r--r--src/include/executor/nodeBitmapOr.h6
-rw-r--r--src/include/executor/nodeCtescan.h6
-rw-r--r--src/include/executor/nodeForeignscan.h24
-rw-r--r--src/include/executor/nodeFunctionscan.h6
-rw-r--r--src/include/executor/nodeGroup.h6
-rw-r--r--src/include/executor/nodeHash.h16
-rw-r--r--src/include/executor/nodeHashjoin.h6
-rw-r--r--src/include/executor/nodeIndexscan.h10
-rw-r--r--src/include/executor/nodeLimit.h6
-rw-r--r--src/include/executor/nodeLockRows.h6
-rw-r--r--src/include/executor/nodeMaterial.h6
-rw-r--r--src/include/executor/nodeMergeAppend.h24
-rw-r--r--src/include/executor/nodeMergejoin.h6
-rw-r--r--src/include/executor/nodeModifyTable.h6
-rw-r--r--src/include/executor/nodeNestloop.h6
-rw-r--r--src/include/executor/nodeRecursiveunion.h6
-rw-r--r--src/include/executor/nodeResult.h6
-rw-r--r--src/include/executor/nodeSeqscan.h6
-rw-r--r--src/include/executor/nodeSetOp.h6
-rw-r--r--src/include/executor/nodeSort.h6
-rw-r--r--src/include/executor/nodeSubplan.h4
-rw-r--r--src/include/executor/nodeSubqueryscan.h6
-rw-r--r--src/include/executor/nodeTidscan.h6
-rw-r--r--src/include/executor/nodeUnique.h6
-rw-r--r--src/include/executor/nodeValuesscan.h6
-rw-r--r--src/include/executor/nodeWindowAgg.h6
-rw-r--r--src/include/executor/nodeWorktablescan.h6
-rw-r--r--src/include/executor/spi.h4
-rw-r--r--src/include/executor/spi_priv.h4
-rw-r--r--src/include/executor/tstoreReceiver.h4
-rw-r--r--src/include/executor/tuptable.h4
-rw-r--r--src/include/fmgr.h264
-rw-r--r--src/include/foreign/fdwapi.h98
-rw-r--r--src/include/foreign/foreign.h20
-rw-r--r--src/include/funcapi.h4
-rw-r--r--src/include/getaddrinfo.h4
-rw-r--r--src/include/getopt_long.h5
-rw-r--r--src/include/lib/dllist.h4
-rw-r--r--src/include/lib/stringinfo.h6
-rw-r--r--src/include/libpq/auth.h8
-rw-r--r--src/include/libpq/be-fsstubs.h4
-rw-r--r--src/include/libpq/crypt.h4
-rw-r--r--src/include/libpq/hba.h9
-rw-r--r--src/include/libpq/ip.h4
-rw-r--r--src/include/libpq/libpq-be.h12
-rw-r--r--src/include/libpq/libpq-fs.h4
-rw-r--r--src/include/libpq/libpq.h7
-rw-r--r--src/include/libpq/md5.h4
-rw-r--r--src/include/libpq/pqcomm.h4
-rw-r--r--src/include/libpq/pqformat.h4
-rw-r--r--src/include/libpq/pqsignal.h4
-rw-r--r--src/include/mb/pg_wchar.h17
-rw-r--r--src/include/miscadmin.h34
-rw-r--r--src/include/nodes/bitmapset.h4
-rw-r--r--src/include/nodes/execnodes.h163
-rw-r--r--src/include/nodes/makefuncs.h21
-rw-r--r--src/include/nodes/memnodes.h5
-rw-r--r--src/include/nodes/nodeFuncs.h14
-rw-r--r--src/include/nodes/nodes.h26
-rw-r--r--src/include/nodes/params.h6
-rw-r--r--src/include/nodes/parsenodes.h194
-rw-r--r--src/include/nodes/pg_list.h13
-rw-r--r--src/include/nodes/plannodes.h110
-rw-r--r--src/include/nodes/primnodes.h90
-rw-r--r--src/include/nodes/print.h4
-rw-r--r--src/include/nodes/readfuncs.h4
-rw-r--r--src/include/nodes/relation.h178
-rw-r--r--src/include/nodes/tidbitmap.h4
-rw-r--r--src/include/nodes/value.h4
-rw-r--r--src/include/optimizer/clauses.h17
-rw-r--r--src/include/optimizer/cost.h20
-rw-r--r--src/include/optimizer/geqo.h4
-rw-r--r--src/include/optimizer/geqo_copy.h4
-rw-r--r--src/include/optimizer/geqo_gene.h4
-rw-r--r--src/include/optimizer/geqo_misc.h4
-rw-r--r--src/include/optimizer/geqo_mutation.h4
-rw-r--r--src/include/optimizer/geqo_pool.h4
-rw-r--r--src/include/optimizer/geqo_random.h4
-rw-r--r--src/include/optimizer/geqo_recombination.h4
-rw-r--r--src/include/optimizer/geqo_selection.h4
-rw-r--r--src/include/optimizer/joininfo.h7
-rw-r--r--src/include/optimizer/pathnode.h10
-rw-r--r--src/include/optimizer/paths.h35
-rw-r--r--src/include/optimizer/placeholder.h9
-rw-r--r--src/include/optimizer/plancat.h6
-rw-r--r--src/include/optimizer/planmain.h20
-rw-r--r--src/include/optimizer/planner.h6
-rw-r--r--src/include/optimizer/predtest.h4
-rw-r--r--src/include/optimizer/prep.h6
-rw-r--r--src/include/optimizer/restrictinfo.h4
-rw-r--r--src/include/optimizer/subselect.h7
-rw-r--r--src/include/optimizer/tlist.h5
-rw-r--r--src/include/optimizer/var.h4
-rw-r--r--src/include/parser/.gitignore1
-rw-r--r--src/include/parser/analyze.h4
-rw-r--r--src/include/parser/gramparse.h4
-rw-r--r--src/include/parser/keywords.h4
-rw-r--r--src/include/parser/kwlist.h28
-rw-r--r--src/include/parser/parse_agg.h5
-rw-r--r--src/include/parser/parse_clause.h4
-rw-r--r--src/include/parser/parse_coerce.h4
-rw-r--r--src/include/parser/parse_collate.h27
-rw-r--r--src/include/parser/parse_cte.h4
-rw-r--r--src/include/parser/parse_expr.h4
-rw-r--r--src/include/parser/parse_func.h6
-rw-r--r--src/include/parser/parse_node.h9
-rw-r--r--src/include/parser/parse_oper.h7
-rw-r--r--src/include/parser/parse_param.h4
-rw-r--r--src/include/parser/parse_relation.h8
-rw-r--r--src/include/parser/parse_target.h4
-rw-r--r--src/include/parser/parse_type.h15
-rw-r--r--src/include/parser/parse_utilcmd.h4
-rw-r--r--src/include/parser/parser.h6
-rw-r--r--src/include/parser/parsetree.h6
-rw-r--r--src/include/parser/scanner.h4
-rw-r--r--src/include/parser/scansup.h4
-rw-r--r--src/include/pg_config.h.in24
-rw-r--r--src/include/pg_config.h.win3235
-rw-r--r--src/include/pg_config_manual.h21
-rw-r--r--src/include/pg_trace.h4
-rw-r--r--src/include/pgstat.h63
-rw-r--r--src/include/pgtime.h4
-rw-r--r--src/include/port.h63
-rw-r--r--src/include/port/aix.h2
-rw-r--r--src/include/port/bsdi.h2
-rw-r--r--src/include/port/cygwin.h4
-rw-r--r--src/include/port/darwin.h2
-rw-r--r--src/include/port/dgux.h2
-rw-r--r--src/include/port/freebsd.h2
-rw-r--r--src/include/port/hpux.h2
-rw-r--r--src/include/port/irix.h2
-rw-r--r--src/include/port/linux.h10
-rw-r--r--src/include/port/netbsd.h2
-rw-r--r--src/include/port/nextstep.h2
-rw-r--r--src/include/port/openbsd.h2
-rw-r--r--src/include/port/osf.h2
-rw-r--r--src/include/port/sco.h2
-rw-r--r--src/include/port/solaris.h2
-rw-r--r--src/include/port/sunos4.h2
-rw-r--r--src/include/port/svr4.h2
-rw-r--r--src/include/port/ultrix4.h2
-rw-r--r--src/include/port/univel.h2
-rw-r--r--src/include/port/unixware.h2
-rw-r--r--src/include/port/win32.h106
-rw-r--r--src/include/port/win32/arpa/inet.h2
-rw-r--r--src/include/port/win32/dlfcn.h2
-rw-r--r--src/include/port/win32/grp.h2
-rw-r--r--src/include/port/win32/netdb.h2
-rw-r--r--src/include/port/win32/netinet/in.h2
-rw-r--r--src/include/port/win32/pwd.h2
-rw-r--r--src/include/port/win32/sys/socket.h3
-rw-r--r--src/include/port/win32/sys/wait.h2
-rw-r--r--src/include/port/win32_msvc/dirent.h2
-rw-r--r--src/include/port/win32_msvc/sys/file.h2
-rw-r--r--src/include/port/win32_msvc/sys/param.h2
-rw-r--r--src/include/port/win32_msvc/sys/time.h2
-rw-r--r--src/include/port/win32_msvc/unistd.h2
-rw-r--r--src/include/port/win32_msvc/utime.h2
-rw-r--r--src/include/portability/instr_time.h4
-rw-r--r--src/include/postgres.h4
-rw-r--r--src/include/postgres_ext.h2
-rw-r--r--src/include/postgres_fe.h4
-rw-r--r--src/include/postmaster/autovacuum.h4
-rw-r--r--src/include/postmaster/bgwriter.h6
-rw-r--r--src/include/postmaster/fork_process.h4
-rw-r--r--src/include/postmaster/pgarch.h4
-rw-r--r--src/include/postmaster/postmaster.h5
-rw-r--r--src/include/postmaster/syslogger.h5
-rw-r--r--src/include/postmaster/walwriter.h4
-rw-r--r--src/include/regex/regcustom.h2
-rw-r--r--src/include/regex/regerrs.h2
-rw-r--r--src/include/regex/regex.h6
-rw-r--r--src/include/regex/regguts.h2
-rw-r--r--src/include/replication/basebackup.h19
-rw-r--r--src/include/replication/replnodes.h62
-rw-r--r--src/include/replication/syncrep.h50
-rw-r--r--src/include/replication/walprotocol.h45
-rw-r--r--src/include/replication/walreceiver.h27
-rw-r--r--src/include/replication/walsender.h82
-rw-r--r--src/include/rewrite/prs2lock.h4
-rw-r--r--src/include/rewrite/rewriteDefine.h4
-rw-r--r--src/include/rewrite/rewriteHandler.h4
-rw-r--r--src/include/rewrite/rewriteManip.h4
-rw-r--r--src/include/rewrite/rewriteRemove.h4
-rw-r--r--src/include/rewrite/rewriteSupport.h7
-rw-r--r--src/include/rusagestub.h4
-rw-r--r--src/include/snowball/header.h4
-rw-r--r--src/include/storage/backendid.h6
-rw-r--r--src/include/storage/block.h4
-rw-r--r--src/include/storage/buf.h4
-rw-r--r--src/include/storage/buf_internals.h6
-rw-r--r--src/include/storage/buffile.h4
-rw-r--r--src/include/storage/bufmgr.h16
-rw-r--r--src/include/storage/bufpage.h4
-rw-r--r--src/include/storage/copydir.h19
-rw-r--r--src/include/storage/fd.h5
-rw-r--r--src/include/storage/freespace.h4
-rw-r--r--src/include/storage/fsm_internals.h4
-rw-r--r--src/include/storage/indexfsm.h4
-rw-r--r--src/include/storage/ipc.h4
-rw-r--r--src/include/storage/item.h4
-rw-r--r--src/include/storage/itemid.h4
-rw-r--r--src/include/storage/itemptr.h4
-rw-r--r--src/include/storage/large_object.h4
-rw-r--r--src/include/storage/latch.h59
-rw-r--r--src/include/storage/lmgr.h4
-rw-r--r--src/include/storage/lock.h5
-rw-r--r--src/include/storage/lwlock.h16
-rw-r--r--src/include/storage/off.h4
-rw-r--r--src/include/storage/pg_sema.h4
-rw-r--r--src/include/storage/pg_shmem.h4
-rw-r--r--src/include/storage/pmsignal.h7
-rw-r--r--src/include/storage/pos.h4
-rw-r--r--src/include/storage/predicate.h70
-rw-r--r--src/include/storage/predicate_internals.h473
-rw-r--r--src/include/storage/proc.h18
-rw-r--r--src/include/storage/procarray.h7
-rw-r--r--src/include/storage/procsignal.h4
-rw-r--r--src/include/storage/reinit.h23
-rw-r--r--src/include/storage/relfilenode.h38
-rw-r--r--src/include/storage/s_lock.h6
-rw-r--r--src/include/storage/shmem.h16
-rw-r--r--src/include/storage/sinval.h22
-rw-r--r--src/include/storage/sinvaladt.h4
-rw-r--r--src/include/storage/smgr.h36
-rw-r--r--src/include/storage/spin.h4
-rw-r--r--src/include/storage/standby.h5
-rw-r--r--src/include/tcop/dest.h4
-rw-r--r--src/include/tcop/fastpath.h4
-rw-r--r--src/include/tcop/pquery.h4
-rw-r--r--src/include/tcop/tcopdebug.h4
-rw-r--r--src/include/tcop/tcopprot.h9
-rw-r--r--src/include/tcop/utility.h4
-rw-r--r--src/include/tsearch/dicts/regis.h4
-rw-r--r--src/include/tsearch/dicts/spell.h30
-rw-r--r--src/include/tsearch/ts_cache.h7
-rw-r--r--src/include/tsearch/ts_locale.h4
-rw-r--r--src/include/tsearch/ts_public.h4
-rw-r--r--src/include/tsearch/ts_type.h4
-rw-r--r--src/include/tsearch/ts_utils.h9
-rw-r--r--src/include/utils/.gitignore3
-rw-r--r--src/include/utils/acl.h11
-rw-r--r--src/include/utils/array.h14
-rw-r--r--src/include/utils/ascii.h4
-rw-r--r--src/include/utils/attoptcache.h4
-rw-r--r--src/include/utils/builtins.h71
-rw-r--r--src/include/utils/bytea.h6
-rw-r--r--src/include/utils/cash.h9
-rw-r--r--src/include/utils/catcache.h4
-rw-r--r--src/include/utils/combocid.h4
-rw-r--r--src/include/utils/date.h6
-rw-r--r--src/include/utils/datetime.h20
-rw-r--r--src/include/utils/datum.h4
-rw-r--r--src/include/utils/dynahash.h4
-rw-r--r--src/include/utils/dynamic_loader.h4
-rw-r--r--src/include/utils/elog.h40
-rw-r--r--src/include/utils/errcodes.h356
-rw-r--r--src/include/utils/fmgrtab.h4
-rw-r--r--src/include/utils/formatting.h11
-rw-r--r--src/include/utils/geo_decls.h8
-rw-r--r--src/include/utils/guc.h102
-rw-r--r--src/include/utils/guc_tables.h39
-rw-r--r--src/include/utils/help_config.h4
-rw-r--r--src/include/utils/hsearch.h5
-rw-r--r--src/include/utils/inet.h4
-rw-r--r--src/include/utils/int8.h4
-rw-r--r--src/include/utils/inval.h6
-rw-r--r--src/include/utils/logtape.h4
-rw-r--r--src/include/utils/lsyscache.h23
-rw-r--r--src/include/utils/memutils.h8
-rw-r--r--src/include/utils/nabstime.h4
-rw-r--r--src/include/utils/numeric.h44
-rw-r--r--src/include/utils/palloc.h4
-rw-r--r--src/include/utils/pg_crc.h4
-rw-r--r--src/include/utils/pg_locale.h51
-rw-r--r--src/include/utils/pg_lzcompress.h2
-rw-r--r--src/include/utils/pg_rusage.h4
-rw-r--r--src/include/utils/plancache.h4
-rw-r--r--src/include/utils/portal.h17
-rw-r--r--src/include/utils/ps_status.h2
-rw-r--r--src/include/utils/rbtree.h68
-rw-r--r--src/include/utils/rel.h87
-rw-r--r--src/include/utils/relcache.h7
-rw-r--r--src/include/utils/relmapper.h4
-rw-r--r--src/include/utils/resowner.h4
-rw-r--r--src/include/utils/selfuncs.h8
-rw-r--r--src/include/utils/snapmgr.h7
-rw-r--r--src/include/utils/snapshot.h4
-rw-r--r--src/include/utils/spccache.h4
-rw-r--r--src/include/utils/syscache.h7
-rw-r--r--src/include/utils/timestamp.h4
-rw-r--r--src/include/utils/tqual.h4
-rw-r--r--src/include/utils/tuplesort.h54
-rw-r--r--src/include/utils/tuplestore.h4
-rw-r--r--src/include/utils/typcache.h45
-rw-r--r--src/include/utils/tzparser.h8
-rw-r--r--src/include/utils/uuid.h4
-rw-r--r--src/include/utils/varbit.h10
-rw-r--r--src/include/utils/xml.h13
-rw-r--r--src/include/windowapi.h4
-rw-r--r--src/interfaces/Makefile8
-rw-r--r--src/interfaces/ecpg/Makefile19
-rw-r--r--src/interfaces/ecpg/README.dynSQL5
-rw-r--r--src/interfaces/ecpg/compatlib/.cvsignore3
-rw-r--r--src/interfaces/ecpg/compatlib/.gitignore5
-rw-r--r--src/interfaces/ecpg/compatlib/Makefile15
-rw-r--r--src/interfaces/ecpg/compatlib/exports.txt2
-rw-r--r--src/interfaces/ecpg/compatlib/informix.c15
-rw-r--r--src/interfaces/ecpg/ecpglib/.cvsignore3
-rw-r--r--src/interfaces/ecpg/ecpglib/.gitignore10
-rw-r--r--src/interfaces/ecpg/ecpglib/Makefile15
-rw-r--r--src/interfaces/ecpg/ecpglib/connect.c15
-rw-r--r--src/interfaces/ecpg/ecpglib/data.c2
-rw-r--r--src/interfaces/ecpg/ecpglib/descriptor.c25
-rw-r--r--src/interfaces/ecpg/ecpglib/error.c2
-rw-r--r--src/interfaces/ecpg/ecpglib/execute.c5
-rw-r--r--src/interfaces/ecpg/ecpglib/exports.txt2
-rw-r--r--src/interfaces/ecpg/ecpglib/extern.h5
-rw-r--r--src/interfaces/ecpg/ecpglib/memory.c3
-rw-r--r--src/interfaces/ecpg/ecpglib/misc.c9
-rw-r--r--src/interfaces/ecpg/ecpglib/nls.mk2
-rw-r--r--src/interfaces/ecpg/ecpglib/pg_type.h4
-rw-r--r--src/interfaces/ecpg/ecpglib/po/fr.po2
-rw-r--r--src/interfaces/ecpg/ecpglib/po/ja.po128
-rw-r--r--src/interfaces/ecpg/ecpglib/po/tr.po120
-rw-r--r--src/interfaces/ecpg/ecpglib/po/zh_CN.po22
-rw-r--r--src/interfaces/ecpg/ecpglib/prepare.c12
-rw-r--r--src/interfaces/ecpg/ecpglib/sqlda.c7
-rw-r--r--src/interfaces/ecpg/ecpglib/typename.c2
-rw-r--r--src/interfaces/ecpg/include/.gitignore2
-rw-r--r--src/interfaces/ecpg/include/datetime.h2
-rw-r--r--src/interfaces/ecpg/include/decimal.h2
-rw-r--r--src/interfaces/ecpg/include/ecpg-pthread-win32.h2
-rw-r--r--src/interfaces/ecpg/include/ecpg_config.h.in1
-rw-r--r--src/interfaces/ecpg/include/ecpg_informix.h2
-rw-r--r--src/interfaces/ecpg/include/ecpgerrno.h2
-rw-r--r--src/interfaces/ecpg/include/ecpglib.h4
-rw-r--r--src/interfaces/ecpg/include/ecpgtype.h2
-rw-r--r--src/interfaces/ecpg/include/pgtypes_date.h2
-rw-r--r--src/interfaces/ecpg/include/pgtypes_error.h2
-rw-r--r--src/interfaces/ecpg/include/pgtypes_interval.h2
-rw-r--r--src/interfaces/ecpg/include/pgtypes_timestamp.h2
-rw-r--r--src/interfaces/ecpg/include/sqlda-native.h2
-rw-r--r--src/interfaces/ecpg/pgtypeslib/.cvsignore3
-rw-r--r--src/interfaces/ecpg/pgtypeslib/.gitignore7
-rw-r--r--src/interfaces/ecpg/pgtypeslib/Makefile6
-rw-r--r--src/interfaces/ecpg/pgtypeslib/common.c2
-rw-r--r--src/interfaces/ecpg/pgtypeslib/datetime.c2
-rw-r--r--src/interfaces/ecpg/pgtypeslib/dt.h2
-rw-r--r--src/interfaces/ecpg/pgtypeslib/dt_common.c33
-rw-r--r--src/interfaces/ecpg/pgtypeslib/exports.txt2
-rw-r--r--src/interfaces/ecpg/pgtypeslib/extern.h2
-rw-r--r--src/interfaces/ecpg/pgtypeslib/interval.c4
-rw-r--r--src/interfaces/ecpg/pgtypeslib/numeric.c9
-rw-r--r--src/interfaces/ecpg/pgtypeslib/timestamp.c44
-rw-r--r--src/interfaces/ecpg/preproc/.cvsignore4
-rw-r--r--src/interfaces/ecpg/preproc/.gitignore7
-rw-r--r--src/interfaces/ecpg/preproc/Makefile17
-rw-r--r--src/interfaces/ecpg/preproc/README.parser5
-rw-r--r--src/interfaces/ecpg/preproc/c_keywords.c2
-rw-r--r--[-rwxr-xr-x]src/interfaces/ecpg/preproc/check_rules.pl205
-rw-r--r--src/interfaces/ecpg/preproc/descriptor.c6
-rw-r--r--src/interfaces/ecpg/preproc/ecpg.addons108
-rw-r--r--src/interfaces/ecpg/preproc/ecpg.c12
-rw-r--r--src/interfaces/ecpg/preproc/ecpg.header46
-rw-r--r--src/interfaces/ecpg/preproc/ecpg.tokens7
-rw-r--r--src/interfaces/ecpg/preproc/ecpg.trailer597
-rw-r--r--src/interfaces/ecpg/preproc/ecpg.type5
-rw-r--r--src/interfaces/ecpg/preproc/ecpg_keywords.c2
-rw-r--r--src/interfaces/ecpg/preproc/extern.h17
-rw-r--r--src/interfaces/ecpg/preproc/keywords.c4
-rw-r--r--src/interfaces/ecpg/preproc/nls.mk4
-rw-r--r--src/interfaces/ecpg/preproc/output.c2
-rw-r--r--src/interfaces/ecpg/preproc/parse.pl24
-rw-r--r--src/interfaces/ecpg/preproc/parse2.pl648
-rw-r--r--src/interfaces/ecpg/preproc/parser.c4
-rw-r--r--src/interfaces/ecpg/preproc/pgc.l50
-rw-r--r--src/interfaces/ecpg/preproc/po/es.po264
-rw-r--r--src/interfaces/ecpg/preproc/po/ja.po262
-rw-r--r--src/interfaces/ecpg/preproc/po/ko.po592
-rw-r--r--src/interfaces/ecpg/preproc/po/pt_BR.po149
-rw-r--r--src/interfaces/ecpg/preproc/po/tr.po337
-rw-r--r--src/interfaces/ecpg/preproc/po/zh_CN.po342
-rw-r--r--src/interfaces/ecpg/preproc/po/zh_TW.po646
-rw-r--r--src/interfaces/ecpg/preproc/type.c22
-rw-r--r--src/interfaces/ecpg/preproc/type.h2
-rw-r--r--src/interfaces/ecpg/preproc/variable.c22
-rw-r--r--src/interfaces/ecpg/test/.gitignore5
-rw-r--r--src/interfaces/ecpg/test/Makefile22
-rw-r--r--src/interfaces/ecpg/test/Makefile.regress7
-rw-r--r--src/interfaces/ecpg/test/compat_informix/.gitignore18
-rw-r--r--src/interfaces/ecpg/test/compat_informix/dec_test.pgc4
-rw-r--r--src/interfaces/ecpg/test/compat_informix/describe.pgc2
-rw-r--r--src/interfaces/ecpg/test/compat_informix/sqlda.pgc2
-rw-r--r--src/interfaces/ecpg/test/compat_informix/test_informix.pgc3
-rw-r--r--src/interfaces/ecpg/test/compat_informix/test_informix2.pgc6
-rw-r--r--src/interfaces/ecpg/test/connect/.gitignore10
-rw-r--r--src/interfaces/ecpg/test/connect/Makefile1
-rw-r--r--src/interfaces/ecpg/test/connect/README2
-rw-r--r--src/interfaces/ecpg/test/ecpg_schedule_tcp1
-rw-r--r--[-rwxr-xr-x]src/interfaces/ecpg/test/expected/compat_informix-dec_test-MinGW32.stdout0
-rw-r--r--src/interfaces/ecpg/test/expected/compat_informix-dec_test.c4
-rw-r--r--src/interfaces/ecpg/test/expected/compat_informix-describe.c2
-rw-r--r--src/interfaces/ecpg/test/expected/compat_informix-sqlda.c2
-rw-r--r--src/interfaces/ecpg/test/expected/compat_informix-test_informix.c3
-rw-r--r--src/interfaces/ecpg/test/expected/compat_informix-test_informix2.c4
-rw-r--r--src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.c22
-rw-r--r--src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.stderr2
-rw-r--r--src/interfaces/ecpg/test/expected/pgtypeslib-dt_test2.c3
-rw-r--r--src/interfaces/ecpg/test/expected/pgtypeslib-nan_test.c10
-rw-r--r--src/interfaces/ecpg/test/expected/pgtypeslib-nan_test.stderr2
-rw-r--r--[-rwxr-xr-x]src/interfaces/ecpg/test/expected/pgtypeslib-num_test-MinGW32.stdout0
-rw-r--r--src/interfaces/ecpg/test/expected/pgtypeslib-num_test.c12
-rw-r--r--src/interfaces/ecpg/test/expected/pgtypeslib-num_test.stderr2
-rw-r--r--[-rwxr-xr-x]src/interfaces/ecpg/test/expected/pgtypeslib-num_test2-MinGW32.stdout0
-rw-r--r--src/interfaces/ecpg/test/expected/pgtypeslib-num_test2.c7
-rw-r--r--src/interfaces/ecpg/test/expected/preproc-array_of_struct.c4
-rw-r--r--src/interfaces/ecpg/test/expected/preproc-comment.c1
-rw-r--r--src/interfaces/ecpg/test/expected/preproc-cursor.c2
-rw-r--r--src/interfaces/ecpg/test/expected/preproc-init.c4
-rw-r--r--src/interfaces/ecpg/test/expected/preproc-outofscope.c27
-rw-r--r--src/interfaces/ecpg/test/expected/preproc-variable.c2
-rw-r--r--src/interfaces/ecpg/test/expected/preproc-whenever.c2
-rw-r--r--src/interfaces/ecpg/test/expected/sql-array.c6
-rw-r--r--src/interfaces/ecpg/test/expected/sql-code100.c10
-rw-r--r--src/interfaces/ecpg/test/expected/sql-describe.c2
-rw-r--r--src/interfaces/ecpg/test/expected/sql-dynalloc.c16
-rw-r--r--src/interfaces/ecpg/test/expected/sql-dynalloc2.c4
-rw-r--r--src/interfaces/ecpg/test/expected/sql-fetch.c2
-rw-r--r--src/interfaces/ecpg/test/expected/sql-fetch.stderr6
-rw-r--r--src/interfaces/ecpg/test/expected/sql-quote.c101
-rw-r--r--src/interfaces/ecpg/test/expected/sql-quote.stderr112
-rw-r--r--src/interfaces/ecpg/test/expected/sql-quote.stdout1
-rw-r--r--src/interfaces/ecpg/test/expected/sql-sqlda.c2
-rw-r--r--src/interfaces/ecpg/test/expected/thread-alloc.c1
-rw-r--r--src/interfaces/ecpg/test/expected/thread-prep.c1
-rw-r--r--src/interfaces/ecpg/test/pg_regress_ecpg.c4
-rw-r--r--src/interfaces/ecpg/test/pgtypeslib/.gitignore10
-rw-r--r--src/interfaces/ecpg/test/pgtypeslib/Makefile1
-rw-r--r--src/interfaces/ecpg/test/pgtypeslib/dt_test.pgc14
-rw-r--r--src/interfaces/ecpg/test/pgtypeslib/dt_test2.pgc3
-rw-r--r--src/interfaces/ecpg/test/pgtypeslib/nan_test.pgc2
-rw-r--r--src/interfaces/ecpg/test/pgtypeslib/num_test.pgc4
-rw-r--r--src/interfaces/ecpg/test/pgtypeslib/num_test2.pgc7
-rw-r--r--src/interfaces/ecpg/test/preproc/.gitignore22
-rw-r--r--src/interfaces/ecpg/test/preproc/array_of_struct.pgc2
-rw-r--r--src/interfaces/ecpg/test/preproc/comment.pgc1
-rw-r--r--src/interfaces/ecpg/test/preproc/cursor.pgc2
-rw-r--r--src/interfaces/ecpg/test/preproc/init.pgc4
-rw-r--r--src/interfaces/ecpg/test/preproc/outofscope.pgc2
-rw-r--r--src/interfaces/ecpg/test/preproc/struct.h1
-rw-r--r--src/interfaces/ecpg/test/preproc/variable.pgc2
-rw-r--r--src/interfaces/ecpg/test/preproc/whenever.pgc2
-rw-r--r--src/interfaces/ecpg/test/resultmap3
-rw-r--r--src/interfaces/ecpg/test/sql/.gitignore40
-rw-r--r--src/interfaces/ecpg/test/sql/Makefile3
-rw-r--r--src/interfaces/ecpg/test/sql/array.pgc6
-rw-r--r--src/interfaces/ecpg/test/sql/code100.pgc12
-rw-r--r--src/interfaces/ecpg/test/sql/describe.pgc2
-rw-r--r--src/interfaces/ecpg/test/sql/dynalloc.pgc16
-rw-r--r--src/interfaces/ecpg/test/sql/dynalloc2.pgc4
-rw-r--r--src/interfaces/ecpg/test/sql/fetch.pgc2
-rw-r--r--src/interfaces/ecpg/test/sql/quote.pgc5
-rw-r--r--src/interfaces/ecpg/test/sql/sqlda.pgc2
-rw-r--r--src/interfaces/ecpg/test/thread/.gitignore10
-rw-r--r--src/interfaces/ecpg/test/thread/Makefile1
-rw-r--r--src/interfaces/ecpg/test/thread/alloc.pgc1
-rw-r--r--src/interfaces/ecpg/test/thread/prep.pgc1
-rw-r--r--src/interfaces/libpq/.cvsignore4
-rw-r--r--src/interfaces/libpq/.gitignore22
-rw-r--r--src/interfaces/libpq/Makefile47
-rw-r--r--src/interfaces/libpq/README2
-rw-r--r--src/interfaces/libpq/bcc32.mak8
-rw-r--r--src/interfaces/libpq/exports.txt5
-rw-r--r--src/interfaces/libpq/fe-auth.c89
-rw-r--r--src/interfaces/libpq/fe-auth.h4
-rw-r--r--src/interfaces/libpq/fe-connect.c333
-rw-r--r--src/interfaces/libpq/fe-exec.c43
-rw-r--r--src/interfaces/libpq/fe-lobj.c4
-rw-r--r--src/interfaces/libpq/fe-misc.c12
-rw-r--r--src/interfaces/libpq/fe-print.c4
-rw-r--r--src/interfaces/libpq/fe-protocol2.c69
-rw-r--r--src/interfaces/libpq/fe-protocol3.c35
-rw-r--r--src/interfaces/libpq/fe-secure.c72
-rw-r--r--src/interfaces/libpq/libpq-events.c4
-rw-r--r--src/interfaces/libpq/libpq-events.h4
-rw-r--r--src/interfaces/libpq/libpq-fe.h21
-rw-r--r--src/interfaces/libpq/libpq-int.h23
-rw-r--r--src/interfaces/libpq/libpq.rc.in10
-rw-r--r--src/interfaces/libpq/nls.mk4
-rw-r--r--src/interfaces/libpq/pg_service.conf.sample4
-rw-r--r--src/interfaces/libpq/po/cs.po2
-rw-r--r--src/interfaces/libpq/po/de.po360
-rw-r--r--src/interfaces/libpq/po/es.po350
-rw-r--r--src/interfaces/libpq/po/fr.po284
-rw-r--r--src/interfaces/libpq/po/ja.po324
-rw-r--r--src/interfaces/libpq/po/ko.po437
-rw-r--r--src/interfaces/libpq/po/pt_BR.po222
-rw-r--r--src/interfaces/libpq/po/ru.po947
-rw-r--r--src/interfaces/libpq/po/sv.po218
-rw-r--r--src/interfaces/libpq/po/tr.po416
-rw-r--r--src/interfaces/libpq/po/zh_CN.po726
-rw-r--r--src/interfaces/libpq/po/zh_TW.po1075
-rw-r--r--src/interfaces/libpq/pqexpbuffer.c4
-rw-r--r--src/interfaces/libpq/pqexpbuffer.h8
-rw-r--r--src/interfaces/libpq/pqsignal.c9
-rw-r--r--src/interfaces/libpq/pqsignal.h6
-rw-r--r--src/interfaces/libpq/pthread-win32.c4
-rw-r--r--src/interfaces/libpq/win32.c4
-rw-r--r--src/interfaces/libpq/win32.h2
-rw-r--r--src/interfaces/libpq/win32.mak10
-rw-r--r--src/makefiles/Makefile2
-rw-r--r--src/makefiles/Makefile.cygwin2
-rw-r--r--src/makefiles/Makefile.darwin2
-rw-r--r--src/makefiles/Makefile.irix2
-rw-r--r--src/makefiles/Makefile.solaris2
-rw-r--r--src/makefiles/Makefile.win322
-rw-r--r--src/makefiles/pgxs.mk86
-rw-r--r--src/nls-global.mk14
-rw-r--r--src/pl/Makefile12
-rw-r--r--src/pl/plperl/.gitignore9
-rw-r--r--src/pl/plperl/GNUmakefile36
-rw-r--r--src/pl/plperl/README2
-rw-r--r--src/pl/plperl/SPI.xs72
-rw-r--r--src/pl/plperl/Util.xs113
-rw-r--r--src/pl/plperl/expected/plperl.out124
-rw-r--r--src/pl/plperl/expected/plperl_array.out222
-rw-r--r--src/pl/plperl/expected/plperl_plperlu.out2
-rw-r--r--src/pl/plperl/expected/plperl_shared.out19
-rw-r--r--src/pl/plperl/expected/plperl_trigger.out249
-rw-r--r--src/pl/plperl/expected/plperl_util.out18
-rw-r--r--src/pl/plperl/nls.mk4
-rw-r--r--src/pl/plperl/plc_perlboot.pl92
-rw-r--r--src/pl/plperl/plc_trusted.pl6
-rw-r--r--src/pl/plperl/plperl--1.0.sql9
-rw-r--r--src/pl/plperl/plperl--unpackaged--1.0.sql7
-rw-r--r--src/pl/plperl/plperl.c1528
-rw-r--r--src/pl/plperl/plperl.control7
-rw-r--r--src/pl/plperl/plperl.h53
-rw-r--r--src/pl/plperl/plperl_helpers.h71
-rw-r--r--src/pl/plperl/plperlu--1.0.sql9
-rw-r--r--src/pl/plperl/plperlu--unpackaged--1.0.sql7
-rw-r--r--src/pl/plperl/plperlu.control7
-rw-r--r--src/pl/plperl/po/de.po91
-rw-r--r--src/pl/plperl/po/es.po84
-rw-r--r--src/pl/plperl/po/fr.po2
-rw-r--r--src/pl/plperl/po/ja.po130
-rw-r--r--src/pl/plperl/po/pt_BR.po126
-rw-r--r--src/pl/plperl/po/ro.po162
-rw-r--r--src/pl/plperl/po/tr.po129
-rw-r--r--src/pl/plperl/po/zh_CN.po157
-rw-r--r--src/pl/plperl/po/zh_TW.po176
-rw-r--r--src/pl/plperl/sql/plperl.sql54
-rw-r--r--src/pl/plperl/sql/plperl_array.sql164
-rw-r--r--src/pl/plperl/sql/plperl_plperlu.sql4
-rw-r--r--src/pl/plperl/sql/plperl_shared.sql11
-rw-r--r--src/pl/plperl/sql/plperl_trigger.sql144
-rw-r--r--src/pl/plperl/sql/plperl_util.sql12
-rw-r--r--src/pl/plperl/text2macro.pl5
-rw-r--r--src/pl/plpgsql/Makefile2
-rw-r--r--src/pl/plpgsql/src/.cvsignore2
-rw-r--r--src/pl/plpgsql/src/.gitignore3
-rw-r--r--src/pl/plpgsql/src/Makefile31
-rw-r--r--src/pl/plpgsql/src/generate-plerrcodes.pl40
-rw-r--r--src/pl/plpgsql/src/gram.y194
-rw-r--r--src/pl/plpgsql/src/nls.mk4
-rw-r--r--src/pl/plpgsql/src/pl_comp.c193
-rw-r--r--src/pl/plpgsql/src/pl_exec.c534
-rw-r--r--src/pl/plpgsql/src/pl_funcs.c425
-rw-r--r--src/pl/plpgsql/src/pl_handler.c16
-rw-r--r--src/pl/plpgsql/src/pl_scanner.c21
-rw-r--r--src/pl/plpgsql/src/plerrcodes.h784
-rw-r--r--src/pl/plpgsql/src/plpgsql--1.0.sql9
-rw-r--r--src/pl/plpgsql/src/plpgsql--unpackaged--1.0.sql7
-rw-r--r--src/pl/plpgsql/src/plpgsql.control7
-rw-r--r--src/pl/plpgsql/src/plpgsql.h49
-rw-r--r--src/pl/plpgsql/src/po/de.po375
-rw-r--r--src/pl/plpgsql/src/po/es.po327
-rw-r--r--src/pl/plpgsql/src/po/fr.po2
-rw-r--r--src/pl/plpgsql/src/po/ja.po485
-rw-r--r--src/pl/plpgsql/src/po/ko.po723
-rw-r--r--src/pl/plpgsql/src/po/pt_BR.po669
-rw-r--r--src/pl/plpgsql/src/po/ro.po703
-rw-r--r--src/pl/plpgsql/src/po/zh_CN.po743
-rw-r--r--src/pl/plpgsql/src/po/zh_TW.po789
-rw-r--r--src/pl/plpython/.gitignore5
-rw-r--r--src/pl/plpython/Makefile66
-rw-r--r--src/pl/plpython/expected/README16
-rw-r--r--src/pl/plpython/expected/plpython_composite.out361
-rw-r--r--src/pl/plpython/expected/plpython_do.out7
-rw-r--r--src/pl/plpython/expected/plpython_drop.out3
-rw-r--r--src/pl/plpython/expected/plpython_error.out300
-rw-r--r--src/pl/plpython/expected/plpython_error_0.out381
-rw-r--r--src/pl/plpython/expected/plpython_newline.out2
-rw-r--r--src/pl/plpython/expected/plpython_quote.out56
-rw-r--r--src/pl/plpython/expected/plpython_record.out10
-rw-r--r--src/pl/plpython/expected/plpython_schema.out2
-rw-r--r--src/pl/plpython/expected/plpython_setof.out17
-rw-r--r--src/pl/plpython/expected/plpython_spi.out1
-rw-r--r--src/pl/plpython/expected/plpython_subtransaction.out411
-rw-r--r--src/pl/plpython/expected/plpython_subtransaction_0.out384
-rw-r--r--src/pl/plpython/expected/plpython_subtransaction_5.out384
-rw-r--r--src/pl/plpython/expected/plpython_test.out22
-rw-r--r--src/pl/plpython/expected/plpython_trigger.out124
-rw-r--r--src/pl/plpython/expected/plpython_types.out63
-rw-r--r--src/pl/plpython/expected/plpython_types_3.out63
-rw-r--r--src/pl/plpython/expected/plpython_unicode.out1
-rw-r--r--src/pl/plpython/expected/plpython_unicode_0.out50
-rw-r--r--src/pl/plpython/expected/plpython_unicode_2.out52
-rw-r--r--src/pl/plpython/expected/plpython_unicode_3.out14
-rw-r--r--src/pl/plpython/generate-spiexceptions.pl44
-rw-r--r--src/pl/plpython/nls.mk4
-rw-r--r--src/pl/plpython/plpython.c1907
-rw-r--r--src/pl/plpython/plpython2u--1.0.sql9
-rw-r--r--src/pl/plpython/plpython2u--unpackaged--1.0.sql7
-rw-r--r--src/pl/plpython/plpython2u.control7
-rw-r--r--src/pl/plpython/plpython3u--1.0.sql9
-rw-r--r--src/pl/plpython/plpython3u--unpackaged--1.0.sql7
-rw-r--r--src/pl/plpython/plpython3u.control7
-rw-r--r--src/pl/plpython/plpythonu--1.0.sql9
-rw-r--r--src/pl/plpython/plpythonu--unpackaged--1.0.sql7
-rw-r--r--src/pl/plpython/plpythonu.control7
-rw-r--r--src/pl/plpython/po/de.po228
-rw-r--r--src/pl/plpython/po/es.po170
-rw-r--r--src/pl/plpython/po/fr.po166
-rw-r--r--src/pl/plpython/po/ja.po224
-rw-r--r--src/pl/plpython/po/pt_BR.po265
-rw-r--r--src/pl/plpython/po/ro.po312
-rw-r--r--src/pl/plpython/po/tr.po245
-rw-r--r--src/pl/plpython/po/zh_CN.po337
-rw-r--r--src/pl/plpython/po/zh_TW.po314
-rw-r--r--src/pl/plpython/sql/plpython_composite.sql168
-rw-r--r--src/pl/plpython/sql/plpython_drop.sql4
-rw-r--r--src/pl/plpython/sql/plpython_error.sql171
-rw-r--r--src/pl/plpython/sql/plpython_newline.sql2
-rw-r--r--src/pl/plpython/sql/plpython_populate.sql3
-rw-r--r--src/pl/plpython/sql/plpython_quote.sql33
-rw-r--r--src/pl/plpython/sql/plpython_record.sql4
-rw-r--r--src/pl/plpython/sql/plpython_schema.sql3
-rw-r--r--src/pl/plpython/sql/plpython_setof.sql11
-rw-r--r--src/pl/plpython/sql/plpython_spi.sql2
-rw-r--r--src/pl/plpython/sql/plpython_subtransaction.sql244
-rw-r--r--src/pl/plpython/sql/plpython_test.sql13
-rw-r--r--src/pl/plpython/sql/plpython_trigger.sql62
-rw-r--r--src/pl/plpython/sql/plpython_types.sql43
-rw-r--r--src/pl/plpython/sql/plpython_unicode.sql2
-rw-r--r--src/pl/tcl/.gitignore4
-rw-r--r--src/pl/tcl/Makefile33
-rw-r--r--src/pl/tcl/expected/pltcl_queries.out37
-rw-r--r--src/pl/tcl/expected/pltcl_queries_1.out37
-rw-r--r--src/pl/tcl/expected/pltcl_setup.out14
-rw-r--r--src/pl/tcl/modules/.gitignore3
-rw-r--r--src/pl/tcl/modules/Makefile2
-rw-r--r--src/pl/tcl/modules/README3
-rw-r--r--src/pl/tcl/modules/pltcl_delmod.in2
-rw-r--r--src/pl/tcl/modules/pltcl_listmod.in2
-rw-r--r--src/pl/tcl/modules/unknown.pltcl2
-rw-r--r--src/pl/tcl/nls.mk4
-rw-r--r--src/pl/tcl/pltcl--1.0.sql9
-rw-r--r--src/pl/tcl/pltcl--unpackaged--1.0.sql5
-rw-r--r--src/pl/tcl/pltcl.c353
-rw-r--r--src/pl/tcl/pltcl.control7
-rw-r--r--src/pl/tcl/pltclu--1.0.sql9
-rw-r--r--src/pl/tcl/pltclu--unpackaged--1.0.sql5
-rw-r--r--src/pl/tcl/pltclu.control7
-rw-r--r--src/pl/tcl/po/fr.po2
-rw-r--r--src/pl/tcl/po/ja.po21
-rw-r--r--src/pl/tcl/po/ro.po55
-rw-r--r--src/pl/tcl/po/zh_CN.po53
-rw-r--r--src/pl/tcl/po/zh_TW.po56
-rw-r--r--src/pl/tcl/sql/pltcl_queries.sql9
-rw-r--r--src/pl/tcl/sql/pltcl_setup.sql15
-rw-r--r--src/port/.gitignore3
-rw-r--r--src/port/Makefile21
-rw-r--r--src/port/README3
-rw-r--r--src/port/chklocale.c27
-rw-r--r--src/port/crypt.c4
-rw-r--r--src/port/dirent.c9
-rw-r--r--src/port/dirmod.c126
-rw-r--r--src/port/erand48.c2
-rw-r--r--src/port/exec.c7
-rw-r--r--src/port/fseeko.c4
-rw-r--r--src/port/getaddrinfo.c19
-rw-r--r--src/port/gethostname.c4
-rw-r--r--src/port/getopt.c29
-rw-r--r--src/port/getopt_long.c22
-rw-r--r--src/port/getpeereid.c80
-rw-r--r--src/port/getrusage.c4
-rw-r--r--src/port/gettimeofday.c2
-rw-r--r--src/port/inet_aton.c2
-rw-r--r--src/port/inet_net_ntop.c298
-rw-r--r--src/port/isinf.c4
-rw-r--r--src/port/kill.c4
-rw-r--r--src/port/memcmp.c4
-rw-r--r--src/port/noblock.c8
-rw-r--r--src/port/open.c4
-rw-r--r--src/port/path.c54
-rw-r--r--src/port/pgcheckdir.c73
-rw-r--r--src/port/pgmkdirp.c148
-rw-r--r--src/port/pgsleep.c4
-rw-r--r--src/port/pgstrcasecmp.c30
-rw-r--r--src/port/pthread-win32.h2
-rw-r--r--src/port/qsort.c2
-rw-r--r--src/port/qsort_arg.c2
-rw-r--r--src/port/random.c4
-rw-r--r--src/port/rint.c2
-rw-r--r--src/port/snprintf.c52
-rw-r--r--src/port/sprompt.c4
-rw-r--r--src/port/srandom.c4
-rw-r--r--src/port/strdup.c4
-rw-r--r--src/port/strerror.c2
-rw-r--r--src/port/strlcat.c2
-rw-r--r--src/port/strlcpy.c4
-rw-r--r--src/port/strtol.c4
-rw-r--r--src/port/strtoul.c2
-rw-r--r--src/port/thread.c4
-rw-r--r--src/port/unsetenv.c7
-rw-r--r--src/port/win32env.c9
-rw-r--r--src/port/win32error.c8
-rw-r--r--src/port/win32ver.rc6
-rw-r--r--src/template/cygwin2
-rw-r--r--src/template/darwin6
-rw-r--r--src/template/dgux4
-rw-r--r--src/template/freebsd2
-rw-r--r--src/template/hpux2
-rw-r--r--src/template/linux2
-rw-r--r--src/template/netbsd3
-rw-r--r--src/template/nextstep2
-rw-r--r--src/template/osf2
-rw-r--r--src/template/sco1
-rw-r--r--src/test/Makefile2
-rw-r--r--src/test/examples/Makefile2
-rw-r--r--src/test/examples/testlibpq.c2
-rw-r--r--src/test/examples/testlibpq2.c2
-rw-r--r--src/test/examples/testlibpq3.c2
-rw-r--r--src/test/examples/testlibpq4.c8
-rw-r--r--src/test/examples/testlo.c4
-rw-r--r--src/test/isolation/.gitignore12
-rw-r--r--src/test/isolation/Makefile84
-rw-r--r--src/test/isolation/README65
-rw-r--r--src/test/isolation/expected/classroom-scheduling.out299
-rw-r--r--src/test/isolation/expected/multiple-row-versions.out24
-rw-r--r--src/test/isolation/expected/partial-index.out641
-rw-r--r--src/test/isolation/expected/project-manager.out299
-rw-r--r--src/test/isolation/expected/receipt-report.out3379
-rw-r--r--src/test/isolation/expected/referential-integrity.out629
-rw-r--r--src/test/isolation/expected/ri-trigger.out111
-rw-r--r--src/test/isolation/expected/simple-write-skew.out41
-rw-r--r--src/test/isolation/expected/temporal-range-integrity.out299
-rw-r--r--src/test/isolation/expected/total-cash.out281
-rw-r--r--src/test/isolation/expected/two-ids.out1007
-rw-r--r--src/test/isolation/isolation_main.c89
-rw-r--r--src/test/isolation/isolation_schedule11
-rw-r--r--src/test/isolation/isolationtester.c374
-rw-r--r--src/test/isolation/isolationtester.h59
-rw-r--r--src/test/isolation/specparse.y185
-rw-r--r--src/test/isolation/specs/classroom-scheduling.spec29
-rw-r--r--src/test/isolation/specs/multiple-row-versions.spec47
-rw-r--r--src/test/isolation/specs/partial-index.spec32
-rw-r--r--src/test/isolation/specs/project-manager.spec30
-rw-r--r--src/test/isolation/specs/receipt-report.spec47
-rw-r--r--src/test/isolation/specs/referential-integrity.spec32
-rw-r--r--src/test/isolation/specs/ri-trigger.spec53
-rw-r--r--src/test/isolation/specs/simple-write-skew.spec30
-rw-r--r--src/test/isolation/specs/temporal-range-integrity.spec38
-rw-r--r--src/test/isolation/specs/total-cash.spec28
-rw-r--r--src/test/isolation/specs/two-ids.spec40
-rw-r--r--src/test/isolation/specscanner.l111
-rw-r--r--src/test/locale/Makefile4
-rw-r--r--src/test/locale/README4
-rw-r--r--src/test/locale/de_DE.ISO8859-1/Makefile6
-rw-r--r--src/test/locale/de_DE.ISO8859-1/README2
-rw-r--r--src/test/locale/de_DE.ISO8859-1/test-de-sort.in2
-rw-r--r--src/test/locale/gr_GR.ISO8859-7/Makefile6
-rw-r--r--src/test/locale/gr_GR.ISO8859-7/README2
-rw-r--r--src/test/locale/koi8-r/Makefile6
-rw-r--r--src/test/locale/koi8-to-win1251/Makefile6
-rw-r--r--src/test/locale/koi8-to-win1251/README2
-rw-r--r--src/test/locale/test-ctype.c2
-rw-r--r--src/test/mb/README2
-rw-r--r--src/test/mb/mbregress.sh4
-rwxr-xr-xsrc/test/performance/runtests.pl17
-rw-r--r--src/test/performance/sqls/connection1
-rw-r--r--src/test/performance/sqls/crtsimple1
-rw-r--r--src/test/performance/sqls/crtsimpleidx1
-rw-r--r--src/test/performance/sqls/drpsimple1
-rw-r--r--src/test/performance/sqls/inssimple4
-rw-r--r--src/test/performance/sqls/orbsimple1
-rw-r--r--src/test/performance/sqls/slcsimple1
-rw-r--r--src/test/performance/sqls/vacuum1
-rw-r--r--src/test/regress/.gitignore7
-rw-r--r--src/test/regress/GNUmakefile58
-rw-r--r--src/test/regress/data/array.data3
-rw-r--r--src/test/regress/expected/.gitignore3
-rw-r--r--src/test/regress/expected/abstime.out6
-rw-r--r--src/test/regress/expected/advisory_lock.out275
-rw-r--r--src/test/regress/expected/aggregates.out257
-rw-r--r--src/test/regress/expected/alter_table.out462
-rw-r--r--src/test/regress/expected/arrays.out382
-rw-r--r--src/test/regress/expected/bit.out2
-rw-r--r--src/test/regress/expected/bit_1.out2
-rw-r--r--src/test/regress/expected/bitmapops.out2
-rw-r--r--src/test/regress/expected/boolean.out12
-rw-r--r--src/test/regress/expected/box.out36
-rw-r--r--src/test/regress/expected/box_1.out36
-rw-r--r--src/test/regress/expected/char.out6
-rw-r--r--src/test/regress/expected/char_1.out6
-rw-r--r--src/test/regress/expected/char_2.out6
-rw-r--r--src/test/regress/expected/cluster.out2
-rw-r--r--src/test/regress/expected/cluster_1.out2
-rw-r--r--src/test/regress/expected/collate.linux.utf8.out1050
-rw-r--r--src/test/regress/expected/collate.out598
-rw-r--r--src/test/regress/expected/copy2.out6
-rw-r--r--src/test/regress/expected/copy2_1.out6
-rw-r--r--src/test/regress/expected/copyselect.out2
-rw-r--r--src/test/regress/expected/copyselect_1.out2
-rw-r--r--src/test/regress/expected/create_aggregate.out4
-rw-r--r--src/test/regress/expected/create_index.out616
-rw-r--r--src/test/regress/expected/create_misc.out22
-rw-r--r--src/test/regress/expected/create_misc_1.out (renamed from src/test/regress/output/create_misc_1.source)4
-rw-r--r--src/test/regress/expected/create_operator.out16
-rw-r--r--src/test/regress/expected/create_table.out18
-rw-r--r--src/test/regress/expected/create_table_1.out18
-rw-r--r--src/test/regress/expected/create_type.out14
-rw-r--r--src/test/regress/expected/create_type_1.out14
-rw-r--r--src/test/regress/expected/create_view.out12
-rw-r--r--src/test/regress/expected/create_view_1.out12
-rw-r--r--src/test/regress/expected/delete.out23
-rw-r--r--src/test/regress/expected/delete_1.out22
-rw-r--r--src/test/regress/expected/dependency.out8
-rw-r--r--src/test/regress/expected/dependency_1.out2
-rw-r--r--src/test/regress/expected/domain.out141
-rw-r--r--src/test/regress/expected/domain_1.out159
-rw-r--r--src/test/regress/expected/drop_if_exists.out4
-rw-r--r--src/test/regress/expected/enum.out153
-rw-r--r--src/test/regress/expected/errors.out188
-rw-r--r--src/test/regress/expected/float4-exp-three-digits.out4
-rw-r--r--src/test/regress/expected/float4.out2
-rw-r--r--src/test/regress/expected/float4_1.out2
-rw-r--r--src/test/regress/expected/float8-exp-three-digits-win32.out18
-rw-r--r--src/test/regress/expected/float8-small-is-zero.out18
-rw-r--r--src/test/regress/expected/float8-small-is-zero_1.out18
-rw-r--r--src/test/regress/expected/float8.out14
-rw-r--r--src/test/regress/expected/float8_1.out14
-rw-r--r--src/test/regress/expected/foreign_data.out333
-rw-r--r--src/test/regress/expected/foreign_key.out20
-rw-r--r--src/test/regress/expected/foreign_key_1.out20
-rw-r--r--src/test/regress/expected/functional_deps.out241
-rw-r--r--src/test/regress/expected/functional_deps_1.out240
-rw-r--r--src/test/regress/expected/guc.out5
-rw-r--r--src/test/regress/expected/guc_1.out5
-rw-r--r--src/test/regress/expected/hash_index.out16
-rw-r--r--src/test/regress/expected/hash_index_1.out16
-rw-r--r--src/test/regress/expected/horology.out13
-rw-r--r--src/test/regress/expected/inet.out2
-rw-r--r--src/test/regress/expected/inet_1.out2
-rw-r--r--src/test/regress/expected/inherit.out97
-rw-r--r--src/test/regress/expected/insert.out17
-rw-r--r--src/test/regress/expected/int2.out15
-rw-r--r--src/test/regress/expected/int4.out15
-rw-r--r--src/test/regress/expected/int4_1.out15
-rw-r--r--src/test/regress/expected/int8-exp-three-digits.out35
-rw-r--r--src/test/regress/expected/int8.out13
-rw-r--r--src/test/regress/expected/interval.out12
-rw-r--r--src/test/regress/expected/join.out103
-rw-r--r--src/test/regress/expected/limit.out28
-rw-r--r--src/test/regress/expected/money.out63
-rw-r--r--src/test/regress/expected/money_1.out63
-rw-r--r--src/test/regress/expected/oid.out2
-rw-r--r--src/test/regress/expected/oidjoins.out922
-rw-r--r--src/test/regress/expected/opr_sanity.out186
-rw-r--r--src/test/regress/expected/plancache.out4
-rw-r--r--src/test/regress/expected/plancache_1.out20
-rw-r--r--src/test/regress/expected/plpgsql.out369
-rw-r--r--src/test/regress/expected/point.out6
-rw-r--r--src/test/regress/expected/point_1.out6
-rw-r--r--src/test/regress/expected/polygon.out50
-rw-r--r--src/test/regress/expected/polymorphism.out3
-rw-r--r--src/test/regress/expected/polymorphism_1.out3
-rw-r--r--src/test/regress/expected/portals.out16
-rw-r--r--src/test/regress/expected/portals_p2.out26
-rw-r--r--src/test/regress/expected/prepared_xacts.out12
-rw-r--r--src/test/regress/expected/prepared_xacts_1.out12
-rw-r--r--src/test/regress/expected/rangefuncs.out26
-rw-r--r--src/test/regress/expected/rowtypes.out94
-rw-r--r--src/test/regress/expected/rowtypes_1.out97
-rw-r--r--src/test/regress/expected/rules.out139
-rw-r--r--src/test/regress/expected/sanity_check.out6
-rw-r--r--src/test/regress/expected/select.out13
-rw-r--r--src/test/regress/expected/select_1.out13
-rw-r--r--src/test/regress/expected/select_implicit.out20
-rw-r--r--src/test/regress/expected/select_implicit_1.out20
-rw-r--r--src/test/regress/expected/select_implicit_2.out20
-rw-r--r--src/test/regress/expected/sequence.out10
-rw-r--r--src/test/regress/expected/sequence_1.out11
-rw-r--r--src/test/regress/expected/sequence_2.out10
-rw-r--r--src/test/regress/expected/subselect.out13
-rw-r--r--src/test/regress/expected/text.out190
-rw-r--r--src/test/regress/expected/timestamptz.out7
-rw-r--r--src/test/regress/expected/tinterval.out4
-rw-r--r--src/test/regress/expected/transactions.out79
-rw-r--r--src/test/regress/expected/transactions_1.out78
-rw-r--r--src/test/regress/expected/triggers.out707
-rw-r--r--src/test/regress/expected/triggers_1.out543
-rw-r--r--src/test/regress/expected/truncate.out26
-rw-r--r--src/test/regress/expected/truncate_1.out26
-rw-r--r--src/test/regress/expected/tsdicts.out12
-rw-r--r--src/test/regress/expected/type_sanity.out13
-rw-r--r--src/test/regress/expected/typed_table.out28
-rw-r--r--src/test/regress/expected/typed_table_1.out19
-rw-r--r--src/test/regress/expected/update.out9
-rw-r--r--src/test/regress/expected/update_1.out9
-rw-r--r--src/test/regress/expected/varchar.out6
-rw-r--r--src/test/regress/expected/varchar_1.out6
-rw-r--r--src/test/regress/expected/varchar_2.out6
-rw-r--r--src/test/regress/expected/window.out4
-rw-r--r--src/test/regress/expected/with.out808
-rw-r--r--src/test/regress/expected/with_1.out386
-rw-r--r--src/test/regress/expected/xc_distkey.out2
-rw-r--r--src/test/regress/expected/xml.out184
-rw-r--r--src/test/regress/expected/xml_1.out176
-rw-r--r--src/test/regress/input/constraints.source3
-rw-r--r--src/test/regress/input/copy.source5
-rw-r--r--src/test/regress/input/create_function_2.source5
-rw-r--r--src/test/regress/input/misc.source17
-rw-r--r--src/test/regress/input/security_label.source84
-rw-r--r--src/test/regress/output/constraints.source2
-rw-r--r--src/test/regress/output/constraints_1.source2
-rw-r--r--src/test/regress/output/copy.source4
-rw-r--r--src/test/regress/output/copy_1.source4
-rw-r--r--src/test/regress/output/create_function_2.source4
-rw-r--r--src/test/regress/output/misc.source23
-rw-r--r--src/test/regress/output/security_label.source92
-rw-r--r--src/test/regress/parallel_schedule10
-rw-r--r--src/test/regress/pg_regress.c84
-rw-r--r--src/test/regress/pg_regress.h5
-rw-r--r--src/test/regress/pg_regress_main.c11
-rw-r--r--src/test/regress/regress.c8
-rw-r--r--src/test/regress/resultmap3
-rw-r--r--src/test/regress/serial_schedule8
-rw-r--r--src/test/regress/sql/.gitignore8
-rw-r--r--src/test/regress/sql/abstime.sql6
-rw-r--r--src/test/regress/sql/advisory_lock.sql146
-rw-r--r--src/test/regress/sql/aggregates.sql68
-rw-r--r--src/test/regress/sql/alter_table.sql277
-rw-r--r--src/test/regress/sql/arrays.sql46
-rw-r--r--src/test/regress/sql/bit.sql3
-rw-r--r--src/test/regress/sql/bitmapops.sql2
-rw-r--r--src/test/regress/sql/boolean.sql12
-rw-r--r--src/test/regress/sql/box.sql37
-rw-r--r--src/test/regress/sql/case.sql1
-rw-r--r--src/test/regress/sql/char.sql6
-rw-r--r--src/test/regress/sql/cluster.sql2
-rw-r--r--src/test/regress/sql/collate.linux.utf8.sql387
-rw-r--r--src/test/regress/sql/collate.sql222
-rw-r--r--src/test/regress/sql/copy2.sql6
-rw-r--r--src/test/regress/sql/copyselect.sql2
-rw-r--r--src/test/regress/sql/create_aggregate.sql4
-rw-r--r--src/test/regress/sql/create_index.sql122
-rw-r--r--src/test/regress/sql/create_operator.sql18
-rw-r--r--src/test/regress/sql/create_table.sql17
-rw-r--r--src/test/regress/sql/create_type.sql13
-rw-r--r--src/test/regress/sql/create_view.sql12
-rw-r--r--src/test/regress/sql/delete.sql12
-rw-r--r--src/test/regress/sql/domain.sql80
-rw-r--r--src/test/regress/sql/drop.sql13
-rw-r--r--src/test/regress/sql/drop_if_exists.sql5
-rw-r--r--src/test/regress/sql/enum.sql86
-rw-r--r--src/test/regress/sql/errors.sql192
-rw-r--r--src/test/regress/sql/float4.sql3
-rw-r--r--src/test/regress/sql/float8.sql15
-rw-r--r--src/test/regress/sql/foreign_data.sql79
-rw-r--r--src/test/regress/sql/foreign_key.sql20
-rw-r--r--src/test/regress/sql/functional_deps.sql210
-rw-r--r--src/test/regress/sql/hash_index.sql17
-rw-r--r--src/test/regress/sql/horology.sql3
-rw-r--r--src/test/regress/sql/hs_primary_extremes.sql17
-rw-r--r--src/test/regress/sql/inet.sql2
-rw-r--r--src/test/regress/sql/inherit.sql35
-rw-r--r--src/test/regress/sql/insert.sql7
-rw-r--r--src/test/regress/sql/int2.sql5
-rw-r--r--src/test/regress/sql/int4.sql6
-rw-r--r--src/test/regress/sql/int8.sql4
-rw-r--r--src/test/regress/sql/interval.sql12
-rw-r--r--src/test/regress/sql/join.sql72
-rw-r--r--src/test/regress/sql/limit.sql28
-rw-r--r--src/test/regress/sql/lseg.sql1
-rw-r--r--src/test/regress/sql/money.sql14
-rw-r--r--src/test/regress/sql/numeric_big.sql1
-rw-r--r--src/test/regress/sql/numerology.sql1
-rw-r--r--src/test/regress/sql/oid.sql2
-rw-r--r--src/test/regress/sql/oidjoins.sql818
-rw-r--r--src/test/regress/sql/opr_sanity.sql137
-rw-r--r--src/test/regress/sql/path.sql1
-rw-r--r--src/test/regress/sql/plpgsql.sql227
-rw-r--r--src/test/regress/sql/point.sql6
-rw-r--r--src/test/regress/sql/polygon.sql51
-rw-r--r--src/test/regress/sql/polymorphism.sql3
-rw-r--r--src/test/regress/sql/portals.sql16
-rw-r--r--src/test/regress/sql/portals_p2.sql27
-rw-r--r--src/test/regress/sql/prepare.sql1
-rw-r--r--src/test/regress/sql/prepared_xacts.sql12
-rw-r--r--src/test/regress/sql/random.sql1
-rw-r--r--src/test/regress/sql/rangefuncs.sql25
-rw-r--r--src/test/regress/sql/rowtypes.sql62
-rw-r--r--src/test/regress/sql/rules.sql22
-rw-r--r--src/test/regress/sql/select.sql16
-rw-r--r--src/test/regress/sql/select_implicit.sql21
-rw-r--r--src/test/regress/sql/select_into.sql1
-rw-r--r--src/test/regress/sql/select_views.sql1
-rw-r--r--src/test/regress/sql/sequence.sql11
-rw-r--r--src/test/regress/sql/subselect.sql10
-rw-r--r--src/test/regress/sql/text.sql48
-rw-r--r--src/test/regress/sql/timestamptz.sql2
-rw-r--r--src/test/regress/sql/tinterval.sql4
-rw-r--r--src/test/regress/sql/transactions.sql46
-rw-r--r--src/test/regress/sql/triggers.sql440
-rw-r--r--src/test/regress/sql/truncate.sql14
-rw-r--r--src/test/regress/sql/tsdicts.sql12
-rw-r--r--src/test/regress/sql/type_sanity.sql6
-rw-r--r--src/test/regress/sql/typed_table.sql21
-rw-r--r--src/test/regress/sql/update.sql4
-rw-r--r--src/test/regress/sql/varchar.sql6
-rw-r--r--src/test/regress/sql/window.sql4
-rw-r--r--src/test/regress/sql/with.sql289
-rw-r--r--src/test/regress/sql/xml.sql48
-rw-r--r--src/test/regress/standby_schedule2
-rw-r--r--src/test/thread/Makefile4
-rw-r--r--src/test/thread/README11
-rw-r--r--src/test/thread/thread_test.c24
-rw-r--r--src/timezone/.gitignore1
-rw-r--r--src/timezone/Makefile6
-rw-r--r--src/timezone/README2
-rw-r--r--src/timezone/data/africa63
-rw-r--r--src/timezone/data/asia19
-rw-r--r--src/timezone/data/australasia70
-rw-r--r--src/timezone/data/backward6
-rw-r--r--src/timezone/data/etcetera5
-rw-r--r--src/timezone/data/europe68
-rw-r--r--src/timezone/data/leapseconds14
-rw-r--r--src/timezone/data/northamerica238
-rw-r--r--src/timezone/data/southamerica62
-rw-r--r--src/timezone/data/zone.tab15
-rw-r--r--src/timezone/ialloc.c2
-rw-r--r--src/timezone/localtime.c2
-rw-r--r--src/timezone/pgtz.c63
-rw-r--r--src/timezone/pgtz.h4
-rw-r--r--src/timezone/private.h2
-rw-r--r--src/timezone/scheck.c2
-rw-r--r--src/timezone/strftime.c2
-rw-r--r--src/timezone/tzfile.h2
-rw-r--r--src/timezone/tznames/Africa.txt2
-rw-r--r--src/timezone/tznames/America.txt2
-rw-r--r--src/timezone/tznames/Antarctica.txt2
-rw-r--r--src/timezone/tznames/Asia.txt2
-rw-r--r--src/timezone/tznames/Atlantic.txt2
-rw-r--r--src/timezone/tznames/Australia2
-rw-r--r--src/timezone/tznames/Australia.txt2
-rw-r--r--src/timezone/tznames/Default6
-rw-r--r--src/timezone/tznames/Etc.txt2
-rw-r--r--src/timezone/tznames/Europe.txt2
-rw-r--r--src/timezone/tznames/India2
-rw-r--r--src/timezone/tznames/Indian.txt2
-rw-r--r--src/timezone/tznames/Makefile2
-rw-r--r--src/timezone/tznames/Pacific.txt7
-rw-r--r--src/timezone/tznames/README2
-rw-r--r--src/timezone/zic.c14
-rwxr-xr-xsrc/tools/FAQ2txt2
-rw-r--r--src/tools/RELEASE_CHANGES26
-rwxr-xr-xsrc/tools/add_cvs_markers50
-rw-r--r--src/tools/backend/README5
-rw-r--r--src/tools/backend/backend_dirs.html3
-rw-r--r--src/tools/backend/index.html2
-rwxr-xr-xsrc/tools/ccsym2
-rwxr-xr-xsrc/tools/check_keywords.pl6
-rwxr-xr-xsrc/tools/codelines4
-rwxr-xr-xsrc/tools/copyright3
-rw-r--r--src/tools/editors/emacs.samples9
-rw-r--r--src/tools/editors/vim.samples1
-rw-r--r--src/tools/entab/Makefile9
-rw-r--r--src/tools/entab/entab.c2
-rw-r--r--src/tools/entab/entab.man4
-rw-r--r--src/tools/entab/halt.c2
-rwxr-xr-xsrc/tools/find_badmacros3
-rwxr-xr-xsrc/tools/find_gt_lt2
-rwxr-xr-xsrc/tools/find_static11
-rwxr-xr-xsrc/tools/find_typedef8
-rw-r--r--src/tools/findoidjoins/Makefile8
-rw-r--r--src/tools/findoidjoins/README70
-rw-r--r--src/tools/findoidjoins/findoidjoins.c99
-rwxr-xr-xsrc/tools/findoidjoins/make_oidjoins_check30
-rw-r--r--src/tools/fsync/Makefile25
-rw-r--r--src/tools/fsync/README11
-rw-r--r--src/tools/fsync/test_fsync.c384
-rw-r--r--src/tools/git-external-diff24
-rwxr-xr-xsrc/tools/git_changelog284
-rw-r--r--src/tools/ifaddrs/Makefile4
-rw-r--r--src/tools/ifaddrs/README2
-rw-r--r--src/tools/ifaddrs/test_ifaddrs.c2
-rwxr-xr-xsrc/tools/make_ctags2
-rw-r--r--src/tools/make_diff/README7
-rwxr-xr-xsrc/tools/make_diff/cporig2
-rwxr-xr-xsrc/tools/make_diff/difforig2
-rwxr-xr-xsrc/tools/make_diff/rmorig2
-rwxr-xr-xsrc/tools/make_etags2
-rwxr-xr-xsrc/tools/make_keywords2
-rwxr-xr-xsrc/tools/make_mkid2
-rw-r--r--src/tools/msvc/Install.pm73
-rw-r--r--src/tools/msvc/Mkvcbuild.pm67
-rw-r--r--src/tools/msvc/Project.pm2
-rw-r--r--src/tools/msvc/README10
-rw-r--r--src/tools/msvc/Solution.pm27
-rwxr-xr-xsrc/tools/msvc/build.bat2
-rw-r--r--src/tools/msvc/build.pl3
-rwxr-xr-xsrc/tools/msvc/builddoc.bat68
-rw-r--r--src/tools/msvc/builddoc.pl122
-rwxr-xr-xsrc/tools/msvc/clean.bat3
-rw-r--r--src/tools/msvc/config_default.pl2
-rw-r--r--src/tools/msvc/gendef.pl2
-rw-r--r--src/tools/msvc/install.bat2
-rwxr-xr-xsrc/tools/msvc/install.pl2
-rw-r--r--src/tools/msvc/mkvcbuild.pl2
-rwxr-xr-xsrc/tools/msvc/pgbison.bat4
-rwxr-xr-xsrc/tools/msvc/pgflex.bat19
-rw-r--r--src/tools/msvc/vcregress.bat2
-rw-r--r--src/tools/msvc/vcregress.pl47
-rwxr-xr-xsrc/tools/pgcvslog293
-rw-r--r--src/tools/pginclude/README2
-rw-r--r--src/tools/pginclude/cpluspluscheck47
-rwxr-xr-xsrc/tools/pginclude/pgcheckdefines2
-rwxr-xr-xsrc/tools/pginclude/pgcompinclude2
-rwxr-xr-xsrc/tools/pginclude/pgdefine2
-rwxr-xr-xsrc/tools/pginclude/pgfixinclude2
-rwxr-xr-xsrc/tools/pginclude/pgrminclude8
-rw-r--r--src/tools/pgindent/README17
-rw-r--r--src/tools/pgindent/indent.bsd.patch2
-rwxr-xr-xsrc/tools/pgindent/pgcppindent2
-rwxr-xr-xsrc/tools/pgindent/pgindent23
-rw-r--r--src/tools/pgindent/typedefs.list325
-rwxr-xr-xsrc/tools/pgtest12
-rwxr-xr-xsrc/tools/version_stamp.pl6
-rwxr-xr-xsrc/tools/win32tzlist.pl4
-rw-r--r--src/tutorial/Makefile2
-rw-r--r--src/tutorial/README2
-rw-r--r--src/tutorial/advanced.source4
-rw-r--r--src/tutorial/basics.source18
-rw-r--r--src/tutorial/complex.c2
-rw-r--r--src/tutorial/complex.source16
-rw-r--r--src/tutorial/funcs.c2
-rw-r--r--src/tutorial/funcs.source16
-rw-r--r--src/tutorial/funcs_new.c2
-rw-r--r--src/tutorial/syscat.source29
-rw-r--r--src/win32.mak8
3202 files changed, 312423 insertions, 128793 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000..1e15ce5fc1
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,32 @@
+# Global excludes across all subdirectories
+*.o
+*.so
+*.so.[0-9]
+*.so.[0-9].[0-9]
+*.sl
+*.sl.[0-9]
+*.sl.[0-9].[0-9]
+*.dylib
+*.dll
+*.a
+*.mo
+objfiles.txt
+.deps/
+*.gcno
+*.gcda
+*.gcov
+*.gcov.out
+lcov.info
+*.vcproj
+win32ver.rc
+*.exe
+lib*dll.def
+
+# Local excludes in root directory
+/GNUmakefile
+/config.log
+/config.status
+/pgsql.sln
+/pgsql.sln.cache
+/Debug/
+/Release/
diff --git a/COPYRIGHT b/COPYRIGHT
index 18259d01b7..0395b0d3cf 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -1,7 +1,7 @@
Postgres-XC Cluster Database Management System
Portions Copyright (c) 2010-2011, Nippon Telegraph and Telephone Corporation
-Portions Copyright (c) 1996-2010, PostgreSQL Global Development Group
+Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
Portions Copyright (c) 1994, The Regents of the University of California
diff --git a/GNUmakefile.in b/GNUmakefile.in
index 86623a3854..79b0da42a8 100644
--- a/GNUmakefile.in
+++ b/GNUmakefile.in
@@ -1,64 +1,46 @@
#
# PostgreSQL top level makefile
#
-# $PostgreSQL: pgsql/GNUmakefile.in,v 1.58 2010/03/30 00:10:46 petere Exp $
+# GNUmakefile.in
#
subdir =
top_builddir = .
include $(top_builddir)/src/Makefile.global
+$(call recurse,all install,src config)
+
all:
- $(MAKE) -C src all
- $(MAKE) -C config all
- @echo "All of PostgreSQL successfully made. Ready to install."
+ +@echo "All of PostgreSQL successfully made. Ready to install."
docs:
$(MAKE) -C doc all
+$(call recurse,world,doc src config contrib,all)
world:
- $(MAKE) -C doc all
- $(MAKE) -C src all
- $(MAKE) -C config all
- $(MAKE) -C contrib all
- @echo "PostgreSQL, contrib, and documentation successfully made. Ready to install."
+ +@echo "PostgreSQL, contrib, and documentation successfully made. Ready to install."
html man:
$(MAKE) -C doc $@
install:
- $(MAKE) -C src $@
- $(MAKE) -C config $@
- @echo "PostgreSQL installation complete."
+ +@echo "PostgreSQL installation complete."
install-docs:
$(MAKE) -C doc install
+$(call recurse,install-world,doc src config contrib,install)
install-world:
- $(MAKE) -C doc install
- $(MAKE) -C src install
- $(MAKE) -C config install
- $(MAKE) -C contrib install
- @echo "PostgreSQL, contrib, and documentation installation complete."
+ +@echo "PostgreSQL, contrib, and documentation installation complete."
-installdirs uninstall coverage:
- $(MAKE) -C doc $@
- $(MAKE) -C src $@
- $(MAKE) -C config $@
+$(call recurse,installdirs uninstall coverage,doc src config)
-distprep:
- $(MAKE) -C doc $@
- $(MAKE) -C src $@
- $(MAKE) -C config $@
- $(MAKE) -C contrib $@
+$(call recurse,distprep,doc src config contrib)
# clean, distclean, etc should apply to contrib too, even though
# it's not built by default
+$(call recurse,clean,doc contrib src config)
clean:
- $(MAKE) -C doc $@
- $(MAKE) -C contrib $@
- $(MAKE) -C src $@
- $(MAKE) -C config $@
# Garbage from autoconf:
@rm -rf autom4te.cache/
@@ -78,11 +60,11 @@ check: all
check installcheck installcheck-parallel:
$(MAKE) -C src/test $@
-installcheck-world:
- $(MAKE) -C src/test installcheck
- $(MAKE) -C src/pl installcheck
- $(MAKE) -C src/interfaces/ecpg installcheck
- $(MAKE) -C contrib installcheck
+$(call recurse,check-world,src/test src/pl src/interfaces/ecpg contrib,check)
+
+$(call recurse,installcheck-world,src/test src/pl src/interfaces/ecpg contrib,installcheck)
+
+$(call recurse,maintainer-check,doc src config contrib)
GNUmakefile: GNUmakefile.in $(top_builddir)/config.status
./config.status $@
@@ -122,7 +104,7 @@ distdir:
cp $(distdir)/doc/src/sgml/INSTALL $(distdir)/
cp $(distdir)/doc/src/sgml/regress_README $(distdir)/src/test/regress/README
$(MAKE) -C $(distdir) distclean
- rm -f $(distdir)/README.CVS
+ rm -f $(distdir)/README.git
distcheck: dist
rm -rf $(dummy)
@@ -143,4 +125,4 @@ distcheck: dist
rm -rf $(distdir) $(dummy)
@echo "Distribution integrity checks out."
-.PHONY: dist distdir distcheck docs install-docs
+.PHONY: dist distdir distcheck docs install-docs world check-world install-world installcheck-world
diff --git a/Makefile b/Makefile
index b5b2ea54c0..72e9c83733 100644
--- a/Makefile
+++ b/Makefile
@@ -11,7 +11,7 @@
# GNUmakefile won't exist yet, so we catch that case as well.
-all check install installdirs installcheck installcheck-parallel uninstall clean distclean maintainer-clean dist distcheck world install-world installcheck-world:
+all check install installdirs installcheck installcheck-parallel uninstall clean distclean maintainer-clean dist distcheck world check-world install-world installcheck-world:
@if [ ! -f GNUmakefile ] ; then \
echo "You need to run the 'configure' program first. See the file"; \
echo "'INSTALL' for installation instructions." ; \
diff --git a/README b/README
index 19ed46b441..49d55af5f6 100644
--- a/README
+++ b/README
@@ -1,6 +1,6 @@
PostgreSQL Database Management System
=====================================
-
+
This directory contains the source code distribution of the PostgreSQL
database management system.
@@ -26,4 +26,3 @@ instructions.
The latest version of this software may be obtained at
http://www.postgresql.org/download/. For more information look at our
web site located at http://www.postgresql.org/.
-
diff --git a/README.CVS b/README.git
index 4eb8377a50..83b9a8c581 100644
--- a/README.CVS
+++ b/README.git
@@ -2,13 +2,13 @@
In a release or snapshot tarball of PostgreSQL, documentation files named
INSTALL and HISTORY will appear in this directory. However, these files are
-not stored in CVS and so will not be present if you are using a CVS checkout.
-If you are using CVS, you can view the most recent install instructions at:
+not stored in git and so will not be present if you are using a git checkout.
+If you are using git, you can view the most recent install instructions at:
http://developer.postgresql.org/docs/postgres/installation.html
and the current release notes at:
http://developer.postgresql.org/docs/postgres/release.html
-Users compiling from CVS will also need compatible versions of Bison, Flex,
+Users compiling from git will also need compatible versions of Bison, Flex,
and Perl, as discussed in the install documentation. These programs are not
needed when using a tarball, since the files they are needed to build are
already present in the tarball. (On Windows, however, you need Perl anyway.)
diff --git a/aclocal.m4 b/aclocal.m4
index b007cd0a48..eaf98007e5 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1,4 +1,4 @@
-dnl $PostgreSQL: pgsql/aclocal.m4,v 1.18 2004/04/23 18:15:47 momjian Exp $
+dnl aclocal.m4
m4_include([config/ac_func_accept_argtypes.m4])
m4_include([config/acx_pthread.m4])
m4_include([config/c-compiler.m4])
diff --git a/config/Makefile b/config/Makefile
index 2e881b7704..da1283868e 100644
--- a/config/Makefile
+++ b/config/Makefile
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/config/Makefile,v 1.3 2009/08/26 22:24:42 petere Exp $
+# config/Makefile
subdir = config
top_builddir = ..
diff --git a/config/ac_func_accept_argtypes.m4 b/config/ac_func_accept_argtypes.m4
index 917d59ab86..1e7717922d 100644
--- a/config/ac_func_accept_argtypes.m4
+++ b/config/ac_func_accept_argtypes.m4
@@ -1,13 +1,12 @@
-# $PostgreSQL: pgsql/config/ac_func_accept_argtypes.m4,v 1.6 2003/11/29 19:51:17 pgsql Exp $
+# config/ac_func_accept_argtypes.m4
# This comes from the official Autoconf macro archive at
# <http://research.cys.de/autoconf-archive/>
-# (I removed the $ before the Id CVS keyword below.)
dnl @synopsis AC_FUNC_ACCEPT_ARGTYPES
dnl
dnl Checks the data types of the three arguments to accept(). Results are
-dnl placed into the symbols ACCEPT_TYPE_RETURN and ACCEPT_TYPE_ARG[123],
+dnl placed into the symbols ACCEPT_TYPE_RETURN and ACCEPT_TYPE_ARG[123],
dnl consistent with the following example:
dnl
dnl #define ACCEPT_TYPE_RETURN int
@@ -21,7 +20,7 @@ dnl
dnl NOTE: This is just a modified version of the AC_FUNC_SELECT_ARGTYPES
dnl macro. Credit for that one goes to David MacKenzie et. al.
dnl
-dnl @version Id: ac_func_accept_argtypes.m4,v 1.1 1999/12/03 11:29:29 simons Exp $
+dnl @version $Id: ac_func_accept_argtypes.m4,v 1.1 1999/12/03 11:29:29 simons Exp $
dnl @author Daniel Richard G. <[email protected]>
dnl
@@ -38,7 +37,8 @@ dnl
# which is *not* 'socklen_t *'). If we detect that, then we assume
# 'int' as the result, because that ought to work best.
#
-# On Win32, accept() returns 'unsigned int PASCAL'
+# On Win32, accept() returns 'unsigned int PASCAL'
+# Win64 uses SOCKET for return and arg1
AC_DEFUN([AC_FUNC_ACCEPT_ARGTYPES],
[AC_MSG_CHECKING([types of arguments for accept()])
@@ -46,8 +46,8 @@ AC_DEFUN([AC_FUNC_ACCEPT_ARGTYPES],
[AC_CACHE_VAL(ac_cv_func_accept_arg1,dnl
[AC_CACHE_VAL(ac_cv_func_accept_arg2,dnl
[AC_CACHE_VAL(ac_cv_func_accept_arg3,dnl
- [for ac_cv_func_accept_return in 'int' 'unsigned int PASCAL'; do
- for ac_cv_func_accept_arg1 in 'int' 'unsigned int'; do
+ [for ac_cv_func_accept_return in 'int' 'unsigned int PASCAL' 'SOCKET'; do
+ for ac_cv_func_accept_arg1 in 'int' 'unsigned int' 'SOCKET'; do
for ac_cv_func_accept_arg2 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
for ac_cv_func_accept_arg3 in 'int' 'size_t' 'socklen_t' 'unsigned int' 'void'; do
AC_TRY_COMPILE(
diff --git a/config/acx_pthread.m4 b/config/acx_pthread.m4
index ceb161a556..6ff241eba1 100644
--- a/config/acx_pthread.m4
+++ b/config/acx_pthread.m4
@@ -142,7 +142,8 @@ main (int argc, char **argv)
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
- if test "`(eval $ac_link 2>&1 1>&5)`" = ""; then
+ # 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
# tests for building binaries, not shared libraries.
diff --git a/config/c-compiler.m4 b/config/c-compiler.m4
index a8df61b649..9398ca6c47 100644
--- a/config/c-compiler.m4
+++ b/config/c-compiler.m4
@@ -1,5 +1,5 @@
# Macros to detect C compiler features
-# $PostgreSQL: pgsql/config/c-compiler.m4,v 1.22 2010/05/25 17:28:20 meskes Exp $
+# config/c-compiler.m4
# PGAC_C_SIGNED
@@ -126,13 +126,21 @@ fi])# PGAC_C_FUNCNAME_SUPPORT
# Given a string, check if the compiler supports the string as a
# command-line option. If it does, add the string to CFLAGS.
AC_DEFUN([PGAC_PROG_CC_CFLAGS_OPT],
-[AC_MSG_CHECKING([if $CC supports $1])
-pgac_save_CFLAGS=$CFLAGS
+[define([Ac_cachevar], [AS_TR_SH([pgac_cv_prog_cc_cflags_$1])])dnl
+AC_CACHE_CHECK([whether $CC supports $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_COMPILE_IFELSE([AC_LANG_PROGRAM()],
- AC_MSG_RESULT(yes),
- [CFLAGS="$pgac_save_CFLAGS"
- AC_MSG_RESULT(no)])
+ [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="$CFLAGS $1"
+fi
+undefine([Ac_cachevar])dnl
])# PGAC_PROG_CC_CFLAGS_OPT
@@ -145,14 +153,17 @@ _AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
# you can link to a particular function, not just whether you can link.
# In fact, we must actually check that the resulting program runs :-(
AC_DEFUN([PGAC_PROG_CC_LDFLAGS_OPT],
-[AC_MSG_CHECKING([if $CC supports $1])
-pgac_save_LDFLAGS=$LDFLAGS
+[define([Ac_cachevar], [AS_TR_SH([pgac_cv_prog_cc_ldflags_$1])])dnl
+AC_CACHE_CHECK([whether $CC supports $1], [Ac_cachevar],
+[pgac_save_LDFLAGS=$LDFLAGS
LDFLAGS="$pgac_save_LDFLAGS $1"
AC_RUN_IFELSE([AC_LANG_PROGRAM([extern void $2 (); void (*fptr) () = $2;],[])],
- AC_MSG_RESULT(yes),
- [LDFLAGS="$pgac_save_LDFLAGS"
- AC_MSG_RESULT(no)],
- [LDFLAGS="$pgac_save_LDFLAGS"
- AC_MSG_RESULT(assuming no)])
+ [Ac_cachevar=yes],
+ [Ac_cachevar=no],
+ [Ac_cachevar="assuming no"])
+LDFLAGS="$pgac_save_LDFLAGS"])
+if test x"$Ac_cachevar" = x"yes"; then
+ LDFLAGS="$LDFLAGS $1"
+fi
+undefine([Ac_cachevar])dnl
])# PGAC_PROG_CC_LDFLAGS_OPT
-
diff --git a/config/c-library.m4 b/config/c-library.m4
index 5d44685ec0..cddeafaec2 100644
--- a/config/c-library.m4
+++ b/config/c-library.m4
@@ -1,5 +1,5 @@
# Macros that test various C library quirks
-# $PostgreSQL: pgsql/config/c-library.m4,v 1.34 2009/07/02 18:55:40 petere Exp $
+# config/c-library.m4
# PGAC_VAR_INT_TIMEZONE
@@ -297,3 +297,32 @@ int main()
])dnl AC_CACHE_VAL
AC_MSG_RESULT([$pgac_cv_printf_arg_control])
])# PGAC_FUNC_PRINTF_ARG_CONTROL
+
+
+# PGAC_TYPE_LOCALE_T
+# ------------------
+# Check for the locale_t type and find the right header file. Mac OS
+# X needs xlocale.h; standard is locale.h, but glibc also has an
+# xlocale.h file that we should not use.
+#
+AC_DEFUN([PGAC_TYPE_LOCALE_T],
+[AC_CACHE_CHECK([for locale_t], pgac_cv_type_locale_t,
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+[#include <locale.h>
+locale_t x;],
+[])],
+[pgac_cv_type_locale_t=yes],
+[AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
+[#include <xlocale.h>
+locale_t x;],
+[])],
+[pgac_cv_type_locale_t='yes (in xlocale.h)'],
+[pgac_cv_type_locale_t=no])])])
+if test "$pgac_cv_type_locale_t" != no; then
+ AC_DEFINE(HAVE_LOCALE_T, 1,
+ [Define to 1 if the system has the type `locale_t'.])
+fi
+if test "$pgac_cv_type_locale_t" = 'yes (in xlocale.h)'; then
+ AC_DEFINE(LOCALE_T_IN_XLOCALE, 1,
+ [Define to 1 if `locale_t' requires <xlocale.h>.])
+fi])])# PGAC_HEADER_XLOCALE
diff --git a/config/config.guess b/config/config.guess
index 115f944a61..40eaed4821 100755
--- a/config/config.guess
+++ b/config/config.guess
@@ -1,10 +1,10 @@
#! /bin/sh
# Attempt to guess a canonical system name.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-# Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+# 2011 Free Software Foundation, Inc.
-timestamp='2010-04-03'
+timestamp='2011-05-11'
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
@@ -57,7 +57,7 @@ GNU config.guess ($timestamp)
Originally written by Per Bothner.
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free
Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
@@ -92,7 +92,7 @@ if test $# != 0; then
exit 1
fi
-trap 'exit 1' HUP INT TERM
+trap 'exit 1' 1 2 15
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
# compiler to aid in system detection is discouraged as it requires
@@ -106,7 +106,7 @@ trap 'exit 1' HUP INT TERM
set_cc_for_build='
trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" HUP INT PIPE TERM ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
: ${TMPDIR=/tmp} ;
{ tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
{ test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
@@ -181,7 +181,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
fi
;;
*)
- os=netbsd
+ os=netbsd
;;
esac
# The OS release
@@ -224,7 +224,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
;;
*5.*)
- UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
;;
esac
# According to Compaq, /usr/sbin/psrinfo has been available on
@@ -270,7 +270,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- exit ;;
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ exitcode=$?
+ trap '' 0
+ exit $exitcode ;;
Alpha\ *:Windows_NT*:*)
# How do we know it's Interix rather than the generic POSIX subsystem?
# Should we change UNAME_MACHINE based on the output of uname instead
@@ -296,7 +299,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
echo s390-ibm-zvmoe
exit ;;
*:OS400:*:*)
- echo powerpc-ibm-os400
+ echo powerpc-ibm-os400
exit ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE}
@@ -395,23 +398,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
# MiNT. But MiNT is downward compatible to TOS, so this should
# be no problem.
atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
+ echo m68k-atari-mint${UNAME_RELEASE}
exit ;;
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
echo m68k-atari-mint${UNAME_RELEASE}
- exit ;;
+ exit ;;
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint${UNAME_RELEASE}
+ echo m68k-atari-mint${UNAME_RELEASE}
exit ;;
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint${UNAME_RELEASE}
- exit ;;
+ echo m68k-milan-mint${UNAME_RELEASE}
+ exit ;;
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint${UNAME_RELEASE}
- exit ;;
+ echo m68k-hades-mint${UNAME_RELEASE}
+ exit ;;
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint${UNAME_RELEASE}
- exit ;;
+ echo m68k-unknown-mint${UNAME_RELEASE}
+ exit ;;
m68k:machten:*:*)
echo m68k-apple-machten${UNAME_RELEASE}
exit ;;
@@ -481,8 +484,8 @@ EOF
echo m88k-motorola-sysv3
exit ;;
AViiON:dgux:*:*)
- # DG/UX returns AViiON for all architectures
- UNAME_PROCESSOR=`/usr/bin/uname -p`
+ # DG/UX returns AViiON for all architectures
+ UNAME_PROCESSOR=`/usr/bin/uname -p`
if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
then
if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
@@ -495,7 +498,7 @@ EOF
else
echo i586-dg-dgux${UNAME_RELEASE}
fi
- exit ;;
+ exit ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
echo m88k-dolphin-sysv3
exit ;;
@@ -552,7 +555,7 @@ EOF
echo rs6000-ibm-aix3.2
fi
exit ;;
- *:AIX:*:[456])
+ *:AIX:*:[4567])
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
IBM_ARCH=rs6000
@@ -595,52 +598,52 @@ EOF
9000/[678][0-9][0-9])
if [ -x /usr/bin/getconf ]; then
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "${sc_cpu_version}" in
- 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
- 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
- 532) # CPU_PA_RISC2_0
- case "${sc_kernel_bits}" in
- 32) HP_ARCH="hppa2.0n" ;;
- 64) HP_ARCH="hppa2.0w" ;;
+ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+ case "${sc_cpu_version}" in
+ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+ 532) # CPU_PA_RISC2_0
+ case "${sc_kernel_bits}" in
+ 32) HP_ARCH="hppa2.0n" ;;
+ 64) HP_ARCH="hppa2.0w" ;;
'') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
- esac ;;
- esac
+ esac ;;
+ esac
fi
if [ "${HP_ARCH}" = "" ]; then
eval $set_cc_for_build
- sed 's/^ //' << EOF >$dummy.c
+ sed 's/^ //' << EOF >$dummy.c
- #define _HPUX_SOURCE
- #include <stdlib.h>
- #include <unistd.h>
+ #define _HPUX_SOURCE
+ #include <stdlib.h>
+ #include <unistd.h>
- int main ()
- {
- #if defined(_SC_KERNEL_BITS)
- long bits = sysconf(_SC_KERNEL_BITS);
- #endif
- long cpu = sysconf (_SC_CPU_VERSION);
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
- switch (cpu)
- {
- case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
- case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
- case CPU_PA_RISC2_0:
- #if defined(_SC_KERNEL_BITS)
- switch (bits)
- {
- case 64: puts ("hppa2.0w"); break;
- case 32: puts ("hppa2.0n"); break;
- default: puts ("hppa2.0"); break;
- } break;
- #else /* !defined(_SC_KERNEL_BITS) */
- puts ("hppa2.0"); break;
- #endif
- default: puts ("hppa1.0"); break;
- }
- exit (0);
- }
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
EOF
(CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
test -z "$HP_ARCH" && HP_ARCH=hppa
@@ -731,22 +734,22 @@ EOF
exit ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
echo c1-convex-bsd
- exit ;;
+ exit ;;
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
else echo c2-convex-bsd
fi
- exit ;;
+ exit ;;
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
echo c34-convex-bsd
- exit ;;
+ exit ;;
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
echo c38-convex-bsd
- exit ;;
+ exit ;;
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
echo c4-convex-bsd
- exit ;;
+ exit ;;
CRAY*Y-MP:*:*:*)
echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
exit ;;
@@ -770,14 +773,14 @@ EOF
exit ;;
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ exit ;;
5000:UNIX_System_V:4.*:*)
- FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
- FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
exit ;;
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
@@ -805,14 +808,14 @@ EOF
echo ${UNAME_MACHINE}-pc-mingw32
exit ;;
i*:windows32*:*)
- # uname -m includes "-pc" on this system.
- echo ${UNAME_MACHINE}-mingw32
+ # uname -m includes "-pc" on this system.
+ echo ${UNAME_MACHINE}-mingw32
exit ;;
i*:PW*:*)
echo ${UNAME_MACHINE}-pc-pw32
exit ;;
*:Interix*:*)
- case ${UNAME_MACHINE} in
+ case ${UNAME_MACHINE} in
x86)
echo i586-pc-interix${UNAME_RELEASE}
exit ;;
@@ -867,7 +870,7 @@ EOF
EV6) UNAME_MACHINE=alphaev6 ;;
EV67) UNAME_MACHINE=alphaev67 ;;
EV68*) UNAME_MACHINE=alphaev68 ;;
- esac
+ esac
objdump --private-headers /bin/sh | grep -q ld.so.1
if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
@@ -879,7 +882,13 @@ EOF
then
echo ${UNAME_MACHINE}-unknown-linux-gnu
else
- echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
+ else
+ echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
+ fi
fi
exit ;;
avr32*:Linux:*:*)
@@ -892,7 +901,7 @@ EOF
echo crisv32-axis-linux-gnu
exit ;;
frv:Linux:*:*)
- echo frv-unknown-linux-gnu
+ echo frv-unknown-linux-gnu
exit ;;
i*86:Linux:*:*)
LIBC=gnu
@@ -960,7 +969,7 @@ EOF
echo ${UNAME_MACHINE}-ibm-linux
exit ;;
sh64*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
sh*:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
@@ -968,6 +977,9 @@ EOF
sparc:Linux:*:* | sparc64:Linux:*:*)
echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
+ tile*:Linux:*:*)
+ echo ${UNAME_MACHINE}-tilera-linux-gnu
+ exit ;;
vax:Linux:*:*)
echo ${UNAME_MACHINE}-dec-linux-gnu
exit ;;
@@ -975,7 +987,7 @@ EOF
echo x86_64-unknown-linux-gnu
exit ;;
xtensa*:Linux:*:*)
- echo ${UNAME_MACHINE}-unknown-linux-gnu
+ echo ${UNAME_MACHINE}-unknown-linux-gnu
exit ;;
i*86:DYNIX/ptx:4*:*)
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
@@ -984,11 +996,11 @@ EOF
echo i386-sequent-sysv4
exit ;;
i*86:UNIX_SV:4.2MP:2.*)
- # Unixware is an offshoot of SVR4, but it has its own version
- # number series starting with 2...
- # I am not positive that other SVR4 systems won't match this,
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
# I just have to hope. -- rms.
- # Use sysv4.2uw... so that sysv4* matches it.
+ # Use sysv4.2uw... so that sysv4* matches it.
echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
exit ;;
i*86:OS/2:*:*)
@@ -1020,7 +1032,7 @@ EOF
fi
exit ;;
i*86:*:5:[678]*)
- # UnixWare 7.x, OpenUNIX and OpenServer 6.
+ # UnixWare 7.x, OpenUNIX and OpenServer 6.
case `/bin/uname -X | grep "^Machine"` in
*486*) UNAME_MACHINE=i486 ;;
*Pentium) UNAME_MACHINE=i586 ;;
@@ -1048,13 +1060,13 @@ EOF
exit ;;
pc:*:*:*)
# Left here for compatibility:
- # uname -m prints for DJGPP always 'pc', but it prints nothing about
- # the processor, so we play safe by assuming i586.
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i586.
# Note: whatever this is, it MUST be the same as what config.sub
# prints for the "djgpp" host, or else GDB configury will decide that
# this is a cross-build.
echo i586-pc-msdosdjgpp
- exit ;;
+ exit ;;
Intel:Mach:3*:*)
echo i386-pc-mach3
exit ;;
@@ -1089,8 +1101,8 @@ EOF
/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
&& { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
- /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
- && { echo i486-ncr-sysv4; exit; } ;;
+ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+ && { echo i486-ncr-sysv4; exit; } ;;
NCR*:*:4.2:* | MPRAS*:*:4.2:*)
OS_REL='.3'
test -r /etc/.relid \
@@ -1133,10 +1145,10 @@ EOF
echo ns32k-sni-sysv
fi
exit ;;
- PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- echo i586-unisys-sysv4
- exit ;;
+ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ echo i586-unisys-sysv4
+ exit ;;
*:UNIX_System_V:4*:FTX*)
# From Gerald Hewes <[email protected]>.
# How about differentiating between stratus architectures? -djm
@@ -1162,11 +1174,11 @@ EOF
exit ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
- echo mips-nec-sysv${UNAME_RELEASE}
+ echo mips-nec-sysv${UNAME_RELEASE}
else
- echo mips-unknown-sysv${UNAME_RELEASE}
+ echo mips-unknown-sysv${UNAME_RELEASE}
fi
- exit ;;
+ exit ;;
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
echo powerpc-be-beos
exit ;;
@@ -1231,6 +1243,9 @@ EOF
*:QNX:*:4*)
echo i386-pc-qnx
exit ;;
+ NEO-?:NONSTOP_KERNEL:*:*)
+ echo neo-tandem-nsk${UNAME_RELEASE}
+ exit ;;
NSE-?:NONSTOP_KERNEL:*:*)
echo nse-tandem-nsk${UNAME_RELEASE}
exit ;;
@@ -1276,13 +1291,13 @@ EOF
echo pdp10-unknown-its
exit ;;
SEI:*:*:SEIUX)
- echo mips-sei-seiux${UNAME_RELEASE}
+ echo mips-sei-seiux${UNAME_RELEASE}
exit ;;
*:DragonFly:*:*)
echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
exit ;;
*:*VMS:*:*)
- UNAME_MACHINE=`(uname -p) 2>/dev/null`
+ UNAME_MACHINE=`(uname -p) 2>/dev/null`
case "${UNAME_MACHINE}" in
A*) echo alpha-dec-vms ; exit ;;
I*) echo ia64-dec-vms ; exit ;;
@@ -1322,11 +1337,11 @@ main ()
#include <sys/param.h>
printf ("m68k-sony-newsos%s\n",
#ifdef NEWSOS4
- "4"
+ "4"
#else
- ""
+ ""
#endif
- ); exit (0);
+ ); exit (0);
#endif
#endif
diff --git a/config/config.sub b/config/config.sub
index ae35431611..30fdca8121 100755
--- a/config/config.sub
+++ b/config/config.sub
@@ -1,10 +1,10 @@
#! /bin/sh
# Configuration validation subroutine script.
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
-# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
-# Free Software Foundation, Inc.
+# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
+# 2011 Free Software Foundation, Inc.
-timestamp='2010-03-22'
+timestamp='2011-03-23'
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
@@ -76,7 +76,7 @@ version="\
GNU config.sub ($timestamp)
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free
Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
@@ -124,8 +124,9 @@ esac
# Here we must recognize all the valid KERNEL-OS combinations.
maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
case $maybe_os in
- nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
- uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
+ nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
+ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
+ knetbsd*-gnu* | netbsd*-gnu* | \
kopensolaris*-gnu* | \
storm-chaos* | os2-emx* | rtmk-nova*)
os=-$maybe_os
@@ -157,8 +158,8 @@ case $os in
os=
basic_machine=$1
;;
- -bluegene*)
- os=-cnk
+ -bluegene*)
+ os=-cnk
;;
-sim | -cisco | -oki | -wec | -winbond)
os=
@@ -174,10 +175,10 @@ case $os in
os=-chorusos
basic_machine=$1
;;
- -chorusrdb)
- os=-chorusrdb
+ -chorusrdb)
+ os=-chorusrdb
basic_machine=$1
- ;;
+ ;;
-hiux*)
os=-hiuxwe2
;;
@@ -282,11 +283,13 @@ case $basic_machine in
| moxie \
| mt \
| msp430 \
+ | nds32 | nds32le | nds32be \
| nios | nios2 \
| ns16k | ns32k \
+ | open8 \
| or32 \
| pdp10 | pdp11 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+ | powerpc | powerpc64 | powerpc64le | powerpcle \
| pyramid \
| rx \
| score \
@@ -294,12 +297,12 @@ case $basic_machine in
| sh64 | sh64le \
| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
- | spu | strongarm \
- | tahoe | thumb | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
+ | spu \
+ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
| ubicom32 \
| v850 | v850e \
| we32k \
- | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
+ | x86 | xc16x | xstormy16 | xtensa \
| z8k | z80)
basic_machine=$basic_machine-unknown
;;
@@ -323,6 +326,18 @@ case $basic_machine in
basic_machine=mt-unknown
;;
+ strongarm | thumb | xscale)
+ basic_machine=arm-unknown
+ ;;
+
+ xscaleeb)
+ basic_machine=armeb-unknown
+ ;;
+
+ xscaleel)
+ basic_machine=armel-unknown
+ ;;
+
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
# (2) the word "unknown" tends to confuse beginning users.
@@ -377,26 +392,28 @@ case $basic_machine in
| mmix-* \
| mt-* \
| msp430-* \
+ | nds32-* | nds32le-* | nds32be-* \
| nios-* | nios2-* \
| none-* | np1-* | ns16k-* | ns32k-* \
+ | open8-* \
| orion-* \
| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
| pyramid-* \
| romp-* | rs6000-* | rx-* \
| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
| sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
- | tahoe-* | thumb-* \
+ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
+ | tahoe-* \
| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
| tile-* | tilegx-* \
| tron-* \
| ubicom32-* \
| v850-* | v850e-* | vax-* \
| we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
+ | x86-* | x86_64-* | xc16x-* | xps100-* \
| xstormy16-* | xtensa*-* \
| ymp-* \
| z8k-* | z80-*)
@@ -421,7 +438,7 @@ case $basic_machine in
basic_machine=a29k-amd
os=-udi
;;
- abacus)
+ abacus)
basic_machine=abacus-unknown
;;
adobe68k)
@@ -504,7 +521,7 @@ case $basic_machine in
basic_machine=c90-cray
os=-unicos
;;
- cegcc)
+ cegcc)
basic_machine=arm-unknown
os=-cegcc
;;
@@ -536,7 +553,7 @@ case $basic_machine in
basic_machine=craynv-cray
os=-unicosmp
;;
- cr16)
+ cr16 | cr16-*)
basic_machine=cr16-unknown
os=-elf
;;
@@ -752,7 +769,7 @@ case $basic_machine in
basic_machine=ns32k-utek
os=-sysv
;;
- microblaze)
+ microblaze)
basic_machine=microblaze-xilinx
;;
mingw32)
@@ -859,6 +876,12 @@ case $basic_machine in
np1)
basic_machine=np1-gould
;;
+ neo-tandem)
+ basic_machine=neo-tandem
+ ;;
+ nse-tandem)
+ basic_machine=nse-tandem
+ ;;
nsr-tandem)
basic_machine=nsr-tandem
;;
@@ -941,9 +964,10 @@ case $basic_machine in
;;
power) basic_machine=power-ibm
;;
- ppc) basic_machine=powerpc-unknown
+ ppc | ppcbe) basic_machine=powerpc-unknown
;;
- ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ppc-* | ppcbe-*)
+ basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
ppcle | powerpclittle | ppc-le | powerpc-little)
basic_machine=powerpcle-unknown
@@ -1037,6 +1061,9 @@ case $basic_machine in
basic_machine=i860-stratus
os=-sysv4
;;
+ strongarm-* | thumb-*)
+ basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+ ;;
sun2)
basic_machine=m68000-sun
;;
@@ -1093,8 +1120,8 @@ case $basic_machine in
basic_machine=t90-cray
os=-unicos
;;
- # This must be matched before tile*.
- tilegx*)
+ # This must be matched before tile*.
+ tilegx*)
basic_machine=tilegx-unknown
os=-linux-gnu
;;
@@ -1169,6 +1196,9 @@ case $basic_machine in
xps | xps100)
basic_machine=xps100-honeywell
;;
+ xscale-* | xscalee[bl]-*)
+ basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+ ;;
ymp)
basic_machine=ymp-cray
os=-unicos
@@ -1266,11 +1296,11 @@ esac
if [ x"$os" != x"" ]
then
case $os in
- # First match some system type aliases
- # that might get confused with valid system types.
+ # First match some system type aliases
+ # that might get confused with valid system types.
# -solaris* is a basic system type, with this one exception.
- -auroraux)
- os=-auroraux
+ -auroraux)
+ os=-auroraux
;;
-solaris1 | -solaris1.*)
os=`echo $os | sed -e 's|solaris1|sunos4|'`
@@ -1307,7 +1337,8 @@ case $os in
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
| -chorusos* | -chorusrdb* | -cegcc* \
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
+ | -mingw32* | -linux-gnu* | -linux-android* \
+ | -linux-newlib* | -linux-uclibc* \
| -uxpv* | -beos* | -mpeix* | -udk* \
| -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
| -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
@@ -1354,7 +1385,7 @@ case $os in
-opened*)
os=-openedition
;;
- -os400*)
+ -os400*)
os=-os400
;;
-wince*)
@@ -1403,7 +1434,7 @@ case $os in
-sinix*)
os=-sysv4
;;
- -tpf*)
+ -tpf*)
os=-tpf
;;
-triton*)
@@ -1448,8 +1479,8 @@ case $os in
-dicos*)
os=-dicos
;;
- -nacl*)
- ;;
+ -nacl*)
+ ;;
-none)
;;
*)
@@ -1472,10 +1503,10 @@ else
# system, and we'll never get to this point.
case $basic_machine in
- score-*)
+ score-*)
os=-elf
;;
- spu-*)
+ spu-*)
os=-elf
;;
*-acorn)
@@ -1487,8 +1518,8 @@ case $basic_machine in
arm*-semi)
os=-aout
;;
- c4x-* | tic4x-*)
- os=-coff
+ c4x-* | tic4x-*)
+ os=-coff
;;
tic54x-*)
os=-coff
@@ -1524,7 +1555,7 @@ case $basic_machine in
m68*-cisco)
os=-aout
;;
- mep-*)
+ mep-*)
os=-elf
;;
mips*-cisco)
@@ -1551,7 +1582,7 @@ case $basic_machine in
*-ibm)
os=-aix
;;
- *-knuth)
+ *-knuth)
os=-mmixware
;;
*-wec)
diff --git a/config/docbook.m4 b/config/docbook.m4
index 0d8c1fad7e..636aefed4c 100644
--- a/config/docbook.m4
+++ b/config/docbook.m4
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/config/docbook.m4,v 1.11 2009/08/04 22:04:37 petere Exp $
+# config/docbook.m4
# PGAC_PROG_JADE
# --------------
diff --git a/config/general.m4 b/config/general.m4
index 52f850ea25..95d65ceb09 100644
--- a/config/general.m4
+++ b/config/general.m4
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/config/general.m4,v 1.11 2009/07/02 18:55:40 petere Exp $
+# config/general.m4
# This file defines new macros to process configure command line
# arguments, to replace the brain-dead AC_ARG_WITH and AC_ARG_ENABLE.
@@ -90,7 +90,7 @@ dnl values. But we only want it to appear once in the help. We achieve
dnl that by making the help string look the same, which is why we need to
dnl save the default that was passed in previously.
m4_define([_pgac_helpdefault], m4_ifdef([pgac_defined_$1_$2_bool], [m4_defn([pgac_defined_$1_$2_bool])], [$3]))dnl
-PGAC_ARG([$1], [$2], [m4_if(_pgac_helpdefault, yes, -)], [$4], [$5], [$6],
+PGAC_ARG([$1], [$2], [m4_if(_pgac_helpdefault, yes, -)], [$4], [$5], [$6],
[AC_MSG_ERROR([no argument expected for --$1-$2 option])],
[m4_case([$3],
yes, [pgac_arg_to_variable([$1], [$2])=yes
diff --git a/config/install-sh b/config/install-sh
index bdcfd39c63..fdca6338c2 100755
--- a/config/install-sh
+++ b/config/install-sh
@@ -1,7 +1,7 @@
#!/bin/sh
# install - install a program, script, or datafile
-# $PostgreSQL: pgsql/config/install-sh,v 1.8 2009/08/26 22:24:42 petere Exp $
+# config/install-sh
scriptversion=2009-08-26.20
diff --git a/config/missing b/config/missing
index 5426c6d2ec..6df77e9473 100755
--- a/config/missing
+++ b/config/missing
@@ -1,6 +1,6 @@
#! /bin/sh
-# $PostgreSQL: pgsql/config/missing,v 1.7 2010/02/22 21:16:50 momjian Exp $
+# config/missing
# This is *not* the GNU `missing' script, although it is similar in
# concept. You can call it from the makefiles to get consistent
diff --git a/config/perl.m4 b/config/perl.m4
index 165034b0fd..d602a5bb1b 100644
--- a/config/perl.m4
+++ b/config/perl.m4
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/config/perl.m4,v 1.9 2010/02/23 18:35:06 tgl Exp $
+# config/perl.m4
# PGAC_PATH_PERL
@@ -24,7 +24,7 @@ fi
if test -z "$PERL"; then
AC_MSG_WARN([
-*** Without Perl you will not be able to build PostgreSQL from CVS.
+*** Without Perl you will not be able to build PostgreSQL from Git.
*** You can obtain Perl from any CPAN mirror site.
*** (If you are using the official distribution of PostgreSQL then you do not
*** need to worry about this, because the Perl output is pre-generated.)])
diff --git a/config/prep_buildtree b/config/prep_buildtree
index 57d7719673..5b72c392f6 100644
--- a/config/prep_buildtree
+++ b/config/prep_buildtree
@@ -22,7 +22,11 @@ sourcetree=`cd $1 && pwd`
buildtree=`cd ${2:-'.'} && pwd`
-for item in `find "$sourcetree" -type d \( -name CVS -prune -o -print \)`; do
+# We must not auto-create the subdirectories holding built documentation.
+# If we did, it would interfere with installation of prebuilt docs from
+# the source tree, if a VPATH build is done from a distribution tarball.
+# See bug #5595.
+for item in `find "$sourcetree" -type d \( \( -name CVS -prune \) -o \( -name .git -prune \) -o -print \) | grep -v "$sourcetree/doc/src/sgml/\+"`; do
subdir=`expr "$item" : "$sourcetree\(.*\)"`
if test ! -d "$buildtree/$subdir"; then
mkdir -p "$buildtree/$subdir" || exit 1
diff --git a/config/programs.m4 b/config/programs.m4
index 594729cbb1..565195d06d 100644
--- a/config/programs.m4
+++ b/config/programs.m4
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/config/programs.m4,v 1.28 2010/02/22 21:16:50 momjian Exp $
+# config/programs.m4
# PGAC_PATH_BISON
@@ -27,7 +27,7 @@ fi
if test -z "$BISON"; then
AC_MSG_WARN([
-*** Without Bison you will not be able to build PostgreSQL from CVS nor
+*** Without Bison you will not be able to build PostgreSQL from Git nor
*** change any of the parser definition files. You can obtain Bison from
*** a GNU mirror site. (If you are using the official distribution of
*** PostgreSQL then you do not need to worry about this, because the Bison
@@ -89,7 +89,7 @@ fi
if test x"$pgac_cv_path_flex" = x"no"; then
AC_MSG_WARN([
-*** Without Flex you will not be able to build PostgreSQL from CVS nor
+*** Without Flex you will not be able to build PostgreSQL from Git nor
*** change any of the scanner definition files. You can obtain Flex from
*** a GNU mirror site. (If you are using the official distribution of
*** PostgreSQL then you do not need to worry about this because the Flex
@@ -117,7 +117,7 @@ AC_SUBST(FLEXFLAGS)
AC_DEFUN([PGAC_CHECK_READLINE],
[AC_REQUIRE([AC_CANONICAL_HOST])
-AC_CACHE_VAL([pgac_cv_check_readline],
+AC_CACHE_CHECK([for library containing readline], [pgac_cv_check_readline],
[pgac_cv_check_readline=no
pgac_save_LIBS=$LIBS
if test x"$with_libedit_preferred" != x"yes"
@@ -125,7 +125,6 @@ then READLINE_ORDER="-lreadline -ledit"
else READLINE_ORDER="-ledit -lreadline"
fi
for pgac_rllib in $READLINE_ORDER ; do
- AC_MSG_CHECKING([for ${pgac_rllib}])
for pgac_lib in "" " -ltermcap" " -lncurses" " -lcurses" ; do
LIBS="${pgac_rllib}${pgac_lib} $pgac_save_LIBS"
AC_TRY_LINK_FUNC([readline], [[
@@ -144,14 +143,11 @@ for pgac_rllib in $READLINE_ORDER ; do
]])
done
if test "$pgac_cv_check_readline" != no ; then
- AC_MSG_RESULT([yes ($pgac_cv_check_readline)])
break
- else
- AC_MSG_RESULT(no)
fi
done
LIBS=$pgac_save_LIBS
-])[]dnl AC_CACHE_VAL
+])[]dnl AC_CACHE_CHECK
if test "$pgac_cv_check_readline" != no ; then
LIBS="$pgac_cv_check_readline $LIBS"
@@ -167,8 +163,8 @@ fi
# Readline versions < 2.1 don't have rl_completion_append_character
AC_DEFUN([PGAC_VAR_RL_COMPLETION_APPEND_CHARACTER],
-[AC_MSG_CHECKING([for rl_completion_append_character])
-AC_TRY_LINK([#include <stdio.h>
+[AC_CACHE_CHECK([for rl_completion_append_character], pgac_cv_var_rl_completion_append_character,
+[AC_TRY_LINK([#include <stdio.h>
#ifdef HAVE_READLINE_READLINE_H
# include <readline/readline.h>
#elif defined(HAVE_READLINE_H)
@@ -176,10 +172,12 @@ AC_TRY_LINK([#include <stdio.h>
#endif
],
[rl_completion_append_character = 'x';],
-[AC_MSG_RESULT(yes)
+[pgac_cv_var_rl_completion_append_character=yes],
+[pgac_cv_var_rl_completion_append_character=no])])
+if test x"$pgac_cv_var_rl_completion_append_character" = x"yes"; then
AC_DEFINE(HAVE_RL_COMPLETION_APPEND_CHARACTER, 1,
- [Define to 1 if you have the global variable 'rl_completion_append_character'.])],
-[AC_MSG_RESULT(no)])])# PGAC_VAR_RL_COMPLETION_APPEND_CHARACTER
+ [Define to 1 if you have the global variable 'rl_completion_append_character'.])
+fi])# PGAC_VAR_RL_COMPLETION_APPEND_CHARACTER
diff --git a/config/python.m4 b/config/python.m4
index 7b6a14ed21..ec357c2e48 100644
--- a/config/python.m4
+++ b/config/python.m4
@@ -1,7 +1,7 @@
#
# Autoconf macros for configuring the build of Python extension modules
#
-# $PostgreSQL: pgsql/config/python.m4,v 1.18 2010/03/17 22:02:44 petere Exp $
+# config/python.m4
#
# PGAC_PATH_PYTHON
diff --git a/config/tcl.m4 b/config/tcl.m4
index ae0d3b78be..e8860573a6 100644
--- a/config/tcl.m4
+++ b/config/tcl.m4
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/config/tcl.m4,v 1.8 2009/02/03 01:24:57 adunstan Exp $
+# config/tcl.m4
# Autoconf macros to check for Tcl related things
diff --git a/configure b/configure
index 57676d71ce..abba43d594 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.63 for PostgreSQL 9.0beta3.
+# Generated by GNU Autoconf 2.63 for PostgreSQL 9.1beta2.
#
# Report bugs to <[email protected]>.
#
@@ -9,7 +9,7 @@
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
#
-# Copyright (c) 1996-2010, PostgreSQL Global Development Group
+# Copyright (c) 1996-2011, PostgreSQL Global Development Group
## --------------------- ##
## M4sh Initialization. ##
## --------------------- ##
@@ -599,8 +599,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='PostgreSQL'
PACKAGE_TARNAME='postgresql'
-PACKAGE_VERSION='9.0beta3'
-PACKAGE_STRING='PostgreSQL 9.0beta3'
+PACKAGE_VERSION='9.1beta2'
+PACKAGE_STRING='PostgreSQL 9.1beta2'
PACKAGE_BUGREPORT='[email protected]'
ac_unique_file="src/backend/access/common/heaptuple.c"
@@ -668,6 +668,7 @@ PTHREAD_CFLAGS
PTHREAD_LIBS
PTHREAD_CC
acx_pthread_config
+have_win32_dbghelp
HAVE_IPV6
LIBOBJS
OSSP_UUID_LIBS
@@ -715,6 +716,7 @@ with_libxslt
with_libxml
XML2_CONFIG
with_ossp_uuid
+with_selinux
with_openssl
with_bonjour
with_ldap
@@ -837,6 +839,7 @@ with_pam
with_ldap
with_bonjour
with_openssl
+with_selinux
with_readline
with_libedit_preferred
with_ossp_uuid
@@ -1413,7 +1416,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.0beta3 to adapt to many kinds of systems.
+\`configure' configures PostgreSQL 9.1beta2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1478,7 +1481,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of PostgreSQL 9.0beta3:";;
+ short | recursive ) echo "Configuration of PostgreSQL 9.1beta2:";;
esac
cat <<\_ACEOF
@@ -1533,11 +1536,11 @@ Optional Packages:
--with-ldap build with LDAP support
--with-bonjour build with Bonjour support
--with-openssl build with OpenSSL support
+ --with-selinux build with SELinux support
--without-readline do not use GNU Readline nor BSD Libedit for editing
--with-libedit-preferred
prefer BSD Libedit over GNU Readline
- --with-ossp-uuid use OSSP UUID library when building
- contrib/uuid-ossp
+ --with-ossp-uuid build contrib/uuid-ossp, requires OSSP UUID library
--with-libxml build with XML support
--with-libxslt use XSLT support when building contrib/xml2
--with-system-tzdata=DIR
@@ -1625,7 +1628,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-PostgreSQL configure 9.0beta3
+PostgreSQL configure 9.1beta2
generated by GNU Autoconf 2.63
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@@ -1633,7 +1636,7 @@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
-Copyright (c) 1996-2010, PostgreSQL Global Development Group
+Copyright (c) 1996-2011, PostgreSQL Global Development Group
_ACEOF
exit
fi
@@ -1641,7 +1644,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.0beta3, which was
+It was created by PostgreSQL $as_me 9.1beta2, which was
generated by GNU Autoconf 2.63. Invocation command line was
$ $0 $@
@@ -2191,6 +2194,7 @@ case $host_os in
bsdi*) template=bsdi ;;
cygwin*) template=cygwin ;;
darwin*) template=darwin ;;
+dragonfly*) template=netbsd ;;
dgux*) template=dgux ;;
freebsd*) template=freebsd ;;
hpux*) template=hpux ;;
@@ -4000,10 +4004,15 @@ fi
if test "$GCC" = yes -a "$ICC" = no; then
CFLAGS="$CFLAGS -Wall -Wmissing-prototypes -Wpointer-arith"
# These work in some but not all gcc versions
- { $as_echo "$as_me:$LINENO: checking if $CC supports -Wdeclaration-after-statement" >&5
-$as_echo_n "checking if $CC supports -Wdeclaration-after-statement... " >&6; }
-pgac_save_CFLAGS=$CFLAGS
+ { $as_echo "$as_me:$LINENO: checking whether $CC supports -Wdeclaration-after-statement" >&5
+$as_echo_n "checking whether $CC supports -Wdeclaration-after-statement... " >&6; }
+if test "${pgac_cv_prog_cc_cflags__Wdeclaration_after_statement+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
CFLAGS="$pgac_save_CFLAGS -Wdeclaration-after-statement"
+ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -4037,23 +4046,33 @@ $as_echo "$ac_try_echo") >&5
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ pgac_cv_prog_cc_cflags__Wdeclaration_after_statement=yes
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- CFLAGS="$pgac_save_CFLAGS"
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ pgac_cv_prog_cc_cflags__Wdeclaration_after_statement=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:$LINENO: result: $pgac_cv_prog_cc_cflags__Wdeclaration_after_statement" >&5
+$as_echo "$pgac_cv_prog_cc_cflags__Wdeclaration_after_statement" >&6; }
+if test x"$pgac_cv_prog_cc_cflags__Wdeclaration_after_statement" = x"yes"; then
+ CFLAGS="$CFLAGS -Wdeclaration-after-statement"
+fi
- { $as_echo "$as_me:$LINENO: checking if $CC supports -Wendif-labels" >&5
-$as_echo_n "checking if $CC supports -Wendif-labels... " >&6; }
-pgac_save_CFLAGS=$CFLAGS
+ { $as_echo "$as_me:$LINENO: checking whether $CC supports -Wendif-labels" >&5
+$as_echo_n "checking whether $CC supports -Wendif-labels... " >&6; }
+if test "${pgac_cv_prog_cc_cflags__Wendif_labels+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
CFLAGS="$pgac_save_CFLAGS -Wendif-labels"
+ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -4087,24 +4106,95 @@ $as_echo "$ac_try_echo") >&5
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ pgac_cv_prog_cc_cflags__Wendif_labels=yes
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- CFLAGS="$pgac_save_CFLAGS"
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ pgac_cv_prog_cc_cflags__Wendif_labels=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:$LINENO: result: $pgac_cv_prog_cc_cflags__Wendif_labels" >&5
+$as_echo "$pgac_cv_prog_cc_cflags__Wendif_labels" >&6; }
+if test x"$pgac_cv_prog_cc_cflags__Wendif_labels" = x"yes"; then
+ CFLAGS="$CFLAGS -Wendif-labels"
+fi
+
+ # This was included in -Wall/-Wformat in older GCC versions
+ { $as_echo "$as_me:$LINENO: checking whether $CC supports -Wformat-security" >&5
+$as_echo_n "checking whether $CC supports -Wformat-security... " >&6; }
+if test "${pgac_cv_prog_cc_cflags__Wformat_security+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
+CFLAGS="$pgac_save_CFLAGS -Wformat-security"
+ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ pgac_cv_prog_cc_cflags__Wformat_security=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ pgac_cv_prog_cc_cflags__Wformat_security=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:$LINENO: result: $pgac_cv_prog_cc_cflags__Wformat_security" >&5
+$as_echo "$pgac_cv_prog_cc_cflags__Wformat_security" >&6; }
+if test x"$pgac_cv_prog_cc_cflags__Wformat_security" = x"yes"; then
+ CFLAGS="$CFLAGS -Wformat-security"
+fi
# Disable strict-aliasing rules; needed for gcc 3.3+
- { $as_echo "$as_me:$LINENO: checking if $CC supports -fno-strict-aliasing" >&5
-$as_echo_n "checking if $CC supports -fno-strict-aliasing... " >&6; }
-pgac_save_CFLAGS=$CFLAGS
+ { $as_echo "$as_me:$LINENO: checking whether $CC supports -fno-strict-aliasing" >&5
+$as_echo_n "checking whether $CC supports -fno-strict-aliasing... " >&6; }
+if test "${pgac_cv_prog_cc_cflags__fno_strict_aliasing+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
CFLAGS="$pgac_save_CFLAGS -fno-strict-aliasing"
+ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -4138,24 +4228,34 @@ $as_echo "$ac_try_echo") >&5
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ pgac_cv_prog_cc_cflags__fno_strict_aliasing=yes
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- CFLAGS="$pgac_save_CFLAGS"
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ pgac_cv_prog_cc_cflags__fno_strict_aliasing=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:$LINENO: result: $pgac_cv_prog_cc_cflags__fno_strict_aliasing" >&5
+$as_echo "$pgac_cv_prog_cc_cflags__fno_strict_aliasing" >&6; }
+if test x"$pgac_cv_prog_cc_cflags__fno_strict_aliasing" = x"yes"; then
+ CFLAGS="$CFLAGS -fno-strict-aliasing"
+fi
# Disable optimizations that assume no overflow; needed for gcc 4.3+
- { $as_echo "$as_me:$LINENO: checking if $CC supports -fwrapv" >&5
-$as_echo_n "checking if $CC supports -fwrapv... " >&6; }
-pgac_save_CFLAGS=$CFLAGS
+ { $as_echo "$as_me:$LINENO: checking whether $CC supports -fwrapv" >&5
+$as_echo_n "checking whether $CC supports -fwrapv... " >&6; }
+if test "${pgac_cv_prog_cc_cflags__fwrapv+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
CFLAGS="$pgac_save_CFLAGS -fwrapv"
+ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -4189,26 +4289,36 @@ $as_echo "$ac_try_echo") >&5
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ pgac_cv_prog_cc_cflags__fwrapv=yes
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- CFLAGS="$pgac_save_CFLAGS"
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ pgac_cv_prog_cc_cflags__fwrapv=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:$LINENO: result: $pgac_cv_prog_cc_cflags__fwrapv" >&5
+$as_echo "$pgac_cv_prog_cc_cflags__fwrapv" >&6; }
+if test x"$pgac_cv_prog_cc_cflags__fwrapv" = x"yes"; then
+ CFLAGS="$CFLAGS -fwrapv"
+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.
- { $as_echo "$as_me:$LINENO: checking if $CC supports -mp1" >&5
-$as_echo_n "checking if $CC supports -mp1... " >&6; }
-pgac_save_CFLAGS=$CFLAGS
+ { $as_echo "$as_me:$LINENO: checking whether $CC supports -mp1" >&5
+$as_echo_n "checking whether $CC supports -mp1... " >&6; }
+if test "${pgac_cv_prog_cc_cflags__mp1+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
CFLAGS="$pgac_save_CFLAGS -mp1"
+ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -4242,24 +4352,34 @@ $as_echo "$ac_try_echo") >&5
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ pgac_cv_prog_cc_cflags__mp1=yes
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- CFLAGS="$pgac_save_CFLAGS"
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ pgac_cv_prog_cc_cflags__mp1=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:$LINENO: result: $pgac_cv_prog_cc_cflags__mp1" >&5
+$as_echo "$pgac_cv_prog_cc_cflags__mp1" >&6; }
+if test x"$pgac_cv_prog_cc_cflags__mp1" = x"yes"; then
+ CFLAGS="$CFLAGS -mp1"
+fi
# Make sure strict aliasing is off (though this is said to be the default)
- { $as_echo "$as_me:$LINENO: checking if $CC supports -fno-strict-aliasing" >&5
-$as_echo_n "checking if $CC supports -fno-strict-aliasing... " >&6; }
-pgac_save_CFLAGS=$CFLAGS
+ { $as_echo "$as_me:$LINENO: checking whether $CC supports -fno-strict-aliasing" >&5
+$as_echo_n "checking whether $CC supports -fno-strict-aliasing... " >&6; }
+if test "${pgac_cv_prog_cc_cflags__fno_strict_aliasing+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
CFLAGS="$pgac_save_CFLAGS -fno-strict-aliasing"
+ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -4293,25 +4413,35 @@ $as_echo "$ac_try_echo") >&5
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ pgac_cv_prog_cc_cflags__fno_strict_aliasing=yes
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- CFLAGS="$pgac_save_CFLAGS"
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ pgac_cv_prog_cc_cflags__fno_strict_aliasing=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:$LINENO: result: $pgac_cv_prog_cc_cflags__fno_strict_aliasing" >&5
+$as_echo "$pgac_cv_prog_cc_cflags__fno_strict_aliasing" >&6; }
+if test x"$pgac_cv_prog_cc_cflags__fno_strict_aliasing" = x"yes"; then
+ CFLAGS="$CFLAGS -fno-strict-aliasing"
+fi
elif test "$PORTNAME" = "aix"; then
# AIX's xlc has to have strict aliasing turned off too
- { $as_echo "$as_me:$LINENO: checking if $CC supports -qnoansialias" >&5
-$as_echo_n "checking if $CC supports -qnoansialias... " >&6; }
-pgac_save_CFLAGS=$CFLAGS
+ { $as_echo "$as_me:$LINENO: checking whether $CC supports -qnoansialias" >&5
+$as_echo_n "checking whether $CC supports -qnoansialias... " >&6; }
+if test "${pgac_cv_prog_cc_cflags__qnoansialias+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
CFLAGS="$pgac_save_CFLAGS -qnoansialias"
+ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
@@ -4345,18 +4475,86 @@ $as_echo "$ac_try_echo") >&5
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ pgac_cv_prog_cc_cflags__qnoansialias=yes
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- CFLAGS="$pgac_save_CFLAGS"
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ pgac_cv_prog_cc_cflags__qnoansialias=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:$LINENO: result: $pgac_cv_prog_cc_cflags__qnoansialias" >&5
+$as_echo "$pgac_cv_prog_cc_cflags__qnoansialias" >&6; }
+if test x"$pgac_cv_prog_cc_cflags__qnoansialias" = x"yes"; then
+ CFLAGS="$CFLAGS -qnoansialias"
+fi
+
+elif test "$PORTNAME" = "hpux"; then
+ # On some versions of HP-UX, libm functions do not set errno by default.
+ # Fix that by using +Olibmerrno if the compiler recognizes it.
+ { $as_echo "$as_me:$LINENO: checking whether $CC supports +Olibmerrno" >&5
+$as_echo_n "checking whether $CC supports +Olibmerrno... " >&6; }
+if test "${pgac_cv_prog_cc_cflags_pOlibmerrno+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_CFLAGS=$CFLAGS
+CFLAGS="$pgac_save_CFLAGS +Olibmerrno"
+ac_save_c_werror_flag=$ac_c_werror_flag
+ac_c_werror_flag=yes
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ pgac_cv_prog_cc_cflags_pOlibmerrno=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ pgac_cv_prog_cc_cflags_pOlibmerrno=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:$LINENO: result: $pgac_cv_prog_cc_cflags_pOlibmerrno" >&5
+$as_echo "$pgac_cv_prog_cc_cflags_pOlibmerrno" >&6; }
+if test x"$pgac_cv_prog_cc_cflags_pOlibmerrno" = x"yes"; then
+ CFLAGS="$CFLAGS +Olibmerrno"
+fi
fi
@@ -5315,6 +5513,40 @@ fi
$as_echo "$with_openssl" >&6; }
+#
+# SELinux
+#
+{ $as_echo "$as_me:$LINENO: checking whether to build with SELinux support" >&5
+$as_echo_n "checking whether to build with SELinux support... " >&6; }
+
+
+
+# Check whether --with-selinux was given.
+if test "${with_selinux+set}" = set; then
+ withval=$with_selinux;
+ case $withval in
+ yes)
+ :
+ ;;
+ no)
+ :
+ ;;
+ *)
+ { { $as_echo "$as_me:$LINENO: error: no argument expected for --with-selinux option" >&5
+$as_echo "$as_me: error: no argument expected for --with-selinux option" >&2;}
+ { (exit 1); exit 1; }; }
+ ;;
+ esac
+
+else
+ with_selinux=no
+
+fi
+
+
+
+{ $as_echo "$as_me:$LINENO: result: $with_selinux" >&5
+$as_echo "$with_selinux" >&6; }
#
# Readline
@@ -6739,13 +6971,13 @@ fi
if test -z "$BISON"; then
{ $as_echo "$as_me:$LINENO: WARNING:
-*** Without Bison you will not be able to build PostgreSQL from CVS nor
+*** Without Bison you will not be able to build PostgreSQL from Git nor
*** change any of the parser definition files. You can obtain Bison from
*** a GNU mirror site. (If you are using the official distribution of
*** PostgreSQL then you do not need to worry about this, because the Bison
*** output is pre-generated.)" >&5
$as_echo "$as_me: WARNING:
-*** Without Bison you will not be able to build PostgreSQL from CVS nor
+*** Without Bison you will not be able to build PostgreSQL from Git nor
*** change any of the parser definition files. You can obtain Bison from
*** a GNU mirror site. (If you are using the official distribution of
*** PostgreSQL then you do not need to worry about this, because the Bison
@@ -6803,13 +7035,13 @@ fi
$as_echo "$pgac_cv_path_flex" >&6; }
if test x"$pgac_cv_path_flex" = x"no"; then
{ $as_echo "$as_me:$LINENO: WARNING:
-*** Without Flex you will not be able to build PostgreSQL from CVS nor
+*** Without Flex you will not be able to build PostgreSQL from Git nor
*** change any of the scanner definition files. You can obtain Flex from
*** a GNU mirror site. (If you are using the official distribution of
*** PostgreSQL then you do not need to worry about this because the Flex
*** output is pre-generated.)" >&5
$as_echo "$as_me: WARNING:
-*** Without Flex you will not be able to build PostgreSQL from CVS nor
+*** Without Flex you will not be able to build PostgreSQL from Git nor
*** change any of the scanner definition files. You can obtain Flex from
*** a GNU mirror site. (If you are using the official distribution of
*** PostgreSQL then you do not need to worry about this because the Flex
@@ -6890,12 +7122,12 @@ fi
if test -z "$PERL"; then
{ $as_echo "$as_me:$LINENO: WARNING:
-*** Without Perl you will not be able to build PostgreSQL from CVS.
+*** Without Perl you will not be able to build PostgreSQL from Git.
*** You can obtain Perl from any CPAN mirror site.
*** (If you are using the official distribution of PostgreSQL then you do not
*** need to worry about this, because the Perl output is pre-generated.)" >&5
$as_echo "$as_me: WARNING:
-*** Without Perl you will not be able to build PostgreSQL from CVS.
+*** Without Perl you will not be able to build PostgreSQL from Git.
*** You can obtain Perl from any CPAN mirror site.
*** (If you are using the official distribution of PostgreSQL then you do not
*** need to worry about this, because the Perl output is pre-generated.)" >&2;}
@@ -8082,6 +8314,8 @@ fi
if test "$with_readline" = yes; then
+{ $as_echo "$as_me:$LINENO: checking for library containing readline" >&5
+$as_echo_n "checking for library containing readline... " >&6; }
if test "${pgac_cv_check_readline+set}" = set; then
$as_echo_n "(cached) " >&6
else
@@ -8092,8 +8326,6 @@ then READLINE_ORDER="-lreadline -ledit"
else READLINE_ORDER="-ledit -lreadline"
fi
for pgac_rllib in $READLINE_ORDER ; do
- { $as_echo "$as_me:$LINENO: checking for ${pgac_rllib}" >&5
-$as_echo_n "checking for ${pgac_rllib}... " >&6; }
for pgac_lib in "" " -ltermcap" " -lncurses" " -lcurses" ; do
LIBS="${pgac_rllib}${pgac_lib} $pgac_save_LIBS"
cat >conftest.$ac_ext <<_ACEOF
@@ -8165,18 +8397,14 @@ rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
conftest$ac_exeext conftest.$ac_ext
done
if test "$pgac_cv_check_readline" != no ; then
- { $as_echo "$as_me:$LINENO: result: yes ($pgac_cv_check_readline)" >&5
-$as_echo "yes ($pgac_cv_check_readline)" >&6; }
break
- else
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
fi
done
LIBS=$pgac_save_LIBS
fi
-
+{ $as_echo "$as_me:$LINENO: result: $pgac_cv_check_readline" >&5
+$as_echo "$pgac_cv_check_readline" >&6; }
if test "$pgac_cv_check_readline" != no ; then
LIBS="$pgac_cv_check_readline $LIBS"
@@ -9246,6 +9474,89 @@ fi
fi
+# for contrib/sepgsql
+if test "$with_selinux" = yes; then
+
+{ $as_echo "$as_me:$LINENO: checking for selinux_sepgsql_context_path in -lselinux" >&5
+$as_echo_n "checking for selinux_sepgsql_context_path in -lselinux... " >&6; }
+if test "${ac_cv_lib_selinux_selinux_sepgsql_context_path+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_check_lib_save_LIBS=$LIBS
+LIBS="-lselinux $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+/* Override any GCC internal prototype to avoid an error.
+ Use char because int might match the return type of a GCC
+ builtin and then its argument prototype would still apply. */
+#ifdef __cplusplus
+extern "C"
+#endif
+char selinux_sepgsql_context_path ();
+int
+main ()
+{
+return selinux_sepgsql_context_path ();
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_link") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest$ac_exeext && {
+ test "$cross_compiling" = yes ||
+ $as_test_x conftest$ac_exeext
+ }; then
+ ac_cv_lib_selinux_selinux_sepgsql_context_path=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_lib_selinux_selinux_sepgsql_context_path=no
+fi
+
+rm -rf conftest.dSYM
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+ conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_selinux_selinux_sepgsql_context_path" >&5
+$as_echo "$ac_cv_lib_selinux_selinux_sepgsql_context_path" >&6; }
+if test "x$ac_cv_lib_selinux_selinux_sepgsql_context_path" = x""yes; then
+ cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSELINUX 1
+_ACEOF
+
+ LIBS="-lselinux $LIBS"
+
+else
+ { { $as_echo "$as_me:$LINENO: error: library 'libselinux', version 2.0.93 or newer, is required for SELinux support" >&5
+$as_echo "$as_me: error: library 'libselinux', version 2.0.93 or newer, is required for SELinux support" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+fi
+
# for contrib/uuid-ossp
if test "$with_ossp_uuid" = yes ; then
{ $as_echo "$as_me:$LINENO: checking for uuid_export in -lossp-uuid" >&5
@@ -9680,7 +9991,8 @@ 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 kernel/OS.h kernel/image.h SupportDefs.h
+
+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/ucred.h sys/un.h termios.h ucred.h utime.h wchar.h wctype.h kernel/OS.h kernel/image.h SupportDefs.h
do
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
@@ -16607,66 +16919,23 @@ _ACEOF
fi
-{ $as_echo "$as_me:$LINENO: checking for struct cmsgcred" >&5
-$as_echo_n "checking for struct cmsgcred... " >&6; }
-if test "${ac_cv_type_struct_cmsgcred+set}" = set; then
+{ $as_echo "$as_me:$LINENO: checking for locale_t" >&5
+$as_echo_n "checking for locale_t... " >&6; }
+if test "${pgac_cv_type_locale_t+set}" = set; then
$as_echo_n "(cached) " >&6
else
- ac_cv_type_struct_cmsgcred=no
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/ucred.h>
-
-int
-main ()
-{
-if (sizeof (struct cmsgcred))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/ucred.h>
-
+#include <locale.h>
+locale_t x;
int
main ()
{
-if (sizeof ((struct cmsgcred)))
- return 0;
+
;
return 0;
}
@@ -16689,94 +16958,23 @@ $as_echo "$ac_try_echo") >&5
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
- :
+ pgac_cv_type_locale_t=yes
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_type_struct_cmsgcred=yes
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct_cmsgcred" >&5
-$as_echo "$ac_cv_type_struct_cmsgcred" >&6; }
-if test "x$ac_cv_type_struct_cmsgcred" = x""yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_CMSGCRED 1
-_ACEOF
-
-
-fi
-{ $as_echo "$as_me:$LINENO: checking for struct fcred" >&5
-$as_echo_n "checking for struct fcred... " >&6; }
-if test "${ac_cv_type_struct_fcred+set}" = set; then
- $as_echo_n "(cached) " >&6
-else
- ac_cv_type_struct_fcred=no
-cat >conftest.$ac_ext <<_ACEOF
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/ucred.h>
-
+#include <xlocale.h>
+locale_t x;
int
main ()
{
-if (sizeof (struct fcred))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
-$as_echo "$ac_try_echo") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/ucred.h>
-int
-main ()
-{
-if (sizeof ((struct fcred)))
- return 0;
;
return 0;
}
@@ -16799,55 +16997,57 @@ $as_echo "$ac_try_echo") >&5
test -z "$ac_c_werror_flag" ||
test ! -s conftest.err
} && test -s conftest.$ac_objext; then
- :
+ pgac_cv_type_locale_t='yes (in xlocale.h)'
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_type_struct_fcred=yes
+ pgac_cv_type_locale_t=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct_fcred" >&5
-$as_echo "$ac_cv_type_struct_fcred" >&6; }
-if test "x$ac_cv_type_struct_fcred" = x""yes; then
+{ $as_echo "$as_me:$LINENO: result: $pgac_cv_type_locale_t" >&5
+$as_echo "$pgac_cv_type_locale_t" >&6; }
+if test "$pgac_cv_type_locale_t" != no; then
-cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_FCRED 1
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LOCALE_T 1
_ACEOF
+fi
+if test "$pgac_cv_type_locale_t" = 'yes (in xlocale.h)'; then
+
+cat >>confdefs.h <<\_ACEOF
+#define LOCALE_T_IN_XLOCALE 1
+_ACEOF
fi
-{ $as_echo "$as_me:$LINENO: checking for struct sockcred" >&5
-$as_echo_n "checking for struct sockcred... " >&6; }
-if test "${ac_cv_type_struct_sockcred+set}" = set; then
+
+{ $as_echo "$as_me:$LINENO: checking for struct cmsgcred" >&5
+$as_echo_n "checking for struct cmsgcred... " >&6; }
+if test "${ac_cv_type_struct_cmsgcred+set}" = set; then
$as_echo_n "(cached) " >&6
else
- ac_cv_type_struct_sockcred=no
+ ac_cv_type_struct_cmsgcred=no
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <sys/param.h>
-#include <sys/types.h>
#include <sys/socket.h>
+#ifdef HAVE_SYS_UCRED_H
#include <sys/ucred.h>
+#endif
int
main ()
{
-if (sizeof (struct sockcred))
+if (sizeof (struct cmsgcred))
return 0;
;
return 0;
@@ -16877,15 +17077,15 @@ _ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
-#include <sys/param.h>
-#include <sys/types.h>
#include <sys/socket.h>
+#ifdef HAVE_SYS_UCRED_H
#include <sys/ucred.h>
+#endif
int
main ()
{
-if (sizeof ((struct sockcred)))
+if (sizeof ((struct cmsgcred)))
return 0;
;
return 0;
@@ -16914,7 +17114,7 @@ else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- ac_cv_type_struct_sockcred=yes
+ ac_cv_type_struct_cmsgcred=yes
fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
@@ -16927,12 +17127,12 @@ fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
-{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct_sockcred" >&5
-$as_echo "$ac_cv_type_struct_sockcred" >&6; }
-if test "x$ac_cv_type_struct_sockcred" = x""yes; then
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_struct_cmsgcred" >&5
+$as_echo "$ac_cv_type_struct_cmsgcred" >&6; }
+if test "x$ac_cv_type_struct_cmsgcred" = x""yes; then
cat >>confdefs.h <<_ACEOF
-#define HAVE_STRUCT_SOCKCRED 1
+#define HAVE_STRUCT_CMSGCRED 1
_ACEOF
@@ -18473,8 +18673,8 @@ else
if test "${ac_cv_func_accept_arg3+set}" = set; then
$as_echo_n "(cached) " >&6
else
- for ac_cv_func_accept_return in 'int' 'unsigned int PASCAL'; do
- for ac_cv_func_accept_arg1 in 'int' 'unsigned int'; do
+ for ac_cv_func_accept_return in 'int' 'unsigned int PASCAL' 'SOCKET'; do
+ for ac_cv_func_accept_arg1 in 'int' 'unsigned int' 'SOCKET'; do
for ac_cv_func_accept_arg2 in 'struct sockaddr *' 'const struct sockaddr *' 'void *'; do
for ac_cv_func_accept_arg3 in 'int' 'size_t' 'socklen_t' 'unsigned int' 'void'; do
cat >conftest.$ac_ext <<_ACEOF
@@ -18653,7 +18853,7 @@ fi
-for ac_func in cbrt dlopen fcvt fdatasync getifaddrs getpeereid getpeerucred getrlimit memmove poll pstat readlink scandir setproctitle setsid sigprocmask symlink sysconf towlower utime utimes waitpid wcstombs
+for ac_func in cbrt dlopen fcvt fdatasync getifaddrs getpeerucred getrlimit memmove poll pstat readlink scandir setproctitle setsid sigprocmask symlink sysconf towlower utime utimes waitpid wcstombs wcstombs_l
do
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -20224,7 +20424,8 @@ LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'`
-for ac_func in crypt erand48 getopt getrusage inet_aton random rint srandom strdup strerror strlcat strlcpy strtol strtoul
+
+for ac_func in crypt erand48 getopt getpeereid getrusage inet_aton random rint srandom strdup strerror strlcat strlcpy strtol strtoul
do
as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
{ $as_echo "$as_me:$LINENO: checking for $ac_func" >&5
@@ -20714,6 +20915,23 @@ esac
fi
+# mingw has adopted a GNU-centric interpretation of optind/optreset,
+# so always use our version on Windows.
+if test "$PORTNAME" = "win32"; then
+ case " $LIBOBJS " in
+ *" getopt.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS getopt.$ac_objext"
+ ;;
+esac
+
+ case " $LIBOBJS " in
+ *" getopt_long.$ac_objext "* ) ;;
+ *) LIBOBJS="$LIBOBJS getopt_long.$ac_objext"
+ ;;
+esac
+
+fi
+
# Cygwin's erand48() is broken (always returns zero) in some releases,
# so force use of ours.
if test "$PORTNAME" = "cygwin"; then
@@ -20836,25 +21054,25 @@ fi
done
-case " $LIBOBJS " in
+ case " $LIBOBJS " in
*" kill.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS kill.$ac_objext"
;;
esac
-case " $LIBOBJS " in
+ case " $LIBOBJS " in
*" open.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS open.$ac_objext"
;;
esac
-case " $LIBOBJS " in
+ case " $LIBOBJS " in
*" win32env.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS win32env.$ac_objext"
;;
esac
-case " $LIBOBJS " in
+ case " $LIBOBJS " in
*" win32error.$ac_objext "* ) ;;
*) LIBOBJS="$LIBOBJS win32error.$ac_objext"
;;
@@ -20865,12 +21083,137 @@ cat >>confdefs.h <<\_ACEOF
#define HAVE_SYMLINK 1
_ACEOF
+ { $as_echo "$as_me:$LINENO: checking for MINIDUMP_TYPE" >&5
+$as_echo_n "checking for MINIDUMP_TYPE... " >&6; }
+if test "${ac_cv_type_MINIDUMP_TYPE+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_type_MINIDUMP_TYPE=no
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <string.h>
+#include <dbghelp.h>
+
+int
+main ()
+{
+if (sizeof (MINIDUMP_TYPE))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <string.h>
+#include <dbghelp.h>
+
+int
+main ()
+{
+if (sizeof ((MINIDUMP_TYPE)))
+ return 0;
+ ;
+ return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ :
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_cv_type_MINIDUMP_TYPE=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_type_MINIDUMP_TYPE" >&5
+$as_echo "$ac_cv_type_MINIDUMP_TYPE" >&6; }
+if test "x$ac_cv_type_MINIDUMP_TYPE" = x""yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_MINIDUMP_TYPE 1
+_ACEOF
+
+pgac_minidump_type=yes
+else
+ pgac_minidump_type=no
+fi
+
+fi
+if test x"$pgac_minidump_type" = x"yes" ; then
+ have_win32_dbghelp=yes
+
+else
+ have_win32_dbghelp=no
+
fi
if test "$with_readline" = yes; then
{ $as_echo "$as_me:$LINENO: checking for rl_completion_append_character" >&5
$as_echo_n "checking for rl_completion_append_character... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
+if test "${pgac_cv_var_rl_completion_append_character+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -20912,24 +21255,27 @@ $as_echo "$ac_try_echo") >&5
test "$cross_compiling" = yes ||
$as_test_x conftest$ac_exeext
}; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_RL_COMPLETION_APPEND_CHARACTER 1
-_ACEOF
-
+ pgac_cv_var_rl_completion_append_character=yes
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ pgac_cv_var_rl_completion_append_character=no
fi
rm -rf conftest.dSYM
rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $pgac_cv_var_rl_completion_append_character" >&5
+$as_echo "$pgac_cv_var_rl_completion_append_character" >&6; }
+if test x"$pgac_cv_var_rl_completion_append_character" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_RL_COMPLETION_APPEND_CHARACTER 1
+_ACEOF
+
+fi
for ac_func in rl_completion_matches rl_filename_completion_function
@@ -21139,7 +21485,10 @@ fi
{ $as_echo "$as_me:$LINENO: checking for sigsetjmp" >&5
$as_echo_n "checking for sigsetjmp... " >&6; }
-cat >conftest.$ac_ext <<_ACEOF
+if test "${pgac_cv_func_sigsetjmp+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
@@ -21175,24 +21524,27 @@ $as_echo "$ac_try_echo") >&5
test "$cross_compiling" = yes ||
$as_test_x conftest$ac_exeext
}; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_SIGSETJMP 1
-_ACEOF
-
-{ $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ pgac_cv_func_sigsetjmp=yes
else
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+ pgac_cv_func_sigsetjmp=no
fi
rm -rf conftest.dSYM
rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:$LINENO: result: $pgac_cv_func_sigsetjmp" >&5
+$as_echo "$pgac_cv_func_sigsetjmp" >&6; }
+if test x"$pgac_cv_func_sigsetjmp" = x"yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SIGSETJMP 1
+_ACEOF
+
+fi
{ $as_echo "$as_me:$LINENO: checking whether sys_siglist is declared" >&5
$as_echo_n "checking whether sys_siglist is declared... " >&6; }
@@ -22332,7 +22684,8 @@ main (int argc, char **argv)
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
- if test "`(eval $ac_link 2>&1 1>&5)`" = ""; then
+ # 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
# tests for building binaries, not shared libraries.
@@ -27774,6 +28127,13 @@ _ACEOF
SHMEM_IMPLEMENTATION="src/backend/port/win32_shmem.c"
fi
+# Select latch implementation type.
+if test "$PORTNAME" != "win32"; then
+ LATCH_IMPLEMENTATION="src/backend/port/unix_latch.c"
+else
+ LATCH_IMPLEMENTATION="src/backend/port/win32_latch.c"
+fi
+
# If not set in template file, set bytes to use libc memset()
if test x"$MEMSET_LOOP_LIMIT" = x"" ; then
MEMSET_LOOP_LIMIT=1024
@@ -28395,6 +28755,154 @@ fi
CPPFLAGS=$ac_save_CPPFLAGS
fi
+# check for <Python.h>
+if test "$with_python" = yes; then
+ ac_save_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS="$python_includespec $CPPFLAGS"
+ if test "${ac_cv_header_Python_h+set}" = set; then
+ { $as_echo "$as_me:$LINENO: checking for Python.h" >&5
+$as_echo_n "checking for Python.h... " >&6; }
+if test "${ac_cv_header_Python_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_Python_h" >&5
+$as_echo "$ac_cv_header_Python_h" >&6; }
+else
+ # Is the header compilable?
+{ $as_echo "$as_me:$LINENO: checking Python.h usability" >&5
+$as_echo_n "checking Python.h usability... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+$ac_includes_default
+#include <Python.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_compile") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && {
+ test -z "$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ } && test -s conftest.$ac_objext; then
+ ac_header_compiler=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+$as_echo "$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ $as_echo "$as_me:$LINENO: checking Python.h presence" >&5
+$as_echo_n "checking Python.h presence... " >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+#include <Python.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+ *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:$LINENO: $ac_try_echo\""
+$as_echo "$ac_try_echo") >&5
+ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+ ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
+ $as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } >/dev/null && {
+ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+ test ! -s conftest.err
+ }; then
+ ac_header_preproc=yes
+else
+ $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ $as_echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+$as_echo "$ac_header_preproc" >&6; }
+
+# So? What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+ yes:no: )
+ { $as_echo "$as_me:$LINENO: WARNING: Python.h: accepted by the compiler, rejected by the preprocessor!" >&5
+$as_echo "$as_me: WARNING: Python.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: Python.h: proceeding with the compiler's result" >&5
+$as_echo "$as_me: WARNING: Python.h: proceeding with the compiler's result" >&2;}
+ ac_header_preproc=yes
+ ;;
+ no:yes:* )
+ { $as_echo "$as_me:$LINENO: WARNING: Python.h: present but cannot be compiled" >&5
+$as_echo "$as_me: WARNING: Python.h: present but cannot be compiled" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: Python.h: check for missing prerequisite headers?" >&5
+$as_echo "$as_me: WARNING: Python.h: check for missing prerequisite headers?" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: Python.h: see the Autoconf documentation" >&5
+$as_echo "$as_me: WARNING: Python.h: see the Autoconf documentation" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: Python.h: section \"Present But Cannot Be Compiled\"" >&5
+$as_echo "$as_me: WARNING: Python.h: section \"Present But Cannot Be Compiled\"" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: Python.h: proceeding with the preprocessor's result" >&5
+$as_echo "$as_me: WARNING: Python.h: proceeding with the preprocessor's result" >&2;}
+ { $as_echo "$as_me:$LINENO: WARNING: Python.h: in the future, the compiler will take precedence" >&5
+$as_echo "$as_me: WARNING: Python.h: in the future, the compiler will take precedence" >&2;}
+ ( cat <<\_ASBOX
+## ---------------------------------------- ##
+## Report this to [email protected] ##
+## ---------------------------------------- ##
+_ASBOX
+ ) | sed "s/^/$as_me: WARNING: /" >&2
+ ;;
+esac
+{ $as_echo "$as_me:$LINENO: checking for Python.h" >&5
+$as_echo_n "checking for Python.h... " >&6; }
+if test "${ac_cv_header_Python_h+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ ac_cv_header_Python_h=$ac_header_preproc
+fi
+{ $as_echo "$as_me:$LINENO: result: $ac_cv_header_Python_h" >&5
+$as_echo "$ac_cv_header_Python_h" >&6; }
+
+fi
+if test "x$ac_cv_header_Python_h" = x""yes; then
+ :
+else
+ { { $as_echo "$as_me:$LINENO: error: header file <Python.h> is required for Python" >&5
+$as_echo "$as_me: error: header file <Python.h> is required for Python" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+
+ CPPFLAGS=$ac_save_CPPFLAGS
+fi
+
#
# Check for DocBook and tools
#
@@ -28841,14 +29349,15 @@ else
fi
if test "$PORTNAME" = "darwin"; then
- { $as_echo "$as_me:$LINENO: checking if $CC supports -Wl,-dead_strip_dylibs" >&5
-$as_echo_n "checking if $CC supports -Wl,-dead_strip_dylibs... " >&6; }
-pgac_save_LDFLAGS=$LDFLAGS
+ { $as_echo "$as_me:$LINENO: checking whether $CC supports -Wl,-dead_strip_dylibs" >&5
+$as_echo_n "checking whether $CC supports -Wl,-dead_strip_dylibs... " >&6; }
+if test "${pgac_cv_prog_cc_ldflags__Wl__dead_strip_dylibs+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_LDFLAGS=$LDFLAGS
LDFLAGS="$pgac_save_LDFLAGS -Wl,-dead_strip_dylibs"
if test "$cross_compiling" = yes; then
- LDFLAGS="$pgac_save_LDFLAGS"
- { $as_echo "$as_me:$LINENO: result: assuming no" >&5
-$as_echo "assuming no" >&6; }
+ pgac_cv_prog_cc_ldflags__Wl__dead_strip_dylibs="assuming no"
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -28887,33 +29396,38 @@ $as_echo "$ac_try_echo") >&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ pgac_cv_prog_cc_ldflags__Wl__dead_strip_dylibs=yes
else
$as_echo "$as_me: program exited with status $ac_status" >&5
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-LDFLAGS="$pgac_save_LDFLAGS"
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+pgac_cv_prog_cc_ldflags__Wl__dead_strip_dylibs=no
fi
rm -rf conftest.dSYM
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
+LDFLAGS="$pgac_save_LDFLAGS"
+fi
+{ $as_echo "$as_me:$LINENO: result: $pgac_cv_prog_cc_ldflags__Wl__dead_strip_dylibs" >&5
+$as_echo "$pgac_cv_prog_cc_ldflags__Wl__dead_strip_dylibs" >&6; }
+if test x"$pgac_cv_prog_cc_ldflags__Wl__dead_strip_dylibs" = x"yes"; then
+ LDFLAGS="$LDFLAGS -Wl,-dead_strip_dylibs"
+fi
elif test "$PORTNAME" = "openbsd"; then
- { $as_echo "$as_me:$LINENO: checking if $CC supports -Wl,-Bdynamic" >&5
-$as_echo_n "checking if $CC supports -Wl,-Bdynamic... " >&6; }
-pgac_save_LDFLAGS=$LDFLAGS
+ { $as_echo "$as_me:$LINENO: checking whether $CC supports -Wl,-Bdynamic" >&5
+$as_echo_n "checking whether $CC supports -Wl,-Bdynamic... " >&6; }
+if test "${pgac_cv_prog_cc_ldflags__Wl__Bdynamic+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_LDFLAGS=$LDFLAGS
LDFLAGS="$pgac_save_LDFLAGS -Wl,-Bdynamic"
if test "$cross_compiling" = yes; then
- LDFLAGS="$pgac_save_LDFLAGS"
- { $as_echo "$as_me:$LINENO: result: assuming no" >&5
-$as_echo "assuming no" >&6; }
+ pgac_cv_prog_cc_ldflags__Wl__Bdynamic="assuming no"
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -28952,33 +29466,38 @@ $as_echo "$ac_try_echo") >&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ pgac_cv_prog_cc_ldflags__Wl__Bdynamic=yes
else
$as_echo "$as_me: program exited with status $ac_status" >&5
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-LDFLAGS="$pgac_save_LDFLAGS"
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+pgac_cv_prog_cc_ldflags__Wl__Bdynamic=no
fi
rm -rf conftest.dSYM
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
+LDFLAGS="$pgac_save_LDFLAGS"
+fi
+{ $as_echo "$as_me:$LINENO: result: $pgac_cv_prog_cc_ldflags__Wl__Bdynamic" >&5
+$as_echo "$pgac_cv_prog_cc_ldflags__Wl__Bdynamic" >&6; }
+if test x"$pgac_cv_prog_cc_ldflags__Wl__Bdynamic" = x"yes"; then
+ LDFLAGS="$LDFLAGS -Wl,-Bdynamic"
+fi
else
- { $as_echo "$as_me:$LINENO: checking if $CC supports -Wl,--as-needed" >&5
-$as_echo_n "checking if $CC supports -Wl,--as-needed... " >&6; }
-pgac_save_LDFLAGS=$LDFLAGS
+ { $as_echo "$as_me:$LINENO: checking whether $CC supports -Wl,--as-needed" >&5
+$as_echo_n "checking whether $CC supports -Wl,--as-needed... " >&6; }
+if test "${pgac_cv_prog_cc_ldflags__Wl___as_needed+set}" = set; then
+ $as_echo_n "(cached) " >&6
+else
+ pgac_save_LDFLAGS=$LDFLAGS
LDFLAGS="$pgac_save_LDFLAGS -Wl,--as-needed"
if test "$cross_compiling" = yes; then
- LDFLAGS="$pgac_save_LDFLAGS"
- { $as_echo "$as_me:$LINENO: result: assuming no" >&5
-$as_echo "assuming no" >&6; }
+ pgac_cv_prog_cc_ldflags__Wl___as_needed="assuming no"
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -29017,23 +29536,27 @@ $as_echo "$ac_try_echo") >&5
ac_status=$?
$as_echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- { $as_echo "$as_me:$LINENO: result: yes" >&5
-$as_echo "yes" >&6; }
+ pgac_cv_prog_cc_ldflags__Wl___as_needed=yes
else
$as_echo "$as_me: program exited with status $ac_status" >&5
$as_echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-LDFLAGS="$pgac_save_LDFLAGS"
- { $as_echo "$as_me:$LINENO: result: no" >&5
-$as_echo "no" >&6; }
+pgac_cv_prog_cc_ldflags__Wl___as_needed=no
fi
rm -rf conftest.dSYM
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
+LDFLAGS="$pgac_save_LDFLAGS"
+fi
+{ $as_echo "$as_me:$LINENO: result: $pgac_cv_prog_cc_ldflags__Wl___as_needed" >&5
+$as_echo "$pgac_cv_prog_cc_ldflags__Wl___as_needed" >&6; }
+if test x"$pgac_cv_prog_cc_ldflags__Wl___as_needed" = x"yes"; then
+ LDFLAGS="$LDFLAGS -Wl,--as-needed"
+fi
fi
@@ -29049,7 +29572,8 @@ $as_echo "$as_me: using LDFLAGS=$LDFLAGS" >&6;}
# Create compiler version string
if test x"$GCC" = x"yes" ; then
- cc_string="GCC `${CC} --version | sed q`"
+ cc_string=`${CC} --version | sed q`
+ case $cc_string in [A-Za-z]*) ;; *) cc_string="GCC $cc_string";; esac
elif test x"$SUN_STUDIO_CC" = x"yes" ; then
cc_string=`${CC} -V 2>&1 | sed q`
else
@@ -29099,7 +29623,7 @@ fi
ac_config_files="$ac_config_files GNUmakefile src/Makefile.global"
-ac_config_links="$ac_config_links src/backend/port/dynloader.c:src/backend/port/dynloader/${template}.c src/backend/port/pg_sema.c:${SEMA_IMPLEMENTATION} src/backend/port/pg_shmem.c:${SHMEM_IMPLEMENTATION} src/include/dynloader.h:src/backend/port/dynloader/${template}.h src/include/pg_config_os.h:src/include/port/${template}.h src/Makefile.port:src/makefiles/Makefile.${template}"
+ac_config_links="$ac_config_links src/backend/port/dynloader.c:src/backend/port/dynloader/${template}.c src/backend/port/pg_sema.c:${SEMA_IMPLEMENTATION} src/backend/port/pg_shmem.c:${SHMEM_IMPLEMENTATION} src/backend/port/pg_latch.c:${LATCH_IMPLEMENTATION} src/include/dynloader.h:src/backend/port/dynloader/${template}.h src/include/pg_config_os.h:src/include/port/${template}.h src/Makefile.port:src/makefiles/Makefile.${template}"
if test "$PORTNAME" = "win32"; then
@@ -29533,7 +30057,7 @@ exec 6>&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.0beta3, which was
+This file was extended by PostgreSQL $as_me 9.1beta2, which was
generated by GNU Autoconf 2.63. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -29600,7 +30124,7 @@ Report bugs to <[email protected]>."
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\
-PostgreSQL config.status 9.0beta3
+PostgreSQL config.status 9.1beta2
configured by $0, generated by GNU Autoconf 2.63,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
@@ -29723,6 +30247,7 @@ do
"src/backend/port/dynloader.c") CONFIG_LINKS="$CONFIG_LINKS src/backend/port/dynloader.c:src/backend/port/dynloader/${template}.c" ;;
"src/backend/port/pg_sema.c") CONFIG_LINKS="$CONFIG_LINKS src/backend/port/pg_sema.c:${SEMA_IMPLEMENTATION}" ;;
"src/backend/port/pg_shmem.c") CONFIG_LINKS="$CONFIG_LINKS src/backend/port/pg_shmem.c:${SHMEM_IMPLEMENTATION}" ;;
+ "src/backend/port/pg_latch.c") CONFIG_LINKS="$CONFIG_LINKS src/backend/port/pg_latch.c:${LATCH_IMPLEMENTATION}" ;;
"src/include/dynloader.h") CONFIG_LINKS="$CONFIG_LINKS src/include/dynloader.h:src/backend/port/dynloader/${template}.h" ;;
"src/include/pg_config_os.h") CONFIG_LINKS="$CONFIG_LINKS src/include/pg_config_os.h:src/include/port/${template}.h" ;;
"src/Makefile.port") CONFIG_LINKS="$CONFIG_LINKS src/Makefile.port:src/makefiles/Makefile.${template}" ;;
diff --git a/configure.in b/configure.in
index f5270c26b1..e6232afeaa 100644
--- a/configure.in
+++ b/configure.in
@@ -1,5 +1,5 @@
dnl Process this file with autoconf to produce a configure script.
-dnl $PostgreSQL: pgsql/configure.in,v 1.632 2010/07/09 02:43:12 scrappy Exp $
+dnl configure.in
dnl
dnl Developers, please strive to achieve this order:
dnl
@@ -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.0beta3], [[email protected]])
+AC_INIT([PostgreSQL], [9.1beta2], [[email protected]])
m4_if(m4_defn([m4_PACKAGE_VERSION]), [2.63], [], [m4_fatal([Autoconf version 2.63 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-2010, PostgreSQL Global Development Group])
+AC_COPYRIGHT([Copyright (c) 1996-2011, PostgreSQL Global Development Group])
AC_CONFIG_SRCDIR([src/backend/access/common/heaptuple.c])
AC_CONFIG_AUX_DIR(config)
AC_PREFIX_DEFAULT(/usr/local/pgsql)
@@ -58,6 +58,7 @@ case $host_os in
bsdi*) template=bsdi ;;
cygwin*) template=cygwin ;;
darwin*) template=darwin ;;
+dragonfly*) template=netbsd ;;
dgux*) template=dgux ;;
freebsd*) template=freebsd ;;
hpux*) template=hpux ;;
@@ -230,7 +231,7 @@ AC_SUBST(enable_coverage)
#
PGAC_ARG_BOOL(enable, dtrace, no,
[build with DTrace support],
-[AC_DEFINE([ENABLE_DTRACE], 1,
+[AC_DEFINE([ENABLE_DTRACE], 1,
[Define to 1 to enable DTrace support. (--enable-dtrace)])
AC_CHECK_PROGS(DTRACE, dtrace)
if test -z "$DTRACE"; then
@@ -262,14 +263,14 @@ AC_DEFINE_UNQUOTED([BLCKSZ], ${BLCKSZ}, [
can set it bigger if you need bigger tuples (although TOAST should
reduce the need to have large tuples, since fields can be spread
across multiple tuples).
-
+
BLCKSZ must be a power of 2. The maximum possible value of BLCKSZ
is currently 2^15 (32768). This is determined by the 15-bit widths
of the lp_off and lp_len fields in ItemIdData (see
include/storage/itemid.h).
-
+
Changing BLCKSZ requires an initdb.
-])
+])
#
# Relation segment size
@@ -288,7 +289,7 @@ AC_DEFINE_UNQUOTED([RELSEG_SIZE], ${RELSEG_SIZE}, [
RELSEG_SIZE is the maximum number of blocks allowed in one disk file.
Thus, the maximum size of a single file is RELSEG_SIZE * BLCKSZ;
relations bigger than that are divided into multiple files.
-
+
RELSEG_SIZE * BLCKSZ must be less than your OS' limit on file size.
This is often 2 GB or 4GB in a 32-bit operating system, unless you
have large file support enabled. By default, we make the limit 1 GB
@@ -329,7 +330,7 @@ AC_DEFINE_UNQUOTED([XLOG_BLCKSZ], ${XLOG_BLCKSZ}, [
buffers, else direct I/O may fail.
Changing XLOG_BLCKSZ requires an initdb.
-])
+])
#
# WAL segment size
@@ -429,6 +430,8 @@ if test "$GCC" = yes -a "$ICC" = no; then
# These work in some but not all gcc versions
PGAC_PROG_CC_CFLAGS_OPT([-Wdeclaration-after-statement])
PGAC_PROG_CC_CFLAGS_OPT([-Wendif-labels])
+ # This was included in -Wall/-Wformat in older GCC versions
+ PGAC_PROG_CC_CFLAGS_OPT([-Wformat-security])
# Disable strict-aliasing rules; needed for gcc 3.3+
PGAC_PROG_CC_CFLAGS_OPT([-fno-strict-aliasing])
# Disable optimizations that assume no overflow; needed for gcc 4.3+
@@ -442,6 +445,10 @@ elif test "$ICC" = yes; then
elif test "$PORTNAME" = "aix"; then
# AIX's xlc has to have strict aliasing turned off too
PGAC_PROG_CC_CFLAGS_OPT([-qnoansialias])
+elif test "$PORTNAME" = "hpux"; then
+ # On some versions of HP-UX, libm functions do not set errno by default.
+ # Fix that by using +Olibmerrno if the compiler recognizes it.
+ PGAC_PROG_CC_CFLAGS_OPT([+Olibmerrno])
fi
# supply -g if --enable-debug
@@ -461,7 +468,7 @@ fi
# enable profiling if --enable-profiling
if test "$enable_profiling" = yes && test "$ac_cv_prog_cc_g" = yes; then
if test "$GCC" = yes; then
- AC_DEFINE([PROFILE_PID_DIR], 1,
+ AC_DEFINE([PROFILE_PID_DIR], 1,
[Define to 1 to allow profiling output to be saved separately for each process.])
CFLAGS="$CFLAGS -pg $PLATFORM_PROFILE_FLAGS"
else
@@ -676,6 +683,13 @@ PGAC_ARG_BOOL(with, openssl, no, [build with OpenSSL support],
AC_MSG_RESULT([$with_openssl])
AC_SUBST(with_openssl)
+#
+# SELinux
+#
+AC_MSG_CHECKING([whether to build with SELinux support])
+PGAC_ARG_BOOL(with, selinux, no, [build with SELinux support])
+AC_SUBST(with_selinux)
+AC_MSG_RESULT([$with_selinux])
#
# Readline
@@ -703,7 +717,7 @@ PGAC_ARG_BOOL(with, libedit-preferred, no,
#
# OSSP UUID library
#
-PGAC_ARG_BOOL(with, ossp-uuid, no, [use OSSP UUID library when building contrib/uuid-ossp])
+PGAC_ARG_BOOL(with, ossp-uuid, no, [build contrib/uuid-ossp, requires OSSP UUID library])
AC_SUBST(with_ossp_uuid)
@@ -948,6 +962,12 @@ if test "$with_libxslt" = yes ; then
AC_CHECK_LIB(xslt, xsltCleanupGlobals, [], [AC_MSG_ERROR([library 'xslt' is required for XSLT support])])
fi
+# for contrib/sepgsql
+if test "$with_selinux" = yes; then
+ AC_CHECK_LIB(selinux, selinux_sepgsql_context_path, [],
+ [AC_MSG_ERROR([library 'libselinux', version 2.0.93 or newer, is required for SELinux support])])
+fi
+
# for contrib/uuid-ossp
if test "$with_ossp_uuid" = yes ; then
AC_CHECK_LIB(ossp-uuid, uuid_export,
@@ -964,7 +984,7 @@ AC_SUBST(OSSP_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 kernel/OS.h kernel/image.h SupportDefs.h])
+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/ucred.h sys/un.h termios.h ucred.h utime.h wchar.h wctype.h kernel/OS.h kernel/image.h SupportDefs.h])
# On BSD, cpp test for net/if.h will fail unless sys/socket.h
# is included first.
@@ -1103,11 +1123,13 @@ AC_TYPE_INTPTR_T
AC_TYPE_UINTPTR_T
AC_TYPE_LONG_LONG_INT
-AC_CHECK_TYPES([struct cmsgcred, struct fcred, struct sockcred], [], [],
-[#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/ucred.h>])
+PGAC_TYPE_LOCALE_T
+
+AC_CHECK_TYPES([struct cmsgcred], [], [],
+[#include <sys/socket.h>
+#ifdef HAVE_SYS_UCRED_H
+#include <sys/ucred.h>
+#endif])
AC_CHECK_TYPES([struct option], [], [],
[#ifdef HAVE_GETOPT_H
@@ -1141,7 +1163,7 @@ if test "$with_krb5" = yes; then
AC_MSG_CHECKING(for krb5_free_unparsed_name)
AC_TRY_LINK([#include <krb5.h>],
[krb5_free_unparsed_name(NULL,NULL);],
- [AC_DEFINE(HAVE_KRB5_FREE_UNPARSED_NAME, 1, [Define to 1 if you have krb5_free_unparsed_name])
+ [AC_DEFINE(HAVE_KRB5_FREE_UNPARSED_NAME, 1, [Define to 1 if you have krb5_free_unparsed_name])
AC_MSG_RESULT(yes)],
[AC_MSG_RESULT(no)])
fi
@@ -1156,8 +1178,8 @@ AC_SYS_LARGEFILE
AC_CHECK_SIZEOF([off_t])
# If we don't have largefile support, can't handle segsize >= 2GB.
-if test "$ac_cv_sizeof_off_t" -lt 8 -a "$segsize" != "1"; then
- AC_MSG_ERROR([Large file support is not enabled. Segment size cannot be larger than 1GB.])
+if test "$ac_cv_sizeof_off_t" -lt 8 -a "$segsize" != "1"; then
+ AC_MSG_ERROR([Large file support is not enabled. Segment size cannot be larger than 1GB.])
fi
@@ -1169,7 +1191,7 @@ PGAC_VAR_INT_TIMEZONE
AC_FUNC_ACCEPT_ARGTYPES
PGAC_FUNC_GETTIMEOFDAY_1ARG
-AC_CHECK_FUNCS([cbrt dlopen fcvt fdatasync getifaddrs getpeereid getpeerucred getrlimit memmove poll pstat readlink scandir setproctitle setsid sigprocmask symlink sysconf towlower utime utimes waitpid wcstombs])
+AC_CHECK_FUNCS([cbrt dlopen fcvt fdatasync getifaddrs getpeerucred getrlimit memmove poll pstat readlink scandir setproctitle setsid sigprocmask symlink sysconf towlower utime utimes waitpid wcstombs wcstombs_l])
AC_REPLACE_FUNCS(fseeko)
case $host_os in
@@ -1228,8 +1250,8 @@ if test "$PORTNAME" = "win32"; then
#
# To properly translate all NLS languages strings, we must support the
# *printf() %$ format, which allows *printf() arguments to be selected
- # by position in the translated string.
- #
+ # by position in the translated string.
+ #
# libintl versions < 0.13 use the native *printf() functions, and Win32
# *printf() doesn't understand %$, so we must use our /port versions,
# which do understand %$. libintl versions >= 0.13 include their own
@@ -1288,7 +1310,7 @@ fi
pgac_save_LIBS="$LIBS"
LIBS=`echo "$LIBS" | sed -e 's/-ledit//g' -e 's/-lreadline//g'`
-AC_REPLACE_FUNCS([crypt erand48 getopt getrusage inet_aton random rint srandom strdup strerror strlcat strlcpy strtol strtoul])
+AC_REPLACE_FUNCS([crypt erand48 getopt getpeereid getrusage inet_aton random rint srandom strdup strerror strlcat strlcpy strtol strtoul])
case $host_os in
@@ -1328,6 +1350,13 @@ if test "$PORTNAME" = "solaris"; then
AC_LIBOBJ(getopt)
fi
+# mingw has adopted a GNU-centric interpretation of optind/optreset,
+# so always use our version on Windows.
+if test "$PORTNAME" = "win32"; then
+ AC_LIBOBJ(getopt)
+ AC_LIBOBJ(getopt_long)
+fi
+
# Cygwin's erand48() is broken (always returns zero) in some releases,
# so force use of ours.
if test "$PORTNAME" = "cygwin"; then
@@ -1336,13 +1365,23 @@ fi
# Win32 support
if test "$PORTNAME" = "win32"; then
-AC_REPLACE_FUNCS(gettimeofday)
-AC_LIBOBJ(kill)
-AC_LIBOBJ(open)
-AC_LIBOBJ(win32env)
-AC_LIBOBJ(win32error)
-AC_DEFINE([HAVE_SYMLINK], 1,
- [Define to 1 if you have the `symlink' function.])
+ AC_REPLACE_FUNCS(gettimeofday)
+ AC_LIBOBJ(kill)
+ AC_LIBOBJ(open)
+ AC_LIBOBJ(win32env)
+ AC_LIBOBJ(win32error)
+ AC_DEFINE([HAVE_SYMLINK], 1,
+ [Define to 1 if you have the `symlink' function.])
+ AC_CHECK_TYPES(MINIDUMP_TYPE, [pgac_minidump_type=yes], [pgac_minidump_type=no], [
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <string.h>
+#include <dbghelp.h>])
+fi
+if test x"$pgac_minidump_type" = x"yes" ; then
+ AC_SUBST(have_win32_dbghelp,yes)
+else
+ AC_SUBST(have_win32_dbghelp,no)
fi
if test "$with_readline" = yes; then
@@ -1355,12 +1394,14 @@ 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.
-AC_MSG_CHECKING(for sigsetjmp)
-AC_TRY_LINK([#include <setjmp.h>],
+AC_CACHE_CHECK([for sigsetjmp], pgac_cv_func_sigsetjmp,
+[AC_TRY_LINK([#include <setjmp.h>],
[sigjmp_buf x; sigsetjmp(x, 1);],
- [AC_DEFINE(HAVE_SIGSETJMP, 1, [Define to 1 if you have sigsetjmp().])
-AC_MSG_RESULT(yes)],
- [AC_MSG_RESULT(no)])
+ [pgac_cv_func_sigsetjmp=yes],
+ [pgac_cv_func_sigsetjmp=no])])
+if test x"$pgac_cv_func_sigsetjmp" = x"yes"; then
+ AC_DEFINE(HAVE_SIGSETJMP, 1, [Define to 1 if you have sigsetjmp().])
+fi
AC_DECL_SYS_SIGLIST
@@ -1588,7 +1629,7 @@ AC_CHECK_SIZEOF([size_t])
AC_CHECK_SIZEOF([long])
# Decide whether float4 is passed by value: user-selectable, enabled by default
-AC_MSG_CHECKING([whether to build with float4 passed by value])
+AC_MSG_CHECKING([whether to build with float4 passed by value])
PGAC_ARG_BOOL(enable, float4-byval, yes, [disable float4 passed by value],
[AC_DEFINE([USE_FLOAT4_BYVAL], 1,
[Define to 1 if you want float4 values to be passed by value. (--enable-float4-byval)])
@@ -1700,6 +1741,13 @@ else
SHMEM_IMPLEMENTATION="src/backend/port/win32_shmem.c"
fi
+# Select latch implementation type.
+if test "$PORTNAME" != "win32"; then
+ LATCH_IMPLEMENTATION="src/backend/port/unix_latch.c"
+else
+ LATCH_IMPLEMENTATION="src/backend/port/win32_latch.c"
+fi
+
# If not set in template file, set bytes to use libc memset()
if test x"$MEMSET_LOOP_LIMIT" = x"" ; then
MEMSET_LOOP_LIMIT=1024
@@ -1724,6 +1772,14 @@ if test "$with_tcl" = yes; then
CPPFLAGS=$ac_save_CPPFLAGS
fi
+# check for <Python.h>
+if test "$with_python" = yes; then
+ ac_save_CPPFLAGS=$CPPFLAGS
+ CPPFLAGS="$python_includespec $CPPFLAGS"
+ AC_CHECK_HEADER(Python.h, [], [AC_MSG_ERROR([header file <Python.h> is required for Python])])
+ CPPFLAGS=$ac_save_CPPFLAGS
+fi
+
#
# Check for DocBook and tools
#
@@ -1797,7 +1853,8 @@ AC_MSG_NOTICE([using LDFLAGS=$LDFLAGS])
# Create compiler version string
if test x"$GCC" = x"yes" ; then
- cc_string="GCC `${CC} --version | sed q`"
+ cc_string=`${CC} --version | sed q`
+ case $cc_string in [[A-Za-z]]*) ;; *) cc_string="GCC $cc_string";; esac
elif test x"$SUN_STUDIO_CC" = x"yes" ; then
cc_string=`${CC} -V 2>&1 | sed q`
else
@@ -1841,6 +1898,7 @@ AC_CONFIG_LINKS([
src/backend/port/dynloader.c:src/backend/port/dynloader/${template}.c
src/backend/port/pg_sema.c:${SEMA_IMPLEMENTATION}
src/backend/port/pg_shmem.c:${SHMEM_IMPLEMENTATION}
+ src/backend/port/pg_latch.c:${LATCH_IMPLEMENTATION}
src/include/dynloader.h:src/backend/port/dynloader/${template}.h
src/include/pg_config_os.h:src/include/port/${template}.h
src/Makefile.port:src/makefiles/Makefile.${template}
@@ -1848,7 +1906,7 @@ AC_CONFIG_LINKS([
if test "$PORTNAME" = "win32"; then
AC_CONFIG_COMMANDS([check_win32_symlinks],[
-# Links sometimes fail undetected on Mingw -
+# Links sometimes fail undetected on Mingw -
# so here we detect it and warn the user
for FILE in $CONFIG_LINKS
do
diff --git a/contrib/Makefile b/contrib/Makefile
index a1b7d913f5..696776795e 100644
--- a/contrib/Makefile
+++ b/contrib/Makefile
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/contrib/Makefile,v 1.93 2010/06/14 16:17:56 sriggs Exp $
+# contrib/Makefile
subdir = contrib
top_builddir = ..
@@ -6,6 +6,7 @@ include $(top_builddir)/src/Makefile.global
SUBDIRS = \
adminpack \
+ auth_delay \
auto_explain \
btree_gin \
btree_gist \
@@ -15,7 +16,9 @@ SUBDIRS = \
dblink \
dict_int \
dict_xsyn \
+ dummy_seclabel \
earthdistance \
+ file_fdw \
fuzzystrmatch \
hstore \
intagg \
@@ -31,6 +34,7 @@ SUBDIRS = \
pg_freespacemap \
pg_standby \
pg_stat_statements \
+ pg_test_fsync \
pg_trgm \
pg_upgrade \
pg_upgrade_support \
@@ -58,18 +62,12 @@ ifeq ($(with_libxml),yes)
SUBDIRS += xml2
endif
+ifeq ($(with_selinux),yes)
+SUBDIRS += sepgsql
+endif
+
# Missing:
# start-scripts \ (does not have a makefile)
-all install installdirs uninstall distprep clean distclean maintainer-clean:
- @for dir in $(SUBDIRS); do \
- $(MAKE) -C $$dir $@ || exit; \
- done
-
-# We'd like check operations to run all the subtests before failing.
-check installcheck:
- @CHECKERR=0; for dir in $(SUBDIRS); do \
- $(MAKE) -C $$dir $@ || CHECKERR=$$?; \
- done; \
- exit $$CHECKERR
+$(recurse)
diff --git a/contrib/README b/contrib/README
index a04c04346e..a1d42a11cb 100644
--- a/contrib/README
+++ b/contrib/README
@@ -28,6 +28,11 @@ adminpack -
File and log manipulation routines, used by pgAdmin
by Dave Page <[email protected]>
+auth_delay
+ Add a short delay after a failed authentication attempt, to make
+ brute-force attacks on database passwords a bit harder.
+ by KaiGai Kohei <[email protected]>
+
auto_explain -
Log EXPLAIN output for long-running queries
by Takahiro Itagaki <[email protected]>
@@ -66,7 +71,11 @@ dict_xsyn -
earthdistance -
Functions for computing distances between two points on Earth
- by Bruno Wolff III <[email protected]> and Hal Snyder <[email protected]>
+ by Bruno Wolff III <[email protected]> and Hal Snyder <[email protected]>
+
+file_fdw
+ Foreign-data wrapper for server-side CSV/TEXT files
+ by Shigeru Hanada <[email protected]>
fuzzystrmatch -
Levenshtein, metaphone, and soundex fuzzy string matching
@@ -86,17 +95,17 @@ intarray -
isn -
PostgreSQL type extensions for ISBN, ISSN, ISMN, EAN13 product numbers
- by Germ�n M�ndez Bravo (Kronuz) <[email protected]>
+ by Germán Méndez Bravo (Kronuz) <[email protected]>
lo -
Large Object maintenance
- by Peter Mount <[email protected]>
+ by Peter Mount <[email protected]>
ltree -
Tree-like data structures
by Teodor Sigaev <[email protected]> and Oleg Bartunov <[email protected]>
-oid2name -
+oid2name -
Maps numeric files to table names
by B Palmer <[email protected]>
@@ -124,6 +133,10 @@ pg_stat_statements -
Track statement execution times across a whole database cluster
by Takahiro Itagaki <[email protected]>
+pg_test_fsync -
+ Test different wal_sync_method settings
+ by Bruce Momjian <[email protected]>
+
pg_trgm -
Functions for determining the similarity of text based on trigram
matching.
@@ -154,6 +167,10 @@ seg -
Confidence-interval datatype (GiST indexing example)
by Gene Selkov, Jr. <[email protected]>
+sepgsql -
+ External security provider using SELinux
+ by KaiGai Kohei <[email protected]>
+
spi -
Various trigger functions, examples for using SPI.
@@ -161,7 +178,7 @@ sslinfo -
Functions to get information about SSL certificates
by Victor Wagner <[email protected]>
-start-scripts -
+start-scripts -
Scripts for starting the server at boot time on various platforms.
tablefunc -
diff --git a/contrib/adminpack/Makefile b/contrib/adminpack/Makefile
index e1262fb2e9..5cbc8f0c71 100644
--- a/contrib/adminpack/Makefile
+++ b/contrib/adminpack/Makefile
@@ -1,10 +1,11 @@
-# $PostgreSQL: pgsql/contrib/adminpack/Makefile,v 1.6 2007/11/10 23:59:50 momjian Exp $
+# contrib/adminpack/Makefile
MODULE_big = adminpack
-PG_CPPFLAGS = -I$(libpq_srcdir)
-DATA_built = adminpack.sql
-DATA = uninstall_adminpack.sql
OBJS = adminpack.o
+PG_CPPFLAGS = -I$(libpq_srcdir)
+
+EXTENSION = adminpack
+DATA = adminpack--1.0.sql
ifdef USE_PGXS
PG_CONFIG = pg_config
diff --git a/contrib/adminpack/adminpack.sql.in b/contrib/adminpack/adminpack--1.0.sql
index de29bacd51..090702231c 100644
--- a/contrib/adminpack/adminpack.sql.in
+++ b/contrib/adminpack/adminpack--1.0.sql
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/adminpack/adminpack.sql.in,v 1.6 2007/11/13 04:24:27 momjian Exp $ */
+/* contrib/adminpack/adminpack--1.0.sql */
/* ***********************************************
* Administrative functions for PostgreSQL
@@ -6,27 +6,27 @@
/* generic file access functions */
-CREATE OR REPLACE FUNCTION pg_catalog.pg_file_write(text, text, bool)
+CREATE FUNCTION pg_catalog.pg_file_write(text, text, bool)
RETURNS bigint
AS 'MODULE_PATHNAME', 'pg_file_write'
LANGUAGE C VOLATILE STRICT;
-CREATE OR REPLACE FUNCTION pg_catalog.pg_file_rename(text, text, text)
+CREATE FUNCTION pg_catalog.pg_file_rename(text, text, text)
RETURNS bool
AS 'MODULE_PATHNAME', 'pg_file_rename'
LANGUAGE C VOLATILE;
-CREATE OR REPLACE FUNCTION pg_catalog.pg_file_rename(text, text)
+CREATE FUNCTION pg_catalog.pg_file_rename(text, text)
RETURNS bool
AS 'SELECT pg_catalog.pg_file_rename($1, $2, NULL::pg_catalog.text);'
LANGUAGE SQL VOLATILE STRICT;
-CREATE OR REPLACE FUNCTION pg_catalog.pg_file_unlink(text)
+CREATE FUNCTION pg_catalog.pg_file_unlink(text)
RETURNS bool
AS 'MODULE_PATHNAME', 'pg_file_unlink'
LANGUAGE C VOLATILE STRICT;
-CREATE OR REPLACE FUNCTION pg_catalog.pg_logdir_ls()
+CREATE FUNCTION pg_catalog.pg_logdir_ls()
RETURNS setof record
AS 'MODULE_PATHNAME', 'pg_logdir_ls'
LANGUAGE C VOLATILE STRICT;
@@ -34,17 +34,17 @@ LANGUAGE C VOLATILE STRICT;
/* Renaming of existing backend functions for pgAdmin compatibility */
-CREATE OR REPLACE FUNCTION pg_catalog.pg_file_read(text, bigint, bigint)
+CREATE FUNCTION pg_catalog.pg_file_read(text, bigint, bigint)
RETURNS text
AS 'pg_read_file'
LANGUAGE INTERNAL VOLATILE STRICT;
-CREATE OR REPLACE FUNCTION pg_catalog.pg_file_length(text)
+CREATE FUNCTION pg_catalog.pg_file_length(text)
RETURNS bigint
AS 'SELECT size FROM pg_catalog.pg_stat_file($1)'
LANGUAGE SQL VOLATILE STRICT;
-CREATE OR REPLACE FUNCTION pg_catalog.pg_logfile_rotate()
+CREATE FUNCTION pg_catalog.pg_logfile_rotate()
RETURNS int4
AS 'pg_rotate_logfile'
LANGUAGE INTERNAL VOLATILE STRICT;
diff --git a/contrib/adminpack/adminpack.c b/contrib/adminpack/adminpack.c
index 5271ef6ea2..99fa02e813 100644
--- a/contrib/adminpack/adminpack.c
+++ b/contrib/adminpack/adminpack.c
@@ -3,12 +3,12 @@
* adminpack.c
*
*
- * Copyright (c) 2002-2010, PostgreSQL Global Development Group
+ * Copyright (c) 2002-2011, PostgreSQL Global Development Group
*
* Author: Andreas Pflug <[email protected]>
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/contrib/adminpack/adminpack.c,v 1.13 2010/01/02 16:57:32 momjian Exp $
+ * contrib/adminpack/adminpack.c
*
*-------------------------------------------------------------------------
*/
@@ -73,32 +73,31 @@ convert_and_check_filename(text *arg, bool logAllowed)
canonicalize_path(filename); /* filename can change length here */
- /* Disallow ".." in the path */
- if (path_contains_parent_reference(filename))
- ereport(ERROR,
- (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
- (errmsg("reference to parent directory (\"..\") not allowed"))));
-
if (is_absolute_path(filename))
{
- /* Allow absolute references within DataDir */
- if (path_is_prefix_of_path(DataDir, filename))
- return filename;
- /* The log directory might be outside our datadir, but allow it */
- if (logAllowed &&
- is_absolute_path(Log_directory) &&
- path_is_prefix_of_path(Log_directory, filename))
- return filename;
+ /* Disallow '/a/b/data/..' */
+ if (path_contains_parent_reference(filename))
+ ereport(ERROR,
+ (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
+ (errmsg("reference to parent directory (\"..\") not allowed"))));
+ /*
+ * Allow absolute paths if within DataDir or Log_directory, even
+ * though Log_directory might be outside DataDir.
+ */
+ if (!path_is_prefix_of_path(DataDir, filename) &&
+ (!logAllowed || !is_absolute_path(Log_directory) ||
+ !path_is_prefix_of_path(Log_directory, filename)))
+ ereport(ERROR,
+ (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
+ (errmsg("absolute path not allowed"))));
+ }
+ else if (!path_is_relative_and_below_cwd(filename))
ereport(ERROR,
(errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
- (errmsg("absolute path not allowed"))));
- return NULL; /* keep compiler quiet */
- }
- else
- {
- return filename;
- }
+ (errmsg("path must be in or below the current directory"))));
+
+ return filename;
}
diff --git a/contrib/adminpack/adminpack.control b/contrib/adminpack/adminpack.control
new file mode 100644
index 0000000000..c79413f378
--- /dev/null
+++ b/contrib/adminpack/adminpack.control
@@ -0,0 +1,6 @@
+# adminpack extension
+comment = 'administrative functions for PostgreSQL'
+default_version = '1.0'
+module_pathname = '$libdir/adminpack'
+relocatable = false
+schema = pg_catalog
diff --git a/contrib/adminpack/uninstall_adminpack.sql b/contrib/adminpack/uninstall_adminpack.sql
deleted file mode 100644
index 893f081461..0000000000
--- a/contrib/adminpack/uninstall_adminpack.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/adminpack/uninstall_adminpack.sql,v 1.4 2007/11/13 04:24:27 momjian Exp $ */
-
-DROP FUNCTION pg_catalog.pg_file_write(text, text, bool) ;
-DROP FUNCTION pg_catalog.pg_file_rename(text, text, text) ;
-DROP FUNCTION pg_catalog.pg_file_rename(text, text) ;
-DROP FUNCTION pg_catalog.pg_file_unlink(text) ;
-DROP FUNCTION pg_catalog.pg_logdir_ls() ;
-DROP FUNCTION pg_catalog.pg_file_read(text, bigint, bigint) ;
-DROP FUNCTION pg_catalog.pg_file_length(text) ;
-DROP FUNCTION pg_catalog.pg_logfile_rotate() ;
diff --git a/contrib/auth_delay/Makefile b/contrib/auth_delay/Makefile
new file mode 100644
index 0000000000..09d2d5418c
--- /dev/null
+++ b/contrib/auth_delay/Makefile
@@ -0,0 +1,14 @@
+# contrib/auth_delay/Makefile
+
+MODULES = auth_delay
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = contrib/auth_delay
+top_builddir = ../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/contrib/auth_delay/auth_delay.c b/contrib/auth_delay/auth_delay.c
new file mode 100644
index 0000000000..4e0d5959d1
--- /dev/null
+++ b/contrib/auth_delay/auth_delay.c
@@ -0,0 +1,71 @@
+/* -------------------------------------------------------------------------
+ *
+ * auth_delay.c
+ *
+ * Copyright (C) 2010-2011, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ * contrib/auth_delay/auth_delay.c
+ *
+ * -------------------------------------------------------------------------
+ */
+#include "postgres.h"
+
+#include "libpq/auth.h"
+#include "port.h"
+#include "utils/guc.h"
+#include "utils/timestamp.h"
+
+PG_MODULE_MAGIC;
+
+void _PG_init(void);
+
+/* GUC Variables */
+static int auth_delay_milliseconds;
+
+/* Original Hook */
+static ClientAuthentication_hook_type original_client_auth_hook = NULL;
+
+/*
+ * Check authentication
+ */
+static void
+auth_delay_checks(Port *port, int status)
+{
+ /*
+ * Any other plugins which use ClientAuthentication_hook.
+ */
+ if (original_client_auth_hook)
+ original_client_auth_hook(port, status);
+
+ /*
+ * Inject a short delay if authentication failed.
+ */
+ if (status != STATUS_OK)
+ {
+ pg_usleep(1000L * auth_delay_milliseconds);
+ }
+}
+
+/*
+ * Module Load Callback
+ */
+void
+_PG_init(void)
+{
+ /* Define custom GUC variables */
+ DefineCustomIntVariable("auth_delay.milliseconds",
+ "Milliseconds to delay before reporting authentication failure",
+ NULL,
+ &auth_delay_milliseconds,
+ 0,
+ 0, INT_MAX,
+ PGC_SIGHUP,
+ GUC_UNIT_MS,
+ NULL,
+ NULL,
+ NULL);
+ /* Install Hooks */
+ original_client_auth_hook = ClientAuthentication_hook;
+ ClientAuthentication_hook = auth_delay_checks;
+}
diff --git a/contrib/auto_explain/Makefile b/contrib/auto_explain/Makefile
index e9eaae0ece..2d1443fe48 100644
--- a/contrib/auto_explain/Makefile
+++ b/contrib/auto_explain/Makefile
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/contrib/auto_explain/Makefile,v 1.1 2008/11/19 02:59:28 tgl Exp $
+# contrib/auto_explain/Makefile
MODULE_big = auto_explain
OBJS = auto_explain.o
diff --git a/contrib/auto_explain/auto_explain.c b/contrib/auto_explain/auto_explain.c
index ffc1a4a106..b320698748 100644
--- a/contrib/auto_explain/auto_explain.c
+++ b/contrib/auto_explain/auto_explain.c
@@ -3,10 +3,10 @@
* auto_explain.c
*
*
- * Copyright (c) 2008-2010, PostgreSQL Global Development Group
+ * Copyright (c) 2008-2011, PostgreSQL Global Development Group
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/contrib/auto_explain/auto_explain.c,v 1.14 2010/02/26 02:00:31 momjian Exp $
+ * contrib/auto_explain/auto_explain.c
*
*-------------------------------------------------------------------------
*/
@@ -40,6 +40,7 @@ static int nesting_level = 0;
/* Saved hook values in case of unload */
static ExecutorStart_hook_type prev_ExecutorStart = NULL;
static ExecutorRun_hook_type prev_ExecutorRun = NULL;
+static ExecutorFinish_hook_type prev_ExecutorFinish = NULL;
static ExecutorEnd_hook_type prev_ExecutorEnd = NULL;
#define auto_explain_enabled() \
@@ -53,6 +54,7 @@ static void explain_ExecutorStart(QueryDesc *queryDesc, int eflags);
static void explain_ExecutorRun(QueryDesc *queryDesc,
ScanDirection direction,
long count);
+static void explain_ExecutorFinish(QueryDesc *queryDesc);
static void explain_ExecutorEnd(QueryDesc *queryDesc);
@@ -72,6 +74,7 @@ _PG_init(void)
PGC_SUSET,
GUC_UNIT_MS,
NULL,
+ NULL,
NULL);
DefineCustomBoolVariable("auto_explain.log_analyze",
@@ -82,6 +85,7 @@ _PG_init(void)
PGC_SUSET,
0,
NULL,
+ NULL,
NULL);
DefineCustomBoolVariable("auto_explain.log_verbose",
@@ -92,6 +96,7 @@ _PG_init(void)
PGC_SUSET,
0,
NULL,
+ NULL,
NULL);
DefineCustomBoolVariable("auto_explain.log_buffers",
@@ -102,6 +107,7 @@ _PG_init(void)
PGC_SUSET,
0,
NULL,
+ NULL,
NULL);
DefineCustomEnumVariable("auto_explain.log_format",
@@ -113,6 +119,7 @@ _PG_init(void)
PGC_SUSET,
0,
NULL,
+ NULL,
NULL);
DefineCustomBoolVariable("auto_explain.log_nested_statements",
@@ -123,6 +130,7 @@ _PG_init(void)
PGC_SUSET,
0,
NULL,
+ NULL,
NULL);
EmitWarningsOnPlaceholders("auto_explain");
@@ -132,6 +140,8 @@ _PG_init(void)
ExecutorStart_hook = explain_ExecutorStart;
prev_ExecutorRun = ExecutorRun_hook;
ExecutorRun_hook = explain_ExecutorRun;
+ prev_ExecutorFinish = ExecutorFinish_hook;
+ ExecutorFinish_hook = explain_ExecutorFinish;
prev_ExecutorEnd = ExecutorEnd_hook;
ExecutorEnd_hook = explain_ExecutorEnd;
}
@@ -145,6 +155,7 @@ _PG_fini(void)
/* Uninstall hooks. */
ExecutorStart_hook = prev_ExecutorStart;
ExecutorRun_hook = prev_ExecutorRun;
+ ExecutorFinish_hook = prev_ExecutorFinish;
ExecutorEnd_hook = prev_ExecutorEnd;
}
@@ -212,6 +223,29 @@ explain_ExecutorRun(QueryDesc *queryDesc, ScanDirection direction, long count)
}
/*
+ * ExecutorFinish hook: all we need do is track nesting depth
+ */
+static void
+explain_ExecutorFinish(QueryDesc *queryDesc)
+{
+ nesting_level++;
+ PG_TRY();
+ {
+ if (prev_ExecutorFinish)
+ prev_ExecutorFinish(queryDesc);
+ else
+ standard_ExecutorFinish(queryDesc);
+ nesting_level--;
+ }
+ PG_CATCH();
+ {
+ nesting_level--;
+ PG_RE_THROW();
+ }
+ PG_END_TRY();
+}
+
+/*
* ExecutorEnd hook: log results if needed
*/
static void
diff --git a/contrib/btree_gin/.gitignore b/contrib/btree_gin/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/contrib/btree_gin/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/contrib/btree_gin/Makefile b/contrib/btree_gin/Makefile
index e6b6394c23..09fd3e6e11 100644
--- a/contrib/btree_gin/Makefile
+++ b/contrib/btree_gin/Makefile
@@ -1,10 +1,11 @@
-# $PostgreSQL: pgsql/contrib/btree_gin/Makefile,v 1.1 2009/03/25 23:20:01 tgl Exp $
+# contrib/btree_gin/Makefile
MODULE_big = btree_gin
-OBJS = btree_gin.o
+OBJS = btree_gin.o
+
+EXTENSION = btree_gin
+DATA = btree_gin--1.0.sql btree_gin--unpackaged--1.0.sql
-DATA_built = btree_gin.sql
-DATA = uninstall_btree_gin.sql
REGRESS = install_btree_gin int2 int4 int8 float4 float8 money oid \
timestamp timestamptz time timetz date interval \
macaddr inet cidr text varchar char bytea bit varbit \
diff --git a/contrib/btree_gin/btree_gin.sql.in b/contrib/btree_gin/btree_gin--1.0.sql
index bc7ec3bbcb..07f93640f3 100644
--- a/contrib/btree_gin/btree_gin.sql.in
+++ b/contrib/btree_gin/btree_gin--1.0.sql
@@ -1,24 +1,21 @@
-/* $PostgreSQL: pgsql/contrib/btree_gin/btree_gin.sql.in,v 1.1 2009/03/25 23:20:01 tgl Exp $ */
+/* contrib/btree_gin/btree_gin--1.0.sql */
--- Adjust this setting to control where the objects get created.
-SET search_path = public;
-
-CREATE OR REPLACE FUNCTION gin_btree_consistent(internal, int2, anyelement, int4, internal, internal)
+CREATE FUNCTION gin_btree_consistent(internal, int2, anyelement, int4, internal, internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_value_int2(int2, internal)
+CREATE FUNCTION gin_extract_value_int2(int2, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_int2(int2, int2, int2, internal)
+CREATE FUNCTION gin_compare_prefix_int2(int2, int2, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_int2(int2, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_int2(int2, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -38,17 +35,17 @@ AS
FUNCTION 5 gin_compare_prefix_int2(int2,int2,int2, internal),
STORAGE int2;
-CREATE OR REPLACE FUNCTION gin_extract_value_int4(int4, internal)
+CREATE FUNCTION gin_extract_value_int4(int4, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_int4(int4, int4, int2, internal)
+CREATE FUNCTION gin_compare_prefix_int4(int4, int4, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_int4(int4, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_int4(int4, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -68,17 +65,17 @@ AS
FUNCTION 5 gin_compare_prefix_int4(int4,int4,int2, internal),
STORAGE int4;
-CREATE OR REPLACE FUNCTION gin_extract_value_int8(int8, internal)
+CREATE FUNCTION gin_extract_value_int8(int8, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_int8(int8, int8, int2, internal)
+CREATE FUNCTION gin_compare_prefix_int8(int8, int8, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_int8(int8, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_int8(int8, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -98,17 +95,17 @@ AS
FUNCTION 5 gin_compare_prefix_int8(int8,int8,int2, internal),
STORAGE int8;
-CREATE OR REPLACE FUNCTION gin_extract_value_float4(float4, internal)
+CREATE FUNCTION gin_extract_value_float4(float4, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_float4(float4, float4, int2, internal)
+CREATE FUNCTION gin_compare_prefix_float4(float4, float4, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_float4(float4, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_float4(float4, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -128,17 +125,17 @@ AS
FUNCTION 5 gin_compare_prefix_float4(float4,float4,int2, internal),
STORAGE float4;
-CREATE OR REPLACE FUNCTION gin_extract_value_float8(float8, internal)
+CREATE FUNCTION gin_extract_value_float8(float8, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_float8(float8, float8, int2, internal)
+CREATE FUNCTION gin_compare_prefix_float8(float8, float8, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_float8(float8, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_float8(float8, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -158,17 +155,17 @@ AS
FUNCTION 5 gin_compare_prefix_float8(float8,float8,int2, internal),
STORAGE float8;
-CREATE OR REPLACE FUNCTION gin_extract_value_money(money, internal)
+CREATE FUNCTION gin_extract_value_money(money, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_money(money, money, int2, internal)
+CREATE FUNCTION gin_compare_prefix_money(money, money, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_money(money, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_money(money, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -188,17 +185,17 @@ AS
FUNCTION 5 gin_compare_prefix_money(money,money,int2, internal),
STORAGE money;
-CREATE OR REPLACE FUNCTION gin_extract_value_oid(oid, internal)
+CREATE FUNCTION gin_extract_value_oid(oid, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_oid(oid, oid, int2, internal)
+CREATE FUNCTION gin_compare_prefix_oid(oid, oid, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_oid(oid, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_oid(oid, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -218,17 +215,17 @@ AS
FUNCTION 5 gin_compare_prefix_oid(oid,oid,int2, internal),
STORAGE oid;
-CREATE OR REPLACE FUNCTION gin_extract_value_timestamp(timestamp, internal)
+CREATE FUNCTION gin_extract_value_timestamp(timestamp, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_timestamp(timestamp, timestamp, int2, internal)
+CREATE FUNCTION gin_compare_prefix_timestamp(timestamp, timestamp, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_timestamp(timestamp, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_timestamp(timestamp, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -248,17 +245,17 @@ AS
FUNCTION 5 gin_compare_prefix_timestamp(timestamp,timestamp,int2, internal),
STORAGE timestamp;
-CREATE OR REPLACE FUNCTION gin_extract_value_timestamptz(timestamptz, internal)
+CREATE FUNCTION gin_extract_value_timestamptz(timestamptz, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_timestamptz(timestamptz, timestamptz, int2, internal)
+CREATE FUNCTION gin_compare_prefix_timestamptz(timestamptz, timestamptz, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_timestamptz(timestamptz, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_timestamptz(timestamptz, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -278,17 +275,17 @@ AS
FUNCTION 5 gin_compare_prefix_timestamptz(timestamptz,timestamptz,int2, internal),
STORAGE timestamptz;
-CREATE OR REPLACE FUNCTION gin_extract_value_time(time, internal)
+CREATE FUNCTION gin_extract_value_time(time, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_time(time, time, int2, internal)
+CREATE FUNCTION gin_compare_prefix_time(time, time, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_time(time, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_time(time, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -308,17 +305,17 @@ AS
FUNCTION 5 gin_compare_prefix_time(time,time,int2, internal),
STORAGE time;
-CREATE OR REPLACE FUNCTION gin_extract_value_timetz(timetz, internal)
+CREATE FUNCTION gin_extract_value_timetz(timetz, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_timetz(timetz, timetz, int2, internal)
+CREATE FUNCTION gin_compare_prefix_timetz(timetz, timetz, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_timetz(timetz, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_timetz(timetz, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -338,17 +335,17 @@ AS
FUNCTION 5 gin_compare_prefix_timetz(timetz,timetz,int2, internal),
STORAGE timetz;
-CREATE OR REPLACE FUNCTION gin_extract_value_date(date, internal)
+CREATE FUNCTION gin_extract_value_date(date, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_date(date, date, int2, internal)
+CREATE FUNCTION gin_compare_prefix_date(date, date, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_date(date, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_date(date, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -368,17 +365,17 @@ AS
FUNCTION 5 gin_compare_prefix_date(date,date,int2, internal),
STORAGE date;
-CREATE OR REPLACE FUNCTION gin_extract_value_interval(interval, internal)
+CREATE FUNCTION gin_extract_value_interval(interval, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_interval(interval, interval, int2, internal)
+CREATE FUNCTION gin_compare_prefix_interval(interval, interval, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_interval(interval, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_interval(interval, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -398,17 +395,17 @@ AS
FUNCTION 5 gin_compare_prefix_interval(interval,interval,int2, internal),
STORAGE interval;
-CREATE OR REPLACE FUNCTION gin_extract_value_macaddr(macaddr, internal)
+CREATE FUNCTION gin_extract_value_macaddr(macaddr, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_macaddr(macaddr, macaddr, int2, internal)
+CREATE FUNCTION gin_compare_prefix_macaddr(macaddr, macaddr, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_macaddr(macaddr, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_macaddr(macaddr, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -428,17 +425,17 @@ AS
FUNCTION 5 gin_compare_prefix_macaddr(macaddr,macaddr,int2, internal),
STORAGE macaddr;
-CREATE OR REPLACE FUNCTION gin_extract_value_inet(inet, internal)
+CREATE FUNCTION gin_extract_value_inet(inet, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_inet(inet, inet, int2, internal)
+CREATE FUNCTION gin_compare_prefix_inet(inet, inet, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_inet(inet, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_inet(inet, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -458,17 +455,17 @@ AS
FUNCTION 5 gin_compare_prefix_inet(inet,inet,int2, internal),
STORAGE inet;
-CREATE OR REPLACE FUNCTION gin_extract_value_cidr(cidr, internal)
+CREATE FUNCTION gin_extract_value_cidr(cidr, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_cidr(cidr, cidr, int2, internal)
+CREATE FUNCTION gin_compare_prefix_cidr(cidr, cidr, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_cidr(cidr, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_cidr(cidr, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -488,17 +485,17 @@ AS
FUNCTION 5 gin_compare_prefix_cidr(cidr,cidr,int2, internal),
STORAGE cidr;
-CREATE OR REPLACE FUNCTION gin_extract_value_text(text, internal)
+CREATE FUNCTION gin_extract_value_text(text, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_text(text, text, int2, internal)
+CREATE FUNCTION gin_compare_prefix_text(text, text, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_text(text, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_text(text, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -533,17 +530,17 @@ AS
FUNCTION 5 gin_compare_prefix_text(text,text,int2, internal),
STORAGE varchar;
-CREATE OR REPLACE FUNCTION gin_extract_value_char("char", internal)
+CREATE FUNCTION gin_extract_value_char("char", internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_char("char", "char", int2, internal)
+CREATE FUNCTION gin_compare_prefix_char("char", "char", int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_char("char", internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_char("char", internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -563,17 +560,17 @@ AS
FUNCTION 5 gin_compare_prefix_char("char","char",int2, internal),
STORAGE "char";
-CREATE OR REPLACE FUNCTION gin_extract_value_bytea(bytea, internal)
+CREATE FUNCTION gin_extract_value_bytea(bytea, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_bytea(bytea, bytea, int2, internal)
+CREATE FUNCTION gin_compare_prefix_bytea(bytea, bytea, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_bytea(bytea, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_bytea(bytea, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -593,17 +590,17 @@ AS
FUNCTION 5 gin_compare_prefix_bytea(bytea,bytea,int2, internal),
STORAGE bytea;
-CREATE OR REPLACE FUNCTION gin_extract_value_bit(bit, internal)
+CREATE FUNCTION gin_extract_value_bit(bit, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_bit(bit, bit, int2, internal)
+CREATE FUNCTION gin_compare_prefix_bit(bit, bit, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_bit(bit, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_bit(bit, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -623,17 +620,17 @@ AS
FUNCTION 5 gin_compare_prefix_bit(bit,bit,int2, internal),
STORAGE bit;
-CREATE OR REPLACE FUNCTION gin_extract_value_varbit(varbit, internal)
+CREATE FUNCTION gin_extract_value_varbit(varbit, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_varbit(varbit, varbit, int2, internal)
+CREATE FUNCTION gin_compare_prefix_varbit(varbit, varbit, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_varbit(varbit, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_varbit(varbit, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -653,22 +650,22 @@ AS
FUNCTION 5 gin_compare_prefix_varbit(varbit,varbit,int2, internal),
STORAGE varbit;
-CREATE OR REPLACE FUNCTION gin_extract_value_numeric(numeric, internal)
+CREATE FUNCTION gin_extract_value_numeric(numeric, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_compare_prefix_numeric(numeric, numeric, int2, internal)
+CREATE FUNCTION gin_compare_prefix_numeric(numeric, numeric, int2, internal)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_extract_query_numeric(numeric, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_query_numeric(numeric, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION gin_numeric_cmp(numeric, numeric)
+CREATE FUNCTION gin_numeric_cmp(numeric, numeric)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
diff --git a/contrib/btree_gin/btree_gin--unpackaged--1.0.sql b/contrib/btree_gin/btree_gin--unpackaged--1.0.sql
new file mode 100644
index 0000000000..fe1ddeab87
--- /dev/null
+++ b/contrib/btree_gin/btree_gin--unpackaged--1.0.sql
@@ -0,0 +1,116 @@
+/* contrib/btree_gin/btree_gin--unpackaged--1.0.sql */
+
+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);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_int2(smallint,smallint,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_int2(smallint,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family int2_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class int2_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_int4(integer,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_int4(integer,integer,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_int4(integer,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family int4_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class int4_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_int8(bigint,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_int8(bigint,bigint,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_int8(bigint,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family int8_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class int8_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_float4(real,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_float4(real,real,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_float4(real,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family float4_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class float4_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_float8(double precision,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_float8(double precision,double precision,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_float8(double precision,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family float8_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class float8_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_money(money,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_money(money,money,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_money(money,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family money_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class money_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_oid(oid,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_oid(oid,oid,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_oid(oid,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family oid_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class oid_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_timestamp(timestamp without time zone,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_timestamp(timestamp without time zone,timestamp without time zone,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_timestamp(timestamp without time zone,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family timestamp_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class timestamp_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_timestamptz(timestamp with time zone,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_timestamptz(timestamp with time zone,timestamp with time zone,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_timestamptz(timestamp with time zone,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family timestamptz_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class timestamptz_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_time(time without time zone,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_time(time without time zone,time without time zone,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_time(time without time zone,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family time_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class time_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_timetz(time with time zone,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_timetz(time with time zone,time with time zone,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_timetz(time with time zone,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family timetz_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class timetz_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_date(date,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_date(date,date,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_date(date,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family date_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class date_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_interval(interval,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_interval(interval,interval,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_interval(interval,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family interval_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class interval_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_macaddr(macaddr,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_macaddr(macaddr,macaddr,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_macaddr(macaddr,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family macaddr_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class macaddr_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_inet(inet,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_inet(inet,inet,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_inet(inet,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family inet_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class inet_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_cidr(cidr,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_cidr(cidr,cidr,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_cidr(cidr,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family cidr_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class cidr_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_text(text,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_text(text,text,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_text(text,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family text_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class text_ops using gin;
+ALTER EXTENSION btree_gin ADD operator family varchar_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class varchar_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_char("char",internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_char("char","char",smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_char("char",internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family char_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class char_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_bytea(bytea,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_bytea(bytea,bytea,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_bytea(bytea,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family bytea_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class bytea_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_bit(bit,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_bit(bit,bit,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_bit(bit,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family bit_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class bit_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_varbit(bit varying,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_varbit(bit varying,bit varying,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_varbit(bit varying,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD operator family varbit_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class varbit_ops using gin;
+ALTER EXTENSION btree_gin ADD function gin_extract_value_numeric(numeric,internal);
+ALTER EXTENSION btree_gin ADD function gin_compare_prefix_numeric(numeric,numeric,smallint,internal);
+ALTER EXTENSION btree_gin ADD function gin_extract_query_numeric(numeric,internal,smallint,internal,internal);
+ALTER EXTENSION btree_gin ADD function gin_numeric_cmp(numeric,numeric);
+ALTER EXTENSION btree_gin ADD operator family numeric_ops using gin;
+ALTER EXTENSION btree_gin ADD operator class numeric_ops using gin;
diff --git a/contrib/btree_gin/btree_gin.c b/contrib/btree_gin/btree_gin.c
index c05f8ebbfc..5c4f58b8b1 100644
--- a/contrib/btree_gin/btree_gin.c
+++ b/contrib/btree_gin/btree_gin.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gin/btree_gin.c,v 1.4 2010/01/07 04:53:34 tgl Exp $
+ * contrib/btree_gin/btree_gin.c
*/
#include "postgres.h"
@@ -120,8 +120,9 @@ gin_compare_prefix_##type(PG_FUNCTION_ARGS) \
int32 res, \
cmp; \
\
- cmp = DatumGetInt32(DirectFunctionCall2( \
+ cmp = DatumGetInt32(DirectFunctionCall2Coll( \
TypeInfo_##type.typecmp, \
+ PG_GET_COLLATION(), \
(data->strategy == BTLessStrategyNumber || \
data->strategy == BTLessEqualStrategyNumber) \
? data->datum : a, \
@@ -394,10 +395,11 @@ static TypeInfo TypeInfo_varbit = {true, leftmostvalue_varbit, bitcmp};
GIN_SUPPORT(varbit)
/*
- * Numeric type hasn't applicable left-most value, so NULL
- * is used for that. NULL will never be an argument for a C-level
- * numeric function except gin_numeric_cmp and it will not be stored
- * somewhere and it could not be returned in any user SQL query.
+ * Numeric type hasn't a real left-most value, so we use PointerGetDatum(NULL)
+ * (*not* a SQL NULL) to represent that. We can get away with that because
+ * the value returned by our leftmostvalue function will never be stored in
+ * the index nor passed to anything except our compare and prefix-comparison
+ * functions. The same trick could be used for other pass-by-reference types.
*/
#define NUMERIC_IS_LEFTMOST(x) ((x) == NULL)
diff --git a/contrib/btree_gin/btree_gin.control b/contrib/btree_gin/btree_gin.control
new file mode 100644
index 0000000000..3b2cb2d709
--- /dev/null
+++ b/contrib/btree_gin/btree_gin.control
@@ -0,0 +1,5 @@
+# btree_gin extension
+comment = 'support for indexing common datatypes in GIN'
+default_version = '1.0'
+module_pathname = '$libdir/btree_gin'
+relocatable = true
diff --git a/contrib/btree_gin/expected/cidr.out b/contrib/btree_gin/expected/cidr.out
index 28ff9195b1..3d1198a4d7 100644
--- a/contrib/btree_gin/expected/cidr.out
+++ b/contrib/btree_gin/expected/cidr.out
@@ -2,7 +2,7 @@ set enable_seqscan=off;
CREATE TABLE test_cidr (
i cidr
);
-INSERT INTO test_cidr VALUES
+INSERT INTO test_cidr VALUES
( '1.2.3.4' ),
( '1.2.4.4' ),
( '1.2.5.4' ),
diff --git a/contrib/btree_gin/expected/date.out b/contrib/btree_gin/expected/date.out
index 8da6ee4843..40dfa308cf 100644
--- a/contrib/btree_gin/expected/date.out
+++ b/contrib/btree_gin/expected/date.out
@@ -2,7 +2,7 @@ set enable_seqscan=off;
CREATE TABLE test_date (
i date
);
-INSERT INTO test_date VALUES
+INSERT INTO test_date VALUES
( '2004-10-23' ),
( '2004-10-24' ),
( '2004-10-25' ),
diff --git a/contrib/btree_gin/expected/inet.out b/contrib/btree_gin/expected/inet.out
index bb2eaafc7f..aa6147fb7d 100644
--- a/contrib/btree_gin/expected/inet.out
+++ b/contrib/btree_gin/expected/inet.out
@@ -2,7 +2,7 @@ set enable_seqscan=off;
CREATE TABLE test_inet (
i inet
);
-INSERT INTO test_inet VALUES
+INSERT INTO test_inet VALUES
( '1.2.3.4/16' ),
( '1.2.4.4/16' ),
( '1.2.5.4/16' ),
diff --git a/contrib/btree_gin/expected/install_btree_gin.out b/contrib/btree_gin/expected/install_btree_gin.out
index 43f11fa263..0fae4c5bfe 100644
--- a/contrib/btree_gin/expected/install_btree_gin.out
+++ b/contrib/btree_gin/expected/install_btree_gin.out
@@ -1,3 +1 @@
-SET client_min_messages = warning;
-\set ECHO none
-RESET client_min_messages;
+CREATE EXTENSION btree_gin;
diff --git a/contrib/btree_gin/expected/interval.out b/contrib/btree_gin/expected/interval.out
index a3b99c1f28..1f6ef54070 100644
--- a/contrib/btree_gin/expected/interval.out
+++ b/contrib/btree_gin/expected/interval.out
@@ -2,7 +2,7 @@ set enable_seqscan=off;
CREATE TABLE test_interval (
i interval
);
-INSERT INTO test_interval VALUES
+INSERT INTO test_interval VALUES
( '03:55:08' ),
( '04:55:08' ),
( '05:55:08' ),
diff --git a/contrib/btree_gin/expected/macaddr.out b/contrib/btree_gin/expected/macaddr.out
index d26d1f9ad3..ebceb01862 100644
--- a/contrib/btree_gin/expected/macaddr.out
+++ b/contrib/btree_gin/expected/macaddr.out
@@ -2,7 +2,7 @@ set enable_seqscan=off;
CREATE TABLE test_macaddr (
i macaddr
);
-INSERT INTO test_macaddr VALUES
+INSERT INTO test_macaddr VALUES
( '22:00:5c:03:55:08' ),
( '22:00:5c:04:55:08' ),
( '22:00:5c:05:55:08' ),
diff --git a/contrib/btree_gin/expected/time.out b/contrib/btree_gin/expected/time.out
index bf65946835..be6b084038 100644
--- a/contrib/btree_gin/expected/time.out
+++ b/contrib/btree_gin/expected/time.out
@@ -2,7 +2,7 @@ set enable_seqscan=off;
CREATE TABLE test_time (
i time
);
-INSERT INTO test_time VALUES
+INSERT INTO test_time VALUES
( '03:55:08' ),
( '04:55:08' ),
( '05:55:08' ),
diff --git a/contrib/btree_gin/expected/timestamp.out b/contrib/btree_gin/expected/timestamp.out
index 00b0b66106..a236cdc94a 100644
--- a/contrib/btree_gin/expected/timestamp.out
+++ b/contrib/btree_gin/expected/timestamp.out
@@ -2,7 +2,7 @@ set enable_seqscan=off;
CREATE TABLE test_timestamp (
i timestamp
);
-INSERT INTO test_timestamp VALUES
+INSERT INTO test_timestamp VALUES
( '2004-10-26 03:55:08' ),
( '2004-10-26 04:55:08' ),
( '2004-10-26 05:55:08' ),
diff --git a/contrib/btree_gin/expected/timestamptz.out b/contrib/btree_gin/expected/timestamptz.out
index 8550d6b4d9..d53963d2a0 100644
--- a/contrib/btree_gin/expected/timestamptz.out
+++ b/contrib/btree_gin/expected/timestamptz.out
@@ -2,7 +2,7 @@ set enable_seqscan=off;
CREATE TABLE test_timestamptz (
i timestamptz
);
-INSERT INTO test_timestamptz VALUES
+INSERT INTO test_timestamptz VALUES
( '2004-10-26 03:55:08' ),
( '2004-10-26 04:55:08' ),
( '2004-10-26 05:55:08' ),
diff --git a/contrib/btree_gin/expected/timetz.out b/contrib/btree_gin/expected/timetz.out
index 184bc310f6..45aee71371 100644
--- a/contrib/btree_gin/expected/timetz.out
+++ b/contrib/btree_gin/expected/timetz.out
@@ -2,7 +2,7 @@ set enable_seqscan=off;
CREATE TABLE test_timetz (
i timetz
);
-INSERT INTO test_timetz VALUES
+INSERT INTO test_timetz VALUES
( '03:55:08 GMT+2' ),
( '04:55:08 GMT+2' ),
( '05:55:08 GMT+2' ),
diff --git a/contrib/btree_gin/sql/cidr.sql b/contrib/btree_gin/sql/cidr.sql
index a608a3ec78..4a76e5f10b 100644
--- a/contrib/btree_gin/sql/cidr.sql
+++ b/contrib/btree_gin/sql/cidr.sql
@@ -4,7 +4,7 @@ CREATE TABLE test_cidr (
i cidr
);
-INSERT INTO test_cidr VALUES
+INSERT INTO test_cidr VALUES
( '1.2.3.4' ),
( '1.2.4.4' ),
( '1.2.5.4' ),
diff --git a/contrib/btree_gin/sql/date.sql b/contrib/btree_gin/sql/date.sql
index c486f272a4..35086f6b81 100644
--- a/contrib/btree_gin/sql/date.sql
+++ b/contrib/btree_gin/sql/date.sql
@@ -4,7 +4,7 @@ CREATE TABLE test_date (
i date
);
-INSERT INTO test_date VALUES
+INSERT INTO test_date VALUES
( '2004-10-23' ),
( '2004-10-24' ),
( '2004-10-25' ),
diff --git a/contrib/btree_gin/sql/inet.sql b/contrib/btree_gin/sql/inet.sql
index fadc1c47ec..e5ec087856 100644
--- a/contrib/btree_gin/sql/inet.sql
+++ b/contrib/btree_gin/sql/inet.sql
@@ -4,7 +4,7 @@ CREATE TABLE test_inet (
i inet
);
-INSERT INTO test_inet VALUES
+INSERT INTO test_inet VALUES
( '1.2.3.4/16' ),
( '1.2.4.4/16' ),
( '1.2.5.4/16' ),
diff --git a/contrib/btree_gin/sql/install_btree_gin.sql b/contrib/btree_gin/sql/install_btree_gin.sql
index f54c8b4a0f..0fae4c5bfe 100644
--- a/contrib/btree_gin/sql/install_btree_gin.sql
+++ b/contrib/btree_gin/sql/install_btree_gin.sql
@@ -1,5 +1 @@
-SET client_min_messages = warning;
-\set ECHO none
-\i btree_gin.sql
-\set ECHO all
-RESET client_min_messages;
+CREATE EXTENSION btree_gin;
diff --git a/contrib/btree_gin/sql/interval.sql b/contrib/btree_gin/sql/interval.sql
index f245e4d4b3..e385158783 100644
--- a/contrib/btree_gin/sql/interval.sql
+++ b/contrib/btree_gin/sql/interval.sql
@@ -4,7 +4,7 @@ CREATE TABLE test_interval (
i interval
);
-INSERT INTO test_interval VALUES
+INSERT INTO test_interval VALUES
( '03:55:08' ),
( '04:55:08' ),
( '05:55:08' ),
diff --git a/contrib/btree_gin/sql/macaddr.sql b/contrib/btree_gin/sql/macaddr.sql
index e0402869a8..66566aa604 100644
--- a/contrib/btree_gin/sql/macaddr.sql
+++ b/contrib/btree_gin/sql/macaddr.sql
@@ -4,7 +4,7 @@ CREATE TABLE test_macaddr (
i macaddr
);
-INSERT INTO test_macaddr VALUES
+INSERT INTO test_macaddr VALUES
( '22:00:5c:03:55:08' ),
( '22:00:5c:04:55:08' ),
( '22:00:5c:05:55:08' ),
diff --git a/contrib/btree_gin/sql/time.sql b/contrib/btree_gin/sql/time.sql
index afb1e16ebf..62d709a846 100644
--- a/contrib/btree_gin/sql/time.sql
+++ b/contrib/btree_gin/sql/time.sql
@@ -4,7 +4,7 @@ CREATE TABLE test_time (
i time
);
-INSERT INTO test_time VALUES
+INSERT INTO test_time VALUES
( '03:55:08' ),
( '04:55:08' ),
( '05:55:08' ),
diff --git a/contrib/btree_gin/sql/timestamp.sql b/contrib/btree_gin/sql/timestamp.sql
index 6e00cd7e40..56727e81c4 100644
--- a/contrib/btree_gin/sql/timestamp.sql
+++ b/contrib/btree_gin/sql/timestamp.sql
@@ -4,7 +4,7 @@ CREATE TABLE test_timestamp (
i timestamp
);
-INSERT INTO test_timestamp VALUES
+INSERT INTO test_timestamp VALUES
( '2004-10-26 03:55:08' ),
( '2004-10-26 04:55:08' ),
( '2004-10-26 05:55:08' ),
diff --git a/contrib/btree_gin/sql/timestamptz.sql b/contrib/btree_gin/sql/timestamptz.sql
index 26c01ef804..e6cfdb1b07 100644
--- a/contrib/btree_gin/sql/timestamptz.sql
+++ b/contrib/btree_gin/sql/timestamptz.sql
@@ -4,7 +4,7 @@ CREATE TABLE test_timestamptz (
i timestamptz
);
-INSERT INTO test_timestamptz VALUES
+INSERT INTO test_timestamptz VALUES
( '2004-10-26 03:55:08' ),
( '2004-10-26 04:55:08' ),
( '2004-10-26 05:55:08' ),
diff --git a/contrib/btree_gin/sql/timetz.sql b/contrib/btree_gin/sql/timetz.sql
index a72b105fc1..ca947b753e 100644
--- a/contrib/btree_gin/sql/timetz.sql
+++ b/contrib/btree_gin/sql/timetz.sql
@@ -4,7 +4,7 @@ CREATE TABLE test_timetz (
i timetz
);
-INSERT INTO test_timetz VALUES
+INSERT INTO test_timetz VALUES
( '03:55:08 GMT+2' ),
( '04:55:08 GMT+2' ),
( '05:55:08 GMT+2' ),
diff --git a/contrib/btree_gin/uninstall_btree_gin.sql b/contrib/btree_gin/uninstall_btree_gin.sql
deleted file mode 100644
index 0b79c6037b..0000000000
--- a/contrib/btree_gin/uninstall_btree_gin.sql
+++ /dev/null
@@ -1,98 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/btree_gin/uninstall_btree_gin.sql,v 1.1 2009/03/25 23:20:01 tgl Exp $ */
-
--- Adjust this setting to control where the objects get dropped.
-SET search_path = public;
-
-DROP OPERATOR FAMILY int2_ops USING gin CASCADE;
-DROP OPERATOR FAMILY int4_ops USING gin CASCADE;
-DROP OPERATOR FAMILY int8_ops USING gin CASCADE;
-DROP OPERATOR FAMILY float4_ops USING gin CASCADE;
-DROP OPERATOR FAMILY float8_ops USING gin CASCADE;
-DROP OPERATOR FAMILY money_ops USING gin CASCADE;
-DROP OPERATOR FAMILY oid_ops USING gin CASCADE;
-DROP OPERATOR FAMILY timestamp_ops USING gin CASCADE;
-DROP OPERATOR FAMILY timestamptz_ops USING gin CASCADE;
-DROP OPERATOR FAMILY time_ops USING gin CASCADE;
-DROP OPERATOR FAMILY timetz_ops USING gin CASCADE;
-DROP OPERATOR FAMILY date_ops USING gin CASCADE;
-DROP OPERATOR FAMILY interval_ops USING gin CASCADE;
-DROP OPERATOR FAMILY macaddr_ops USING gin CASCADE;
-DROP OPERATOR FAMILY inet_ops USING gin CASCADE;
-DROP OPERATOR FAMILY cidr_ops USING gin CASCADE;
-DROP OPERATOR FAMILY text_ops USING gin CASCADE;
-DROP OPERATOR FAMILY varchar_ops USING gin CASCADE;
-DROP OPERATOR FAMILY char_ops USING gin CASCADE;
-DROP OPERATOR FAMILY bytea_ops USING gin CASCADE;
-DROP OPERATOR FAMILY bit_ops USING gin CASCADE;
-DROP OPERATOR FAMILY varbit_ops USING gin CASCADE;
-DROP OPERATOR FAMILY numeric_ops USING gin CASCADE;
-
-DROP FUNCTION gin_btree_consistent(internal, int2, anyelement, int4, internal, internal);
-
-DROP FUNCTION gin_extract_value_int2(int2, internal);
-DROP FUNCTION gin_compare_prefix_int2(int2, int2, int2, internal);
-DROP FUNCTION gin_extract_query_int2(int2, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_int4(int4, internal);
-DROP FUNCTION gin_compare_prefix_int4(int4, int4, int2, internal);
-DROP FUNCTION gin_extract_query_int4(int4, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_int8(int8, internal);
-DROP FUNCTION gin_compare_prefix_int8(int8, int8, int2, internal);
-DROP FUNCTION gin_extract_query_int8(int8, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_float4(float4, internal);
-DROP FUNCTION gin_compare_prefix_float4(float4, float4, int2, internal);
-DROP FUNCTION gin_extract_query_float4(float4, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_float8(float8, internal);
-DROP FUNCTION gin_compare_prefix_float8(float8, float8, int2, internal);
-DROP FUNCTION gin_extract_query_float8(float8, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_money(money, internal);
-DROP FUNCTION gin_compare_prefix_money(money, money, int2, internal);
-DROP FUNCTION gin_extract_query_money(money, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_oid(oid, internal);
-DROP FUNCTION gin_compare_prefix_oid(oid, oid, int2, internal);
-DROP FUNCTION gin_extract_query_oid(oid, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_timestamp(timestamp, internal);
-DROP FUNCTION gin_compare_prefix_timestamp(timestamp, timestamp, int2, internal);
-DROP FUNCTION gin_extract_query_timestamp(timestamp, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_timestamptz(timestamptz, internal);
-DROP FUNCTION gin_compare_prefix_timestamptz(timestamptz, timestamptz, int2, internal);
-DROP FUNCTION gin_extract_query_timestamptz(timestamptz, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_time(time, internal);
-DROP FUNCTION gin_compare_prefix_time(time, time, int2, internal);
-DROP FUNCTION gin_extract_query_time(time, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_timetz(timetz, internal);
-DROP FUNCTION gin_compare_prefix_timetz(timetz, timetz, int2, internal);
-DROP FUNCTION gin_extract_query_timetz(timetz, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_date(date, internal);
-DROP FUNCTION gin_compare_prefix_date(date, date, int2, internal);
-DROP FUNCTION gin_extract_query_date(date, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_interval(interval, internal);
-DROP FUNCTION gin_compare_prefix_interval(interval, interval, int2, internal);
-DROP FUNCTION gin_extract_query_interval(interval, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_macaddr(macaddr, internal);
-DROP FUNCTION gin_compare_prefix_macaddr(macaddr, macaddr, int2, internal);
-DROP FUNCTION gin_extract_query_macaddr(macaddr, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_inet(inet, internal);
-DROP FUNCTION gin_compare_prefix_inet(inet, inet, int2, internal);
-DROP FUNCTION gin_extract_query_inet(inet, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_cidr(cidr, internal);
-DROP FUNCTION gin_compare_prefix_cidr(cidr, cidr, int2, internal);
-DROP FUNCTION gin_extract_query_cidr(cidr, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_text(text, internal);
-DROP FUNCTION gin_compare_prefix_text(text, text, int2, internal);
-DROP FUNCTION gin_extract_query_text(text, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_char("char", internal);
-DROP FUNCTION gin_compare_prefix_char("char", "char", int2, internal);
-DROP FUNCTION gin_extract_query_char("char", internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_bytea(bytea, internal);
-DROP FUNCTION gin_compare_prefix_bytea(bytea, bytea, int2, internal);
-DROP FUNCTION gin_extract_query_bytea(bytea, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_bit(bit, internal);
-DROP FUNCTION gin_compare_prefix_bit(bit, bit, int2, internal);
-DROP FUNCTION gin_extract_query_bit(bit, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_varbit(varbit, internal);
-DROP FUNCTION gin_compare_prefix_varbit(varbit, varbit, int2, internal);
-DROP FUNCTION gin_extract_query_varbit(varbit, internal, int2, internal, internal);
-DROP FUNCTION gin_extract_value_numeric(numeric, internal);
-DROP FUNCTION gin_compare_prefix_numeric(numeric, numeric, int2, internal);
-DROP FUNCTION gin_extract_query_numeric(numeric, internal, int2, internal, internal);
-DROP FUNCTION gin_numeric_cmp(numeric, numeric);
diff --git a/contrib/btree_gist/.gitignore b/contrib/btree_gist/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/contrib/btree_gist/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/contrib/btree_gist/Makefile b/contrib/btree_gist/Makefile
index 8c779c4d06..ba4af14658 100644
--- a/contrib/btree_gist/Makefile
+++ b/contrib/btree_gist/Makefile
@@ -1,17 +1,21 @@
-# $PostgreSQL: pgsql/contrib/btree_gist/Makefile,v 1.12 2007/11/10 23:59:50 momjian Exp $
+# contrib/btree_gist/Makefile
-MODULE_big = btree_gist
+MODULE_big = btree_gist
-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
+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
-DATA_built = btree_gist.sql
-DATA = uninstall_btree_gist.sql
+EXTENSION = btree_gist
+DATA = btree_gist--1.0.sql btree_gist--unpackaged--1.0.sql
-REGRESS = init int2 int4 int8 float4 float8 cash oid timestamp timestamptz time timetz \
- date interval macaddr inet cidr text varchar char bytea bit varbit numeric
+REGRESS = init int2 int4 int8 float4 float8 cash oid timestamp timestamptz \
+ time timetz date interval macaddr inet cidr text varchar char bytea \
+ bit varbit numeric not_equal
+
+SHLIB_LINK += $(filter -lm, $(LIBS))
ifdef USE_PGXS
PG_CONFIG = pg_config
diff --git a/contrib/btree_gist/btree_bit.c b/contrib/btree_gist/btree_bit.c
index f78134f443..8675d2488d 100644
--- a/contrib/btree_gist/btree_bit.c
+++ b/contrib/btree_gist/btree_bit.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_bit.c,v 1.11 2009/08/04 18:49:50 tgl Exp $
+ * contrib/btree_gist/btree_bit.c
*/
#include "btree_gist.h"
#include "btree_utils_var.h"
@@ -29,40 +29,51 @@ Datum gbt_bit_same(PG_FUNCTION_ARGS);
/* define for comparison */
static bool
-gbt_bitgt(const void *a, const void *b)
+gbt_bitgt(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(bitgt, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2(bitgt,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_bitge(const void *a, const void *b)
+gbt_bitge(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(bitge, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2(bitge,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_biteq(const void *a, const void *b)
+gbt_biteq(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(biteq, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2(biteq,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_bitle(const void *a, const void *b)
+gbt_bitle(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(bitle, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2(bitle,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_bitlt(const void *a, const void *b)
+gbt_bitlt(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(bitlt, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2(bitlt,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static int32
-gbt_bitcmp(const bytea *a, const bytea *b)
+gbt_bitcmp(const void *a, const void *b, Oid collation)
{
- return
- (DatumGetInt32(DirectFunctionCall2(byteacmp, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetInt32(DirectFunctionCall2(byteacmp,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
@@ -134,7 +145,7 @@ gbt_bit_consistent(PG_FUNCTION_ARGS)
/* Oid subtype = PG_GETARG_OID(3); */
bool *recheck = (bool *) PG_GETARG_POINTER(4);
- bool retval = FALSE;
+ bool retval;
GBT_VARKEY *key = (GBT_VARKEY *) DatumGetPointer(entry->key);
GBT_VARKEY_R r = gbt_var_key_readable(key);
@@ -142,12 +153,14 @@ gbt_bit_consistent(PG_FUNCTION_ARGS)
*recheck = false;
if (GIST_LEAF(entry))
- retval = gbt_var_consistent(&r, query, &strategy, TRUE, &tinfo);
+ retval = gbt_var_consistent(&r, query, strategy, PG_GET_COLLATION(),
+ TRUE, &tinfo);
else
{
bytea *q = gbt_bit_xfrm((bytea *) query);
- retval = gbt_var_consistent(&r, (void *) q, &strategy, FALSE, &tinfo);
+ retval = gbt_var_consistent(&r, q, strategy, PG_GET_COLLATION(),
+ FALSE, &tinfo);
}
PG_RETURN_BOOL(retval);
}
@@ -160,7 +173,8 @@ gbt_bit_union(PG_FUNCTION_ARGS)
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
int32 *size = (int *) PG_GETARG_POINTER(1);
- PG_RETURN_POINTER(gbt_var_union(entryvec, size, &tinfo));
+ PG_RETURN_POINTER(gbt_var_union(entryvec, size, PG_GET_COLLATION(),
+ &tinfo));
}
@@ -170,7 +184,8 @@ gbt_bit_picksplit(PG_FUNCTION_ARGS)
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
GIST_SPLITVEC *v = (GIST_SPLITVEC *) PG_GETARG_POINTER(1);
- gbt_var_picksplit(entryvec, v, &tinfo);
+ gbt_var_picksplit(entryvec, v, PG_GET_COLLATION(),
+ &tinfo);
PG_RETURN_POINTER(v);
}
@@ -181,7 +196,8 @@ gbt_bit_same(PG_FUNCTION_ARGS)
Datum d2 = PG_GETARG_DATUM(1);
bool *result = (bool *) PG_GETARG_POINTER(2);
- PG_RETURN_POINTER(gbt_var_same(result, d1, d2, &tinfo));
+ *result = gbt_var_same(d1, d2, PG_GET_COLLATION(), &tinfo);
+ PG_RETURN_POINTER(result);
}
@@ -192,5 +208,6 @@ gbt_bit_penalty(PG_FUNCTION_ARGS)
GISTENTRY *n = (GISTENTRY *) PG_GETARG_POINTER(1);
float *result = (float *) PG_GETARG_POINTER(2);
- PG_RETURN_POINTER(gbt_var_penalty(result, o, n, &tinfo));
+ PG_RETURN_POINTER(gbt_var_penalty(result, o, n, PG_GET_COLLATION(),
+ &tinfo));
}
diff --git a/contrib/btree_gist/btree_bytea.c b/contrib/btree_gist/btree_bytea.c
index 88b4a380e8..e45509d15c 100644
--- a/contrib/btree_gist/btree_bytea.c
+++ b/contrib/btree_gist/btree_bytea.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_bytea.c,v 1.10 2009/08/04 18:49:50 tgl Exp $
+ * contrib/btree_gist/btree_bytea.c
*/
#include "btree_gist.h"
#include "btree_utils_var.h"
@@ -27,41 +27,51 @@ Datum gbt_bytea_same(PG_FUNCTION_ARGS);
/* define for comparison */
static bool
-gbt_byteagt(const void *a, const void *b)
+gbt_byteagt(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(byteagt, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2(byteagt,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_byteage(const void *a, const void *b)
+gbt_byteage(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(byteage, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2(byteage,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_byteaeq(const void *a, const void *b)
+gbt_byteaeq(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(byteaeq, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2(byteaeq,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_byteale(const void *a, const void *b)
+gbt_byteale(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(byteale, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2(byteale,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_bytealt(const void *a, const void *b)
+gbt_bytealt(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(bytealt, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2(bytealt,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
-
static int32
-gbt_byteacmp(const bytea *a, const bytea *b)
+gbt_byteacmp(const void *a, const void *b, Oid collation)
{
- return
- (DatumGetInt32(DirectFunctionCall2(byteacmp, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetInt32(DirectFunctionCall2(byteacmp,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
@@ -111,7 +121,8 @@ gbt_bytea_consistent(PG_FUNCTION_ARGS)
/* All cases served by this function are exact */
*recheck = false;
- retval = gbt_var_consistent(&r, query, &strategy, GIST_LEAF(entry), &tinfo);
+ retval = gbt_var_consistent(&r, query, strategy, PG_GET_COLLATION(),
+ GIST_LEAF(entry), &tinfo);
PG_RETURN_BOOL(retval);
}
@@ -123,7 +134,8 @@ gbt_bytea_union(PG_FUNCTION_ARGS)
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
int32 *size = (int *) PG_GETARG_POINTER(1);
- PG_RETURN_POINTER(gbt_var_union(entryvec, size, &tinfo));
+ PG_RETURN_POINTER(gbt_var_union(entryvec, size, PG_GET_COLLATION(),
+ &tinfo));
}
@@ -133,7 +145,8 @@ gbt_bytea_picksplit(PG_FUNCTION_ARGS)
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
GIST_SPLITVEC *v = (GIST_SPLITVEC *) PG_GETARG_POINTER(1);
- gbt_var_picksplit(entryvec, v, &tinfo);
+ gbt_var_picksplit(entryvec, v, PG_GET_COLLATION(),
+ &tinfo);
PG_RETURN_POINTER(v);
}
@@ -144,7 +157,8 @@ gbt_bytea_same(PG_FUNCTION_ARGS)
Datum d2 = PG_GETARG_DATUM(1);
bool *result = (bool *) PG_GETARG_POINTER(2);
- PG_RETURN_POINTER(gbt_var_same(result, d1, d2, &tinfo));
+ *result = gbt_var_same(d1, d2, PG_GET_COLLATION(), &tinfo);
+ PG_RETURN_POINTER(result);
}
@@ -155,5 +169,6 @@ gbt_bytea_penalty(PG_FUNCTION_ARGS)
GISTENTRY *n = (GISTENTRY *) PG_GETARG_POINTER(1);
float *result = (float *) PG_GETARG_POINTER(2);
- PG_RETURN_POINTER(gbt_var_penalty(result, o, n, &tinfo));
+ PG_RETURN_POINTER(gbt_var_penalty(result, o, n, PG_GET_COLLATION(),
+ &tinfo));
}
diff --git a/contrib/btree_gist/btree_cash.c b/contrib/btree_gist/btree_cash.c
index a1efde6146..2664a26870 100644
--- a/contrib/btree_gist/btree_cash.c
+++ b/contrib/btree_gist/btree_cash.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_cash.c,v 1.11 2010/02/26 02:00:31 momjian Exp $
+ * contrib/btree_gist/btree_cash.c
*/
#include "btree_gist.h"
#include "btree_utils_num.h"
@@ -18,6 +18,7 @@ PG_FUNCTION_INFO_V1(gbt_cash_compress);
PG_FUNCTION_INFO_V1(gbt_cash_union);
PG_FUNCTION_INFO_V1(gbt_cash_picksplit);
PG_FUNCTION_INFO_V1(gbt_cash_consistent);
+PG_FUNCTION_INFO_V1(gbt_cash_distance);
PG_FUNCTION_INFO_V1(gbt_cash_penalty);
PG_FUNCTION_INFO_V1(gbt_cash_same);
@@ -25,6 +26,7 @@ Datum gbt_cash_compress(PG_FUNCTION_ARGS);
Datum gbt_cash_union(PG_FUNCTION_ARGS);
Datum gbt_cash_picksplit(PG_FUNCTION_ARGS);
Datum gbt_cash_consistent(PG_FUNCTION_ARGS);
+Datum gbt_cash_distance(PG_FUNCTION_ARGS);
Datum gbt_cash_penalty(PG_FUNCTION_ARGS);
Datum gbt_cash_same(PG_FUNCTION_ARGS);
@@ -71,6 +73,12 @@ gbt_cashkey_cmp(const void *a, const void *b)
return (ia->lower > ib->lower) ? 1 : -1;
}
+static float8
+gbt_cash_dist(const void *a, const void *b)
+{
+ return GET_FLOAT_DISTANCE(Cash, a, b);
+}
+
static const gbtree_ninfo tinfo =
{
@@ -81,10 +89,33 @@ static const gbtree_ninfo tinfo =
gbt_casheq,
gbt_cashle,
gbt_cashlt,
- gbt_cashkey_cmp
+ gbt_cashkey_cmp,
+ gbt_cash_dist
};
+PG_FUNCTION_INFO_V1(cash_dist);
+Datum cash_dist(PG_FUNCTION_ARGS);
+Datum
+cash_dist(PG_FUNCTION_ARGS)
+{
+ Cash a = PG_GETARG_CASH(0);
+ Cash b = PG_GETARG_CASH(1);
+ Cash r;
+ Cash ra;
+
+ r = a - b;
+ ra = Abs(r);
+
+ /* Overflow check. */
+ if (ra < 0 || (!SAMESIGN(a, b) && !SAMESIGN(r, a)))
+ ereport(ERROR,
+ (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
+ errmsg("money out of range")));
+
+ PG_RETURN_CASH(ra);
+}
+
/**************************************************
* Cash ops
**************************************************/
@@ -125,6 +156,25 @@ gbt_cash_consistent(PG_FUNCTION_ARGS)
Datum
+gbt_cash_distance(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ Cash query = PG_GETARG_CASH(1);
+
+ /* Oid subtype = PG_GETARG_OID(3); */
+ cashKEY *kkk = (cashKEY *) DatumGetPointer(entry->key);
+ GBT_NUMKEY_R key;
+
+ key.lower = (GBT_NUMKEY *) &kkk->lower;
+ key.upper = (GBT_NUMKEY *) &kkk->upper;
+
+ PG_RETURN_FLOAT8(
+ gbt_num_distance(&key, (void *) &query, GIST_LEAF(entry), &tinfo)
+ );
+}
+
+
+Datum
gbt_cash_union(PG_FUNCTION_ARGS)
{
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
diff --git a/contrib/btree_gist/btree_date.c b/contrib/btree_gist/btree_date.c
index d8dce91535..8a675e2f1d 100644
--- a/contrib/btree_gist/btree_date.c
+++ b/contrib/btree_gist/btree_date.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_date.c,v 1.9 2010/02/26 02:00:31 momjian Exp $
+ * contrib/btree_gist/btree_date.c
*/
#include "btree_gist.h"
#include "btree_utils_num.h"
@@ -18,6 +18,7 @@ PG_FUNCTION_INFO_V1(gbt_date_compress);
PG_FUNCTION_INFO_V1(gbt_date_union);
PG_FUNCTION_INFO_V1(gbt_date_picksplit);
PG_FUNCTION_INFO_V1(gbt_date_consistent);
+PG_FUNCTION_INFO_V1(gbt_date_distance);
PG_FUNCTION_INFO_V1(gbt_date_penalty);
PG_FUNCTION_INFO_V1(gbt_date_same);
@@ -25,6 +26,7 @@ Datum gbt_date_compress(PG_FUNCTION_ARGS);
Datum gbt_date_union(PG_FUNCTION_ARGS);
Datum gbt_date_picksplit(PG_FUNCTION_ARGS);
Datum gbt_date_consistent(PG_FUNCTION_ARGS);
+Datum gbt_date_distance(PG_FUNCTION_ARGS);
Datum gbt_date_penalty(PG_FUNCTION_ARGS);
Datum gbt_date_same(PG_FUNCTION_ARGS);
@@ -84,6 +86,17 @@ gbt_datekey_cmp(const void *a, const void *b)
return res;
}
+static float8
+gdb_date_dist(const void *a, const void *b)
+{
+ /* we assume the difference can't overflow */
+ Datum diff = DirectFunctionCall2(date_mi,
+ DateADTGetDatum(*((const DateADT *) a)),
+ DateADTGetDatum(*((const DateADT *) b)));
+
+ return (float8) Abs(DatumGetInt32(diff));
+}
+
static const gbtree_ninfo tinfo =
{
@@ -94,10 +107,25 @@ static const gbtree_ninfo tinfo =
gbt_dateeq,
gbt_datele,
gbt_datelt,
- gbt_datekey_cmp
+ gbt_datekey_cmp,
+ gdb_date_dist
};
+PG_FUNCTION_INFO_V1(date_dist);
+Datum date_dist(PG_FUNCTION_ARGS);
+Datum
+date_dist(PG_FUNCTION_ARGS)
+{
+ /* we assume the difference can't overflow */
+ Datum diff = DirectFunctionCall2(date_mi,
+ PG_GETARG_DATUM(0),
+ PG_GETARG_DATUM(1));
+
+ PG_RETURN_INT32(Abs(DatumGetInt32(diff)));
+}
+
+
/**************************************************
* date ops
**************************************************/
@@ -140,6 +168,25 @@ gbt_date_consistent(PG_FUNCTION_ARGS)
Datum
+gbt_date_distance(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ DateADT query = PG_GETARG_DATEADT(1);
+
+ /* Oid subtype = PG_GETARG_OID(3); */
+ dateKEY *kkk = (dateKEY *) DatumGetPointer(entry->key);
+ GBT_NUMKEY_R key;
+
+ key.lower = (GBT_NUMKEY *) &kkk->lower;
+ key.upper = (GBT_NUMKEY *) &kkk->upper;
+
+ PG_RETURN_FLOAT8(
+ gbt_num_distance(&key, (void *) &query, GIST_LEAF(entry), &tinfo)
+ );
+}
+
+
+Datum
gbt_date_union(PG_FUNCTION_ARGS)
{
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
diff --git a/contrib/btree_gist/btree_float4.c b/contrib/btree_gist/btree_float4.c
index 7ece9ea220..266256b23c 100644
--- a/contrib/btree_gist/btree_float4.c
+++ b/contrib/btree_gist/btree_float4.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_float4.c,v 1.10 2010/02/26 02:00:31 momjian Exp $
+ * contrib/btree_gist/btree_float4.c
*/
#include "btree_gist.h"
#include "btree_utils_num.h"
@@ -17,6 +17,7 @@ PG_FUNCTION_INFO_V1(gbt_float4_compress);
PG_FUNCTION_INFO_V1(gbt_float4_union);
PG_FUNCTION_INFO_V1(gbt_float4_picksplit);
PG_FUNCTION_INFO_V1(gbt_float4_consistent);
+PG_FUNCTION_INFO_V1(gbt_float4_distance);
PG_FUNCTION_INFO_V1(gbt_float4_penalty);
PG_FUNCTION_INFO_V1(gbt_float4_same);
@@ -24,6 +25,7 @@ Datum gbt_float4_compress(PG_FUNCTION_ARGS);
Datum gbt_float4_union(PG_FUNCTION_ARGS);
Datum gbt_float4_picksplit(PG_FUNCTION_ARGS);
Datum gbt_float4_consistent(PG_FUNCTION_ARGS);
+Datum gbt_float4_distance(PG_FUNCTION_ARGS);
Datum gbt_float4_penalty(PG_FUNCTION_ARGS);
Datum gbt_float4_same(PG_FUNCTION_ARGS);
@@ -70,6 +72,12 @@ gbt_float4key_cmp(const void *a, const void *b)
return (ia->lower > ib->lower) ? 1 : -1;
}
+static float8
+gbt_float4_dist(const void *a, const void *b)
+{
+ return GET_FLOAT_DISTANCE(float4, a, b);
+}
+
static const gbtree_ninfo tinfo =
{
@@ -80,10 +88,27 @@ static const gbtree_ninfo tinfo =
gbt_float4eq,
gbt_float4le,
gbt_float4lt,
- gbt_float4key_cmp
+ gbt_float4key_cmp,
+ gbt_float4_dist
};
+PG_FUNCTION_INFO_V1(float4_dist);
+Datum float4_dist(PG_FUNCTION_ARGS);
+Datum
+float4_dist(PG_FUNCTION_ARGS)
+{
+ float4 a = PG_GETARG_FLOAT4(0);
+ float4 b = PG_GETARG_FLOAT4(1);
+ float4 r;
+
+ r = a - b;
+ CHECKFLOATVAL(r, isinf(a) || isinf(b), true);
+
+ PG_RETURN_FLOAT4(Abs(r));
+}
+
+
/**************************************************
* float4 ops
**************************************************/
@@ -124,6 +149,25 @@ gbt_float4_consistent(PG_FUNCTION_ARGS)
Datum
+gbt_float4_distance(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ float4 query = PG_GETARG_FLOAT4(1);
+
+ /* Oid subtype = PG_GETARG_OID(3); */
+ float4KEY *kkk = (float4KEY *) DatumGetPointer(entry->key);
+ GBT_NUMKEY_R key;
+
+ key.lower = (GBT_NUMKEY *) &kkk->lower;
+ key.upper = (GBT_NUMKEY *) &kkk->upper;
+
+ PG_RETURN_FLOAT8(
+ gbt_num_distance(&key, (void *) &query, GIST_LEAF(entry), &tinfo)
+ );
+}
+
+
+Datum
gbt_float4_union(PG_FUNCTION_ARGS)
{
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
diff --git a/contrib/btree_gist/btree_float8.c b/contrib/btree_gist/btree_float8.c
index ab4912883d..efbee0f3e4 100644
--- a/contrib/btree_gist/btree_float8.c
+++ b/contrib/btree_gist/btree_float8.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_float8.c,v 1.10 2010/02/26 02:00:31 momjian Exp $
+ * contrib/btree_gist/btree_float8.c
*/
#include "btree_gist.h"
#include "btree_utils_num.h"
@@ -17,6 +17,7 @@ PG_FUNCTION_INFO_V1(gbt_float8_compress);
PG_FUNCTION_INFO_V1(gbt_float8_union);
PG_FUNCTION_INFO_V1(gbt_float8_picksplit);
PG_FUNCTION_INFO_V1(gbt_float8_consistent);
+PG_FUNCTION_INFO_V1(gbt_float8_distance);
PG_FUNCTION_INFO_V1(gbt_float8_penalty);
PG_FUNCTION_INFO_V1(gbt_float8_same);
@@ -24,6 +25,7 @@ Datum gbt_float8_compress(PG_FUNCTION_ARGS);
Datum gbt_float8_union(PG_FUNCTION_ARGS);
Datum gbt_float8_picksplit(PG_FUNCTION_ARGS);
Datum gbt_float8_consistent(PG_FUNCTION_ARGS);
+Datum gbt_float8_distance(PG_FUNCTION_ARGS);
Datum gbt_float8_penalty(PG_FUNCTION_ARGS);
Datum gbt_float8_same(PG_FUNCTION_ARGS);
@@ -71,6 +73,19 @@ gbt_float8key_cmp(const void *a, const void *b)
return (ia->lower > ib->lower) ? 1 : -1;
}
+static float8
+gbt_float8_dist(const void *a, const void *b)
+{
+ float8 arg1 = *(const float8 *) a;
+ float8 arg2 = *(const float8 *) b;
+ float8 r;
+
+ r = arg1 - arg2;
+ CHECKFLOATVAL(r, isinf(arg1) || isinf(arg2), true);
+
+ return Abs(r);
+}
+
static const gbtree_ninfo tinfo =
{
@@ -81,10 +96,26 @@ static const gbtree_ninfo tinfo =
gbt_float8eq,
gbt_float8le,
gbt_float8lt,
- gbt_float8key_cmp
+ gbt_float8key_cmp,
+ gbt_float8_dist
};
+PG_FUNCTION_INFO_V1(float8_dist);
+Datum float8_dist(PG_FUNCTION_ARGS);
+Datum
+float8_dist(PG_FUNCTION_ARGS)
+{
+ float8 a = PG_GETARG_FLOAT8(0);
+ float8 b = PG_GETARG_FLOAT8(1);
+ float8 r;
+
+ r = a - b;
+ CHECKFLOATVAL(r, isinf(a) || isinf(b), true);
+
+ PG_RETURN_FLOAT8(Abs(r));
+}
+
/**************************************************
* float8 ops
**************************************************/
@@ -125,6 +156,25 @@ gbt_float8_consistent(PG_FUNCTION_ARGS)
Datum
+gbt_float8_distance(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ float8 query = PG_GETARG_FLOAT8(1);
+
+ /* Oid subtype = PG_GETARG_OID(3); */
+ float8KEY *kkk = (float8KEY *) DatumGetPointer(entry->key);
+ GBT_NUMKEY_R key;
+
+ key.lower = (GBT_NUMKEY *) &kkk->lower;
+ key.upper = (GBT_NUMKEY *) &kkk->upper;
+
+ PG_RETURN_FLOAT8(
+ gbt_num_distance(&key, (void *) &query, GIST_LEAF(entry), &tinfo)
+ );
+}
+
+
+Datum
gbt_float8_union(PG_FUNCTION_ARGS)
{
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
diff --git a/contrib/btree_gist/btree_gist.sql.in b/contrib/btree_gist/btree_gist--1.0.sql
index e78c83cdc2..dd428995c1 100644
--- a/contrib/btree_gist/btree_gist.sql.in
+++ b/contrib/btree_gist/btree_gist--1.0.sql
@@ -1,14 +1,11 @@
-/* $PostgreSQL: pgsql/contrib/btree_gist/btree_gist.sql.in,v 1.21 2009/06/11 18:30:03 tgl Exp $ */
+/* contrib/btree_gist/btree_gist--1.0.sql */
--- Adjust this setting to control where the objects get created.
-SET search_path = public;
-
-CREATE OR REPLACE FUNCTION gbtreekey4_in(cstring)
+CREATE FUNCTION gbtreekey4_in(cstring)
RETURNS gbtreekey4
AS 'MODULE_PATHNAME', 'gbtreekey_in'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbtreekey4_out(gbtreekey4)
+CREATE FUNCTION gbtreekey4_out(gbtreekey4)
RETURNS cstring
AS 'MODULE_PATHNAME', 'gbtreekey_out'
LANGUAGE C IMMUTABLE STRICT;
@@ -19,12 +16,12 @@ CREATE TYPE gbtreekey4 (
OUTPUT = gbtreekey4_out
);
-CREATE OR REPLACE FUNCTION gbtreekey8_in(cstring)
+CREATE FUNCTION gbtreekey8_in(cstring)
RETURNS gbtreekey8
AS 'MODULE_PATHNAME', 'gbtreekey_in'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbtreekey8_out(gbtreekey8)
+CREATE FUNCTION gbtreekey8_out(gbtreekey8)
RETURNS cstring
AS 'MODULE_PATHNAME', 'gbtreekey_out'
LANGUAGE C IMMUTABLE STRICT;
@@ -35,12 +32,12 @@ CREATE TYPE gbtreekey8 (
OUTPUT = gbtreekey8_out
);
-CREATE OR REPLACE FUNCTION gbtreekey16_in(cstring)
+CREATE FUNCTION gbtreekey16_in(cstring)
RETURNS gbtreekey16
AS 'MODULE_PATHNAME', 'gbtreekey_in'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbtreekey16_out(gbtreekey16)
+CREATE FUNCTION gbtreekey16_out(gbtreekey16)
RETURNS cstring
AS 'MODULE_PATHNAME', 'gbtreekey_out'
LANGUAGE C IMMUTABLE STRICT;
@@ -51,12 +48,12 @@ CREATE TYPE gbtreekey16 (
OUTPUT = gbtreekey16_out
);
-CREATE OR REPLACE FUNCTION gbtreekey32_in(cstring)
+CREATE FUNCTION gbtreekey32_in(cstring)
RETURNS gbtreekey32
AS 'MODULE_PATHNAME', 'gbtreekey_in'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbtreekey32_out(gbtreekey32)
+CREATE FUNCTION gbtreekey32_out(gbtreekey32)
RETURNS cstring
AS 'MODULE_PATHNAME', 'gbtreekey_out'
LANGUAGE C IMMUTABLE STRICT;
@@ -67,12 +64,12 @@ CREATE TYPE gbtreekey32 (
OUTPUT = gbtreekey32_out
);
-CREATE OR REPLACE FUNCTION gbtreekey_var_in(cstring)
+CREATE FUNCTION gbtreekey_var_in(cstring)
RETURNS gbtreekey_var
AS 'MODULE_PATHNAME', 'gbtreekey_in'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbtreekey_var_out(gbtreekey_var)
+CREATE FUNCTION gbtreekey_var_out(gbtreekey_var)
RETURNS cstring
AS 'MODULE_PATHNAME', 'gbtreekey_out'
LANGUAGE C IMMUTABLE STRICT;
@@ -84,6 +81,151 @@ CREATE TYPE gbtreekey_var (
STORAGE = EXTENDED
);
+--distance operators
+
+CREATE FUNCTION cash_dist(money, money)
+RETURNS money
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = money,
+ RIGHTARG = money,
+ PROCEDURE = cash_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION date_dist(date, date)
+RETURNS int4
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = date,
+ RIGHTARG = date,
+ PROCEDURE = date_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION float4_dist(float4, float4)
+RETURNS float4
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = float4,
+ RIGHTARG = float4,
+ PROCEDURE = float4_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION float8_dist(float8, float8)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = float8,
+ RIGHTARG = float8,
+ PROCEDURE = float8_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION int2_dist(int2, int2)
+RETURNS int2
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = int2,
+ RIGHTARG = int2,
+ PROCEDURE = int2_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION int4_dist(int4, int4)
+RETURNS int4
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = int4,
+ RIGHTARG = int4,
+ PROCEDURE = int4_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION int8_dist(int8, int8)
+RETURNS int8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = int8,
+ RIGHTARG = int8,
+ PROCEDURE = int8_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION interval_dist(interval, interval)
+RETURNS interval
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = interval,
+ RIGHTARG = interval,
+ PROCEDURE = interval_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION oid_dist(oid, oid)
+RETURNS oid
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = oid,
+ RIGHTARG = oid,
+ PROCEDURE = oid_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION time_dist(time, time)
+RETURNS interval
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = time,
+ RIGHTARG = time,
+ PROCEDURE = time_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION ts_dist(timestamp, timestamp)
+RETURNS interval
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = timestamp,
+ RIGHTARG = timestamp,
+ PROCEDURE = ts_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION tstz_dist(timestamptz, timestamptz)
+RETURNS interval
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = timestamptz,
+ RIGHTARG = timestamptz,
+ PROCEDURE = tstz_dist,
+ COMMUTATOR = '<->'
+);
--
@@ -94,49 +236,54 @@ CREATE TYPE gbtreekey_var (
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_oid_consistent(internal,oid,int2,oid,internal)
+CREATE FUNCTION gbt_oid_consistent(internal,oid,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_oid_compress(internal)
+CREATE FUNCTION gbt_oid_distance(internal,oid,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_oid_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_decompress(internal)
+CREATE FUNCTION gbt_decompress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_var_decompress(internal)
+CREATE FUNCTION gbt_var_decompress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_oid_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_oid_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_oid_picksplit(internal, internal)
+CREATE FUNCTION gbt_oid_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_oid_union(bytea, internal)
+CREATE FUNCTION gbt_oid_union(bytea, internal)
RETURNS gbtreekey8
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_oid_same(internal, internal, internal)
+CREATE FUNCTION gbt_oid_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_oid_ops
-DEFAULT FOR TYPE oid USING gist
+DEFAULT FOR TYPE oid USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -152,6 +299,15 @@ AS
FUNCTION 7 gbt_oid_same (internal, internal, internal),
STORAGE gbtreekey8;
+-- 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) ;
+
--
--
@@ -161,39 +317,44 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_int2_consistent(internal,int2,int2,oid,internal)
+CREATE FUNCTION gbt_int2_consistent(internal,int2,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_int2_compress(internal)
+CREATE FUNCTION gbt_int2_distance(internal,int2,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_int2_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_int2_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_int2_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_int2_picksplit(internal, internal)
+CREATE FUNCTION gbt_int2_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_int2_union(bytea, internal)
+CREATE FUNCTION gbt_int2_union(bytea, internal)
RETURNS gbtreekey4
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_int2_same(internal, internal, internal)
+CREATE FUNCTION gbt_int2_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_int2_ops
-DEFAULT FOR TYPE int2 USING gist
+DEFAULT FOR TYPE int2 USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -209,6 +370,12 @@ AS
FUNCTION 7 gbt_int2_same (internal, internal, internal),
STORAGE gbtreekey4;
+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) ;
+
+
--
--
--
@@ -217,39 +384,44 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_int4_consistent(internal,int4,int2,oid,internal)
+CREATE FUNCTION gbt_int4_consistent(internal,int4,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_int4_compress(internal)
+CREATE FUNCTION gbt_int4_distance(internal,int4,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_int4_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_int4_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_int4_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_int4_picksplit(internal, internal)
+CREATE FUNCTION gbt_int4_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_int4_union(bytea, internal)
+CREATE FUNCTION gbt_int4_union(bytea, internal)
RETURNS gbtreekey8
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_int4_same(internal, internal, internal)
+CREATE FUNCTION gbt_int4_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_int4_ops
-DEFAULT FOR TYPE int4 USING gist
+DEFAULT FOR TYPE int4 USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -265,6 +437,12 @@ AS
FUNCTION 7 gbt_int4_same (internal, internal, internal),
STORAGE gbtreekey8;
+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) ;
+
+
--
--
--
@@ -273,39 +451,44 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_int8_consistent(internal,int8,int2,oid,internal)
+CREATE FUNCTION gbt_int8_consistent(internal,int8,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_int8_compress(internal)
+CREATE FUNCTION gbt_int8_distance(internal,int8,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_int8_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_int8_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_int8_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_int8_picksplit(internal, internal)
+CREATE FUNCTION gbt_int8_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_int8_union(bytea, internal)
+CREATE FUNCTION gbt_int8_union(bytea, internal)
RETURNS gbtreekey16
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_int8_same(internal, internal, internal)
+CREATE FUNCTION gbt_int8_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_int8_ops
-DEFAULT FOR TYPE int8 USING gist
+DEFAULT FOR TYPE int8 USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -321,6 +504,11 @@ AS
FUNCTION 7 gbt_int8_same (internal, internal, internal),
STORAGE gbtreekey16;
+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) ;
+
--
--
@@ -330,39 +518,44 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_float4_consistent(internal,float4,int2,oid,internal)
+CREATE FUNCTION gbt_float4_consistent(internal,float4,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_float4_compress(internal)
+CREATE FUNCTION gbt_float4_distance(internal,float4,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_float4_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_float4_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_float4_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_float4_picksplit(internal, internal)
+CREATE FUNCTION gbt_float4_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_float4_union(bytea, internal)
+CREATE FUNCTION gbt_float4_union(bytea, internal)
RETURNS gbtreekey8
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_float4_same(internal, internal, internal)
+CREATE FUNCTION gbt_float4_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_float4_ops
-DEFAULT FOR TYPE float4 USING gist
+DEFAULT FOR TYPE float4 USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -378,7 +571,10 @@ AS
FUNCTION 7 gbt_float4_same (internal, internal, internal),
STORAGE gbtreekey8;
-
+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) ;
--
@@ -389,39 +585,44 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_float8_consistent(internal,float8,int2,oid,internal)
+CREATE FUNCTION gbt_float8_consistent(internal,float8,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_float8_compress(internal)
+CREATE FUNCTION gbt_float8_distance(internal,float8,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_float8_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_float8_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_float8_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_float8_picksplit(internal, internal)
+CREATE FUNCTION gbt_float8_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_float8_union(bytea, internal)
+CREATE FUNCTION gbt_float8_union(bytea, internal)
RETURNS gbtreekey16
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_float8_same(internal, internal, internal)
+CREATE FUNCTION gbt_float8_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_float8_ops
-DEFAULT FOR TYPE float8 USING gist
+DEFAULT FOR TYPE float8 USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -437,58 +638,73 @@ AS
FUNCTION 7 gbt_float8_same (internal, internal, internal),
STORAGE gbtreekey16;
+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) ;
+
--
--
--
-- timestamp ops
---
+--
--
--
-CREATE OR REPLACE FUNCTION gbt_ts_consistent(internal,timestamp,int2,oid,internal)
+CREATE FUNCTION gbt_ts_consistent(internal,timestamp,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_tstz_consistent(internal,timestamptz,int2,oid,internal)
+CREATE FUNCTION gbt_ts_distance(internal,timestamp,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_tstz_consistent(internal,timestamptz,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION gbt_ts_compress(internal)
+
+CREATE FUNCTION gbt_tstz_distance(internal,timestamptz,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_ts_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_tstz_compress(internal)
+CREATE FUNCTION gbt_tstz_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_ts_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_ts_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION gbt_ts_picksplit(internal, internal)
+
+CREATE FUNCTION gbt_ts_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION gbt_ts_union(bytea, internal)
+
+CREATE FUNCTION gbt_ts_union(bytea, internal)
RETURNS gbtreekey16
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_ts_same(internal, internal, internal)
+CREATE FUNCTION gbt_ts_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_timestamp_ops
-DEFAULT FOR TYPE timestamp USING gist
+DEFAULT FOR TYPE timestamp USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -504,10 +720,15 @@ AS
FUNCTION 7 gbt_ts_same (internal, internal, internal),
STORAGE gbtreekey16;
+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) ;
+
-- Create the operator class
CREATE OPERATOR CLASS gist_timestamptz_ops
-DEFAULT FOR TYPE timestamptz USING gist
+DEFAULT FOR TYPE timestamptz USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -523,58 +744,68 @@ AS
FUNCTION 7 gbt_ts_same (internal, internal, internal),
STORAGE gbtreekey16;
+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) ;
+
--
--
--
-- time ops
---
+--
--
--
-CREATE OR REPLACE FUNCTION gbt_time_consistent(internal,time,int2,oid,internal)
+CREATE FUNCTION gbt_time_consistent(internal,time,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_timetz_consistent(internal,timetz,int2,oid,internal)
+CREATE FUNCTION gbt_time_distance(internal,time,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_timetz_consistent(internal,timetz,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_time_compress(internal)
+CREATE FUNCTION gbt_time_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_timetz_compress(internal)
+CREATE FUNCTION gbt_timetz_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_time_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_time_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION gbt_time_picksplit(internal, internal)
+
+CREATE FUNCTION gbt_time_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION gbt_time_union(bytea, internal)
+
+CREATE FUNCTION gbt_time_union(bytea, internal)
RETURNS gbtreekey16
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_time_same(internal, internal, internal)
+CREATE FUNCTION gbt_time_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_time_ops
-DEFAULT FOR TYPE time USING gist
+DEFAULT FOR TYPE time USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -590,8 +821,14 @@ AS
FUNCTION 7 gbt_time_same (internal, internal, internal),
STORAGE gbtreekey16;
+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) ;
+
+
CREATE OPERATOR CLASS gist_timetz_ops
-DEFAULT FOR TYPE timetz USING gist
+DEFAULT FOR TYPE timetz USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -607,48 +844,56 @@ AS
FUNCTION 7 gbt_time_same (internal, internal, internal),
STORAGE gbtreekey16;
+ALTER OPERATOR FAMILY gist_timetz_ops USING gist ADD
+ OPERATOR 6 <> (timetz, timetz) ;
+
--
--
--
-- date ops
---
+--
--
--
-CREATE OR REPLACE FUNCTION gbt_date_consistent(internal,date,int2,oid,internal)
+CREATE FUNCTION gbt_date_consistent(internal,date,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_date_compress(internal)
+CREATE FUNCTION gbt_date_distance(internal,date,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_date_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_date_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_date_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION gbt_date_picksplit(internal, internal)
+
+CREATE FUNCTION gbt_date_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION gbt_date_union(bytea, internal)
+
+CREATE FUNCTION gbt_date_union(bytea, internal)
RETURNS gbtreekey8
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_date_same(internal, internal, internal)
+CREATE FUNCTION gbt_date_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_date_ops
-DEFAULT FOR TYPE date USING gist
+DEFAULT FOR TYPE date USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -664,53 +909,63 @@ AS
FUNCTION 7 gbt_date_same (internal, internal, internal),
STORAGE gbtreekey8;
+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) ;
+
--
--
--
-- interval ops
---
+--
--
--
-CREATE OR REPLACE FUNCTION gbt_intv_consistent(internal,interval,int2,oid,internal)
+CREATE FUNCTION gbt_intv_consistent(internal,interval,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_intv_compress(internal)
+CREATE FUNCTION gbt_intv_distance(internal,interval,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_intv_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_intv_decompress(internal)
+CREATE FUNCTION gbt_intv_decompress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_intv_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_intv_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION gbt_intv_picksplit(internal, internal)
+
+CREATE FUNCTION gbt_intv_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION gbt_intv_union(bytea, internal)
+
+CREATE FUNCTION gbt_intv_union(bytea, internal)
RETURNS gbtreekey32
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_intv_same(internal, internal, internal)
+CREATE FUNCTION gbt_intv_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_interval_ops
-DEFAULT FOR TYPE interval USING gist
+DEFAULT FOR TYPE interval USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -726,6 +981,12 @@ AS
FUNCTION 7 gbt_intv_same (internal, internal, internal),
STORAGE gbtreekey32;
+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) ;
+
+
--
--
--
@@ -734,39 +995,44 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_cash_consistent(internal,money,int2,oid,internal)
+CREATE FUNCTION gbt_cash_consistent(internal,money,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_cash_compress(internal)
+CREATE FUNCTION gbt_cash_distance(internal,money,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_cash_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_cash_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_cash_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_cash_picksplit(internal, internal)
+CREATE FUNCTION gbt_cash_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_cash_union(bytea, internal)
+CREATE FUNCTION gbt_cash_union(bytea, internal)
RETURNS gbtreekey8
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_cash_same(internal, internal, internal)
+CREATE FUNCTION gbt_cash_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_cash_ops
-DEFAULT FOR TYPE money USING gist
+DEFAULT FOR TYPE money USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -782,6 +1048,12 @@ AS
FUNCTION 7 gbt_cash_same (internal, internal, internal),
STORAGE gbtreekey16;
+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) ;
+
+
--
--
--
@@ -790,39 +1062,39 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_macad_consistent(internal,macaddr,int2,oid,internal)
+CREATE FUNCTION gbt_macad_consistent(internal,macaddr,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_macad_compress(internal)
+CREATE FUNCTION gbt_macad_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_macad_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_macad_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_macad_picksplit(internal, internal)
+CREATE FUNCTION gbt_macad_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_macad_union(bytea, internal)
+CREATE FUNCTION gbt_macad_union(bytea, internal)
RETURNS gbtreekey16
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_macad_same(internal, internal, internal)
+CREATE FUNCTION gbt_macad_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_macaddr_ops
-DEFAULT FOR TYPE macaddr USING gist
+DEFAULT FOR TYPE macaddr USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -838,6 +1110,8 @@ AS
FUNCTION 7 gbt_macad_same (internal, internal, internal),
STORAGE gbtreekey16;
+ALTER OPERATOR FAMILY gist_macaddr_ops USING gist ADD
+ OPERATOR 6 <> (macaddr, macaddr) ;
--
@@ -848,49 +1122,49 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_text_consistent(internal,text,int2,oid,internal)
+CREATE FUNCTION gbt_text_consistent(internal,text,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_bpchar_consistent(internal,bpchar,int2,oid,internal)
+CREATE FUNCTION gbt_bpchar_consistent(internal,bpchar,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_text_compress(internal)
+CREATE FUNCTION gbt_text_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_bpchar_compress(internal)
+CREATE FUNCTION gbt_bpchar_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_text_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_text_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_text_picksplit(internal, internal)
+CREATE FUNCTION gbt_text_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_text_union(bytea, internal)
+CREATE FUNCTION gbt_text_union(bytea, internal)
RETURNS gbtreekey_var
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_text_same(internal, internal, internal)
+CREATE FUNCTION gbt_text_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_text_ops
-DEFAULT FOR TYPE text USING gist
+DEFAULT FOR TYPE text USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -904,12 +1178,15 @@ AS
FUNCTION 5 gbt_text_penalty (internal, internal, internal),
FUNCTION 6 gbt_text_picksplit (internal, internal),
FUNCTION 7 gbt_text_same (internal, internal, internal),
- STORAGE gbtreekey_var;
+ STORAGE gbtreekey_var;
+
+ALTER OPERATOR FAMILY gist_text_ops USING gist ADD
+ OPERATOR 6 <> (text, text) ;
---- Create the operator class
CREATE OPERATOR CLASS gist_bpchar_ops
-DEFAULT FOR TYPE bpchar USING gist
+DEFAULT FOR TYPE bpchar USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -923,8 +1200,10 @@ AS
FUNCTION 5 gbt_text_penalty (internal, internal, internal),
FUNCTION 6 gbt_text_picksplit (internal, internal),
FUNCTION 7 gbt_text_same (internal, internal, internal),
- STORAGE gbtreekey_var;
+ STORAGE gbtreekey_var;
+ALTER OPERATOR FAMILY gist_bpchar_ops USING gist ADD
+ OPERATOR 6 <> (bpchar, bpchar) ;
--
@@ -934,39 +1213,39 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_bytea_consistent(internal,bytea,int2,oid,internal)
+CREATE FUNCTION gbt_bytea_consistent(internal,bytea,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_bytea_compress(internal)
+CREATE FUNCTION gbt_bytea_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_bytea_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_bytea_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_bytea_picksplit(internal, internal)
+CREATE FUNCTION gbt_bytea_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_bytea_union(bytea, internal)
+CREATE FUNCTION gbt_bytea_union(bytea, internal)
RETURNS gbtreekey_var
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_bytea_same(internal, internal, internal)
+CREATE FUNCTION gbt_bytea_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_bytea_ops
-DEFAULT FOR TYPE bytea USING gist
+DEFAULT FOR TYPE bytea USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -980,7 +1259,10 @@ AS
FUNCTION 5 gbt_bytea_penalty (internal, internal, internal),
FUNCTION 6 gbt_bytea_picksplit (internal, internal),
FUNCTION 7 gbt_bytea_same (internal, internal, internal),
- STORAGE gbtreekey_var;
+ STORAGE gbtreekey_var;
+
+ALTER OPERATOR FAMILY gist_bytea_ops USING gist ADD
+ OPERATOR 6 <> (bytea, bytea) ;
--
@@ -991,39 +1273,39 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_numeric_consistent(internal,numeric,int2,oid,internal)
+CREATE FUNCTION gbt_numeric_consistent(internal,numeric,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_numeric_compress(internal)
+CREATE FUNCTION gbt_numeric_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_numeric_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_numeric_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_numeric_picksplit(internal, internal)
+CREATE FUNCTION gbt_numeric_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_numeric_union(bytea, internal)
+CREATE FUNCTION gbt_numeric_union(bytea, internal)
RETURNS gbtreekey_var
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_numeric_same(internal, internal, internal)
+CREATE FUNCTION gbt_numeric_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_numeric_ops
-DEFAULT FOR TYPE numeric USING gist
+DEFAULT FOR TYPE numeric USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -1037,7 +1319,11 @@ AS
FUNCTION 5 gbt_numeric_penalty (internal, internal, internal),
FUNCTION 6 gbt_numeric_picksplit (internal, internal),
FUNCTION 7 gbt_numeric_same (internal, internal, internal),
- STORAGE gbtreekey_var;
+ STORAGE gbtreekey_var;
+
+ALTER OPERATOR FAMILY gist_numeric_ops USING gist ADD
+ OPERATOR 6 <> (numeric, numeric) ;
+
--
--
@@ -1046,39 +1332,39 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_bit_consistent(internal,bit,int2,oid,internal)
+CREATE FUNCTION gbt_bit_consistent(internal,bit,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_bit_compress(internal)
+CREATE FUNCTION gbt_bit_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_bit_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_bit_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_bit_picksplit(internal, internal)
+CREATE FUNCTION gbt_bit_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_bit_union(bytea, internal)
+CREATE FUNCTION gbt_bit_union(bytea, internal)
RETURNS gbtreekey_var
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_bit_same(internal, internal, internal)
+CREATE FUNCTION gbt_bit_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_bit_ops
-DEFAULT FOR TYPE bit USING gist
+DEFAULT FOR TYPE bit USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -1092,12 +1378,15 @@ AS
FUNCTION 5 gbt_bit_penalty (internal, internal, internal),
FUNCTION 6 gbt_bit_picksplit (internal, internal),
FUNCTION 7 gbt_bit_same (internal, internal, internal),
- STORAGE gbtreekey_var;
+ STORAGE gbtreekey_var;
+
+ALTER OPERATOR FAMILY gist_bit_ops USING gist ADD
+ OPERATOR 6 <> (bit, bit) ;
-- Create the operator class
CREATE OPERATOR CLASS gist_vbit_ops
-DEFAULT FOR TYPE varbit USING gist
+DEFAULT FOR TYPE varbit USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -1111,8 +1400,10 @@ AS
FUNCTION 5 gbt_bit_penalty (internal, internal, internal),
FUNCTION 6 gbt_bit_picksplit (internal, internal),
FUNCTION 7 gbt_bit_same (internal, internal, internal),
- STORAGE gbtreekey_var;
+ STORAGE gbtreekey_var;
+ALTER OPERATOR FAMILY gist_vbit_ops USING gist ADD
+ OPERATOR 6 <> (varbit, varbit) ;
--
@@ -1123,39 +1414,39 @@ AS
--
--
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION gbt_inet_consistent(internal,inet,int2,oid,internal)
+CREATE FUNCTION gbt_inet_consistent(internal,inet,int2,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_inet_compress(internal)
+CREATE FUNCTION gbt_inet_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_inet_penalty(internal,internal,internal)
+CREATE FUNCTION gbt_inet_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_inet_picksplit(internal, internal)
+CREATE FUNCTION gbt_inet_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_inet_union(bytea, internal)
+CREATE FUNCTION gbt_inet_union(bytea, internal)
RETURNS gbtreekey16
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gbt_inet_same(internal, internal, internal)
+CREATE FUNCTION gbt_inet_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Create the operator class
CREATE OPERATOR CLASS gist_inet_ops
-DEFAULT FOR TYPE inet USING gist
+DEFAULT FOR TYPE inet USING gist
AS
OPERATOR 1 < ,
OPERATOR 2 <= ,
@@ -1171,9 +1462,13 @@ AS
FUNCTION 7 gbt_inet_same (internal, internal, internal),
STORAGE gbtreekey16;
+ALTER OPERATOR FAMILY gist_inet_ops USING gist ADD
+ OPERATOR 6 <> (inet, inet) ;
+
+
-- Create the operator class
CREATE OPERATOR CLASS gist_cidr_ops
-DEFAULT FOR TYPE cidr USING gist
+DEFAULT FOR TYPE cidr USING gist
AS
OPERATOR 1 < (inet, inet) ,
OPERATOR 2 <= (inet, inet) ,
@@ -1188,3 +1483,6 @@ AS
FUNCTION 6 gbt_inet_picksplit (internal, internal),
FUNCTION 7 gbt_inet_same (internal, internal, internal),
STORAGE gbtreekey16;
+
+ALTER OPERATOR FAMILY gist_cidr_ops USING gist ADD
+ OPERATOR 6 <> (inet, inet) ;
diff --git a/contrib/btree_gist/btree_gist--unpackaged--1.0.sql b/contrib/btree_gist/btree_gist--unpackaged--1.0.sql
new file mode 100644
index 0000000000..00252bf7c3
--- /dev/null
+++ b/contrib/btree_gist/btree_gist--unpackaged--1.0.sql
@@ -0,0 +1,476 @@
+/* contrib/btree_gist/btree_gist--unpackaged--1.0.sql */
+
+ALTER EXTENSION btree_gist ADD type gbtreekey4;
+ALTER EXTENSION btree_gist ADD function gbtreekey4_in(cstring);
+ALTER EXTENSION btree_gist ADD function gbtreekey4_out(gbtreekey4);
+ALTER EXTENSION btree_gist ADD type gbtreekey8;
+ALTER EXTENSION btree_gist ADD function gbtreekey8_in(cstring);
+ALTER EXTENSION btree_gist ADD function gbtreekey8_out(gbtreekey8);
+ALTER EXTENSION btree_gist ADD type gbtreekey16;
+ALTER EXTENSION btree_gist ADD function gbtreekey16_in(cstring);
+ALTER EXTENSION btree_gist ADD function gbtreekey16_out(gbtreekey16);
+ALTER EXTENSION btree_gist ADD type gbtreekey32;
+ALTER EXTENSION btree_gist ADD function gbtreekey32_in(cstring);
+ALTER EXTENSION btree_gist ADD function gbtreekey32_out(gbtreekey32);
+ALTER EXTENSION btree_gist ADD type gbtreekey_var;
+ALTER EXTENSION btree_gist ADD function gbtreekey_var_in(cstring);
+ALTER EXTENSION btree_gist ADD function gbtreekey_var_out(gbtreekey_var);
+ALTER EXTENSION btree_gist ADD function gbt_oid_consistent(internal,oid,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_oid_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_decompress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_var_decompress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_oid_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_oid_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_oid_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_oid_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_oid_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_oid_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_int2_consistent(internal,smallint,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_int2_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_int2_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_int2_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_int2_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_int2_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_int2_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_int2_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_int4_consistent(internal,integer,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_int4_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_int4_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_int4_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_int4_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_int4_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_int4_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_int4_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_int8_consistent(internal,bigint,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_int8_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_int8_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_int8_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_int8_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_int8_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_int8_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_int8_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_float4_consistent(internal,real,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_float4_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_float4_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_float4_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_float4_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_float4_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_float4_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_float4_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_float8_consistent(internal,double precision,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_float8_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_float8_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_float8_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_float8_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_float8_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_float8_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_float8_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_ts_consistent(internal,timestamp without time zone,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_tstz_consistent(internal,timestamp with time zone,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_ts_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_tstz_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_ts_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_ts_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_ts_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_ts_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_timestamp_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_timestamp_ops using gist;
+ALTER EXTENSION btree_gist ADD operator family gist_timestamptz_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_timestamptz_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_time_consistent(internal,time without time zone,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_timetz_consistent(internal,time with time zone,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_time_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_timetz_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_time_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_time_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_time_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_time_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_time_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_time_ops using gist;
+ALTER EXTENSION btree_gist ADD operator family gist_timetz_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_timetz_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_date_consistent(internal,date,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_date_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_date_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_date_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_date_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_date_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_date_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_date_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_intv_consistent(internal,interval,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_intv_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_intv_decompress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_intv_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_intv_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_intv_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_intv_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_interval_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_interval_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_cash_consistent(internal,money,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_cash_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_cash_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_cash_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_cash_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_cash_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_cash_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_cash_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_macad_consistent(internal,macaddr,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_macad_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_macad_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_macad_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_macad_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_macad_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_macaddr_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_macaddr_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_text_consistent(internal,text,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_bpchar_consistent(internal,character,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_text_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_bpchar_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_text_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_text_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_text_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_text_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_text_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_text_ops using gist;
+ALTER EXTENSION btree_gist ADD operator family gist_bpchar_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_bpchar_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_bytea_consistent(internal,bytea,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_bytea_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_bytea_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_bytea_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_bytea_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_bytea_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_bytea_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_bytea_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_numeric_consistent(internal,numeric,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_numeric_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_numeric_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_numeric_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_numeric_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_numeric_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_numeric_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_numeric_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_bit_consistent(internal,bit,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_bit_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_bit_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_bit_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_bit_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_bit_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_bit_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_bit_ops using gist;
+ALTER EXTENSION btree_gist ADD operator family gist_vbit_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_vbit_ops using gist;
+ALTER EXTENSION btree_gist ADD function gbt_inet_consistent(internal,inet,smallint,oid,internal);
+ALTER EXTENSION btree_gist ADD function gbt_inet_compress(internal);
+ALTER EXTENSION btree_gist ADD function gbt_inet_penalty(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_inet_picksplit(internal,internal);
+ALTER EXTENSION btree_gist ADD function gbt_inet_union(bytea,internal);
+ALTER EXTENSION btree_gist ADD function gbt_inet_same(internal,internal,internal);
+ALTER EXTENSION btree_gist ADD operator family gist_inet_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_inet_ops using gist;
+ALTER EXTENSION btree_gist ADD operator family gist_cidr_ops using gist;
+ALTER EXTENSION btree_gist ADD operator class gist_cidr_ops using gist;
+
+
+-- Add functions and operators that are new in 9.1
+
+--distance operators
+
+CREATE FUNCTION cash_dist(money, money)
+RETURNS money
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = money,
+ RIGHTARG = money,
+ PROCEDURE = cash_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION date_dist(date, date)
+RETURNS int4
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = date,
+ RIGHTARG = date,
+ PROCEDURE = date_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION float4_dist(float4, float4)
+RETURNS float4
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = float4,
+ RIGHTARG = float4,
+ PROCEDURE = float4_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION float8_dist(float8, float8)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = float8,
+ RIGHTARG = float8,
+ PROCEDURE = float8_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION int2_dist(int2, int2)
+RETURNS int2
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = int2,
+ RIGHTARG = int2,
+ PROCEDURE = int2_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION int4_dist(int4, int4)
+RETURNS int4
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = int4,
+ RIGHTARG = int4,
+ PROCEDURE = int4_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION int8_dist(int8, int8)
+RETURNS int8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = int8,
+ RIGHTARG = int8,
+ PROCEDURE = int8_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION interval_dist(interval, interval)
+RETURNS interval
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = interval,
+ RIGHTARG = interval,
+ PROCEDURE = interval_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION oid_dist(oid, oid)
+RETURNS oid
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = oid,
+ RIGHTARG = oid,
+ PROCEDURE = oid_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION time_dist(time, time)
+RETURNS interval
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = time,
+ RIGHTARG = time,
+ PROCEDURE = time_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION ts_dist(timestamp, timestamp)
+RETURNS interval
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = timestamp,
+ RIGHTARG = timestamp,
+ PROCEDURE = ts_dist,
+ COMMUTATOR = '<->'
+);
+
+CREATE FUNCTION tstz_dist(timestamptz, timestamptz)
+RETURNS interval
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE OPERATOR <-> (
+ LEFTARG = timestamptz,
+ RIGHTARG = timestamptz,
+ PROCEDURE = tstz_dist,
+ COMMUTATOR = '<->'
+);
+
+-- Support functions for distance operators
+
+CREATE FUNCTION gbt_oid_distance(internal,oid,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_int2_distance(internal,int2,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_int4_distance(internal,int4,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_int8_distance(internal,int8,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_float4_distance(internal,float4,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_float8_distance(internal,float8,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_ts_distance(internal,timestamp,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_tstz_distance(internal,timestamptz,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_time_distance(internal,time,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_date_distance(internal,date,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_intv_distance(internal,interval,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION gbt_cash_distance(internal,money,int2,oid)
+RETURNS float8
+AS 'MODULE_PATHNAME'
+LANGUAGE C IMMUTABLE STRICT;
+
+
+-- Add new-in-9.1 stuff to the operator classes.
+
+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) ;
+
+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) ;
+
+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) ;
+
+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) ;
+
+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) ;
+
+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) ;
+
+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) ;
+
+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) ;
+
+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) ;
+
+ALTER OPERATOR FAMILY gist_timetz_ops USING gist ADD
+ OPERATOR 6 <> (timetz, timetz) ;
+
+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) ;
+
+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) ;
+
+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) ;
+
+ALTER OPERATOR FAMILY gist_macaddr_ops USING gist ADD
+ OPERATOR 6 <> (macaddr, macaddr) ;
+
+ALTER OPERATOR FAMILY gist_text_ops USING gist ADD
+ OPERATOR 6 <> (text, text) ;
+
+ALTER OPERATOR FAMILY gist_bpchar_ops USING gist ADD
+ OPERATOR 6 <> (bpchar, bpchar) ;
+
+ALTER OPERATOR FAMILY gist_bytea_ops USING gist ADD
+ OPERATOR 6 <> (bytea, bytea) ;
+
+ALTER OPERATOR FAMILY gist_numeric_ops USING gist ADD
+ OPERATOR 6 <> (numeric, numeric) ;
+
+ALTER OPERATOR FAMILY gist_bit_ops USING gist ADD
+ OPERATOR 6 <> (bit, bit) ;
+
+ALTER OPERATOR FAMILY gist_vbit_ops USING gist ADD
+ OPERATOR 6 <> (varbit, varbit) ;
+
+ALTER OPERATOR FAMILY gist_inet_ops USING gist ADD
+ OPERATOR 6 <> (inet, inet) ;
+
+ALTER OPERATOR FAMILY gist_cidr_ops USING gist ADD
+ OPERATOR 6 <> (inet, inet) ;
diff --git a/contrib/btree_gist/btree_gist.c b/contrib/btree_gist/btree_gist.c
index f109de4a64..7e1c7e054c 100644
--- a/contrib/btree_gist/btree_gist.c
+++ b/contrib/btree_gist/btree_gist.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_gist.c,v 1.13 2009/06/11 14:48:50 momjian Exp $
+ * contrib/btree_gist/btree_gist.c
*/
#include "btree_gist.h"
diff --git a/contrib/btree_gist/btree_gist.control b/contrib/btree_gist/btree_gist.control
new file mode 100644
index 0000000000..10e2f949c1
--- /dev/null
+++ b/contrib/btree_gist/btree_gist.control
@@ -0,0 +1,5 @@
+# btree_gist extension
+comment = 'support for indexing common datatypes in GiST'
+default_version = '1.0'
+module_pathname = '$libdir/btree_gist'
+relocatable = true
diff --git a/contrib/btree_gist/btree_gist.h b/contrib/btree_gist/btree_gist.h
index 425ce8cff4..058a3f99e9 100644
--- a/contrib/btree_gist/btree_gist.h
+++ b/contrib/btree_gist/btree_gist.h
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_gist.h,v 1.9 2009/06/11 14:48:50 momjian Exp $
+ * contrib/btree_gist/btree_gist.h
*/
#ifndef __BTREE_GIST_H__
#define __BTREE_GIST_H__
@@ -9,6 +9,8 @@
#include "access/itup.h"
#include "access/nbtree.h"
+#define BtreeGistNotEqualStrategyNumber 6
+
/* indexed types */
enum gbtree_type
diff --git a/contrib/btree_gist/btree_inet.c b/contrib/btree_gist/btree_inet.c
index a8d18c578b..690a01cbc7 100644
--- a/contrib/btree_gist/btree_inet.c
+++ b/contrib/btree_gist/btree_inet.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_inet.c,v 1.12 2010/02/26 02:00:31 momjian Exp $
+ * contrib/btree_gist/btree_inet.c
*/
#include "btree_gist.h"
#include "btree_utils_num.h"
@@ -84,7 +84,8 @@ static const gbtree_ninfo tinfo =
gbt_ineteq,
gbt_inetle,
gbt_inetlt,
- gbt_inetkey_cmp
+ gbt_inetkey_cmp,
+ NULL
};
diff --git a/contrib/btree_gist/btree_int2.c b/contrib/btree_gist/btree_int2.c
index 2be4c40aa8..7841145b53 100644
--- a/contrib/btree_gist/btree_int2.c
+++ b/contrib/btree_gist/btree_int2.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_int2.c,v 1.10 2010/02/26 02:00:31 momjian Exp $
+ * contrib/btree_gist/btree_int2.c
*/
#include "btree_gist.h"
#include "btree_utils_num.h"
@@ -17,6 +17,7 @@ PG_FUNCTION_INFO_V1(gbt_int2_compress);
PG_FUNCTION_INFO_V1(gbt_int2_union);
PG_FUNCTION_INFO_V1(gbt_int2_picksplit);
PG_FUNCTION_INFO_V1(gbt_int2_consistent);
+PG_FUNCTION_INFO_V1(gbt_int2_distance);
PG_FUNCTION_INFO_V1(gbt_int2_penalty);
PG_FUNCTION_INFO_V1(gbt_int2_same);
@@ -24,6 +25,7 @@ Datum gbt_int2_compress(PG_FUNCTION_ARGS);
Datum gbt_int2_union(PG_FUNCTION_ARGS);
Datum gbt_int2_picksplit(PG_FUNCTION_ARGS);
Datum gbt_int2_consistent(PG_FUNCTION_ARGS);
+Datum gbt_int2_distance(PG_FUNCTION_ARGS);
Datum gbt_int2_penalty(PG_FUNCTION_ARGS);
Datum gbt_int2_same(PG_FUNCTION_ARGS);
@@ -70,6 +72,12 @@ gbt_int2key_cmp(const void *a, const void *b)
return (ia->lower > ib->lower) ? 1 : -1;
}
+static float8
+gbt_int2_dist(const void *a, const void *b)
+{
+ return GET_FLOAT_DISTANCE(int2, a, b);
+}
+
static const gbtree_ninfo tinfo =
{
@@ -80,12 +88,32 @@ static const gbtree_ninfo tinfo =
gbt_int2eq,
gbt_int2le,
gbt_int2lt,
- gbt_int2key_cmp
+ gbt_int2key_cmp,
+ gbt_int2_dist
};
+PG_FUNCTION_INFO_V1(int2_dist);
+Datum int2_dist(PG_FUNCTION_ARGS);
+Datum
+int2_dist(PG_FUNCTION_ARGS)
+{
+ int2 a = PG_GETARG_INT16(0);
+ int2 b = PG_GETARG_INT16(1);
+ int2 r;
+ int2 ra;
+
+ r = a - b;
+ ra = Abs(r);
+ /* Overflow check. */
+ if (ra < 0 || (!SAMESIGN(a, b) && !SAMESIGN(r, a)))
+ ereport(ERROR,
+ (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
+ errmsg("smallint out of range")));
+ PG_RETURN_INT16(ra);
+}
/**************************************************
@@ -128,6 +156,25 @@ gbt_int2_consistent(PG_FUNCTION_ARGS)
Datum
+gbt_int2_distance(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ int16 query = PG_GETARG_INT16(1);
+
+ /* Oid subtype = PG_GETARG_OID(3); */
+ int16KEY *kkk = (int16KEY *) DatumGetPointer(entry->key);
+ GBT_NUMKEY_R key;
+
+ key.lower = (GBT_NUMKEY *) &kkk->lower;
+ key.upper = (GBT_NUMKEY *) &kkk->upper;
+
+ PG_RETURN_FLOAT8(
+ gbt_num_distance(&key, (void *) &query, GIST_LEAF(entry), &tinfo)
+ );
+}
+
+
+Datum
gbt_int2_union(PG_FUNCTION_ARGS)
{
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
diff --git a/contrib/btree_gist/btree_int4.c b/contrib/btree_gist/btree_int4.c
index aa0d4ac33f..0e4b4f85b0 100644
--- a/contrib/btree_gist/btree_int4.c
+++ b/contrib/btree_gist/btree_int4.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_int4.c,v 1.10 2010/02/26 02:00:31 momjian Exp $
+ * contrib/btree_gist/btree_int4.c
*/
#include "btree_gist.h"
#include "btree_utils_num.h"
@@ -17,6 +17,7 @@ PG_FUNCTION_INFO_V1(gbt_int4_compress);
PG_FUNCTION_INFO_V1(gbt_int4_union);
PG_FUNCTION_INFO_V1(gbt_int4_picksplit);
PG_FUNCTION_INFO_V1(gbt_int4_consistent);
+PG_FUNCTION_INFO_V1(gbt_int4_distance);
PG_FUNCTION_INFO_V1(gbt_int4_penalty);
PG_FUNCTION_INFO_V1(gbt_int4_same);
@@ -24,6 +25,7 @@ Datum gbt_int4_compress(PG_FUNCTION_ARGS);
Datum gbt_int4_union(PG_FUNCTION_ARGS);
Datum gbt_int4_picksplit(PG_FUNCTION_ARGS);
Datum gbt_int4_consistent(PG_FUNCTION_ARGS);
+Datum gbt_int4_distance(PG_FUNCTION_ARGS);
Datum gbt_int4_penalty(PG_FUNCTION_ARGS);
Datum gbt_int4_same(PG_FUNCTION_ARGS);
@@ -71,6 +73,12 @@ gbt_int4key_cmp(const void *a, const void *b)
return (ia->lower > ib->lower) ? 1 : -1;
}
+static float8
+gbt_int4_dist(const void *a, const void *b)
+{
+ return GET_FLOAT_DISTANCE(int4, a, b);
+}
+
static const gbtree_ninfo tinfo =
{
@@ -81,10 +89,34 @@ static const gbtree_ninfo tinfo =
gbt_int4eq,
gbt_int4le,
gbt_int4lt,
- gbt_int4key_cmp
+ gbt_int4key_cmp,
+ gbt_int4_dist
};
+PG_FUNCTION_INFO_V1(int4_dist);
+Datum int4_dist(PG_FUNCTION_ARGS);
+Datum
+int4_dist(PG_FUNCTION_ARGS)
+{
+ int4 a = PG_GETARG_INT32(0);
+ int4 b = PG_GETARG_INT32(1);
+ int4 r;
+ int4 ra;
+
+ r = a - b;
+ ra = Abs(r);
+
+ /* Overflow check. */
+ if (ra < 0 || (!SAMESIGN(a, b) && !SAMESIGN(r, a)))
+ ereport(ERROR,
+ (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
+ errmsg("integer out of range")));
+
+ PG_RETURN_INT32(ra);
+}
+
+
/**************************************************
* int32 ops
**************************************************/
@@ -125,6 +157,25 @@ gbt_int4_consistent(PG_FUNCTION_ARGS)
Datum
+gbt_int4_distance(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ int32 query = PG_GETARG_INT32(1);
+
+ /* Oid subtype = PG_GETARG_OID(3); */
+ int32KEY *kkk = (int32KEY *) DatumGetPointer(entry->key);
+ GBT_NUMKEY_R key;
+
+ key.lower = (GBT_NUMKEY *) &kkk->lower;
+ key.upper = (GBT_NUMKEY *) &kkk->upper;
+
+ PG_RETURN_FLOAT8(
+ gbt_num_distance(&key, (void *) &query, GIST_LEAF(entry), &tinfo)
+ );
+}
+
+
+Datum
gbt_int4_union(PG_FUNCTION_ARGS)
{
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
diff --git a/contrib/btree_gist/btree_int8.c b/contrib/btree_gist/btree_int8.c
index 4cf36a07fa..d54113d393 100644
--- a/contrib/btree_gist/btree_int8.c
+++ b/contrib/btree_gist/btree_int8.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_int8.c,v 1.10 2010/02/26 02:00:31 momjian Exp $
+ * contrib/btree_gist/btree_int8.c
*/
#include "btree_gist.h"
#include "btree_utils_num.h"
@@ -17,6 +17,7 @@ PG_FUNCTION_INFO_V1(gbt_int8_compress);
PG_FUNCTION_INFO_V1(gbt_int8_union);
PG_FUNCTION_INFO_V1(gbt_int8_picksplit);
PG_FUNCTION_INFO_V1(gbt_int8_consistent);
+PG_FUNCTION_INFO_V1(gbt_int8_distance);
PG_FUNCTION_INFO_V1(gbt_int8_penalty);
PG_FUNCTION_INFO_V1(gbt_int8_same);
@@ -24,6 +25,7 @@ Datum gbt_int8_compress(PG_FUNCTION_ARGS);
Datum gbt_int8_union(PG_FUNCTION_ARGS);
Datum gbt_int8_picksplit(PG_FUNCTION_ARGS);
Datum gbt_int8_consistent(PG_FUNCTION_ARGS);
+Datum gbt_int8_distance(PG_FUNCTION_ARGS);
Datum gbt_int8_penalty(PG_FUNCTION_ARGS);
Datum gbt_int8_same(PG_FUNCTION_ARGS);
@@ -71,6 +73,12 @@ gbt_int8key_cmp(const void *a, const void *b)
return (ia->lower > ib->lower) ? 1 : -1;
}
+static float8
+gbt_int8_dist(const void *a, const void *b)
+{
+ return GET_FLOAT_DISTANCE(int64, a, b);
+}
+
static const gbtree_ninfo tinfo =
{
@@ -81,10 +89,34 @@ static const gbtree_ninfo tinfo =
gbt_int8eq,
gbt_int8le,
gbt_int8lt,
- gbt_int8key_cmp
+ gbt_int8key_cmp,
+ gbt_int8_dist
};
+PG_FUNCTION_INFO_V1(int8_dist);
+Datum int8_dist(PG_FUNCTION_ARGS);
+Datum
+int8_dist(PG_FUNCTION_ARGS)
+{
+ int64 a = PG_GETARG_INT64(0);
+ int64 b = PG_GETARG_INT64(1);
+ int64 r;
+ int64 ra;
+
+ r = a - b;
+ ra = Abs(r);
+
+ /* Overflow check. */
+ if (ra < 0 || (!SAMESIGN(a, b) && !SAMESIGN(r, a)))
+ ereport(ERROR,
+ (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
+ errmsg("bigint out of range")));
+
+ PG_RETURN_INT64(ra);
+}
+
+
/**************************************************
* int64 ops
**************************************************/
@@ -125,6 +157,25 @@ gbt_int8_consistent(PG_FUNCTION_ARGS)
Datum
+gbt_int8_distance(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ int64 query = PG_GETARG_INT64(1);
+
+ /* Oid subtype = PG_GETARG_OID(3); */
+ int64KEY *kkk = (int64KEY *) DatumGetPointer(entry->key);
+ GBT_NUMKEY_R key;
+
+ key.lower = (GBT_NUMKEY *) &kkk->lower;
+ key.upper = (GBT_NUMKEY *) &kkk->upper;
+
+ PG_RETURN_FLOAT8(
+ gbt_num_distance(&key, (void *) &query, GIST_LEAF(entry), &tinfo)
+ );
+}
+
+
+Datum
gbt_int8_union(PG_FUNCTION_ARGS)
{
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
diff --git a/contrib/btree_gist/btree_interval.c b/contrib/btree_gist/btree_interval.c
index 32b9ddbad7..137a5fcd7f 100644
--- a/contrib/btree_gist/btree_interval.c
+++ b/contrib/btree_gist/btree_interval.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_interval.c,v 1.14 2010/02/26 02:00:31 momjian Exp $
+ * contrib/btree_gist/btree_interval.c
*/
#include "btree_gist.h"
#include "btree_utils_num.h"
@@ -20,6 +20,7 @@ PG_FUNCTION_INFO_V1(gbt_intv_decompress);
PG_FUNCTION_INFO_V1(gbt_intv_union);
PG_FUNCTION_INFO_V1(gbt_intv_picksplit);
PG_FUNCTION_INFO_V1(gbt_intv_consistent);
+PG_FUNCTION_INFO_V1(gbt_intv_distance);
PG_FUNCTION_INFO_V1(gbt_intv_penalty);
PG_FUNCTION_INFO_V1(gbt_intv_same);
@@ -28,6 +29,7 @@ Datum gbt_intv_decompress(PG_FUNCTION_ARGS);
Datum gbt_intv_union(PG_FUNCTION_ARGS);
Datum gbt_intv_picksplit(PG_FUNCTION_ARGS);
Datum gbt_intv_consistent(PG_FUNCTION_ARGS);
+Datum gbt_intv_distance(PG_FUNCTION_ARGS);
Datum gbt_intv_penalty(PG_FUNCTION_ARGS);
Datum gbt_intv_same(PG_FUNCTION_ARGS);
@@ -83,6 +85,12 @@ intr2num(const Interval *i)
return INTERVAL_TO_SEC(i);
}
+static float8
+gbt_intv_dist(const void *a, const void *b)
+{
+ return (float8) Abs(intr2num((Interval *) a) - intr2num((Interval *) b));
+}
+
/*
* INTERVALSIZE should be the actual size-on-disk of an Interval, as shown
* in pg_type. This might be less than sizeof(Interval) if the compiler
@@ -99,10 +107,38 @@ static const gbtree_ninfo tinfo =
gbt_intveq,
gbt_intvle,
gbt_intvlt,
- gbt_intvkey_cmp
+ gbt_intvkey_cmp,
+ gbt_intv_dist
};
+Interval *
+abs_interval(Interval *a)
+{
+ static Interval zero = {0, 0, 0};
+
+ if (DatumGetBool(DirectFunctionCall2(interval_lt,
+ IntervalPGetDatum(a),
+ IntervalPGetDatum(&zero))))
+ a = DatumGetIntervalP(DirectFunctionCall1(interval_um,
+ IntervalPGetDatum(a)));
+
+ return a;
+}
+
+PG_FUNCTION_INFO_V1(interval_dist);
+Datum interval_dist(PG_FUNCTION_ARGS);
+Datum
+interval_dist(PG_FUNCTION_ARGS)
+{
+ Datum diff = DirectFunctionCall2(interval_mi,
+ PG_GETARG_DATUM(0),
+ PG_GETARG_DATUM(1));
+
+ PG_RETURN_INTERVAL_P(abs_interval(DatumGetIntervalP(diff)));
+}
+
+
/**************************************************
* interval ops
**************************************************/
@@ -191,6 +227,25 @@ gbt_intv_consistent(PG_FUNCTION_ARGS)
Datum
+gbt_intv_distance(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ Interval *query = PG_GETARG_INTERVAL_P(1);
+
+ /* Oid subtype = PG_GETARG_OID(3); */
+ intvKEY *kkk = (intvKEY *) DatumGetPointer(entry->key);
+ GBT_NUMKEY_R key;
+
+ key.lower = (GBT_NUMKEY *) &kkk->lower;
+ key.upper = (GBT_NUMKEY *) &kkk->upper;
+
+ PG_RETURN_FLOAT8(
+ gbt_num_distance(&key, (void *) query, GIST_LEAF(entry), &tinfo)
+ );
+}
+
+
+Datum
gbt_intv_union(PG_FUNCTION_ARGS)
{
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
diff --git a/contrib/btree_gist/btree_macaddr.c b/contrib/btree_gist/btree_macaddr.c
index 60092b4e9e..aa150e26a2 100644
--- a/contrib/btree_gist/btree_macaddr.c
+++ b/contrib/btree_gist/btree_macaddr.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_macaddr.c,v 1.10 2010/02/26 02:00:31 momjian Exp $
+ * contrib/btree_gist/btree_macaddr.c
*/
#include "btree_gist.h"
#include "btree_utils_num.h"
@@ -84,7 +84,8 @@ static const gbtree_ninfo tinfo =
gbt_macadeq,
gbt_macadle,
gbt_macadlt,
- gbt_macadkey_cmp
+ gbt_macadkey_cmp,
+ NULL
};
diff --git a/contrib/btree_gist/btree_numeric.c b/contrib/btree_gist/btree_numeric.c
index 810bb279da..e962c6dd32 100644
--- a/contrib/btree_gist/btree_numeric.c
+++ b/contrib/btree_gist/btree_numeric.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_numeric.c,v 1.13 2009/06/11 14:48:50 momjian Exp $
+ * contrib/btree_gist/btree_numeric.c
*/
#include "btree_gist.h"
@@ -32,41 +32,51 @@ Datum gbt_numeric_same(PG_FUNCTION_ARGS);
/* define for comparison */
static bool
-gbt_numeric_gt(const void *a, const void *b)
+gbt_numeric_gt(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(numeric_gt, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2(numeric_gt,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_numeric_ge(const void *a, const void *b)
+gbt_numeric_ge(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(numeric_ge, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2(numeric_ge,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_numeric_eq(const void *a, const void *b)
+gbt_numeric_eq(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(numeric_eq, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2(numeric_eq,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_numeric_le(const void *a, const void *b)
+gbt_numeric_le(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(numeric_le, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2(numeric_le,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_numeric_lt(const void *a, const void *b)
+gbt_numeric_lt(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(numeric_lt, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2(numeric_lt,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
-
static int32
-gbt_numeric_cmp(const bytea *a, const bytea *b)
+gbt_numeric_cmp(const void *a, const void *b, Oid collation)
{
- return
- (DatumGetInt32(DirectFunctionCall2(numeric_cmp, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetInt32(DirectFunctionCall2(numeric_cmp,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
@@ -116,7 +126,8 @@ gbt_numeric_consistent(PG_FUNCTION_ARGS)
/* All cases served by this function are exact */
*recheck = false;
- retval = gbt_var_consistent(&r, query, &strategy, GIST_LEAF(entry), &tinfo);
+ retval = gbt_var_consistent(&r, query, strategy, PG_GET_COLLATION(),
+ GIST_LEAF(entry), &tinfo);
PG_RETURN_BOOL(retval);
}
@@ -128,7 +139,8 @@ gbt_numeric_union(PG_FUNCTION_ARGS)
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
int32 *size = (int *) PG_GETARG_POINTER(1);
- PG_RETURN_POINTER(gbt_var_union(entryvec, size, &tinfo));
+ PG_RETURN_POINTER(gbt_var_union(entryvec, size, PG_GET_COLLATION(),
+ &tinfo));
}
@@ -139,7 +151,8 @@ gbt_numeric_same(PG_FUNCTION_ARGS)
Datum d2 = PG_GETARG_DATUM(1);
bool *result = (bool *) PG_GETARG_POINTER(2);
- PG_RETURN_POINTER(gbt_var_same(result, d1, d2, &tinfo));
+ *result = gbt_var_same(d1, d2, PG_GET_COLLATION(), &tinfo);
+ PG_RETURN_POINTER(result);
}
@@ -163,7 +176,7 @@ gbt_numeric_penalty(PG_FUNCTION_ARGS)
rk = gbt_var_key_readable(org);
uni = PointerGetDatum(gbt_var_key_copy(&rk, TRUE));
- gbt_var_bin_union(&uni, newe, &tinfo);
+ 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));
@@ -185,9 +198,9 @@ gbt_numeric_penalty(PG_FUNCTION_ARGS)
NumericGetDatum(os)
));
- if (NUMERIC_IS_NAN(us))
+ if (numeric_is_nan(us))
{
- if (NUMERIC_IS_NAN(os))
+ if (numeric_is_nan(os))
*result = 0.0;
else
*result = 1.0;
@@ -224,6 +237,7 @@ gbt_numeric_picksplit(PG_FUNCTION_ARGS)
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
GIST_SPLITVEC *v = (GIST_SPLITVEC *) PG_GETARG_POINTER(1);
- gbt_var_picksplit(entryvec, v, &tinfo);
+ gbt_var_picksplit(entryvec, v, PG_GET_COLLATION(),
+ &tinfo);
PG_RETURN_POINTER(v);
}
diff --git a/contrib/btree_gist/btree_oid.c b/contrib/btree_gist/btree_oid.c
index 96e4be54d4..3b0929b42b 100644
--- a/contrib/btree_gist/btree_oid.c
+++ b/contrib/btree_gist/btree_oid.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_oid.c,v 1.10 2010/02/26 02:00:31 momjian Exp $
+ * contrib/btree_gist/btree_oid.c
*/
#include "btree_gist.h"
#include "btree_utils_num.h"
@@ -17,6 +17,7 @@ PG_FUNCTION_INFO_V1(gbt_oid_compress);
PG_FUNCTION_INFO_V1(gbt_oid_union);
PG_FUNCTION_INFO_V1(gbt_oid_picksplit);
PG_FUNCTION_INFO_V1(gbt_oid_consistent);
+PG_FUNCTION_INFO_V1(gbt_oid_distance);
PG_FUNCTION_INFO_V1(gbt_oid_penalty);
PG_FUNCTION_INFO_V1(gbt_oid_same);
@@ -24,6 +25,7 @@ Datum gbt_oid_compress(PG_FUNCTION_ARGS);
Datum gbt_oid_union(PG_FUNCTION_ARGS);
Datum gbt_oid_picksplit(PG_FUNCTION_ARGS);
Datum gbt_oid_consistent(PG_FUNCTION_ARGS);
+Datum gbt_oid_distance(PG_FUNCTION_ARGS);
Datum gbt_oid_penalty(PG_FUNCTION_ARGS);
Datum gbt_oid_same(PG_FUNCTION_ARGS);
@@ -71,6 +73,18 @@ gbt_oidkey_cmp(const void *a, const void *b)
return (ia->lower > ib->lower) ? 1 : -1;
}
+static float8
+gbt_oid_dist(const void *a, const void *b)
+{
+ Oid aa = *(const Oid *) a;
+ Oid bb = *(const Oid *) b;
+
+ if (aa < bb)
+ return (float8) (bb - aa);
+ else
+ return (float8) (aa - bb);
+}
+
static const gbtree_ninfo tinfo =
{
@@ -81,10 +95,28 @@ static const gbtree_ninfo tinfo =
gbt_oideq,
gbt_oidle,
gbt_oidlt,
- gbt_oidkey_cmp
+ gbt_oidkey_cmp,
+ gbt_oid_dist
};
+PG_FUNCTION_INFO_V1(oid_dist);
+Datum oid_dist(PG_FUNCTION_ARGS);
+Datum
+oid_dist(PG_FUNCTION_ARGS)
+{
+ Oid a = PG_GETARG_OID(0);
+ Oid b = PG_GETARG_OID(1);
+ Oid res;
+
+ if (a < b)
+ res = b - a;
+ else
+ res = a - b;
+ PG_RETURN_OID(res);
+}
+
+
/**************************************************
* Oid ops
**************************************************/
@@ -125,6 +157,25 @@ gbt_oid_consistent(PG_FUNCTION_ARGS)
Datum
+gbt_oid_distance(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ Oid query = PG_GETARG_OID(1);
+
+ /* Oid subtype = PG_GETARG_OID(3); */
+ oidKEY *kkk = (oidKEY *) DatumGetPointer(entry->key);
+ GBT_NUMKEY_R key;
+
+ key.lower = (GBT_NUMKEY *) &kkk->lower;
+ key.upper = (GBT_NUMKEY *) &kkk->upper;
+
+ PG_RETURN_FLOAT8(
+ gbt_num_distance(&key, (void *) &query, GIST_LEAF(entry), &tinfo)
+ );
+}
+
+
+Datum
gbt_oid_union(PG_FUNCTION_ARGS)
{
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
diff --git a/contrib/btree_gist/btree_text.c b/contrib/btree_gist/btree_text.c
index 8b01eb7aac..3d4f8c13c8 100644
--- a/contrib/btree_gist/btree_text.c
+++ b/contrib/btree_gist/btree_text.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_text.c,v 1.12 2009/06/11 14:48:50 momjian Exp $
+ * contrib/btree_gist/btree_text.c
*/
#include "btree_gist.h"
#include "btree_utils_var.h"
@@ -30,39 +30,57 @@ Datum gbt_text_same(PG_FUNCTION_ARGS);
/* define for comparison */
static bool
-gbt_textgt(const void *a, const void *b)
+gbt_textgt(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(text_gt, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2Coll(text_gt,
+ collation,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_textge(const void *a, const void *b)
+gbt_textge(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(text_ge, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2Coll(text_ge,
+ collation,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_texteq(const void *a, const void *b)
+gbt_texteq(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(texteq, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2Coll(texteq,
+ collation,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_textle(const void *a, const void *b)
+gbt_textle(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(text_le, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2Coll(text_le,
+ collation,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static bool
-gbt_textlt(const void *a, const void *b)
+gbt_textlt(const void *a, const void *b, Oid collation)
{
- return (DatumGetBool(DirectFunctionCall2(text_lt, PointerGetDatum(a), PointerGetDatum(b))));
+ return DatumGetBool(DirectFunctionCall2Coll(text_lt,
+ collation,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static int32
-gbt_textcmp(const bytea *a, const bytea *b)
+gbt_textcmp(const void *a, const void *b, Oid collation)
{
- return DatumGetInt32(DirectFunctionCall2(bttextcmp, PointerGetDatum(a), PointerGetDatum(b)));
+ return DatumGetInt32(DirectFunctionCall2Coll(bttextcmp,
+ collation,
+ PointerGetDatum(a),
+ PointerGetDatum(b)));
}
static gbtree_vinfo tinfo =
@@ -150,7 +168,8 @@ gbt_text_consistent(PG_FUNCTION_ARGS)
tinfo.eml = pg_database_encoding_max_length();
}
- retval = gbt_var_consistent(&r, query, &strategy, GIST_LEAF(entry), &tinfo);
+ retval = gbt_var_consistent(&r, query, strategy, PG_GET_COLLATION(),
+ GIST_LEAF(entry), &tinfo);
PG_RETURN_BOOL(retval);
}
@@ -178,7 +197,8 @@ gbt_bpchar_consistent(PG_FUNCTION_ARGS)
tinfo.eml = pg_database_encoding_max_length();
}
- retval = gbt_var_consistent(&r, trim, &strategy, GIST_LEAF(entry), &tinfo);
+ retval = gbt_var_consistent(&r, trim, strategy, PG_GET_COLLATION(),
+ GIST_LEAF(entry), &tinfo);
PG_RETURN_BOOL(retval);
}
@@ -189,7 +209,8 @@ gbt_text_union(PG_FUNCTION_ARGS)
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
int32 *size = (int *) PG_GETARG_POINTER(1);
- PG_RETURN_POINTER(gbt_var_union(entryvec, size, &tinfo));
+ PG_RETURN_POINTER(gbt_var_union(entryvec, size, PG_GET_COLLATION(),
+ &tinfo));
}
@@ -199,7 +220,8 @@ gbt_text_picksplit(PG_FUNCTION_ARGS)
GistEntryVector *entryvec = (GistEntryVector *) PG_GETARG_POINTER(0);
GIST_SPLITVEC *v = (GIST_SPLITVEC *) PG_GETARG_POINTER(1);
- gbt_var_picksplit(entryvec, v, &tinfo);
+ gbt_var_picksplit(entryvec, v, PG_GET_COLLATION(),
+ &tinfo);
PG_RETURN_POINTER(v);
}
@@ -210,7 +232,8 @@ gbt_text_same(PG_FUNCTION_ARGS)
Datum d2 = PG_GETARG_DATUM(1);
bool *result = (bool *) PG_GETARG_POINTER(2);
- PG_RETURN_POINTER(gbt_var_same(result, d1, d2, &tinfo));
+ *result = gbt_var_same(d1, d2, PG_GET_COLLATION(), &tinfo);
+ PG_RETURN_POINTER(result);
}
@@ -221,5 +244,6 @@ gbt_text_penalty(PG_FUNCTION_ARGS)
GISTENTRY *n = (GISTENTRY *) PG_GETARG_POINTER(1);
float *result = (float *) PG_GETARG_POINTER(2);
- PG_RETURN_POINTER(gbt_var_penalty(result, o, n, &tinfo));
+ PG_RETURN_POINTER(gbt_var_penalty(result, o, n, PG_GET_COLLATION(),
+ &tinfo));
}
diff --git a/contrib/btree_gist/btree_time.c b/contrib/btree_gist/btree_time.c
index 8566a8efb7..e9cfe33f45 100644
--- a/contrib/btree_gist/btree_time.c
+++ b/contrib/btree_gist/btree_time.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_time.c,v 1.18 2010/02/26 02:00:31 momjian Exp $
+ * contrib/btree_gist/btree_time.c
*/
#include "btree_gist.h"
#include "btree_utils_num.h"
@@ -20,6 +20,7 @@ PG_FUNCTION_INFO_V1(gbt_timetz_compress);
PG_FUNCTION_INFO_V1(gbt_time_union);
PG_FUNCTION_INFO_V1(gbt_time_picksplit);
PG_FUNCTION_INFO_V1(gbt_time_consistent);
+PG_FUNCTION_INFO_V1(gbt_time_distance);
PG_FUNCTION_INFO_V1(gbt_timetz_consistent);
PG_FUNCTION_INFO_V1(gbt_time_penalty);
PG_FUNCTION_INFO_V1(gbt_time_same);
@@ -29,6 +30,7 @@ Datum gbt_timetz_compress(PG_FUNCTION_ARGS);
Datum gbt_time_union(PG_FUNCTION_ARGS);
Datum gbt_time_picksplit(PG_FUNCTION_ARGS);
Datum gbt_time_consistent(PG_FUNCTION_ARGS);
+Datum gbt_time_distance(PG_FUNCTION_ARGS);
Datum gbt_timetz_consistent(PG_FUNCTION_ARGS);
Datum gbt_time_penalty(PG_FUNCTION_ARGS);
Datum gbt_time_same(PG_FUNCTION_ARGS);
@@ -112,6 +114,19 @@ gbt_timekey_cmp(const void *a, const void *b)
return res;
}
+static float8
+gbt_time_dist(const void *a, const void *b)
+{
+ const TimeADT *aa = (const TimeADT *) a;
+ const TimeADT *bb = (const TimeADT *) b;
+ Interval *i;
+
+ i = DatumGetIntervalP(DirectFunctionCall2(time_mi_time,
+ TimeADTGetDatumFast(*aa),
+ TimeADTGetDatumFast(*bb)));
+ return (float8) Abs(INTERVAL_TO_SEC(i));
+}
+
static const gbtree_ninfo tinfo =
{
@@ -122,10 +137,24 @@ static const gbtree_ninfo tinfo =
gbt_timeeq,
gbt_timele,
gbt_timelt,
- gbt_timekey_cmp
+ gbt_timekey_cmp,
+ gbt_time_dist
};
+PG_FUNCTION_INFO_V1(time_dist);
+Datum time_dist(PG_FUNCTION_ARGS);
+Datum
+time_dist(PG_FUNCTION_ARGS)
+{
+ Datum diff = DirectFunctionCall2(time_mi_time,
+ PG_GETARG_DATUM(0),
+ PG_GETARG_DATUM(1));
+
+ PG_RETURN_INTERVAL_P(abs_interval(DatumGetIntervalP(diff)));
+}
+
+
/**************************************************
* time ops
**************************************************/
@@ -197,6 +226,24 @@ gbt_time_consistent(PG_FUNCTION_ARGS)
}
Datum
+gbt_time_distance(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ TimeADT query = PG_GETARG_TIMEADT(1);
+
+ /* Oid subtype = PG_GETARG_OID(3); */
+ timeKEY *kkk = (timeKEY *) DatumGetPointer(entry->key);
+ GBT_NUMKEY_R key;
+
+ key.lower = (GBT_NUMKEY *) &kkk->lower;
+ key.upper = (GBT_NUMKEY *) &kkk->upper;
+
+ PG_RETURN_FLOAT8(
+ gbt_num_distance(&key, (void *) &query, GIST_LEAF(entry), &tinfo)
+ );
+}
+
+Datum
gbt_timetz_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
diff --git a/contrib/btree_gist/btree_ts.c b/contrib/btree_gist/btree_ts.c
index 543f2129b0..9d3a5919a0 100644
--- a/contrib/btree_gist/btree_ts.c
+++ b/contrib/btree_gist/btree_ts.c
@@ -1,8 +1,9 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_ts.c,v 1.19 2010/02/26 02:00:32 momjian Exp $
+ * contrib/btree_gist/btree_ts.c
*/
#include "btree_gist.h"
#include "btree_utils_num.h"
+#include "utils/builtins.h"
#include "utils/datetime.h"
typedef struct
@@ -19,7 +20,9 @@ PG_FUNCTION_INFO_V1(gbt_tstz_compress);
PG_FUNCTION_INFO_V1(gbt_ts_union);
PG_FUNCTION_INFO_V1(gbt_ts_picksplit);
PG_FUNCTION_INFO_V1(gbt_ts_consistent);
+PG_FUNCTION_INFO_V1(gbt_ts_distance);
PG_FUNCTION_INFO_V1(gbt_tstz_consistent);
+PG_FUNCTION_INFO_V1(gbt_tstz_distance);
PG_FUNCTION_INFO_V1(gbt_ts_penalty);
PG_FUNCTION_INFO_V1(gbt_ts_same);
@@ -28,7 +31,9 @@ Datum gbt_tstz_compress(PG_FUNCTION_ARGS);
Datum gbt_ts_union(PG_FUNCTION_ARGS);
Datum gbt_ts_picksplit(PG_FUNCTION_ARGS);
Datum gbt_ts_consistent(PG_FUNCTION_ARGS);
+Datum gbt_ts_distance(PG_FUNCTION_ARGS);
Datum gbt_tstz_consistent(PG_FUNCTION_ARGS);
+Datum gbt_tstz_distance(PG_FUNCTION_ARGS);
Datum gbt_ts_penalty(PG_FUNCTION_ARGS);
Datum gbt_ts_same(PG_FUNCTION_ARGS);
@@ -110,6 +115,22 @@ gbt_tskey_cmp(const void *a, const void *b)
return res;
}
+static float8
+gbt_ts_dist(const void *a, const void *b)
+{
+ const Timestamp *aa = (const Timestamp *) a;
+ const Timestamp *bb = (const Timestamp *) b;
+ Interval *i;
+
+ if (TIMESTAMP_NOT_FINITE(*aa) || TIMESTAMP_NOT_FINITE(*bb))
+ return get_float8_infinity();
+
+ i = DatumGetIntervalP(DirectFunctionCall2(timestamp_mi,
+ TimestampGetDatumFast(*aa),
+ TimestampGetDatumFast(*bb)));
+ return (float8) Abs(INTERVAL_TO_SEC(i));
+}
+
static const gbtree_ninfo tinfo =
{
@@ -120,10 +141,70 @@ static const gbtree_ninfo tinfo =
gbt_tseq,
gbt_tsle,
gbt_tslt,
- gbt_tskey_cmp
+ gbt_tskey_cmp,
+ gbt_ts_dist
};
+PG_FUNCTION_INFO_V1(ts_dist);
+Datum ts_dist(PG_FUNCTION_ARGS);
+Datum
+ts_dist(PG_FUNCTION_ARGS)
+{
+ Timestamp a = PG_GETARG_TIMESTAMP(0);
+ Timestamp b = PG_GETARG_TIMESTAMP(1);
+ Interval *r;
+
+ if (TIMESTAMP_NOT_FINITE(a) || TIMESTAMP_NOT_FINITE(b))
+ {
+ Interval *p = palloc(sizeof(Interval));
+
+ p->day = INT_MAX;
+ p->month = INT_MAX;
+#ifdef HAVE_INT64_TIMESTAMP
+ p->time = INT64CONST(0x7FFFFFFFFFFFFFFF);
+#else
+ p->time = DBL_MAX;
+#endif
+ PG_RETURN_INTERVAL_P(p);
+ }
+ else
+ r = DatumGetIntervalP(DirectFunctionCall2(timestamp_mi,
+ PG_GETARG_DATUM(0),
+ PG_GETARG_DATUM(1)));
+ PG_RETURN_INTERVAL_P(abs_interval(r));
+}
+
+PG_FUNCTION_INFO_V1(tstz_dist);
+Datum tstz_dist(PG_FUNCTION_ARGS);
+Datum
+tstz_dist(PG_FUNCTION_ARGS)
+{
+ TimestampTz a = PG_GETARG_TIMESTAMPTZ(0);
+ TimestampTz b = PG_GETARG_TIMESTAMPTZ(1);
+ Interval *r;
+
+ if (TIMESTAMP_NOT_FINITE(a) || TIMESTAMP_NOT_FINITE(b))
+ {
+ Interval *p = palloc(sizeof(Interval));
+
+ p->day = INT_MAX;
+ p->month = INT_MAX;
+#ifdef HAVE_INT64_TIMESTAMP
+ p->time = INT64CONST(0x7FFFFFFFFFFFFFFF);
+#else
+ p->time = DBL_MAX;
+#endif
+ PG_RETURN_INTERVAL_P(p);
+ }
+
+ r = DatumGetIntervalP(DirectFunctionCall2(timestamp_mi,
+ PG_GETARG_DATUM(0),
+ PG_GETARG_DATUM(1)));
+ PG_RETURN_INTERVAL_P(abs_interval(r));
+}
+
+
/**************************************************
* timestamp ops
**************************************************/
@@ -214,6 +295,24 @@ gbt_ts_consistent(PG_FUNCTION_ARGS)
}
Datum
+gbt_ts_distance(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ Timestamp query = PG_GETARG_TIMESTAMP(1);
+
+ /* Oid subtype = PG_GETARG_OID(3); */
+ tsKEY *kkk = (tsKEY *) DatumGetPointer(entry->key);
+ GBT_NUMKEY_R key;
+
+ key.lower = (GBT_NUMKEY *) &kkk->lower;
+ key.upper = (GBT_NUMKEY *) &kkk->upper;
+
+ PG_RETURN_FLOAT8(
+ gbt_num_distance(&key, (void *) &query, GIST_LEAF(entry), &tinfo)
+ );
+}
+
+Datum
gbt_tstz_consistent(PG_FUNCTION_ARGS)
{
GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
@@ -238,6 +337,26 @@ gbt_tstz_consistent(PG_FUNCTION_ARGS)
);
}
+Datum
+gbt_tstz_distance(PG_FUNCTION_ARGS)
+{
+ GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
+ TimestampTz query = PG_GETARG_TIMESTAMPTZ(1);
+
+ /* Oid subtype = PG_GETARG_OID(3); */
+ char *kkk = (char *) DatumGetPointer(entry->key);
+ GBT_NUMKEY_R key;
+ Timestamp qqq;
+
+ key.lower = (GBT_NUMKEY *) &kkk[0];
+ key.upper = (GBT_NUMKEY *) &kkk[MAXALIGN(tinfo.size)];
+ qqq = tstz_to_ts_gmt(query);
+
+ PG_RETURN_FLOAT8(
+ gbt_num_distance(&key, (void *) &qqq, GIST_LEAF(entry), &tinfo)
+ );
+}
+
Datum
gbt_ts_union(PG_FUNCTION_ARGS)
diff --git a/contrib/btree_gist/btree_utils_num.c b/contrib/btree_gist/btree_utils_num.c
index ff206dcda8..a3da5802df 100644
--- a/contrib/btree_gist/btree_utils_num.c
+++ b/contrib/btree_gist/btree_utils_num.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_utils_num.c,v 1.12 2009/06/11 14:48:50 momjian Exp $
+ * contrib/btree_gist/btree_utils_num.c
*/
#include "btree_gist.h"
#include "btree_utils_num.h"
@@ -184,20 +184,19 @@ gbt_num_bin_union(Datum *u, GBT_NUMKEY *e, const gbtree_ninfo *tinfo)
/*
-** The GiST consistent method
-*/
-
+ * The GiST consistent method
+ *
+ * Note: we currently assume that no datatypes that use this routine are
+ * collation-aware; so we don't bother passing collation through.
+ */
bool
-gbt_num_consistent(
- const GBT_NUMKEY_R *key,
+gbt_num_consistent(const GBT_NUMKEY_R *key,
const void *query,
const StrategyNumber *strategy,
bool is_leaf,
- const gbtree_ninfo *tinfo
-)
+ const gbtree_ninfo *tinfo)
{
-
- bool retval = FALSE;
+ bool retval;
switch (*strategy)
{
@@ -214,7 +213,7 @@ gbt_num_consistent(
if (is_leaf)
retval = (*tinfo->f_eq) (query, key->lower);
else
- retval = (*tinfo->f_le) (key->lower, query) && (*tinfo->f_le) (query, key->upper);
+ retval = ((*tinfo->f_le) (key->lower, query) && (*tinfo->f_le) (query, key->upper)) ? true : false;
break;
case BTGreaterStrategyNumber:
if (is_leaf)
@@ -225,14 +224,44 @@ gbt_num_consistent(
case BTGreaterEqualStrategyNumber:
retval = (*tinfo->f_le) (query, key->upper);
break;
+ case BtreeGistNotEqualStrategyNumber:
+ retval = (!((*tinfo->f_eq) (query, key->lower) &&
+ (*tinfo->f_eq) (query, key->upper))) ? true : false;
+ break;
default:
- retval = FALSE;
+ retval = false;
}
return (retval);
}
+/*
+** The GiST distance method (for KNN-Gist)
+*/
+
+float8
+gbt_num_distance(const GBT_NUMKEY_R *key,
+ const void *query,
+ bool is_leaf,
+ const gbtree_ninfo *tinfo)
+{
+ float8 retval;
+
+ if (tinfo->f_dist == NULL)
+ elog(ERROR, "KNN search is not supported for btree_gist type %d",
+ (int) tinfo->t);
+ if (tinfo->f_le(query, key->lower))
+ retval = tinfo->f_dist(query, key->lower);
+ else if (tinfo->f_ge(query, key->upper))
+ retval = tinfo->f_dist(query, key->upper);
+ else
+ retval = 0.0;
+
+ return retval;
+}
+
+
GIST_SPLITVEC *
gbt_num_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v,
const gbtree_ninfo *tinfo)
diff --git a/contrib/btree_gist/btree_utils_num.h b/contrib/btree_gist/btree_utils_num.h
index dcd17bc430..8935ed6630 100644
--- a/contrib/btree_gist/btree_utils_num.h
+++ b/contrib/btree_gist/btree_utils_num.h
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_utils_num.h,v 1.14 2009/06/11 14:48:50 momjian Exp $
+ * contrib/btree_gist/btree_utils_num.h
*/
#ifndef __BTREE_UTILS_NUM_H__
#define __BTREE_UTILS_NUM_H__
@@ -40,24 +40,25 @@ typedef struct
/* Methods */
- bool (*f_gt) (const void *, const void *); /* greater then */
- bool (*f_ge) (const void *, const void *); /* greater equal */
+ bool (*f_gt) (const void *, const void *); /* greater than */
+ bool (*f_ge) (const void *, const void *); /* greater or equal */
bool (*f_eq) (const void *, const void *); /* equal */
- bool (*f_le) (const void *, const void *); /* less equal */
- bool (*f_lt) (const void *, const void *); /* less then */
+ bool (*f_le) (const void *, const void *); /* less or equal */
+ bool (*f_lt) (const void *, const void *); /* less than */
int (*f_cmp) (const void *, const void *); /* key compare function */
+ float8 (*f_dist) (const void *, const void *); /* key distance function */
} gbtree_ninfo;
/*
* Numeric btree functions
-*/
+ */
/*
* Note: The factor 0.49 in following macro avoids floating point overflows
-*/
+ */
#define penalty_num(result,olower,oupper,nlower,nupper) do { \
double tmp = 0.0F; \
(*(result)) = 0.0F; \
@@ -91,11 +92,37 @@ typedef struct
(ivp)->month * (30.0 * SECS_PER_DAY))
#endif
+#define GET_FLOAT_DISTANCE(t, arg1, arg2) Abs( ((float8) *((const t *) (arg1))) - ((float8) *((const t *) (arg2))) )
+
+#define SAMESIGN(a,b) (((a) < 0) == ((b) < 0))
+
+/*
+ * check to see if a float4/8 val has underflowed or overflowed
+ * borrowed from src/backend/utils/adt/float.c
+ */
+#define CHECKFLOATVAL(val, inf_is_valid, zero_is_valid) \
+do { \
+ if (isinf(val) && !(inf_is_valid)) \
+ ereport(ERROR, \
+ (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), \
+ errmsg("value out of range: overflow"))); \
+ \
+ if ((val) == 0.0 && !(zero_is_valid)) \
+ ereport(ERROR, \
+ (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE), \
+ errmsg("value out of range: underflow"))); \
+} while(0)
+
+
+extern Interval *abs_interval(Interval *a);
extern bool gbt_num_consistent(const GBT_NUMKEY_R *key, const void *query,
const StrategyNumber *strategy, bool is_leaf,
const gbtree_ninfo *tinfo);
+extern float8 gbt_num_distance(const GBT_NUMKEY_R *key, const void *query,
+ bool is_leaf, const gbtree_ninfo *tinfo);
+
extern GIST_SPLITVEC *gbt_num_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v,
const gbtree_ninfo *tinfo);
diff --git a/contrib/btree_gist/btree_utils_var.c b/contrib/btree_gist/btree_utils_var.c
index 916706d8a4..e73799bb21 100644
--- a/contrib/btree_gist/btree_utils_var.c
+++ b/contrib/btree_gist/btree_utils_var.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_utils_var.c,v 1.23 2010/02/26 02:00:32 momjian Exp $
+ * contrib/btree_gist/btree_utils_var.c
*/
#include "btree_gist.h"
@@ -12,6 +12,20 @@
#include "utils/builtins.h"
#include "utils/rel.h"
+/* used for key sorting */
+typedef struct
+{
+ int i;
+ GBT_VARKEY *t;
+} Vsrt;
+
+typedef struct
+{
+ const gbtree_vinfo *tinfo;
+ Oid collation;
+} gbt_vsrt_arg;
+
+
PG_FUNCTION_INFO_V1(gbt_var_decompress);
Datum gbt_var_decompress(PG_FUNCTION_ARGS);
@@ -139,13 +153,11 @@ gbt_var_node_cp_len(const GBT_VARKEY *node, const gbtree_vinfo *tinfo)
/*
* returns true, if query matches prefix ( common prefix )
-*/
+ */
static bool
gbt_bytea_pf_match(const bytea *pf, const bytea *query, const gbtree_vinfo *tinfo)
{
-
bool out = FALSE;
- int32 k = 0;
int32 qlen = VARSIZE(query) - VARHDRSZ;
int32 nlen = VARSIZE(pf) - VARHDRSZ;
@@ -154,27 +166,7 @@ gbt_bytea_pf_match(const bytea *pf, const bytea *query, const gbtree_vinfo *tinf
char *q = VARDATA(query);
char *n = VARDATA(pf);
- if (tinfo->eml > 1)
- {
- out = (varstr_cmp(q, nlen, n, nlen) == 0);
- }
- else
- {
- out = TRUE;
- for (k = 0; k < nlen; k++)
- {
- if (*n != *q)
- {
- out = FALSE;
- break;
- }
- if (k < (nlen - 1))
- {
- q++;
- n++;
- }
- }
- }
+ out = (memcmp(q, n, nlen) == 0);
}
return out;
@@ -183,17 +175,14 @@ gbt_bytea_pf_match(const bytea *pf, const bytea *query, const gbtree_vinfo *tinf
/*
* returns true, if query matches node using common prefix
-*/
-
+ */
static bool
gbt_var_node_pf_match(const GBT_VARKEY_R *node, const bytea *query, const gbtree_vinfo *tinfo)
{
-
return (tinfo->trnc && (
gbt_bytea_pf_match(node->lower, query, tinfo) ||
gbt_bytea_pf_match(node->upper, query, tinfo)
));
-
}
@@ -231,9 +220,9 @@ gbt_var_node_truncate(const GBT_VARKEY *node, int32 cpf_length, const gbtree_vin
void
-gbt_var_bin_union(Datum *u, GBT_VARKEY *e, const gbtree_vinfo *tinfo)
+gbt_var_bin_union(Datum *u, GBT_VARKEY *e, Oid collation,
+ const gbtree_vinfo *tinfo)
{
-
GBT_VARKEY *nk = NULL;
GBT_VARKEY *tmp = NULL;
GBT_VARKEY_R nr;
@@ -251,14 +240,14 @@ gbt_var_bin_union(Datum *u, GBT_VARKEY *e, const gbtree_vinfo *tinfo)
GBT_VARKEY_R ro = gbt_var_key_readable((GBT_VARKEY *) DatumGetPointer(*u));
- if ((*tinfo->f_cmp) ((bytea *) ro.lower, (bytea *) eo.lower) > 0)
+ if ((*tinfo->f_cmp) (ro.lower, eo.lower, collation) > 0)
{
nr.lower = eo.lower;
nr.upper = ro.upper;
nk = gbt_var_key_copy(&nr, TRUE);
}
- if ((*tinfo->f_cmp) ((bytea *) ro.upper, (bytea *) eo.upper) < 0)
+ if ((*tinfo->f_cmp) (ro.upper, eo.upper, collation) < 0)
{
nr.upper = eo.upper;
nr.lower = ro.lower;
@@ -307,7 +296,8 @@ gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo *tinfo)
GBT_VARKEY *
-gbt_var_union(const GistEntryVector *entryvec, int32 *size, const gbtree_vinfo *tinfo)
+gbt_var_union(const GistEntryVector *entryvec, int32 *size, Oid collation,
+ const gbtree_vinfo *tinfo)
{
int i = 0,
@@ -325,7 +315,7 @@ gbt_var_union(const GistEntryVector *entryvec, int32 *size, const gbtree_vinfo *
for (i = 1; i < numranges; i++)
{
cur = (GBT_VARKEY *) DatumGetPointer(entryvec->vector[i].key);
- gbt_var_bin_union(&out, cur, tinfo);
+ gbt_var_bin_union(&out, cur, collation, tinfo);
}
@@ -346,9 +336,10 @@ gbt_var_union(const GistEntryVector *entryvec, int32 *size, const gbtree_vinfo *
bool
-gbt_var_same(bool *result, const Datum d1, const Datum d2, const gbtree_vinfo *tinfo)
+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,
@@ -358,22 +349,19 @@ gbt_var_same(bool *result, const Datum d1, const Datum d2, const gbtree_vinfo *t
r2 = gbt_var_key_readable(t2);
if (t1 && t2)
- {
- *result = (((*tinfo->f_cmp) ((bytea *) r1.lower, (bytea *) r2.lower) == 0
- && (*tinfo->f_cmp) ((bytea *) r1.upper, (bytea *) r2.upper) == 0) ? TRUE : FALSE);
- }
+ 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) ? TRUE : FALSE;
+ result = (t1 == NULL && t2 == NULL);
- PG_RETURN_POINTER(result);
+ return result;
}
-
float *
-gbt_var_penalty(float *res, const GISTENTRY *o, const GISTENTRY *n, const gbtree_vinfo *tinfo)
+gbt_var_penalty(float *res, const GISTENTRY *o, const GISTENTRY *n,
+ Oid collation, const gbtree_vinfo *tinfo)
{
-
GBT_VARKEY *orge = (GBT_VARKEY *) DatumGetPointer(o->key);
GBT_VARKEY *newe = (GBT_VARKEY *) DatumGetPointer(n->key);
GBT_VARKEY_R ok,
@@ -393,21 +381,19 @@ gbt_var_penalty(float *res, const GISTENTRY *o, const GISTENTRY *n, const gbtree
if ((VARSIZE(ok.lower) - VARHDRSZ) == 0 && (VARSIZE(ok.upper) - VARHDRSZ) == 0)
*res = 0.0;
- else if (!(
- (
- ((*tinfo->f_cmp) (nk.lower, ok.lower) >= 0 || gbt_bytea_pf_match(ok.lower, nk.lower, tinfo)) &&
- ((*tinfo->f_cmp) (nk.upper, ok.upper) <= 0 || gbt_bytea_pf_match(ok.upper, nk.upper, tinfo))
- )
- ))
+ else if (!(((*tinfo->f_cmp) (nk.lower, ok.lower, collation) >= 0 ||
+ gbt_bytea_pf_match(ok.lower, nk.lower, tinfo)) &&
+ ((*tinfo->f_cmp) (nk.upper, ok.upper, collation) <= 0 ||
+ gbt_bytea_pf_match(ok.upper, nk.upper, tinfo))))
{
Datum d = PointerGetDatum(0);
double dres = 0.0;
int32 ol,
ul;
- gbt_var_bin_union(&d, orge, tinfo);
+ gbt_var_bin_union(&d, orge, collation, tinfo);
ol = gbt_var_node_cp_len((GBT_VARKEY *) DatumGetPointer(d), tinfo);
- gbt_var_bin_union(&d, newe, tinfo);
+ gbt_var_bin_union(&d, newe, collation, tinfo);
ul = gbt_var_node_cp_len((GBT_VARKEY *) DatumGetPointer(d), tinfo);
if (ul < ol)
@@ -443,18 +429,19 @@ gbt_vsrt_cmp(const void *a, const void *b, void *arg)
{
GBT_VARKEY_R ar = gbt_var_key_readable(((const Vsrt *) a)->t);
GBT_VARKEY_R br = gbt_var_key_readable(((const Vsrt *) b)->t);
- const gbtree_vinfo *tinfo = (const gbtree_vinfo *) arg;
+ const gbt_vsrt_arg *varg = (const gbt_vsrt_arg *) arg;
int res;
- res = (*tinfo->f_cmp) (ar.lower, br.lower);
+ res = (*varg->tinfo->f_cmp) (ar.lower, br.lower, varg->collation);
if (res == 0)
- return (*tinfo->f_cmp) (ar.upper, br.upper);
+ return (*varg->tinfo->f_cmp) (ar.upper, br.upper, varg->collation);
return res;
}
GIST_SPLITVEC *
-gbt_var_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v, const gbtree_vinfo *tinfo)
+gbt_var_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v,
+ Oid collation, const gbtree_vinfo *tinfo)
{
OffsetNumber i,
maxoff = entryvec->n - 1;
@@ -463,6 +450,7 @@ gbt_var_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v, const gbtre
nbytes;
char *cur;
GBT_VARKEY **sv = NULL;
+ gbt_vsrt_arg varg;
arr = (Vsrt *) palloc((maxoff + 1) * sizeof(Vsrt));
nbytes = (maxoff + 2) * sizeof(OffsetNumber);
@@ -496,11 +484,13 @@ gbt_var_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v, const gbtre
}
/* sort */
+ varg.tinfo = tinfo;
+ varg.collation = collation;
qsort_arg((void *) &arr[FirstOffsetNumber],
maxoff - FirstOffsetNumber + 1,
sizeof(Vsrt),
gbt_vsrt_cmp,
- (void *) tinfo);
+ (void *) &varg);
/* We do simply create two parts */
@@ -508,13 +498,13 @@ gbt_var_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v, const gbtre
{
if (i <= (maxoff - FirstOffsetNumber + 1) / 2)
{
- gbt_var_bin_union(&v->spl_ldatum, arr[i].t, tinfo);
+ gbt_var_bin_union(&v->spl_ldatum, arr[i].t, collation, tinfo);
v->spl_left[v->spl_nleft] = arr[i].i;
v->spl_nleft++;
}
else
{
- gbt_var_bin_union(&v->spl_rdatum, arr[i].t, tinfo);
+ gbt_var_bin_union(&v->spl_rdatum, arr[i].t, collation, tinfo);
v->spl_right[v->spl_nright] = arr[i].i;
v->spl_nright++;
}
@@ -545,60 +535,61 @@ gbt_var_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v, const gbtre
* The GiST consistent method
*/
bool
-gbt_var_consistent(
- GBT_VARKEY_R *key,
+gbt_var_consistent(GBT_VARKEY_R *key,
const void *query,
- const StrategyNumber *strategy,
+ StrategyNumber strategy,
+ Oid collation,
bool is_leaf,
- const gbtree_vinfo *tinfo
-)
+ const gbtree_vinfo *tinfo)
{
bool retval = FALSE;
- switch (*strategy)
+ switch (strategy)
{
case BTLessEqualStrategyNumber:
if (is_leaf)
- retval = (*tinfo->f_ge) (query, (void *) key->lower);
+ retval = (*tinfo->f_ge) (query, key->lower, collation);
else
- retval = (*tinfo->f_cmp) ((bytea *) query, key->lower) >= 0
+ retval = (*tinfo->f_cmp) (query, key->lower, collation) >= 0
|| gbt_var_node_pf_match(key, query, tinfo);
break;
case BTLessStrategyNumber:
if (is_leaf)
- retval = (*tinfo->f_gt) (query, (void *) key->lower);
+ retval = (*tinfo->f_gt) (query, key->lower, collation);
else
- retval = (*tinfo->f_cmp) ((bytea *) query, key->lower) >= 0
+ retval = (*tinfo->f_cmp) (query, key->lower, collation) >= 0
|| gbt_var_node_pf_match(key, query, tinfo);
break;
case BTEqualStrategyNumber:
if (is_leaf)
- retval = (*tinfo->f_eq) (query, (void *) key->lower);
+ retval = (*tinfo->f_eq) (query, key->lower, collation);
else
- retval = (
- (
- (*tinfo->f_cmp) (key->lower, (bytea *) query) <= 0 &&
- (*tinfo->f_cmp) ((bytea *) query, (void *) key->upper) <= 0
- ) || gbt_var_node_pf_match(key, query, tinfo)
- );
+ retval =
+ ((*tinfo->f_cmp) (key->lower, query, collation) <= 0 &&
+ (*tinfo->f_cmp) (query, key->upper, collation) <= 0) ||
+ gbt_var_node_pf_match(key, query, tinfo);
break;
case BTGreaterStrategyNumber:
if (is_leaf)
- retval = (*tinfo->f_lt) (query, (void *) key->upper);
+ retval = (*tinfo->f_lt) (query, key->upper, collation);
else
- retval = (*tinfo->f_cmp) ((bytea *) query, key->upper) <= 0
+ retval = (*tinfo->f_cmp) (query, key->upper, collation) <= 0
|| gbt_var_node_pf_match(key, query, tinfo);
break;
case BTGreaterEqualStrategyNumber:
if (is_leaf)
- retval = (*tinfo->f_le) (query, (void *) key->upper);
+ retval = (*tinfo->f_le) (query, key->upper, collation);
else
- retval = (*tinfo->f_cmp) ((bytea *) query, key->upper) <= 0
+ retval = (*tinfo->f_cmp) (query, key->upper, collation) <= 0
|| gbt_var_node_pf_match(key, query, tinfo);
break;
+ case BtreeGistNotEqualStrategyNumber:
+ retval = !((*tinfo->f_eq) (query, key->lower, collation) &&
+ (*tinfo->f_eq) (query, key->upper, collation));
+ break;
default:
retval = FALSE;
}
- return (retval);
+ return retval;
}
diff --git a/contrib/btree_gist/btree_utils_var.h b/contrib/btree_gist/btree_utils_var.h
index 49f5d59ee2..57d10e80f1 100644
--- a/contrib/btree_gist/btree_utils_var.h
+++ b/contrib/btree_gist/btree_utils_var.h
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/btree_gist/btree_utils_var.h,v 1.9 2009/06/11 14:48:50 momjian Exp $
+ * contrib/btree_gist/btree_utils_var.h
*/
#ifndef __BTREE_UTILS_VAR_H__
#define __BTREE_UTILS_VAR_H__
@@ -18,18 +18,9 @@ typedef struct
*upper;
} GBT_VARKEY_R;
-/* used for key sorting */
-typedef struct
-{
- int i;
- GBT_VARKEY *t;
-} Vsrt;
-
/*
- type description
-*/
-
-
+ * type description
+ */
typedef struct
{
@@ -42,12 +33,12 @@ typedef struct
/* Methods */
- bool (*f_gt) (const void *, const void *); /* greater then */
- bool (*f_ge) (const void *, const void *); /* greater equal */
- bool (*f_eq) (const void *, const void *); /* equal */
- bool (*f_le) (const void *, const void *); /* less equal */
- bool (*f_lt) (const void *, const void *); /* less then */
- int32 (*f_cmp) (const bytea *, const bytea *); /* node compare */
+ bool (*f_gt) (const void *, const void *, Oid); /* greater than */
+ bool (*f_ge) (const void *, const void *, Oid); /* greater equal */
+ bool (*f_eq) (const void *, const void *, Oid); /* equal */
+ bool (*f_le) (const void *, const void *, Oid); /* less equal */
+ bool (*f_lt) (const void *, const void *, Oid); /* less than */
+ int32 (*f_cmp) (const void *, const void *, Oid); /* compare */
GBT_VARKEY *(*f_l2n) (GBT_VARKEY *); /* convert leaf to node */
} gbtree_vinfo;
@@ -60,21 +51,22 @@ extern GBT_VARKEY *gbt_var_key_copy(const GBT_VARKEY_R *u, bool force_node);
extern GISTENTRY *gbt_var_compress(GISTENTRY *entry, const gbtree_vinfo *tinfo);
extern GBT_VARKEY *gbt_var_union(const GistEntryVector *entryvec, int32 *size,
- const gbtree_vinfo *tinfo);
+ Oid collation, const gbtree_vinfo *tinfo);
-extern bool gbt_var_same(bool *result, const Datum d1, const Datum d2,
+extern bool gbt_var_same(Datum d1, Datum d2, Oid collation,
const gbtree_vinfo *tinfo);
extern float *gbt_var_penalty(float *res, const GISTENTRY *o, const GISTENTRY *n,
- const gbtree_vinfo *tinfo);
+ Oid collation, const gbtree_vinfo *tinfo);
extern bool gbt_var_consistent(GBT_VARKEY_R *key, const void *query,
- const StrategyNumber *strategy, bool is_leaf,
+ StrategyNumber strategy, Oid collation, bool is_leaf,
const gbtree_vinfo *tinfo);
extern GIST_SPLITVEC *gbt_var_picksplit(const GistEntryVector *entryvec, GIST_SPLITVEC *v,
- const gbtree_vinfo *tinfo);
-extern void gbt_var_bin_union(Datum *u, GBT_VARKEY *e,
+ Oid collation, const gbtree_vinfo *tinfo);
+
+extern void gbt_var_bin_union(Datum *u, GBT_VARKEY *e, Oid collation,
const gbtree_vinfo *tinfo);
#endif
diff --git a/contrib/btree_gist/data/interval.data b/contrib/btree_gist/data/interval.data
index a4afaedefd..af418c2cbb 100644
--- a/contrib/btree_gist/data/interval.data
+++ b/contrib/btree_gist/data/interval.data
@@ -609,4 +609,4 @@
7243 days 19:10:42
-2143 days -07:51:00
-9553 days -11:47:20
--14153 days -13:26:25 \ No newline at end of file
+-14153 days -13:26:25
diff --git a/contrib/btree_gist/data/macaddr.data b/contrib/btree_gist/data/macaddr.data
index a18c0b2047..12ef5300a1 100644
--- a/contrib/btree_gist/data/macaddr.data
+++ b/contrib/btree_gist/data/macaddr.data
@@ -641,4 +641,4 @@ dd:79:87:70:0b:e7
27:bb:a9:3a:7b:f0
73:3c:06:b1:51:ad
47:0e:59:c0:5d:38
-13:13:e1:1c:aa:25 \ No newline at end of file
+13:13:e1:1c:aa:25
diff --git a/contrib/btree_gist/data/numeric.data b/contrib/btree_gist/data/numeric.data
index 9be64adc0a..58d76fa0ac 100644
--- a/contrib/btree_gist/data/numeric.data
+++ b/contrib/btree_gist/data/numeric.data
@@ -8,4 +8,4 @@
0
0
NaN
-NaN \ No newline at end of file
+NaN
diff --git a/contrib/btree_gist/data/text.data b/contrib/btree_gist/data/text.data
index 512035241f..4494936ad9 100644
--- a/contrib/btree_gist/data/text.data
+++ b/contrib/btree_gist/data/text.data
@@ -1 +1 @@
-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 \ No newline at end of file
+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
diff --git a/contrib/btree_gist/data/timetz.data b/contrib/btree_gist/data/timetz.data
index d342fa30f3..a179a1ece5 100644
--- a/contrib/btree_gist/data/timetz.data
+++ b/contrib/btree_gist/data/timetz.data
@@ -596,4 +596,4 @@
09:20:46 GMT+9
19:38:36 GMT+0
14:15:53 GMT+7
-01:05:51 GMT+6 \ No newline at end of file
+01:05:51 GMT+6
diff --git a/contrib/btree_gist/data/varbit.data b/contrib/btree_gist/data/varbit.data
index 5db3d82957..b25a264dc4 100644
--- a/contrib/btree_gist/data/varbit.data
+++ b/contrib/btree_gist/data/varbit.data
@@ -618,4 +618,4 @@
00101010101001101111000
011000111001010000111101
0110100000111000001111000101010000110110100101101100
-1011100101010110011010010011110100101100100001100111100010100001000111 \ No newline at end of file
+1011100101010110011010010011110100101100100001100111100010100001000111
diff --git a/contrib/btree_gist/expected/cash.out b/contrib/btree_gist/expected/cash.out
index 2beb8cd92d..a4100d844e 100644
--- a/contrib/btree_gist/expected/cash.out
+++ b/contrib/btree_gist/expected/cash.out
@@ -32,6 +32,14 @@ SELECT count(*) FROM moneytmp WHERE a > '22649.64';
253
(1 row)
+SELECT a, a <-> '21472.79' FROM moneytmp ORDER BY a <-> '21472.79' LIMIT 3;
+ a | ?column?
+------------+----------
+ $21,472.79 | $0.00
+ $21,469.25 | $3.54
+ $21,915.01 | $442.22
+(3 rows)
+
CREATE INDEX moneyidx ON moneytmp USING gist ( a );
SET enable_seqscan=off;
SELECT count(*) FROM moneytmp WHERE a < '22649.64'::money;
@@ -64,3 +72,20 @@ SELECT count(*) FROM moneytmp WHERE a > '22649.64'::money;
253
(1 row)
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '21472.79' FROM moneytmp ORDER BY a <-> '21472.79' LIMIT 3;
+ QUERY PLAN
+-----------------------------------------------
+ Limit
+ -> Index Scan using moneyidx on moneytmp
+ Order By: (a <-> '$21,472.79'::money)
+(3 rows)
+
+SELECT a, a <-> '21472.79' FROM moneytmp ORDER BY a <-> '21472.79' LIMIT 3;
+ a | ?column?
+------------+----------
+ $21,472.79 | $0.00
+ $21,469.25 | $3.54
+ $21,915.01 | $442.22
+(3 rows)
+
diff --git a/contrib/btree_gist/expected/date.out b/contrib/btree_gist/expected/date.out
index f2082cf391..4a360bea6d 100644
--- a/contrib/btree_gist/expected/date.out
+++ b/contrib/btree_gist/expected/date.out
@@ -32,6 +32,14 @@ SELECT count(*) FROM datetmp WHERE a > '2001-02-13';
313
(1 row)
+SELECT a, a <-> '2001-02-13' FROM datetmp ORDER BY a <-> '2001-02-13' LIMIT 3;
+ a | ?column?
+------------+----------
+ 02-13-2001 | 0
+ 02-11-2001 | 2
+ 03-24-2001 | 39
+(3 rows)
+
CREATE INDEX dateidx ON datetmp USING gist ( a );
SET enable_seqscan=off;
SELECT count(*) FROM datetmp WHERE a < '2001-02-13'::date;
@@ -64,3 +72,20 @@ SELECT count(*) FROM datetmp WHERE a > '2001-02-13'::date;
313
(1 row)
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '2001-02-13' FROM datetmp ORDER BY a <-> '2001-02-13' LIMIT 3;
+ QUERY PLAN
+----------------------------------------------
+ Limit
+ -> Index Scan using dateidx on datetmp
+ Order By: (a <-> '02-13-2001'::date)
+(3 rows)
+
+SELECT a, a <-> '2001-02-13' FROM datetmp ORDER BY a <-> '2001-02-13' LIMIT 3;
+ a | ?column?
+------------+----------
+ 02-13-2001 | 0
+ 02-11-2001 | 2
+ 03-24-2001 | 39
+(3 rows)
+
diff --git a/contrib/btree_gist/expected/float4.out b/contrib/btree_gist/expected/float4.out
index c7f65c8d7f..1695f7805a 100644
--- a/contrib/btree_gist/expected/float4.out
+++ b/contrib/btree_gist/expected/float4.out
@@ -32,6 +32,14 @@ SELECT count(*) FROM float4tmp WHERE a > -179.0;
302
(1 row)
+SELECT a, a <-> '-179.0' FROM float4tmp ORDER BY a <-> '-179.0' LIMIT 3;
+ a | ?column?
+----------+----------
+ -179 | 0
+ -189.024 | 10.0239
+ -158.177 | 20.8226
+(3 rows)
+
CREATE INDEX float4idx ON float4tmp USING gist ( a );
SET enable_seqscan=off;
SELECT count(*) FROM float4tmp WHERE a < -179.0::float4;
@@ -64,3 +72,20 @@ SELECT count(*) FROM float4tmp WHERE a > -179.0::float4;
302
(1 row)
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '-179.0' FROM float4tmp ORDER BY a <-> '-179.0' LIMIT 3;
+ QUERY PLAN
+-----------------------------------------------
+ Limit
+ -> Index 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;
+ a | ?column?
+----------+----------
+ -179 | 0
+ -189.024 | 10.0239
+ -158.177 | 20.8226
+(3 rows)
+
diff --git a/contrib/btree_gist/expected/float8.out b/contrib/btree_gist/expected/float8.out
index 4598ac87a2..7d2228b797 100644
--- a/contrib/btree_gist/expected/float8.out
+++ b/contrib/btree_gist/expected/float8.out
@@ -32,6 +32,14 @@ SELECT count(*) FROM float8tmp WHERE a > -1890.0;
306
(1 row)
+SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3;
+ a | ?column?
+--------------+------------
+ -1890 | 0
+ -2003.634512 | 113.634512
+ -1769.73634 | 120.26366
+(3 rows)
+
CREATE INDEX float8idx ON float8tmp USING gist ( a );
SET enable_seqscan=off;
SELECT count(*) FROM float8tmp WHERE a < -1890.0::float8;
@@ -64,3 +72,20 @@ SELECT count(*) FROM float8tmp WHERE a > -1890.0::float8;
306
(1 row)
+EXPLAIN (COSTS OFF)
+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)
+(3 rows)
+
+SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3;
+ a | ?column?
+--------------+------------
+ -1890 | 0
+ -2003.634512 | 113.634512
+ -1769.73634 | 120.26366
+(3 rows)
+
diff --git a/contrib/btree_gist/expected/init.out b/contrib/btree_gist/expected/init.out
index c808249545..afe0534682 100644
--- a/contrib/btree_gist/expected/init.out
+++ b/contrib/btree_gist/expected/init.out
@@ -1,7 +1 @@
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of btree_gist.sql.
---
-SET client_min_messages = warning;
-\set ECHO none
-RESET client_min_messages;
+CREATE EXTENSION btree_gist;
diff --git a/contrib/btree_gist/expected/int2.out b/contrib/btree_gist/expected/int2.out
index a82819c26a..b1cc3b14b2 100644
--- a/contrib/btree_gist/expected/int2.out
+++ b/contrib/btree_gist/expected/int2.out
@@ -32,6 +32,14 @@ SELECT count(*) FROM int2tmp WHERE a > 237;
248
(1 row)
+SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3;
+ a | ?column?
+-----+----------
+ 237 | 0
+ 232 | 5
+ 228 | 9
+(3 rows)
+
CREATE INDEX int2idx ON int2tmp USING gist ( a );
SET enable_seqscan=off;
SELECT count(*) FROM int2tmp WHERE a < 237::int2;
@@ -64,3 +72,20 @@ SELECT count(*) FROM int2tmp WHERE a > 237::int2;
248
(1 row)
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3;
+ QUERY PLAN
+-------------------------------------------
+ Limit
+ -> Index Scan using int2idx on int2tmp
+ Order By: (a <-> 237::smallint)
+(3 rows)
+
+SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3;
+ a | ?column?
+-----+----------
+ 237 | 0
+ 232 | 5
+ 228 | 9
+(3 rows)
+
diff --git a/contrib/btree_gist/expected/int4.out b/contrib/btree_gist/expected/int4.out
index d4ac0e1513..41bed1f6e3 100644
--- a/contrib/btree_gist/expected/int4.out
+++ b/contrib/btree_gist/expected/int4.out
@@ -32,6 +32,14 @@ SELECT count(*) FROM int4tmp WHERE a > 237;
248
(1 row)
+SELECT a, a <-> '237' FROM int4tmp ORDER BY a <-> '237' LIMIT 3;
+ a | ?column?
+-----+----------
+ 237 | 0
+ 232 | 5
+ 228 | 9
+(3 rows)
+
CREATE INDEX int4idx ON int4tmp USING gist ( a );
SET enable_seqscan=off;
SELECT count(*) FROM int4tmp WHERE a < 237::int4;
@@ -64,3 +72,20 @@ SELECT count(*) FROM int4tmp WHERE a > 237::int4;
248
(1 row)
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '237' FROM int4tmp ORDER BY a <-> '237' LIMIT 3;
+ QUERY PLAN
+-------------------------------------------
+ Limit
+ -> Index Scan using int4idx on int4tmp
+ Order By: (a <-> 237)
+(3 rows)
+
+SELECT a, a <-> '237' FROM int4tmp ORDER BY a <-> '237' LIMIT 3;
+ a | ?column?
+-----+----------
+ 237 | 0
+ 232 | 5
+ 228 | 9
+(3 rows)
+
diff --git a/contrib/btree_gist/expected/int8.out b/contrib/btree_gist/expected/int8.out
index 1da484525b..ff0af4a5fb 100644
--- a/contrib/btree_gist/expected/int8.out
+++ b/contrib/btree_gist/expected/int8.out
@@ -32,6 +32,14 @@ SELECT count(*) FROM int8tmp WHERE a > 464571291354841;
270
(1 row)
+SELECT a, a <-> '464571291354841' FROM int8tmp ORDER BY a <-> '464571291354841' LIMIT 3;
+ a | ?column?
+-----------------+----------------
+ 464571291354841 | 0
+ 457257666629329 | 7313624725512
+ 478227196042750 | 13655904687909
+(3 rows)
+
CREATE INDEX int8idx ON int8tmp USING gist ( a );
SET enable_seqscan=off;
SELECT count(*) FROM int8tmp WHERE a < 464571291354841::int8;
@@ -64,3 +72,20 @@ SELECT count(*) FROM int8tmp WHERE a > 464571291354841::int8;
270
(1 row)
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '464571291354841' FROM int8tmp ORDER BY a <-> '464571291354841' LIMIT 3;
+ QUERY PLAN
+---------------------------------------------------
+ Limit
+ -> Index Scan using int8idx on int8tmp
+ Order By: (a <-> 464571291354841::bigint)
+(3 rows)
+
+SELECT a, a <-> '464571291354841' FROM int8tmp ORDER BY a <-> '464571291354841' LIMIT 3;
+ a | ?column?
+-----------------+----------------
+ 464571291354841 | 0
+ 457257666629329 | 7313624725512
+ 478227196042750 | 13655904687909
+(3 rows)
+
diff --git a/contrib/btree_gist/expected/interval.out b/contrib/btree_gist/expected/interval.out
index 4c78e21346..6955251a04 100644
--- a/contrib/btree_gist/expected/interval.out
+++ b/contrib/btree_gist/expected/interval.out
@@ -32,6 +32,14 @@ SELECT count(*) FROM intervaltmp WHERE a > '199 days 21:21:23';
270
(1 row)
+SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21:21:23' LIMIT 3;
+ a | ?column?
+-------------------------------------+--------------------------------------
+ @ 199 days 21 hours 21 mins 23 secs | @ 0
+ @ 183 days 6 hours 52 mins 48 secs | @ 16 days 14 hours 28 mins 35 secs
+ @ 220 days 19 hours 5 mins 42 secs | @ 21 days -2 hours -15 mins -41 secs
+(3 rows)
+
CREATE INDEX intervalidx ON intervaltmp USING gist ( a );
SET enable_seqscan=off;
SELECT count(*) FROM intervaltmp WHERE a < '199 days 21:21:23'::interval;
@@ -64,3 +72,20 @@ SELECT count(*) FROM intervaltmp WHERE a > '199 days 21:21:23'::interval;
270
(1 row)
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21:21:23' LIMIT 3;
+ QUERY PLAN
+---------------------------------------------------------------------------
+ Limit
+ -> Index Scan using intervalidx on intervaltmp
+ Order By: (a <-> '@ 199 days 21 hours 21 mins 23 secs'::interval)
+(3 rows)
+
+SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21:21:23' LIMIT 3;
+ a | ?column?
+-------------------------------------+--------------------------------------
+ @ 199 days 21 hours 21 mins 23 secs | @ 0
+ @ 183 days 6 hours 52 mins 48 secs | @ 16 days 14 hours 28 mins 35 secs
+ @ 220 days 19 hours 5 mins 42 secs | @ 21 days -2 hours -15 mins -41 secs
+(3 rows)
+
diff --git a/contrib/btree_gist/expected/not_equal.out b/contrib/btree_gist/expected/not_equal.out
new file mode 100644
index 0000000000..d9b91e2d56
--- /dev/null
+++ b/contrib/btree_gist/expected/not_equal.out
@@ -0,0 +1,40 @@
+SET enable_seqscan to false;
+-- test search for "not equals"
+CREATE TABLE test_ne (
+ a TIMESTAMP,
+ b NUMERIC
+);
+CREATE INDEX test_ne_idx ON test_ne USING gist (a, b);
+INSERT INTO test_ne SELECT '2009-01-01', 10.7 FROM generate_series(1,1000);
+INSERT INTO test_ne VALUES('2007-02-03', -91.3);
+INSERT INTO test_ne VALUES('2011-09-01', 43.7);
+INSERT INTO test_ne SELECT '2009-01-01', 10.7 FROM generate_series(1,1000);
+EXPLAIN (COSTS OFF) SELECT * FROM test_ne WHERE a <> '2009-01-01' AND b <> 10.7;
+ QUERY PLAN
+------------------------------------------------------------------------------------------------------
+ Bitmap Heap Scan on test_ne
+ Recheck Cond: ((a <> 'Thu Jan 01 00:00:00 2009'::timestamp without time zone) AND (b <> 10.7))
+ -> Bitmap Index Scan on test_ne_idx
+ Index Cond: ((a <> 'Thu Jan 01 00:00:00 2009'::timestamp without time zone) AND (b <> 10.7))
+(4 rows)
+
+SELECT * FROM test_ne WHERE a <> '2009-01-01' AND b <> 10.7;
+ a | b
+--------------------------+-------
+ Sat Feb 03 00:00:00 2007 | -91.3
+ Thu Sep 01 00:00:00 2011 | 43.7
+(2 rows)
+
+-- test search for "not equals" using an exclusion constraint
+CREATE TABLE zoo (
+ cage INTEGER,
+ animal TEXT,
+ EXCLUDE USING gist (cage WITH =, animal WITH <>)
+);
+NOTICE: CREATE TABLE / EXCLUDE will create implicit index "zoo_cage_animal_excl" for table "zoo"
+INSERT INTO zoo VALUES(123, 'zebra');
+INSERT INTO zoo VALUES(123, 'zebra');
+INSERT INTO zoo VALUES(123, 'lion');
+ERROR: conflicting key value violates exclusion constraint "zoo_cage_animal_excl"
+DETAIL: Key (cage, animal)=(123, lion) conflicts with existing key (cage, animal)=(123, zebra).
+INSERT INTO zoo VALUES(124, 'lion');
diff --git a/contrib/btree_gist/expected/time.out b/contrib/btree_gist/expected/time.out
index 015a67f6a1..1b9da4e192 100644
--- a/contrib/btree_gist/expected/time.out
+++ b/contrib/btree_gist/expected/time.out
@@ -32,6 +32,14 @@ SELECT count(*) FROM timetmp WHERE a > '10:57:11';
292
(1 row)
+SELECT a, a <-> '10:57:11' FROM timetmp ORDER BY a <-> '10:57:11' LIMIT 3;
+ a | ?column?
+----------+-----------------
+ 10:57:11 | @ 0
+ 10:57:10 | @ 1 sec
+ 10:55:32 | @ 1 min 39 secs
+(3 rows)
+
CREATE INDEX timeidx ON timetmp USING gist ( a );
SET enable_seqscan=off;
SELECT count(*) FROM timetmp WHERE a < '10:57:11'::time;
@@ -64,3 +72,20 @@ SELECT count(*) FROM timetmp WHERE a > '10:57:11'::time;
292
(1 row)
+EXPLAIN (COSTS OFF)
+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
+ Order By: (a <-> '10:57:11'::time without time zone)
+(3 rows)
+
+SELECT a, a <-> '10:57:11' FROM timetmp ORDER BY a <-> '10:57:11' LIMIT 3;
+ a | ?column?
+----------+-----------------
+ 10:57:11 | @ 0
+ 10:57:10 | @ 1 sec
+ 10:55:32 | @ 1 min 39 secs
+(3 rows)
+
diff --git a/contrib/btree_gist/expected/timestamp.out b/contrib/btree_gist/expected/timestamp.out
index dc53895ca2..cc3624f084 100644
--- a/contrib/btree_gist/expected/timestamp.out
+++ b/contrib/btree_gist/expected/timestamp.out
@@ -32,6 +32,14 @@ SELECT count(*) FROM timestamptmp WHERE a > '2004-10-26 08:55:08';
289
(1 row)
+SELECT a, a <-> '2004-10-26 08:55:08' FROM timestamptmp ORDER BY a <-> '2004-10-26 08:55:08' LIMIT 3;
+ a | ?column?
+--------------------------+------------------------------------
+ Tue Oct 26 08:55:08 2004 | @ 0
+ Sun Oct 31 06:35:03 2004 | @ 4 days 21 hours 39 mins 55 secs
+ Mon Nov 29 20:12:43 2004 | @ 34 days 11 hours 17 mins 35 secs
+(3 rows)
+
CREATE INDEX timestampidx ON timestamptmp USING gist ( a );
SET enable_seqscan=off;
SELECT count(*) FROM timestamptmp WHERE a < '2004-10-26 08:55:08'::timestamp;
@@ -64,3 +72,20 @@ SELECT count(*) FROM timestamptmp WHERE a > '2004-10-26 08:55:08'::timestamp;
289
(1 row)
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '2004-10-26 08:55:08' FROM timestamptmp ORDER BY a <-> '2004-10-26 08:55:08' LIMIT 3;
+ QUERY PLAN
+-----------------------------------------------------------------------------------
+ Limit
+ -> Index Scan using timestampidx on timestamptmp
+ Order By: (a <-> 'Tue Oct 26 08:55:08 2004'::timestamp without time zone)
+(3 rows)
+
+SELECT a, a <-> '2004-10-26 08:55:08' FROM timestamptmp ORDER BY a <-> '2004-10-26 08:55:08' LIMIT 3;
+ a | ?column?
+--------------------------+------------------------------------
+ Tue Oct 26 08:55:08 2004 | @ 0
+ Sun Oct 31 06:35:03 2004 | @ 4 days 21 hours 39 mins 55 secs
+ Mon Nov 29 20:12:43 2004 | @ 34 days 11 hours 17 mins 35 secs
+(3 rows)
+
diff --git a/contrib/btree_gist/expected/timestamptz.out b/contrib/btree_gist/expected/timestamptz.out
index 391705f0db..88d2404c44 100644
--- a/contrib/btree_gist/expected/timestamptz.out
+++ b/contrib/btree_gist/expected/timestamptz.out
@@ -92,6 +92,14 @@ SELECT count(*) FROM timestamptztmp WHERE a > '2018-12-18 10:59:54 GMT+4';
157
(1 row)
+SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '2018-12-18 10:59:54 GMT+2' LIMIT 3;
+ a | ?column?
+------------------------------+-----------------------------------
+ Tue Dec 18 05:59:54 2018 PST | @ 1 hour
+ Thu Jan 10 03:01:34 2019 PST | @ 22 days 22 hours 1 min 40 secs
+ Thu Jan 24 12:28:12 2019 PST | @ 37 days 7 hours 28 mins 18 secs
+(3 rows)
+
CREATE INDEX timestamptzidx ON timestamptztmp USING gist ( a );
SET enable_seqscan=off;
SELECT count(*) FROM timestamptztmp WHERE a < '2018-12-18 10:59:54 GMT+3'::timestamptz;
@@ -184,3 +192,20 @@ SELECT count(*) FROM timestamptztmp WHERE a > '2018-12-18 10:59:54 GMT+4'::time
157
(1 row)
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '2018-12-18 10:59:54 GMT+2' LIMIT 3;
+ QUERY PLAN
+------------------------------------------------------------------------------------
+ Limit
+ -> Index Scan using timestamptzidx on timestamptztmp
+ Order By: (a <-> 'Tue Dec 18 04:59:54 2018 PST'::timestamp with time zone)
+(3 rows)
+
+SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '2018-12-18 10:59:54 GMT+2' LIMIT 3;
+ a | ?column?
+------------------------------+-----------------------------------
+ Tue Dec 18 05:59:54 2018 PST | @ 1 hour
+ Thu Jan 10 03:01:34 2019 PST | @ 22 days 22 hours 1 min 40 secs
+ Thu Jan 24 12:28:12 2019 PST | @ 37 days 7 hours 28 mins 18 secs
+(3 rows)
+
diff --git a/contrib/btree_gist/sql/cash.sql b/contrib/btree_gist/sql/cash.sql
index 5313e8f696..0e037984e1 100644
--- a/contrib/btree_gist/sql/cash.sql
+++ b/contrib/btree_gist/sql/cash.sql
@@ -16,6 +16,8 @@ SELECT count(*) FROM moneytmp WHERE a >= '22649.64';
SELECT count(*) FROM moneytmp WHERE a > '22649.64';
+SELECT a, a <-> '21472.79' FROM moneytmp ORDER BY a <-> '21472.79' LIMIT 3;
+
CREATE INDEX moneyidx ON moneytmp USING gist ( a );
SET enable_seqscan=off;
@@ -29,3 +31,7 @@ SELECT count(*) FROM moneytmp WHERE a = '22649.64'::money;
SELECT count(*) FROM moneytmp WHERE a >= '22649.64'::money;
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;
+SELECT a, a <-> '21472.79' FROM moneytmp ORDER BY a <-> '21472.79' LIMIT 3;
diff --git a/contrib/btree_gist/sql/cidr.sql b/contrib/btree_gist/sql/cidr.sql
index de06c24c92..9bd77185b9 100644
--- a/contrib/btree_gist/sql/cidr.sql
+++ b/contrib/btree_gist/sql/cidr.sql
@@ -28,4 +28,3 @@ SELECT count(*) FROM cidrtmp WHERE a = '121.111.63.82'::cidr;
SELECT count(*) FROM cidrtmp WHERE a >= '121.111.63.82'::cidr;
SELECT count(*) FROM cidrtmp WHERE a > '121.111.63.82'::cidr;
-
diff --git a/contrib/btree_gist/sql/date.sql b/contrib/btree_gist/sql/date.sql
index 3fa855c905..f969ef0a08 100644
--- a/contrib/btree_gist/sql/date.sql
+++ b/contrib/btree_gist/sql/date.sql
@@ -16,6 +16,8 @@ SELECT count(*) FROM datetmp WHERE a >= '2001-02-13';
SELECT count(*) FROM datetmp WHERE a > '2001-02-13';
+SELECT a, a <-> '2001-02-13' FROM datetmp ORDER BY a <-> '2001-02-13' LIMIT 3;
+
CREATE INDEX dateidx ON datetmp USING gist ( a );
SET enable_seqscan=off;
@@ -30,3 +32,6 @@ SELECT count(*) FROM datetmp WHERE a >= '2001-02-13'::date;
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;
+SELECT a, a <-> '2001-02-13' FROM datetmp ORDER BY a <-> '2001-02-13' LIMIT 3;
diff --git a/contrib/btree_gist/sql/float4.sql b/contrib/btree_gist/sql/float4.sql
index fb4b726d22..3da1ce953c 100644
--- a/contrib/btree_gist/sql/float4.sql
+++ b/contrib/btree_gist/sql/float4.sql
@@ -16,6 +16,8 @@ SELECT count(*) FROM float4tmp WHERE a >= -179.0;
SELECT count(*) FROM float4tmp WHERE a > -179.0;
+SELECT a, a <-> '-179.0' FROM float4tmp ORDER BY a <-> '-179.0' LIMIT 3;
+
CREATE INDEX float4idx ON float4tmp USING gist ( a );
SET enable_seqscan=off;
@@ -29,3 +31,7 @@ SELECT count(*) FROM float4tmp WHERE a = -179.0::float4;
SELECT count(*) FROM float4tmp WHERE a >= -179.0::float4;
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;
+SELECT a, a <-> '-179.0' FROM float4tmp ORDER BY a <-> '-179.0' LIMIT 3;
diff --git a/contrib/btree_gist/sql/float8.sql b/contrib/btree_gist/sql/float8.sql
index f8bd12efa1..e1e819b37f 100644
--- a/contrib/btree_gist/sql/float8.sql
+++ b/contrib/btree_gist/sql/float8.sql
@@ -16,6 +16,8 @@ SELECT count(*) FROM float8tmp WHERE a >= -1890.0;
SELECT count(*) FROM float8tmp WHERE a > -1890.0;
+SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3;
+
CREATE INDEX float8idx ON float8tmp USING gist ( a );
SET enable_seqscan=off;
@@ -29,3 +31,7 @@ SELECT count(*) FROM float8tmp WHERE a = -1890.0::float8;
SELECT count(*) FROM float8tmp WHERE a >= -1890.0::float8;
SELECT count(*) FROM float8tmp WHERE a > -1890.0::float8;
+
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3;
+SELECT a, a <-> '-1890.0' FROM float8tmp ORDER BY a <-> '-1890.0' LIMIT 3;
diff --git a/contrib/btree_gist/sql/inet.sql b/contrib/btree_gist/sql/inet.sql
index 39594945fe..328846c0a3 100644
--- a/contrib/btree_gist/sql/inet.sql
+++ b/contrib/btree_gist/sql/inet.sql
@@ -29,4 +29,3 @@ SELECT count(*) FROM inettmp WHERE a = '89.225.196.191'::inet;
SELECT count(*) FROM inettmp WHERE a >= '89.225.196.191'::inet;
SELECT count(*) FROM inettmp WHERE a > '89.225.196.191'::inet;
-
diff --git a/contrib/btree_gist/sql/init.sql b/contrib/btree_gist/sql/init.sql
index 7fafde12d8..afe0534682 100644
--- a/contrib/btree_gist/sql/init.sql
+++ b/contrib/btree_gist/sql/init.sql
@@ -1,9 +1 @@
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of btree_gist.sql.
---
-SET client_min_messages = warning;
-\set ECHO none
-\i btree_gist.sql
-\set ECHO all
-RESET client_min_messages;
+CREATE EXTENSION btree_gist;
diff --git a/contrib/btree_gist/sql/int2.sql b/contrib/btree_gist/sql/int2.sql
index c8303bde12..988518795f 100644
--- a/contrib/btree_gist/sql/int2.sql
+++ b/contrib/btree_gist/sql/int2.sql
@@ -16,6 +16,8 @@ SELECT count(*) FROM int2tmp WHERE a >= 237;
SELECT count(*) FROM int2tmp WHERE a > 237;
+SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3;
+
CREATE INDEX int2idx ON int2tmp USING gist ( a );
SET enable_seqscan=off;
@@ -30,3 +32,6 @@ SELECT count(*) FROM int2tmp WHERE a >= 237::int2;
SELECT count(*) FROM int2tmp WHERE a > 237::int2;
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3;
+SELECT a, a <-> '237' FROM int2tmp ORDER BY a <-> '237' LIMIT 3;
diff --git a/contrib/btree_gist/sql/int4.sql b/contrib/btree_gist/sql/int4.sql
index 2f80c5afd1..659ab5ee24 100644
--- a/contrib/btree_gist/sql/int4.sql
+++ b/contrib/btree_gist/sql/int4.sql
@@ -16,6 +16,8 @@ SELECT count(*) FROM int4tmp WHERE a >= 237;
SELECT count(*) FROM int4tmp WHERE a > 237;
+SELECT a, a <-> '237' FROM int4tmp ORDER BY a <-> '237' LIMIT 3;
+
CREATE INDEX int4idx ON int4tmp USING gist ( a );
SET enable_seqscan=off;
@@ -30,3 +32,6 @@ SELECT count(*) FROM int4tmp WHERE a >= 237::int4;
SELECT count(*) FROM int4tmp WHERE a > 237::int4;
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '237' FROM int4tmp ORDER BY a <-> '237' LIMIT 3;
+SELECT a, a <-> '237' FROM int4tmp ORDER BY a <-> '237' LIMIT 3;
diff --git a/contrib/btree_gist/sql/int8.sql b/contrib/btree_gist/sql/int8.sql
index 97ad6056ed..51e55e9c14 100644
--- a/contrib/btree_gist/sql/int8.sql
+++ b/contrib/btree_gist/sql/int8.sql
@@ -16,6 +16,8 @@ SELECT count(*) FROM int8tmp WHERE a >= 464571291354841;
SELECT count(*) FROM int8tmp WHERE a > 464571291354841;
+SELECT a, a <-> '464571291354841' FROM int8tmp ORDER BY a <-> '464571291354841' LIMIT 3;
+
CREATE INDEX int8idx ON int8tmp USING gist ( a );
SET enable_seqscan=off;
@@ -30,3 +32,6 @@ SELECT count(*) FROM int8tmp WHERE a >= 464571291354841::int8;
SELECT count(*) FROM int8tmp WHERE a > 464571291354841::int8;
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '464571291354841' FROM int8tmp ORDER BY a <-> '464571291354841' LIMIT 3;
+SELECT a, a <-> '464571291354841' FROM int8tmp ORDER BY a <-> '464571291354841' LIMIT 3;
diff --git a/contrib/btree_gist/sql/interval.sql b/contrib/btree_gist/sql/interval.sql
index 2139435065..0f8b031520 100644
--- a/contrib/btree_gist/sql/interval.sql
+++ b/contrib/btree_gist/sql/interval.sql
@@ -16,6 +16,8 @@ SELECT count(*) FROM intervaltmp WHERE a >= '199 days 21:21:23';
SELECT count(*) FROM intervaltmp WHERE a > '199 days 21:21:23';
+SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21:21:23' LIMIT 3;
+
CREATE INDEX intervalidx ON intervaltmp USING gist ( a );
SET enable_seqscan=off;
@@ -30,3 +32,6 @@ SELECT count(*) FROM intervaltmp WHERE a >= '199 days 21:21:23'::interval;
SELECT count(*) FROM intervaltmp WHERE a > '199 days 21:21:23'::interval;
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21:21:23' LIMIT 3;
+SELECT a, a <-> '199 days 21:21:23' FROM intervaltmp ORDER BY a <-> '199 days 21:21:23' LIMIT 3;
diff --git a/contrib/btree_gist/sql/macaddr.sql b/contrib/btree_gist/sql/macaddr.sql
index 18e0f3c68b..d9c54b2930 100644
--- a/contrib/btree_gist/sql/macaddr.sql
+++ b/contrib/btree_gist/sql/macaddr.sql
@@ -29,4 +29,3 @@ 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;
-
diff --git a/contrib/btree_gist/sql/not_equal.sql b/contrib/btree_gist/sql/not_equal.sql
new file mode 100644
index 0000000000..b1940ef4fe
--- /dev/null
+++ b/contrib/btree_gist/sql/not_equal.sql
@@ -0,0 +1,32 @@
+
+SET enable_seqscan to false;
+
+-- test search for "not equals"
+
+CREATE TABLE test_ne (
+ a TIMESTAMP,
+ b NUMERIC
+);
+CREATE INDEX test_ne_idx ON test_ne USING gist (a, b);
+
+INSERT INTO test_ne SELECT '2009-01-01', 10.7 FROM generate_series(1,1000);
+INSERT INTO test_ne VALUES('2007-02-03', -91.3);
+INSERT INTO test_ne VALUES('2011-09-01', 43.7);
+INSERT INTO test_ne SELECT '2009-01-01', 10.7 FROM generate_series(1,1000);
+
+EXPLAIN (COSTS OFF) SELECT * FROM test_ne WHERE a <> '2009-01-01' AND b <> 10.7;
+
+SELECT * FROM test_ne WHERE a <> '2009-01-01' AND b <> 10.7;
+
+-- test search for "not equals" using an exclusion constraint
+
+CREATE TABLE zoo (
+ cage INTEGER,
+ animal TEXT,
+ EXCLUDE USING gist (cage WITH =, animal WITH <>)
+);
+
+INSERT INTO zoo VALUES(123, 'zebra');
+INSERT INTO zoo VALUES(123, 'zebra');
+INSERT INTO zoo VALUES(123, 'lion');
+INSERT INTO zoo VALUES(124, 'lion');
diff --git a/contrib/btree_gist/sql/time.sql b/contrib/btree_gist/sql/time.sql
index 304e28add8..6104e7f61c 100644
--- a/contrib/btree_gist/sql/time.sql
+++ b/contrib/btree_gist/sql/time.sql
@@ -16,6 +16,8 @@ SELECT count(*) FROM timetmp WHERE a >= '10:57:11';
SELECT count(*) FROM timetmp WHERE a > '10:57:11';
+SELECT a, a <-> '10:57:11' FROM timetmp ORDER BY a <-> '10:57:11' LIMIT 3;
+
CREATE INDEX timeidx ON timetmp USING gist ( a );
SET enable_seqscan=off;
@@ -30,3 +32,6 @@ SELECT count(*) FROM timetmp WHERE a >= '10:57:11'::time;
SELECT count(*) FROM timetmp WHERE a > '10:57:11'::time;
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '10:57:11' FROM timetmp ORDER BY a <-> '10:57:11' LIMIT 3;
+SELECT a, a <-> '10:57:11' FROM timetmp ORDER BY a <-> '10:57:11' LIMIT 3;
diff --git a/contrib/btree_gist/sql/timestamp.sql b/contrib/btree_gist/sql/timestamp.sql
index 5b04e3e2d2..95effebfc4 100644
--- a/contrib/btree_gist/sql/timestamp.sql
+++ b/contrib/btree_gist/sql/timestamp.sql
@@ -16,6 +16,8 @@ SELECT count(*) FROM timestamptmp WHERE a >= '2004-10-26 08:55:08';
SELECT count(*) FROM timestamptmp WHERE a > '2004-10-26 08:55:08';
+SELECT a, a <-> '2004-10-26 08:55:08' FROM timestamptmp ORDER BY a <-> '2004-10-26 08:55:08' LIMIT 3;
+
CREATE INDEX timestampidx ON timestamptmp USING gist ( a );
SET enable_seqscan=off;
@@ -30,3 +32,6 @@ SELECT count(*) FROM timestamptmp WHERE a >= '2004-10-26 08:55:08'::timestamp;
SELECT count(*) FROM timestamptmp WHERE a > '2004-10-26 08:55:08'::timestamp;
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '2004-10-26 08:55:08' FROM timestamptmp ORDER BY a <-> '2004-10-26 08:55:08' LIMIT 3;
+SELECT a, a <-> '2004-10-26 08:55:08' FROM timestamptmp ORDER BY a <-> '2004-10-26 08:55:08' LIMIT 3;
diff --git a/contrib/btree_gist/sql/timestamptz.sql b/contrib/btree_gist/sql/timestamptz.sql
index 371233bc53..f70caa4a64 100644
--- a/contrib/btree_gist/sql/timestamptz.sql
+++ b/contrib/btree_gist/sql/timestamptz.sql
@@ -37,7 +37,7 @@ SELECT count(*) FROM timestamptztmp WHERE a >= '2018-12-18 10:59:54 GMT+4';
SELECT count(*) FROM timestamptztmp WHERE a > '2018-12-18 10:59:54 GMT+4';
-
+SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '2018-12-18 10:59:54 GMT+2' LIMIT 3;
CREATE INDEX timestamptzidx ON timestamptztmp USING gist ( a );
@@ -74,3 +74,7 @@ SELECT count(*) FROM timestamptztmp WHERE a = '2018-12-18 10:59:54 GMT+4'::time
SELECT count(*) FROM timestamptztmp WHERE a >= '2018-12-18 10:59:54 GMT+4'::timestamptz;
SELECT count(*) FROM timestamptztmp WHERE a > '2018-12-18 10:59:54 GMT+4'::timestamptz;
+
+EXPLAIN (COSTS OFF)
+SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '2018-12-18 10:59:54 GMT+2' LIMIT 3;
+SELECT a, a <-> '2018-12-18 10:59:54 GMT+2' FROM timestamptztmp ORDER BY a <-> '2018-12-18 10:59:54 GMT+2' LIMIT 3;
diff --git a/contrib/btree_gist/uninstall_btree_gist.sql b/contrib/btree_gist/uninstall_btree_gist.sql
deleted file mode 100644
index 9e71819e1a..0000000000
--- a/contrib/btree_gist/uninstall_btree_gist.sql
+++ /dev/null
@@ -1,280 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/btree_gist/uninstall_btree_gist.sql,v 1.5 2008/04/14 17:05:32 tgl Exp $ */
-
--- Adjust this setting to control where the objects get dropped.
-SET search_path = public;
-
-DROP OPERATOR CLASS gist_cidr_ops USING gist;
-
-DROP OPERATOR CLASS gist_inet_ops USING gist;
-
-DROP FUNCTION gbt_inet_same(internal, internal, internal);
-
-DROP FUNCTION gbt_inet_union(bytea, internal);
-
-DROP FUNCTION gbt_inet_picksplit(internal, internal);
-
-DROP FUNCTION gbt_inet_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_inet_compress(internal);
-
-DROP FUNCTION gbt_inet_consistent(internal,inet,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_vbit_ops USING gist;
-
-DROP OPERATOR CLASS gist_bit_ops USING gist;
-
-DROP FUNCTION gbt_bit_same(internal, internal, internal);
-
-DROP FUNCTION gbt_bit_union(bytea, internal);
-
-DROP FUNCTION gbt_bit_picksplit(internal, internal);
-
-DROP FUNCTION gbt_bit_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_bit_compress(internal);
-
-DROP FUNCTION gbt_bit_consistent(internal,bit,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_numeric_ops USING gist;
-
-DROP FUNCTION gbt_numeric_same(internal, internal, internal);
-
-DROP FUNCTION gbt_numeric_union(bytea, internal);
-
-DROP FUNCTION gbt_numeric_picksplit(internal, internal);
-
-DROP FUNCTION gbt_numeric_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_numeric_compress(internal);
-
-DROP FUNCTION gbt_numeric_consistent(internal,numeric,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_bytea_ops USING gist;
-
-DROP FUNCTION gbt_bytea_same(internal, internal, internal);
-
-DROP FUNCTION gbt_bytea_union(bytea, internal);
-
-DROP FUNCTION gbt_bytea_picksplit(internal, internal);
-
-DROP FUNCTION gbt_bytea_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_bytea_compress(internal);
-
-DROP FUNCTION gbt_bytea_consistent(internal,bytea,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_bpchar_ops USING gist;
-
-DROP OPERATOR CLASS gist_text_ops USING gist;
-
-DROP FUNCTION gbt_text_same(internal, internal, internal);
-
-DROP FUNCTION gbt_text_union(bytea, internal);
-
-DROP FUNCTION gbt_text_picksplit(internal, internal);
-
-DROP FUNCTION gbt_text_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_bpchar_compress(internal);
-
-DROP FUNCTION gbt_text_compress(internal);
-
-DROP FUNCTION gbt_bpchar_consistent(internal,bpchar,int2,oid,internal);
-
-DROP FUNCTION gbt_text_consistent(internal,text,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_macaddr_ops USING gist;
-
-DROP FUNCTION gbt_macad_same(internal, internal, internal);
-
-DROP FUNCTION gbt_macad_union(bytea, internal);
-
-DROP FUNCTION gbt_macad_picksplit(internal, internal);
-
-DROP FUNCTION gbt_macad_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_macad_compress(internal);
-
-DROP FUNCTION gbt_macad_consistent(internal,macaddr,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_cash_ops USING gist;
-
-DROP FUNCTION gbt_cash_same(internal, internal, internal);
-
-DROP FUNCTION gbt_cash_union(bytea, internal);
-
-DROP FUNCTION gbt_cash_picksplit(internal, internal);
-
-DROP FUNCTION gbt_cash_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_cash_compress(internal);
-
-DROP FUNCTION gbt_cash_consistent(internal,money,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_interval_ops USING gist;
-
-DROP FUNCTION gbt_intv_same(internal, internal, internal);
-
-DROP FUNCTION gbt_intv_union(bytea, internal);
-
-DROP FUNCTION gbt_intv_picksplit(internal, internal);
-
-DROP FUNCTION gbt_intv_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_intv_decompress(internal);
-
-DROP FUNCTION gbt_intv_compress(internal);
-
-DROP FUNCTION gbt_intv_consistent(internal,interval,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_date_ops USING gist;
-
-DROP FUNCTION gbt_date_same(internal, internal, internal);
-
-DROP FUNCTION gbt_date_union(bytea, internal);
-
-DROP FUNCTION gbt_date_picksplit(internal, internal);
-
-DROP FUNCTION gbt_date_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_date_compress(internal);
-
-DROP FUNCTION gbt_date_consistent(internal,date,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_timetz_ops USING gist;
-
-DROP OPERATOR CLASS gist_time_ops USING gist;
-
-DROP FUNCTION gbt_time_same(internal, internal, internal);
-
-DROP FUNCTION gbt_time_union(bytea, internal);
-
-DROP FUNCTION gbt_time_picksplit(internal, internal);
-
-DROP FUNCTION gbt_time_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_timetz_compress(internal);
-
-DROP FUNCTION gbt_time_compress(internal);
-
-DROP FUNCTION gbt_timetz_consistent(internal,timetz,int2,oid,internal);
-
-DROP FUNCTION gbt_time_consistent(internal,time,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_timestamptz_ops USING gist;
-
-DROP OPERATOR CLASS gist_timestamp_ops USING gist;
-
-DROP FUNCTION gbt_ts_same(internal, internal, internal);
-
-DROP FUNCTION gbt_ts_union(bytea, internal);
-
-DROP FUNCTION gbt_ts_picksplit(internal, internal);
-
-DROP FUNCTION gbt_ts_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_tstz_compress(internal);
-
-DROP FUNCTION gbt_ts_compress(internal);
-
-DROP FUNCTION gbt_tstz_consistent(internal,timestamptz,int2,oid,internal);
-
-DROP FUNCTION gbt_ts_consistent(internal,timestamp,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_float8_ops USING gist;
-
-DROP FUNCTION gbt_float8_same(internal, internal, internal);
-
-DROP FUNCTION gbt_float8_union(bytea, internal);
-
-DROP FUNCTION gbt_float8_picksplit(internal, internal);
-
-DROP FUNCTION gbt_float8_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_float8_compress(internal);
-
-DROP FUNCTION gbt_float8_consistent(internal,float8,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_float4_ops USING gist;
-
-DROP FUNCTION gbt_float4_same(internal, internal, internal);
-
-DROP FUNCTION gbt_float4_union(bytea, internal);
-
-DROP FUNCTION gbt_float4_picksplit(internal, internal);
-
-DROP FUNCTION gbt_float4_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_float4_compress(internal);
-
-DROP FUNCTION gbt_float4_consistent(internal,float4,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_int8_ops USING gist;
-
-DROP FUNCTION gbt_int8_same(internal, internal, internal);
-
-DROP FUNCTION gbt_int8_union(bytea, internal);
-
-DROP FUNCTION gbt_int8_picksplit(internal, internal);
-
-DROP FUNCTION gbt_int8_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_int8_compress(internal);
-
-DROP FUNCTION gbt_int8_consistent(internal,int8,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_int4_ops USING gist;
-
-DROP FUNCTION gbt_int4_same(internal, internal, internal);
-
-DROP FUNCTION gbt_int4_union(bytea, internal);
-
-DROP FUNCTION gbt_int4_picksplit(internal, internal);
-
-DROP FUNCTION gbt_int4_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_int4_compress(internal);
-
-DROP FUNCTION gbt_int4_consistent(internal,int4,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_int2_ops USING gist;
-
-DROP FUNCTION gbt_int2_same(internal, internal, internal);
-
-DROP FUNCTION gbt_int2_union(bytea, internal);
-
-DROP FUNCTION gbt_int2_picksplit(internal, internal);
-
-DROP FUNCTION gbt_int2_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_int2_compress(internal);
-
-DROP FUNCTION gbt_int2_consistent(internal,int2,int2,oid,internal);
-
-DROP OPERATOR CLASS gist_oid_ops USING gist;
-
-DROP FUNCTION gbt_oid_same(internal, internal, internal);
-
-DROP FUNCTION gbt_oid_union(bytea, internal);
-
-DROP FUNCTION gbt_oid_picksplit(internal, internal);
-
-DROP FUNCTION gbt_oid_penalty(internal,internal,internal);
-
-DROP FUNCTION gbt_var_decompress(internal);
-
-DROP FUNCTION gbt_decompress(internal);
-
-DROP FUNCTION gbt_oid_compress(internal);
-
-DROP FUNCTION gbt_oid_consistent(internal,oid,int2,oid,internal);
-
-DROP TYPE gbtreekey_var CASCADE;
-
-DROP TYPE gbtreekey32 CASCADE;
-
-DROP TYPE gbtreekey16 CASCADE;
-
-DROP TYPE gbtreekey8 CASCADE;
-
-DROP TYPE gbtreekey4 CASCADE;
diff --git a/contrib/chkpass/Makefile b/contrib/chkpass/Makefile
index f106b6dcfe..b775aef17d 100644
--- a/contrib/chkpass/Makefile
+++ b/contrib/chkpass/Makefile
@@ -1,10 +1,12 @@
-# $PostgreSQL: pgsql/contrib/chkpass/Makefile,v 1.10 2007/11/10 23:59:50 momjian Exp $
+# contrib/chkpass/Makefile
MODULE_big = chkpass
OBJS = chkpass.o
+
+EXTENSION = chkpass
+DATA = chkpass--1.0.sql chkpass--unpackaged--1.0.sql
+
SHLIB_LINK = $(filter -lcrypt, $(LIBS))
-DATA_built = chkpass.sql
-DATA = uninstall_chkpass.sql
ifdef USE_PGXS
PG_CONFIG = pg_config
diff --git a/contrib/chkpass/chkpass.sql.in b/contrib/chkpass/chkpass--1.0.sql
index 93dbade064..755fee3bc3 100644
--- a/contrib/chkpass/chkpass.sql.in
+++ b/contrib/chkpass/chkpass--1.0.sql
@@ -1,30 +1,26 @@
-/* $PostgreSQL: pgsql/contrib/chkpass/chkpass.sql.in,v 1.9 2007/11/13 04:24:27 momjian Exp $ */
-
--- Adjust this setting to control where the objects get created.
-SET search_path = public;
+/* contrib/chkpass/chkpass--1.0.sql */
--
-- Input and output functions and the type itself:
--
-CREATE OR REPLACE FUNCTION chkpass_in(cstring)
+CREATE FUNCTION chkpass_in(cstring)
RETURNS chkpass
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION chkpass_out(chkpass)
+CREATE FUNCTION chkpass_out(chkpass)
RETURNS cstring
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT;
CREATE TYPE chkpass (
internallength = 16,
- externallength = 13,
input = chkpass_in,
output = chkpass_out
);
-CREATE OR REPLACE FUNCTION raw(chkpass)
+CREATE FUNCTION raw(chkpass)
RETURNS text
AS 'MODULE_PATHNAME', 'chkpass_rout'
LANGUAGE C STRICT;
@@ -33,12 +29,12 @@ CREATE OR REPLACE FUNCTION raw(chkpass)
-- The various boolean tests:
--
-CREATE OR REPLACE FUNCTION eq(chkpass, text)
+CREATE FUNCTION eq(chkpass, text)
RETURNS bool
AS 'MODULE_PATHNAME', 'chkpass_eq'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION ne(chkpass, text)
+CREATE FUNCTION ne(chkpass, text)
RETURNS bool
AS 'MODULE_PATHNAME', 'chkpass_ne'
LANGUAGE C STRICT;
diff --git a/contrib/chkpass/chkpass--unpackaged--1.0.sql b/contrib/chkpass/chkpass--unpackaged--1.0.sql
new file mode 100644
index 0000000000..bf91950f3c
--- /dev/null
+++ b/contrib/chkpass/chkpass--unpackaged--1.0.sql
@@ -0,0 +1,10 @@
+/* contrib/chkpass/chkpass--unpackaged--1.0.sql */
+
+ALTER EXTENSION chkpass ADD type chkpass;
+ALTER EXTENSION chkpass ADD function chkpass_in(cstring);
+ALTER EXTENSION chkpass ADD function chkpass_out(chkpass);
+ALTER EXTENSION chkpass ADD function raw(chkpass);
+ALTER EXTENSION chkpass ADD function eq(chkpass,text);
+ALTER EXTENSION chkpass ADD function ne(chkpass,text);
+ALTER EXTENSION chkpass ADD operator <>(chkpass,text);
+ALTER EXTENSION chkpass ADD operator =(chkpass,text);
diff --git a/contrib/chkpass/chkpass.c b/contrib/chkpass/chkpass.c
index 56a998ec83..0c9fec0e67 100644
--- a/contrib/chkpass/chkpass.c
+++ b/contrib/chkpass/chkpass.c
@@ -4,7 +4,7 @@
* http://www.druid.net/darcy/
*
- * $PostgreSQL: pgsql/contrib/chkpass/chkpass.c,v 1.21 2009/06/11 14:48:50 momjian Exp $
+ * contrib/chkpass/chkpass.c
* best viewed with tabs set to 4
*/
diff --git a/contrib/chkpass/chkpass.control b/contrib/chkpass/chkpass.control
new file mode 100644
index 0000000000..bd4b3d3d0d
--- /dev/null
+++ b/contrib/chkpass/chkpass.control
@@ -0,0 +1,5 @@
+# chkpass extension
+comment = 'data type for auto-encrypted passwords'
+default_version = '1.0'
+module_pathname = '$libdir/chkpass'
+relocatable = true
diff --git a/contrib/chkpass/uninstall_chkpass.sql b/contrib/chkpass/uninstall_chkpass.sql
deleted file mode 100644
index 386fc95c5f..0000000000
--- a/contrib/chkpass/uninstall_chkpass.sql
+++ /dev/null
@@ -1,16 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/chkpass/uninstall_chkpass.sql,v 1.5 2007/11/13 04:24:27 momjian Exp $ */
-
--- Adjust this setting to control where the objects get dropped.
-SET search_path = public;
-
-DROP OPERATOR <>(chkpass, text);
-
-DROP OPERATOR =(chkpass, text);
-
-DROP FUNCTION ne(chkpass, text);
-
-DROP FUNCTION eq(chkpass, text);
-
-DROP FUNCTION raw(chkpass);
-
-DROP TYPE chkpass CASCADE;
diff --git a/contrib/citext/.gitignore b/contrib/citext/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/contrib/citext/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/contrib/citext/Makefile b/contrib/citext/Makefile
index d38e2762dd..65942528dd 100644
--- a/contrib/citext/Makefile
+++ b/contrib/citext/Makefile
@@ -1,8 +1,10 @@
-# $PostgreSQL: pgsql/contrib/citext/Makefile,v 1.1 2008/07/29 18:31:20 tgl Exp $
+# contrib/citext/Makefile
MODULES = citext
-DATA_built = citext.sql
-DATA = uninstall_citext.sql
+
+EXTENSION = citext
+DATA = citext--1.0.sql citext--unpackaged--1.0.sql
+
REGRESS = citext
ifdef USE_PGXS
diff --git a/contrib/citext/citext.sql.in b/contrib/citext/citext--1.0.sql
index bd781e6168..2760f7e08d 100644
--- a/contrib/citext/citext.sql.in
+++ b/contrib/citext/citext--1.0.sql
@@ -1,7 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/citext/citext.sql.in,v 1.3 2008/09/05 18:25:16 tgl Exp $ */
-
--- Adjust this setting to control where the objects get created.
-SET search_path = public;
+/* contrib/citext/citext--1.0.sql */
--
-- PostgreSQL code for CITEXT.
@@ -19,22 +16,22 @@ CREATE TYPE citext;
--
-- Input and output functions.
--
-CREATE OR REPLACE FUNCTION citextin(cstring)
+CREATE FUNCTION citextin(cstring)
RETURNS citext
AS 'textin'
LANGUAGE internal IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION citextout(citext)
+CREATE FUNCTION citextout(citext)
RETURNS cstring
AS 'textout'
LANGUAGE internal IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION citextrecv(internal)
+CREATE FUNCTION citextrecv(internal)
RETURNS citext
AS 'textrecv'
LANGUAGE internal STABLE STRICT;
-CREATE OR REPLACE FUNCTION citextsend(citext)
+CREATE FUNCTION citextsend(citext)
RETURNS bytea
AS 'textsend'
LANGUAGE internal STABLE STRICT;
@@ -52,7 +49,8 @@ CREATE TYPE citext (
STORAGE = extended,
-- make it a non-preferred member of string type category
CATEGORY = 'S',
- PREFERRED = false
+ PREFERRED = false,
+ COLLATABLE = true
);
--
@@ -60,17 +58,17 @@ CREATE TYPE citext (
-- automatically kick in.
--
-CREATE OR REPLACE FUNCTION citext(bpchar)
+CREATE FUNCTION citext(bpchar)
RETURNS citext
AS 'rtrim1'
LANGUAGE internal IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION citext(boolean)
+CREATE FUNCTION citext(boolean)
RETURNS citext
AS 'booltext'
LANGUAGE internal IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION citext(inet)
+CREATE FUNCTION citext(inet)
RETURNS citext
AS 'network_show'
LANGUAGE internal IMMUTABLE STRICT;
@@ -92,32 +90,32 @@ CREATE CAST (inet AS citext) WITH FUNCTION citext(inet) AS ASSIGNMENT;
-- Operator Functions.
--
-CREATE OR REPLACE FUNCTION citext_eq( citext, citext )
+CREATE FUNCTION citext_eq( citext, citext )
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION citext_ne( citext, citext )
+CREATE FUNCTION citext_ne( citext, citext )
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION citext_lt( citext, citext )
+CREATE FUNCTION citext_lt( citext, citext )
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION citext_le( citext, citext )
+CREATE FUNCTION citext_le( citext, citext )
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION citext_gt( citext, citext )
+CREATE FUNCTION citext_gt( citext, citext )
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION citext_ge( citext, citext )
+CREATE FUNCTION citext_ge( citext, citext )
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
@@ -192,12 +190,12 @@ CREATE OPERATOR > (
-- Support functions for indexing.
--
-CREATE OR REPLACE FUNCTION citext_cmp(citext, citext)
+CREATE FUNCTION citext_cmp(citext, citext)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION citext_hash(citext)
+CREATE FUNCTION citext_hash(citext)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -228,12 +226,12 @@ DEFAULT FOR TYPE citext USING hash AS
-- Aggregates.
--
-CREATE OR REPLACE FUNCTION citext_smaller(citext, citext)
+CREATE FUNCTION citext_smaller(citext, citext)
RETURNS citext
AS 'MODULE_PATHNAME'
LANGUAGE 'C' IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION citext_larger(citext, citext)
+CREATE FUNCTION citext_larger(citext, citext)
RETURNS citext
AS 'MODULE_PATHNAME'
LANGUAGE 'C' IMMUTABLE STRICT;
@@ -254,19 +252,19 @@ CREATE AGGREGATE max(citext) (
-- CITEXT pattern matching.
--
-CREATE OR REPLACE FUNCTION texticlike(citext, citext)
+CREATE FUNCTION texticlike(citext, citext)
RETURNS bool AS 'texticlike'
LANGUAGE internal IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION texticnlike(citext, citext)
+CREATE FUNCTION texticnlike(citext, citext)
RETURNS bool AS 'texticnlike'
LANGUAGE internal IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION texticregexeq(citext, citext)
+CREATE FUNCTION texticregexeq(citext, citext)
RETURNS bool AS 'texticregexeq'
LANGUAGE internal IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION texticregexne(citext, citext)
+CREATE FUNCTION texticregexne(citext, citext)
RETURNS bool AS 'texticregexne'
LANGUAGE internal IMMUTABLE STRICT;
@@ -343,22 +341,22 @@ CREATE OPERATOR !~~* (
);
--
--- Matching citext to text.
+-- Matching citext to text.
--
-CREATE OR REPLACE FUNCTION texticlike(citext, text)
+CREATE FUNCTION texticlike(citext, text)
RETURNS bool AS 'texticlike'
LANGUAGE internal IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION texticnlike(citext, text)
+CREATE FUNCTION texticnlike(citext, text)
RETURNS bool AS 'texticnlike'
LANGUAGE internal IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION texticregexeq(citext, text)
+CREATE FUNCTION texticregexeq(citext, text)
RETURNS bool AS 'texticregexeq'
LANGUAGE internal IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION texticregexne(citext, text)
+CREATE FUNCTION texticregexne(citext, text)
RETURNS bool AS 'texticregexne'
LANGUAGE internal IMMUTABLE STRICT;
@@ -439,50 +437,50 @@ CREATE OPERATOR !~~* (
-- XXX TODO Ideally these would be implemented in C.
--
-CREATE OR REPLACE FUNCTION regexp_matches( citext, citext ) RETURNS TEXT[] AS $$
+CREATE FUNCTION regexp_matches( citext, citext ) RETURNS TEXT[] AS $$
SELECT pg_catalog.regexp_matches( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
$$ LANGUAGE SQL IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION regexp_matches( citext, citext, text ) RETURNS TEXT[] AS $$
+CREATE FUNCTION regexp_matches( citext, citext, text ) RETURNS TEXT[] AS $$
SELECT pg_catalog.regexp_matches( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END );
$$ LANGUAGE SQL IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION regexp_replace( citext, citext, text ) returns TEXT AS $$
+CREATE FUNCTION regexp_replace( citext, citext, text ) returns TEXT AS $$
SELECT pg_catalog.regexp_replace( $1::pg_catalog.text, $2::pg_catalog.text, $3, 'i');
$$ LANGUAGE SQL IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION regexp_replace( citext, citext, text, text ) returns TEXT AS $$
+CREATE FUNCTION regexp_replace( citext, citext, text, text ) returns TEXT AS $$
SELECT pg_catalog.regexp_replace( $1::pg_catalog.text, $2::pg_catalog.text, $3, CASE WHEN pg_catalog.strpos($4, 'c') = 0 THEN $4 || 'i' ELSE $4 END);
$$ LANGUAGE SQL IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION regexp_split_to_array( citext, citext ) RETURNS TEXT[] AS $$
+CREATE FUNCTION regexp_split_to_array( citext, citext ) RETURNS TEXT[] AS $$
SELECT pg_catalog.regexp_split_to_array( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
$$ LANGUAGE SQL IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION regexp_split_to_array( citext, citext, text ) RETURNS TEXT[] AS $$
+CREATE FUNCTION regexp_split_to_array( citext, citext, text ) RETURNS TEXT[] AS $$
SELECT pg_catalog.regexp_split_to_array( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END );
$$ LANGUAGE SQL IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION regexp_split_to_table( citext, citext ) RETURNS SETOF TEXT AS $$
+CREATE FUNCTION regexp_split_to_table( citext, citext ) RETURNS SETOF TEXT AS $$
SELECT pg_catalog.regexp_split_to_table( $1::pg_catalog.text, $2::pg_catalog.text, 'i' );
$$ LANGUAGE SQL IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION regexp_split_to_table( citext, citext, text ) RETURNS SETOF TEXT AS $$
+CREATE FUNCTION regexp_split_to_table( citext, citext, text ) RETURNS SETOF TEXT AS $$
SELECT pg_catalog.regexp_split_to_table( $1::pg_catalog.text, $2::pg_catalog.text, CASE WHEN pg_catalog.strpos($3, 'c') = 0 THEN $3 || 'i' ELSE $3 END );
$$ LANGUAGE SQL IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION strpos( citext, citext ) RETURNS INT AS $$
+CREATE FUNCTION strpos( citext, citext ) RETURNS INT AS $$
SELECT pg_catalog.strpos( pg_catalog.lower( $1::pg_catalog.text ), pg_catalog.lower( $2::pg_catalog.text ) );
$$ LANGUAGE SQL IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION replace( citext, citext, citext ) RETURNS TEXT AS $$
+CREATE FUNCTION replace( citext, citext, citext ) RETURNS TEXT AS $$
SELECT pg_catalog.regexp_replace( $1::pg_catalog.text, pg_catalog.regexp_replace($2::pg_catalog.text, '([^a-zA-Z_0-9])', E'\\\\\\1', 'g'), $3::pg_catalog.text, 'gi' );
$$ LANGUAGE SQL IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION split_part( citext, citext, int ) RETURNS TEXT AS $$
+CREATE FUNCTION split_part( citext, citext, int ) RETURNS TEXT AS $$
SELECT (pg_catalog.regexp_split_to_array( $1::pg_catalog.text, pg_catalog.regexp_replace($2::pg_catalog.text, '([^a-zA-Z_0-9])', E'\\\\\\1', 'g'), 'i'))[$3];
$$ LANGUAGE SQL IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION translate( citext, citext, text ) RETURNS TEXT AS $$
+CREATE FUNCTION translate( citext, citext, text ) RETURNS TEXT AS $$
SELECT pg_catalog.translate( pg_catalog.translate( $1::pg_catalog.text, pg_catalog.lower($2::pg_catalog.text), $3), pg_catalog.upper($2::pg_catalog.text), $3);
$$ LANGUAGE SQL IMMUTABLE STRICT;
diff --git a/contrib/citext/citext--unpackaged--1.0.sql b/contrib/citext/citext--unpackaged--1.0.sql
new file mode 100644
index 0000000000..a59df36797
--- /dev/null
+++ b/contrib/citext/citext--unpackaged--1.0.sql
@@ -0,0 +1,88 @@
+/* contrib/citext/citext--unpackaged--1.0.sql */
+
+ALTER EXTENSION citext ADD type citext;
+ALTER EXTENSION citext ADD function citextin(cstring);
+ALTER EXTENSION citext ADD function citextout(citext);
+ALTER EXTENSION citext ADD function citextrecv(internal);
+ALTER EXTENSION citext ADD function citextsend(citext);
+ALTER EXTENSION citext ADD function citext(character);
+ALTER EXTENSION citext ADD function citext(boolean);
+ALTER EXTENSION citext ADD function citext(inet);
+ALTER EXTENSION citext ADD cast (citext as text);
+ALTER EXTENSION citext ADD cast (citext as character varying);
+ALTER EXTENSION citext ADD cast (citext as character);
+ALTER EXTENSION citext ADD cast (text as citext);
+ALTER EXTENSION citext ADD cast (character varying as citext);
+ALTER EXTENSION citext ADD cast (character as citext);
+ALTER EXTENSION citext ADD cast (boolean as citext);
+ALTER EXTENSION citext ADD cast (inet as citext);
+ALTER EXTENSION citext ADD function citext_eq(citext,citext);
+ALTER EXTENSION citext ADD function citext_ne(citext,citext);
+ALTER EXTENSION citext ADD function citext_lt(citext,citext);
+ALTER EXTENSION citext ADD function citext_le(citext,citext);
+ALTER EXTENSION citext ADD function citext_gt(citext,citext);
+ALTER EXTENSION citext ADD function citext_ge(citext,citext);
+ALTER EXTENSION citext ADD operator <>(citext,citext);
+ALTER EXTENSION citext ADD operator =(citext,citext);
+ALTER EXTENSION citext ADD operator >(citext,citext);
+ALTER EXTENSION citext ADD operator >=(citext,citext);
+ALTER EXTENSION citext ADD operator <(citext,citext);
+ALTER EXTENSION citext ADD operator <=(citext,citext);
+ALTER EXTENSION citext ADD function citext_cmp(citext,citext);
+ALTER EXTENSION citext ADD function citext_hash(citext);
+ALTER EXTENSION citext ADD operator family citext_ops using btree;
+ALTER EXTENSION citext ADD operator class citext_ops using btree;
+ALTER EXTENSION citext ADD operator family citext_ops using hash;
+ALTER EXTENSION citext ADD operator class citext_ops using hash;
+ALTER EXTENSION citext ADD function citext_smaller(citext,citext);
+ALTER EXTENSION citext ADD function citext_larger(citext,citext);
+ALTER EXTENSION citext ADD function min(citext);
+ALTER EXTENSION citext ADD function max(citext);
+ALTER EXTENSION citext ADD function texticlike(citext,citext);
+ALTER EXTENSION citext ADD function texticnlike(citext,citext);
+ALTER EXTENSION citext ADD function texticregexeq(citext,citext);
+ALTER EXTENSION citext ADD function texticregexne(citext,citext);
+ALTER EXTENSION citext ADD operator !~(citext,citext);
+ALTER EXTENSION citext ADD operator ~(citext,citext);
+ALTER EXTENSION citext ADD operator !~*(citext,citext);
+ALTER EXTENSION citext ADD operator ~*(citext,citext);
+ALTER EXTENSION citext ADD operator !~~(citext,citext);
+ALTER EXTENSION citext ADD operator ~~(citext,citext);
+ALTER EXTENSION citext ADD operator !~~*(citext,citext);
+ALTER EXTENSION citext ADD operator ~~*(citext,citext);
+ALTER EXTENSION citext ADD function texticlike(citext,text);
+ALTER EXTENSION citext ADD function texticnlike(citext,text);
+ALTER EXTENSION citext ADD function texticregexeq(citext,text);
+ALTER EXTENSION citext ADD function texticregexne(citext,text);
+ALTER EXTENSION citext ADD operator !~(citext,text);
+ALTER EXTENSION citext ADD operator ~(citext,text);
+ALTER EXTENSION citext ADD operator !~*(citext,text);
+ALTER EXTENSION citext ADD operator ~*(citext,text);
+ALTER EXTENSION citext ADD operator !~~(citext,text);
+ALTER EXTENSION citext ADD operator ~~(citext,text);
+ALTER EXTENSION citext ADD operator !~~*(citext,text);
+ALTER EXTENSION citext ADD operator ~~*(citext,text);
+ALTER EXTENSION citext ADD function regexp_matches(citext,citext);
+ALTER EXTENSION citext ADD function regexp_matches(citext,citext,text);
+ALTER EXTENSION citext ADD function regexp_replace(citext,citext,text);
+ALTER EXTENSION citext ADD function regexp_replace(citext,citext,text,text);
+ALTER EXTENSION citext ADD function regexp_split_to_array(citext,citext);
+ALTER EXTENSION citext ADD function regexp_split_to_array(citext,citext,text);
+ALTER EXTENSION citext ADD function regexp_split_to_table(citext,citext);
+ALTER EXTENSION citext ADD function regexp_split_to_table(citext,citext,text);
+ALTER EXTENSION citext ADD function strpos(citext,citext);
+ALTER EXTENSION citext ADD function replace(citext,citext,citext);
+ALTER EXTENSION citext ADD function split_part(citext,citext,integer);
+ALTER EXTENSION citext ADD function translate(citext,citext,text);
+
+--
+-- As of 9.1, type citext should be marked collatable. There is no ALTER TYPE
+-- command for this, so we have to do it by poking the pg_type entry directly.
+-- Notes: 100 is the OID of the "pg_catalog.default" collation --- it seems
+-- easier and more reliable to hard-wire that here than to pull it out of
+-- pg_collation. Also, we don't need a pg_depend entry since the default
+-- collation is pinned.
+--
+
+UPDATE pg_catalog.pg_type SET typcollation = 100
+WHERE oid = 'citext'::pg_catalog.regtype;
diff --git a/contrib/citext/citext.c b/contrib/citext/citext.c
index 371e70f74d..31b952b3f7 100644
--- a/contrib/citext/citext.c
+++ b/contrib/citext/citext.c
@@ -1,9 +1,10 @@
/*
- * $PostgreSQL: pgsql/contrib/citext/citext.c,v 1.2 2009/06/11 14:48:50 momjian Exp $
+ * contrib/citext/citext.c
*/
#include "postgres.h"
#include "access/hash.h"
+#include "catalog/pg_collation.h"
#include "fmgr.h"
#include "utils/builtins.h"
#include "utils/formatting.h"
@@ -18,7 +19,7 @@ PG_MODULE_MAGIC;
* ====================
*/
-static int32 citextcmp(text *left, text *right);
+static int32 citextcmp(text *left, text *right, Oid collid);
extern Datum citext_cmp(PG_FUNCTION_ARGS);
extern Datum citext_hash(PG_FUNCTION_ARGS);
extern Datum citext_eq(PG_FUNCTION_ARGS);
@@ -42,17 +43,26 @@ extern Datum citext_larger(PG_FUNCTION_ARGS);
* Returns int32 negative, zero, or positive.
*/
static int32
-citextcmp(text *left, text *right)
+citextcmp(text *left, text *right, Oid collid)
{
char *lcstr,
*rcstr;
int32 result;
- lcstr = str_tolower(VARDATA_ANY(left), VARSIZE_ANY_EXHDR(left));
- rcstr = str_tolower(VARDATA_ANY(right), VARSIZE_ANY_EXHDR(right));
+ /*
+ * We must do our str_tolower calls with DEFAULT_COLLATION_OID, not the
+ * input collation as you might expect. This is so that the behavior of
+ * citext's equality and hashing functions is not collation-dependent. We
+ * should change this once the core infrastructure is able to cope with
+ * collation-dependent equality and hashing functions.
+ */
+
+ lcstr = str_tolower(VARDATA_ANY(left), VARSIZE_ANY_EXHDR(left), DEFAULT_COLLATION_OID);
+ rcstr = str_tolower(VARDATA_ANY(right), VARSIZE_ANY_EXHDR(right), DEFAULT_COLLATION_OID);
result = varstr_cmp(lcstr, strlen(lcstr),
- rcstr, strlen(rcstr));
+ rcstr, strlen(rcstr),
+ collid);
pfree(lcstr);
pfree(rcstr);
@@ -75,7 +85,7 @@ citext_cmp(PG_FUNCTION_ARGS)
text *right = PG_GETARG_TEXT_PP(1);
int32 result;
- result = citextcmp(left, right);
+ result = citextcmp(left, right, PG_GET_COLLATION());
PG_FREE_IF_COPY(left, 0);
PG_FREE_IF_COPY(right, 1);
@@ -92,7 +102,7 @@ citext_hash(PG_FUNCTION_ARGS)
char *str;
Datum result;
- str = str_tolower(VARDATA_ANY(txt), VARSIZE_ANY_EXHDR(txt));
+ str = str_tolower(VARDATA_ANY(txt), VARSIZE_ANY_EXHDR(txt), DEFAULT_COLLATION_OID);
result = hash_any((unsigned char *) str, strlen(str));
pfree(str);
@@ -121,8 +131,8 @@ citext_eq(PG_FUNCTION_ARGS)
/* We can't compare lengths in advance of downcasing ... */
- lcstr = str_tolower(VARDATA_ANY(left), VARSIZE_ANY_EXHDR(left));
- rcstr = str_tolower(VARDATA_ANY(right), VARSIZE_ANY_EXHDR(right));
+ lcstr = str_tolower(VARDATA_ANY(left), VARSIZE_ANY_EXHDR(left), DEFAULT_COLLATION_OID);
+ rcstr = str_tolower(VARDATA_ANY(right), VARSIZE_ANY_EXHDR(right), DEFAULT_COLLATION_OID);
/*
* Since we only care about equality or not-equality, we can avoid all the
@@ -151,8 +161,8 @@ citext_ne(PG_FUNCTION_ARGS)
/* We can't compare lengths in advance of downcasing ... */
- lcstr = str_tolower(VARDATA_ANY(left), VARSIZE_ANY_EXHDR(left));
- rcstr = str_tolower(VARDATA_ANY(right), VARSIZE_ANY_EXHDR(right));
+ lcstr = str_tolower(VARDATA_ANY(left), VARSIZE_ANY_EXHDR(left), DEFAULT_COLLATION_OID);
+ rcstr = str_tolower(VARDATA_ANY(right), VARSIZE_ANY_EXHDR(right), DEFAULT_COLLATION_OID);
/*
* Since we only care about equality or not-equality, we can avoid all the
@@ -177,7 +187,7 @@ citext_lt(PG_FUNCTION_ARGS)
text *right = PG_GETARG_TEXT_PP(1);
bool result;
- result = citextcmp(left, right) < 0;
+ result = citextcmp(left, right, PG_GET_COLLATION()) < 0;
PG_FREE_IF_COPY(left, 0);
PG_FREE_IF_COPY(right, 1);
@@ -194,7 +204,7 @@ citext_le(PG_FUNCTION_ARGS)
text *right = PG_GETARG_TEXT_PP(1);
bool result;
- result = citextcmp(left, right) <= 0;
+ result = citextcmp(left, right, PG_GET_COLLATION()) <= 0;
PG_FREE_IF_COPY(left, 0);
PG_FREE_IF_COPY(right, 1);
@@ -211,7 +221,7 @@ citext_gt(PG_FUNCTION_ARGS)
text *right = PG_GETARG_TEXT_PP(1);
bool result;
- result = citextcmp(left, right) > 0;
+ result = citextcmp(left, right, PG_GET_COLLATION()) > 0;
PG_FREE_IF_COPY(left, 0);
PG_FREE_IF_COPY(right, 1);
@@ -228,7 +238,7 @@ citext_ge(PG_FUNCTION_ARGS)
text *right = PG_GETARG_TEXT_PP(1);
bool result;
- result = citextcmp(left, right) >= 0;
+ result = citextcmp(left, right, PG_GET_COLLATION()) >= 0;
PG_FREE_IF_COPY(left, 0);
PG_FREE_IF_COPY(right, 1);
@@ -251,7 +261,7 @@ citext_smaller(PG_FUNCTION_ARGS)
text *right = PG_GETARG_TEXT_PP(1);
text *result;
- result = citextcmp(left, right) < 0 ? left : right;
+ result = citextcmp(left, right, PG_GET_COLLATION()) < 0 ? left : right;
PG_RETURN_TEXT_P(result);
}
@@ -264,6 +274,6 @@ citext_larger(PG_FUNCTION_ARGS)
text *right = PG_GETARG_TEXT_PP(1);
text *result;
- result = citextcmp(left, right) > 0 ? left : right;
+ result = citextcmp(left, right, PG_GET_COLLATION()) > 0 ? left : right;
PG_RETURN_TEXT_P(result);
}
diff --git a/contrib/citext/citext.control b/contrib/citext/citext.control
new file mode 100644
index 0000000000..3eb01a3360
--- /dev/null
+++ b/contrib/citext/citext.control
@@ -0,0 +1,5 @@
+# citext extension
+comment = 'data type for case-insensitive character strings'
+default_version = '1.0'
+module_pathname = '$libdir/citext'
+relocatable = true
diff --git a/contrib/citext/expected/citext.out b/contrib/citext/expected/citext.out
index 21e73be2d7..5392a7d1f3 100644
--- a/contrib/citext/expected/citext.out
+++ b/contrib/citext/expected/citext.out
@@ -1,12 +1,7 @@
--
-- Test citext datatype
--
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of citext.sql.
---
-SET client_min_messages = warning;
-\set ECHO none
+CREATE EXTENSION citext;
-- Test the operators and indexing functions
-- Test = and <>.
SELECT 'a'::citext = 'a'::citext AS t;
@@ -1046,7 +1041,7 @@ CREATE TABLE caster (
bpchar bpchar,
char char,
chr "char",
- name name,
+ name name,
bytea bytea,
boolean boolean,
float4 float4,
@@ -1055,7 +1050,7 @@ CREATE TABLE caster (
int8 int8,
int4 int4,
int2 int2,
- cidr cidr,
+ cidr cidr,
inet inet,
macaddr macaddr,
money money,
diff --git a/contrib/citext/expected/citext_1.out b/contrib/citext/expected/citext_1.out
index 5fa537bc19..5316ad0cda 100644
--- a/contrib/citext/expected/citext_1.out
+++ b/contrib/citext/expected/citext_1.out
@@ -1,12 +1,7 @@
--
-- Test citext datatype
--
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of citext.sql.
---
-SET client_min_messages = warning;
-\set ECHO none
+CREATE EXTENSION citext;
-- Test the operators and indexing functions
-- Test = and <>.
SELECT 'a'::citext = 'a'::citext AS t;
@@ -1046,7 +1041,7 @@ CREATE TABLE caster (
bpchar bpchar,
char char,
chr "char",
- name name,
+ name name,
bytea bytea,
boolean boolean,
float4 float4,
@@ -1055,7 +1050,7 @@ CREATE TABLE caster (
int8 int8,
int4 int4,
int2 int2,
- cidr cidr,
+ cidr cidr,
inet inet,
macaddr macaddr,
money money,
diff --git a/contrib/citext/sql/citext.sql b/contrib/citext/sql/citext.sql
index 9014e5d931..07497401a4 100644
--- a/contrib/citext/sql/citext.sql
+++ b/contrib/citext/sql/citext.sql
@@ -2,15 +2,7 @@
-- Test citext datatype
--
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of citext.sql.
---
-SET client_min_messages = warning;
-\set ECHO none
-\i citext.sql
-RESET client_min_messages;
-\set ECHO all
+CREATE EXTENSION citext;
-- Test the operators and indexing functions
@@ -302,7 +294,7 @@ CREATE TABLE caster (
bpchar bpchar,
char char,
chr "char",
- name name,
+ name name,
bytea bytea,
boolean boolean,
float4 float4,
@@ -311,7 +303,7 @@ CREATE TABLE caster (
int8 int8,
int4 int4,
int2 int2,
- cidr cidr,
+ cidr cidr,
inet inet,
macaddr macaddr,
money money,
diff --git a/contrib/citext/uninstall_citext.sql b/contrib/citext/uninstall_citext.sql
deleted file mode 100644
index 2d1ecbed09..0000000000
--- a/contrib/citext/uninstall_citext.sql
+++ /dev/null
@@ -1,80 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/citext/uninstall_citext.sql,v 1.3 2008/09/05 18:25:16 tgl Exp $ */
-
--- Adjust this setting to control where the objects get dropped.
-SET search_path = public;
-
-DROP OPERATOR CLASS citext_ops USING btree CASCADE;
-DROP OPERATOR CLASS citext_ops USING hash CASCADE;
-
-DROP AGGREGATE min(citext);
-DROP AGGREGATE max(citext);
-
-DROP OPERATOR = (citext, citext);
-DROP OPERATOR <> (citext, citext);
-DROP OPERATOR < (citext, citext);
-DROP OPERATOR <= (citext, citext);
-DROP OPERATOR >= (citext, citext);
-DROP OPERATOR > (citext, citext);
-
-DROP OPERATOR ~ (citext, citext);
-DROP OPERATOR ~* (citext, citext);
-DROP OPERATOR !~ (citext, citext);
-DROP OPERATOR !~* (citext, citext);
-DROP OPERATOR ~~ (citext, citext);
-DROP OPERATOR ~~* (citext, citext);
-DROP OPERATOR !~~ (citext, citext);
-DROP OPERATOR !~~* (citext, citext);
-
-DROP OPERATOR ~ (citext, text);
-DROP OPERATOR ~* (citext, text);
-DROP OPERATOR !~ (citext, text);
-DROP OPERATOR !~* (citext, text);
-DROP OPERATOR ~~ (citext, text);
-DROP OPERATOR ~~* (citext, text);
-DROP OPERATOR !~~ (citext, text);
-DROP OPERATOR !~~* (citext, text);
-
-DROP CAST (citext AS text);
-DROP CAST (citext AS varchar);
-DROP CAST (citext AS bpchar);
-DROP CAST (text AS citext);
-DROP CAST (varchar AS citext);
-DROP CAST (bpchar AS citext);
-DROP CAST (boolean AS citext);
-DROP CAST (inet AS citext);
-
-DROP FUNCTION citext(bpchar);
-DROP FUNCTION citext(boolean);
-DROP FUNCTION citext(inet);
-DROP FUNCTION citext_eq(citext, citext);
-DROP FUNCTION citext_ne(citext, citext);
-DROP FUNCTION citext_lt(citext, citext);
-DROP FUNCTION citext_le(citext, citext);
-DROP FUNCTION citext_gt(citext, citext);
-DROP FUNCTION citext_ge(citext, citext);
-DROP FUNCTION citext_cmp(citext, citext);
-DROP FUNCTION citext_hash(citext);
-DROP FUNCTION citext_smaller(citext, citext);
-DROP FUNCTION citext_larger(citext, citext);
-DROP FUNCTION texticlike(citext, citext);
-DROP FUNCTION texticnlike(citext, citext);
-DROP FUNCTION texticregexeq(citext, citext);
-DROP FUNCTION texticregexne(citext, citext);
-DROP FUNCTION texticlike(citext, text);
-DROP FUNCTION texticnlike(citext, text);
-DROP FUNCTION texticregexeq(citext, text);
-DROP FUNCTION texticregexne(citext, text);
-DROP FUNCTION regexp_matches( citext, citext );
-DROP FUNCTION regexp_matches( citext, citext, text );
-DROP FUNCTION regexp_replace( citext, citext, text );
-DROP FUNCTION regexp_replace( citext, citext, text, text );
-DROP FUNCTION regexp_split_to_array( citext, citext );
-DROP FUNCTION regexp_split_to_array( citext, citext, text );
-DROP FUNCTION regexp_split_to_table( citext, citext );
-DROP FUNCTION regexp_split_to_table( citext, citext, text );
-DROP FUNCTION strpos( citext, citext );
-DROP FUNCTION replace( citext, citext, citext );
-DROP FUNCTION split_part( citext, citext, int );
-DROP FUNCTION translate( citext, citext, text );
-
-DROP TYPE citext CASCADE;
diff --git a/contrib/contrib-global.mk b/contrib/contrib-global.mk
index 13c76b82b6..6ac8e9b13d 100644
--- a/contrib/contrib-global.mk
+++ b/contrib/contrib-global.mk
@@ -1,4 +1,4 @@
-# $PostgreSQL: pgsql/contrib/contrib-global.mk,v 1.10 2005/09/27 17:43:31 tgl Exp $
+# contrib/contrib-global.mk
NO_PGXS = 1
include $(top_srcdir)/src/makefiles/pgxs.mk
diff --git a/contrib/cube/.cvsignore b/contrib/cube/.cvsignore
deleted file mode 100644
index 19ecc85b58..0000000000
--- a/contrib/cube/.cvsignore
+++ /dev/null
@@ -1,2 +0,0 @@
-cubeparse.c
-cubescan.c
diff --git a/contrib/cube/.gitignore b/contrib/cube/.gitignore
new file mode 100644
index 0000000000..cb4c989fff
--- /dev/null
+++ b/contrib/cube/.gitignore
@@ -0,0 +1,6 @@
+/cubeparse.c
+/cubescan.c
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/contrib/cube/CHANGES b/contrib/cube/CHANGES
index d3eca90f6d..7c5590c16f 100644
--- a/contrib/cube/CHANGES
+++ b/contrib/cube/CHANGES
@@ -6,10 +6,10 @@ Code Cleanup:
Update the calling convention for all external facing functions. By external
facing, I mean all functions that are directly referenced in cube.sql. Prior
-to my update, all functions used the older V0 calling convention. They now
+to my update, all functions used the older V0 calling convention. They now
use V1.
-New Functions:
+New Functions:
cube(float[]), which makes a zero volume cube from a float array
diff --git a/contrib/cube/Makefile b/contrib/cube/Makefile
index 2f3da437e5..19fd7dc658 100644
--- a/contrib/cube/Makefile
+++ b/contrib/cube/Makefile
@@ -1,10 +1,11 @@
-# $PostgreSQL: pgsql/contrib/cube/Makefile,v 1.23 2009/08/28 20:26:18 petere Exp $
+# contrib/cube/Makefile
MODULE_big = cube
OBJS= cube.o cubeparse.o
-DATA_built = cube.sql
-DATA = uninstall_cube.sql
+EXTENSION = cube
+DATA = cube--1.0.sql cube--unpackaged--1.0.sql
+
REGRESS = cube
EXTRA_CLEAN = y.tab.c y.tab.h
diff --git a/contrib/cube/cube.sql.in b/contrib/cube/cube--1.0.sql
index 41f493ed41..ee9febe005 100644
--- a/contrib/cube/cube.sql.in
+++ b/contrib/cube/cube--1.0.sql
@@ -1,25 +1,21 @@
-/* $PostgreSQL: pgsql/contrib/cube/cube.sql.in,v 1.25 2009/06/11 18:30:03 tgl Exp $ */
-
--- Adjust this setting to control where the objects get created.
-SET search_path = public;
+/* contrib/cube/cube--1.0.sql */
-- Create the user-defined type for N-dimensional boxes
---
-CREATE OR REPLACE FUNCTION cube_in(cstring)
+CREATE FUNCTION cube_in(cstring)
RETURNS cube
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION cube(float8[], float8[]) RETURNS cube
+CREATE FUNCTION cube(float8[], float8[]) RETURNS cube
AS 'MODULE_PATHNAME', 'cube_a_f8_f8'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION cube(float8[]) RETURNS cube
+CREATE FUNCTION cube(float8[]) RETURNS cube
AS 'MODULE_PATHNAME', 'cube_a_f8'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION cube_out(cube)
+CREATE FUNCTION cube_out(cube)
RETURNS cstring
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
@@ -39,70 +35,70 @@ COMMENT ON TYPE cube IS 'multi-dimensional cube ''(FLOAT-1, FLOAT-2, ..., FLOAT-
-- Comparison methods
-CREATE OR REPLACE FUNCTION cube_eq(cube, cube)
+CREATE FUNCTION cube_eq(cube, cube)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
COMMENT ON FUNCTION cube_eq(cube, cube) IS 'same as';
-CREATE OR REPLACE FUNCTION cube_ne(cube, cube)
+CREATE FUNCTION cube_ne(cube, cube)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
COMMENT ON FUNCTION cube_ne(cube, cube) IS 'different';
-CREATE OR REPLACE FUNCTION cube_lt(cube, cube)
+CREATE FUNCTION cube_lt(cube, cube)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
COMMENT ON FUNCTION cube_lt(cube, cube) IS 'lower than';
-CREATE OR REPLACE FUNCTION cube_gt(cube, cube)
+CREATE FUNCTION cube_gt(cube, cube)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
COMMENT ON FUNCTION cube_gt(cube, cube) IS 'greater than';
-CREATE OR REPLACE FUNCTION cube_le(cube, cube)
+CREATE FUNCTION cube_le(cube, cube)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
COMMENT ON FUNCTION cube_le(cube, cube) IS 'lower than or equal to';
-CREATE OR REPLACE FUNCTION cube_ge(cube, cube)
+CREATE FUNCTION cube_ge(cube, cube)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
COMMENT ON FUNCTION cube_ge(cube, cube) IS 'greater than or equal to';
-CREATE OR REPLACE FUNCTION cube_cmp(cube, cube)
+CREATE FUNCTION cube_cmp(cube, cube)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
COMMENT ON FUNCTION cube_cmp(cube, cube) IS 'btree comparison function';
-CREATE OR REPLACE FUNCTION cube_contains(cube, cube)
+CREATE FUNCTION cube_contains(cube, cube)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
COMMENT ON FUNCTION cube_contains(cube, cube) IS 'contains';
-CREATE OR REPLACE FUNCTION cube_contained(cube, cube)
+CREATE FUNCTION cube_contained(cube, cube)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
COMMENT ON FUNCTION cube_contained(cube, cube) IS 'contained in';
-CREATE OR REPLACE FUNCTION cube_overlap(cube, cube)
+CREATE FUNCTION cube_overlap(cube, cube)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
@@ -111,17 +107,17 @@ COMMENT ON FUNCTION cube_overlap(cube, cube) IS 'overlaps';
-- support routines for indexing
-CREATE OR REPLACE FUNCTION cube_union(cube, cube)
+CREATE FUNCTION cube_union(cube, cube)
RETURNS cube
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION cube_inter(cube, cube)
+CREATE FUNCTION cube_inter(cube, cube)
RETURNS cube
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION cube_size(cube)
+CREATE FUNCTION cube_size(cube)
RETURNS float8
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
@@ -129,61 +125,61 @@ LANGUAGE C IMMUTABLE STRICT;
-- Misc N-dimensional functions
-CREATE OR REPLACE FUNCTION cube_subset(cube, int4[])
+CREATE FUNCTION cube_subset(cube, int4[])
RETURNS cube
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- proximity routines
-CREATE OR REPLACE FUNCTION cube_distance(cube, cube)
+CREATE FUNCTION cube_distance(cube, cube)
RETURNS float8
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Extracting elements functions
-CREATE OR REPLACE FUNCTION cube_dim(cube)
+CREATE FUNCTION cube_dim(cube)
RETURNS int4
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION cube_ll_coord(cube, int4)
+CREATE FUNCTION cube_ll_coord(cube, int4)
RETURNS float8
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION cube_ur_coord(cube, int4)
+CREATE FUNCTION cube_ur_coord(cube, int4)
RETURNS float8
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION cube(float8) RETURNS cube
+CREATE FUNCTION cube(float8) RETURNS cube
AS 'MODULE_PATHNAME', 'cube_f8'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION cube(float8, float8) RETURNS cube
+CREATE FUNCTION cube(float8, float8) RETURNS cube
AS 'MODULE_PATHNAME', 'cube_f8_f8'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION cube(cube, float8) RETURNS cube
+CREATE FUNCTION cube(cube, float8) RETURNS cube
AS 'MODULE_PATHNAME', 'cube_c_f8'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION cube(cube, float8, float8) RETURNS cube
+CREATE FUNCTION cube(cube, float8, float8) RETURNS cube
AS 'MODULE_PATHNAME', 'cube_c_f8_f8'
LANGUAGE C IMMUTABLE STRICT;
-- Test if cube is also a point
-CREATE OR REPLACE FUNCTION cube_is_point(cube)
+CREATE FUNCTION cube_is_point(cube)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-- Increasing the size of a cube by a radius in at least n dimensions
-CREATE OR REPLACE FUNCTION cube_enlarge(cube, float8, int4)
+CREATE FUNCTION cube_enlarge(cube, float8, int4)
RETURNS cube
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
@@ -262,38 +258,38 @@ CREATE OPERATOR ~ (
-- define the GiST support methods
-CREATE OR REPLACE FUNCTION g_cube_consistent(internal,cube,int,oid,internal)
+CREATE FUNCTION g_cube_consistent(internal,cube,int,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION g_cube_compress(internal)
-RETURNS internal
+CREATE FUNCTION g_cube_compress(internal)
+RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION g_cube_decompress(internal)
-RETURNS internal
+CREATE FUNCTION g_cube_decompress(internal)
+RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION g_cube_penalty(internal,internal,internal)
+CREATE FUNCTION g_cube_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION g_cube_picksplit(internal, internal)
+CREATE FUNCTION g_cube_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION g_cube_union(internal, internal)
-RETURNS cube
+CREATE FUNCTION g_cube_union(internal, internal)
+RETURNS cube
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION g_cube_same(cube, cube, internal)
-RETURNS internal
+CREATE FUNCTION g_cube_same(cube, cube, internal)
+RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
diff --git a/contrib/cube/cube--unpackaged--1.0.sql b/contrib/cube/cube--unpackaged--1.0.sql
new file mode 100644
index 0000000000..866c18a289
--- /dev/null
+++ b/contrib/cube/cube--unpackaged--1.0.sql
@@ -0,0 +1,53 @@
+/* contrib/cube/cube--unpackaged--1.0.sql */
+
+ALTER EXTENSION cube ADD type cube;
+ALTER EXTENSION cube ADD function cube_in(cstring);
+ALTER EXTENSION cube ADD function cube(double precision[],double precision[]);
+ALTER EXTENSION cube ADD function cube(double precision[]);
+ALTER EXTENSION cube ADD function cube_out(cube);
+ALTER EXTENSION cube ADD function cube_eq(cube,cube);
+ALTER EXTENSION cube ADD function cube_ne(cube,cube);
+ALTER EXTENSION cube ADD function cube_lt(cube,cube);
+ALTER EXTENSION cube ADD function cube_gt(cube,cube);
+ALTER EXTENSION cube ADD function cube_le(cube,cube);
+ALTER EXTENSION cube ADD function cube_ge(cube,cube);
+ALTER EXTENSION cube ADD function cube_cmp(cube,cube);
+ALTER EXTENSION cube ADD function cube_contains(cube,cube);
+ALTER EXTENSION cube ADD function cube_contained(cube,cube);
+ALTER EXTENSION cube ADD function cube_overlap(cube,cube);
+ALTER EXTENSION cube ADD function cube_union(cube,cube);
+ALTER EXTENSION cube ADD function cube_inter(cube,cube);
+ALTER EXTENSION cube ADD function cube_size(cube);
+ALTER EXTENSION cube ADD function cube_subset(cube,integer[]);
+ALTER EXTENSION cube ADD function cube_distance(cube,cube);
+ALTER EXTENSION cube ADD function cube_dim(cube);
+ALTER EXTENSION cube ADD function cube_ll_coord(cube,integer);
+ALTER EXTENSION cube ADD function cube_ur_coord(cube,integer);
+ALTER EXTENSION cube ADD function cube(double precision);
+ALTER EXTENSION cube ADD function cube(double precision,double precision);
+ALTER EXTENSION cube ADD function cube(cube,double precision);
+ALTER EXTENSION cube ADD function cube(cube,double precision,double precision);
+ALTER EXTENSION cube ADD function cube_is_point(cube);
+ALTER EXTENSION cube ADD function cube_enlarge(cube,double precision,integer);
+ALTER EXTENSION cube ADD operator >(cube,cube);
+ALTER EXTENSION cube ADD operator >=(cube,cube);
+ALTER EXTENSION cube ADD operator <(cube,cube);
+ALTER EXTENSION cube ADD operator <=(cube,cube);
+ALTER EXTENSION cube ADD operator &&(cube,cube);
+ALTER EXTENSION cube ADD operator <>(cube,cube);
+ALTER EXTENSION cube ADD operator =(cube,cube);
+ALTER EXTENSION cube ADD operator <@(cube,cube);
+ALTER EXTENSION cube ADD operator @>(cube,cube);
+ALTER EXTENSION cube ADD operator ~(cube,cube);
+ALTER EXTENSION cube ADD operator @(cube,cube);
+ALTER EXTENSION cube ADD function g_cube_consistent(internal,cube,integer,oid,internal);
+ALTER EXTENSION cube ADD function g_cube_compress(internal);
+ALTER EXTENSION cube ADD function g_cube_decompress(internal);
+ALTER EXTENSION cube ADD function g_cube_penalty(internal,internal,internal);
+ALTER EXTENSION cube ADD function g_cube_picksplit(internal,internal);
+ALTER EXTENSION cube ADD function g_cube_union(internal,internal);
+ALTER EXTENSION cube ADD function g_cube_same(cube,cube,internal);
+ALTER EXTENSION cube ADD operator family cube_ops using btree;
+ALTER EXTENSION cube ADD operator class cube_ops using btree;
+ALTER EXTENSION cube ADD operator family gist_cube_ops using gist;
+ALTER EXTENSION cube ADD operator class gist_cube_ops using gist;
diff --git a/contrib/cube/cube.c b/contrib/cube/cube.c
index 62cd3a2d02..4a207ccb98 100644
--- a/contrib/cube/cube.c
+++ b/contrib/cube/cube.c
@@ -1,5 +1,5 @@
/******************************************************************************
- $PostgreSQL: pgsql/contrib/cube/cube.c,v 1.37 2009/06/11 14:48:50 momjian Exp $
+ contrib/cube/cube.c
This file contains routines that can be bound to a Postgres backend and
called by the backend in the process of processing queries. The calling
@@ -187,7 +187,7 @@ cube_a_f8_f8(PG_FUNCTION_ARGS)
double *dur,
*dll;
- if (ARR_HASNULL(ur) || ARR_HASNULL(ll))
+ if (array_contains_nulls(ur) || array_contains_nulls(ll))
ereport(ERROR,
(errcode(ERRCODE_ARRAY_ELEMENT_ERROR),
errmsg("cannot work with arrays containing NULLs")));
@@ -228,7 +228,7 @@ cube_a_f8(PG_FUNCTION_ARGS)
int size;
double *dur;
- if (ARR_HASNULL(ur))
+ if (array_contains_nulls(ur))
ereport(ERROR,
(errcode(ERRCODE_ARRAY_ELEMENT_ERROR),
errmsg("cannot work with arrays containing NULLs")));
@@ -262,7 +262,7 @@ cube_subset(PG_FUNCTION_ARGS)
i;
int *dx;
- if (ARR_HASNULL(idx))
+ if (array_contains_nulls(idx))
ereport(ERROR,
(errcode(ERRCODE_ARRAY_ELEMENT_ERROR),
errmsg("cannot work with arrays containing NULLs")));
@@ -615,7 +615,7 @@ g_cube_picksplit(PG_FUNCTION_ARGS)
else
{
datum_r = union_dr;
- size_r = size_alpha;
+ size_r = size_beta;
*right++ = i;
v->spl_nright++;
}
diff --git a/contrib/cube/cube.control b/contrib/cube/cube.control
new file mode 100644
index 0000000000..ddc8d2e5d1
--- /dev/null
+++ b/contrib/cube/cube.control
@@ -0,0 +1,5 @@
+# cube extension
+comment = 'data type for multidimensional cubes'
+default_version = '1.0'
+module_pathname = '$libdir/cube'
+relocatable = true
diff --git a/contrib/cube/cubedata.h b/contrib/cube/cubedata.h
index 1100602cfc..fd0c26a381 100644
--- a/contrib/cube/cubedata.h
+++ b/contrib/cube/cubedata.h
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/cube/cubedata.h,v 1.10 2009/06/11 14:48:50 momjian Exp $ */
+/* contrib/cube/cubedata.h */
#define CUBE_MAX_DIM (100)
diff --git a/contrib/cube/cubeparse.y b/contrib/cube/cubeparse.y
index 13dc4f55b0..9e7c87e903 100644
--- a/contrib/cube/cubeparse.y
+++ b/contrib/cube/cubeparse.y
@@ -2,7 +2,7 @@
/* NdBox = [(lowerleft),(upperright)] */
/* [(xLL(1)...xLL(N)),(xUR(1)...xUR(n))] */
-/* $PostgreSQL: pgsql/contrib/cube/cubeparse.y,v 1.19 2008/11/26 08:45:11 petere Exp $ */
+/* contrib/cube/cubeparse.y */
#define YYPARSE_PARAM result /* need this to pass a pointer (void *) to yyparse */
#define YYSTYPE char *
@@ -51,7 +51,7 @@ box:
O_BRACKET paren_list COMMA paren_list C_BRACKET {
int dim;
-
+
dim = delim_count($2, ',') + 1;
if ( (delim_count($4, ',') + 1) != dim ) {
ereport(ERROR,
@@ -69,16 +69,16 @@ box:
CUBE_MAX_DIM)));
YYABORT;
}
-
+
*((void **)result) = write_box( dim, $2, $4 );
-
+
}
|
paren_list COMMA paren_list {
int dim;
dim = delim_count($1, ',') + 1;
-
+
if ( (delim_count($3, ',') + 1) != dim ) {
ereport(ERROR,
(errcode(ERRCODE_SYNTAX_ERROR),
@@ -95,7 +95,7 @@ box:
CUBE_MAX_DIM)));
YYABORT;
}
-
+
*((void **)result) = write_box( dim, $1, $3 );
}
|
@@ -146,7 +146,7 @@ list:
$$ = palloc(scanbuflen + 1);
strcpy($$, $1);
}
- |
+ |
list COMMA CUBEFLOAT {
$$ = $1;
strcat($$, ",");
@@ -169,31 +169,31 @@ delim_count(char *s, char delim)
return (ndelim);
}
-static NDBOX *
+static NDBOX *
write_box(unsigned int dim, char *str1, char *str2)
{
NDBOX * bp;
char * s;
- int i;
+ int i;
int size = offsetof(NDBOX, x[0]) + sizeof(double) * dim * 2;
-
+
bp = palloc0(size);
SET_VARSIZE(bp, size);
bp->dim = dim;
-
+
s = str1;
bp->x[i=0] = strtod(s, NULL);
while ((s = strchr(s, ',')) != NULL) {
s++; i++;
bp->x[i] = strtod(s, NULL);
- }
-
+ }
+
s = str2;
bp->x[i=dim] = strtod(s, NULL);
while ((s = strchr(s, ',')) != NULL) {
s++; i++;
bp->x[i] = strtod(s, NULL);
- }
+ }
return(bp);
}
@@ -206,13 +206,13 @@ write_point_as_box(char *str, int dim)
int i, size;
double x;
char * s = str;
-
+
size = offsetof(NDBOX, x[0]) + sizeof(double) * dim * 2;
bp = palloc0(size);
SET_VARSIZE(bp, size);
bp->dim = dim;
-
+
i = 0;
x = strtod(s, NULL);
bp->x[0] = x;
@@ -222,7 +222,7 @@ write_point_as_box(char *str, int dim)
x = strtod(s, NULL);
bp->x[i] = x;
bp->x[i+dim] = x;
- }
+ }
return(bp);
}
diff --git a/contrib/cube/cubescan.l b/contrib/cube/cubescan.l
index f373d353f2..eb71b11adf 100644
--- a/contrib/cube/cubescan.l
+++ b/contrib/cube/cubescan.l
@@ -1,8 +1,8 @@
%{
-/*
-** A scanner for EMP-style numeric ranges
- * $PostgreSQL: pgsql/contrib/cube/cubescan.l,v 1.12 2008/08/25 23:12:45 tgl Exp $
-*/
+/*
+ * A scanner for EMP-style numeric ranges
+ * contrib/cube/cubescan.l
+ */
#include "postgres.h"
diff --git a/contrib/cube/expected/cube.out b/contrib/cube/expected/cube.out
index 101a63b723..05cf3eae3c 100644
--- a/contrib/cube/expected/cube.out
+++ b/contrib/cube/expected/cube.out
@@ -1,13 +1,7 @@
--
-- Test cube datatype
--
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of cube.sql.
---
-SET client_min_messages = warning;
-\set ECHO none
-RESET client_min_messages;
+CREATE EXTENSION cube;
--
-- testing the input and output functions
--
@@ -473,13 +467,13 @@ SELECT cube('{0,1,2}'::float[]);
(0, 1, 2)
(1 row)
-SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[3,2,1,1]);
+SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[3,2,1,1]);
cube_subset
---------------------------
(5, 3, 1, 1),(8, 7, 6, 6)
(1 row)
-SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[4,0]);
+SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[4,0]);
ERROR: Index out of bounds
--
-- Testing limit of CUBE_MAX_DIM dimensions check in cube_in.
@@ -1107,11 +1101,11 @@ SELECT cube_enlarge('(2,-2),(-3,7)'::cube, -3, 2);
(1 row)
-- Load some example data and build the index
---
+--
CREATE TABLE test_cube (c cube);
\copy test_cube from 'data/test_cube.data'
CREATE INDEX test_cube_ix ON test_cube USING gist (c);
-SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' ORDER BY c;
+SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' ORDER BY c;
c
--------------------------
(337, 455),(240, 359)
@@ -1121,8 +1115,8 @@ SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' ORDER BY c;
(2424, 160),(2424, 81)
(5 rows)
--- Test sorting
-SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' GROUP BY c ORDER BY c;
+-- Test sorting
+SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' GROUP BY c ORDER BY c;
c
--------------------------
(337, 455),(240, 359)
diff --git a/contrib/cube/expected/cube_1.out b/contrib/cube/expected/cube_1.out
index 55f6861daf..fefebf5fb9 100644
--- a/contrib/cube/expected/cube_1.out
+++ b/contrib/cube/expected/cube_1.out
@@ -1,13 +1,7 @@
--
-- Test cube datatype
--
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of cube.sql.
---
-SET client_min_messages = warning;
-\set ECHO none
-RESET client_min_messages;
+CREATE EXTENSION cube;
--
-- testing the input and output functions
--
@@ -473,13 +467,13 @@ SELECT cube('{0,1,2}'::float[]);
(0, 1, 2)
(1 row)
-SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[3,2,1,1]);
+SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[3,2,1,1]);
cube_subset
---------------------------
(5, 3, 1, 1),(8, 7, 6, 6)
(1 row)
-SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[4,0]);
+SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[4,0]);
ERROR: Index out of bounds
--
-- Testing limit of CUBE_MAX_DIM dimensions check in cube_in.
@@ -1107,11 +1101,11 @@ SELECT cube_enlarge('(2,-2),(-3,7)'::cube, -3, 2);
(1 row)
-- Load some example data and build the index
---
+--
CREATE TABLE test_cube (c cube);
\copy test_cube from 'data/test_cube.data'
CREATE INDEX test_cube_ix ON test_cube USING gist (c);
-SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' ORDER BY c;
+SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' ORDER BY c;
c
--------------------------
(337, 455),(240, 359)
@@ -1121,8 +1115,8 @@ SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' ORDER BY c;
(2424, 160),(2424, 81)
(5 rows)
--- Test sorting
-SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' GROUP BY c ORDER BY c;
+-- Test sorting
+SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' GROUP BY c ORDER BY c;
c
--------------------------
(337, 455),(240, 359)
diff --git a/contrib/cube/expected/cube_2.out b/contrib/cube/expected/cube_2.out
index c449395818..6d15d63570 100644
--- a/contrib/cube/expected/cube_2.out
+++ b/contrib/cube/expected/cube_2.out
@@ -1,13 +1,7 @@
--
-- Test cube datatype
--
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of cube.sql.
---
-SET client_min_messages = warning;
-\set ECHO none
-RESET client_min_messages;
+CREATE EXTENSION cube;
--
-- testing the input and output functions
--
@@ -473,13 +467,13 @@ SELECT cube('{0,1,2}'::float[]);
(0, 1, 2)
(1 row)
-SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[3,2,1,1]);
+SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[3,2,1,1]);
cube_subset
---------------------------
(5, 3, 1, 1),(8, 7, 6, 6)
(1 row)
-SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[4,0]);
+SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[4,0]);
ERROR: Index out of bounds
--
-- Testing limit of CUBE_MAX_DIM dimensions check in cube_in.
@@ -1107,11 +1101,11 @@ SELECT cube_enlarge('(2,-2),(-3,7)'::cube, -3, 2);
(1 row)
-- Load some example data and build the index
---
+--
CREATE TABLE test_cube (c cube);
\copy test_cube from 'data/test_cube.data'
CREATE INDEX test_cube_ix ON test_cube USING gist (c);
-SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' ORDER BY c;
+SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' ORDER BY c;
c
--------------------------
(337, 455),(240, 359)
@@ -1121,8 +1115,8 @@ SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' ORDER BY c;
(2424, 160),(2424, 81)
(5 rows)
--- Test sorting
-SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' GROUP BY c ORDER BY c;
+-- Test sorting
+SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' GROUP BY c ORDER BY c;
c
--------------------------
(337, 455),(240, 359)
diff --git a/contrib/cube/expected/cube_3.out b/contrib/cube/expected/cube_3.out
new file mode 100644
index 0000000000..22b4e1f207
--- /dev/null
+++ b/contrib/cube/expected/cube_3.out
@@ -0,0 +1,1128 @@
+--
+-- Test cube datatype
+--
+CREATE EXTENSION cube;
+--
+-- testing the input and output functions
+--
+-- Any number (a one-dimensional point)
+SELECT '1'::cube AS cube;
+ cube
+------
+ (1)
+(1 row)
+
+SELECT '-1'::cube AS cube;
+ cube
+------
+ (-1)
+(1 row)
+
+SELECT '1.'::cube AS cube;
+ cube
+------
+ (1)
+(1 row)
+
+SELECT '-1.'::cube AS cube;
+ cube
+------
+ (-1)
+(1 row)
+
+SELECT '.1'::cube AS cube;
+ cube
+-------
+ (0.1)
+(1 row)
+
+SELECT '-.1'::cube AS cube;
+ cube
+--------
+ (-0.1)
+(1 row)
+
+SELECT '1.0'::cube AS cube;
+ cube
+------
+ (1)
+(1 row)
+
+SELECT '-1.0'::cube AS cube;
+ cube
+------
+ (-1)
+(1 row)
+
+SELECT '1e27'::cube AS cube;
+ cube
+----------
+ (1e+027)
+(1 row)
+
+SELECT '-1e27'::cube AS cube;
+ cube
+-----------
+ (-1e+027)
+(1 row)
+
+SELECT '1.0e27'::cube AS cube;
+ cube
+----------
+ (1e+027)
+(1 row)
+
+SELECT '-1.0e27'::cube AS cube;
+ cube
+-----------
+ (-1e+027)
+(1 row)
+
+SELECT '1e+27'::cube AS cube;
+ cube
+----------
+ (1e+027)
+(1 row)
+
+SELECT '-1e+27'::cube AS cube;
+ cube
+-----------
+ (-1e+027)
+(1 row)
+
+SELECT '1.0e+27'::cube AS cube;
+ cube
+----------
+ (1e+027)
+(1 row)
+
+SELECT '-1.0e+27'::cube AS cube;
+ cube
+-----------
+ (-1e+027)
+(1 row)
+
+SELECT '1e-7'::cube AS cube;
+ cube
+----------
+ (1e-007)
+(1 row)
+
+SELECT '-1e-7'::cube AS cube;
+ cube
+-----------
+ (-1e-007)
+(1 row)
+
+SELECT '1.0e-7'::cube AS cube;
+ cube
+----------
+ (1e-007)
+(1 row)
+
+SELECT '-1.0e-7'::cube AS cube;
+ cube
+-----------
+ (-1e-007)
+(1 row)
+
+SELECT '1e-700'::cube AS cube;
+ cube
+------
+ (0)
+(1 row)
+
+SELECT '-1e-700'::cube AS cube;
+ cube
+------
+ (-0)
+(1 row)
+
+SELECT '1234567890123456'::cube AS cube;
+ cube
+-------------------------
+ (1.23456789012346e+015)
+(1 row)
+
+SELECT '+1234567890123456'::cube AS cube;
+ cube
+-------------------------
+ (1.23456789012346e+015)
+(1 row)
+
+SELECT '-1234567890123456'::cube AS cube;
+ cube
+--------------------------
+ (-1.23456789012346e+015)
+(1 row)
+
+SELECT '.1234567890123456'::cube AS cube;
+ cube
+---------------------
+ (0.123456789012346)
+(1 row)
+
+SELECT '+.1234567890123456'::cube AS cube;
+ cube
+---------------------
+ (0.123456789012346)
+(1 row)
+
+SELECT '-.1234567890123456'::cube AS cube;
+ cube
+----------------------
+ (-0.123456789012346)
+(1 row)
+
+-- simple lists (points)
+SELECT '1,2'::cube AS cube;
+ cube
+--------
+ (1, 2)
+(1 row)
+
+SELECT '(1,2)'::cube AS cube;
+ cube
+--------
+ (1, 2)
+(1 row)
+
+SELECT '1,2,3,4,5'::cube AS cube;
+ cube
+-----------------
+ (1, 2, 3, 4, 5)
+(1 row)
+
+SELECT '(1,2,3,4,5)'::cube AS cube;
+ cube
+-----------------
+ (1, 2, 3, 4, 5)
+(1 row)
+
+-- double lists (cubes)
+SELECT '(0),(0)'::cube AS cube;
+ cube
+------
+ (0)
+(1 row)
+
+SELECT '(0),(1)'::cube AS cube;
+ cube
+---------
+ (0),(1)
+(1 row)
+
+SELECT '[(0),(0)]'::cube AS cube;
+ cube
+------
+ (0)
+(1 row)
+
+SELECT '[(0),(1)]'::cube AS cube;
+ cube
+---------
+ (0),(1)
+(1 row)
+
+SELECT '(0,0,0,0),(0,0,0,0)'::cube AS cube;
+ cube
+--------------
+ (0, 0, 0, 0)
+(1 row)
+
+SELECT '(0,0,0,0),(1,0,0,0)'::cube AS cube;
+ cube
+---------------------------
+ (0, 0, 0, 0),(1, 0, 0, 0)
+(1 row)
+
+SELECT '[(0,0,0,0),(0,0,0,0)]'::cube AS cube;
+ cube
+--------------
+ (0, 0, 0, 0)
+(1 row)
+
+SELECT '[(0,0,0,0),(1,0,0,0)]'::cube AS cube;
+ cube
+---------------------------
+ (0, 0, 0, 0),(1, 0, 0, 0)
+(1 row)
+
+-- invalid input: parse errors
+SELECT ''::cube AS cube;
+ERROR: bad cube representation
+LINE 1: SELECT ''::cube AS cube;
+ ^
+DETAIL: syntax error at end of input
+SELECT 'ABC'::cube AS cube;
+ERROR: bad cube representation
+LINE 1: SELECT 'ABC'::cube AS cube;
+ ^
+DETAIL: syntax error at or near "A"
+SELECT '()'::cube AS cube;
+ERROR: bad cube representation
+LINE 1: SELECT '()'::cube AS cube;
+ ^
+DETAIL: syntax error at or near ")"
+SELECT '[]'::cube AS cube;
+ERROR: bad cube representation
+LINE 1: SELECT '[]'::cube AS cube;
+ ^
+DETAIL: syntax error at or near "]"
+SELECT '[()]'::cube AS cube;
+ERROR: bad cube representation
+LINE 1: SELECT '[()]'::cube AS cube;
+ ^
+DETAIL: syntax error at or near ")"
+SELECT '[(1)]'::cube AS cube;
+ERROR: bad cube representation
+LINE 1: SELECT '[(1)]'::cube AS cube;
+ ^
+DETAIL: syntax error at or near "]"
+SELECT '[(1),]'::cube AS cube;
+ERROR: bad cube representation
+LINE 1: SELECT '[(1),]'::cube AS cube;
+ ^
+DETAIL: syntax error at or near "]"
+SELECT '[(1),2]'::cube AS cube;
+ERROR: bad cube representation
+LINE 1: SELECT '[(1),2]'::cube AS cube;
+ ^
+DETAIL: syntax error at or near "2"
+SELECT '[(1),(2),(3)]'::cube AS cube;
+ERROR: bad cube representation
+LINE 1: SELECT '[(1),(2),(3)]'::cube AS cube;
+ ^
+DETAIL: syntax error at or near ","
+SELECT '1,'::cube AS cube;
+ERROR: bad cube representation
+LINE 1: SELECT '1,'::cube AS cube;
+ ^
+DETAIL: syntax error at end of input
+SELECT '1,2,'::cube AS cube;
+ERROR: bad cube representation
+LINE 1: SELECT '1,2,'::cube AS cube;
+ ^
+DETAIL: syntax error at end of input
+SELECT '1,,2'::cube AS cube;
+ERROR: bad cube representation
+LINE 1: SELECT '1,,2'::cube AS cube;
+ ^
+DETAIL: syntax error at or near ","
+SELECT '(1,)'::cube AS cube;
+ERROR: bad cube representation
+LINE 1: SELECT '(1,)'::cube AS cube;
+ ^
+DETAIL: syntax error at or near ")"
+SELECT '(1,2,)'::cube AS cube;
+ERROR: bad cube representation
+LINE 1: SELECT '(1,2,)'::cube AS cube;
+ ^
+DETAIL: syntax error at or near ")"
+SELECT '(1,,2)'::cube AS cube;
+ERROR: bad cube representation
+LINE 1: SELECT '(1,,2)'::cube AS cube;
+ ^
+DETAIL: syntax error at or near ","
+-- invalid input: semantic errors and trailing garbage
+SELECT '[(1),(2)],'::cube AS cube; -- 0
+ERROR: bad cube representation
+LINE 1: SELECT '[(1),(2)],'::cube AS cube;
+ ^
+DETAIL: syntax error at or near ","
+SELECT '[(1,2,3),(2,3)]'::cube AS cube; -- 1
+ERROR: bad cube representation
+LINE 1: SELECT '[(1,2,3),(2,3)]'::cube AS cube;
+ ^
+DETAIL: Different point dimensions in (1,2,3) and (2,3).
+SELECT '[(1,2),(1,2,3)]'::cube AS cube; -- 1
+ERROR: bad cube representation
+LINE 1: SELECT '[(1,2),(1,2,3)]'::cube AS cube;
+ ^
+DETAIL: Different point dimensions in (1,2) and (1,2,3).
+SELECT '(1),(2),'::cube AS cube; -- 2
+ERROR: bad cube representation
+LINE 1: SELECT '(1),(2),'::cube AS cube;
+ ^
+DETAIL: syntax error at or near ","
+SELECT '(1,2,3),(2,3)'::cube AS cube; -- 3
+ERROR: bad cube representation
+LINE 1: SELECT '(1,2,3),(2,3)'::cube AS cube;
+ ^
+DETAIL: Different point dimensions in (1,2,3) and (2,3).
+SELECT '(1,2),(1,2,3)'::cube AS cube; -- 3
+ERROR: bad cube representation
+LINE 1: SELECT '(1,2),(1,2,3)'::cube AS cube;
+ ^
+DETAIL: Different point dimensions in (1,2) and (1,2,3).
+SELECT '(1,2,3)ab'::cube AS cube; -- 4
+ERROR: bad cube representation
+LINE 1: SELECT '(1,2,3)ab'::cube AS cube;
+ ^
+DETAIL: syntax error at or near "a"
+SELECT '(1,2,3)a'::cube AS cube; -- 5
+ERROR: bad cube representation
+LINE 1: SELECT '(1,2,3)a'::cube AS cube;
+ ^
+DETAIL: syntax error at or near "a"
+SELECT '(1,2)('::cube AS cube; -- 5
+ERROR: bad cube representation
+LINE 1: SELECT '(1,2)('::cube AS cube;
+ ^
+DETAIL: syntax error at or near "("
+SELECT '1,2ab'::cube AS cube; -- 6
+ERROR: bad cube representation
+LINE 1: SELECT '1,2ab'::cube AS cube;
+ ^
+DETAIL: syntax error at or near "a"
+SELECT '1 e7'::cube AS cube; -- 6
+ERROR: bad cube representation
+LINE 1: SELECT '1 e7'::cube AS cube;
+ ^
+DETAIL: syntax error at or near "e"
+SELECT '1,2a'::cube AS cube; -- 7
+ERROR: bad cube representation
+LINE 1: SELECT '1,2a'::cube AS cube;
+ ^
+DETAIL: syntax error at or near "a"
+SELECT '1..2'::cube AS cube; -- 7
+ERROR: bad cube representation
+LINE 1: SELECT '1..2'::cube AS cube;
+ ^
+DETAIL: syntax error at or near ".2"
+--
+-- Testing building cubes from float8 values
+--
+SELECT cube(0::float8);
+ cube
+------
+ (0)
+(1 row)
+
+SELECT cube(1::float8);
+ cube
+------
+ (1)
+(1 row)
+
+SELECT cube(1,2);
+ cube
+---------
+ (1),(2)
+(1 row)
+
+SELECT cube(cube(1,2),3);
+ cube
+---------------
+ (1, 3),(2, 3)
+(1 row)
+
+SELECT cube(cube(1,2),3,4);
+ cube
+---------------
+ (1, 3),(2, 4)
+(1 row)
+
+SELECT cube(cube(cube(1,2),3,4),5);
+ cube
+---------------------
+ (1, 3, 5),(2, 4, 5)
+(1 row)
+
+SELECT cube(cube(cube(1,2),3,4),5,6);
+ cube
+---------------------
+ (1, 3, 5),(2, 4, 6)
+(1 row)
+
+--
+-- Test that the text -> cube cast was installed.
+--
+SELECT '(0)'::text::cube;
+ cube
+------
+ (0)
+(1 row)
+
+--
+-- Test the float[] -> cube cast
+--
+SELECT cube('{0,1,2}'::float[], '{3,4,5}'::float[]);
+ cube
+---------------------
+ (0, 1, 2),(3, 4, 5)
+(1 row)
+
+SELECT cube('{0,1,2}'::float[], '{3}'::float[]);
+ERROR: UR and LL arrays must be of same length
+SELECT cube(NULL::float[], '{3}'::float[]);
+ cube
+------
+
+(1 row)
+
+SELECT cube('{0,1,2}'::float[]);
+ cube
+-----------
+ (0, 1, 2)
+(1 row)
+
+SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[3,2,1,1]);
+ cube_subset
+---------------------------
+ (5, 3, 1, 1),(8, 7, 6, 6)
+(1 row)
+
+SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[4,0]);
+ERROR: Index out of bounds
+--
+-- Testing limit of CUBE_MAX_DIM dimensions check in cube_in.
+--
+select '(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)'::cube;
+ERROR: bad cube representation
+LINE 1: select '(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...
+ ^
+DETAIL: A cube cannot have more than 100 dimensions.
+select '(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)'::cube;
+ERROR: bad cube representation
+LINE 1: select '(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0...
+ ^
+DETAIL: A cube cannot have more than 100 dimensions.
+--
+-- testing the operators
+--
+-- equality/inequality:
+--
+SELECT '24, 33.20'::cube = '24, 33.20'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '24, 33.20'::cube != '24, 33.20'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '24, 33.20'::cube = '24, 33.21'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '24, 33.20'::cube != '24, 33.21'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(2,0),(3,1)'::cube = '(2,0,0,0,0),(3,1,0,0,0)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(2,0),(3,1)'::cube = '(2,0,0,0,0),(3,1,0,0,1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+-- "lower than" / "greater than"
+-- (these operators are not useful for anything but ordering)
+--
+SELECT '1'::cube > '2'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '1'::cube < '2'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '1,1'::cube > '1,2'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '1,1'::cube < '1,2'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(2,0),(3,1)'::cube > '(2,0,0,0,0),(3,1,0,0,1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(2,0),(3,1)'::cube < '(2,0,0,0,0),(3,1,0,0,1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(2,0),(3,1)'::cube > '(2,0,0,0,1),(3,1,0,0,0)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(2,0),(3,1)'::cube < '(2,0,0,0,1),(3,1,0,0,0)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(2,0),(3,1)'::cube > '(2,0,0,0,0),(3,1,0,0,0)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(2,0),(3,1)'::cube < '(2,0,0,0,0),(3,1,0,0,0)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(2,0,0,0,0),(3,1,0,0,1)'::cube > '(2,0),(3,1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(2,0,0,0,0),(3,1,0,0,1)'::cube < '(2,0),(3,1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(2,0,0,0,1),(3,1,0,0,0)'::cube > '(2,0),(3,1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(2,0,0,0,1),(3,1,0,0,0)'::cube < '(2,0),(3,1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(2,0,0,0,0),(3,1,0,0,0)'::cube > '(2,0),(3,1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(2,0,0,0,0),(3,1,0,0,0)'::cube < '(2,0),(3,1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+-- "overlap"
+--
+SELECT '1'::cube && '1'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '1'::cube && '2'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '[(-1,-1,-1),(1,1,1)]'::cube && '0'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '[(-1,-1,-1),(1,1,1)]'::cube && '1'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '[(-1,-1,-1),(1,1,1)]'::cube && '1,1,1'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '[(-1,-1,-1),(1,1,1)]'::cube && '[(1,1,1),(2,2,2)]'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '[(-1,-1,-1),(1,1,1)]'::cube && '[(1,1),(2,2)]'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '[(-1,-1,-1),(1,1,1)]'::cube && '[(2,1,1),(2,2,2)]'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+-- "contained in" (the left operand is the cube entirely enclosed by
+-- the right operand):
+--
+SELECT '0'::cube <@ '0'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '0,0,0'::cube <@ '0,0,0'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '0,0'::cube <@ '0,0,1'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '0,0,0'::cube <@ '0,0,1'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '1,0,0'::cube <@ '0,0,1'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(1,0,0),(0,0,1)'::cube <@ '(1,0,0),(0,0,1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(1,0,0),(0,0,1)'::cube <@ '(-1,-1,-1),(1,1,1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(1,0,0),(0,0,1)'::cube <@ '(-1,-1,-1,-1),(1,1,1,1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '0'::cube <@ '(-1),(1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '1'::cube <@ '(-1),(1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '-1'::cube <@ '(-1),(1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(-1),(1)'::cube <@ '(-1),(1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(-1),(1)'::cube <@ '(-1,-1),(1,1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(-2),(1)'::cube <@ '(-1),(1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(-2),(1)'::cube <@ '(-1,-1),(1,1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+-- "contains" (the left operand is the cube that entirely encloses the
+-- right operand)
+--
+SELECT '0'::cube @> '0'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '0,0,0'::cube @> '0,0,0'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '0,0,1'::cube @> '0,0'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '0,0,1'::cube @> '0,0,0'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '0,0,1'::cube @> '1,0,0'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(1,0,0),(0,0,1)'::cube @> '(1,0,0),(0,0,1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(-1,-1,-1),(1,1,1)'::cube @> '(1,0,0),(0,0,1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(-1,-1,-1,-1),(1,1,1,1)'::cube @> '(1,0,0),(0,0,1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(-1),(1)'::cube @> '0'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(-1),(1)'::cube @> '1'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(-1),(1)'::cube @> '-1'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(-1),(1)'::cube @> '(-1),(1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(-1,-1),(1,1)'::cube @> '(-1),(1)'::cube AS bool;
+ bool
+------
+ t
+(1 row)
+
+SELECT '(-1),(1)'::cube @> '(-2),(1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+SELECT '(-1,-1),(1,1)'::cube @> '(-2),(1)'::cube AS bool;
+ bool
+------
+ f
+(1 row)
+
+-- Test of distance function
+--
+SELECT cube_distance('(0)'::cube,'(2,2,2,2)'::cube);
+ cube_distance
+---------------
+ 4
+(1 row)
+
+SELECT cube_distance('(0)'::cube,'(.3,.4)'::cube);
+ cube_distance
+---------------
+ 0.5
+(1 row)
+
+-- Test of cube function (text to cube)
+--
+SELECT cube('(1,1.2)'::text);
+ cube
+----------
+ (1, 1.2)
+(1 row)
+
+SELECT cube(NULL);
+ cube
+------
+
+(1 row)
+
+-- Test of cube_dim function (dimensions stored in cube)
+--
+SELECT cube_dim('(0)'::cube);
+ cube_dim
+----------
+ 1
+(1 row)
+
+SELECT cube_dim('(0,0)'::cube);
+ cube_dim
+----------
+ 2
+(1 row)
+
+SELECT cube_dim('(0,0,0)'::cube);
+ cube_dim
+----------
+ 3
+(1 row)
+
+-- Test of cube_ll_coord function (retrieves LL coodinate values)
+--
+SELECT cube_ll_coord('(-1,1),(2,-2)'::cube, 1);
+ cube_ll_coord
+---------------
+ -1
+(1 row)
+
+SELECT cube_ll_coord('(-1,1),(2,-2)'::cube, 2);
+ cube_ll_coord
+---------------
+ -2
+(1 row)
+
+SELECT cube_ll_coord('(-1,1),(2,-2)'::cube, 3);
+ cube_ll_coord
+---------------
+ 0
+(1 row)
+
+-- Test of cube_ur_coord function (retrieves UR coodinate values)
+--
+SELECT cube_ur_coord('(-1,1),(2,-2)'::cube, 1);
+ cube_ur_coord
+---------------
+ 2
+(1 row)
+
+SELECT cube_ur_coord('(-1,1),(2,-2)'::cube, 2);
+ cube_ur_coord
+---------------
+ 1
+(1 row)
+
+SELECT cube_ur_coord('(-1,1),(2,-2)'::cube, 3);
+ cube_ur_coord
+---------------
+ 0
+(1 row)
+
+-- Test of cube_is_point
+--
+SELECT cube_is_point('(0)'::cube);
+ cube_is_point
+---------------
+ t
+(1 row)
+
+SELECT cube_is_point('(0,1,2)'::cube);
+ cube_is_point
+---------------
+ t
+(1 row)
+
+SELECT cube_is_point('(0,1,2),(0,1,2)'::cube);
+ cube_is_point
+---------------
+ t
+(1 row)
+
+SELECT cube_is_point('(0,1,2),(-1,1,2)'::cube);
+ cube_is_point
+---------------
+ f
+(1 row)
+
+SELECT cube_is_point('(0,1,2),(0,-1,2)'::cube);
+ cube_is_point
+---------------
+ f
+(1 row)
+
+SELECT cube_is_point('(0,1,2),(0,1,-2)'::cube);
+ cube_is_point
+---------------
+ f
+(1 row)
+
+-- Test of cube_enlarge (enlarging and shrinking cubes)
+--
+SELECT cube_enlarge('(0)'::cube, 0, 0);
+ cube_enlarge
+--------------
+ (0)
+(1 row)
+
+SELECT cube_enlarge('(0)'::cube, 0, 1);
+ cube_enlarge
+--------------
+ (0)
+(1 row)
+
+SELECT cube_enlarge('(0)'::cube, 0, 2);
+ cube_enlarge
+--------------
+ (0)
+(1 row)
+
+SELECT cube_enlarge('(2),(-2)'::cube, 0, 4);
+ cube_enlarge
+--------------
+ (-2),(2)
+(1 row)
+
+SELECT cube_enlarge('(0)'::cube, 1, 0);
+ cube_enlarge
+--------------
+ (-1),(1)
+(1 row)
+
+SELECT cube_enlarge('(0)'::cube, 1, 1);
+ cube_enlarge
+--------------
+ (-1),(1)
+(1 row)
+
+SELECT cube_enlarge('(0)'::cube, 1, 2);
+ cube_enlarge
+-----------------
+ (-1, -1),(1, 1)
+(1 row)
+
+SELECT cube_enlarge('(2),(-2)'::cube, 1, 4);
+ cube_enlarge
+-------------------------------
+ (-3, -1, -1, -1),(3, 1, 1, 1)
+(1 row)
+
+SELECT cube_enlarge('(0)'::cube, -1, 0);
+ cube_enlarge
+--------------
+ (0)
+(1 row)
+
+SELECT cube_enlarge('(0)'::cube, -1, 1);
+ cube_enlarge
+--------------
+ (0)
+(1 row)
+
+SELECT cube_enlarge('(0)'::cube, -1, 2);
+ cube_enlarge
+--------------
+ (0)
+(1 row)
+
+SELECT cube_enlarge('(2),(-2)'::cube, -1, 4);
+ cube_enlarge
+--------------
+ (-1),(1)
+(1 row)
+
+SELECT cube_enlarge('(0,0,0)'::cube, 1, 0);
+ cube_enlarge
+------------------------
+ (-1, -1, -1),(1, 1, 1)
+(1 row)
+
+SELECT cube_enlarge('(0,0,0)'::cube, 1, 2);
+ cube_enlarge
+------------------------
+ (-1, -1, -1),(1, 1, 1)
+(1 row)
+
+SELECT cube_enlarge('(2,-2),(-3,7)'::cube, 1, 2);
+ cube_enlarge
+-----------------
+ (-4, -3),(3, 8)
+(1 row)
+
+SELECT cube_enlarge('(2,-2),(-3,7)'::cube, 3, 2);
+ cube_enlarge
+------------------
+ (-6, -5),(5, 10)
+(1 row)
+
+SELECT cube_enlarge('(2,-2),(-3,7)'::cube, -1, 2);
+ cube_enlarge
+-----------------
+ (-2, -1),(1, 6)
+(1 row)
+
+SELECT cube_enlarge('(2,-2),(-3,7)'::cube, -3, 2);
+ cube_enlarge
+---------------------
+ (-0.5, 1),(-0.5, 4)
+(1 row)
+
+-- Load some example data and build the index
+--
+CREATE TABLE test_cube (c cube);
+\copy test_cube from 'data/test_cube.data'
+CREATE INDEX test_cube_ix ON test_cube USING gist (c);
+SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' ORDER BY c;
+ c
+--------------------------
+ (337, 455),(240, 359)
+ (759, 187),(662, 163)
+ (1444, 403),(1346, 344)
+ (1594, 1043),(1517, 971)
+ (2424, 160),(2424, 81)
+(5 rows)
+
+-- Test sorting
+SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' GROUP BY c ORDER BY c;
+ c
+--------------------------
+ (337, 455),(240, 359)
+ (759, 187),(662, 163)
+ (1444, 403),(1346, 344)
+ (1594, 1043),(1517, 971)
+ (2424, 160),(2424, 81)
+(5 rows)
+
diff --git a/contrib/cube/sql/cube.sql b/contrib/cube/sql/cube.sql
index 1931dfbc80..02e068edf4 100644
--- a/contrib/cube/sql/cube.sql
+++ b/contrib/cube/sql/cube.sql
@@ -2,15 +2,7 @@
-- Test cube datatype
--
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of cube.sql.
---
-SET client_min_messages = warning;
-\set ECHO none
-\i cube.sql
-\set ECHO all
-RESET client_min_messages;
+CREATE EXTENSION cube;
--
-- testing the input and output functions
@@ -119,8 +111,8 @@ SELECT cube('{0,1,2}'::float[], '{3,4,5}'::float[]);
SELECT cube('{0,1,2}'::float[], '{3}'::float[]);
SELECT cube(NULL::float[], '{3}'::float[]);
SELECT cube('{0,1,2}'::float[]);
-SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[3,2,1,1]);
-SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[4,0]);
+SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[3,2,1,1]);
+SELECT cube_subset(cube('(1,3,5),(6,7,8)'), ARRAY[4,0]);
--
-- Testing limit of CUBE_MAX_DIM dimensions check in cube_in.
@@ -275,13 +267,13 @@ SELECT cube_enlarge('(2,-2),(-3,7)'::cube, -1, 2);
SELECT cube_enlarge('(2,-2),(-3,7)'::cube, -3, 2);
-- Load some example data and build the index
---
+--
CREATE TABLE test_cube (c cube);
\copy test_cube from 'data/test_cube.data'
CREATE INDEX test_cube_ix ON test_cube USING gist (c);
-SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' ORDER BY c;
+SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' ORDER BY c;
--- Test sorting
-SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' GROUP BY c ORDER BY c;
+-- Test sorting
+SELECT * FROM test_cube WHERE c && '(3000,1000),(0,0)' GROUP BY c ORDER BY c;
diff --git a/contrib/cube/uninstall_cube.sql b/contrib/cube/uninstall_cube.sql
deleted file mode 100644
index abdb5a2db3..0000000000
--- a/contrib/cube/uninstall_cube.sql
+++ /dev/null
@@ -1,98 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/cube/uninstall_cube.sql,v 1.8 2008/04/14 17:05:32 tgl Exp $ */
-
--- Adjust this setting to control where the objects get dropped.
-SET search_path = public;
-
-DROP OPERATOR CLASS gist_cube_ops USING gist;
-
-DROP OPERATOR CLASS cube_ops USING btree;
-
-DROP FUNCTION g_cube_same(cube, cube, internal);
-
-DROP FUNCTION g_cube_union(internal, internal);
-
-DROP FUNCTION g_cube_picksplit(internal, internal);
-
-DROP FUNCTION g_cube_penalty(internal,internal,internal);
-
-DROP FUNCTION g_cube_decompress(internal);
-
-DROP FUNCTION g_cube_compress(internal);
-
-DROP FUNCTION g_cube_consistent(internal,cube,int,oid,internal);
-
-DROP OPERATOR ~ (cube, cube);
-
-DROP OPERATOR @ (cube, cube);
-
-DROP OPERATOR <@ (cube, cube);
-
-DROP OPERATOR @> (cube, cube);
-
-DROP OPERATOR <> (cube, cube);
-
-DROP OPERATOR = (cube, cube);
-
-DROP OPERATOR && (cube, cube);
-
-DROP OPERATOR >= (cube, cube);
-
-DROP OPERATOR <= (cube, cube);
-
-DROP OPERATOR > (cube, cube);
-
-DROP OPERATOR < (cube, cube);
-
-DROP FUNCTION cube_enlarge(cube, float8, int4);
-
-DROP FUNCTION cube_is_point(cube);
-
-DROP FUNCTION cube(cube, float8, float8);
-
-DROP FUNCTION cube(cube, float8);
-
-DROP FUNCTION cube(float8, float8);
-
-DROP FUNCTION cube(float8[], float8[]);
-
-DROP FUNCTION cube(float8[]);
-
-DROP FUNCTION cube_subset(cube, int4[]);
-
-DROP FUNCTION cube(float8);
-
-DROP FUNCTION cube_ur_coord(cube, int4);
-
-DROP FUNCTION cube_ll_coord(cube, int4);
-
-DROP FUNCTION cube_dim(cube);
-
-DROP FUNCTION cube_distance(cube, cube);
-
-DROP FUNCTION cube_size(cube);
-
-DROP FUNCTION cube_inter(cube, cube);
-
-DROP FUNCTION cube_union(cube, cube);
-
-DROP FUNCTION cube_overlap(cube, cube);
-
-DROP FUNCTION cube_contained(cube, cube);
-
-DROP FUNCTION cube_contains(cube, cube);
-
-DROP FUNCTION cube_cmp(cube, cube);
-
-DROP FUNCTION cube_ge(cube, cube);
-
-DROP FUNCTION cube_le(cube, cube);
-
-DROP FUNCTION cube_gt(cube, cube);
-
-DROP FUNCTION cube_lt(cube, cube);
-
-DROP FUNCTION cube_ne(cube, cube);
-
-DROP FUNCTION cube_eq(cube, cube);
-
-DROP TYPE cube CASCADE;
diff --git a/contrib/dblink/.gitignore b/contrib/dblink/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/contrib/dblink/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/contrib/dblink/Makefile b/contrib/dblink/Makefile
index 519c73b68f..ac637480eb 100644
--- a/contrib/dblink/Makefile
+++ b/contrib/dblink/Makefile
@@ -1,14 +1,15 @@
-# $PostgreSQL: pgsql/contrib/dblink/Makefile,v 1.15 2007/11/10 23:59:50 momjian Exp $
+# contrib/dblink/Makefile
MODULE_big = dblink
-PG_CPPFLAGS = -I$(libpq_srcdir)
OBJS = dblink.o
+PG_CPPFLAGS = -I$(libpq_srcdir)
SHLIB_LINK = $(libpq)
+SHLIB_PREREQS = submake-libpq
-DATA_built = dblink.sql
-DATA = uninstall_dblink.sql
-REGRESS = dblink
+EXTENSION = dblink
+DATA = dblink--1.0.sql dblink--unpackaged--1.0.sql
+REGRESS = dblink
ifdef USE_PGXS
PG_CONFIG = pg_config
diff --git a/contrib/dblink/dblink.sql.in b/contrib/dblink/dblink--1.0.sql
index ff656736a4..4ac5514461 100644
--- a/contrib/dblink/dblink.sql.in
+++ b/contrib/dblink/dblink--1.0.sql
@@ -1,16 +1,13 @@
-/* $PostgreSQL: pgsql/contrib/dblink/dblink.sql.in,v 1.19 2009/08/05 16:11:07 joe Exp $ */
-
--- Adjust this setting to control where the objects get created.
-SET search_path = public;
+/* contrib/dblink/dblink--1.0.sql */
-- dblink_connect now restricts non-superusers to password
-- authenticated connections
-CREATE OR REPLACE FUNCTION dblink_connect (text)
+CREATE FUNCTION dblink_connect (text)
RETURNS text
AS 'MODULE_PATHNAME','dblink_connect'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_connect (text, text)
+CREATE FUNCTION dblink_connect (text, text)
RETURNS text
AS 'MODULE_PATHNAME','dblink_connect'
LANGUAGE C STRICT;
@@ -18,12 +15,12 @@ LANGUAGE C STRICT;
-- dblink_connect_u allows non-superusers to use
-- non-password authenticated connections, but initially
-- privileges are revoked from public
-CREATE OR REPLACE FUNCTION dblink_connect_u (text)
+CREATE FUNCTION dblink_connect_u (text)
RETURNS text
AS 'MODULE_PATHNAME','dblink_connect'
LANGUAGE C STRICT SECURITY DEFINER;
-CREATE OR REPLACE FUNCTION dblink_connect_u (text, text)
+CREATE FUNCTION dblink_connect_u (text, text)
RETURNS text
AS 'MODULE_PATHNAME','dblink_connect'
LANGUAGE C STRICT SECURITY DEFINER;
@@ -31,193 +28,193 @@ LANGUAGE C STRICT SECURITY DEFINER;
REVOKE ALL ON FUNCTION dblink_connect_u (text) FROM public;
REVOKE ALL ON FUNCTION dblink_connect_u (text, text) FROM public;
-CREATE OR REPLACE FUNCTION dblink_disconnect ()
+CREATE FUNCTION dblink_disconnect ()
RETURNS text
AS 'MODULE_PATHNAME','dblink_disconnect'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_disconnect (text)
+CREATE FUNCTION dblink_disconnect (text)
RETURNS text
AS 'MODULE_PATHNAME','dblink_disconnect'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_open (text, text)
+CREATE FUNCTION dblink_open (text, text)
RETURNS text
AS 'MODULE_PATHNAME','dblink_open'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_open (text, text, boolean)
+CREATE FUNCTION dblink_open (text, text, boolean)
RETURNS text
AS 'MODULE_PATHNAME','dblink_open'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_open (text, text, text)
+CREATE FUNCTION dblink_open (text, text, text)
RETURNS text
AS 'MODULE_PATHNAME','dblink_open'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_open (text, text, text, boolean)
+CREATE FUNCTION dblink_open (text, text, text, boolean)
RETURNS text
AS 'MODULE_PATHNAME','dblink_open'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_fetch (text, int)
+CREATE FUNCTION dblink_fetch (text, int)
RETURNS setof record
AS 'MODULE_PATHNAME','dblink_fetch'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_fetch (text, int, boolean)
+CREATE FUNCTION dblink_fetch (text, int, boolean)
RETURNS setof record
AS 'MODULE_PATHNAME','dblink_fetch'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_fetch (text, text, int)
+CREATE FUNCTION dblink_fetch (text, text, int)
RETURNS setof record
AS 'MODULE_PATHNAME','dblink_fetch'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_fetch (text, text, int, boolean)
+CREATE FUNCTION dblink_fetch (text, text, int, boolean)
RETURNS setof record
AS 'MODULE_PATHNAME','dblink_fetch'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_close (text)
+CREATE FUNCTION dblink_close (text)
RETURNS text
AS 'MODULE_PATHNAME','dblink_close'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_close (text, boolean)
+CREATE FUNCTION dblink_close (text, boolean)
RETURNS text
AS 'MODULE_PATHNAME','dblink_close'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_close (text, text)
+CREATE FUNCTION dblink_close (text, text)
RETURNS text
AS 'MODULE_PATHNAME','dblink_close'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_close (text, text, boolean)
+CREATE FUNCTION dblink_close (text, text, boolean)
RETURNS text
AS 'MODULE_PATHNAME','dblink_close'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink (text, text)
+CREATE FUNCTION dblink (text, text)
RETURNS setof record
AS 'MODULE_PATHNAME','dblink_record'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink (text, text, boolean)
+CREATE FUNCTION dblink (text, text, boolean)
RETURNS setof record
AS 'MODULE_PATHNAME','dblink_record'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink (text)
+CREATE FUNCTION dblink (text)
RETURNS setof record
AS 'MODULE_PATHNAME','dblink_record'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink (text, boolean)
+CREATE FUNCTION dblink (text, boolean)
RETURNS setof record
AS 'MODULE_PATHNAME','dblink_record'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_exec (text, text)
+CREATE FUNCTION dblink_exec (text, text)
RETURNS text
AS 'MODULE_PATHNAME','dblink_exec'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_exec (text, text, boolean)
+CREATE FUNCTION dblink_exec (text, text, boolean)
RETURNS text
AS 'MODULE_PATHNAME','dblink_exec'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_exec (text)
+CREATE FUNCTION dblink_exec (text)
RETURNS text
AS 'MODULE_PATHNAME','dblink_exec'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_exec (text,boolean)
+CREATE FUNCTION dblink_exec (text,boolean)
RETURNS text
AS 'MODULE_PATHNAME','dblink_exec'
LANGUAGE C STRICT;
CREATE TYPE dblink_pkey_results AS (position int, colname text);
-CREATE OR REPLACE FUNCTION dblink_get_pkey (text)
+CREATE FUNCTION dblink_get_pkey (text)
RETURNS setof dblink_pkey_results
AS 'MODULE_PATHNAME','dblink_get_pkey'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_build_sql_insert (text, int2vector, int, _text, _text)
+CREATE FUNCTION dblink_build_sql_insert (text, int2vector, int, _text, _text)
RETURNS text
AS 'MODULE_PATHNAME','dblink_build_sql_insert'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_build_sql_delete (text, int2vector, int, _text)
+CREATE FUNCTION dblink_build_sql_delete (text, int2vector, int, _text)
RETURNS text
AS 'MODULE_PATHNAME','dblink_build_sql_delete'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_build_sql_update (text, int2vector, int, _text, _text)
+CREATE FUNCTION dblink_build_sql_update (text, int2vector, int, _text, _text)
RETURNS text
AS 'MODULE_PATHNAME','dblink_build_sql_update'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_current_query ()
+CREATE FUNCTION dblink_current_query ()
RETURNS text
AS 'MODULE_PATHNAME','dblink_current_query'
LANGUAGE C;
-CREATE OR REPLACE FUNCTION dblink_send_query(text, text)
+CREATE FUNCTION dblink_send_query(text, text)
RETURNS int4
AS 'MODULE_PATHNAME', 'dblink_send_query'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_is_busy(text)
+CREATE FUNCTION dblink_is_busy(text)
RETURNS int4
AS 'MODULE_PATHNAME', 'dblink_is_busy'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_get_result(text)
+CREATE FUNCTION dblink_get_result(text)
RETURNS SETOF record
AS 'MODULE_PATHNAME', 'dblink_get_result'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_get_result(text, bool)
+CREATE FUNCTION dblink_get_result(text, bool)
RETURNS SETOF record
AS 'MODULE_PATHNAME', 'dblink_get_result'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_get_connections()
+CREATE FUNCTION dblink_get_connections()
RETURNS text[]
AS 'MODULE_PATHNAME', 'dblink_get_connections'
LANGUAGE C;
-CREATE OR REPLACE FUNCTION dblink_cancel_query(text)
+CREATE FUNCTION dblink_cancel_query(text)
RETURNS text
AS 'MODULE_PATHNAME', 'dblink_cancel_query'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_error_message(text)
+CREATE FUNCTION dblink_error_message(text)
RETURNS text
AS 'MODULE_PATHNAME', 'dblink_error_message'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_get_notify(
+CREATE FUNCTION dblink_get_notify(
OUT notify_name TEXT,
OUT be_pid INT4,
OUT extra TEXT
-)
+)
RETURNS setof record
AS 'MODULE_PATHNAME', 'dblink_get_notify'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dblink_get_notify(
+CREATE FUNCTION dblink_get_notify(
conname TEXT,
OUT notify_name TEXT,
OUT be_pid INT4,
OUT extra TEXT
-)
+)
RETURNS setof record
AS 'MODULE_PATHNAME', 'dblink_get_notify'
LANGUAGE C STRICT;
diff --git a/contrib/dblink/dblink--unpackaged--1.0.sql b/contrib/dblink/dblink--unpackaged--1.0.sql
new file mode 100644
index 0000000000..b6d184b4a2
--- /dev/null
+++ b/contrib/dblink/dblink--unpackaged--1.0.sql
@@ -0,0 +1,43 @@
+/* contrib/dblink/dblink--unpackaged--1.0.sql */
+
+ALTER EXTENSION dblink ADD function dblink_connect(text);
+ALTER EXTENSION dblink ADD function dblink_connect(text,text);
+ALTER EXTENSION dblink ADD function dblink_connect_u(text);
+ALTER EXTENSION dblink ADD function dblink_connect_u(text,text);
+ALTER EXTENSION dblink ADD function dblink_disconnect();
+ALTER EXTENSION dblink ADD function dblink_disconnect(text);
+ALTER EXTENSION dblink ADD function dblink_open(text,text);
+ALTER EXTENSION dblink ADD function dblink_open(text,text,boolean);
+ALTER EXTENSION dblink ADD function dblink_open(text,text,text);
+ALTER EXTENSION dblink ADD function dblink_open(text,text,text,boolean);
+ALTER EXTENSION dblink ADD function dblink_fetch(text,integer);
+ALTER EXTENSION dblink ADD function dblink_fetch(text,integer,boolean);
+ALTER EXTENSION dblink ADD function dblink_fetch(text,text,integer);
+ALTER EXTENSION dblink ADD function dblink_fetch(text,text,integer,boolean);
+ALTER EXTENSION dblink ADD function dblink_close(text);
+ALTER EXTENSION dblink ADD function dblink_close(text,boolean);
+ALTER EXTENSION dblink ADD function dblink_close(text,text);
+ALTER EXTENSION dblink ADD function dblink_close(text,text,boolean);
+ALTER EXTENSION dblink ADD function dblink(text,text);
+ALTER EXTENSION dblink ADD function dblink(text,text,boolean);
+ALTER EXTENSION dblink ADD function dblink(text);
+ALTER EXTENSION dblink ADD function dblink(text,boolean);
+ALTER EXTENSION dblink ADD function dblink_exec(text,text);
+ALTER EXTENSION dblink ADD function dblink_exec(text,text,boolean);
+ALTER EXTENSION dblink ADD function dblink_exec(text);
+ALTER EXTENSION dblink ADD function dblink_exec(text,boolean);
+ALTER EXTENSION dblink ADD type dblink_pkey_results;
+ALTER EXTENSION dblink ADD function dblink_get_pkey(text);
+ALTER EXTENSION dblink ADD function dblink_build_sql_insert(text,int2vector,integer,text[],text[]);
+ALTER EXTENSION dblink ADD function dblink_build_sql_delete(text,int2vector,integer,text[]);
+ALTER EXTENSION dblink ADD function dblink_build_sql_update(text,int2vector,integer,text[],text[]);
+ALTER EXTENSION dblink ADD function dblink_current_query();
+ALTER EXTENSION dblink ADD function dblink_send_query(text,text);
+ALTER EXTENSION dblink ADD function dblink_is_busy(text);
+ALTER EXTENSION dblink ADD function dblink_get_result(text);
+ALTER EXTENSION dblink ADD function dblink_get_result(text,boolean);
+ALTER EXTENSION dblink ADD function dblink_get_connections();
+ALTER EXTENSION dblink ADD function dblink_cancel_query(text);
+ALTER EXTENSION dblink ADD function dblink_error_message(text);
+ALTER EXTENSION dblink ADD function dblink_get_notify();
+ALTER EXTENSION dblink ADD function dblink_get_notify(text);
diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c
index 4bfa7670fd..19b98fb73d 100644
--- a/contrib/dblink/dblink.c
+++ b/contrib/dblink/dblink.c
@@ -8,8 +8,8 @@
* Darko Prenosil <[email protected]>
* Shridhar Daithankar <[email protected]>
*
- * $PostgreSQL: pgsql/contrib/dblink/dblink.c,v 1.99 2010/07/06 19:18:54 momjian Exp $
- * Copyright (c) 2001-2010, PostgreSQL Global Development Group
+ * contrib/dblink/dblink.c
+ * Copyright (c) 2001-2011, PostgreSQL Global Development Group
* ALL RIGHTS RESERVED;
*
* Permission to use, copy, modify, and distribute this software and its
@@ -91,7 +91,6 @@ static char **get_text_array_contents(ArrayType *array, int *numitems);
static char *get_sql_insert(Relation rel, int *pkattnums, int pknumatts, char **src_pkattvals, char **tgt_pkattvals);
static char *get_sql_delete(Relation rel, int *pkattnums, int pknumatts, char **tgt_pkattvals);
static char *get_sql_update(Relation rel, int *pkattnums, int pknumatts, char **src_pkattvals, char **tgt_pkattvals);
-static char *quote_literal_cstr(char *rawstr);
static char *quote_ident_cstr(char *rawstr);
static int get_attnum_pk_pos(int *pkattnums, int pknumatts, int key);
static HeapTuple get_tuple_of_interest(Relation rel, int *pkattnums, int pknumatts, char **src_pkattvals);
@@ -1894,25 +1893,6 @@ get_sql_update(Relation rel, int *pkattnums, int pknumatts, char **src_pkattvals
}
/*
- * Return a properly quoted literal value.
- * Uses quote_literal in quote.c
- */
-static char *
-quote_literal_cstr(char *rawstr)
-{
- text *rawstr_text;
- text *result_text;
- char *result;
-
- rawstr_text = cstring_to_text(rawstr);
- result_text = DatumGetTextP(DirectFunctionCall1(quote_literal,
- PointerGetDatum(rawstr_text)));
- result = text_to_cstring(result_text);
-
- return result;
-}
-
-/*
* Return a properly quoted identifier.
* Uses quote_ident in quote.c
*/
@@ -2109,7 +2089,7 @@ getConnectionByName(const char *name)
remoteConnHash = createConnHash();
key = pstrdup(name);
- truncate_identifier(key, strlen(key), true);
+ truncate_identifier(key, strlen(key), false);
hentry = (remoteConnHashEnt *) hash_search(remoteConnHash,
key, HASH_FIND, NULL);
@@ -2170,7 +2150,7 @@ deleteConnection(const char *name)
remoteConnHash = createConnHash();
key = pstrdup(name);
- truncate_identifier(key, strlen(key), true);
+ truncate_identifier(key, strlen(key), false);
hentry = (remoteConnHashEnt *) hash_search(remoteConnHash,
key, HASH_REMOVE, &found);
diff --git a/contrib/dblink/dblink.control b/contrib/dblink/dblink.control
new file mode 100644
index 0000000000..4333a9b618
--- /dev/null
+++ b/contrib/dblink/dblink.control
@@ -0,0 +1,5 @@
+# dblink extension
+comment = 'connect to other PostgreSQL databases from within a database'
+default_version = '1.0'
+module_pathname = '$libdir/dblink'
+relocatable = true
diff --git a/contrib/dblink/dblink.h b/contrib/dblink/dblink.h
index 1918fdee44..40de83f2b6 100644
--- a/contrib/dblink/dblink.h
+++ b/contrib/dblink/dblink.h
@@ -8,8 +8,8 @@
* Darko Prenosil <[email protected]>
* Shridhar Daithankar <[email protected]>
*
- * $PostgreSQL: pgsql/contrib/dblink/dblink.h,v 1.24 2010/01/02 16:57:32 momjian Exp $
- * Copyright (c) 2001-2010, PostgreSQL Global Development Group
+ * contrib/dblink/dblink.h
+ * Copyright (c) 2001-2011, PostgreSQL Global Development Group
* ALL RIGHTS RESERVED;
*
* Permission to use, copy, modify, and distribute this software and its
diff --git a/contrib/dblink/expected/dblink.out b/contrib/dblink/expected/dblink.out
index c59a67c737..511dd5efcf 100644
--- a/contrib/dblink/expected/dblink.out
+++ b/contrib/dblink/expected/dblink.out
@@ -1,14 +1,4 @@
--- Adjust this setting to control where the objects get created.
-SET search_path = public;
---
--- Define the functions and test data
--- therein.
---
--- Turn off echoing so that expected file does not depend on
--- contents of dblink.sql.
-SET client_min_messages = warning;
-\set ECHO none
-RESET client_min_messages;
+CREATE EXTENSION dblink;
CREATE TABLE foo(f1 int, f2 text, f3 text[], primary key (f1,f2));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "foo_pkey" for table "foo"
INSERT INTO foo VALUES (0,'a','{"a0","b0","c0"}');
@@ -668,7 +658,7 @@ SELECT dblink_connect('dtest1', 'dbname=contrib_regression');
OK
(1 row)
-SELECT * from
+SELECT * from
dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1;
t1
----
@@ -681,7 +671,7 @@ SELECT dblink_connect('dtest2', 'dbname=contrib_regression');
OK
(1 row)
-SELECT * from
+SELECT * from
dblink_send_query('dtest2', 'select * from foo where f1 > 2 and f1 < 7') as t1;
t1
----
@@ -694,7 +684,7 @@ SELECT dblink_connect('dtest3', 'dbname=contrib_regression');
OK
(1 row)
-SELECT * from
+SELECT * from
dblink_send_query('dtest3', 'select * from foo where f1 > 6') as t1;
t1
----
@@ -768,7 +758,7 @@ SELECT dblink_connect('dtest1', 'dbname=contrib_regression');
OK
(1 row)
-SELECT * from
+SELECT * from
dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1;
t1
----
diff --git a/contrib/dblink/sql/dblink.sql b/contrib/dblink/sql/dblink.sql
index a6d7811bfc..8c8ffe233c 100644
--- a/contrib/dblink/sql/dblink.sql
+++ b/contrib/dblink/sql/dblink.sql
@@ -1,17 +1,4 @@
--- Adjust this setting to control where the objects get created.
-SET search_path = public;
-
---
--- Define the functions and test data
--- therein.
---
--- Turn off echoing so that expected file does not depend on
--- contents of dblink.sql.
-SET client_min_messages = warning;
-\set ECHO none
-\i dblink.sql
-\set ECHO all
-RESET client_min_messages;
+CREATE EXTENSION dblink;
CREATE TABLE foo(f1 int, f2 text, f3 text[], primary key (f1,f2));
INSERT INTO foo VALUES (0,'a','{"a0","b0","c0"}');
@@ -327,15 +314,15 @@ SELECT dblink_disconnect('myconn');
-- test asynchronous queries
SELECT dblink_connect('dtest1', 'dbname=contrib_regression');
-SELECT * from
+SELECT * from
dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1;
SELECT dblink_connect('dtest2', 'dbname=contrib_regression');
-SELECT * from
+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 * from
+SELECT * from
dblink_send_query('dtest3', 'select * from foo where f1 > 6') as t1;
CREATE TEMPORARY TABLE result AS
@@ -364,7 +351,7 @@ SELECT dblink_disconnect('dtest3');
SELECT * from result;
SELECT dblink_connect('dtest1', 'dbname=contrib_regression');
-SELECT * from
+SELECT * from
dblink_send_query('dtest1', 'select * from foo where f1 < 3') as t1;
SELECT dblink_cancel_query('dtest1');
diff --git a/contrib/dblink/uninstall_dblink.sql b/contrib/dblink/uninstall_dblink.sql
deleted file mode 100644
index 98478115f1..0000000000
--- a/contrib/dblink/uninstall_dblink.sql
+++ /dev/null
@@ -1,86 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/dblink/uninstall_dblink.sql,v 1.9 2010/06/07 15:14:36 teodor Exp $ */
-
--- Adjust this setting to control where the objects get dropped.
-SET search_path = public;
-
-DROP FUNCTION dblink_current_query ();
-
-DROP FUNCTION dblink_build_sql_update (text, int2vector, int4, _text, _text);
-
-DROP FUNCTION dblink_build_sql_delete (text, int2vector, int4, _text);
-
-DROP FUNCTION dblink_build_sql_insert (text, int2vector, int4, _text, _text);
-
-DROP FUNCTION dblink_get_pkey (text);
-
-DROP TYPE dblink_pkey_results;
-
-DROP FUNCTION dblink_exec (text,bool);
-
-DROP FUNCTION dblink_exec (text);
-
-DROP FUNCTION dblink_exec (text,text,bool);
-
-DROP FUNCTION dblink_exec (text,text);
-
-DROP FUNCTION dblink (text,bool);
-
-DROP FUNCTION dblink (text);
-
-DROP FUNCTION dblink (text,text,bool);
-
-DROP FUNCTION dblink (text,text);
-
-DROP FUNCTION dblink_close (text,text,bool);
-
-DROP FUNCTION dblink_close (text,text);
-
-DROP FUNCTION dblink_close (text,bool);
-
-DROP FUNCTION dblink_close (text);
-
-DROP FUNCTION dblink_fetch (text,text,int,bool);
-
-DROP FUNCTION dblink_fetch (text,text,int);
-
-DROP FUNCTION dblink_fetch (text,int,bool);
-
-DROP FUNCTION dblink_fetch (text,int);
-
-DROP FUNCTION dblink_open (text,text,text,bool);
-
-DROP FUNCTION dblink_open (text,text,text);
-
-DROP FUNCTION dblink_open (text,text,bool);
-
-DROP FUNCTION dblink_open (text,text);
-
-DROP FUNCTION dblink_disconnect (text);
-
-DROP FUNCTION dblink_disconnect ();
-
-DROP FUNCTION dblink_connect (text, text);
-
-DROP FUNCTION dblink_connect (text);
-
-DROP FUNCTION dblink_connect_u (text, text);
-
-DROP FUNCTION dblink_connect_u (text);
-
-DROP FUNCTION dblink_cancel_query(text);
-
-DROP FUNCTION dblink_error_message(text);
-
-DROP FUNCTION dblink_get_connections();
-
-DROP FUNCTION dblink_get_result(text);
-
-DROP FUNCTION dblink_get_result(text, boolean);
-
-DROP FUNCTION dblink_is_busy(text);
-
-DROP FUNCTION dblink_send_query(text, text);
-
-DROP FUNCTION dblink_get_notify();
-
-DROP FUNCTION dblink_get_notify(text);
diff --git a/contrib/dict_int/.gitignore b/contrib/dict_int/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/contrib/dict_int/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/contrib/dict_int/Makefile b/contrib/dict_int/Makefile
index adf7b685b5..3a3fc368dc 100644
--- a/contrib/dict_int/Makefile
+++ b/contrib/dict_int/Makefile
@@ -1,9 +1,11 @@
-# $PostgreSQL: pgsql/contrib/dict_int/Makefile,v 1.2 2007/12/02 21:15:38 tgl Exp $
+# contrib/dict_int/Makefile
MODULE_big = dict_int
OBJS = dict_int.o
-DATA_built = dict_int.sql
-DATA = uninstall_dict_int.sql
+
+EXTENSION = dict_int
+DATA = dict_int--1.0.sql dict_int--unpackaged--1.0.sql
+
REGRESS = dict_int
ifdef USE_PGXS
diff --git a/contrib/dict_int/dict_int.sql.in b/contrib/dict_int/dict_int--1.0.sql
index 5245349ae1..585a56552d 100644
--- a/contrib/dict_int/dict_int.sql.in
+++ b/contrib/dict_int/dict_int--1.0.sql
@@ -1,14 +1,11 @@
-/* $PostgreSQL: pgsql/contrib/dict_int/dict_int.sql.in,v 1.3 2007/11/13 04:24:27 momjian Exp $ */
+/* contrib/dict_int/dict_int--1.0.sql */
--- Adjust this setting to control where the objects get created.
-SET search_path = public;
-
-CREATE OR REPLACE FUNCTION dintdict_init(internal)
+CREATE FUNCTION dintdict_init(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dintdict_lexize(internal, internal, internal, internal)
+CREATE FUNCTION dintdict_lexize(internal, internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT;
diff --git a/contrib/dict_int/dict_int--unpackaged--1.0.sql b/contrib/dict_int/dict_int--unpackaged--1.0.sql
new file mode 100644
index 0000000000..f89218a565
--- /dev/null
+++ b/contrib/dict_int/dict_int--unpackaged--1.0.sql
@@ -0,0 +1,6 @@
+/* contrib/dict_int/dict_int--unpackaged--1.0.sql */
+
+ALTER EXTENSION dict_int ADD function dintdict_init(internal);
+ALTER EXTENSION dict_int ADD function dintdict_lexize(internal,internal,internal,internal);
+ALTER EXTENSION dict_int ADD text search template intdict_template;
+ALTER EXTENSION dict_int ADD text search dictionary intdict;
diff --git a/contrib/dict_int/dict_int.c b/contrib/dict_int/dict_int.c
index 8e1918613f..c4ad6ef343 100644
--- a/contrib/dict_int/dict_int.c
+++ b/contrib/dict_int/dict_int.c
@@ -3,10 +3,10 @@
* dict_int.c
* Text search dictionary for integers
*
- * Copyright (c) 2007-2010, PostgreSQL Global Development Group
+ * Copyright (c) 2007-2011, PostgreSQL Global Development Group
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/contrib/dict_int/dict_int.c,v 1.6 2010/01/02 16:57:32 momjian Exp $
+ * contrib/dict_int/dict_int.c
*
*-------------------------------------------------------------------------
*/
diff --git a/contrib/dict_int/dict_int.control b/contrib/dict_int/dict_int.control
new file mode 100644
index 0000000000..6e2d2b351a
--- /dev/null
+++ b/contrib/dict_int/dict_int.control
@@ -0,0 +1,5 @@
+# dict_int extension
+comment = 'text search dictionary template for integers'
+default_version = '1.0'
+module_pathname = '$libdir/dict_int'
+relocatable = true
diff --git a/contrib/dict_int/expected/dict_int.out b/contrib/dict_int/expected/dict_int.out
index 7feb493e15..3b766ec52a 100644
--- a/contrib/dict_int/expected/dict_int.out
+++ b/contrib/dict_int/expected/dict_int.out
@@ -1,10 +1,4 @@
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of this file.
---
-SET client_min_messages = warning;
-\set ECHO none
-RESET client_min_messages;
+CREATE EXTENSION dict_int;
--lexize
select ts_lexize('intdict', '511673');
ts_lexize
diff --git a/contrib/dict_int/sql/dict_int.sql b/contrib/dict_int/sql/dict_int.sql
index 3a335f8f3d..8ffec6b770 100644
--- a/contrib/dict_int/sql/dict_int.sql
+++ b/contrib/dict_int/sql/dict_int.sql
@@ -1,12 +1,4 @@
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of this file.
---
-SET client_min_messages = warning;
-\set ECHO none
-\i dict_int.sql
-\set ECHO all
-RESET client_min_messages;
+CREATE EXTENSION dict_int;
--lexize
select ts_lexize('intdict', '511673');
diff --git a/contrib/dict_int/uninstall_dict_int.sql b/contrib/dict_int/uninstall_dict_int.sql
deleted file mode 100644
index d94343fd36..0000000000
--- a/contrib/dict_int/uninstall_dict_int.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/dict_int/uninstall_dict_int.sql,v 1.3 2007/11/13 04:24:27 momjian Exp $ */
-
--- Adjust this setting to control where the objects get dropped.
-SET search_path = public;
-
-DROP TEXT SEARCH DICTIONARY intdict;
-
-DROP TEXT SEARCH TEMPLATE intdict_template;
-
-DROP FUNCTION dintdict_init(internal);
-
-DROP FUNCTION dintdict_lexize(internal,internal,internal,internal);
diff --git a/contrib/dict_xsyn/.gitignore b/contrib/dict_xsyn/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/contrib/dict_xsyn/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/contrib/dict_xsyn/Makefile b/contrib/dict_xsyn/Makefile
index 2a879b7eff..ce92baa478 100644
--- a/contrib/dict_xsyn/Makefile
+++ b/contrib/dict_xsyn/Makefile
@@ -1,10 +1,12 @@
-# $PostgreSQL: pgsql/contrib/dict_xsyn/Makefile,v 1.3 2007/12/02 21:15:38 tgl Exp $
+# contrib/dict_xsyn/Makefile
MODULE_big = dict_xsyn
OBJS = dict_xsyn.o
-DATA_built = dict_xsyn.sql
-DATA = uninstall_dict_xsyn.sql
+
+EXTENSION = dict_xsyn
+DATA = dict_xsyn--1.0.sql dict_xsyn--unpackaged--1.0.sql
DATA_TSEARCH = xsyn_sample.rules
+
REGRESS = dict_xsyn
ifdef USE_PGXS
diff --git a/contrib/dict_xsyn/dict_xsyn.sql.in b/contrib/dict_xsyn/dict_xsyn--1.0.sql
index ac014a757d..30eaff4db5 100644
--- a/contrib/dict_xsyn/dict_xsyn.sql.in
+++ b/contrib/dict_xsyn/dict_xsyn--1.0.sql
@@ -1,14 +1,11 @@
-/* $PostgreSQL: pgsql/contrib/dict_xsyn/dict_xsyn.sql.in,v 1.3 2007/11/13 04:24:27 momjian Exp $ */
+/* contrib/dict_xsyn/dict_xsyn--1.0.sql */
--- Adjust this setting to control where the objects get created.
-SET search_path = public;
-
-CREATE OR REPLACE FUNCTION dxsyn_init(internal)
+CREATE FUNCTION dxsyn_init(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT;
-CREATE OR REPLACE FUNCTION dxsyn_lexize(internal, internal, internal, internal)
+CREATE FUNCTION dxsyn_lexize(internal, internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT;
diff --git a/contrib/dict_xsyn/dict_xsyn--unpackaged--1.0.sql b/contrib/dict_xsyn/dict_xsyn--unpackaged--1.0.sql
new file mode 100644
index 0000000000..6fe0285f79
--- /dev/null
+++ b/contrib/dict_xsyn/dict_xsyn--unpackaged--1.0.sql
@@ -0,0 +1,6 @@
+/* contrib/dict_xsyn/dict_xsyn--unpackaged--1.0.sql */
+
+ALTER EXTENSION dict_xsyn ADD function dxsyn_init(internal);
+ALTER EXTENSION dict_xsyn ADD function dxsyn_lexize(internal,internal,internal,internal);
+ALTER EXTENSION dict_xsyn ADD text search template xsyn_template;
+ALTER EXTENSION dict_xsyn ADD text search dictionary xsyn;
diff --git a/contrib/dict_xsyn/dict_xsyn.c b/contrib/dict_xsyn/dict_xsyn.c
index dc16d9583e..ded20facd4 100644
--- a/contrib/dict_xsyn/dict_xsyn.c
+++ b/contrib/dict_xsyn/dict_xsyn.c
@@ -3,10 +3,10 @@
* dict_xsyn.c
* Extended synonym dictionary
*
- * Copyright (c) 2007-2010, PostgreSQL Global Development Group
+ * Copyright (c) 2007-2011, PostgreSQL Global Development Group
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/contrib/dict_xsyn/dict_xsyn.c,v 1.9 2010/02/26 02:00:32 momjian Exp $
+ * contrib/dict_xsyn/dict_xsyn.c
*
*-------------------------------------------------------------------------
*/
diff --git a/contrib/dict_xsyn/dict_xsyn.control b/contrib/dict_xsyn/dict_xsyn.control
new file mode 100644
index 0000000000..3fd465a955
--- /dev/null
+++ b/contrib/dict_xsyn/dict_xsyn.control
@@ -0,0 +1,5 @@
+# dict_xsyn extension
+comment = 'text search dictionary template for extended synonym processing'
+default_version = '1.0'
+module_pathname = '$libdir/dict_xsyn'
+relocatable = true
diff --git a/contrib/dict_xsyn/expected/dict_xsyn.out b/contrib/dict_xsyn/expected/dict_xsyn.out
index d91697a97e..9b95e13559 100644
--- a/contrib/dict_xsyn/expected/dict_xsyn.out
+++ b/contrib/dict_xsyn/expected/dict_xsyn.out
@@ -1,10 +1,4 @@
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of this file.
---
-SET client_min_messages = warning;
-\set ECHO none
-RESET client_min_messages;
+CREATE EXTENSION dict_xsyn;
-- default configuration - match first word and return it among with all synonyms
ALTER TEXT SEARCH DICTIONARY xsyn (RULES='xsyn_sample', KEEPORIG=true, MATCHORIG=true, KEEPSYNONYMS=true, MATCHSYNONYMS=false);
--lexize
diff --git a/contrib/dict_xsyn/sql/dict_xsyn.sql b/contrib/dict_xsyn/sql/dict_xsyn.sql
index 9db0851700..49511061d0 100644
--- a/contrib/dict_xsyn/sql/dict_xsyn.sql
+++ b/contrib/dict_xsyn/sql/dict_xsyn.sql
@@ -1,12 +1,4 @@
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of this file.
---
-SET client_min_messages = warning;
-\set ECHO none
-\i dict_xsyn.sql
-\set ECHO all
-RESET client_min_messages;
+CREATE EXTENSION dict_xsyn;
-- default configuration - match first word and return it among with all synonyms
ALTER TEXT SEARCH DICTIONARY xsyn (RULES='xsyn_sample', KEEPORIG=true, MATCHORIG=true, KEEPSYNONYMS=true, MATCHSYNONYMS=false);
diff --git a/contrib/dict_xsyn/uninstall_dict_xsyn.sql b/contrib/dict_xsyn/uninstall_dict_xsyn.sql
deleted file mode 100644
index 844d2e9997..0000000000
--- a/contrib/dict_xsyn/uninstall_dict_xsyn.sql
+++ /dev/null
@@ -1,12 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/dict_xsyn/uninstall_dict_xsyn.sql,v 1.3 2007/11/13 04:24:27 momjian Exp $ */
-
--- Adjust this setting to control where the objects get dropped.
-SET search_path = public;
-
-DROP TEXT SEARCH DICTIONARY xsyn;
-
-DROP TEXT SEARCH TEMPLATE xsyn_template;
-
-DROP FUNCTION dxsyn_init(internal);
-
-DROP FUNCTION dxsyn_lexize(internal,internal,internal,internal);
diff --git a/contrib/dummy_seclabel/Makefile b/contrib/dummy_seclabel/Makefile
new file mode 100644
index 0000000000..105400f5f9
--- /dev/null
+++ b/contrib/dummy_seclabel/Makefile
@@ -0,0 +1,14 @@
+# 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/dummy_seclabel/dummy_seclabel.c b/contrib/dummy_seclabel/dummy_seclabel.c
new file mode 100644
index 0000000000..5deb43fa9b
--- /dev/null
+++ b/contrib/dummy_seclabel/dummy_seclabel.c
@@ -0,0 +1,49 @@
+/*
+ * dummy_seclabel.c
+ *
+ * Dummy security label provider.
+ *
+ * This module does not provide anything worthwhile from a security
+ * perspective, but allows regression testing independent of platform-specific
+ * features like SELinux.
+ *
+ * Portions Copyright (c) 1996-2011, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1994, Regents of the University of California
+ */
+#include "postgres.h"
+
+#include "commands/seclabel.h"
+#include "miscadmin.h"
+
+PG_MODULE_MAGIC;
+
+/* Entrypoint of the module */
+void _PG_init(void);
+
+static void
+dummy_object_relabel(const ObjectAddress *object, const char *seclabel)
+{
+ if (seclabel == NULL ||
+ strcmp(seclabel, "unclassified") == 0 ||
+ strcmp(seclabel, "classified") == 0)
+ return;
+
+ if (strcmp(seclabel, "secret") == 0 ||
+ strcmp(seclabel, "top secret") == 0)
+ {
+ if (!superuser())
+ ereport(ERROR,
+ (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
+ errmsg("only superuser can set '%s' label", seclabel)));
+ return;
+ }
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_NAME),
+ errmsg("'%s' is not a valid security label", seclabel)));
+}
+
+void
+_PG_init(void)
+{
+ register_label_provider("dummy", dummy_object_relabel);
+}
diff --git a/contrib/earthdistance/.gitignore b/contrib/earthdistance/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/contrib/earthdistance/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/contrib/earthdistance/Makefile b/contrib/earthdistance/Makefile
index ab72ac7fc9..48a7cf8c7c 100644
--- a/contrib/earthdistance/Makefile
+++ b/contrib/earthdistance/Makefile
@@ -1,9 +1,12 @@
-# $PostgreSQL: pgsql/contrib/earthdistance/Makefile,v 1.20 2010/07/05 23:15:55 tgl Exp $
+# contrib/earthdistance/Makefile
MODULES = earthdistance
-DATA_built = earthdistance.sql
-DATA = uninstall_earthdistance.sql
+
+EXTENSION = earthdistance
+DATA = earthdistance--1.0.sql earthdistance--unpackaged--1.0.sql
+
REGRESS = earthdistance
+REGRESS_OPTS = --extra-install=contrib/cube
LDFLAGS_SL += $(filter -lm, $(LIBS))
diff --git a/contrib/earthdistance/earthdistance.sql.in b/contrib/earthdistance/earthdistance--1.0.sql
index 2b8041b131..71e4025f6f 100644
--- a/contrib/earthdistance/earthdistance.sql.in
+++ b/contrib/earthdistance/earthdistance--1.0.sql
@@ -1,15 +1,10 @@
-/* $PostgreSQL: pgsql/contrib/earthdistance/earthdistance.sql.in,v 1.11 2007/11/13 04:24:27 momjian Exp $ */
-
--- Adjust this setting to control where the objects get created.
-SET search_path = public;
-
--- The earth functions rely on contrib/cube having been installed and loaded.
+/* contrib/earthdistance/earthdistance--1.0.sql */
-- earth() returns the radius of the earth in meters. This is the only
-- place you need to change things for the cube base distance functions
-- in order to use different units (or a better value for the Earth's radius).
-CREATE OR REPLACE FUNCTION earth() RETURNS float8
+CREATE FUNCTION earth() RETURNS float8
LANGUAGE SQL IMMUTABLE
AS 'SELECT ''6378168''::float8';
@@ -18,7 +13,7 @@ AS 'SELECT ''6378168''::float8';
-- uncomment the one below. Note that doing this will break the regression
-- tests.
--
--- CREATE OR REPLACE FUNCTION earth() RETURNS float8
+-- CREATE FUNCTION earth() RETURNS float8
-- LANGUAGE SQL IMMUTABLE
-- AS 'SELECT 180/pi()';
@@ -35,51 +30,51 @@ CREATE DOMAIN earth AS cube
CONSTRAINT on_surface check(abs(cube_distance(value, '(0)'::cube) /
earth() - 1) < '10e-7'::float8);
-CREATE OR REPLACE FUNCTION sec_to_gc(float8)
+CREATE FUNCTION sec_to_gc(float8)
RETURNS float8
LANGUAGE SQL
IMMUTABLE STRICT
AS 'SELECT CASE WHEN $1 < 0 THEN 0::float8 WHEN $1/(2*earth()) > 1 THEN pi()*earth() ELSE 2*earth()*asin($1/(2*earth())) END';
-CREATE OR REPLACE FUNCTION gc_to_sec(float8)
+CREATE FUNCTION gc_to_sec(float8)
RETURNS float8
LANGUAGE SQL
IMMUTABLE STRICT
AS 'SELECT CASE WHEN $1 < 0 THEN 0::float8 WHEN $1/earth() > pi() THEN 2*earth() ELSE 2*earth()*sin($1/(2*earth())) END';
-CREATE OR REPLACE FUNCTION ll_to_earth(float8, float8)
+CREATE FUNCTION ll_to_earth(float8, float8)
RETURNS earth
LANGUAGE SQL
IMMUTABLE STRICT
AS 'SELECT cube(cube(cube(earth()*cos(radians($1))*cos(radians($2))),earth()*cos(radians($1))*sin(radians($2))),earth()*sin(radians($1)))::earth';
-CREATE OR REPLACE FUNCTION latitude(earth)
+CREATE FUNCTION latitude(earth)
RETURNS float8
LANGUAGE SQL
IMMUTABLE STRICT
AS 'SELECT CASE WHEN cube_ll_coord($1, 3)/earth() < -1 THEN -90::float8 WHEN cube_ll_coord($1, 3)/earth() > 1 THEN 90::float8 ELSE degrees(asin(cube_ll_coord($1, 3)/earth())) END';
-CREATE OR REPLACE FUNCTION longitude(earth)
+CREATE FUNCTION longitude(earth)
RETURNS float8
LANGUAGE SQL
IMMUTABLE STRICT
AS 'SELECT degrees(atan2(cube_ll_coord($1, 2), cube_ll_coord($1, 1)))';
-CREATE OR REPLACE FUNCTION earth_distance(earth, earth)
+CREATE FUNCTION earth_distance(earth, earth)
RETURNS float8
LANGUAGE SQL
IMMUTABLE STRICT
AS 'SELECT sec_to_gc(cube_distance($1, $2))';
-CREATE OR REPLACE FUNCTION earth_box(earth, float8)
+CREATE FUNCTION earth_box(earth, float8)
RETURNS cube
LANGUAGE SQL
IMMUTABLE STRICT
AS 'SELECT cube_enlarge($1, gc_to_sec($2), 3)';
-
+
--------------- geo_distance
-CREATE OR REPLACE FUNCTION geo_distance (point, point)
+CREATE FUNCTION geo_distance (point, point)
RETURNS float8
LANGUAGE C IMMUTABLE STRICT AS 'MODULE_PATHNAME';
diff --git a/contrib/earthdistance/earthdistance--unpackaged--1.0.sql b/contrib/earthdistance/earthdistance--unpackaged--1.0.sql
new file mode 100644
index 0000000000..2d5919cc72
--- /dev/null
+++ b/contrib/earthdistance/earthdistance--unpackaged--1.0.sql
@@ -0,0 +1,13 @@
+/* contrib/earthdistance/earthdistance--unpackaged--1.0.sql */
+
+ALTER EXTENSION earthdistance ADD function earth();
+ALTER EXTENSION earthdistance ADD type earth;
+ALTER EXTENSION earthdistance ADD function sec_to_gc(double precision);
+ALTER EXTENSION earthdistance ADD function gc_to_sec(double precision);
+ALTER EXTENSION earthdistance ADD function ll_to_earth(double precision,double precision);
+ALTER EXTENSION earthdistance ADD function latitude(earth);
+ALTER EXTENSION earthdistance ADD function longitude(earth);
+ALTER EXTENSION earthdistance ADD function earth_distance(earth,earth);
+ALTER EXTENSION earthdistance ADD function earth_box(earth,double precision);
+ALTER EXTENSION earthdistance ADD function geo_distance(point,point);
+ALTER EXTENSION earthdistance ADD operator <@>(point,point);
diff --git a/contrib/earthdistance/earthdistance.c b/contrib/earthdistance/earthdistance.c
index 4dce1f828e..2f344a7011 100644
--- a/contrib/earthdistance/earthdistance.c
+++ b/contrib/earthdistance/earthdistance.c
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/contrib/earthdistance/earthdistance.c,v 1.16 2009/06/11 14:48:51 momjian Exp $ */
+/* contrib/earthdistance/earthdistance.c */
#include "postgres.h"
diff --git a/contrib/earthdistance/earthdistance.control b/contrib/earthdistance/earthdistance.control
new file mode 100644
index 0000000000..afd2ff4f95
--- /dev/null
+++ b/contrib/earthdistance/earthdistance.control
@@ -0,0 +1,6 @@
+# earthdistance extension
+comment = 'calculate great-circle distances on the surface of the Earth'
+default_version = '1.0'
+module_pathname = '$libdir/earthdistance'
+relocatable = true
+requires = 'cube'
diff --git a/contrib/earthdistance/expected/earthdistance.out b/contrib/earthdistance/expected/earthdistance.out
index 5f5645b700..8a3fc749c1 100644
--- a/contrib/earthdistance/expected/earthdistance.out
+++ b/contrib/earthdistance/expected/earthdistance.out
@@ -1,13 +1,8 @@
--
-- Test earth distance functions
--
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of earthdistance.sql or cube.sql.
---
-SET client_min_messages = warning;
-\set ECHO none
-RESET client_min_messages;
+CREATE EXTENSION cube;
+CREATE EXTENSION earthdistance;
--
-- The radius of the Earth we are using.
--
diff --git a/contrib/earthdistance/sql/earthdistance.sql b/contrib/earthdistance/sql/earthdistance.sql
index ad68b5635d..e494c350ce 100644
--- a/contrib/earthdistance/sql/earthdistance.sql
+++ b/contrib/earthdistance/sql/earthdistance.sql
@@ -2,16 +2,8 @@
-- Test earth distance functions
--
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of earthdistance.sql or cube.sql.
---
-SET client_min_messages = warning;
-\set ECHO none
-\i ../cube/cube.sql
-\i earthdistance.sql
-\set ECHO all
-RESET client_min_messages;
+CREATE EXTENSION cube;
+CREATE EXTENSION earthdistance;
--
-- The radius of the Earth we are using.
diff --git a/contrib/earthdistance/uninstall_earthdistance.sql b/contrib/earthdistance/uninstall_earthdistance.sql
deleted file mode 100644
index dfad24aa4f..0000000000
--- a/contrib/earthdistance/uninstall_earthdistance.sql
+++ /dev/null
@@ -1,26 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/earthdistance/uninstall_earthdistance.sql,v 1.3 2007/11/13 04:24:27 momjian Exp $ */
-
--- Adjust this setting to control where the objects get dropped.
-SET search_path = public;
-
-DROP OPERATOR <@> (point, point);
-
-DROP FUNCTION geo_distance (point, point);
-
-DROP FUNCTION earth_box(earth, float8);
-
-DROP FUNCTION earth_distance(earth, earth);
-
-DROP FUNCTION longitude(earth);
-
-DROP FUNCTION latitude(earth);
-
-DROP FUNCTION ll_to_earth(float8, float8);
-
-DROP FUNCTION gc_to_sec(float8);
-
-DROP FUNCTION sec_to_gc(float8);
-
-DROP DOMAIN earth;
-
-DROP FUNCTION earth();
diff --git a/contrib/file_fdw/.gitignore b/contrib/file_fdw/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/contrib/file_fdw/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/contrib/file_fdw/Makefile b/contrib/file_fdw/Makefile
new file mode 100644
index 0000000000..4616cec633
--- /dev/null
+++ b/contrib/file_fdw/Makefile
@@ -0,0 +1,21 @@
+# contrib/file_fdw/Makefile
+
+MODULES = file_fdw
+
+EXTENSION = file_fdw
+DATA = file_fdw--1.0.sql
+
+REGRESS = file_fdw
+
+EXTRA_CLEAN = sql/file_fdw.sql expected/file_fdw.out
+
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = contrib/file_fdw
+top_builddir = ../..
+include $(top_builddir)/src/Makefile.global
+include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/contrib/file_fdw/data/agg.bad b/contrib/file_fdw/data/agg.bad
new file mode 100644
index 0000000000..3415b15007
--- /dev/null
+++ b/contrib/file_fdw/data/agg.bad
@@ -0,0 +1,4 @@
+56;@7.8@
+100;@99.097@
+0;@aaa@
+42;@324.78@
diff --git a/contrib/file_fdw/data/agg.csv b/contrib/file_fdw/data/agg.csv
new file mode 100644
index 0000000000..3ee6bf24db
--- /dev/null
+++ b/contrib/file_fdw/data/agg.csv
@@ -0,0 +1,4 @@
+56;@7.8@
+100;@99.097@
+0;@0.09561@
+42;@324.78@
diff --git a/contrib/file_fdw/data/agg.data b/contrib/file_fdw/data/agg.data
new file mode 100644
index 0000000000..d92c7df4d0
--- /dev/null
+++ b/contrib/file_fdw/data/agg.data
@@ -0,0 +1,4 @@
+56 7.8
+100 99.097
+0 0.09561
+42 324.78
diff --git a/contrib/file_fdw/expected/.gitignore b/contrib/file_fdw/expected/.gitignore
new file mode 100644
index 0000000000..a464ad144f
--- /dev/null
+++ b/contrib/file_fdw/expected/.gitignore
@@ -0,0 +1 @@
+/file_fdw.out
diff --git a/contrib/file_fdw/file_fdw--1.0.sql b/contrib/file_fdw/file_fdw--1.0.sql
new file mode 100644
index 0000000000..0cca65f463
--- /dev/null
+++ b/contrib/file_fdw/file_fdw--1.0.sql
@@ -0,0 +1,15 @@
+/* contrib/file_fdw/file_fdw--1.0.sql */
+
+CREATE FUNCTION file_fdw_handler()
+RETURNS fdw_handler
+AS 'MODULE_PATHNAME'
+LANGUAGE C STRICT;
+
+CREATE FUNCTION file_fdw_validator(text[], oid)
+RETURNS void
+AS 'MODULE_PATHNAME'
+LANGUAGE C STRICT;
+
+CREATE FOREIGN DATA WRAPPER file_fdw
+ HANDLER file_fdw_handler
+ VALIDATOR file_fdw_validator;
diff --git a/contrib/file_fdw/file_fdw.c b/contrib/file_fdw/file_fdw.c
new file mode 100644
index 0000000000..466c015107
--- /dev/null
+++ b/contrib/file_fdw/file_fdw.c
@@ -0,0 +1,536 @@
+/*-------------------------------------------------------------------------
+ *
+ * file_fdw.c
+ * foreign-data wrapper for server-side flat files.
+ *
+ * Copyright (c) 2010-2011, PostgreSQL Global Development Group
+ *
+ * IDENTIFICATION
+ * contrib/file_fdw/file_fdw.c
+ *
+ *-------------------------------------------------------------------------
+ */
+#include "postgres.h"
+
+#include <sys/stat.h>
+#include <unistd.h>
+
+#include "access/reloptions.h"
+#include "catalog/pg_foreign_table.h"
+#include "commands/copy.h"
+#include "commands/defrem.h"
+#include "commands/explain.h"
+#include "foreign/fdwapi.h"
+#include "foreign/foreign.h"
+#include "miscadmin.h"
+#include "optimizer/cost.h"
+
+PG_MODULE_MAGIC;
+
+/*
+ * Describes the valid options for objects that use this wrapper.
+ */
+struct FileFdwOption
+{
+ const char *optname;
+ Oid optcontext; /* Oid of catalog in which option may appear */
+};
+
+/*
+ * Valid options for file_fdw.
+ * These options are based on the options for COPY FROM command.
+ *
+ * Note: If you are adding new option for user mapping, you need to modify
+ * fileGetOptions(), which currently doesn't bother to look at user mappings.
+ */
+static struct FileFdwOption valid_options[] = {
+ /* File options */
+ {"filename", ForeignTableRelationId},
+
+ /* Format options */
+ /* oids option is not supported */
+ {"format", ForeignTableRelationId},
+ {"header", ForeignTableRelationId},
+ {"delimiter", ForeignTableRelationId},
+ {"quote", ForeignTableRelationId},
+ {"escape", ForeignTableRelationId},
+ {"null", ForeignTableRelationId},
+ {"encoding", ForeignTableRelationId},
+
+ /*
+ * force_quote is not supported by file_fdw because it's for COPY TO.
+ */
+
+ /*
+ * force_not_null is not supported by file_fdw. It would need a parser
+ * for list of columns, not to mention a way to check the column list
+ * against the table.
+ */
+
+ /* Sentinel */
+ {NULL, InvalidOid}
+};
+
+/*
+ * FDW-specific information for ForeignScanState.fdw_state.
+ */
+typedef struct FileFdwExecutionState
+{
+ char *filename; /* file to read */
+ List *options; /* merged COPY options, excluding filename */
+ CopyState cstate; /* state of reading file */
+} FileFdwExecutionState;
+
+/*
+ * SQL functions
+ */
+extern Datum file_fdw_handler(PG_FUNCTION_ARGS);
+extern Datum file_fdw_validator(PG_FUNCTION_ARGS);
+
+PG_FUNCTION_INFO_V1(file_fdw_handler);
+PG_FUNCTION_INFO_V1(file_fdw_validator);
+
+/*
+ * FDW callback routines
+ */
+static FdwPlan *filePlanForeignScan(Oid foreigntableid,
+ PlannerInfo *root,
+ RelOptInfo *baserel);
+static void fileExplainForeignScan(ForeignScanState *node, ExplainState *es);
+static void fileBeginForeignScan(ForeignScanState *node, int eflags);
+static TupleTableSlot *fileIterateForeignScan(ForeignScanState *node);
+static void fileReScanForeignScan(ForeignScanState *node);
+static void fileEndForeignScan(ForeignScanState *node);
+
+/*
+ * Helper functions
+ */
+static bool is_valid_option(const char *option, Oid context);
+static void fileGetOptions(Oid foreigntableid,
+ char **filename, List **other_options);
+static void estimate_costs(PlannerInfo *root, RelOptInfo *baserel,
+ const char *filename,
+ Cost *startup_cost, Cost *total_cost);
+
+
+/*
+ * Foreign-data wrapper handler function: return a struct with pointers
+ * to my callback routines.
+ */
+Datum
+file_fdw_handler(PG_FUNCTION_ARGS)
+{
+ FdwRoutine *fdwroutine = makeNode(FdwRoutine);
+
+ fdwroutine->PlanForeignScan = filePlanForeignScan;
+ fdwroutine->ExplainForeignScan = fileExplainForeignScan;
+ fdwroutine->BeginForeignScan = fileBeginForeignScan;
+ fdwroutine->IterateForeignScan = fileIterateForeignScan;
+ fdwroutine->ReScanForeignScan = fileReScanForeignScan;
+ fdwroutine->EndForeignScan = fileEndForeignScan;
+
+ PG_RETURN_POINTER(fdwroutine);
+}
+
+/*
+ * Validate the generic options given to a FOREIGN DATA WRAPPER, SERVER,
+ * USER MAPPING or FOREIGN TABLE that uses file_fdw.
+ *
+ * Raise an ERROR if the option or its value is considered invalid.
+ */
+Datum
+file_fdw_validator(PG_FUNCTION_ARGS)
+{
+ List *options_list = untransformRelOptions(PG_GETARG_DATUM(0));
+ Oid catalog = PG_GETARG_OID(1);
+ char *filename = NULL;
+ List *other_options = NIL;
+ ListCell *cell;
+
+ /*
+ * Only superusers are allowed to set options of a file_fdw foreign table.
+ * This is because the filename is one of those options, and we don't want
+ * non-superusers to be able to determine which file gets read.
+ *
+ * Putting this sort of permissions check in a validator is a bit of a
+ * crock, but there doesn't seem to be any other place that can enforce
+ * the check more cleanly.
+ *
+ * Note that the valid_options[] array disallows setting filename at any
+ * options level other than foreign table --- otherwise there'd still be a
+ * security hole.
+ */
+ if (catalog == ForeignTableRelationId && !superuser())
+ ereport(ERROR,
+ (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE),
+ errmsg("only superuser can change options of a file_fdw foreign table")));
+
+ /*
+ * Check that only options supported by file_fdw, and allowed for the
+ * current object type, are given.
+ */
+ foreach(cell, options_list)
+ {
+ DefElem *def = (DefElem *) lfirst(cell);
+
+ if (!is_valid_option(def->defname, catalog))
+ {
+ struct FileFdwOption *opt;
+ StringInfoData buf;
+
+ /*
+ * Unknown option specified, complain about it. Provide a hint
+ * with list of valid options for the object.
+ */
+ initStringInfo(&buf);
+ for (opt = valid_options; opt->optname; opt++)
+ {
+ if (catalog == opt->optcontext)
+ appendStringInfo(&buf, "%s%s", (buf.len > 0) ? ", " : "",
+ opt->optname);
+ }
+
+ ereport(ERROR,
+ (errcode(ERRCODE_FDW_INVALID_OPTION_NAME),
+ errmsg("invalid option \"%s\"", def->defname),
+ errhint("Valid options in this context are: %s",
+ buf.data)));
+ }
+
+ /* Separate out filename, since ProcessCopyOptions won't allow it */
+ if (strcmp(def->defname, "filename") == 0)
+ {
+ if (filename)
+ ereport(ERROR,
+ (errcode(ERRCODE_SYNTAX_ERROR),
+ errmsg("conflicting or redundant options")));
+ filename = defGetString(def);
+ }
+ else
+ other_options = lappend(other_options, def);
+ }
+
+ /*
+ * Now apply the core COPY code's validation logic for more checks.
+ */
+ ProcessCopyOptions(NULL, true, other_options);
+
+ PG_RETURN_VOID();
+}
+
+/*
+ * Check if the provided option is one of the valid options.
+ * context is the Oid of the catalog holding the object the option is for.
+ */
+static bool
+is_valid_option(const char *option, Oid context)
+{
+ struct FileFdwOption *opt;
+
+ for (opt = valid_options; opt->optname; opt++)
+ {
+ if (context == opt->optcontext && strcmp(opt->optname, option) == 0)
+ return true;
+ }
+ return false;
+}
+
+/*
+ * Fetch the options for a file_fdw foreign table.
+ *
+ * We have to separate out "filename" from the other options because
+ * it must not appear in the options list passed to the core COPY code.
+ */
+static void
+fileGetOptions(Oid foreigntableid,
+ char **filename, List **other_options)
+{
+ ForeignTable *table;
+ ForeignServer *server;
+ ForeignDataWrapper *wrapper;
+ List *options;
+ ListCell *lc,
+ *prev;
+
+ /*
+ * Extract options from FDW objects. We ignore user mappings because
+ * file_fdw doesn't have any options that can be specified there.
+ *
+ * (XXX Actually, given the current contents of valid_options[], there's
+ * no point in examining anything except the foreign table's own options.
+ * Simplify?)
+ */
+ table = GetForeignTable(foreigntableid);
+ server = GetForeignServer(table->serverid);
+ wrapper = GetForeignDataWrapper(server->fdwid);
+
+ options = NIL;
+ options = list_concat(options, wrapper->options);
+ options = list_concat(options, server->options);
+ options = list_concat(options, table->options);
+
+ /*
+ * Separate out the filename.
+ */
+ *filename = NULL;
+ prev = NULL;
+ foreach(lc, options)
+ {
+ DefElem *def = (DefElem *) lfirst(lc);
+
+ if (strcmp(def->defname, "filename") == 0)
+ {
+ *filename = defGetString(def);
+ options = list_delete_cell(options, lc, prev);
+ break;
+ }
+ prev = lc;
+ }
+ if (*filename == NULL)
+ ereport(ERROR,
+ (errcode(ERRCODE_FDW_UNABLE_TO_CREATE_REPLY),
+ errmsg("filename is required for file_fdw foreign tables")));
+ *other_options = options;
+}
+
+/*
+ * filePlanForeignScan
+ * Create a FdwPlan for a scan on the foreign table
+ */
+static FdwPlan *
+filePlanForeignScan(Oid foreigntableid,
+ PlannerInfo *root,
+ RelOptInfo *baserel)
+{
+ FdwPlan *fdwplan;
+ char *filename;
+ List *options;
+
+ /* Fetch options --- we only need filename at this point */
+ fileGetOptions(foreigntableid, &filename, &options);
+
+ /* Construct FdwPlan with cost estimates */
+ fdwplan = makeNode(FdwPlan);
+ estimate_costs(root, baserel, filename,
+ &fdwplan->startup_cost, &fdwplan->total_cost);
+ fdwplan->fdw_private = NIL; /* not used */
+
+ return fdwplan;
+}
+
+/*
+ * fileExplainForeignScan
+ * Produce extra output for EXPLAIN
+ */
+static void
+fileExplainForeignScan(ForeignScanState *node, ExplainState *es)
+{
+ char *filename;
+ List *options;
+
+ /* Fetch options --- we only need filename at this point */
+ fileGetOptions(RelationGetRelid(node->ss.ss_currentRelation),
+ &filename, &options);
+
+ ExplainPropertyText("Foreign File", filename, es);
+
+ /* Suppress file size if we're not showing cost details */
+ if (es->costs)
+ {
+ struct stat stat_buf;
+
+ if (stat(filename, &stat_buf) == 0)
+ ExplainPropertyLong("Foreign File Size", (long) stat_buf.st_size,
+ es);
+ }
+}
+
+/*
+ * fileBeginForeignScan
+ * Initiate access to the file by creating CopyState
+ */
+static void
+fileBeginForeignScan(ForeignScanState *node, int eflags)
+{
+ char *filename;
+ List *options;
+ CopyState cstate;
+ FileFdwExecutionState *festate;
+
+ /*
+ * Do nothing in EXPLAIN (no ANALYZE) case. node->fdw_state stays NULL.
+ */
+ if (eflags & EXEC_FLAG_EXPLAIN_ONLY)
+ return;
+
+ /* Fetch options of foreign table */
+ fileGetOptions(RelationGetRelid(node->ss.ss_currentRelation),
+ &filename, &options);
+
+ /*
+ * Create CopyState from FDW options. We always acquire all columns, so
+ * as to match the expected ScanTupleSlot signature.
+ */
+ cstate = BeginCopyFrom(node->ss.ss_currentRelation,
+ filename,
+ NIL,
+ options);
+
+ /*
+ * Save state in node->fdw_state. We must save enough information to call
+ * BeginCopyFrom() again.
+ */
+ festate = (FileFdwExecutionState *) palloc(sizeof(FileFdwExecutionState));
+ festate->filename = filename;
+ festate->options = options;
+ festate->cstate = cstate;
+
+ node->fdw_state = (void *) festate;
+}
+
+/*
+ * fileIterateForeignScan
+ * Read next record from the data file and store it into the
+ * ScanTupleSlot as a virtual tuple
+ */
+static TupleTableSlot *
+fileIterateForeignScan(ForeignScanState *node)
+{
+ FileFdwExecutionState *festate = (FileFdwExecutionState *) node->fdw_state;
+ TupleTableSlot *slot = node->ss.ss_ScanTupleSlot;
+ bool found;
+ ErrorContextCallback errcontext;
+
+ /* Set up callback to identify error line number. */
+ errcontext.callback = CopyFromErrorCallback;
+ errcontext.arg = (void *) festate->cstate;
+ errcontext.previous = error_context_stack;
+ error_context_stack = &errcontext;
+
+ /*
+ * The protocol for loading a virtual tuple into a slot is first
+ * ExecClearTuple, then fill the values/isnull arrays, then
+ * ExecStoreVirtualTuple. If we don't find another row in the file, we
+ * just skip the last step, leaving the slot empty as required.
+ *
+ * We can pass ExprContext = NULL because we read all columns from the
+ * file, so no need to evaluate default expressions.
+ *
+ * We can also pass tupleOid = NULL because we don't allow oids for
+ * foreign tables.
+ */
+ ExecClearTuple(slot);
+ found = NextCopyFrom(festate->cstate, NULL,
+ slot->tts_values, slot->tts_isnull,
+ NULL);
+ if (found)
+ ExecStoreVirtualTuple(slot);
+
+ /* Remove error callback. */
+ error_context_stack = errcontext.previous;
+
+ return slot;
+}
+
+/*
+ * fileEndForeignScan
+ * Finish scanning foreign table and dispose objects used for this scan
+ */
+static void
+fileEndForeignScan(ForeignScanState *node)
+{
+ FileFdwExecutionState *festate = (FileFdwExecutionState *) node->fdw_state;
+
+ /* if festate is NULL, we are in EXPLAIN; nothing to do */
+ if (festate)
+ EndCopyFrom(festate->cstate);
+}
+
+/*
+ * fileReScanForeignScan
+ * Rescan table, possibly with new parameters
+ */
+static void
+fileReScanForeignScan(ForeignScanState *node)
+{
+ FileFdwExecutionState *festate = (FileFdwExecutionState *) node->fdw_state;
+
+ EndCopyFrom(festate->cstate);
+
+ festate->cstate = BeginCopyFrom(node->ss.ss_currentRelation,
+ festate->filename,
+ NIL,
+ festate->options);
+}
+
+/*
+ * Estimate costs of scanning a foreign table.
+ */
+static void
+estimate_costs(PlannerInfo *root, RelOptInfo *baserel,
+ const char *filename,
+ Cost *startup_cost, Cost *total_cost)
+{
+ struct stat stat_buf;
+ BlockNumber pages;
+ int tuple_width;
+ double ntuples;
+ double nrows;
+ Cost run_cost = 0;
+ Cost cpu_per_tuple;
+
+ /*
+ * Get size of the file. It might not be there at plan time, though, in
+ * which case we have to use a default estimate.
+ */
+ if (stat(filename, &stat_buf) < 0)
+ stat_buf.st_size = 10 * BLCKSZ;
+
+ /*
+ * Convert size to pages for use in I/O cost estimate below.
+ */
+ pages = (stat_buf.st_size + (BLCKSZ - 1)) / BLCKSZ;
+ if (pages < 1)
+ pages = 1;
+
+ /*
+ * Estimate the number of tuples in the file. We back into this estimate
+ * using the planner's idea of the relation width; which is bogus if not
+ * all columns are being read, not to mention that the text representation
+ * of a row probably isn't the same size as its internal representation.
+ * FIXME later.
+ */
+ tuple_width = MAXALIGN(baserel->width) + MAXALIGN(sizeof(HeapTupleHeaderData));
+
+ ntuples = clamp_row_est((double) stat_buf.st_size / (double) tuple_width);
+
+ /*
+ * Now estimate the number of rows returned by the scan after applying the
+ * baserestrictinfo quals. This is pretty bogus too, since the planner
+ * will have no stats about the relation, but it's better than nothing.
+ */
+ nrows = ntuples *
+ clauselist_selectivity(root,
+ baserel->baserestrictinfo,
+ 0,
+ JOIN_INNER,
+ NULL);
+
+ nrows = clamp_row_est(nrows);
+
+ /* Save the output-rows estimate for the planner */
+ baserel->rows = nrows;
+
+ /*
+ * Now estimate costs. We estimate costs almost the same way as
+ * cost_seqscan(), thus assuming that I/O costs are equivalent to a
+ * regular table file of the same size. However, we take per-tuple CPU
+ * costs as 10x of a seqscan, to account for the cost of parsing records.
+ */
+ run_cost += seq_page_cost * pages;
+
+ *startup_cost = baserel->baserestrictcost.startup;
+ cpu_per_tuple = cpu_tuple_cost * 10 + baserel->baserestrictcost.per_tuple;
+ run_cost += cpu_per_tuple * ntuples;
+ *total_cost = *startup_cost + run_cost;
+}
diff --git a/contrib/file_fdw/file_fdw.control b/contrib/file_fdw/file_fdw.control
new file mode 100644
index 0000000000..f0fccab53b
--- /dev/null
+++ b/contrib/file_fdw/file_fdw.control
@@ -0,0 +1,5 @@
+# file_fdw extension
+comment = 'foreign-data wrapper for flat file access'
+default_version = '1.0'
+module_pathname = '$libdir/file_fdw'
+relocatable = true
diff --git a/contrib/file_fdw/input/file_fdw.source b/contrib/file_fdw/input/file_fdw.source
new file mode 100644
index 0000000000..9ff7235a12
--- /dev/null
+++ b/contrib/file_fdw/input/file_fdw.source
@@ -0,0 +1,131 @@
+--
+-- Test foreign-data wrapper file_fdw.
+--
+
+-- Clean up in case a prior regression run failed
+SET client_min_messages TO 'error';
+DROP ROLE IF EXISTS file_fdw_superuser, file_fdw_user, no_priv_user;
+RESET client_min_messages;
+
+CREATE ROLE file_fdw_superuser LOGIN SUPERUSER; -- is a superuser
+CREATE ROLE file_fdw_user LOGIN; -- has priv and user mapping
+CREATE ROLE no_priv_user LOGIN; -- has priv but no user mapping
+
+-- Install file_fdw
+CREATE EXTENSION file_fdw;
+
+-- file_fdw_superuser owns fdw-related objects
+SET ROLE file_fdw_superuser;
+CREATE SERVER file_server FOREIGN DATA WRAPPER file_fdw;
+
+-- privilege tests
+SET ROLE file_fdw_user;
+CREATE FOREIGN DATA WRAPPER file_fdw2 HANDLER file_fdw_handler VALIDATOR file_fdw_validator; -- ERROR
+CREATE SERVER file_server2 FOREIGN DATA WRAPPER file_fdw; -- ERROR
+CREATE USER MAPPING FOR file_fdw_user SERVER file_server; -- ERROR
+
+SET ROLE file_fdw_superuser;
+GRANT USAGE ON FOREIGN SERVER file_server TO file_fdw_user;
+
+SET ROLE file_fdw_user;
+CREATE USER MAPPING FOR file_fdw_user SERVER file_server;
+
+-- create user mappings and grant privilege to test users
+SET ROLE file_fdw_superuser;
+CREATE USER MAPPING FOR file_fdw_superuser SERVER file_server;
+CREATE USER MAPPING FOR no_priv_user SERVER file_server;
+
+-- validator tests
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'xml'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', header 'true'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', quote ':'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', escape ':'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'binary', header 'true'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'binary', quote ':'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'binary', escape ':'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', delimiter 'a'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', escape '-'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', quote '-', null '=-='); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', delimiter '-', null '=-='); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', delimiter '-', quote '-'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', delimiter '---'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', quote '---'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', escape '---'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', delimiter '\'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', delimiter '.'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', delimiter '1'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', delimiter 'a'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', delimiter '
+'); -- ERROR
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', null '
+'); -- ERROR
+
+CREATE FOREIGN TABLE agg_text (
+ a int2,
+ b float4
+) SERVER file_server
+OPTIONS (format 'text', filename '@abs_srcdir@/data/agg.data', delimiter ' ', null '\N');
+GRANT SELECT ON agg_text TO file_fdw_user;
+CREATE FOREIGN TABLE agg_csv (
+ a int2,
+ b float4
+) SERVER file_server
+OPTIONS (format 'csv', filename '@abs_srcdir@/data/agg.csv', header 'true', delimiter ';', quote '@', escape '"', null '');
+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 '');
+
+-- basic query tests
+SELECT * FROM agg_text WHERE b > 10.0 ORDER BY a;
+SELECT * FROM agg_csv ORDER BY a;
+SELECT * FROM agg_csv c JOIN agg_text t ON (t.a = c.a) ORDER BY c.a;
+
+-- error context report tests
+SELECT * FROM agg_bad; -- ERROR
+
+-- misc query tests
+\t on
+EXPLAIN (VERBOSE, COSTS FALSE) SELECT * FROM agg_csv;
+\t off
+PREPARE st(int) AS SELECT * FROM agg_csv WHERE a = $1;
+EXECUTE st(100);
+EXECUTE st(100);
+DEALLOCATE st;
+
+-- tableoid
+SELECT tableoid::regclass, b FROM agg_csv;
+
+-- updates aren't supported
+INSERT INTO agg_csv VALUES(1,2.0);
+UPDATE agg_csv SET a = 1;
+DELETE FROM agg_csv WHERE a = 100;
+SELECT * FROM agg_csv FOR UPDATE OF agg_csv;
+-- but this should be ignored
+SELECT * FROM agg_csv FOR UPDATE;
+
+-- privilege tests
+SET ROLE file_fdw_superuser;
+SELECT * FROM agg_text ORDER BY a;
+SET ROLE file_fdw_user;
+SELECT * FROM agg_text ORDER BY a;
+SET ROLE no_priv_user;
+SELECT * FROM agg_text ORDER BY a; -- ERROR
+SET ROLE file_fdw_user;
+\t on
+EXPLAIN (VERBOSE, COSTS FALSE) SELECT * FROM agg_text WHERE a > 0;
+\t off
+
+-- privilege tests for object
+SET ROLE file_fdw_superuser;
+ALTER FOREIGN TABLE agg_text OWNER TO file_fdw_user;
+ALTER FOREIGN TABLE agg_text OPTIONS (SET format 'text');
+SET ROLE file_fdw_user;
+ALTER FOREIGN TABLE agg_text OPTIONS (SET format 'text');
+SET ROLE file_fdw_superuser;
+
+-- cleanup
+RESET ROLE;
+DROP EXTENSION file_fdw CASCADE;
+DROP ROLE file_fdw_superuser, file_fdw_user, no_priv_user;
diff --git a/contrib/file_fdw/output/file_fdw.source b/contrib/file_fdw/output/file_fdw.source
new file mode 100644
index 0000000000..2ba36c9368
--- /dev/null
+++ b/contrib/file_fdw/output/file_fdw.source
@@ -0,0 +1,225 @@
+--
+-- Test foreign-data wrapper file_fdw.
+--
+-- Clean up in case a prior regression run failed
+SET client_min_messages TO 'error';
+DROP ROLE IF EXISTS file_fdw_superuser, file_fdw_user, no_priv_user;
+RESET client_min_messages;
+CREATE ROLE file_fdw_superuser LOGIN SUPERUSER; -- is a superuser
+CREATE ROLE file_fdw_user LOGIN; -- has priv and user mapping
+CREATE ROLE no_priv_user LOGIN; -- has priv but no user mapping
+-- Install file_fdw
+CREATE EXTENSION file_fdw;
+-- file_fdw_superuser owns fdw-related objects
+SET ROLE file_fdw_superuser;
+CREATE SERVER file_server FOREIGN DATA WRAPPER file_fdw;
+-- privilege tests
+SET ROLE file_fdw_user;
+CREATE FOREIGN DATA WRAPPER file_fdw2 HANDLER file_fdw_handler VALIDATOR file_fdw_validator; -- ERROR
+ERROR: permission denied to create foreign-data wrapper "file_fdw2"
+HINT: Must be superuser to create a foreign-data wrapper.
+CREATE SERVER file_server2 FOREIGN DATA WRAPPER file_fdw; -- ERROR
+ERROR: permission denied for foreign-data wrapper file_fdw
+CREATE USER MAPPING FOR file_fdw_user SERVER file_server; -- ERROR
+ERROR: permission denied for foreign server file_server
+SET ROLE file_fdw_superuser;
+GRANT USAGE ON FOREIGN SERVER file_server TO file_fdw_user;
+SET ROLE file_fdw_user;
+CREATE USER MAPPING FOR file_fdw_user SERVER file_server;
+-- create user mappings and grant privilege to test users
+SET ROLE file_fdw_superuser;
+CREATE USER MAPPING FOR file_fdw_superuser SERVER file_server;
+CREATE USER MAPPING FOR no_priv_user SERVER file_server;
+-- validator tests
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'xml'); -- ERROR
+ERROR: COPY format "xml" not recognized
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', header 'true'); -- ERROR
+ERROR: COPY HEADER available only in CSV mode
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', quote ':'); -- ERROR
+ERROR: COPY quote available only in CSV mode
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', escape ':'); -- ERROR
+ERROR: COPY escape available only in CSV mode
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'binary', header 'true'); -- ERROR
+ERROR: COPY HEADER available only in CSV mode
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'binary', quote ':'); -- ERROR
+ERROR: COPY quote available only in CSV mode
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'binary', escape ':'); -- ERROR
+ERROR: COPY escape available only in CSV mode
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', delimiter 'a'); -- ERROR
+ERROR: COPY delimiter cannot be "a"
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', escape '-'); -- ERROR
+ERROR: COPY escape available only in CSV mode
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', quote '-', null '=-='); -- ERROR
+ERROR: CSV quote character must not appear in the NULL specification
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', delimiter '-', null '=-='); -- ERROR
+ERROR: COPY delimiter must not appear in the NULL specification
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', delimiter '-', quote '-'); -- ERROR
+ERROR: COPY delimiter and quote must be different
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', delimiter '---'); -- ERROR
+ERROR: COPY delimiter must be a single one-byte character
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', quote '---'); -- ERROR
+ERROR: COPY quote must be a single one-byte character
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', escape '---'); -- ERROR
+ERROR: COPY escape must be a single one-byte character
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', delimiter '\'); -- ERROR
+ERROR: COPY delimiter cannot be "\"
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', delimiter '.'); -- ERROR
+ERROR: COPY delimiter cannot be "."
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', delimiter '1'); -- ERROR
+ERROR: COPY delimiter cannot be "1"
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'text', delimiter 'a'); -- ERROR
+ERROR: COPY delimiter cannot be "a"
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', delimiter '
+'); -- ERROR
+ERROR: COPY delimiter cannot be newline or carriage return
+CREATE FOREIGN TABLE tbl () SERVER file_server OPTIONS (format 'csv', null '
+'); -- ERROR
+ERROR: COPY null representation cannot use newline or carriage return
+CREATE FOREIGN TABLE agg_text (
+ a int2,
+ b float4
+) SERVER file_server
+OPTIONS (format 'text', filename '@abs_srcdir@/data/agg.data', delimiter ' ', null '\N');
+GRANT SELECT ON agg_text TO file_fdw_user;
+CREATE FOREIGN TABLE agg_csv (
+ a int2,
+ b float4
+) SERVER file_server
+OPTIONS (format 'csv', filename '@abs_srcdir@/data/agg.csv', header 'true', delimiter ';', quote '@', escape '"', null '');
+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 '');
+-- basic query tests
+SELECT * FROM agg_text WHERE b > 10.0 ORDER BY a;
+ a | b
+-----+--------
+ 42 | 324.78
+ 100 | 99.097
+(2 rows)
+
+SELECT * FROM agg_csv ORDER BY a;
+ a | b
+-----+---------
+ 0 | 0.09561
+ 42 | 324.78
+ 100 | 99.097
+(3 rows)
+
+SELECT * FROM agg_csv c JOIN agg_text t ON (t.a = c.a) ORDER BY c.a;
+ a | b | a | b
+-----+---------+-----+---------
+ 0 | 0.09561 | 0 | 0.09561
+ 42 | 324.78 | 42 | 324.78
+ 100 | 99.097 | 100 | 99.097
+(3 rows)
+
+-- error context report tests
+SELECT * FROM agg_bad; -- ERROR
+ERROR: invalid input syntax for type real: "aaa"
+CONTEXT: COPY agg_bad, line 3, column b: "aaa"
+-- misc query tests
+\t on
+EXPLAIN (VERBOSE, COSTS FALSE) SELECT * FROM agg_csv;
+ Foreign Scan on public.agg_csv
+ Output: a, b
+ Foreign File: @abs_srcdir@/data/agg.csv
+
+\t off
+PREPARE st(int) AS SELECT * FROM agg_csv WHERE a = $1;
+EXECUTE st(100);
+ a | b
+-----+--------
+ 100 | 99.097
+(1 row)
+
+EXECUTE st(100);
+ a | b
+-----+--------
+ 100 | 99.097
+(1 row)
+
+DEALLOCATE st;
+-- tableoid
+SELECT tableoid::regclass, b FROM agg_csv;
+ tableoid | b
+----------+---------
+ agg_csv | 99.097
+ agg_csv | 0.09561
+ agg_csv | 324.78
+(3 rows)
+
+-- updates aren't supported
+INSERT INTO agg_csv VALUES(1,2.0);
+ERROR: cannot change foreign table "agg_csv"
+UPDATE agg_csv SET a = 1;
+ERROR: cannot change foreign table "agg_csv"
+DELETE FROM agg_csv WHERE a = 100;
+ERROR: cannot change foreign table "agg_csv"
+SELECT * FROM agg_csv FOR UPDATE OF agg_csv;
+ERROR: SELECT FOR UPDATE/SHARE cannot be used with foreign table "agg_csv"
+LINE 1: SELECT * FROM agg_csv FOR UPDATE OF agg_csv;
+ ^
+-- but this should be ignored
+SELECT * FROM agg_csv FOR UPDATE;
+ a | b
+-----+---------
+ 100 | 99.097
+ 0 | 0.09561
+ 42 | 324.78
+(3 rows)
+
+-- privilege tests
+SET ROLE file_fdw_superuser;
+SELECT * FROM agg_text ORDER BY a;
+ a | b
+-----+---------
+ 0 | 0.09561
+ 42 | 324.78
+ 56 | 7.8
+ 100 | 99.097
+(4 rows)
+
+SET ROLE file_fdw_user;
+SELECT * FROM agg_text ORDER BY a;
+ a | b
+-----+---------
+ 0 | 0.09561
+ 42 | 324.78
+ 56 | 7.8
+ 100 | 99.097
+(4 rows)
+
+SET ROLE no_priv_user;
+SELECT * FROM agg_text ORDER BY a; -- ERROR
+ERROR: permission denied for relation agg_text
+SET ROLE file_fdw_user;
+\t on
+EXPLAIN (VERBOSE, COSTS FALSE) SELECT * FROM agg_text WHERE a > 0;
+ Foreign Scan on public.agg_text
+ Output: a, b
+ Filter: (agg_text.a > 0)
+ Foreign File: @abs_srcdir@/data/agg.data
+
+\t off
+-- privilege tests for object
+SET ROLE file_fdw_superuser;
+ALTER FOREIGN TABLE agg_text OWNER TO file_fdw_user;
+ALTER FOREIGN TABLE agg_text OPTIONS (SET format 'text');
+SET ROLE file_fdw_user;
+ALTER FOREIGN TABLE agg_text OPTIONS (SET format 'text');
+ERROR: only superuser can change options of a file_fdw foreign table
+SET ROLE file_fdw_superuser;
+-- cleanup
+RESET ROLE;
+DROP EXTENSION file_fdw CASCADE;
+NOTICE: drop cascades to 7 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 foreign table agg_text
+drop cascades to foreign table agg_csv
+drop cascades to foreign table agg_bad
+DROP ROLE file_fdw_superuser, file_fdw_user, no_priv_user;
diff --git a/contrib/file_fdw/sql/.gitignore b/contrib/file_fdw/sql/.gitignore
new file mode 100644
index 0000000000..ebf16fed94
--- /dev/null
+++ b/contrib/file_fdw/sql/.gitignore
@@ -0,0 +1 @@
+/file_fdw.sql
diff --git a/contrib/fuzzystrmatch/Makefile b/contrib/fuzzystrmatch/Makefile
index 723830950d..834b679b10 100644
--- a/contrib/fuzzystrmatch/Makefile
+++ b/contrib/fuzzystrmatch/Makefile
@@ -1,9 +1,10 @@
-# $PostgreSQL: pgsql/contrib/fuzzystrmatch/Makefile,v 1.10 2007/11/10 23:59:50 momjian Exp $
+# contrib/fuzzystrmatch/Makefile
MODULE_big = fuzzystrmatch
OBJS = fuzzystrmatch.o dmetaphone.o
-DATA_built = fuzzystrmatch.sql
-DATA = uninstall_fuzzystrmatch.sql
+
+EXTENSION = fuzzystrmatch
+DATA = fuzzystrmatch--1.0.sql fuzzystrmatch--unpackaged--1.0.sql
ifdef USE_PGXS
PG_CONFIG = pg_config
@@ -15,3 +16,6 @@ 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 f23a3a2aa6..6721e58f22 100644
--- a/contrib/fuzzystrmatch/dmetaphone.c
+++ b/contrib/fuzzystrmatch/dmetaphone.c
@@ -1,7 +1,7 @@
/*
* This is a port of the Double Metaphone algorithm for use in PostgreSQL.
*
- * $PostgreSQL: pgsql/contrib/fuzzystrmatch/dmetaphone.c,v 1.15 2010/07/06 19:18:55 momjian Exp $
+ * contrib/fuzzystrmatch/dmetaphone.c
*
* Double Metaphone computes 2 "sounds like" strings - a primary and an
* alternate. In most cases they are the same, but for foreign names
diff --git a/contrib/fuzzystrmatch/fuzzystrmatch--1.0.sql b/contrib/fuzzystrmatch/fuzzystrmatch--1.0.sql
new file mode 100644
index 0000000000..d9b8987adf
--- /dev/null
+++ b/contrib/fuzzystrmatch/fuzzystrmatch--1.0.sql
@@ -0,0 +1,41 @@
+/* contrib/fuzzystrmatch/fuzzystrmatch--1.0.sql */
+
+CREATE FUNCTION levenshtein (text,text) RETURNS int
+AS 'MODULE_PATHNAME','levenshtein'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION levenshtein (text,text,int,int,int) RETURNS int
+AS 'MODULE_PATHNAME','levenshtein_with_costs'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION levenshtein_less_equal (text,text,int) RETURNS int
+AS 'MODULE_PATHNAME','levenshtein_less_equal'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION levenshtein_less_equal (text,text,int,int,int,int) RETURNS int
+AS 'MODULE_PATHNAME','levenshtein_less_equal_with_costs'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION metaphone (text,int) RETURNS text
+AS 'MODULE_PATHNAME','metaphone'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION soundex(text) RETURNS text
+AS 'MODULE_PATHNAME', 'soundex'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION text_soundex(text) RETURNS text
+AS 'MODULE_PATHNAME', 'soundex'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION difference(text,text) RETURNS int
+AS 'MODULE_PATHNAME', 'difference'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION dmetaphone (text) RETURNS text
+AS 'MODULE_PATHNAME', 'dmetaphone'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION dmetaphone_alt (text) RETURNS text
+AS 'MODULE_PATHNAME', 'dmetaphone_alt'
+LANGUAGE C IMMUTABLE STRICT;
diff --git a/contrib/fuzzystrmatch/fuzzystrmatch--unpackaged--1.0.sql b/contrib/fuzzystrmatch/fuzzystrmatch--unpackaged--1.0.sql
new file mode 100644
index 0000000000..b99510bcdd
--- /dev/null
+++ b/contrib/fuzzystrmatch/fuzzystrmatch--unpackaged--1.0.sql
@@ -0,0 +1,20 @@
+/* contrib/fuzzystrmatch/fuzzystrmatch--unpackaged--1.0.sql */
+
+ALTER EXTENSION fuzzystrmatch ADD function levenshtein(text,text);
+ALTER EXTENSION fuzzystrmatch ADD function levenshtein(text,text,integer,integer,integer);
+ALTER EXTENSION fuzzystrmatch ADD function metaphone(text,integer);
+ALTER EXTENSION fuzzystrmatch ADD function soundex(text);
+ALTER EXTENSION fuzzystrmatch ADD function text_soundex(text);
+ALTER EXTENSION fuzzystrmatch ADD function difference(text,text);
+ALTER EXTENSION fuzzystrmatch ADD function dmetaphone(text);
+ALTER EXTENSION fuzzystrmatch ADD function dmetaphone_alt(text);
+
+-- these functions were not in 9.0
+
+CREATE FUNCTION levenshtein_less_equal (text,text,int) RETURNS int
+AS 'MODULE_PATHNAME','levenshtein_less_equal'
+LANGUAGE C IMMUTABLE STRICT;
+
+CREATE FUNCTION levenshtein_less_equal (text,text,int,int,int,int) RETURNS int
+AS 'MODULE_PATHNAME','levenshtein_less_equal_with_costs'
+LANGUAGE C IMMUTABLE STRICT;
diff --git a/contrib/fuzzystrmatch/fuzzystrmatch.c b/contrib/fuzzystrmatch/fuzzystrmatch.c
index 0bf7c681a1..782bc1e4d4 100644
--- a/contrib/fuzzystrmatch/fuzzystrmatch.c
+++ b/contrib/fuzzystrmatch/fuzzystrmatch.c
@@ -5,19 +5,10 @@
*
* Joe Conway <[email protected]>
*
- * $PostgreSQL: pgsql/contrib/fuzzystrmatch/fuzzystrmatch.c,v 1.32 2010/01/02 16:57:32 momjian Exp $
- * Copyright (c) 2001-2010, PostgreSQL Global Development Group
+ * contrib/fuzzystrmatch/fuzzystrmatch.c
+ * Copyright (c) 2001-2011, PostgreSQL Global Development Group
* ALL RIGHTS RESERVED;
*
- * levenshtein()
- * -------------
- * Written based on a description of the algorithm by Michael Gilleland
- * found at http://www.merriampark.com/ld.htm
- * Also looked at levenshtein.c in the PHP 4.0.6 distribution for
- * inspiration.
- * Configurable penalty costs extension is introduced by Volkan
- * YAZICI <[email protected]>.
- *
* metaphone()
* -----------
* Modified for PostgreSQL by Joe Conway.
@@ -50,6 +41,7 @@
#include <ctype.h>
#include "fmgr.h"
+#include "mb/pg_wchar.h"
#include "utils/builtins.h"
PG_MODULE_MAGIC;
@@ -60,6 +52,8 @@ PG_MODULE_MAGIC;
*/
extern Datum levenshtein_with_costs(PG_FUNCTION_ARGS);
extern Datum levenshtein(PG_FUNCTION_ARGS);
+extern Datum levenshtein_less_equal_with_costs(PG_FUNCTION_ARGS);
+extern Datum levenshtein_less_equal(PG_FUNCTION_ARGS);
extern Datum metaphone(PG_FUNCTION_ARGS);
extern Datum soundex(PG_FUNCTION_ARGS);
extern Datum difference(PG_FUNCTION_ARGS);
@@ -84,16 +78,6 @@ soundex_code(char letter)
return letter;
}
-
-/*
- * Levenshtein
- */
-#define MAX_LEVENSHTEIN_STRLEN 255
-
-static int levenshtein_internal(const char *s, const char *t,
- int ins_c, int del_c, int sub_c);
-
-
/*
* Metaphone
*/
@@ -183,113 +167,29 @@ getcode(char c)
/* These prevent GH from becoming F */
#define NOGHTOF(c) (getcode(c) & 16) /* BDH */
-
-/*
- * levenshtein_internal - Calculates Levenshtein distance metric
- * between supplied strings. Generally
- * (1, 1, 1) penalty costs suffices common
- * cases, but your mileage may vary.
- */
-static int
-levenshtein_internal(const char *s, const char *t,
- int ins_c, int del_c, int sub_c)
+/* Faster than memcmp(), for this use case. */
+static bool inline
+rest_of_char_same(const char *s1, const char *s2, int len)
{
- int m,
- n;
- int *prev;
- int *curr;
- int i,
- j;
- const char *x;
- const char *y;
-
- m = strlen(s);
- n = strlen(t);
-
- /*
- * We can transform an empty s into t with n insertions, or a non-empty t
- * into an empty s with m deletions.
- */
- if (!m)
- return n * ins_c;
- if (!n)
- return m * del_c;
-
- /*
- * For security concerns, restrict excessive CPU+RAM usage. (This
- * implementation uses O(m) memory and has O(mn) complexity.)
- */
- if (m > MAX_LEVENSHTEIN_STRLEN ||
- n > MAX_LEVENSHTEIN_STRLEN)
- ereport(ERROR,
- (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
- errmsg("argument exceeds the maximum length of %d bytes",
- MAX_LEVENSHTEIN_STRLEN)));
-
- /* One more cell for initialization column and row. */
- ++m;
- ++n;
-
- /*
- * Instead of building an (m+1)x(n+1) array, we'll use two different
- * arrays of size m+1 for storing accumulated values. At each step one
- * represents the "previous" row and one is the "current" row of the
- * notional large array.
- */
- prev = (int *) palloc(2 * m * sizeof(int));
- curr = prev + m;
-
- /* Initialize the "previous" row to 0..cols */
- for (i = 0; i < m; i++)
- prev[i] = i * del_c;
-
- /* Loop through rows of the notional array */
- for (y = t, j = 1; j < n; y++, j++)
+ while (len > 0)
{
- int *temp;
-
- /*
- * First cell must increment sequentially, as we're on the j'th row of
- * the (m+1)x(n+1) array.
- */
- curr[0] = j * ins_c;
-
- for (x = s, i = 1; i < m; x++, i++)
- {
- int ins;
- int del;
- int sub;
-
- /* Calculate costs for probable operations. */
- ins = prev[i] + ins_c; /* Insertion */
- del = curr[i - 1] + del_c; /* Deletion */
- sub = prev[i - 1] + ((*x == *y) ? 0 : sub_c); /* Substitution */
-
- /* Take the one with minimum cost. */
- curr[i] = Min(ins, del);
- curr[i] = Min(curr[i], sub);
- }
-
- /* Swap current row with previous row. */
- temp = curr;
- curr = prev;
- prev = temp;
+ len--;
+ if (s1[len] != s2[len])
+ return false;
}
-
- /*
- * Because the final value was swapped from the previous row to the
- * current row, that's where we'll find it.
- */
- return prev[m - 1];
+ 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)
{
- char *src = TextDatumGetCString(PG_GETARG_DATUM(0));
- char *dst = TextDatumGetCString(PG_GETARG_DATUM(1));
+ text *src = PG_GETARG_TEXT_PP(0);
+ text *dst = PG_GETARG_TEXT_PP(1);
int ins_c = PG_GETARG_INT32(2);
int del_c = PG_GETARG_INT32(3);
int sub_c = PG_GETARG_INT32(4);
@@ -302,13 +202,40 @@ PG_FUNCTION_INFO_V1(levenshtein);
Datum
levenshtein(PG_FUNCTION_ARGS)
{
- char *src = TextDatumGetCString(PG_GETARG_DATUM(0));
- char *dst = TextDatumGetCString(PG_GETARG_DATUM(1));
+ text *src = PG_GETARG_TEXT_PP(0);
+ text *dst = PG_GETARG_TEXT_PP(1);
PG_RETURN_INT32(levenshtein_internal(src, dst, 1, 1, 1));
}
+PG_FUNCTION_INFO_V1(levenshtein_less_equal_with_costs);
+Datum
+levenshtein_less_equal_with_costs(PG_FUNCTION_ARGS)
+{
+ text *src = PG_GETARG_TEXT_PP(0);
+ text *dst = PG_GETARG_TEXT_PP(1);
+ int ins_c = PG_GETARG_INT32(2);
+ 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));
+}
+
+
+PG_FUNCTION_INFO_V1(levenshtein_less_equal);
+Datum
+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));
+}
+
+
/*
* Calculates the metaphone of an input string.
* Returns number of characters requested
diff --git a/contrib/fuzzystrmatch/fuzzystrmatch.control b/contrib/fuzzystrmatch/fuzzystrmatch.control
new file mode 100644
index 0000000000..e257f09611
--- /dev/null
+++ b/contrib/fuzzystrmatch/fuzzystrmatch.control
@@ -0,0 +1,5 @@
+# fuzzystrmatch extension
+comment = 'determine similarities and distance between strings'
+default_version = '1.0'
+module_pathname = '$libdir/fuzzystrmatch'
+relocatable = true
diff --git a/contrib/fuzzystrmatch/fuzzystrmatch.sql.in b/contrib/fuzzystrmatch/fuzzystrmatch.sql.in
deleted file mode 100644
index cab78997fa..0000000000
--- a/contrib/fuzzystrmatch/fuzzystrmatch.sql.in
+++ /dev/null
@@ -1,36 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/fuzzystrmatch/fuzzystrmatch.sql.in,v 1.10 2008/04/03 21:13:07 tgl Exp $ */
-
--- Adjust this setting to control where the objects get created.
-SET search_path = public;
-
-CREATE OR REPLACE FUNCTION levenshtein (text,text) RETURNS int
-AS 'MODULE_PATHNAME','levenshtein'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION levenshtein (text,text,int,int,int) RETURNS int
-AS 'MODULE_PATHNAME','levenshtein_with_costs'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION metaphone (text,int) RETURNS text
-AS 'MODULE_PATHNAME','metaphone'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION soundex(text) RETURNS text
-AS 'MODULE_PATHNAME', 'soundex'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION text_soundex(text) RETURNS text
-AS 'MODULE_PATHNAME', 'soundex'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION difference(text,text) RETURNS int
-AS 'MODULE_PATHNAME', 'difference'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION dmetaphone (text) RETURNS text
-AS 'MODULE_PATHNAME', 'dmetaphone'
-LANGUAGE C IMMUTABLE STRICT;
-
-CREATE OR REPLACE FUNCTION dmetaphone_alt (text) RETURNS text
-AS 'MODULE_PATHNAME', 'dmetaphone_alt'
-LANGUAGE C IMMUTABLE STRICT;
diff --git a/contrib/fuzzystrmatch/levenshtein.c b/contrib/fuzzystrmatch/levenshtein.c
new file mode 100644
index 0000000000..a84c46a4a4
--- /dev/null
+++ b/contrib/fuzzystrmatch/levenshtein.c
@@ -0,0 +1,403 @@
+/*
+ * levenshtein.c
+ *
+ * Functions for "fuzzy" comparison of strings
+ *
+ * Joe Conway <[email protected]>
+ *
+ * Copyright (c) 2001-2011, PostgreSQL Global Development Group
+ * ALL RIGHTS RESERVED;
+ *
+ * levenshtein()
+ * -------------
+ * Written based on a description of the algorithm by Michael Gilleland
+ * found at http://www.merriampark.com/ld.htm
+ * Also looked at levenshtein.c in the PHP 4.0.6 distribution for
+ * inspiration.
+ * Configurable penalty costs extension is introduced by Volkan
+ * YAZICI <[email protected]>.
+ */
+
+/*
+ * External declarations for exported functions
+ */
+#ifdef LEVENSHTEIN_LESS_EQUAL
+static int levenshtein_less_equal_internal(text *s, text *t,
+ int ins_c, int del_c, int sub_c, int max_d);
+#else
+static int levenshtein_internal(text *s, text *t,
+ int ins_c, int del_c, int sub_c);
+#endif
+
+#define MAX_LEVENSHTEIN_STRLEN 255
+
+
+/*
+ * Calculates Levenshtein distance metric between supplied strings. Generally
+ * (1, 1, 1) penalty costs suffices for common cases, but your mileage may
+ * vary.
+ *
+ * One way to compute Levenshtein distance is to incrementally construct
+ * an (m+1)x(n+1) matrix where cell (i, j) represents the minimum number
+ * of operations required to transform the first i characters of s into
+ * the first j characters of t. The last column of the final row is the
+ * answer.
+ *
+ * We use that algorithm here with some modification. In lieu of holding
+ * the entire array in memory at once, we'll just use two arrays of size
+ * m+1 for storing accumulated values. At each step one array represents
+ * the "previous" row and one is the "current" row of the notional large
+ * array.
+ *
+ * If max_d >= 0, we only need to provide an accurate answer when that answer
+ * is less than or equal to the bound. From any cell in the matrix, there is
+ * theoretical "minimum residual distance" from that cell to the last column
+ * of the final row. This minimum residual distance is zero when the
+ * untransformed portions of the strings are of equal length (because we might
+ * get lucky and find all the remaining characters matching) and is otherwise
+ * based on the minimum number of insertions or deletions needed to make them
+ * equal length. The residual distance grows as we move toward the upper
+ * right or lower left corners of the matrix. When the max_d bound is
+ * usefully tight, we can use this property to avoid computing the entirety
+ * of each row; instead, we maintain a start_column and stop_column that
+ * identify the portion of the matrix close to the diagonal which can still
+ * affect the final answer.
+ */
+static int
+#ifdef LEVENSHTEIN_LESS_EQUAL
+levenshtein_less_equal_internal(text *s, text *t,
+ int ins_c, int del_c, int sub_c, int max_d)
+#else
+levenshtein_internal(text *s, text *t,
+ int ins_c, int del_c, int sub_c)
+#endif
+{
+ int m,
+ n,
+ s_bytes,
+ t_bytes;
+ int *prev;
+ int *curr;
+ int *s_char_len = NULL;
+ int i,
+ j;
+ const char *s_data;
+ const char *t_data;
+ const char *y;
+
+ /*
+ * For levenshtein_less_equal_internal, we have real variables called
+ * start_column and stop_column; otherwise it's just short-hand for 0 and
+ * m.
+ */
+#ifdef LEVENSHTEIN_LESS_EQUAL
+ int start_column,
+ stop_column;
+
+#undef START_COLUMN
+#undef STOP_COLUMN
+#define START_COLUMN start_column
+#define STOP_COLUMN stop_column
+#else
+#undef START_COLUMN
+#undef STOP_COLUMN
+#define START_COLUMN 0
+#define STOP_COLUMN m
+#endif
+
+ /* Extract a pointer to the actual character data. */
+ s_data = VARDATA_ANY(s);
+ t_data = VARDATA_ANY(t);
+
+ /* Determine length of each string in bytes and characters. */
+ s_bytes = VARSIZE_ANY_EXHDR(s);
+ t_bytes = VARSIZE_ANY_EXHDR(t);
+ m = pg_mbstrlen_with_len(s_data, s_bytes);
+ n = pg_mbstrlen_with_len(t_data, t_bytes);
+
+ /*
+ * We can transform an empty s into t with n insertions, or a non-empty t
+ * into an empty s with m deletions.
+ */
+ if (!m)
+ return n * ins_c;
+ if (!n)
+ return m * del_c;
+
+ /*
+ * For security concerns, restrict excessive CPU+RAM usage. (This
+ * implementation uses O(m) memory and has O(mn) complexity.)
+ */
+ if (m > MAX_LEVENSHTEIN_STRLEN ||
+ n > MAX_LEVENSHTEIN_STRLEN)
+ ereport(ERROR,
+ (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
+ errmsg("argument exceeds the maximum length of %d bytes",
+ MAX_LEVENSHTEIN_STRLEN)));
+
+#ifdef LEVENSHTEIN_LESS_EQUAL
+ /* Initialize start and stop columns. */
+ start_column = 0;
+ stop_column = m + 1;
+
+ /*
+ * If max_d >= 0, determine whether the bound is impossibly tight. If so,
+ * return max_d + 1 immediately. Otherwise, determine whether it's tight
+ * enough to limit the computation we must perform. If so, figure out
+ * initial stop column.
+ */
+ if (max_d >= 0)
+ {
+ int min_theo_d; /* Theoretical minimum distance. */
+ int max_theo_d; /* Theoretical maximum distance. */
+ int net_inserts = n - m;
+
+ min_theo_d = net_inserts < 0 ?
+ -net_inserts * del_c : net_inserts * ins_c;
+ if (min_theo_d > max_d)
+ return max_d + 1;
+ if (ins_c + del_c < sub_c)
+ sub_c = ins_c + del_c;
+ max_theo_d = min_theo_d + sub_c * Min(m, n);
+ if (max_d >= max_theo_d)
+ max_d = -1;
+ else if (ins_c + del_c > 0)
+ {
+ /*
+ * Figure out how much of the first row of the notional matrix we
+ * need to fill in. If the string is growing, the theoretical
+ * minimum distance already incorporates the cost of deleting the
+ * number of characters necessary to make the two strings equal in
+ * length. Each additional deletion forces another insertion, so
+ * the best-case total cost increases by ins_c + del_c. If the
+ * string is shrinking, the minimum theoretical cost assumes no
+ * excess deletions; that is, we're starting no futher right than
+ * column n - m. If we do start further right, the best-case
+ * total cost increases by ins_c + del_c for each move right.
+ */
+ int slack_d = max_d - min_theo_d;
+ int best_column = net_inserts < 0 ? -net_inserts : 0;
+
+ stop_column = best_column + (slack_d / (ins_c + del_c)) + 1;
+ if (stop_column > m)
+ stop_column = m + 1;
+ }
+ }
+#endif
+
+ /*
+ * In order to avoid calling pg_mblen() repeatedly on each character in s,
+ * we cache all the lengths before starting the main loop -- but if all
+ * the characters in both strings are single byte, then we skip this and
+ * use a fast-path in the main loop. If only one string contains
+ * multi-byte characters, we still build the array, so that the fast-path
+ * needn't deal with the case where the array hasn't been initialized.
+ */
+ if (m != s_bytes || n != t_bytes)
+ {
+ int i;
+ const char *cp = s_data;
+
+ s_char_len = (int *) palloc((m + 1) * sizeof(int));
+ for (i = 0; i < m; ++i)
+ {
+ s_char_len[i] = pg_mblen(cp);
+ cp += s_char_len[i];
+ }
+ s_char_len[i] = 0;
+ }
+
+ /* One more cell for initialization column and row. */
+ ++m;
+ ++n;
+
+ /* Previous and current rows of notional array. */
+ prev = (int *) palloc(2 * m * sizeof(int));
+ curr = prev + m;
+
+ /*
+ * To transform the first i characters of s into the first 0 characters of
+ * t, we must perform i deletions.
+ */
+ for (i = START_COLUMN; i < STOP_COLUMN; i++)
+ prev[i] = i * del_c;
+
+ /* Loop through rows of the notional array */
+ for (y = t_data, j = 1; j < n; j++)
+ {
+ int *temp;
+ const char *x = s_data;
+ int y_char_len = n != t_bytes + 1 ? pg_mblen(y) : 1;
+
+#ifdef LEVENSHTEIN_LESS_EQUAL
+
+ /*
+ * In the best case, values percolate down the diagonal unchanged, so
+ * we must increment stop_column unless it's already on the right end
+ * of the array. The inner loop will read prev[stop_column], so we
+ * have to initialize it even though it shouldn't affect the result.
+ */
+ if (stop_column < m)
+ {
+ prev[stop_column] = max_d + 1;
+ ++stop_column;
+ }
+
+ /*
+ * The main loop fills in curr, but curr[0] needs a special case: to
+ * transform the first 0 characters of s into the first j characters
+ * of t, we must perform j insertions. However, if start_column > 0,
+ * this special case does not apply.
+ */
+ if (start_column == 0)
+ {
+ curr[0] = j * ins_c;
+ i = 1;
+ }
+ else
+ i = start_column;
+#else
+ curr[0] = j * ins_c;
+ i = 1;
+#endif
+
+ /*
+ * This inner loop is critical to performance, so we include a
+ * fast-path to handle the (fairly common) case where no multibyte
+ * characters are in the mix. The fast-path is entitled to assume
+ * that if s_char_len is not initialized then BOTH strings contain
+ * only single-byte characters.
+ */
+ if (s_char_len != NULL)
+ {
+ for (; i < STOP_COLUMN; i++)
+ {
+ int ins;
+ int del;
+ int sub;
+ int x_char_len = s_char_len[i - 1];
+
+ /*
+ * Calculate costs for insertion, deletion, and substitution.
+ *
+ * When calculating cost for substitution, we compare the last
+ * character of each possibly-multibyte character first,
+ * because that's enough to rule out most mis-matches. If we
+ * get past that test, then we compare the lengths and the
+ * remaining bytes.
+ */
+ ins = prev[i] + ins_c;
+ del = curr[i - 1] + del_c;
+ if (x[x_char_len - 1] == y[y_char_len - 1]
+ && x_char_len == y_char_len &&
+ (x_char_len == 1 || rest_of_char_same(x, y, x_char_len)))
+ sub = prev[i - 1];
+ else
+ sub = prev[i - 1] + sub_c;
+
+ /* Take the one with minimum cost. */
+ curr[i] = Min(ins, del);
+ curr[i] = Min(curr[i], sub);
+
+ /* Point to next character. */
+ x += x_char_len;
+ }
+ }
+ else
+ {
+ for (; i < STOP_COLUMN; i++)
+ {
+ int ins;
+ int del;
+ int sub;
+
+ /* Calculate costs for insertion, deletion, and substitution. */
+ ins = prev[i] + ins_c;
+ del = curr[i - 1] + del_c;
+ sub = prev[i - 1] + ((*x == *y) ? 0 : sub_c);
+
+ /* Take the one with minimum cost. */
+ curr[i] = Min(ins, del);
+ curr[i] = Min(curr[i], sub);
+
+ /* Point to next character. */
+ x++;
+ }
+ }
+
+ /* Swap current row with previous row. */
+ temp = curr;
+ curr = prev;
+ prev = temp;
+
+ /* Point to next character. */
+ y += y_char_len;
+
+#ifdef LEVENSHTEIN_LESS_EQUAL
+
+ /*
+ * This chunk of code represents a significant performance hit if used
+ * in the case where there is no max_d bound. This is probably not
+ * because the max_d >= 0 test itself is expensive, but rather because
+ * the possibility of needing to execute this code prevents tight
+ * optimization of the loop as a whole.
+ */
+ if (max_d >= 0)
+ {
+ /*
+ * The "zero point" is the column of the current row where the
+ * remaining portions of the strings are of equal length. There
+ * are (n - 1) characters in the target string, of which j have
+ * been transformed. There are (m - 1) characters in the source
+ * string, so we want to find the value for zp where where (n - 1)
+ * - j = (m - 1) - zp.
+ */
+ int zp = j - (n - m);
+
+ /* Check whether the stop column can slide left. */
+ while (stop_column > 0)
+ {
+ int ii = stop_column - 1;
+ int net_inserts = ii - zp;
+
+ if (prev[ii] + (net_inserts > 0 ? net_inserts * ins_c :
+ -net_inserts * del_c) <= max_d)
+ break;
+ stop_column--;
+ }
+
+ /* Check whether the start column can slide right. */
+ while (start_column < stop_column)
+ {
+ int net_inserts = start_column - zp;
+
+ if (prev[start_column] +
+ (net_inserts > 0 ? net_inserts * ins_c :
+ -net_inserts * del_c) <= max_d)
+ break;
+
+ /*
+ * We'll never again update these values, so we must make sure
+ * there's nothing here that could confuse any future
+ * iteration of the outer loop.
+ */
+ prev[start_column] = max_d + 1;
+ curr[start_column] = max_d + 1;
+ if (start_column != 0)
+ s_data += (s_char_len != NULL) ? s_char_len[start_column - 1] : 1;
+ start_column++;
+ }
+
+ /* If they cross, we're going to exceed the bound. */
+ if (start_column >= stop_column)
+ return max_d + 1;
+ }
+#endif
+ }
+
+ /*
+ * Because the final value was swapped from the previous row to the
+ * current row, that's where we'll find it.
+ */
+ return prev[m - 1];
+}
diff --git a/contrib/fuzzystrmatch/uninstall_fuzzystrmatch.sql b/contrib/fuzzystrmatch/uninstall_fuzzystrmatch.sql
deleted file mode 100644
index bcf05da132..0000000000
--- a/contrib/fuzzystrmatch/uninstall_fuzzystrmatch.sql
+++ /dev/null
@@ -1,20 +0,0 @@
-/* $PostgreSQL: pgsql/contrib/fuzzystrmatch/uninstall_fuzzystrmatch.sql,v 1.4 2008/04/03 21:13:07 tgl Exp $ */
-
--- Adjust this setting to control where the objects get dropped.
-SET search_path = public;
-
-DROP FUNCTION dmetaphone_alt (text);
-
-DROP FUNCTION dmetaphone (text);
-
-DROP FUNCTION difference(text,text);
-
-DROP FUNCTION text_soundex(text);
-
-DROP FUNCTION soundex(text);
-
-DROP FUNCTION metaphone (text,int);
-
-DROP FUNCTION levenshtein (text,text,int,int,int);
-
-DROP FUNCTION levenshtein (text,text);
diff --git a/contrib/hstore/.gitignore b/contrib/hstore/.gitignore
new file mode 100644
index 0000000000..5dcb3ff972
--- /dev/null
+++ b/contrib/hstore/.gitignore
@@ -0,0 +1,4 @@
+# Generated subdirectories
+/log/
+/results/
+/tmp_check/
diff --git a/contrib/hstore/Makefile b/contrib/hstore/Makefile
index bb69d70805..fce1a32328 100644
--- a/contrib/hstore/Makefile
+++ b/contrib/hstore/Makefile
@@ -1,15 +1,21 @@
-# $PostgreSQL: pgsql/contrib/hstore/Makefile,v 1.7 2009/09/30 19:50:22 tgl Exp $
-
-subdir = contrib/hstore
-top_builddir = ../..
-include $(top_builddir)/src/Makefile.global
+# contrib/hstore/Makefile
MODULE_big = hstore
OBJS = hstore_io.o hstore_op.o hstore_gist.o hstore_gin.o hstore_compat.o \
crc32.o
-DATA_built = hstore.sql
-DATA = uninstall_hstore.sql
+EXTENSION = hstore
+DATA = hstore--1.0.sql hstore--unpackaged--1.0.sql
+
REGRESS = hstore
+ifdef USE_PGXS
+PG_CONFIG = pg_config
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
+else
+subdir = contrib/hstore
+top_builddir = ../..
+include $(top_builddir)/src/Makefile.global
include $(top_srcdir)/contrib/contrib-global.mk
+endif
diff --git a/contrib/hstore/crc32.c b/contrib/hstore/crc32.c
index dc5765d056..d541d0cc95 100644
--- a/contrib/hstore/crc32.c
+++ b/contrib/hstore/crc32.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/hstore/crc32.c,v 1.4 2009/06/11 14:48:51 momjian Exp $
+ * contrib/hstore/crc32.c
*
* Both POSIX and CRC32 checksums */
diff --git a/contrib/hstore/crc32.h b/contrib/hstore/crc32.h
index e008b1a664..f5bfd82517 100644
--- a/contrib/hstore/crc32.h
+++ b/contrib/hstore/crc32.h
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/hstore/crc32.h,v 1.3 2009/06/11 14:48:51 momjian Exp $
+ * contrib/hstore/crc32.h
*/
#ifndef _CRC32_H
#define _CRC32_H
diff --git a/contrib/hstore/expected/hstore.out b/contrib/hstore/expected/hstore.out
index e78264d12b..083faf8d9c 100644
--- a/contrib/hstore/expected/hstore.out
+++ b/contrib/hstore/expected/hstore.out
@@ -1,12 +1,6 @@
---
--- first, define the datatype. Turn off echoing so that expected file
--- does not depend on contents of hstore.sql.
---
-SET client_min_messages = warning;
-\set ECHO none
-psql:hstore.sql:228: WARNING: => is deprecated as an operator name
+CREATE EXTENSION hstore;
+WARNING: => is deprecated as an operator name
DETAIL: This name may be disallowed altogether in future versions of PostgreSQL.
-RESET client_min_messages;
set escape_string_warning=off;
--hstore;
select ''::hstore;
@@ -207,25 +201,25 @@ select 'aa=>"NuLl"'::hstore;
"aa"=>"NuLl"
(1 row)
-select '\\=a=>q=w'::hstore;
+select e'\\=a=>q=w'::hstore;
hstore
-------------
"=a"=>"q=w"
(1 row)
-select '"=a"=>q\\=w'::hstore;
+select e'"=a"=>q\\=w'::hstore;
hstore
-------------
"=a"=>"q=w"
(1 row)
-select '"\\"a"=>q>w'::hstore;
+select e'"\\"a"=>q>w'::hstore;
hstore
--------------
"\"a"=>"q>w"
(1 row)
-select '\\"a=>q"w'::hstore;
+select e'\\"a=>q"w'::hstore;
hstore
---------------
"\"a"=>"q\"w"
@@ -435,10 +429,10 @@ select hstore 'a=>NULL, b=>qq' ?& ARRAY['c','d'];
select hstore 'a=>NULL, b=>qq' ?& '{}'::text[];
?column?
----------
- f
+ t
(1 row)
--- delete
+-- delete
select delete('a=>1 , b=>2, c=>3'::hstore, 'a');
delete
--------------------
diff --git a/contrib/hstore/hstore.sql.in b/contrib/hstore/hstore--1.0.sql
index c7a5e8e556..247a2773f5 100644
--- a/contrib/hstore/hstore.sql.in
+++ b/contrib/hstore/hstore--1.0.sql
@@ -1,26 +1,23 @@
-/* $PostgreSQL: pgsql/contrib/hstore/hstore.sql.in,v 1.15 2010/07/02 20:36:48 rhaas Exp $ */
-
--- Adjust this setting to control where the objects get created.
-SET search_path = public;
+/* contrib/hstore/hstore--1.0.sql */
CREATE TYPE hstore;
-CREATE OR REPLACE FUNCTION hstore_in(cstring)
+CREATE FUNCTION hstore_in(cstring)
RETURNS hstore
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION hstore_out(hstore)
+CREATE FUNCTION hstore_out(hstore)
RETURNS cstring
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION hstore_recv(internal)
+CREATE FUNCTION hstore_recv(internal)
RETURNS hstore
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION hstore_send(hstore)
+CREATE FUNCTION hstore_send(hstore)
RETURNS bytea
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -34,12 +31,12 @@ CREATE TYPE hstore (
STORAGE = extended
);
-CREATE OR REPLACE FUNCTION hstore_version_diag(hstore)
+CREATE FUNCTION hstore_version_diag(hstore)
RETURNS integer
AS 'MODULE_PATHNAME','hstore_version_diag'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION fetchval(hstore,text)
+CREATE FUNCTION fetchval(hstore,text)
RETURNS text
AS 'MODULE_PATHNAME','hstore_fetchval'
LANGUAGE C STRICT IMMUTABLE;
@@ -50,7 +47,7 @@ CREATE OPERATOR -> (
PROCEDURE = fetchval
);
-CREATE OR REPLACE FUNCTION slice_array(hstore,text[])
+CREATE FUNCTION slice_array(hstore,text[])
RETURNS text[]
AS 'MODULE_PATHNAME','hstore_slice_to_array'
LANGUAGE C STRICT IMMUTABLE;
@@ -61,17 +58,17 @@ CREATE OPERATOR -> (
PROCEDURE = slice_array
);
-CREATE OR REPLACE FUNCTION slice(hstore,text[])
+CREATE FUNCTION slice(hstore,text[])
RETURNS hstore
AS 'MODULE_PATHNAME','hstore_slice_to_hstore'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION isexists(hstore,text)
+CREATE FUNCTION isexists(hstore,text)
RETURNS bool
AS 'MODULE_PATHNAME','hstore_exists'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION exist(hstore,text)
+CREATE FUNCTION exist(hstore,text)
RETURNS bool
AS 'MODULE_PATHNAME','hstore_exists'
LANGUAGE C STRICT IMMUTABLE;
@@ -84,7 +81,7 @@ CREATE OPERATOR ? (
JOIN = contjoinsel
);
-CREATE OR REPLACE FUNCTION exists_any(hstore,text[])
+CREATE FUNCTION exists_any(hstore,text[])
RETURNS bool
AS 'MODULE_PATHNAME','hstore_exists_any'
LANGUAGE C STRICT IMMUTABLE;
@@ -97,7 +94,7 @@ CREATE OPERATOR ?| (
JOIN = contjoinsel
);
-CREATE OR REPLACE FUNCTION exists_all(hstore,text[])
+CREATE FUNCTION exists_all(hstore,text[])
RETURNS bool
AS 'MODULE_PATHNAME','hstore_exists_all'
LANGUAGE C STRICT IMMUTABLE;
@@ -110,27 +107,27 @@ CREATE OPERATOR ?& (
JOIN = contjoinsel
);
-CREATE OR REPLACE FUNCTION isdefined(hstore,text)
+CREATE FUNCTION isdefined(hstore,text)
RETURNS bool
AS 'MODULE_PATHNAME','hstore_defined'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION defined(hstore,text)
+CREATE FUNCTION defined(hstore,text)
RETURNS bool
AS 'MODULE_PATHNAME','hstore_defined'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION delete(hstore,text)
+CREATE FUNCTION delete(hstore,text)
RETURNS hstore
AS 'MODULE_PATHNAME','hstore_delete'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION delete(hstore,text[])
+CREATE FUNCTION delete(hstore,text[])
RETURNS hstore
AS 'MODULE_PATHNAME','hstore_delete_array'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION delete(hstore,hstore)
+CREATE FUNCTION delete(hstore,hstore)
RETURNS hstore
AS 'MODULE_PATHNAME','hstore_delete_hstore'
LANGUAGE C STRICT IMMUTABLE;
@@ -153,7 +150,7 @@ CREATE OPERATOR - (
PROCEDURE = delete
);
-CREATE OR REPLACE FUNCTION hs_concat(hstore,hstore)
+CREATE FUNCTION hs_concat(hstore,hstore)
RETURNS hstore
AS 'MODULE_PATHNAME','hstore_concat'
LANGUAGE C STRICT IMMUTABLE;
@@ -164,12 +161,12 @@ CREATE OPERATOR || (
PROCEDURE = hs_concat
);
-CREATE OR REPLACE FUNCTION hs_contains(hstore,hstore)
+CREATE FUNCTION hs_contains(hstore,hstore)
RETURNS bool
AS 'MODULE_PATHNAME','hstore_contains'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION hs_contained(hstore,hstore)
+CREATE FUNCTION hs_contained(hstore,hstore)
RETURNS bool
AS 'MODULE_PATHNAME','hstore_contained'
LANGUAGE C STRICT IMMUTABLE;
@@ -211,12 +208,12 @@ CREATE OPERATOR ~ (
JOIN = contjoinsel
);
-CREATE OR REPLACE FUNCTION tconvert(text,text)
+CREATE FUNCTION tconvert(text,text)
RETURNS hstore
AS 'MODULE_PATHNAME','hstore_from_text'
LANGUAGE C IMMUTABLE; -- not STRICT; needs to allow (key,NULL)
-CREATE OR REPLACE FUNCTION hstore(text,text)
+CREATE FUNCTION hstore(text,text)
RETURNS hstore
AS 'MODULE_PATHNAME','hstore_from_text'
LANGUAGE C IMMUTABLE; -- not STRICT; needs to allow (key,NULL)
@@ -227,7 +224,7 @@ CREATE OPERATOR => (
PROCEDURE = hstore
);
-CREATE OR REPLACE FUNCTION hstore(text[],text[])
+CREATE FUNCTION hstore(text[],text[])
RETURNS hstore
AS 'MODULE_PATHNAME', 'hstore_from_arrays'
LANGUAGE C IMMUTABLE; -- not STRICT; allows (keys,null)
@@ -240,12 +237,12 @@ LANGUAGE C IMMUTABLE STRICT;
CREATE CAST (text[] AS hstore)
WITH FUNCTION hstore(text[]);
-CREATE OR REPLACE FUNCTION hstore(record)
+CREATE FUNCTION hstore(record)
RETURNS hstore
AS 'MODULE_PATHNAME', 'hstore_from_record'
LANGUAGE C IMMUTABLE; -- not STRICT; allows (null::recordtype)
-CREATE OR REPLACE FUNCTION hstore_to_array(hstore)
+CREATE FUNCTION hstore_to_array(hstore)
RETURNS text[]
AS 'MODULE_PATHNAME','hstore_to_array'
LANGUAGE C STRICT IMMUTABLE;
@@ -255,7 +252,7 @@ CREATE OPERATOR %% (
PROCEDURE = hstore_to_array
);
-CREATE OR REPLACE FUNCTION hstore_to_matrix(hstore)
+CREATE FUNCTION hstore_to_matrix(hstore)
RETURNS text[]
AS 'MODULE_PATHNAME','hstore_to_matrix'
LANGUAGE C STRICT IMMUTABLE;
@@ -265,34 +262,34 @@ CREATE OPERATOR %# (
PROCEDURE = hstore_to_matrix
);
-CREATE OR REPLACE FUNCTION akeys(hstore)
+CREATE FUNCTION akeys(hstore)
RETURNS text[]
AS 'MODULE_PATHNAME','hstore_akeys'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION avals(hstore)
+CREATE FUNCTION avals(hstore)
RETURNS text[]
AS 'MODULE_PATHNAME','hstore_avals'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION skeys(hstore)
+CREATE FUNCTION skeys(hstore)
RETURNS setof text
AS 'MODULE_PATHNAME','hstore_skeys'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION svals(hstore)
+CREATE FUNCTION svals(hstore)
RETURNS setof text
AS 'MODULE_PATHNAME','hstore_svals'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION each(IN hs hstore,
+CREATE FUNCTION each(IN hs hstore,
OUT key text,
OUT value text)
RETURNS SETOF record
AS 'MODULE_PATHNAME','hstore_each'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION populate_record(anyelement,hstore)
+CREATE FUNCTION populate_record(anyelement,hstore)
RETURNS anyelement
AS 'MODULE_PATHNAME', 'hstore_populate_record'
LANGUAGE C IMMUTABLE; -- not STRICT; allows (null::rectype,hstore)
@@ -305,37 +302,37 @@ CREATE OPERATOR #= (
-- btree support
-CREATE OR REPLACE FUNCTION hstore_eq(hstore,hstore)
+CREATE FUNCTION hstore_eq(hstore,hstore)
RETURNS boolean
AS 'MODULE_PATHNAME','hstore_eq'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION hstore_ne(hstore,hstore)
+CREATE FUNCTION hstore_ne(hstore,hstore)
RETURNS boolean
AS 'MODULE_PATHNAME','hstore_ne'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION hstore_gt(hstore,hstore)
+CREATE FUNCTION hstore_gt(hstore,hstore)
RETURNS boolean
AS 'MODULE_PATHNAME','hstore_gt'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION hstore_ge(hstore,hstore)
+CREATE FUNCTION hstore_ge(hstore,hstore)
RETURNS boolean
AS 'MODULE_PATHNAME','hstore_ge'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION hstore_lt(hstore,hstore)
+CREATE FUNCTION hstore_lt(hstore,hstore)
RETURNS boolean
AS 'MODULE_PATHNAME','hstore_lt'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION hstore_le(hstore,hstore)
+CREATE FUNCTION hstore_le(hstore,hstore)
RETURNS boolean
AS 'MODULE_PATHNAME','hstore_le'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION hstore_cmp(hstore,hstore)
+CREATE FUNCTION hstore_cmp(hstore,hstore)
RETURNS integer
AS 'MODULE_PATHNAME','hstore_cmp'
LANGUAGE C STRICT IMMUTABLE;
@@ -414,7 +411,7 @@ AS
-- hash support
-CREATE OR REPLACE FUNCTION hstore_hash(hstore)
+CREATE FUNCTION hstore_hash(hstore)
RETURNS integer
AS 'MODULE_PATHNAME','hstore_hash'
LANGUAGE C STRICT IMMUTABLE;
@@ -429,12 +426,12 @@ AS
CREATE TYPE ghstore;
-CREATE OR REPLACE FUNCTION ghstore_in(cstring)
+CREATE FUNCTION ghstore_in(cstring)
RETURNS ghstore
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
-CREATE OR REPLACE FUNCTION ghstore_out(ghstore)
+CREATE FUNCTION ghstore_out(ghstore)
RETURNS cstring
AS 'MODULE_PATHNAME'
LANGUAGE C STRICT IMMUTABLE;
@@ -445,37 +442,37 @@ CREATE TYPE ghstore (
OUTPUT = ghstore_out
);
-CREATE OR REPLACE FUNCTION ghstore_compress(internal)
+CREATE FUNCTION ghstore_compress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION ghstore_decompress(internal)
+CREATE FUNCTION ghstore_decompress(internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION ghstore_penalty(internal,internal,internal)
+CREATE FUNCTION ghstore_penalty(internal,internal,internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION ghstore_picksplit(internal, internal)
+CREATE FUNCTION ghstore_picksplit(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION ghstore_union(internal, internal)
+CREATE FUNCTION ghstore_union(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION ghstore_same(internal, internal, internal)
+CREATE FUNCTION ghstore_same(internal, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION ghstore_consistent(internal,internal,int,oid,internal)
+CREATE FUNCTION ghstore_consistent(internal,internal,int,oid,internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
@@ -501,17 +498,17 @@ AS
-- GIN support
-CREATE OR REPLACE FUNCTION gin_extract_hstore(internal, internal)
+CREATE FUNCTION gin_extract_hstore(internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gin_extract_hstore_query(internal, internal, int2, internal, internal)
+CREATE FUNCTION gin_extract_hstore_query(internal, internal, int2, internal, internal)
RETURNS internal
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
-CREATE OR REPLACE FUNCTION gin_consistent_hstore(internal, int2, internal, int4, internal, internal)
+CREATE FUNCTION gin_consistent_hstore(internal, int2, internal, int4, internal, internal)
RETURNS bool
AS 'MODULE_PATHNAME'
LANGUAGE C IMMUTABLE STRICT;
diff --git a/contrib/hstore/hstore--unpackaged--1.0.sql b/contrib/hstore/hstore--unpackaged--1.0.sql
new file mode 100644
index 0000000000..0eb300ecf5
--- /dev/null
+++ b/contrib/hstore/hstore--unpackaged--1.0.sql
@@ -0,0 +1,89 @@
+/* contrib/hstore/hstore--unpackaged--1.0.sql */
+
+ALTER EXTENSION hstore ADD type hstore;
+ALTER EXTENSION hstore ADD function hstore_in(cstring);
+ALTER EXTENSION hstore ADD function hstore_out(hstore);
+ALTER EXTENSION hstore ADD function hstore_recv(internal);
+ALTER EXTENSION hstore ADD function hstore_send(hstore);
+ALTER EXTENSION hstore ADD function hstore_version_diag(hstore);
+ALTER EXTENSION hstore ADD function fetchval(hstore,text);
+ALTER EXTENSION hstore ADD operator ->(hstore,text);
+ALTER EXTENSION hstore ADD function slice_array(hstore,text[]);
+ALTER EXTENSION hstore ADD operator ->(hstore,text[]);
+ALTER EXTENSION hstore ADD function slice(hstore,text[]);
+ALTER EXTENSION hstore ADD function isexists(hstore,text);
+ALTER EXTENSION hstore ADD function exist(hstore,text);
+ALTER EXTENSION hstore ADD operator ?(hstore,text);
+ALTER EXTENSION hstore ADD function exists_any(hstore,text[]);
+ALTER EXTENSION hstore ADD operator ?|(hstore,text[]);
+ALTER EXTENSION hstore ADD function exists_all(hstore,text[]);
+ALTER EXTENSION hstore ADD operator ?&(hstore,text[]);
+ALTER EXTENSION hstore ADD function isdefined(hstore,text);
+ALTER EXTENSION hstore ADD function defined(hstore,text);
+ALTER EXTENSION hstore ADD function delete(hstore,text);
+ALTER EXTENSION hstore ADD function delete(hstore,text[]);
+ALTER EXTENSION hstore ADD function delete(hstore,hstore);
+ALTER EXTENSION hstore ADD operator -(hstore,text);
+ALTER EXTENSION hstore ADD operator -(hstore,text[]);
+ALTER EXTENSION hstore ADD operator -(hstore,hstore);
+ALTER EXTENSION hstore ADD function hs_concat(hstore,hstore);
+ALTER EXTENSION hstore ADD operator ||(hstore,hstore);
+ALTER EXTENSION hstore ADD function hs_contains(hstore,hstore);
+ALTER EXTENSION hstore ADD function hs_contained(hstore,hstore);
+ALTER EXTENSION hstore ADD operator <@(hstore,hstore);
+ALTER EXTENSION hstore ADD operator @>(hstore,hstore);
+ALTER EXTENSION hstore ADD operator ~(hstore,hstore);
+ALTER EXTENSION hstore ADD operator @(hstore,hstore);
+ALTER EXTENSION hstore ADD function tconvert(text,text);
+ALTER EXTENSION hstore ADD function hstore(text,text);
+ALTER EXTENSION hstore ADD operator =>(text,text);
+ALTER EXTENSION hstore ADD function hstore(text[],text[]);
+ALTER EXTENSION hstore ADD function hstore(text[]);
+ALTER EXTENSION hstore ADD cast (text[] as hstore);
+ALTER EXTENSION hstore ADD function hstore(record);
+ALTER EXTENSION hstore ADD function hstore_to_array(hstore);
+ALTER EXTENSION hstore ADD operator %%(NONE,hstore);
+ALTER EXTENSION hstore ADD function hstore_to_matrix(hstore);
+ALTER EXTENSION hstore ADD operator %#(NONE,hstore);
+ALTER EXTENSION hstore ADD function akeys(hstore);
+ALTER EXTENSION hstore ADD function avals(hstore);
+ALTER EXTENSION hstore ADD function skeys(hstore);
+ALTER EXTENSION hstore ADD function svals(hstore);
+ALTER EXTENSION hstore ADD function each(hstore);
+ALTER EXTENSION hstore ADD function populate_record(anyelement,hstore);
+ALTER EXTENSION hstore ADD operator #=(anyelement,hstore);
+ALTER EXTENSION hstore ADD function hstore_eq(hstore,hstore);
+ALTER EXTENSION hstore ADD function hstore_ne(hstore,hstore);
+ALTER EXTENSION hstore ADD function hstore_gt(hstore,hstore);
+ALTER EXTENSION hstore ADD function hstore_ge(hstore,hstore);
+ALTER EXTENSION hstore ADD function hstore_lt(hstore,hstore);
+ALTER EXTENSION hstore ADD function hstore_le(hstore,hstore);
+ALTER EXTENSION hstore ADD function hstore_cmp(hstore,hstore);
+ALTER EXTENSION hstore ADD operator <>(hstore,hstore);
+ALTER EXTENSION hstore ADD operator =(hstore,hstore);
+ALTER EXTENSION hstore ADD operator #>#(hstore,hstore);
+ALTER EXTENSION hstore ADD operator #>=#(hstore,hstore);
+ALTER EXTENSION hstore ADD operator #<#(hstore,hstore);
+ALTER EXTENSION hstore ADD operator #<=#(hstore,hstore);
+ALTER EXTENSION hstore ADD operator family btree_hstore_ops using btree;
+ALTER EXTENSION hstore ADD operator class btree_hstore_ops using btree;
+ALTER EXTENSION hstore ADD function hstore_hash(hstore);
+ALTER EXTENSION hstore ADD operator family hash_hstore_ops using hash;
+ALTER EXTENSION hstore ADD operator class hash_hstore_ops using hash;
+ALTER EXTENSION hstore ADD type ghstore;
+ALTER EXTENSION hstore ADD function ghstore_in(cstring);
+ALTER EXTENSION hstore ADD function ghstore_out(ghstore);
+ALTER EXTENSION hstore ADD function ghstore_compress(internal);
+ALTER EXTENSION hstore ADD function ghstore_decompress(internal);
+ALTER EXTENSION hstore ADD function ghstore_penalty(internal,internal,internal);
+ALTER EXTENSION hstore ADD function ghstore_picksplit(internal,internal);
+ALTER EXTENSION hstore ADD function ghstore_union(internal,internal);
+ALTER EXTENSION hstore ADD function ghstore_same(internal,internal,internal);
+ALTER EXTENSION hstore ADD function ghstore_consistent(internal,internal,integer,oid,internal);
+ALTER EXTENSION hstore ADD operator family gist_hstore_ops using gist;
+ALTER EXTENSION hstore ADD operator class gist_hstore_ops using gist;
+ALTER EXTENSION hstore ADD function gin_extract_hstore(internal,internal);
+ALTER EXTENSION hstore ADD function gin_extract_hstore_query(internal,internal,smallint,internal,internal);
+ALTER EXTENSION hstore ADD function gin_consistent_hstore(internal,smallint,internal,integer,internal,internal);
+ALTER EXTENSION hstore ADD operator family gin_hstore_ops using gin;
+ALTER EXTENSION hstore ADD operator class gin_hstore_ops using gin;
diff --git a/contrib/hstore/hstore.control b/contrib/hstore/hstore.control
new file mode 100644
index 0000000000..38a4851ea8
--- /dev/null
+++ b/contrib/hstore/hstore.control
@@ -0,0 +1,5 @@
+# hstore extension
+comment = 'data type for storing sets of (key, value) pairs'
+default_version = '1.0'
+module_pathname = '$libdir/hstore'
+relocatable = true
diff --git a/contrib/hstore/hstore.h b/contrib/hstore/hstore.h
index 796dce575e..8906397ad2 100644
--- a/contrib/hstore/hstore.h
+++ b/contrib/hstore/hstore.h
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/hstore/hstore.h,v 1.10 2010/02/26 02:00:32 momjian Exp $
+ * contrib/hstore/hstore.h
*/
#ifndef __HSTORE_H__
#define __HSTORE_H__
diff --git a/contrib/hstore/hstore_compat.c b/contrib/hstore/hstore_compat.c
index 033d945f9c..5778f74a80 100644
--- a/contrib/hstore/hstore_compat.c
+++ b/contrib/hstore/hstore_compat.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/hstore/hstore_compat.c,v 1.2 2010/02/26 02:00:32 momjian Exp $
+ * contrib/hstore/hstore_compat.c
*
* Notes on old/new hstore format disambiguation.
*
@@ -180,7 +180,8 @@ hstoreValidOldFormat(HStore *hs)
if (hs->size_ & HS_FLAG_NEWVERSION)
return 0;
- Assert(sizeof(HOldEntry) == sizeof(HEntry));
+ /* New format uses an HEntry for key and another for value */
+ Assert(sizeof(HOldEntry) == (2 * sizeof(HEntry)));
if (count == 0)
return 2;
diff --git a/contrib/hstore/hstore_gin.c b/contrib/hstore/hstore_gin.c
index f5056f53ec..2007801cf0 100644
--- a/contrib/hstore/hstore_gin.c
+++ b/contrib/hstore/hstore_gin.c
@@ -1,14 +1,22 @@
/*
- * $PostgreSQL: pgsql/contrib/hstore/hstore_gin.c,v 1.8 2010/02/26 02:00:32 momjian Exp $
+ * contrib/hstore/hstore_gin.c
*/
#include "postgres.h"
#include "access/gin.h"
+#include "access/skey.h"
#include "catalog/pg_type.h"
#include "hstore.h"
+/*
+ * When using a GIN index for hstore, we choose to index both keys and values.
+ * The storage format is "text" values, with K, V, or N prepended to the string
+ * to indicate key, value, or null values. (As of 9.1 it might be better to
+ * store null values as nulls, but we'll keep it this way for on-disk
+ * compatibility.)
+ */
#define KEYFLAG 'K'
#define VALFLAG 'V'
#define NULLFLAG 'N'
@@ -16,14 +24,17 @@
PG_FUNCTION_INFO_V1(gin_extract_hstore);
Datum gin_extract_hstore(PG_FUNCTION_ARGS);
+/* Build an indexable text value */
static text *
-makeitem(char *str, int len)
+makeitem(char *str, int len, char flag)
{
text *item;
item = (text *) palloc(VARHDRSZ + len + 1);
SET_VARSIZE(item, VARHDRSZ + len + 1);
+ *VARDATA(item) = flag;
+
if (str && len > 0)
memcpy(VARDATA(item) + 1, str, len);
@@ -49,20 +60,15 @@ gin_extract_hstore(PG_FUNCTION_ARGS)
{
text *item;
- item = makeitem(HS_KEY(hsent, ptr, i), HS_KEYLEN(hsent, i));
- *VARDATA(item) = KEYFLAG;
+ item = makeitem(HS_KEY(hsent, ptr, i), HS_KEYLEN(hsent, i),
+ KEYFLAG);
entries[2 * i] = PointerGetDatum(item);
if (HS_VALISNULL(hsent, i))
- {
- item = makeitem(NULL, 0);
- *VARDATA(item) = NULLFLAG;
- }
+ item = makeitem(NULL, 0, NULLFLAG);
else
- {
- item = makeitem(HS_VAL(hsent, ptr, i), HS_VALLEN(hsent, i));
- *VARDATA(item) = VALFLAG;
- }
+ item = makeitem(HS_VAL(hsent, ptr, i), HS_VALLEN(hsent, i),
+ VALFLAG);
entries[2 * i + 1] = PointerGetDatum(item);
}
@@ -75,30 +81,31 @@ Datum gin_extract_hstore_query(PG_FUNCTION_ARGS);
Datum
gin_extract_hstore_query(PG_FUNCTION_ARGS)
{
+ int32 *nentries = (int32 *) PG_GETARG_POINTER(1);
StrategyNumber strategy = PG_GETARG_UINT16(2);
+ int32 *searchMode = (int32 *) PG_GETARG_POINTER(6);
+ Datum *entries;
if (strategy == HStoreContainsStrategyNumber)
{
- PG_RETURN_DATUM(DirectFunctionCall2(gin_extract_hstore,
- PG_GETARG_DATUM(0),
- PG_GETARG_DATUM(1)
- ));
+ /* Query is an hstore, so just apply gin_extract_hstore... */
+ entries = (Datum *)
+ DatumGetPointer(DirectFunctionCall2(gin_extract_hstore,
+ PG_GETARG_DATUM(0),
+ PointerGetDatum(nentries)));
+ /* ... except that "contains {}" requires a full index scan */
+ if (entries == NULL)
+ *searchMode = GIN_SEARCH_MODE_ALL;
}
else if (strategy == HStoreExistsStrategyNumber)
{
- text *item,
- *query = PG_GETARG_TEXT_PP(0);
- int32 *nentries = (int32 *) PG_GETARG_POINTER(1);
- Datum *entries = NULL;
+ text *query = PG_GETARG_TEXT_PP(0);
+ text *item;
*nentries = 1;
entries = (Datum *) palloc(sizeof(Datum));
-
- item = makeitem(VARDATA_ANY(query), VARSIZE_ANY_EXHDR(query));
- *VARDATA(item) = KEYFLAG;
+ item = makeitem(VARDATA_ANY(query), VARSIZE_ANY_EXHDR(query), KEYFLAG);
entries[0] = PointerGetDatum(item);
-
- PG_RETURN_POINTER(entries);
}
else if (strategy == HStoreExistsAnyStrategyNumber ||
strategy == HStoreExistsAllStrategyNumber)
@@ -109,8 +116,6 @@ gin_extract_hstore_query(PG_FUNCTION_ARGS)
int key_count;
int i,
j;
- int32 *nentries = (int32 *) PG_GETARG_POINTER(1);
- Datum *entries = NULL;
text *item;
deconstruct_array(query,
@@ -121,21 +126,25 @@ gin_extract_hstore_query(PG_FUNCTION_ARGS)
for (i = 0, j = 0; i < key_count; ++i)
{
+ /* Nulls in the array are ignored, cf hstoreArrayToPairs */
if (key_nulls[i])
continue;
- item = makeitem(VARDATA(key_datums[i]), VARSIZE(key_datums[i]) - VARHDRSZ);
- *VARDATA(item) = KEYFLAG;
+ item = makeitem(VARDATA(key_datums[i]), VARSIZE(key_datums[i]) - VARHDRSZ, KEYFLAG);
entries[j++] = PointerGetDatum(item);
}
- *nentries = j ? j : -1;
-
- PG_RETURN_POINTER(entries);
+ *nentries = j;
+ /* ExistsAll with no keys should match everything */
+ if (j == 0 && strategy == HStoreExistsAllStrategyNumber)
+ *searchMode = GIN_SEARCH_MODE_ALL;
}
else
- elog(ERROR, "Unsupported strategy number: %d", strategy);
+ {
+ elog(ERROR, "unrecognized strategy number: %d", strategy);
+ entries = NULL; /* keep compiler quiet */
+ }
- PG_RETURN_POINTER(NULL);
+ PG_RETURN_POINTER(entries);
}
PG_FUNCTION_INFO_V1(gin_consistent_hstore);
@@ -153,42 +162,52 @@ gin_consistent_hstore(PG_FUNCTION_ARGS)
/* Pointer *extra_data = (Pointer *) PG_GETARG_POINTER(4); */
bool *recheck = (bool *) PG_GETARG_POINTER(5);
bool res = true;
-
- *recheck = false;
+ int32 i;
if (strategy == HStoreContainsStrategyNumber)
{
- int i;
-
/*
- * Index lost information about correspondence of keys and values, so
- * we need recheck (pre-8.4 this is handled at SQL level)
+ * Index doesn't have information about correspondence of keys and
+ * values, so we need recheck. However, if not all the keys are
+ * present, we can fail at once.
*/
*recheck = true;
- for (i = 0; res && i < nkeys; i++)
- if (check[i] == false)
+ for (i = 0; i < nkeys; i++)
+ {
+ if (!check[i])
+ {
res = false;
+ break;
+ }
+ }
}
else if (strategy == HStoreExistsStrategyNumber)
{
- /* Existence of key is guaranteed */
+ /* Existence of key is guaranteed in default search mode */
+ *recheck = false;
res = true;
}
else if (strategy == HStoreExistsAnyStrategyNumber)
{
- /* Existence of key is guaranteed */
+ /* Existence of key is guaranteed in default search mode */
+ *recheck = false;
res = true;
}
else if (strategy == HStoreExistsAllStrategyNumber)
{
- int i;
-
- for (i = 0; res && i < nkeys; ++i)
+ /* Testing for all the keys being present gives an exact result */
+ *recheck = false;
+ for (i = 0; i < nkeys; i++)
+ {
if (!check[i])
+ {
res = false;
+ break;
+ }
+ }
}
else
- elog(ERROR, "Unsupported strategy number: %d", strategy);
+ elog(ERROR, "unrecognized strategy number: %d", strategy);
PG_RETURN_BOOL(res);
}
diff --git a/contrib/hstore/hstore_gist.c b/contrib/hstore/hstore_gist.c
index db58fb62dd..88d89ece23 100644
--- a/contrib/hstore/hstore_gist.c
+++ b/contrib/hstore/hstore_gist.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/hstore/hstore_gist.c,v 1.12 2010/02/26 02:00:32 momjian Exp $
+ * contrib/hstore/hstore_gist.c
*/
#include "postgres.h"
@@ -168,28 +168,14 @@ ghstore_compress(PG_FUNCTION_ARGS)
PG_RETURN_POINTER(retval);
}
+/*
+ * Since type ghstore isn't toastable (and doesn't need to be),
+ * this function can be a no-op.
+ */
Datum
ghstore_decompress(PG_FUNCTION_ARGS)
{
- GISTENTRY *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
- GISTENTRY *retval;
- HStore *key;
-
- key = DatumGetHStoreP(entry->key);
-
- if (key != (HStore *) DatumGetPointer(entry->key))
- {
- /* need to pass back the decompressed item */
- retval = palloc(sizeof(GISTENTRY));
- gistentryinit(*retval, PointerGetDatum(key),
- entry->rel, entry->page, entry->offset, entry->leafkey);
- PG_RETURN_POINTER(retval);
- }
- else
- {
- /* we can return the entry as-is */
- PG_RETURN_POINTER(entry);
- }
+ PG_RETURN_POINTER(PG_GETARG_POINTER(0));
}
Datum
diff --git a/contrib/hstore/hstore_io.c b/contrib/hstore/hstore_io.c
index fa6da693e9..0d6f0b6b13 100644
--- a/contrib/hstore/hstore_io.c
+++ b/contrib/hstore/hstore_io.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/hstore/hstore_io.c,v 1.13 2010/02/26 02:00:32 momjian Exp $
+ * contrib/hstore/hstore_io.c
*/
#include "postgres.h"
@@ -280,9 +280,9 @@ comparePairs(const void *a, const void *b)
{
if (((Pairs *) a)->keylen == ((Pairs *) b)->keylen)
{
- int res = strncmp(((Pairs *) a)->key,
- ((Pairs *) b)->key,
- ((Pairs *) a)->keylen);
+ int res = memcmp(((Pairs *) a)->key,
+ ((Pairs *) b)->key,
+ ((Pairs *) a)->keylen);
if (res)
return res;
@@ -324,7 +324,7 @@ hstoreUniquePairs(Pairs *a, int4 l, int4 *buflen)
while (ptr - a < l)
{
if (ptr->keylen == res->keylen &&
- strncmp(ptr->key, res->key, res->keylen) == 0)
+ memcmp(ptr->key, res->key, res->keylen) == 0)
{
if (ptr->needfree)
{
diff --git a/contrib/hstore/hstore_op.c b/contrib/hstore/hstore_op.c
index ebee60a1db..5b278c14ff 100644
--- a/contrib/hstore/hstore_op.c
+++ b/contrib/hstore/hstore_op.c
@@ -1,5 +1,5 @@
/*
- * $PostgreSQL: pgsql/contrib/hstore/hstore_op.c,v 1.16 2010/02/26 02:00:32 momjian Exp $
+ * contrib/hstore/hstore_op.c
*/
#include "postgres.h"
@@ -49,7 +49,7 @@ hstoreFindKey(HStore *hs, int *lowbound, char *key, int keylen)
stopMiddle = stopLow + (stopHigh - stopLow) / 2;
if (HS_KEYLEN(entries, stopMiddle) == keylen)
- difference = strncmp(HS_KEY(entries, base, stopMiddle), key, keylen);
+ difference = memcmp(HS_KEY(entries, base, stopMiddle), key, keylen);
else
difference = (HS_KEYLEN(entries, stopMiddle) > keylen) ? 1 : -1;
@@ -168,14 +168,16 @@ hstore_exists_any(PG_FUNCTION_ARGS)
* start one entry past the previous "found" entry, or at the lower bound
* of the last search.
*/
-
- for (i = 0; !res && i < nkeys; ++i)
+ for (i = 0; i < nkeys; i++)
{
int idx = hstoreFindKey(hs, &lowbound,
key_pairs[i].key, key_pairs[i].keylen);
if (idx >= 0)
+ {
res = true;
+ break;
+ }
}
PG_RETURN_BOOL(res);
@@ -193,7 +195,7 @@ hstore_exists_all(PG_FUNCTION_ARGS)
Pairs *key_pairs = hstoreArrayToPairs(keys, &nkeys);
int i;
int lowbound = 0;
- bool res = nkeys ? true : false;
+ bool res = true;