diff options
Diffstat (limited to 'src/tools')
75 files changed, 1119 insertions, 1207 deletions
diff --git a/src/tools/FAQ2txt b/src/tools/FAQ2txt index ed2946921e..ab61d4d5f8 100755 --- a/src/tools/FAQ2txt +++ b/src/tools/FAQ2txt @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/FAQ2txt,v 1.3 2008/04/22 10:30:32 momjian Exp $: +# src/tools/FAQ2txt: # Converts doc/src/FAQ/FAQ.html to text file doc/FAQ diff --git a/src/tools/RELEASE_CHANGES b/src/tools/RELEASE_CHANGES index 47fa03af93..8e54793f1d 100644 --- a/src/tools/RELEASE_CHANGES +++ b/src/tools/RELEASE_CHANGES @@ -6,7 +6,7 @@ For All Releases (major, minor, beta, RC) (by packager) (beta) * Release notes - o scan cvs logs, use pgcvslog and flags in comments + o run git log and, if useful, src/tools/git_changelog o update doc/src/sgml/release.sgml o run spellchecker on result o add SGML markup @@ -30,12 +30,8 @@ For Major Releases ================== (in addition to the above) -* Bump minor library versions, major if appropriate (see below) - o src/interfaces/*/Makefile - o src/interfaces/*/*/Makefile - * Release notes - o search with commit message text to find CVS commit file changes + o use git log or src/tools/git_changelog to find the relevant commits o check completion of items that have been marked as completed at http://wiki.postgresql.org/wiki/Todo o remove completed TODO items @@ -66,26 +62,30 @@ For Major Releases Starting a New Development Cycle ================================ -* Create a branch in CVS for maintenance of the previous release +* Create a branch in git for maintenance of the previous release * Increment the major version number in src/tools/version_stamp.pl * Run "src/tools/version_stamp.pl devel", then run autoconf +* Bump minor library versions, major if appropriate (see below) + o src/interfaces/*/Makefile + o src/interfaces/*/*/Makefile + Creating Back-Branch Release Notes ================================== -* Do 'cvs log' on each back-branch and run pgcvslog +* Run src/tools/git_changelog to generate a list of relevant commits -* In CVS HEAD, edit and create SGML markup for the most recent branch - in that branch's release-N.N.sgml file +* On the git master branch, edit and create SGML markup for the most recent + branch in that branch's release-N.N.sgml file * Copy this into older branches' release-N.N.sgml files, then remove - items that do not apply based on cvs logs for that branch (and add + items that do not apply based on commit logs for that branch (and add any that are needed) -* Copy the appropriate release-N.N.sgml files into each back CVS branch +* Copy the appropriate release-N.N.sgml files into each back branch --------------------------------------------------------------------------- @@ -143,7 +143,7 @@ function: } If we wanted to add a third argument: - + void print_stuff(int arg1, int arg2, int arg3) { printf("stuff: %d %d %d\n", arg1, arg2, arg3); diff --git a/src/tools/add_cvs_markers b/src/tools/add_cvs_markers deleted file mode 100755 index 7344735aa2..0000000000 --- a/src/tools/add_cvs_markers +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/sh - -# $PostgreSQL: pgsql/src/tools/add_cvs_markers,v 1.2 2008/06/15 21:58:55 adunstan Exp $ - -# Author: Andrew Dunstan - -# Script to add PostgreSQL markers to source files that are lacking them. -# currently only works for .c and .h files - -# Needs a sed that understands the -i switch. -# Really only tested on my Linux box. - -# We try to avoid adding markers to third party files, or files that will -# cause regression problems (e.g. some ecpg headers). - -# If the file begins with a comment, we put the marker in there, -# otherwise we add a new comment at the top of the file. This makes things -# a bit prettier. - -# This script should be run at the top of the source tree. -# If we're in the tools directory, the script tries to take us to the -# right spot. -CWD=`pwd` -test "`basename $CWD`" = "tools" && cd ../.. - -# need a dummy file in case we don't find any with missing markers, -# to suppress messages about sed not finding any input files -touch dummy - -# first process the files that already start with a comment: - -find . \( \( -name 'libstemmer' -o -name 'expected' -o -name 'ppport.h' \ - -o -name 'regression.h' -o -name 'sql3types.h' -o -name 'sqlca.h' \) \ - -prune \) -o \( -name '*.[ch]' \) \( -exec grep -q '\$PostgreSQL' {} \; \ - -o -print \) | \ - { while read file ; do - head -n 1 < $file | grep -q '^/\*' && echo $file - done ; echo dummy ;} | \ - xargs -l sed -i -e '1s/^\// /' -e '1i/*\n * \x24PostgreSQL:$ \n *' - -# now all the rest (i.e. the files that don't start with a comment) - -{ find . \( \( -name 'libstemmer' -o -name 'expected' -o -name 'ppport.h' \ - -o -name 'regression.h' -o -name 'sql3types.h' -o -name 'sqlca.h' \) \ - -prune \) -o \( -name '*.[ch]' \) \( -exec grep -q '\$PostgreSQL' {} \; \ - -o -print \) ; echo dummy ;} | \ - xargs -l sed -i -e '1i/*\n * \x24PostgreSQL:$ \n */' - -rm -f dummy - diff --git a/src/tools/backend/README b/src/tools/backend/README index bde3a3e4c0..2b8692d393 100644 --- a/src/tools/backend/README +++ b/src/tools/backend/README @@ -1,5 +1,4 @@ -$PostgreSQL: pgsql/src/tools/backend/README,v 1.2 2008/03/21 13:23:29 momjian Exp $ +src/tools/backend/README -Just point your browser at the index.html file, and click on the +Just point your browser at the index.html file, and click on the flowchart to see the description and source code. - diff --git a/src/tools/backend/backend_dirs.html b/src/tools/backend/backend_dirs.html index a77cee96cf..16bd894582 100644 --- a/src/tools/backend/backend_dirs.html +++ b/src/tools/backend/backend_dirs.html @@ -339,7 +339,7 @@ i.e. '~'.</p> href="../../backend/port">port</a> - compatibility routines</h2> <br /> - + <hr /> <small>Maintainer: Bruce Momjian ( <a href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a> @@ -347,4 +347,3 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a> Last updated: Fri May 6 14:22:27 EDT 2005</small> </body> </html> - diff --git a/src/tools/backend/index.html b/src/tools/backend/index.html index 3086ef8a2c..19945f8661 100644 --- a/src/tools/backend/index.html +++ b/src/tools/backend/index.html @@ -1,4 +1,4 @@ -<!-- $PostgreSQL: pgsql/src/tools/backend/index.html,v 1.36 2008/10/07 00:19:48 momjian Exp $ --> +<!-- src/tools/backend/index.html --> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> diff --git a/src/tools/ccsym b/src/tools/ccsym index a90550abde..bf4a92fafb 100755 --- a/src/tools/ccsym +++ b/src/tools/ccsym @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/ccsym,v 1.7 2006/03/11 04:38:41 momjian Exp $ +# src/tools/ccsym trap "rm -f /tmp/$$.*" 0 1 2 3 15 cd /tmp diff --git a/src/tools/check_keywords.pl b/src/tools/check_keywords.pl index ccfae25d63..3b68638614 100755 --- a/src/tools/check_keywords.pl +++ b/src/tools/check_keywords.pl @@ -5,7 +5,7 @@ use strict; # Check that the keyword lists in gram.y and kwlist.h are sane. Run from # the top directory, or pass a path to a top directory as argument. # -# $PostgreSQL: pgsql/src/tools/check_keywords.pl,v 1.2 2009/04/30 10:26:35 heikki Exp $ +# src/tools/check_keywords.pl my $path; @@ -13,7 +13,7 @@ if (@ARGV) { $path = $ARGV[0]; shift @ARGV; } else { - $path = "."; + $path = "."; } $[ = 1; # set array base to 1 @@ -86,7 +86,7 @@ line: while (<GRAM>) { if ($arr[$fieldIndexer] eq '|') { next; } - + # Put this keyword into the right list push @{$keywords{$kcat}}, $arr[$fieldIndexer]; } diff --git a/src/tools/codelines b/src/tools/codelines index 6455e83e0a..11e86accf2 100755 --- a/src/tools/codelines +++ b/src/tools/codelines @@ -1,7 +1,7 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/codelines,v 1.3 2006/03/11 04:38:41 momjian Exp $ +# src/tools/codelines # This script is used to compute the total number of "C" lines in the release -# This should be run from the top of the CVS tree after a 'make distclean' +# This should be run from the top of the Git tree after a 'make distclean' find . -name '*.[chyl]' | xargs cat| wc -l diff --git a/src/tools/copyright b/src/tools/copyright index de1fff2e22..b0d61e1974 100755 --- a/src/tools/copyright +++ b/src/tools/copyright @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/copyright,v 1.18 2009/01/01 18:31:55 momjian Exp $ +# src/tools/copyright echo "Using current year: `date '+%Y'`" @@ -12,4 +12,3 @@ do done echo "Manually update doc/src/sgml/legal.sgml and src/interfaces/libpq/libpq.rc.in too" 1>&2 - diff --git a/src/tools/editors/emacs.samples b/src/tools/editors/emacs.samples index c1820f28c5..d9cfa2ffd8 100644 --- a/src/tools/editors/emacs.samples +++ b/src/tools/editors/emacs.samples @@ -28,6 +28,7 @@ (setq-default tab-width 4) (c-set-style "bsd") ; set c-basic-offset to 4, plus other stuff (c-set-offset 'case-label '+) ; tweak case indent to match PG custom + (setq fill-column 79) ; matches what pgindent does (setq indent-tabs-mode t)) ; make sure we keep tabs when indenting @@ -38,6 +39,7 @@ (c-add-style "pgsql" '("bsd" + (fill-column . 79) (indent-tabs-mode . t) (c-basic-offset . 4) (tab-width . 4) @@ -64,13 +66,14 @@ (add-hook 'c-mode-hook (function - (lambda nil - (if (string-match "pgsql" buffer-file-name) + (lambda nil + (if (string-match "postgresql" buffer-file-name) (progn (c-set-style "bsd") - (setq c-basic-offset 4) + (setq c-basic-offset 4) (setq tab-width 4) (c-set-offset 'case-label '+) + (setq fill-column 79) (setq indent-tabs-mode t) ) )))) diff --git a/src/tools/editors/vim.samples b/src/tools/editors/vim.samples index 210d9a360a..ccbc93f69b 100644 --- a/src/tools/editors/vim.samples +++ b/src/tools/editors/vim.samples @@ -1,4 +1,3 @@ - """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " " These settings are appropriate for editing PostgreSQL code with vim diff --git a/src/tools/entab/Makefile b/src/tools/entab/Makefile index 64697a5d70..de8181828a 100644 --- a/src/tools/entab/Makefile +++ b/src/tools/entab/Makefile @@ -4,17 +4,17 @@ # TARGET = entab BINDIR = /usr/local/bin -XFLAGS = +XFLAGS = CFLAGS = -O -LIBS = +LIBS = $(TARGET) : entab.o halt.o $(CC) -o $(TARGET) $(XFLAGS) $(CFLAGS) entab.o halt.o $(LIBS) -entab.o : entab.c +entab.o : entab.c $(CC) -c $(XFLAGS) $(CFLAGS) entab.c -halt.o : halt.c +halt.o : halt.c $(CC) -c $(XFLAGS) $(CFLAGS) halt.c clean: @@ -26,4 +26,3 @@ install: install -s $(TARGET) $(BINDIR) rm -f $(BINDIR)/detab ln $(BINDIR)/$(TARGET) $(BINDIR)/detab - diff --git a/src/tools/entab/entab.c b/src/tools/entab/entab.c index 7a87e0d5ab..5345c657f5 100644 --- a/src/tools/entab/entab.c +++ b/src/tools/entab/entab.c @@ -2,7 +2,7 @@ ** entab.c - add tabs to a text file ** by Bruce Momjian (root@candle.pha.pa.us) ** -** $PostgreSQL: pgsql/src/tools/entab/entab.c,v 1.18 2007/02/08 11:10:27 petere Exp $ +** src/tools/entab/entab.c ** ** version 1.3 ** diff --git a/src/tools/entab/entab.man b/src/tools/entab/entab.man index a90ab4a2f7..362ec730f4 100644 --- a/src/tools/entab/entab.man +++ b/src/tools/entab/entab.man @@ -1,4 +1,4 @@ -.\" $PostgreSQL: pgsql/src/tools/entab/entab.man,v 1.2 2006/03/11 04:38:41 momjian Exp $ +.\" src/tools/entab/entab.man .TH ENTAB 1 local .SH NAME entab - tab processor @@ -41,7 +41,7 @@ leaving a large gap. The quote-protection option allows tab replacement without quoted strings being changed. Useful when strings in source code will not have the same tab stops -when executed in the program. +when executed in the program. .LP To change a text file created on a system with one size of tab stop to display properly on a device with different tab setting, diff --git a/src/tools/entab/halt.c b/src/tools/entab/halt.c index af55fa9c2d..dfc5936fad 100644 --- a/src/tools/entab/halt.c +++ b/src/tools/entab/halt.c @@ -2,7 +2,7 @@ ** ** halt.c ** -** $PostgreSQL: pgsql/src/tools/entab/halt.c,v 1.10 2006/07/11 21:21:59 alvherre Exp $ +** src/tools/entab/halt.c ** ** This is used to print out error messages and exit */ diff --git a/src/tools/find_badmacros b/src/tools/find_badmacros index f58e213c9d..58f43086e9 100755 --- a/src/tools/find_badmacros +++ b/src/tools/find_badmacros @@ -3,7 +3,7 @@ # This script attempts to find bad ifdef's, i.e. ifdef's that use braces # but not the do { ... } while (0) syntax # -# $PostgreSQL: pgsql/src/tools/find_badmacros,v 1.2 2006/03/11 04:38:41 momjian Exp $ +# src/tools/find_badmacros # # This is useful for running before pgindent @@ -20,4 +20,3 @@ do }' "$FILE" grep -on '^#define.*{' "$FILE" | grep -v 'do[ ]*{' done - diff --git a/src/tools/find_gt_lt b/src/tools/find_gt_lt index 72bcad47ea..460a992694 100755 --- a/src/tools/find_gt_lt +++ b/src/tools/find_gt_lt @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/find_gt_lt,v 1.3 2006/10/16 17:28:03 momjian Exp $ +# src/tools/find_gt_lt grep "$@" '[^]a-z0-9"/!-]>' *.sgml ref/*.sgml grep "$@" '<[^]a-z0-9"/!-]' *.sgml ref/*.sgml diff --git a/src/tools/find_static b/src/tools/find_static index c841e9ab26..c7014e6014 100755 --- a/src/tools/find_static +++ b/src/tools/find_static @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/find_static,v 1.5 2006/07/14 14:59:00 momjian Exp $ +# src/tools/find_static trap "rm -f /tmp/$$" 0 1 2 3 15 @@ -26,8 +26,8 @@ echo " copy debug from '/tmp/"$$"'; - select * - into table debug2 + select * + into table debug2 from debug; create index idebug on debug(scope,func); @@ -35,8 +35,8 @@ echo " vacuum debug; vacuum debug2; - update debug2 - set scope = '_' + update debug2 + set scope = '_' from debug where debug2.func = debug.func and debug2.scope = 'T' and debug.scope = 'U'; @@ -49,4 +49,3 @@ echo " where scope = 'T' and func != 'main' order by file, func; " |psql debug - diff --git a/src/tools/find_typedef b/src/tools/find_typedef index 4e1ca88d96..8b07de62ef 100755 --- a/src/tools/find_typedef +++ b/src/tools/find_typedef @@ -1,15 +1,15 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/find_typedef,v 1.16 2009/06/12 03:09:07 momjian Exp $ +# src/tools/find_typedef # This script attempts to find all typedef's in the postgres binaries # by using 'nm' to report all typedef debugging symbols. -# -# For this program to work, you must have compiled all binaries with +# +# For this program to work, you must have compiled all binaries with # debugging symbols. # # This is run on BSD/OS 4.0 or Linux, so you may need to make changes. -# +# # Ignore the nm errors about a file not being a binary file. # # It gets typedefs by reading "STABS": diff --git a/src/tools/findoidjoins/Makefile b/src/tools/findoidjoins/Makefile index 5f7bd0c77f..b5e4fb73b1 100644 --- a/src/tools/findoidjoins/Makefile +++ b/src/tools/findoidjoins/Makefile @@ -2,9 +2,9 @@ # # Makefile for src/tools/findoidjoins # -# Copyright (c) 2003-2010, PostgreSQL Global Development Group +# Copyright (c) 2003-2011, PostgreSQL Global Development Group # -# $PostgreSQL: pgsql/src/tools/findoidjoins/Makefile,v 1.8 2010/07/05 18:54:38 tgl Exp $ +# src/tools/findoidjoins/Makefile # #------------------------------------------------------------------------- @@ -16,9 +16,9 @@ override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS) OBJS= findoidjoins.o -all: submake-libpq submake-libpgport findoidjoins +all: findoidjoins -findoidjoins: findoidjoins.o $(libpq_builddir)/libpq.a +findoidjoins: findoidjoins.o | submake-libpq submake-libpgport $(CC) $(CFLAGS) findoidjoins.o $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) clean distclean maintainer-clean: diff --git a/src/tools/findoidjoins/README b/src/tools/findoidjoins/README index c98569d13e..c4a96e3c4b 100644 --- a/src/tools/findoidjoins/README +++ b/src/tools/findoidjoins/README @@ -1,42 +1,44 @@ -$PostgreSQL: pgsql/src/tools/findoidjoins/README,v 1.7 2010/03/14 04:17:54 tgl Exp $ +src/tools/findoidjoins/README findoidjoins ============ This program scans a database and prints oid fields (also reg* fields) -and the tables they join to. We don't really recommend running it on -anything but an empty database, such as template1; else it's likely to -be very slow. +and the tables they join to. It is normally used to check the system +catalog join relationships (shown below for 9.1devel). -Run on an empty database, it returns the system join relationships (shown -below for 9.0devel). Note that unexpected matches may indicate bogus entries -in system tables --- don't accept a peculiar match without question. -In particular, a field shown as joining to more than one target table is -probably messed up. In 9.0devel, the *only* fields that should join to more -than one target are pg_description.objoid, pg_depend.objid, -pg_depend.refobjid, pg_shdescription.objoid, pg_shdepend.objid, and -pg_shdepend.refobjid. (Running make_oidjoins_check is an easy way to spot -fields joining to more than one table, BTW.) NOTE: in an empty database, -findoidjoins may not report joins for pg_shdescription and pg_shdepend for -lack of any entries there. +Historically this has been run against an empty database such as template1, +but there's a problem with that approach: some of the catalogs are empty +and so their joining columns won't show up in the output. Current practice +is to run it against the regression-test database, which populates the +catalogs in interesting ways. + +Note that unexpected matches may indicate bogus entries in system tables; +don't accept a peculiar match without question. In particular, a field +shown as joining to more than one target table is probably messed up. +In 9.1devel, the *only* fields that should join to more than one target +table are pg_description.objoid, pg_depend.objid, pg_depend.refobjid, +pg_shdescription.objoid, pg_shdepend.objid, and pg_shdepend.refobjid. +(Running make_oidjoins_check is an easy way to spot fields joining to more +than one table, BTW.) The shell script make_oidjoins_check converts findoidjoins' output into an SQL script that checks for dangling links (entries in an OID or REG* column that don't match any row in the expected table). -Note that fields joining to more than one table are NOT processed. +Note that fields joining to more than one table are NOT processed, +just reported as linking to more than one table. The result of make_oidjoins_check should be installed as the "oidjoins" regression test. The oidjoins test should be updated after any revision in the patterns of cross-links between system tables. -(Ideally we'd just regenerate the script as part of the regression -tests themselves, but that seems too slow...) +(Typically we update it at the end of each development cycle.) -NOTE: in 9.0devel, make_oidjoins_check produces two bogus join checks: +NOTE: as of 9.1devel, make_oidjoins_check produces two bogus join checks: Join pg_catalog.pg_class.relfilenode => pg_catalog.pg_class.oid Join pg_catalog.pg_database.datlastsysoid => pg_catalog.pg_database.oid These are artifacts and should not be added to the oidjoins regress test. You might also get output for pg_shdepend.refobjid and pg_shdescription.objoid, -neither of which should be added. +neither of which should be added to the regress test. --------------------------------------------------------------------------- @@ -55,6 +57,7 @@ Join pg_catalog.pg_am.amendscan => pg_catalog.pg_proc.oid Join pg_catalog.pg_am.ammarkpos => pg_catalog.pg_proc.oid Join pg_catalog.pg_am.amrestrpos => pg_catalog.pg_proc.oid Join pg_catalog.pg_am.ambuild => pg_catalog.pg_proc.oid +Join pg_catalog.pg_am.ambuildempty => pg_catalog.pg_proc.oid Join pg_catalog.pg_am.ambulkdelete => pg_catalog.pg_proc.oid Join pg_catalog.pg_am.amvacuumcleanup => pg_catalog.pg_proc.oid Join pg_catalog.pg_am.amcostestimate => pg_catalog.pg_proc.oid @@ -64,24 +67,33 @@ Join pg_catalog.pg_amop.amoplefttype => pg_catalog.pg_type.oid Join pg_catalog.pg_amop.amoprighttype => pg_catalog.pg_type.oid Join pg_catalog.pg_amop.amopopr => pg_catalog.pg_operator.oid Join pg_catalog.pg_amop.amopmethod => pg_catalog.pg_am.oid +Join pg_catalog.pg_amop.amopsortfamily => pg_catalog.pg_opfamily.oid Join pg_catalog.pg_amproc.amprocfamily => pg_catalog.pg_opfamily.oid Join pg_catalog.pg_amproc.amproclefttype => pg_catalog.pg_type.oid Join pg_catalog.pg_amproc.amprocrighttype => pg_catalog.pg_type.oid Join pg_catalog.pg_amproc.amproc => pg_catalog.pg_proc.oid +Join pg_catalog.pg_attrdef.adrelid => pg_catalog.pg_class.oid Join pg_catalog.pg_attribute.attrelid => pg_catalog.pg_class.oid Join pg_catalog.pg_attribute.atttypid => pg_catalog.pg_type.oid +Join pg_catalog.pg_attribute.attcollation => pg_catalog.pg_collation.oid Join pg_catalog.pg_cast.castsource => pg_catalog.pg_type.oid Join pg_catalog.pg_cast.casttarget => pg_catalog.pg_type.oid Join pg_catalog.pg_cast.castfunc => pg_catalog.pg_proc.oid Join pg_catalog.pg_class.relnamespace => pg_catalog.pg_namespace.oid Join pg_catalog.pg_class.reltype => pg_catalog.pg_type.oid +Join pg_catalog.pg_class.reloftype => pg_catalog.pg_type.oid Join pg_catalog.pg_class.relowner => pg_catalog.pg_authid.oid Join pg_catalog.pg_class.relam => pg_catalog.pg_am.oid Join pg_catalog.pg_class.reltablespace => pg_catalog.pg_tablespace.oid Join pg_catalog.pg_class.reltoastrelid => pg_catalog.pg_class.oid Join pg_catalog.pg_class.reltoastidxid => pg_catalog.pg_class.oid +Join pg_catalog.pg_collation.collnamespace => pg_catalog.pg_namespace.oid +Join pg_catalog.pg_collation.collowner => pg_catalog.pg_authid.oid Join pg_catalog.pg_constraint.connamespace => pg_catalog.pg_namespace.oid +Join pg_catalog.pg_constraint.conrelid => pg_catalog.pg_class.oid Join pg_catalog.pg_constraint.contypid => pg_catalog.pg_type.oid +Join pg_catalog.pg_constraint.conindid => pg_catalog.pg_class.oid +Join pg_catalog.pg_constraint.confrelid => pg_catalog.pg_class.oid Join pg_catalog.pg_conversion.connamespace => pg_catalog.pg_namespace.oid Join pg_catalog.pg_conversion.conowner => pg_catalog.pg_authid.oid Join pg_catalog.pg_conversion.conproc => pg_catalog.pg_proc.oid @@ -91,8 +103,13 @@ Join pg_catalog.pg_db_role_setting.setdatabase => pg_catalog.pg_database.oid Join pg_catalog.pg_depend.classid => pg_catalog.pg_class.oid Join pg_catalog.pg_depend.refclassid => pg_catalog.pg_class.oid Join pg_catalog.pg_description.classoid => pg_catalog.pg_class.oid +Join pg_catalog.pg_enum.enumtypid => pg_catalog.pg_type.oid +Join pg_catalog.pg_extension.extowner => pg_catalog.pg_authid.oid +Join pg_catalog.pg_extension.extnamespace => pg_catalog.pg_namespace.oid Join pg_catalog.pg_index.indexrelid => pg_catalog.pg_class.oid Join pg_catalog.pg_index.indrelid => pg_catalog.pg_class.oid +Join pg_catalog.pg_inherits.inhrelid => pg_catalog.pg_class.oid +Join pg_catalog.pg_inherits.inhparent => pg_catalog.pg_class.oid Join pg_catalog.pg_language.lanowner => pg_catalog.pg_authid.oid Join pg_catalog.pg_language.lanplcallfoid => pg_catalog.pg_proc.oid Join pg_catalog.pg_language.laninline => pg_catalog.pg_proc.oid @@ -120,6 +137,7 @@ Join pg_catalog.pg_opfamily.opfowner => pg_catalog.pg_authid.oid Join pg_catalog.pg_proc.pronamespace => pg_catalog.pg_namespace.oid Join pg_catalog.pg_proc.proowner => pg_catalog.pg_authid.oid Join pg_catalog.pg_proc.prolang => pg_catalog.pg_language.oid +Join pg_catalog.pg_proc.provariadic => pg_catalog.pg_type.oid Join pg_catalog.pg_proc.prorettype => pg_catalog.pg_type.oid Join pg_catalog.pg_rewrite.ev_class => pg_catalog.pg_class.oid Join pg_catalog.pg_shdepend.refclassid => pg_catalog.pg_class.oid @@ -129,6 +147,11 @@ Join pg_catalog.pg_statistic.staop1 => pg_catalog.pg_operator.oid Join pg_catalog.pg_statistic.staop2 => pg_catalog.pg_operator.oid Join pg_catalog.pg_statistic.staop3 => pg_catalog.pg_operator.oid Join pg_catalog.pg_tablespace.spcowner => pg_catalog.pg_authid.oid +Join pg_catalog.pg_trigger.tgrelid => pg_catalog.pg_class.oid +Join pg_catalog.pg_trigger.tgfoid => pg_catalog.pg_proc.oid +Join pg_catalog.pg_trigger.tgconstrrelid => pg_catalog.pg_class.oid +Join pg_catalog.pg_trigger.tgconstrindid => pg_catalog.pg_class.oid +Join pg_catalog.pg_trigger.tgconstraint => pg_catalog.pg_constraint.oid Join pg_catalog.pg_ts_config.cfgnamespace => pg_catalog.pg_namespace.oid Join pg_catalog.pg_ts_config.cfgowner => pg_catalog.pg_authid.oid Join pg_catalog.pg_ts_config.cfgparser => pg_catalog.pg_ts_parser.oid @@ -159,8 +182,13 @@ Join pg_catalog.pg_type.typmodin => pg_catalog.pg_proc.oid Join pg_catalog.pg_type.typmodout => pg_catalog.pg_proc.oid Join pg_catalog.pg_type.typanalyze => pg_catalog.pg_proc.oid Join pg_catalog.pg_type.typbasetype => pg_catalog.pg_type.oid +Join pg_catalog.pg_type.typcollation => pg_catalog.pg_collation.oid +Join pg_catalog.pg_constraint.conpfeqop []=> pg_catalog.pg_operator.oid +Join pg_catalog.pg_constraint.conppeqop []=> pg_catalog.pg_operator.oid +Join pg_catalog.pg_constraint.conffeqop []=> pg_catalog.pg_operator.oid +Join pg_catalog.pg_proc.proallargtypes []=> pg_catalog.pg_type.oid --------------------------------------------------------------------------- -Bruce Momjian (root@candle.pha.pa.us) +Bruce Momjian (bruce@momjian.us) Updated for 7.3 by Joe Conway (mail@joeconway.com) diff --git a/src/tools/findoidjoins/findoidjoins.c b/src/tools/findoidjoins/findoidjoins.c index 5bedee0e44..031a77fa70 100644 --- a/src/tools/findoidjoins/findoidjoins.c +++ b/src/tools/findoidjoins/findoidjoins.c @@ -1,9 +1,9 @@ /* * findoidjoins.c * - * Copyright (c) 2002-2010, PostgreSQL Global Development Group + * Copyright (c) 2002-2011, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/tools/findoidjoins/findoidjoins.c,v 1.8 2010/01/02 16:58:16 momjian Exp $ + * src/tools/findoidjoins/findoidjoins.c */ #include "postgres_fe.h" @@ -46,9 +46,7 @@ main(int argc, char **argv) /* Get a list of relations that have OIDs */ - resetPQExpBuffer(&sql); - - appendPQExpBuffer(&sql, "%s", + printfPQExpBuffer(&sql, "%s", "SET search_path = public;" "SELECT c.relname, (SELECT nspname FROM " "pg_catalog.pg_namespace n WHERE n.oid = c.relnamespace) AS nspname " @@ -68,9 +66,7 @@ main(int argc, char **argv) /* Get a list of columns of OID type (or any OID-alias type) */ - resetPQExpBuffer(&sql); - - appendPQExpBuffer(&sql, "%s", + printfPQExpBuffer(&sql, "%s", "SELECT c.relname, " "(SELECT nspname FROM pg_catalog.pg_namespace n WHERE n.oid = c.relnamespace) AS nspname, " "a.attname " @@ -113,15 +109,15 @@ main(int argc, char **argv) pk_relname = PQgetvalue(pkrel_res, pk, 0); pk_nspname = PQgetvalue(pkrel_res, pk, 1); - resetPQExpBuffer(&sql); - - appendPQExpBuffer(&sql, + printfPQExpBuffer(&sql, "SELECT 1 " "FROM \"%s\".\"%s\" t1, " "\"%s\".\"%s\" t2 " "WHERE t1.\"%s\"::pg_catalog.oid = t2.oid " "LIMIT 1", - fk_nspname, fk_relname, pk_nspname, pk_relname, fk_attname); + fk_nspname, fk_relname, + pk_nspname, pk_relname, + fk_attname); res = PQexec(conn, sql.data); if (!res || PQresultStatus(res) != PGRES_TUPLES_OK) @@ -139,8 +135,85 @@ main(int argc, char **argv) } } - PQclear(pkrel_res); PQclear(fkrel_res); + + /* Now, do the same for referencing columns that are arrays */ + + /* Get a list of columns of OID-array type (or any OID-alias type) */ + + printfPQExpBuffer(&sql, "%s", + "SELECT c.relname, " + "(SELECT nspname FROM pg_catalog.pg_namespace n WHERE n.oid = c.relnamespace) AS nspname, " + "a.attname " + "FROM pg_catalog.pg_class c, pg_catalog.pg_attribute a " + "WHERE a.attnum > 0 AND c.relkind = 'r' " + "AND a.attrelid = c.oid " + "AND a.atttypid IN ('pg_catalog.oid[]'::regtype, " + " 'pg_catalog.regclass[]'::regtype, " + " 'pg_catalog.regoper[]'::regtype, " + " 'pg_catalog.regoperator[]'::regtype, " + " 'pg_catalog.regproc[]'::regtype, " + " 'pg_catalog.regprocedure[]'::regtype, " + " 'pg_catalog.regtype[]'::regtype, " + " 'pg_catalog.regconfig[]'::regtype, " + " 'pg_catalog.regdictionary[]'::regtype) " + "ORDER BY nspname, c.relname, a.attnum" + ); + + res = PQexec(conn, sql.data); + if (!res || PQresultStatus(res) != PGRES_TUPLES_OK) + { + fprintf(stderr, "sql error: %s\n", PQerrorMessage(conn)); + exit(EXIT_FAILURE); + } + fkrel_res = res; + + /* + * For each column and each relation-having-OIDs, look to see if the + * column contains any values matching entries in the relation. + */ + + for (fk = 0; fk < PQntuples(fkrel_res); fk++) + { + fk_relname = PQgetvalue(fkrel_res, fk, 0); + fk_nspname = PQgetvalue(fkrel_res, fk, 1); + fk_attname = PQgetvalue(fkrel_res, fk, 2); + + for (pk = 0; pk < PQntuples(pkrel_res); pk++) + { + pk_relname = PQgetvalue(pkrel_res, pk, 0); + pk_nspname = PQgetvalue(pkrel_res, pk, 1); + + printfPQExpBuffer(&sql, + "SELECT 1 " + "FROM \"%s\".\"%s\" t1, " + "\"%s\".\"%s\" t2 " + "WHERE t2.oid = ANY(t1.\"%s\")" + "LIMIT 1", + fk_nspname, fk_relname, + pk_nspname, pk_relname, + fk_attname); + + res = PQexec(conn, sql.data); + if (!res || PQresultStatus(res) != PGRES_TUPLES_OK) + { + fprintf(stderr, "sql error: %s\n", PQerrorMessage(conn)); + exit(EXIT_FAILURE); + } + + if (PQntuples(res) != 0) + printf("Join %s.%s.%s []=> %s.%s.oid\n", + fk_nspname, fk_relname, fk_attname, + pk_nspname, pk_relname); + + PQclear(res); + } + } + + PQclear(fkrel_res); + + PQclear(pkrel_res); + PQfinish(conn); termPQExpBuffer(&sql); diff --git a/src/tools/findoidjoins/make_oidjoins_check b/src/tools/findoidjoins/make_oidjoins_check index 6321260a0f..09d283462c 100755 --- a/src/tools/findoidjoins/make_oidjoins_check +++ b/src/tools/findoidjoins/make_oidjoins_check @@ -1,8 +1,8 @@ #! /bin/sh -# $PostgreSQL: pgsql/src/tools/findoidjoins/make_oidjoins_check,v 1.3 2008/10/13 12:59:29 tgl Exp $ +# src/tools/findoidjoins/make_oidjoins_check -# You first run findoidjoins on the template1 database, and send that +# You first run findoidjoins on the regression database, then send that # output into this script to generate a list of SQL statements. # NOTE: any field that findoidjoins thinks joins to more than one table @@ -12,17 +12,16 @@ # Caution: you may need to use GNU awk. AWK=${AWK:-awk} -TMP="${TMPDIR:-/tmp}/make_oidjoins_check.$$" -trap "rm -rf $TMP" 0 1 2 3 15 - # Create a temporary directory with the proper permissions so no one can # intercept our temporary files and cause a security breach. +TMP="${TMPDIR:-/tmp}/make_oidjoins_check.$$" OMASK="`umask`" umask 077 if ! mkdir $TMP then echo "Can't create temporary directory $TMP." 1>&2 exit 1 fi +trap "rm -rf $TMP" 0 1 2 3 15 umask "$OMASK" unset OMASK @@ -40,7 +39,7 @@ if [ -s $DUPSFILE ] ; then cat $DUPSFILE 1>&2 fi -# Get the non-multiply-referenced fields. +# Get the fields without multiple references. cat $INPUTFILE | while read LINE do set -- $LINE @@ -49,7 +48,7 @@ done >$NONDUPSFILE # Generate the output. cat $NONDUPSFILE | -$AWK -F'[ \.]' '\ +$AWK -F'[ .]' '\ BEGIN \ { printf "\ @@ -57,14 +56,25 @@ $AWK -F'[ \.]' '\ -- This is created by pgsql/src/tools/findoidjoins/make_oidjoins_check\n\ --\n"; } + $5 == "=>" \ { printf "\ -SELECT ctid, %s \n\ -FROM %s.%s fk \n\ -WHERE %s != 0 AND \n\ +SELECT ctid, %s\n\ +FROM %s.%s fk\n\ +WHERE %s != 0 AND\n\ NOT EXISTS(SELECT 1 FROM %s.%s pk WHERE pk.oid = fk.%s);\n", $4, $2, $3, $4, $6, $7, $4; + } + $5 == "[]=>" \ + { + printf "\ +SELECT ctid, %s\n\ +FROM (SELECT ctid, unnest(%s) AS %s FROM %s.%s) fk\n\ +WHERE %s != 0 AND\n\ + NOT EXISTS(SELECT 1 FROM %s.%s pk WHERE pk.oid = fk.%s);\n", + $4, $4, $4, $2, $3, $4, + $6, $7, $4; }' exit 0 diff --git a/src/tools/fsync/Makefile b/src/tools/fsync/Makefile deleted file mode 100644 index 2ddbbe9f47..0000000000 --- a/src/tools/fsync/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -#------------------------------------------------------------------------- -# -# Makefile for src/tools/fsync -# -# Copyright (c) 2003-2010, PostgreSQL Global Development Group -# -# $PostgreSQL: pgsql/src/tools/fsync/Makefile,v 1.9 2010/07/05 18:54:38 tgl Exp $ -# -#------------------------------------------------------------------------- - -subdir = src/tools/fsync -top_builddir = ../../.. -include $(top_builddir)/src/Makefile.global - -override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS) - -OBJS= test_fsync.o - -all: submake-libpq submake-libpgport test_fsync - -test_fsync: test_fsync.o $(libpq_builddir)/libpq.a - $(CC) $(CFLAGS) test_fsync.o $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X) - -clean distclean maintainer-clean: - rm -f test_fsync$(X) $(OBJS) diff --git a/src/tools/fsync/README b/src/tools/fsync/README deleted file mode 100644 index 0ab84b1ef0..0000000000 --- a/src/tools/fsync/README +++ /dev/null @@ -1,11 +0,0 @@ -$PostgreSQL: pgsql/src/tools/fsync/README,v 1.5 2009/11/28 15:04:54 momjian Exp $ - -fsync -===== - -This program tests fsync. The tests are described as part of the program output. - - Usage: test_fsync [-f filename] [loops] - -Loops defaults to 5000. The default output file is /var/tmp/test_fsync.out. -Consider that /tmp or /var/tmp might be memory-based file systems. diff --git a/src/tools/fsync/test_fsync.c b/src/tools/fsync/test_fsync.c deleted file mode 100644 index c237096717..0000000000 --- a/src/tools/fsync/test_fsync.c +++ /dev/null @@ -1,384 +0,0 @@ -/* - * $PostgreSQL: pgsql/src/tools/fsync/test_fsync.c,v 1.30 2010/07/06 19:19:02 momjian Exp $ - * - * - * test_fsync.c - * test various fsync() methods - */ - -#include "postgres.h" - -#include "access/xlog_internal.h" -#include "access/xlog.h" -#include "access/xlogdefs.h" - -#include <sys/types.h> -#include <sys/stat.h> -#include <fcntl.h> -#include <stdio.h> -#include <stdlib.h> -#include <time.h> -#include <sys/time.h> -#include <unistd.h> -#include <string.h> - - -#ifdef WIN32 -#define FSYNC_FILENAME "./test_fsync.out" -#else -/* /tmp might be a memory file system */ -#define FSYNC_FILENAME "/var/tmp/test_fsync.out" -#endif - -#define WRITE_SIZE (8 * 1024) /* 8k */ - -#define LABEL_FORMAT "\t%-30s" - -int loops = 10000; - -void die(char *str); -void print_elapse(struct timeval start_t, struct timeval stop_t); - -int -main(int argc, char *argv[]) -{ - struct timeval start_t; - struct timeval stop_t; - int tmpfile, - i; - char *full_buf = (char *) malloc(XLOG_SEG_SIZE), - *buf; - char *filename = FSYNC_FILENAME; - - if (argc > 2 && strcmp(argv[1], "-f") == 0) - { - filename = argv[2]; - argv += 2; - argc -= 2; - } - - if (argc > 1) - loops = atoi(argv[1]); - - for (i = 0; i < XLOG_SEG_SIZE; i++) - full_buf[i] = random(); - - if ((tmpfile = open(filename, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR, 0)) == -1) - die("Cannot open output file."); - if (write(tmpfile, full_buf, XLOG_SEG_SIZE) != XLOG_SEG_SIZE) - die("write failed"); - /* fsync now so later fsync's don't have to do it */ - if (fsync(tmpfile) != 0) - die("fsync failed"); - close(tmpfile); - - buf = (char *) TYPEALIGN(ALIGNOF_XLOG_BUFFER, full_buf); - - printf("Loops = %d\n\n", loops); - - /* - * Simple write - */ - printf("Simple write:\n"); - /* write only */ - gettimeofday(&start_t, NULL); - for (i = 0; i < loops; i++) - { - if ((tmpfile = open(filename, O_RDWR, 0)) == -1) - die("Cannot open output file."); - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - close(tmpfile); - } - gettimeofday(&stop_t, NULL); - printf(LABEL_FORMAT, "8k write"); - print_elapse(start_t, stop_t); - - /* - * Compare file sync methods with one 8k write - */ - printf("\nCompare file sync methods using one write:\n"); - -#ifdef OPEN_DATASYNC_FLAG - /* open_dsync, write */ - if ((tmpfile = open(filename, O_RDWR | O_DSYNC, 0)) == -1) - die("Cannot open output file."); - gettimeofday(&start_t, NULL); - for (i = 0; i < loops; i++) - { - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - if (lseek(tmpfile, 0, SEEK_SET) == -1) - die("seek failed"); - } - gettimeofday(&stop_t, NULL); - close(tmpfile); - printf(LABEL_FORMAT, "open_datasync 8k write"); - print_elapse(start_t, stop_t); -#else - printf("\t(open_datasync unavailable)\n"); -#endif - -#ifdef OPEN_SYNC_FLAG - /* open_fsync, write */ - if ((tmpfile = open(filename, O_RDWR | OPEN_SYNC_FLAG, 0)) == -1) - die("Cannot open output file."); - gettimeofday(&start_t, NULL); - for (i = 0; i < loops; i++) - { - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - if (lseek(tmpfile, 0, SEEK_SET) == -1) - die("seek failed"); - } - gettimeofday(&stop_t, NULL); - close(tmpfile); - printf(LABEL_FORMAT, "open_sync 8k write"); - print_elapse(start_t, stop_t); -#else - printf("\t(open_sync unavailable)\n"); -#endif - -#ifdef HAVE_FDATASYNC - /* write, fdatasync */ - if ((tmpfile = open(filename, O_RDWR, 0)) == -1) - die("Cannot open output file."); - gettimeofday(&start_t, NULL); - for (i = 0; i < loops; i++) - { - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - fdatasync(tmpfile); - if (lseek(tmpfile, 0, SEEK_SET) == -1) - die("seek failed"); - } - gettimeofday(&stop_t, NULL); - close(tmpfile); - printf(LABEL_FORMAT, "8k write, fdatasync"); - print_elapse(start_t, stop_t); -#else - printf("\t(fdatasync unavailable)\n"); -#endif - - /* write, fsync, close */ - if ((tmpfile = open(filename, O_RDWR, 0)) == -1) - die("Cannot open output file."); - gettimeofday(&start_t, NULL); - for (i = 0; i < loops; i++) - { - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - if (fsync(tmpfile) != 0) - die("fsync failed"); - if (lseek(tmpfile, 0, SEEK_SET) == -1) - die("seek failed"); - } - gettimeofday(&stop_t, NULL); - close(tmpfile); - printf(LABEL_FORMAT, "8k write, fsync"); - print_elapse(start_t, stop_t); - - /* - * Compare file sync methods with two 8k write - */ - printf("\nCompare file sync methods using two writes:\n"); - -#ifdef OPEN_DATASYNC_FLAG - /* open_dsync, write */ - if ((tmpfile = open(filename, O_RDWR | O_DSYNC, 0)) == -1) - die("Cannot open output file."); - gettimeofday(&start_t, NULL); - for (i = 0; i < loops; i++) - { - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - if (lseek(tmpfile, 0, SEEK_SET) == -1) - die("seek failed"); - } - gettimeofday(&stop_t, NULL); - close(tmpfile); - printf(LABEL_FORMAT, "2 open_datasync 8k writes"); - print_elapse(start_t, stop_t); -#else - printf("\t(open_datasync unavailable)\n"); -#endif - -#ifdef OPEN_SYNC_FLAG - /* open_fsync, write */ - if ((tmpfile = open(filename, O_RDWR | OPEN_SYNC_FLAG, 0)) == -1) - die("Cannot open output file."); - gettimeofday(&start_t, NULL); - for (i = 0; i < loops; i++) - { - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - if (lseek(tmpfile, 0, SEEK_SET) == -1) - die("seek failed"); - } - gettimeofday(&stop_t, NULL); - close(tmpfile); - printf(LABEL_FORMAT, "2 open_sync 8k writes"); - print_elapse(start_t, stop_t); -#endif - -#ifdef HAVE_FDATASYNC - /* write, fdatasync */ - if ((tmpfile = open(filename, O_RDWR, 0)) == -1) - die("Cannot open output file."); - gettimeofday(&start_t, NULL); - for (i = 0; i < loops; i++) - { - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - fdatasync(tmpfile); - if (lseek(tmpfile, 0, SEEK_SET) == -1) - die("seek failed"); - } - gettimeofday(&stop_t, NULL); - close(tmpfile); - printf(LABEL_FORMAT, "8k write, 8k write, fdatasync"); - print_elapse(start_t, stop_t); -#else - printf("\t(fdatasync unavailable)\n"); -#endif - - /* write, fsync, close */ - if ((tmpfile = open(filename, O_RDWR, 0)) == -1) - die("Cannot open output file."); - gettimeofday(&start_t, NULL); - for (i = 0; i < loops; i++) - { - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - if (fsync(tmpfile) != 0) - die("fsync failed"); - if (lseek(tmpfile, 0, SEEK_SET) == -1) - die("seek failed"); - } - gettimeofday(&stop_t, NULL); - close(tmpfile); - printf(LABEL_FORMAT, "8k write, 8k write, fsync"); - print_elapse(start_t, stop_t); - - /* - * Compare 1 to 2 writes - */ - printf("\nCompare open_sync with different sizes:\n"); - -#ifdef OPEN_SYNC_FLAG - /* 16k open_sync write */ - if ((tmpfile = open(filename, O_RDWR | OPEN_SYNC_FLAG, 0)) == -1) - die("Cannot open output file."); - gettimeofday(&start_t, NULL); - for (i = 0; i < loops; i++) - { - if (write(tmpfile, buf, WRITE_SIZE * 2) != WRITE_SIZE * 2) - die("write failed"); - if (lseek(tmpfile, 0, SEEK_SET) == -1) - die("seek failed"); - } - gettimeofday(&stop_t, NULL); - close(tmpfile); - printf(LABEL_FORMAT, "open_sync 16k write"); - print_elapse(start_t, stop_t); - - /* Two 8k open_sync writes */ - if ((tmpfile = open(filename, O_RDWR | OPEN_SYNC_FLAG, 0)) == -1) - die("Cannot open output file."); - gettimeofday(&start_t, NULL); - for (i = 0; i < loops; i++) - { - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - if (lseek(tmpfile, 0, SEEK_SET) == -1) - die("seek failed"); - } - gettimeofday(&stop_t, NULL); - close(tmpfile); - printf(LABEL_FORMAT, "2 open_sync 8k writes"); - print_elapse(start_t, stop_t); -#else - printf("\t(open_sync unavailable)\n"); -#endif - - /* - * Fsync another file descriptor? - */ - printf("\nTest if fsync on non-write file descriptor is honored:\n"); - printf("(If the times are similar, fsync() can sync data written\n"); - printf("on a different descriptor.)\n"); - - /* write, fsync, close */ - gettimeofday(&start_t, NULL); - for (i = 0; i < loops; i++) - { - if ((tmpfile = open(filename, O_RDWR, 0)) == -1) - die("Cannot open output file."); - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - if (fsync(tmpfile) != 0) - die("fsync failed"); - close(tmpfile); - if ((tmpfile = open(filename, O_RDWR, 0)) == -1) - die("Cannot open output file."); - /* do nothing but the open/close the tests are consistent. */ - close(tmpfile); - } - gettimeofday(&stop_t, NULL); - printf(LABEL_FORMAT, "8k write, fsync, close"); - print_elapse(start_t, stop_t); - - /* write, close, fsync */ - gettimeofday(&start_t, NULL); - for (i = 0; i < loops; i++) - { - if ((tmpfile = open(filename, O_RDWR, 0)) == -1) - die("Cannot open output file."); - if (write(tmpfile, buf, WRITE_SIZE) != WRITE_SIZE) - die("write failed"); - close(tmpfile); - /* reopen file */ - if ((tmpfile = open(filename, O_RDWR, 0)) == -1) - die("Cannot open output file."); - if (fsync(tmpfile) != 0) - die("fsync failed"); - close(tmpfile); - } - gettimeofday(&stop_t, NULL); - printf(LABEL_FORMAT, "8k write, close, fsync"); - print_elapse(start_t, stop_t); - - /* cleanup */ - free(full_buf); - unlink(filename); - - return 0; -} - -void -print_elapse(struct timeval start_t, struct timeval stop_t) -{ - double total_time = (stop_t.tv_sec - start_t.tv_sec) + - /* usec subtraction might be negative, e.g. 5.4 - 4.8 */ - (stop_t.tv_usec - start_t.tv_usec) * 0.000001; - double per_second = loops / total_time; - - printf("%9.3f/second\n", per_second); -} - -void -die(char *str) -{ - fprintf(stderr, "%s\n", str); - exit(1); -} diff --git a/src/tools/git-external-diff b/src/tools/git-external-diff new file mode 100644 index 0000000000..59fa36624c --- /dev/null +++ b/src/tools/git-external-diff @@ -0,0 +1,24 @@ +#!/bin/bash + +# This script is used to produce git context diffs + +# Supplied parameters: +# $1 $2 $3 $4 $5 $6 $7 +# path old-file old-hash old-mode new-file new-hash new-mode +# 'path' is the git-tree-relative path of the file being diff'ed + +old_hash="$3" +new_hash=$(git hash-object "$5") + +# no change? +[ "$old_hash" = "$new_hash" ] && exit 0 + +[ "$DIFF_OPTS" = "" ] && DIFF_OPTS='-pcd' + +echo "diff --git a/$1 b/$1" +echo "new file mode $7" +echo "index ${old_hash:0:7}..${new_hash:0:7}" + +diff --label a/"$1" --label b/"$1" $DIFF_OPTS "$2" "$5" + +exit 0 diff --git a/src/tools/git_changelog b/src/tools/git_changelog new file mode 100755 index 0000000000..af76f6d0cc --- /dev/null +++ b/src/tools/git_changelog @@ -0,0 +1,284 @@ +#!/usr/bin/perl + +# +# src/tools/git_changelog +# +# Display all commits on active branches, merging together commits from +# different branches that occur close together in time and with identical +# log messages. Commits are annotated with branch and release info thus: +# Branch: REL8_3_STABLE Release: REL8_3_2 [92c3a8004] 2008-03-29 00:15:37 +0000 +# This shows that the commit on REL8_3_STABLE was released in 8.3.2. +# Commits on master will usually instead have notes like +# Branch: master Release: REL8_4_BR [6fc9d4272] 2008-03-29 00:15:28 +0000 +# showing that this commit is ancestral to release branches 8.4 and later. +# If no Release: marker appears, the commit hasn't yet made it into any +# release. +# +# Most of the time, matchable commits occur in the same order on all branches, +# and we print them out in that order. However, if commit A occurs before +# commit B on branch X and commit B occurs before commit A on branch Y, then +# there's no ordering which is consistent with both branches. +# +# When we encounter a situation where there's no single "best" commit to +# print next, we print the one that involves the least distortion of the +# commit order, summed across all branches. In the event of a tie on the +# distortion measure (which is actually the common case: normally, the +# distortion is zero), we choose the commit with latest timestamp. If +# that's a tie too, the commit from the newer branch prints first. +# + +use strict; +use warnings; +require Time::Local; +require Getopt::Long; +require IPC::Open2; + +# Adjust this list when the set of interesting branches changes. +# (We could get this from "git branches", but not worth the trouble.) +# NB: master must be first! +my @BRANCHES = qw(master REL9_0_STABLE REL8_4_STABLE REL8_3_STABLE + REL8_2_STABLE REL8_1_STABLE REL8_0_STABLE REL7_4_STABLE REL7_3_STABLE + REL7_2_STABLE REL7_1_STABLE REL7_0_PATCHES REL6_5_PATCHES REL6_4); + +# Might want to make this parameter user-settable. +my $timestamp_slop = 600; + +my $post_date = 0; +my $since; +Getopt::Long::GetOptions('post-date' => \$post_date, + 'since=s' => \$since) || usage(); +usage() if @ARGV; + +my @git = qw(git log --date=iso); +push @git, '--since=' . $since if defined $since; + +# Collect the release tag data +my %rel_tags; + +{ + my $cmd = "git for-each-ref refs/tags"; + my $pid = IPC::Open2::open2(my $git_out, my $git_in, $cmd) + || die "can't run $cmd: $!"; + while (my $line = <$git_out>) { + if ($line =~ m|^([a-f0-9]+)\s+commit\s+refs/tags/(\S+)|) { + my $commit = $1; + my $tag = $2; + if ($tag =~ /^REL\d+_\d+$/ || + $tag =~ /^REL\d+_\d+_\d+$/) { + $rel_tags{$commit} = $tag; + } + } + } + waitpid($pid, 0); + my $child_exit_status = $? >> 8; + die "$cmd failed" if $child_exit_status != 0; +} + +# Collect the commit data +my %all_commits; +my %all_commits_by_branch; +# This remembers where each branch sprouted from master. Note the values +# will be wrong if --since terminates the log listing before the branch +# sprouts; but in that case it doesn't matter since we also won't reach +# the part of master where it would matter. +my %sprout_tags; + +for my $branch (@BRANCHES) { + my @cmd = @git; + if ($branch eq "master") { + push @cmd, "origin/$branch"; + } else { + push @cmd, "--parents"; + push @cmd, "master..origin/$branch"; + } + my $pid = IPC::Open2::open2(my $git_out, my $git_in, @cmd) + || die "can't run @cmd: $!"; + my $last_tag = undef; + my $last_parent; + my %commit; + while (my $line = <$git_out>) { + if ($line =~ /^commit\s+(\S+)/) { + push_commit(\%commit) if %commit; + $last_tag = $rel_tags{$1} if defined $rel_tags{$1}; + %commit = ( + 'branch' => $branch, + 'commit' => $1, + 'last_tag' => $last_tag, + 'message' => '', + ); + if ($line =~ /^commit\s+\S+\s+(\S+)/) { + $last_parent = $1; + } else { + $last_parent = undef; + } + } + elsif ($line =~ /^Author:\s+(.*)/) { + $commit{'author'} = $1; + } + elsif ($line =~ /^Date:\s+(.*)/) { + $commit{'date'} = $1; + } + elsif ($line =~ /^\s\s/) { + $commit{'message'} .= $line; + } + } + push_commit(\%commit) if %commit; + $sprout_tags{$last_parent} = $branch if defined $last_parent; + waitpid($pid, 0); + my $child_exit_status = $? >> 8; + die "@cmd failed" if $child_exit_status != 0; +} + +# Run through the master branch and apply tags. We already tagged the other +# branches, but master needs a separate pass after we've acquired the +# sprout_tags data. Also, in post-date mode we need to add phony entries +# for branches that sprouted after a particular master commit was made. +{ + my $last_tag = undef; + my %sprouted_branches; + for my $cc (@{$all_commits_by_branch{'master'}}) { + my $commit = $cc->{'commit'}; + my $c = $cc->{'commits'}->[0]; + $last_tag = $rel_tags{$commit} if defined $rel_tags{$commit}; + if (defined $sprout_tags{$commit}) { + $last_tag = $sprout_tags{$commit}; + # normalize branch names for making sprout tags + $last_tag =~ s/^(REL\d+_\d+).*/$1_BR/; + } + $c->{'last_tag'} = $last_tag; + if ($post_date) { + if (defined $sprout_tags{$commit}) { + $sprouted_branches{$sprout_tags{$commit}} = 1; + } + # insert new commits between master and any other commits + my @new_commits = ( shift @{$cc->{'commits'}} ); + for my $branch (reverse sort keys %sprouted_branches) { + my $ccopy = {%{$c}}; + $ccopy->{'branch'} = $branch; + push @new_commits, $ccopy; + } + $cc->{'commits'} = [ @new_commits, @{$cc->{'commits'}} ]; + } + } +} + +my %position; +for my $branch (@BRANCHES) { + $position{$branch} = 0; +} + +while (1) { + my $best_branch; + my $best_inversions; + my $best_timestamp; + for my $branch (@BRANCHES) { + my $leader = $all_commits_by_branch{$branch}->[$position{$branch}]; + next if !defined $leader; + my $inversions = 0; + for my $branch2 (@BRANCHES) { + if (defined $leader->{'branch_position'}{$branch2}) { + $inversions += $leader->{'branch_position'}{$branch2} + - $position{$branch2}; + } + } + if (!defined $best_inversions || + $inversions < $best_inversions || + ($inversions == $best_inversions && + $leader->{'timestamp'} > $best_timestamp)) { + $best_branch = $branch; + $best_inversions = $inversions; + $best_timestamp = $leader->{'timestamp'}; + } + } + last if !defined $best_branch; + my $winner = + $all_commits_by_branch{$best_branch}->[$position{$best_branch}]; + printf "Author: %s\n", $winner->{'author'}; + foreach my $c (@{$winner->{'commits'}}) { + printf "Branch: %s", $c->{'branch'}; + if (defined $c->{'last_tag'}) { + printf " Release: %s", $c->{'last_tag'}; + } + printf " [%s] %s\n", substr($c->{'commit'}, 0, 9), $c->{'date'}; + } + print "Commit-Order-Inversions: $best_inversions\n" + if $best_inversions != 0; + print "\n"; + print $winner->{'message'}; + print "\n"; + $winner->{'done'} = 1; + for my $branch (@BRANCHES) { + my $leader = $all_commits_by_branch{$branch}->[$position{$branch}]; + if (defined $leader && $leader->{'done'}) { + ++$position{$branch}; + redo; + } + } +} + +sub push_commit { + my ($c) = @_; + my $ht = hash_commit($c); + my $ts = parse_datetime($c->{'date'}); + my $cc; + # Note that this code will never merge two commits on the same branch, + # even if they have the same hash (author/message) and nearby + # timestamps. This means that there could be multiple potential + # matches when we come to add a commit from another branch. Prefer + # the closest-in-time one. + for my $candidate (@{$all_commits{$ht}}) { + my $diff = abs($ts - $candidate->{'timestamp'}); + if ($diff < $timestamp_slop && + !exists $candidate->{'branch_position'}{$c->{'branch'}}) + { + if (!defined $cc || + $diff < abs($ts - $cc->{'timestamp'})) { + $cc = $candidate; + } + } + } + if (!defined $cc) { + $cc = { + 'author' => $c->{'author'}, + 'message' => $c->{'message'}, + 'commit' => $c->{'commit'}, + 'commits' => [], + 'timestamp' => $ts + }; + push @{$all_commits{$ht}}, $cc; + } + # stash only the fields we'll need later + my $smallc = { + 'branch' => $c->{'branch'}, + 'commit' => $c->{'commit'}, + 'date' => $c->{'date'}, + 'last_tag' => $c->{'last_tag'} + }; + push @{$cc->{'commits'}}, $smallc; + push @{$all_commits_by_branch{$c->{'branch'}}}, $cc; + $cc->{'branch_position'}{$c->{'branch'}} = + -1+@{$all_commits_by_branch{$c->{'branch'}}}; +} + +sub hash_commit { + my ($c) = @_; + return $c->{'author'} . "\0" . $c->{'message'}; +} + +sub parse_datetime { + my ($dt) = @_; + $dt =~ /^(\d\d\d\d)-(\d\d)-(\d\d)\s+(\d\d):(\d\d):(\d\d)\s+([-+])(\d\d)(\d\d)$/; + my $gm = Time::Local::timegm($6, $5, $4, $3, $2-1, $1); + my $tzoffset = ($8 * 60 + $9) * 60; + $tzoffset = - $tzoffset if $7 eq '-'; + return $gm - $tzoffset; +} + +sub usage { + print STDERR <<EOM; +Usage: git_changelog [--post-date/-p] [--since=SINCE] + --post-date Show branches made after a commit occurred + --since Print only commits dated since SINCE +EOM + exit 1; +} diff --git a/src/tools/ifaddrs/Makefile b/src/tools/ifaddrs/Makefile index 72a6aa7de8..ab832afe58 100644 --- a/src/tools/ifaddrs/Makefile +++ b/src/tools/ifaddrs/Makefile @@ -2,9 +2,9 @@ # # Makefile for src/tools/ifaddrs # -# Copyright (c) 2003-2010, PostgreSQL Global Development Group +# Copyright (c) 2003-2011, PostgreSQL Global Development Group # -# $PostgreSQL: pgsql/src/tools/ifaddrs/Makefile,v 1.3 2010/07/05 18:54:38 tgl Exp $ +# src/tools/ifaddrs/Makefile # #------------------------------------------------------------------------- diff --git a/src/tools/ifaddrs/README b/src/tools/ifaddrs/README index 9b0bd58517..9f92803eb5 100644 --- a/src/tools/ifaddrs/README +++ b/src/tools/ifaddrs/README @@ -1,4 +1,4 @@ -$PostgreSQL: pgsql/src/tools/ifaddrs/README,v 1.1 2009/10/01 01:58:58 tgl Exp $ +src/tools/ifaddrs/README test_ifaddrs ============ diff --git a/src/tools/ifaddrs/test_ifaddrs.c b/src/tools/ifaddrs/test_ifaddrs.c index 9ba6f11809..48d184c84a 100644 --- a/src/tools/ifaddrs/test_ifaddrs.c +++ b/src/tools/ifaddrs/test_ifaddrs.c @@ -1,5 +1,5 @@ /* - * $PostgreSQL: pgsql/src/tools/ifaddrs/test_ifaddrs.c,v 1.2 2010/02/26 02:01:40 momjian Exp $ + * src/tools/ifaddrs/test_ifaddrs.c * * * test_ifaddrs.c diff --git a/src/tools/make_ctags b/src/tools/make_ctags index 18d96db5b8..4fc01f543d 100755 --- a/src/tools/make_ctags +++ b/src/tools/make_ctags @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/make_ctags,v 1.12 2009/01/14 21:59:19 momjian Exp $ +# src/tools/make_ctags trap "rm -f /tmp/$$" 0 1 2 3 15 rm -f ./tags diff --git a/src/tools/make_diff/README b/src/tools/make_diff/README index 9e333b6164..9401a74a64 100644 --- a/src/tools/make_diff/README +++ b/src/tools/make_diff/README @@ -1,4 +1,4 @@ -$PostgreSQL: pgsql/src/tools/make_diff/README,v 1.4 2008/03/21 13:23:29 momjian Exp $ +src/tools/make_diff/README scripts ======= @@ -14,7 +14,7 @@ for every file in the current directory. I can: cporig `grep -l HeapTuple *` If I use mkid (from ftp.postgreSQL.org), I can do: - + cporig `lid -kn 'fsyncOff'` and get a copy of every file containing that word. I can then do: @@ -29,7 +29,7 @@ to edit all those files. When I am ready to generate a patch, I run 'difforig' command from the top of the source tree: - + I pipe the output of this to a file to hold my patch, and the file names it processes appear on my screen. It creates a nice patch for me of all the files I used with cporig. @@ -37,4 +37,3 @@ the files I used with cporig. Finally, I remove my old copies with 'rmorig'. Bruce Momjian - diff --git a/src/tools/make_diff/cporig b/src/tools/make_diff/cporig index a4f2f24d63..7b8f75feb4 100755 --- a/src/tools/make_diff/cporig +++ b/src/tools/make_diff/cporig @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/make_diff/cporig,v 1.2 2006/03/11 04:38:42 momjian Exp $ +# src/tools/make_diff/cporig for FILE do diff --git a/src/tools/make_diff/difforig b/src/tools/make_diff/difforig index a65d7b5dba..08119a42c3 100755 --- a/src/tools/make_diff/difforig +++ b/src/tools/make_diff/difforig @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/make_diff/difforig,v 1.2 2006/03/11 04:38:42 momjian Exp $ +# src/tools/make_diff/difforig if [ "$#" -eq 0 ] then APATH="." diff --git a/src/tools/make_diff/rmorig b/src/tools/make_diff/rmorig index 5d405d0504..9879b786f4 100755 --- a/src/tools/make_diff/rmorig +++ b/src/tools/make_diff/rmorig @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/make_diff/rmorig,v 1.2 2006/03/11 04:38:42 momjian Exp $ +# src/tools/make_diff/rmorig if [ "$#" -eq 0 ] then APATH="." diff --git a/src/tools/make_etags b/src/tools/make_etags index 6acb0df0de..3ce96bc3ca 100755 --- a/src/tools/make_etags +++ b/src/tools/make_etags @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/make_etags,v 1.6 2009/01/14 21:59:19 momjian Exp $ +# src/tools/make_etags rm -f ./TAGS diff --git a/src/tools/make_keywords b/src/tools/make_keywords index 4aba19eb02..abbbfe000f 100755 --- a/src/tools/make_keywords +++ b/src/tools/make_keywords @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/make_keywords,v 1.2 2006/03/11 04:38:41 momjian Exp $ +# src/tools/make_keywords cat <<END To get a list of keywords compared to SQL'92, take the keywords out of diff --git a/src/tools/make_mkid b/src/tools/make_mkid index 6938d9b4fd..0c3414073b 100755 --- a/src/tools/make_mkid +++ b/src/tools/make_mkid @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/make_mkid,v 1.11 2006/03/11 04:38:41 momjian Exp $ +# src/tools/make_mkid mkid `find \`pwd\`/ \( -name _deadcode -a -prune \) -o \ -type f -name '*.[chyl]' -print|sed 's;//;/;g'` diff --git a/src/tools/msvc/Install.pm b/src/tools/msvc/Install.pm index 2026d18479..f1028b7374 100644 --- a/src/tools/msvc/Install.pm +++ b/src/tools/msvc/Install.pm @@ -3,7 +3,7 @@ package Install; # # Package that provides 'make install' functionality for msvc builds # -# $PostgreSQL: pgsql/src/tools/msvc/Install.pm,v 1.35 2010/04/09 13:05:58 mha Exp $ +# src/tools/msvc/Install.pm # use strict; use warnings; @@ -56,8 +56,10 @@ sub Install my $majorver = DetermineMajorVersion(); print "Installing version $majorver for $conf in $target\n"; - EnsureDirectories($target, 'bin','lib','share','share/timezonesets','share/contrib','doc', - 'doc/contrib', 'symbols', 'share/tsearch_data'); + EnsureDirectories($target, 'bin', 'lib', 'share', 'share/timezonesets', + 'share/extension', 'share/contrib', + 'doc', 'doc/extension', 'doc/contrib', + 'symbols', 'share/tsearch_data'); CopySolutionOutput($conf, $target); lcopy($target . '/lib/libpq.dll', $target . '/bin/libpq.dll'); @@ -111,6 +113,25 @@ sub Install CopyContribFiles($config,$target); CopyIncludeFiles($target); + my $pl_extension_files = []; + my @pldirs = ('src/pl/plpgsql/src'); + push @pldirs,"src/pl/plperl" if $config->{perl}; + push @pldirs,"src/pl/plpython" if $config->{python}; + push @pldirs,"src/pl/tcl" if $config->{tcl}; + File::Find::find( + { + wanted =>sub { + /^(.*--.*\.sql|.*\.control)\z/s + &&push(@$pl_extension_files, $File::Find::name); + } + }, + @pldirs + ); + CopySetOfFiles( + 'PL Extension files', $pl_extension_files, + $target . '/share/extension/' + ); + GenerateNLSFiles($target,$config->{nls},$majorver) if ($config->{nls}); print "Installation complete.\n"; @@ -312,10 +333,31 @@ sub CopyContribFiles next if ($d eq "uuid-ossp"&& !defined($config->{uuid})); next if ($d eq "sslinfo" && !defined($config->{openssl})); next if ($d eq "xml2" && !defined($config->{xml})); + next if ($d eq "sepgsql"); my $mf = read_file("contrib/$d/Makefile"); $mf =~ s{\\s*[\r\n]+}{}mg; + + # Note: we currently don't support setting MODULEDIR in the makefile + my $moduledir = 'contrib'; + my $flist = ''; + if ($mf =~ /^EXTENSION\s*=\s*(.*)$/m) {$flist .= $1} + if ($flist ne '') + { + $moduledir = 'extension'; + $flist = ParseAndCleanRule($flist, $mf); + + foreach my $f (split /\s+/,$flist) + { + lcopy('contrib/' . $d . '/' . $f . '.control', + $target . '/share/extension/' . $f . '.control') + || croak("Could not copy file $f.control in contrib $d"); + print '.'; + } + } + + $flist = ''; if ($mf =~ /^DATA_built\s*=\s*(.*)$/m) {$flist .= $1} if ($mf =~ /^DATA\s*=\s*(.*)$/m) {$flist .= " $1"} $flist =~ s/^\s*//; # Remove leading spaces if we had only DATA_built @@ -324,12 +366,10 @@ sub CopyContribFiles { $flist = ParseAndCleanRule($flist, $mf); - # Special case for contrib/spi - $flist = "autoinc.sql insert_username.sql moddatetime.sql refint.sql timetravel.sql" - if ($d eq 'spi'); foreach my $f (split /\s+/,$flist) { - lcopy('contrib/' . $d . '/' . $f,$target . '/share/contrib/' . basename($f)) + lcopy('contrib/' . $d . '/' . $f, + $target . '/share/' . $moduledir . '/' . basename($f)) || croak("Could not copy file $f in contrib $d"); print '.'; } @@ -343,7 +383,8 @@ sub CopyContribFiles foreach my $f (split /\s+/,$flist) { - lcopy('contrib/' . $d . '/' . $f,$target . '/share/tsearch_data/' . basename($f)) + lcopy('contrib/' . $d . '/' . $f, + $target . '/share/tsearch_data/' . basename($f)) || croak("Could not copy file $f in contrib $d"); print '.'; } @@ -361,7 +402,8 @@ sub CopyContribFiles if ($d eq 'spi'); foreach my $f (split /\s+/,$flist) { - lcopy('contrib/' . $d . '/' . $f, $target . '/doc/contrib/' . $f) + lcopy('contrib/' . $d . '/' . $f, + $target . '/doc/' . $moduledir . '/' . $f) || croak("Could not copy file $f in contrib $d"); print '.'; } @@ -397,7 +439,7 @@ sub CopyIncludeFiles my $target = shift; EnsureDirectories($target, 'include', 'include/libpq','include/internal', - 'include/internal/libpq','include/server'); + 'include/internal/libpq','include/server', 'include/server/parser'); CopyFiles( 'Public headers', @@ -431,18 +473,23 @@ sub CopyIncludeFiles $target . '/include/server/', 'src/include/', 'pg_config.h', 'pg_config_os.h' ); + CopyFiles('Grammar header', $target . '/include/server/parser/', + 'src/backend/parser/', 'gram.h'); CopySetOfFiles('',[ glob("src\\include\\*.h") ],$target . '/include/server/'); my $D; opendir($D, 'src/include') || croak "Could not opendir on src/include!\n"; + # some xcopy progs don't like mixed slash style paths + (my $ctarget = $target) =~ s!/!\\!g; while (my $d = readdir($D)) { next if ($d =~ /^\./); + next if ($d eq '.git'); next if ($d eq 'CVS'); - next unless (-d 'src/include/' . $d); + next unless (-d "src/include/$d"); - EnsureDirectories($target . '/include/server', $d); - system("xcopy /s /i /q /r /y src\\include\\$d\\*.h \"$target\\include\\server\\$d\\\"") + EnsureDirectories("$target/include/server/$d"); + system(qq{xcopy /s /i /q /r /y src\\include\\$d\\*.h "$ctarget\\include\\server\\$d\\"}) && croak("Failed to copy include directory $d\n"); } closedir($D); diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm index 72c58751d0..1d10ee98e8 100644 --- a/src/tools/msvc/Mkvcbuild.pm +++ b/src/tools/msvc/Mkvcbuild.pm @@ -3,7 +3,7 @@ package Mkvcbuild; # # Package that generates build files for msvc build # -# $PostgreSQL: pgsql/src/tools/msvc/Mkvcbuild.pm,v 1.59 2010/07/02 23:25:27 adunstan Exp $ +# src/tools/msvc/Mkvcbuild.pm # use Carp; use Win32; @@ -25,17 +25,18 @@ my $postgres; my $libpq; my $contrib_defines = {'refint' => 'REFINT_VERBOSE'}; -my @contrib_uselibpq = ('dblink', 'oid2name', 'pgbench', 'pg_upgrade', - 'vacuumlo'); -my @contrib_uselibpgport = ('oid2name', 'pgbench', 'pg_standby', - 'pg_archivecleanup', 'pg_upgrade', 'vacuumlo'); +my @contrib_uselibpq = ('dblink', 'oid2name', 'pgbench', 'pg_upgrade','vacuumlo'); +my @contrib_uselibpgport =( + 'oid2name', 'pgbench', 'pg_standby','pg_archivecleanup', + 'pg_test_fsync', 'pg_upgrade', 'vacuumlo' +); my $contrib_extralibs = {'pgbench' => ['wsock32.lib']}; my $contrib_extraincludes = {'tsearch2' => ['contrib/tsearch2'], 'dblink' => ['src/backend']}; my $contrib_extrasource = { 'cube' => ['cubescan.l','cubeparse.y'], 'seg' => ['segscan.l','segparse.y'] }; -my @contrib_excludes = ('pgcrypto','intagg'); +my @contrib_excludes = ('pgcrypto','intagg','sepgsql'); sub mkvcbuild { @@ -48,10 +49,11 @@ sub mkvcbuild our @pgportfiles = qw( chklocale.c crypt.c fseeko.c getrusage.c inet_aton.c random.c srandom.c - getaddrinfo.c gettimeofday.c kill.c open.c erand48.c - snprintf.c strlcat.c strlcpy.c dirmod.c exec.c noblock.c path.c pipe.c - pgsleep.c pgstrcasecmp.c qsort.c qsort_arg.c sprompt.c thread.c - getopt.c getopt_long.c dirent.c rint.c win32env.c win32error.c); + getaddrinfo.c gettimeofday.c inet_net_ntop.c kill.c open.c erand48.c + snprintf.c strlcat.c strlcpy.c dirmod.c exec.c noblock.c path.c + pgcheckdir.c pgmkdirp.c pgsleep.c pgstrcasecmp.c qsort.c qsort_arg.c + sprompt.c thread.c getopt.c getopt_long.c dirent.c rint.c win32env.c + win32error.c); $libpgport = $solution->AddProject('libpgport','lib','misc'); $libpgport->AddDefine('FRONTEND'); @@ -64,11 +66,14 @@ sub mkvcbuild $postgres->ReplaceFile('src\backend\port\dynloader.c','src\backend\port\dynloader\win32.c'); $postgres->ReplaceFile('src\backend\port\pg_sema.c','src\backend\port\win32_sema.c'); $postgres->ReplaceFile('src\backend\port\pg_shmem.c','src\backend\port\win32_shmem.c'); + $postgres->ReplaceFile('src\backend\port\pg_latch.c','src\backend\port\win32_latch.c'); $postgres->AddFiles('src\port',@pgportfiles); + $postgres->AddFile('src\backend\port\pipe.c'); $postgres->AddDir('src\timezone'); $postgres->AddFiles('src\backend\parser','scan.l','gram.y'); $postgres->AddFiles('src\backend\bootstrap','bootscanner.l','bootparse.y'); $postgres->AddFiles('src\backend\utils\misc','guc-file.l'); + $postgres->AddFiles('src\backend\replication', 'repl_scanner.l', 'repl_gram.y'); $postgres->AddDefine('BUILDING_DLL'); $postgres->AddLibrary('wsock32.lib'); $postgres->AddLibrary('ws2_32.lib'); @@ -167,8 +172,8 @@ sub mkvcbuild if ($solution->{options}->{python}) { - - # Attempt to get python version and location. Assume python.exe in specified dir. + # Attempt to get python version and location. + # Assume python.exe in specified dir. open(P, $solution->{options}->{python} . "\\python -c \"import sys;print(sys.prefix);print(str(sys.version_info[0])+str(sys.version_info[1]))\" |" @@ -179,11 +184,14 @@ sub mkvcbuild chomp($pyver); close(P); - # Sometimes (always?) if python is not present, the execution actually works, but gives no data... + # Sometimes (always?) if python is not present, the execution + # appears to work, but gives no data... die "Failed to query python for version information\n" if (!(defined($pyprefix) && defined($pyver))); - my $plpython = $solution->AddProject('plpython','dll','PLs','src\pl\plpython'); + my $pymajorver = substr($pyver, 0, 1); + my $plpython = $solution->AddProject('plpython' . $pymajorver, 'dll', + 'PLs', 'src\pl\plpython'); $plpython->AddIncludeDir($pyprefix . '\include'); $plpython->AddLibrary($pyprefix . "\\Libs\\python$pyver.lib"); $plpython->AddReference($postgres); @@ -264,6 +272,28 @@ sub mkvcbuild $pgregress_ecpg->AddDefine('FRONTEND'); $pgregress_ecpg->AddReference($libpgport); + my $isolation_tester = $solution->AddProject('isolationtester','exe','misc'); + $isolation_tester->AddFile('src\test\isolation\isolationtester.c'); + $isolation_tester->AddFile('src\test\isolation\specparse.y'); + $isolation_tester->AddFile('src\test\isolation\specscanner.l'); + $isolation_tester->AddFile('src\test\isolation\specparse.c'); + $isolation_tester->AddIncludeDir('src\test\isolation'); + $isolation_tester->AddIncludeDir('src\port'); + $isolation_tester->AddIncludeDir('src\test\regress'); + $isolation_tester->AddIncludeDir('src\interfaces\libpq'); + $isolation_tester->AddDefine('HOST_TUPLE="i686-pc-win32vc"'); + $isolation_tester->AddDefine('FRONTEND'); + $isolation_tester->AddReference($libpq, $libpgport); + + my $pgregress_isolation = $solution->AddProject('pg_isolation_regress','exe','misc'); + $pgregress_isolation->AddFile('src\test\isolation\isolation_main.c'); + $pgregress_isolation->AddFile('src\test\regress\pg_regress.c'); + $pgregress_isolation->AddIncludeDir('src\port'); + $pgregress_isolation->AddIncludeDir('src\test\regress'); + $pgregress_isolation->AddDefine('HOST_TUPLE="i686-pc-win32vc"'); + $pgregress_isolation->AddDefine('FRONTEND'); + $pgregress_isolation->AddReference($libpgport); + # src/bin my $initdb = AddSimpleFrontend('initdb'); $initdb->AddIncludeDir('src\interfaces\libpq'); @@ -271,6 +301,8 @@ sub mkvcbuild $initdb->AddLibrary('wsock32.lib'); $initdb->AddLibrary('ws2_32.lib'); + my $pgbasebackup = AddSimpleFrontend('pg_basebackup', 1); + my $pgconfig = AddSimpleFrontend('pg_config'); my $pgcontrol = AddSimpleFrontend('pg_controldata'); @@ -430,7 +462,7 @@ sub mkvcbuild { # Also catches mbprint.c $proj->AddFile('src\bin\psql\\' . $f); } - else + elsif ($f =~ /\.c$/) { $proj->AddFile('src\bin\scripts\\' . $f); } @@ -572,10 +604,6 @@ sub GenerateContribSqlFiles $l = substr($l, 0, index($l, '$(addsuffix ')) . substr($l, $i+1); } - # Special case for contrib/spi - $l = "autoinc.sql insert_username.sql moddatetime.sql refint.sql timetravel.sql" - if ($n eq 'spi'); - foreach my $d (split /\s+/, $l) { my $in = "$d.in"; @@ -587,7 +615,6 @@ sub GenerateContribSqlFiles my $cont = Project::read_file("contrib/$n/$in"); my $dn = $out; $dn =~ s/\.sql$//; - if ($mf =~ /^MODULE_big\s*=\s*(.*)$/m) { $dn = $1 } $cont =~ s/MODULE_PATHNAME/\$libdir\/$dn/g; my $o; open($o,">contrib/$n/$out") || croak "Could not write to contrib/$n/$d"; diff --git a/src/tools/msvc/Project.pm b/src/tools/msvc/Project.pm index aa9c123da6..66752f9033 100644 --- a/src/tools/msvc/Project.pm +++ b/src/tools/msvc/Project.pm @@ -3,7 +3,7 @@ package Project; # # Package that encapsulates a Visual C++ project file generation # -# $PostgreSQL: pgsql/src/tools/msvc/Project.pm,v 1.26 2010/04/09 13:05:58 mha Exp $ +# src/tools/msvc/Project.pm # use Carp; use strict; diff --git a/src/tools/msvc/README b/src/tools/msvc/README index 603a6e0be2..58e266e11f 100644 --- a/src/tools/msvc/README +++ b/src/tools/msvc/README @@ -1,4 +1,4 @@ -$PostgreSQL: pgsql/src/tools/msvc/README,v 1.7 2008/03/21 13:23:29 momjian Exp $ +src/tools/msvc/README MSVC build ========== @@ -18,13 +18,13 @@ perltidy -b -bl -nsfs -naws -l=100 -ole=unix *.pl *.pm Notes about Visual Studio Express --------------------------------- To build PostgreSQL using Visual Studio Express, the Platform SDK -has to be installed. Since this is not included in the product +has to be installed. Since this is not included in the product originally, extra steps are needed to make it work. -First, download and install the latest Platform SDK from -www.microsoft.com. +First, download and install the latest Platform SDK from +www.microsoft.com. -Locate the files vcprojectengine.dll.express.config and +Locate the files vcprojectengine.dll.express.config and vcprojectengine.dll.config in the vc\vcpackages directory of the Visual C++ Express installation. In these files, add the paths to the Platform SDK to the Include, Library and Path tags. Be sure diff --git a/src/tools/msvc/Solution.pm b/src/tools/msvc/Solution.pm index 12b9085bc5..1a7b94da6c 100644 --- a/src/tools/msvc/Solution.pm +++ b/src/tools/msvc/Solution.pm @@ -3,7 +3,7 @@ package Solution; # # Package that encapsulates a Visual C++ solution file generation # -# $PostgreSQL: pgsql/src/tools/msvc/Solution.pm,v 1.57 2010/04/09 13:05:58 mha Exp $ +# src/tools/msvc/Solution.pm # use Carp; use strict; @@ -66,7 +66,7 @@ sub DetermineToolVersions open(P,"vcbuild /? |") || die "vcbuild command not found"; my $line = <P>; close(P); - if ($line !~ /^Microsoft\s*\(R\) Visual C\+\+ Project Builder - \D+(\d+)\.00\.\d+/) + if ($line !~ /^Microsoft\s*\(R\) Visual C\+\+ [^-]+ - \D+(\d+)\.00\.\d+/) { die "Unable to determine vcbuild version from first line of output!"; } @@ -273,6 +273,25 @@ s{PG_VERSION_STR "[^"]+"}{__STRINGIFY(x) #x\n#define __STRINGIFY2(z) __STRINGIFY ); } + if ($self->{options}->{python} && IsNewer('src\pl\plpython\spiexceptions.h','src\include\backend\errcodes.txt')) + { + print "Generating spiexceptions.h...\n"; + system('perl src\pl\plpython\generate-spiexceptions.pl src\backend\utils\errcodes.txt > src\pl\plpython\spiexceptions.h'); + } + + if (IsNewer('src\include\utils\errcodes.h','src\backend\utils\errcodes.txt')) + { + print "Generating errcodes.h...\n"; + system('perl src\backend\utils\generate-errcodes.pl src\backend\utils\errcodes.txt > src\backend\utils\errcodes.h'); + copyFile('src\backend\utils\errcodes.h','src\include\utils\errcodes.h'); + } + + if (IsNewer('src\pl\plpgsql\src\plerrcodes.h','src\backend\utils\errcodes.txt')) + { + print "Generating plerrcodes.h...\n"; + system('perl src\pl\plpgsql\src\generate-plerrcodes.pl src\backend\utils\errcodes.txt > src\pl\plpgsql\src\plerrcodes.h'); + } + if (IsNewer('src\interfaces\libpq\libpq.rc','src\interfaces\libpq\libpq.rc.in')) { print "Generating libpq.rc...\n"; @@ -370,8 +389,8 @@ EOF open(O, ">doc/src/sgml/version.sgml") || croak "Could not write to version.sgml\n"; print O <<EOF; -<!entity version "$self->{strver}"> -<!entity majorversion "$self->{majorver}"> +<!ENTITY version "$self->{strver}"> +<!ENTITY majorversion "$self->{majorver}"> EOF close(O); } diff --git a/src/tools/msvc/build.bat b/src/tools/msvc/build.bat index 1684d3bec2..4001ac1d0d 100755 --- a/src/tools/msvc/build.bat +++ b/src/tools/msvc/build.bat @@ -1,5 +1,5 @@ @echo off -REM $PostgreSQL: pgsql/src/tools/msvc/build.bat,v 1.10 2007/09/27 21:13:11 adunstan Exp $ +REM src/tools/msvc/build.bat REM all the logic for this now belongs in build.pl. This file really REM only exists so you don't have to type "perl build.pl" REM Resist any temptation to add any logic here. diff --git a/src/tools/msvc/build.pl b/src/tools/msvc/build.pl index 764e5942f6..66b5c4c59b 100644 --- a/src/tools/msvc/build.pl +++ b/src/tools/msvc/build.pl @@ -1,7 +1,6 @@ - # -*-perl-*- hey - emacs - this is a perl file -# $PostgreSQL: pgsql/src/tools/msvc/build.pl,v 1.3 2010/04/09 13:05:58 mha Exp $ +# src/tools/msvc/build.pl BEGIN { diff --git a/src/tools/msvc/builddoc.bat b/src/tools/msvc/builddoc.bat index 7268ae207f..024706989e 100755 --- a/src/tools/msvc/builddoc.bat +++ b/src/tools/msvc/builddoc.bat @@ -1,65 +1,7 @@ @echo off -REM Adjust path for your docbook installation in buildenv.pl -REM $PostgreSQL: pgsql/src/tools/msvc/builddoc.bat,v 1.6 2007/12/19 12:29:36 mha Exp $ - -SETLOCAL -SET STARTDIR=%CD% -SET OPENJADE=openjade-1.3.1 -SET DSSSL=docbook-dsssl-1.79 - -IF EXIST ..\msvc IF EXIST ..\..\..\src cd ..\..\.. -IF NOT EXIST doc\src\sgml\version.sgml goto noversion - -IF NOT EXIST src\tools\msvc\buildenv.pl goto nobuildenv -perl -e "require 'src/tools/msvc/buildenv.pl'; while(($k,$v) = each %ENV) { print qq[\@SET $k=$v\n]; }" > bldenv.bat -CALL bldenv.bat -del bldenv.bat -:nobuildenv - -IF NOT EXIST %DOCROOT%\%OPENJADE% SET NF=OpenJade -IF NOT EXIST %DOCROOT%\docbook SET NF=docbook -IF NOT EXIST %DOCROOT%\%DSSSL% set NF=docbook-dssl - -IF NOT "%NF%" == "" GOTO notfound - -IF "%1" == "renamefiles" GOTO renamefiles - -cmd /v /c src\tools\msvc\builddoc renamefiles -cd doc\src\sgml - -SET SGML_CATALOG_FILES=%DOCROOT%\%OPENJADE%\dsssl\catalog;%DOCROOT%\docbook\docbook.cat -perl %DOCROOT%\%DSSSL%\bin\collateindex.pl -f -g -o bookindex.sgml -N -perl mk_feature_tables.pl YES ..\..\..\src\backend\catalog\sql_feature_packages.txt ..\..\..\src\backend\catalog\sql_features.txt > features-supported.sgml -perl mk_feature_tables.pl NO ..\..\..\src\backend\catalog\sql_feature_packages.txt ..\..\..\src\backend\catalog\sql_features.txt > features-unsupported.sgml - -echo Running first build... -%DOCROOT%\%OPENJADE%\bin\openjade -V draft-mode -wall -wno-unused-param -wno-empty -D . -c %DOCROOT%\%DSSSL%\catalog -d stylesheet.dsl -i output-html -t sgml postgres.sgml 2>&1 | findstr /V "DTDDECL catalog entries are not supported" -echo Running collateindex... -perl %DOCROOT%\%DSSSL%\bin\collateindex.pl -f -g -i bookindex -o bookindex.sgml HTML.index -echo Running second build... -%DOCROOT%\%OPENJADE%\bin\openjade -V draft-mode -wall -wno-unused-param -wno-empty -D . -c %DOCROOT%\%DSSSL%\catalog -d stylesheet.dsl -i output-html -t sgml postgres.sgml 2>&1 | findstr /V "DTDDECL catalog entries are not supported" - -cd %STARTDIR% -echo Docs build complete. -exit /b - - -:renamefiles -REM Rename ISO entity files -CD %DOCROOT%\docbook -FOR %%f in (ISO*) do ( - set foo=%%f - IF NOT "!foo:~-4!" == ".gml" ren !foo! !foo:~0,3!-!foo:~3!.gml -) -exit /b - -:notfound -echo Could not find directory for %NF%. -cd %STARTDIR% -goto :eof - -:noversion -echo Could not find version.sgml. Please run mkvcbuild.pl first! -cd %STARTDIR% -goto :eof +REM src/tools/msvc/builddoc.bat +REM all the logic for this now belongs in builddoc.pl. This file really +REM only exists so you don't have to type "perl builddoc.pl" +REM Resist any temptation to add any logic here. +@perl builddoc.pl %* diff --git a/src/tools/msvc/builddoc.pl b/src/tools/msvc/builddoc.pl new file mode 100644 index 0000000000..deaf659e77 --- /dev/null +++ b/src/tools/msvc/builddoc.pl @@ -0,0 +1,122 @@ +# -*-perl-*- hey - emacs - this is a perl file + +# Adjust path for your docbook installation in buildenv.pl + +# src/tools/msvc/builddoc.pl +# translated from an earlier .bat file + +use strict; +use File::Copy; +use Cwd qw(abs_path getcwd); + + +my $startdir = getcwd(); + +my $openjade = 'openjade-1.3.1'; +my $dsssl = 'docbook-dsssl-1.79'; + +chdir '../../..' if (-d '../msvc' && -d '../../../src'); + +noversion() unless -e 'doc/src/sgml/version.sgml'; + +require 'src/tools/msvc/buildenv.pl' if -e 'src/tools/msvc/buildenv.pl'; + +my $docroot = $ENV{DOCROOT}; +die "bad DOCROOT '$docroot'" unless ($docroot && -d $docroot); + +my @notfound; +foreach my $dir ('docbook', $openjade, $dsssl) +{ + push(@notfound,$dir) unless -d "$docroot/$dir"; +} +missing() if @notfound; + +my $arg = shift; +renamefiles(); + + +chdir 'doc/src/sgml'; + +$ENV{SGML_CATALOG_FILES} = "$docroot/$openjade/dsssl/catalog;" . + "$docroot/docbook/docbook.cat"; + +my $cmd; + +# openjade exits below with a harmless non-zero status, so we +# can't die on "failure" + +$cmd = +"perl mk_feature_tables.pl YES " . + "../../../src/backend/catalog/sql_feature_packages.txt " . + "../../../src/backend/catalog/sql_features.txt " . + "> features-supported.sgml"; +system($cmd); die "features_supported" if $?; +$cmd = +"perl mk_feature_tables.pl NO " . + "\"../../../src/backend/catalog/sql_feature_packages.txt\" " . + "\"../../../src/backend/catalog/sql_features.txt\" " . + "> features-unsupported.sgml"; +system($cmd); die "features_unsupported" if $?; +$cmd = +"perl generate-errcodes-table.pl \"../../../src/backend/utils/errcodes.txt\" " . + "> errcodes-table.sgml"; +system($cmd); die "errcodes-table" if $?; + +print "Running first build...\n"; +$cmd = +"\"$docroot/$openjade/bin/openjade\" -V html-index -wall " . + "-wno-unused-param -wno-empty -D . -c \"$docroot/$dsssl/catalog\" " . + "-d stylesheet.dsl -i output-html -t sgml postgres.sgml 2>&1 " . + "| findstr /V \"DTDDECL catalog entries are not supported\" "; +system($cmd); # die "openjade" if $?; +print "Running collateindex...\n"; +$cmd = +"perl \"$docroot/$dsssl/bin/collateindex.pl\" -f -g -i bookindex " . + "-o bookindex.sgml HTML.index"; +system($cmd); die "collateindex" if $?; +mkdir "html"; +print "Running second build...\n"; +$cmd = +"\"$docroot/$openjade/bin/openjade\" -wall -wno-unused-param -wno-empty " . + "-D . -c \"$docroot/$dsssl/catalog\" -d stylesheet.dsl -t sgml " . + "-i output-html -i include-index postgres.sgml 2>&1 " . + "| findstr /V \"DTDDECL catalog entries are not supported\" "; + +system($cmd); # die "openjade" if $?; + +copy "stylesheet.css", "html/stylesheet.css"; + +print "Docs build complete.\n"; + +exit; + +######################################################## + +sub renamefiles +{ + # Rename ISO entity files + my $savedir = getcwd(); + chdir "$docroot/docbook"; + foreach my $f (glob('ISO*')) + { + next if $f =~ /\.gml$/i; + my $nf = $f; + $nf =~ s/ISO(.*)/ISO-$1.gml/; + move $f, $nf; + } + chdir $savedir; + +} + +sub missing +{ + print STDERR "could not find $docroot/$_\n" foreach (@notfound); + exit 1; +} + +sub noversion +{ + print STDERR "Could not find version.sgml. ", + "Please run mkvcbuild.pl first!\n"; + exit 1; +} diff --git a/src/tools/msvc/clean.bat b/src/tools/msvc/clean.bat index 09741f9e6d..a59bbe55da 100755 --- a/src/tools/msvc/clean.bat +++ b/src/tools/msvc/clean.bat @@ -1,5 +1,5 @@ @echo off -REM $PostgreSQL: pgsql/src/tools/msvc/clean.bat,v 1.18 2010/01/05 01:06:57 tgl Exp $ +REM src/tools/msvc/clean.bat set DIST=0 if "%1"=="dist" set DIST=1 @@ -20,6 +20,7 @@ REM Delete files created with GenerateFiles() in Solution.pm if exist src\include\pg_config.h del /q src\include\pg_config.h if exist src\include\pg_config_os.h del /q src\include\pg_config_os.h if %DIST%==1 if exist src\backend\parser\gram.h del /q src\backend\parser\gram.h +if exist src\include\utils\errcodes.h del /q src\include\utils\errcodes.h if exist src\include\utils\fmgroids.h del /q src\include\utils\fmgroids.h if exist src\include\utils\probes.h del /q src\include\utils\probes.h diff --git a/src/tools/msvc/config_default.pl b/src/tools/msvc/config_default.pl index eea4a70fe7..971d740a9e 100644 --- a/src/tools/msvc/config_default.pl +++ b/src/tools/msvc/config_default.pl @@ -8,7 +8,7 @@ our $config = { # float4byval=>1, # --disable-float4-byval, on by default # float8byval=>0, # --disable-float8-byval, off by default # blocksize => 8, # --with-blocksize, 8kB by default - # wal_blocksize => 8, # --with-wal-blocksize, 8kb by default + # wal_blocksize => 8, # --with-wal-blocksize, 8kB by default # wal_segsize => 16, # --with-wal-segsize, 16MB by default ldap=>1, # --with-ldap nls=>undef, # --enable-nls=<path> diff --git a/src/tools/msvc/gendef.pl b/src/tools/msvc/gendef.pl index 487012fc34..b8538dd79b 100644 --- a/src/tools/msvc/gendef.pl +++ b/src/tools/msvc/gendef.pl @@ -3,7 +3,7 @@ my @def; # # Script that generates a .DEF file for all objects in a directory # -# $PostgreSQL: pgsql/src/tools/msvc/gendef.pl,v 1.10 2010/04/09 13:05:58 mha Exp $ +# src/tools/msvc/gendef.pl # die "Usage: gendef.pl <modulepath> <platform>\n" diff --git a/src/tools/msvc/install.bat b/src/tools/msvc/install.bat index 043bc69158..8c5fb1dccb 100644 --- a/src/tools/msvc/install.bat +++ b/src/tools/msvc/install.bat @@ -1,5 +1,5 @@ @echo off -REM $PostgreSQL: pgsql/src/tools/msvc/install.bat,v 1.3 2007/12/19 12:29:36 mha Exp $ +REM src/tools/msvc/install.bat if NOT "%1"=="" GOTO RUN_INSTALL diff --git a/src/tools/msvc/install.pl b/src/tools/msvc/install.pl index 7e0c48e998..28563a930d 100755 --- a/src/tools/msvc/install.pl +++ b/src/tools/msvc/install.pl @@ -1,7 +1,7 @@ # # Script that provides 'make install' functionality for msvc builds # -# $PostgreSQL: pgsql/src/tools/msvc/install.pl,v 1.7 2007/03/17 14:01:01 mha Exp $ +# src/tools/msvc/install.pl # use strict; use warnings; diff --git a/src/tools/msvc/mkvcbuild.pl b/src/tools/msvc/mkvcbuild.pl index bdb1cc4d82..32861cbbd6 100644 --- a/src/tools/msvc/mkvcbuild.pl +++ b/src/tools/msvc/mkvcbuild.pl @@ -2,7 +2,7 @@ # Script that parses Unix style build environment and generates build files # for building with Visual Studio. # -# $PostgreSQL: pgsql/src/tools/msvc/mkvcbuild.pl,v 1.19 2010/01/05 13:31:58 mha Exp $ +# src/tools/msvc/mkvcbuild.pl # use strict; use warnings; diff --git a/src/tools/msvc/pgbison.bat b/src/tools/msvc/pgbison.bat index e22b853a01..e67b8fcf19 100755 --- a/src/tools/msvc/pgbison.bat +++ b/src/tools/msvc/pgbison.bat @@ -1,5 +1,5 @@ @echo off -REM $PostgreSQL: pgsql/src/tools/msvc/pgbison.bat,v 1.10 2008/08/30 02:32:24 tgl Exp $ +REM src/tools/msvc/pgbison.bat IF NOT EXIST src\tools\msvc\buildenv.pl goto nobuildenv perl -e "require 'src/tools/msvc/buildenv.pl'; while(($k,$v) = each %ENV) { print qq[\@SET $k=$v\n]; }" > bldenv.bat @@ -17,7 +17,9 @@ goto nobison if "%1" == "src\backend\parser\gram.y" call :generate %1 src\backend\parser\gram.c src\backend\parser\gram.h if "%1" == "src\backend\bootstrap\bootparse.y" call :generate %1 src\backend\bootstrap\bootparse.c +if "%1" == "src\backend\replication\repl_gram.y" call :generate %1 src\backend\replication\repl_gram.c if "%1" == "src\pl\plpgsql\src\gram.y" call :generate %1 src\pl\plpgsql\src\pl_gram.c src\pl\plpgsql\src\pl_gram.h +if "%1" == "src\test\isolation\specparse.y" call :generate %1 src\test\isolation\specparse.c if "%1" == "src\interfaces\ecpg\preproc\preproc.y" call :generate %1 src\interfaces\ecpg\preproc\preproc.c src\interfaces\ecpg\preproc\preproc.h if "%1" == "contrib\cube\cubeparse.y" call :generate %1 contrib\cube\cubeparse.c if "%1" == "contrib\seg\segparse.y" call :generate %1 contrib\seg\segparse.c diff --git a/src/tools/msvc/pgflex.bat b/src/tools/msvc/pgflex.bat index 00c6757231..75f4eb9dfe 100755 --- a/src/tools/msvc/pgflex.bat +++ b/src/tools/msvc/pgflex.bat @@ -1,5 +1,8 @@ @echo off -REM $PostgreSQL: pgsql/src/tools/msvc/pgflex.bat,v 1.6 2009/11/12 00:13:00 tgl Exp $ +REM src/tools/msvc/pgflex.bat + +REM silence flex bleatings about file path style +SET CYGWIN=nodosfilewarning IF NOT EXIST src\tools\msvc\buildenv.pl goto nobuildenv perl -e "require 'src/tools/msvc/buildenv.pl'; while(($k,$v) = each %ENV) { print qq[\@SET $k=$v\n]; }" > bldenv.bat @@ -13,6 +16,8 @@ if errorlevel 1 goto noflex if "%1" == "src\backend\parser\scan.l" call :generate %1 src\backend\parser\scan.c -CF if "%1" == "src\backend\bootstrap\bootscanner.l" call :generate %1 src\backend\bootstrap\bootscanner.c if "%1" == "src\backend\utils\misc\guc-file.l" call :generate %1 src\backend\utils\misc\guc-file.c +if "%1" == "src\backend\replication\repl_scanner.l" call :generate %1 src\backend\replication\repl_scanner.c +if "%1" == "src\test\isolation\specscanner.l" call :generate %1 src\test\isolation\specscanner.c if "%1" == "src\interfaces\ecpg\preproc\pgc.l" call :generate %1 src\interfaces\ecpg\preproc\pgc.c if "%1" == "src\bin\psql\psqlscan.l" call :generate %1 src\bin\psql\psqlscan.c if "%1" == "contrib\cube\cubescan.l" call :generate %1 contrib\cube\cubescan.c @@ -21,9 +26,19 @@ if "%1" == "contrib\seg\segscan.l" call :generate %1 contrib\seg\segscan.c echo Unknown flex input: %1 exit 1 +REM For non-reentrant scanners we need to fix up the yywrap macro definition +REM to keep the MS compiler happy. +REM For reentrant scanners (like the core scanner) we do not +REM need to (and must not) change the yywrap definition. :generate flex %3 -o%2 %1 -exit %errorlevel% +if errorlevel 1 exit %errorlevel% +perl -n -e "exit 1 if /^\%%option\s+reentrant/;" %1 +if errorlevel 1 exit 0 +perl -pi.bak -e "s/yywrap\(n\)/yywrap()/;" %2 +if errorlevel 1 exit %errorlevel% +del %2.bak +exit 0 :noflex echo WARNING! flex install not found, attempting to build without diff --git a/src/tools/msvc/vcregress.bat b/src/tools/msvc/vcregress.bat index 56b6510d3d..a981d3a6aa 100644 --- a/src/tools/msvc/vcregress.bat +++ b/src/tools/msvc/vcregress.bat @@ -1,5 +1,5 @@ @echo off -REM $PostgreSQL: pgsql/src/tools/msvc/vcregress.bat,v 1.15 2007/09/27 21:13:11 adunstan Exp $ +REM src/tools/msvc/vcregress.bat REM all the logic for this now belongs in vcregress.pl. This file really REM only exists so you don't have to type "perl vcregress.pl" REM Resist any temptation to add any logic here. diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl index 4c0792242c..579ca52e02 100644 --- a/src/tools/msvc/vcregress.pl +++ b/src/tools/msvc/vcregress.pl @@ -1,7 +1,6 @@ - # -*-perl-*- hey - emacs - this is a perl file -# $PostgreSQL: pgsql/src/tools/msvc/vcregress.pl,v 1.15 2010/04/09 13:05:58 mha Exp $ +# src/tools/msvc/vcregress.pl use strict; @@ -14,7 +13,8 @@ my $startdir = getcwd(); chdir "../../.." if (-d "../../../src/tools/msvc"); -require 'src/tools/msvc/config.pl'; +require 'src/tools/msvc/config_default.pl'; +require 'src/tools/msvc/config.pl' if (-f 'src/tools/msvc/config.pl'); # buildenv.pl is for specifying the build environment settings # it should contian lines like: @@ -26,7 +26,7 @@ if ( -e "src/tools/msvc/buildenv.pl") } my $what = shift || ""; -if ($what =~ /^(check|installcheck|plcheck|contribcheck|ecpgcheck)$/i) +if ($what =~ /^(check|installcheck|plcheck|contribcheck|ecpgcheck|isolationcheck)$/i) { $what = uc $what; } @@ -41,6 +41,7 @@ my $Config = -e "release/postgres/postgres.exe" ? "Release" : "Debug"; copy("$Config/refint/refint.dll","src/test/regress"); copy("$Config/autoinc/autoinc.dll","src/test/regress"); copy("$Config/regress/regress.dll","src/test/regress"); +copy("$Config/dummy_seclabel/dummy_seclabel.dll","src/test/regress"); $ENV{PATH} = "../../../$Config/libpq;../../$Config/libpq;$ENV{PATH}"; @@ -70,7 +71,8 @@ my %command = ( PLCHECK => \&plcheck, INSTALLCHECK => \&installcheck, ECPGCHECK => \&ecpgcheck, - CONTRIBCHECK => \&contribcheck + CONTRIBCHECK => \&contribcheck, + ISOLATIONCHECK => \&isolationcheck, ); my $proc = $command{$what}; @@ -88,7 +90,7 @@ sub installcheck my @args = ( "../../../$Config/pg_regress/pg_regress","--dlpath=.", "--psqldir=../../../$Config/psql","--schedule=${schedule}_schedule", - "--multibyte=SQL_ASCII","--no-locale" + "--encoding=SQL_ASCII","--no-locale" ); push(@args,$maxconn) if $maxconn; system(@args); @@ -101,7 +103,7 @@ sub check my @args = ( "../../../$Config/pg_regress/pg_regress","--dlpath=.", "--psqldir=../../../$Config/psql","--schedule=${schedule}_schedule", - "--multibyte=SQL_ASCII","--no-locale", + "--encoding=SQL_ASCII","--no-locale", "--temp-install=./tmp_check","--top-builddir=\"$topdir\"" ); push(@args,$maxconn) if $maxconn; @@ -125,7 +127,7 @@ sub ecpgcheck "--dbname=regress1,connectdb", "--create-role=connectuser,connectdb", "--schedule=${schedule}_schedule", - "--multibyte=SQL_ASCII", + "--encoding=SQL_ASCII", "--no-locale", "--temp-install=./tmp_chk", "--top-builddir=\"$topdir\"" @@ -136,6 +138,22 @@ sub ecpgcheck exit $status if $status; } +sub isolationcheck +{ + chdir "../isolation"; + copy("../../../$Config/isolationtester/isolationtester.exe","."); + my @args = ( + "../../../$Config/pg_isolation_regress/pg_isolation_regress", + "--psqldir=../../../$Config/psql", + "--inputdir=.", + "--schedule=./isolation_schedule" + ); + push(@args,$maxconn) if $maxconn; + system(@args); + my $status = $? >>8; + exit $status if $status; +} + sub plcheck { chdir "../../pl"; @@ -146,14 +164,14 @@ sub plcheck my $lang = $pl eq 'tcl' ? 'pltcl' : $pl; next unless -d "../../$Config/$lang"; $lang = 'plpythonu' if $lang eq 'plpython'; - my @lang_args = ("--load-language=$lang"); + my @lang_args = ("--load-extension=$lang"); chdir $pl; my @tests = fetchTests(); if ($lang eq 'plperl') { # run both trusted and untrusted perl tests - push(@lang_args, "--load-language=plperlu"); + push(@lang_args, "--load-extension=plperlu"); # assume we're using this perl to built postgres # test if we can run two interpreters in one backend, and if so @@ -186,6 +204,7 @@ sub contribcheck my $mstat = 0; foreach my $module (glob("*")) { + next if ($module eq 'sepgsql'); next if ($module eq 'xml2' && !$config->{xml}); next unless -d "$module/sql" @@ -226,6 +245,14 @@ sub fetchRegressOpts # ignore anything that isn't an option staring with -- @opts = grep { $_ !~ /\$\(/ && $_ =~ /^--/ } split(/\s+/,$1); } + if ($m =~ /^\s*ENCODING\s*=\s*(\S+)/m) + { + push @opts, "--encoding=$1"; + } + if ($m =~ /^\s*NO_LOCALE\s*=\s*\S+/m) + { + push @opts, "--no-locale"; + } return @opts; } diff --git a/src/tools/pgcvslog b/src/tools/pgcvslog deleted file mode 100755 index f2d01c62bd..0000000000 --- a/src/tools/pgcvslog +++ /dev/null @@ -1,293 +0,0 @@ -#!/bin/sh - -# $PostgreSQL: pgsql/src/tools/pgcvslog,v 1.40 2009/08/29 17:09:20 momjian Exp $ - -# This utility is used to generate a compact list of changes -# for each release, bjm 2000-02-22 - -# Usage: pgcvslog [-d] [-h] -# -d delete commits that include back branches -# -h is HTML output -# "-d" is useful for generating release notes for major releases - -# This program basically takes a cvs log, groups it by commit timestamp -# and line number, then compares adjacent messages. If they have the same -# commit message, they are assumed to be part of the same commit and -# appear as one commit message with multiple file names - -# All branches: -# cvs log -d'>1999-06-14 00:00:00 GMT' . > log -# -# HEAD: -# cvs log -d'>2000-05-29 00:00:00 GMT' -b . -# -# Branch: -# cvs log -d'>2000-05-29 00:00:00 GMT' -rREL8_0_STABLE . -# -# Date range -# cvs log -d'2005-05-08<2005-05-29' -rREL8_0_STABLE . -# -# To find branch time, look for "branches:" tag in CVS commit logs -# e.g. "branches: 1.398.4;" matches "REL8_0_STABLE: 1.398.0.4". - -HTML="N" -DEL="N" -if [ "X$1" = "X-h" ] -then HTML="Y" - shift -fi - -if [ "X$1" = "X-d" ] -then DEL="Y" - shift -fi - -if [ "X$1" = "X-h" ] -then HTML="Y" - shift -fi - -if [ "$HTML" = "Y" -a "$DEL" = "Y" ] -then echo "Cannot use -d and -h together" 1>&2 - exit 1 -fi - -cat "$@" | - -# protect HTML input if in HTML mode -if [ "$HTML" = "Y" ] -then sed -e 's/\&/\&/g' \ - -e 's/</\</g' \ - -e 's/>/\>/g' \ - -e 's/"/\"/g' -else cat -fi | - -# mark each line with a datetime and line number, for sorting and merging -# we are just pre-processing the file at this point -# We don't print anything from the -- or == line and the date: - -awk ' BEGIN {html="'"$HTML"'"; lineno = 0;} - # store working directory - $0 ~ /^Working file:/ {workingfile = "/" $3} - - ($0 ~ /^====*$/ || $0 ~ /^----*$/) \ - { - # print blank line to separate entries - if (datetime != "") - { - if (html != "Y") - printf ("%s| %10d|%s\n", datetime, lineno++, ""); - printf ("%s| %10d|", datetime, lineno++); - if (html != "Y") - printf ("%s\n", "---"); - else printf ("<HR>\n"); - } - datetime=""; - } - - # if we have a saved datetime, print filename, date line, and committer - datetime != "" && $1 != "branches:" {printf ("%s| %10d| %s\n", datetime, lineno++, $0);} - - $1 == "date:" \ - { - # get entry date - datetime=$2"-"$3 - if (workingfile != "") - { - printf ("%s| %10d|", datetime, lineno++); - if (html != "Y") - printf ("%s%s\n", workingfile, back_branch); - else printf ("<SMALL><FONT COLOR=\"red\">%s%s</FONT></SMALL>\n", workingfile, back_branch); - - # output name of committer - # remove semicolon from committers name - gsub("/", "-", $2); - gsub(";", "", $3); - gsub(";", "", $5); - printf ("%s| %10d|", datetime, lineno++); - if (html != "Y") - printf ("%78s\n", $5); - else printf ("<DIV ALIGN=\"right\"><SMALL><FONT COLOR=\"teal\">%s</FONT> <FONT COLOR=\"green\">%s</FONT></SMALL></DIV>\n", $5, $2); - } - } - - # mark back branches - $1 == "revision" \ - { - # back branches have +2 periods in revision number - if ($2 ~ /\..*\./) - back_branch=" <branch>" - else back_branch = "" - } - - /* clear working file */ - $0 ~ /^====*$/ {workingfile=""}' | - -sort | cut -d'|' -f3 | - -# collect duplicate narratives -# print file names as we get them, then print narrative when a new -# narrative appears -# have to save two narratives to compare them - -awk ' BEGIN { narr_slot = 0; oldnarr_slot=0; save_working = ""; - html="'"$HTML"'"} - { - # We have a filename, so we look at the previous - # narrative to see if it is new narrative text. - if ($0 ~ "^/") - { - # If there are a different number of narrative - # lines, they cannot possibly be the same. - if (narr_slot != oldnarr_slot) - same = "N"; - else - { - same = "Y"; - for (i=1; i <= narr_slot; i++) - { - if (oldnarr[i] != narr[i]) - { - same = "N"; - break; - } - } - } - - # dump out the old narrative if it is new - if (same == "N") - { - if (oldnarr_slot) - for (i=1; i <= oldnarr_slot; i++) - { - print oldnarr[i]; - if (html == "Y" && - oldnarr[i] != "<HR>" && - oldnarr[i] !~ "^<DIV ") - print "<BR>"; - } - - # save the current narrative - for (i=1; i <= narr_slot; i++) - oldnarr[i] = narr[i]; - oldnarr_slot = narr_slot; - } - narr_slot = 0; - - # dump out the previous filename - print save_working; - - if (html == "Y") - print "<BR>"; - - # store the current filename for later printing - save_working = $0; - } - else - # we have a narrative line - { - # accumulate narrative - narr[++narr_slot] = $0; - } - } - END \ - { - # If there are a different number of narrative - # lines, they can not possibly be the same. - if (narr_slot != oldnarr_slot) - same = "N"; - else - { - same = "Y"; - for (i=1; i <= narr_slot; i++) - { - if (oldnarr[i] != narr[i]) - { - same = "N"; - break; - } - } - } - - # dump out the old narrative if it is new - if (same == "N") - { - if (oldnarr_slot) - for (i=1; i <= oldnarr_slot; i++) - { - print oldnarr[i]; - if (html == "Y" && - oldnarr[i] != "<HR>" && - oldnarr[i] !~ "^<DIV ") - print "<BR>"; - } - } - - # dump out the last filename - print save_working; - - if (html == "Y") - print "<BR>"; - - # dump out the last narrative - for (i=1; i <= narr_slot; i++) - { - print narr[i]; - if (html == "Y" && - narr[i] != "<HR>" && - narr[i] !~ "^<DIV ") - print "<BR>"; - } - }' | - -# add HTML wrapper -if [ "$HTML" = "Y" ] -then echo "<HTML>" - echo "<HEAD>" - echo "<TITLE>CVS</TITLE>" - echo "</HEAD>" - echo "<BODY>" - cat - echo "</BODY>" - echo "</HTML>" -else cat -fi | - -# if requested, remove any commit that has the "<branch>" text -if [ "$DEL" = "Y" ] -then awk 'BEGIN \ - { - slot = 0; - } - - { - # new commit? - if ($0 ~ "^---$") - { - skip = "N"; - for (i=1; i <= slot; i++) - if (commit[i] ~ "<branch>") - skip = "Y"; - if (skip == "N") - for (i=1; i <= slot; i++) - print commit[i]; - slot = 0; - } - - # accumulate commit - commit[++slot] = $0; - } - - END \ - { - skip = "N"; - for (i=1; i <= slot; i++) - if (commit[i] ~ "<branch>") - skip = "Y"; - if (skip == "N") - for (i=1; i <= slot; i++) - print commit[i]; - }' -else cat -fi diff --git a/src/tools/pginclude/README b/src/tools/pginclude/README index dbe0a6ab0c..8d4131aed1 100644 --- a/src/tools/pginclude/README +++ b/src/tools/pginclude/README @@ -1,4 +1,4 @@ -$PostgreSQL: pgsql/src/tools/pginclude/README,v 1.10 2008/03/21 13:23:29 momjian Exp $ +src/tools/pginclude/README pginclude ========= diff --git a/src/tools/pginclude/cpluspluscheck b/src/tools/pginclude/cpluspluscheck index f266fea24b..1f0fa47ba8 100644 --- a/src/tools/pginclude/cpluspluscheck +++ b/src/tools/pginclude/cpluspluscheck @@ -1,33 +1,34 @@ #!/bin/sh -# Check all include files in or below the current directory for C++ -# compatibility. Typically, run this in PostgreSQL's src/include/ directory. +# Check all exported PostgreSQL include files for C++ compatibility. +# Run this from the top-level source directory after performing a build. # No output if everything is OK, else compiler errors. -set -e - me=`basename $0` -trap 'rm -rf $tmp' 0 1 2 3 15 tmp=`mktemp -d /tmp/$me.XXXXXX` -{ -echo ' extern "C" {' -echo '#include "postgres.h"' +trap 'rm -rf $tmp' 0 1 2 3 15 -# Omit port/, because it's platform specific, and c.h includes it anyway. Omit -# regex/ and snowball/, because those files came from elsewhere, and they would -# need extra work if someone cared to fix them. kwlist.h is not meant to be -# included directly. rusagestub.h will be included by ./utils/pg_rusage.h if -# necessary. -for file in `find . \( -name port -prune -o -name regex -prune -o -name snowball -prune \) -o -name '*.h' -not -name kwlist.h -not -name rusagestub.h -print`; do - f=`echo $file | sed 's,^\./,,'` - echo "#include \"$f\"" +# Omit src/include/port/, because it's platform specific, and c.h includes +# the relevant file anyway. +# rusagestub.h is also platform-specific, and will be included by +# utils/pg_rusage.h if necessary. +# regex/regerrs.h is not meant to be included standalone. +# parser/gram.h will be included by parser/gramparse.h. +# parser/kwlist.h is not meant to be included standalone. + +for f in `find src/include src/interfaces/libpq/libpq-fe.h src/interfaces/libpq/libpq-events.h -name '*.h' -print | \ + grep -v -e ^src/include/port/ \ + -e ^src/include/rusagestub.h -e ^src/include/regex/regerrs.h \ + -e ^src/include/parser/gram.h -e ^src/include/parser/kwlist.h` +do + { + echo ' extern "C" {' + echo '#include "postgres.h"' + echo "#include \"$f\"" + echo '};' + } >$tmp/test.cpp + + ${CXX:-g++} -I . -I src/include -fsyntax-only -Wall -c $tmp/test.cpp done - -echo '};' -} >$tmp/test.cpp - -# -fno-operator-names omits the definition of bitand and bitor, which would -# collide with varbit.h. Could be fixed, if one were so inclined. -${CXX:-g++} -I. -fsyntax-only -fno-operator-names -Wall -c $tmp/test.cpp diff --git a/src/tools/pginclude/pgcheckdefines b/src/tools/pginclude/pgcheckdefines index 07ae7b5d67..2936caf2e0 100755 --- a/src/tools/pginclude/pgcheckdefines +++ b/src/tools/pginclude/pgcheckdefines @@ -17,7 +17,7 @@ # them. We try to process all .c files, even those not intended for the # current platform, so there will be some phony failures. # -# $PostgreSQL: pgsql/src/tools/pginclude/pgcheckdefines,v 1.1 2006/07/15 03:27:42 tgl Exp $ +# src/tools/pginclude/pgcheckdefines # use Cwd; diff --git a/src/tools/pginclude/pgcompinclude b/src/tools/pginclude/pgcompinclude index 5b9564d490..13f49f1637 100755 --- a/src/tools/pginclude/pgcompinclude +++ b/src/tools/pginclude/pgcompinclude @@ -1,7 +1,7 @@ : # report which #include files can not compile on their own # takes -v option to display compile failure message and line numbers -# $PostgreSQL: pgsql/src/tools/pginclude/pgcompinclude,v 1.8 2006/07/14 01:05:13 momjian Exp $ +# src/tools/pginclude/pgcompinclude trap "rm -f /tmp/$$.c /tmp/$$.o /tmp/$$ /tmp/$$a" 0 1 2 3 15 find . \( -name CVS -a -prune \) -o -name '*.h' -type f -print | while read FILE diff --git a/src/tools/pginclude/pgdefine b/src/tools/pginclude/pgdefine index 52a775e163..0284307381 100755 --- a/src/tools/pginclude/pgdefine +++ b/src/tools/pginclude/pgdefine @@ -1,7 +1,7 @@ : # create macro calls for all defines in the file -# $PostgreSQL: pgsql/src/tools/pginclude/pgdefine,v 1.4 2006/07/13 16:39:20 momjian Exp $ +# src/tools/pginclude/pgdefine trap "rm -f /tmp/$$" 0 1 2 3 15 for FILE diff --git a/src/tools/pginclude/pgfixinclude b/src/tools/pginclude/pgfixinclude index 3f081a4997..4b2d2bacee 100755 --- a/src/tools/pginclude/pgfixinclude +++ b/src/tools/pginclude/pgfixinclude @@ -1,6 +1,6 @@ : # change #include's to <> or "" -# $PostgreSQL: pgsql/src/tools/pginclude/pgfixinclude,v 1.6 2006/07/10 16:07:24 momjian Exp $ +# src/tools/pginclude/pgfixinclude trap "rm -f /tmp/$$.c /tmp/$$.o /tmp/$$ /tmp/$$a /tmp/$$b" 0 1 2 3 15 find . \( -name CVS -a -prune \) -o -type f -name '*.[chyls]' -print | diff --git a/src/tools/pginclude/pgrminclude b/src/tools/pginclude/pgrminclude index 7944c9d735..a8ec10a486 100755 --- a/src/tools/pginclude/pgrminclude +++ b/src/tools/pginclude/pgrminclude @@ -1,10 +1,10 @@ : # remove extra #include's -# $PostgreSQL: pgsql/src/tools/pginclude/pgrminclude,v 1.16 2006/07/14 01:05:14 momjian Exp $ +# src/tools/pginclude/pgrminclude trap "rm -f /tmp/$$.c /tmp/$$.o /tmp/$$ /tmp/$$a /tmp/$$b" 0 1 2 3 15 -find . \( -name CVS -a -prune \) -o -type f -name '*.[ch]' -print | +find . \( -name CVS -a -prune \) -o -type f -name '*.[ch]' -print | grep -v '\./postgres.h' | grep -v '\./pg_config.h' | grep -v '\./c.h' | @@ -14,7 +14,7 @@ do then IS_INCLUDE="Y" else IS_INCLUDE="N" fi - + # loop through all includes cat "$FILE" | grep "^#include" | sed 's/^#include[ ]*[<"]\([^>"]*\).*$/\1/g' | @@ -39,7 +39,7 @@ do # remove defines from include files if [ "$IS_INCLUDE" = "Y" ] - then cat "$FILE" | grep -v "^#if" | grep -v "^#else" | + then cat "$FILE" | grep -v "^#if" | grep -v "^#else" | grep -v "^#endif" | sed 's/->[a-zA-Z0-9_\.]*//g' >/tmp/$$a else cat "$FILE" >/tmp/$$a fi diff --git a/src/tools/pgindent/README b/src/tools/pgindent/README index 1cf0629d31..e81e85d15b 100644 --- a/src/tools/pgindent/README +++ b/src/tools/pgindent/README @@ -1,16 +1,16 @@ -$PostgreSQL: pgsql/src/tools/pgindent/README,v 1.42 2010/07/06 19:26:28 momjian Exp $ +src/tools/pgindent/README pgindent ======== This can format all PostgreSQL *.c and *.h files, but excludes *.y, and -*.l files. +*.l files. 1) Change directory to the top of the build tree. 2) Download the typedef file from the buildfarm: - wget -O src/tools/pgindent/typedefs.list http://www.pgbuildfarm.org/cgi-bin/typedefs.pl + wget -O src/tools/pgindent/typedefs.list http://buildfarm.postgresql.org/cgi-bin/typedefs.pl 3) Remove all derived files (pgindent has trouble with one of the flex macros): @@ -23,12 +23,14 @@ This can format all PostgreSQL *.c and *.h files, but excludes *.y, and xargs -n100 pgindent src/tools/pgindent/typedefs.list 5) Remove any files that generate errors and restore their original - versions, e.g. ./src/backend/tsearch/wparser_def.c has problems - because of a DECIMAL listed as a typedef. + versions. 6) Do a full test build: run configure + # stop is only necessary if it's going to install in a location with an + # already running server + pg_ctl stop gmake -C src install gmake -C contrib install gmake installcheck-world @@ -36,8 +38,8 @@ This can format all PostgreSQL *.c and *.h files, but excludes *.y, and --------------------------------------------------------------------------- -We have standardized on NetBSD's indent. We have fixed a few bugs which -requre the NetBSD source to be patched with indent.bsd.patch patch. A +We have standardized on NetBSD's indent. We have fixed a few bugs which +requre the NetBSD source to be patched with indent.bsd.patch patch. A fully patched version is available at ftp://ftp.postgresql.org/pub/dev. GNU indent, version 2.2.6, has several problems, and is not recommended. @@ -75,4 +77,3 @@ To use pgindent: 4) Save a list of typedefs by running: src/tools/find_typedef /usr/local/pgsql/bin /usr/local/pgsql/lib > /tmp/pgtypedefs - diff --git a/src/tools/pgindent/indent.bsd.patch b/src/tools/pgindent/indent.bsd.patch index 095b65123d..e10b9973f6 100644 --- a/src/tools/pgindent/indent.bsd.patch +++ b/src/tools/pgindent/indent.bsd.patch @@ -1,4 +1,4 @@ -$PostgreSQL: pgsql/src/tools/pgindent/indent.bsd.patch,v 1.8 2006/03/11 04:38:42 momjian Exp $ +src/tools/pgindent/indent.bsd.patch This patch contains several fixes to NetBSD's indent and should be applied before using pgindent. diff --git a/src/tools/pgindent/pgcppindent b/src/tools/pgindent/pgcppindent index e624efb0e4..59ddf4baca 100755 --- a/src/tools/pgindent/pgcppindent +++ b/src/tools/pgindent/pgcppindent @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/pgindent/pgcppindent,v 1.2 2006/03/11 04:38:42 momjian Exp $ +# src/tools/pgindent/pgcppindent trap "rm -f /tmp/$$ /tmp/$$a" 0 1 2 3 15 entab </dev/null >/dev/null diff --git a/src/tools/pgindent/pgindent b/src/tools/pgindent/pgindent index 67c9253c47..05f69ef1f3 100755 --- a/src/tools/pgindent/pgindent +++ b/src/tools/pgindent/pgindent @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/pgindent/pgindent,v 1.102 2010/04/05 03:09:09 adunstan Exp $ +# src/tools/pgindent/pgindent # Known bugs: # @@ -21,6 +21,11 @@ fi TYPEDEFS="$1" shift +if [ -z "$INDENT" ] +then + INDENT=indent +fi + trap "rm -f /tmp/$$ /tmp/$$a" 0 1 2 3 15 entab </dev/null >/dev/null if [ "$?" -ne 0 ] @@ -29,17 +34,17 @@ then echo "Go to the src/tools/entab directory and do a 'make' and 'make install echo "Then run $0 again." exit 1 fi -indent -? </dev/null >/dev/null 2>&1 +$INDENT -? </dev/null >/dev/null 2>&1 if [ "$?" -ne 1 ] then echo "You do not appear to have 'indent' installed on your system." >&2 exit 1 fi -indent -gnu </dev/null >/dev/null 2>&1 +$INDENT -gnu </dev/null >/dev/null 2>&1 if [ "$?" -eq 0 ] then echo "You appear to have GNU indent rather than BSD indent." >&2 echo "See the pgindent/README file for a description of its problems." >&2 EXTRA_OPTS="-cdb -bli0 -npcs -cli4 -sc" -else +else EXTRA_OPTS="-cli1" fi @@ -136,7 +141,7 @@ do sed 's;^CATALOG(.*$;/*&*/;' >/tmp/$$a # We get the list of typedef's from /src/tools/find_typedef - indent -bad -bap -bc -bl -d0 -cdb -nce -nfc1 -di12 -i4 -l79 \ + $INDENT -bad -bap -bc -bl -d0 -cdb -nce -nfc1 -di12 -i4 -l79 \ -lp -nip -npro -bbb $EXTRA_OPTS \ `egrep -v '^(FD_SET|date|interval|timestamp|ANY)$' "$TYPEDEFS" | sed -e '/^$/d' -e 's/.*/-T& /'` \ /tmp/$$a >/tmp/$$ 2>&1 @@ -193,7 +198,7 @@ do # isn't needed for general use. # awk ' # { -# line3 = $0; +# line3 = $0; # if (skips > 0) # skips--; # if (line1 ~ / *{$/ && @@ -221,7 +226,7 @@ do # Remove blank line between opening brace and block comment. awk ' { - line3 = $0; + line3 = $0; if (skips > 0) skips--; if (line1 ~ / *{$/ && @@ -326,10 +331,10 @@ do print line1; }' | -# Move prototype names to the same line as return type. Useful for ctags. +# Move prototype names to the same line as return type. Useful for ctags. # Indent should do this, but it does not. It formats prototypes just # like real functions. - awk ' BEGIN {paren_level = 0} + awk ' BEGIN {paren_level = 0} { if ($0 ~ /^[a-zA-Z_][a-zA-Z_0-9]*[^\(]*$/) { diff --git a/src/tools/pgindent/typedefs.list b/src/tools/pgindent/typedefs.list index 7b3787a66e..f2982cd7b3 100644 --- a/src/tools/pgindent/typedefs.list +++ b/src/tools/pgindent/typedefs.list @@ -1,6 +1,5 @@ ABITVEC ACCESS_ALLOWED_ACE -ACL ACL_SIZE_INFORMATION AES_KEY AFFIX @@ -28,20 +27,17 @@ AffixNodeData AfterTriggerEvent AfterTriggerEventChunk AfterTriggerEventData -AfterTriggerEventDataOneCtid AfterTriggerEventList AfterTriggerShared AfterTriggerSharedData AfterTriggers AfterTriggersData Agg -AggClauseCounts +AggClauseCosts AggHashEntry -AggHashEntryData AggInfo AggState AggStatePerAgg -AggStatePerAggData AggStatePerGroup AggStatePerGroupData AggStrategy @@ -49,9 +45,7 @@ Aggref AggrefExprState Alias AllocBlock -AllocBlockData AllocChunk -AllocChunkData AllocPointer AllocSet AllocSetContext @@ -61,6 +55,9 @@ AlterDatabaseSetStmt AlterDatabaseStmt AlterDefaultPrivilegesStmt AlterDomainStmt +AlterEnumStmt +AlterExtensionContentsStmt +AlterExtensionStmt AlterFdwStmt AlterForeignServerStmt AlterFunctionStmt @@ -99,6 +96,7 @@ ArrayConstIterState ArrayExpr ArrayExprIterState ArrayExprState +ArrayIterator ArrayMapState ArrayMetaState ArrayParseState @@ -117,7 +115,6 @@ AttributeOpts AuthRequest AutoVacOpts AutoVacuumShmemStruct -AutoVacuumSignal AuxProcType BF_KEY BF_ctx @@ -128,7 +125,6 @@ BIO BIO_METHOD BITVEC BITVECP -BLOB BMS_Membership BN_CTX BOOL @@ -145,7 +141,6 @@ BTPageStat BTPageState BTScanOpaque BTScanOpaqueData -BTScanPos BTScanPosData BTScanPosItem BTSpool @@ -157,7 +152,9 @@ BTWriteState BYTE Backend BackendId -BackslashQuoteType +BackendParameters +BaseBackupCmd +BeginForeignScan_function BgWriterRequest BgWriterShmemStruct BitmapAnd @@ -184,7 +181,6 @@ BlowfishContext BoolExpr BoolExprState BoolExprType -BoolPtr BoolTestType BooleanTest BpChar @@ -193,7 +189,6 @@ BufFile BufFlags Buffer BufferAccessStrategy -BufferAccessStrategyData BufferAccessStrategyType BufferCachePagesContext BufferCachePagesRec @@ -204,13 +199,12 @@ BufferTag BufferUsage BuildAccumulator BulkInsertState -BulkInsertStateData -ByteaOutputType CACHESIGN CAC_state CAST_KEY CFuncHashTabEntry CHAR +CHECKPOINT CHKVAL CIRCLE CMPDAffix @@ -219,7 +213,7 @@ COP CRITICAL_SECTION CState CV -CY +C_block CachedPlan CachedPlanSource CancelRequestPacket @@ -242,12 +236,12 @@ CheckPointStmt CheckpointStatsData Chromosome City +ClientAuthentication_hook_type ClientData ClonePtr ClosePortalStmt ClosePtr Clump -Cluster ClusterInfo ClusterStmt CmdType @@ -259,11 +253,13 @@ CoerceToDomainState CoerceToDomainValue CoerceViaIO CoerceViaIOState -CoercionCodes CoercionContext CoercionForm -CoercionMethod CoercionPathType +CollInfo +CollateClause +CollateExpr +CollateStrength ColumnCompareData ColumnDef ColumnIOData @@ -280,6 +276,9 @@ CommentStmt CommonTableExpr CompareScalarsContext CompositeTypeStmt +CompressionAlgorithm +CompressorState +ConfigVariable ConnStatusType ConnType Const @@ -287,7 +286,6 @@ ConstrCheck ConstrType Constraint ConstraintCategory -ConstraintExclusionType ConstraintInfo ConstraintsSetStmt ControlData @@ -309,8 +307,10 @@ CreateCastStmt CreateConversionStmt CreateDomainStmt CreateEnumStmt +CreateExtensionStmt CreateFdwStmt CreateForeignServerStmt +CreateForeignTableStmt CreateFunctionStmt CreateOpClassItem CreateOpClassStmt @@ -322,31 +322,27 @@ CreateSchemaStmtContext CreateSeqStmt CreateStmt CreateStmtContext -CreateStmtLikeOption CreateTableSpaceStmt CreateTrigStmt CreateUserMappingStmt CreatedbStmt +CredHandle CteItem CteScan CteScanState CteState CtlCommand +CtxtHandle CurrentOfExpr CustomOutPtr CycleCtr -DATADIR -DATE DBState DCHCacheEntry -DCH_poz DEADLOCK_INFO -DECIMAL DES_cblock DES_key_schedule DH DIR -DOUBLE DR_copy DR_intorel DR_printtup @@ -357,8 +353,6 @@ DataDumperPtr DataPageDeleteStack DateADT Datum -DatumArray -DatumPtr DatumTupleFields DbInfo DbInfoArr @@ -418,22 +412,28 @@ Edge EndBlobPtr EndBlobsPtr EndDataPtr -EntryAccumulator +EndForeignScan_function +EnumItem EolType EquivalenceClass EquivalenceMember ErrorContextCallback ErrorData ExceptionLabelMap +ExceptionMap +ExecAuxRowMark ExecRowMark ExecScanAccessMtd ExecScanRecheckMtd ExecStatus ExecStatusType ExecuteStmt +ExecutorCheckPerms_hook_type ExecutorEnd_hook_type +ExecutorFinish_hook_type ExecutorRun_hook_type ExecutorStart_hook_type +ExplainForeignScan_function ExplainFormat ExplainOneQuery_hook_type ExplainState @@ -446,11 +446,13 @@ ExprDoneCond ExprState ExprStateEvalFunc ExtensionBehavior +ExtensionControlFile +ExtensionInfo +ExtensionVersionInfo Extention +FD_SET FILE FILETIME -FIXED -FLOAT FSMAddress FSMPage FSMPageData @@ -458,6 +460,8 @@ FState FakeRelCacheEntry FakeRelCacheEntryData FdwInfo +FdwPlan +FdwRoutine FetchDirection FetchStmt FieldNot @@ -466,15 +470,21 @@ FieldSelectState FieldStore FieldStoreState File +FileFdwExecutionState FileName FileNameMap FindSplitData FixedParamState FmgrBuiltin +FmgrHookEventType FmgrInfo ForeignDataWrapper +ForeignPath +ForeignScan +ForeignScanState ForeignServer ForeignServerInfo +ForeignTable ForkNumber FormData_pg_aggregate FormData_pg_am @@ -486,16 +496,17 @@ FormData_pg_auth_members FormData_pg_authid FormData_pg_cast FormData_pg_class +FormData_pg_collation FormData_pg_constraint FormData_pg_conversion FormData_pg_database -FormData_pg_db_role_setting FormData_pg_default_acl FormData_pg_depend -FormData_pg_description FormData_pg_enum +FormData_pg_extension FormData_pg_foreign_data_wrapper FormData_pg_foreign_server +FormData_pg_foreign_table FormData_pg_index FormData_pg_inherits FormData_pg_language @@ -510,7 +521,6 @@ FormData_pg_proc FormData_pg_rewrite FormData_pg_sequence FormData_pg_shdepend -FormData_pg_shdescription FormData_pg_statistic FormData_pg_tablespace FormData_pg_trigger @@ -531,16 +541,17 @@ Form_pg_auth_members Form_pg_authid Form_pg_cast Form_pg_class +Form_pg_collation Form_pg_constraint Form_pg_conversion Form_pg_database -Form_pg_db_role_setting Form_pg_default_acl Form_pg_depend -Form_pg_description Form_pg_enum +Form_pg_extension Form_pg_foreign_data_wrapper Form_pg_foreign_server +Form_pg_foreign_table Form_pg_index Form_pg_inherits Form_pg_language @@ -555,7 +566,6 @@ Form_pg_proc Form_pg_rewrite Form_pg_sequence Form_pg_shdepend -Form_pg_shdescription Form_pg_statistic Form_pg_tablespace Form_pg_trigger @@ -577,7 +587,6 @@ FuncExpr FuncExprState FuncInfo FuncWithArgs -Function FunctionCallInfo FunctionCallInfoData FunctionParameter @@ -594,44 +603,45 @@ GISTInsertStack GISTInsertState GISTPageOpaque GISTPageOpaqueData +GISTPageSplitInfo GISTSTATE GISTScanOpaque GISTScanOpaqueData -GISTSearchStack +GISTSearchHeapItem +GISTSearchItem +GISTSearchTreeItem GISTTYPE GIST_SPLITVEC GV Gene GenericExprState -GenericOptionFlags GeqoPrivateData GinBtree GinBtreeData GinBtreeStack GinBuildState GinChkVal +GinEntryAccumulator GinMetaPageData +GinNullCategory GinOptions GinPageOpaque GinPageOpaqueData GinPostingTreeScan GinScanEntry -GinScanEntryData GinScanKey -GinScanKeyData GinScanOpaque GinScanOpaqueData GinState +GinStatsData GinTupleCollector GinVacuumState GistBDItem -GistBulkDeleteResult GistEntryVector GistNSN GistSplitUnion GistSplitVector GlobalTransaction -GlobalTransactionData GrantObjectType GrantRoleStmt GrantStmt @@ -641,15 +651,20 @@ GroupState GroupVarInfo GucAction GucBoolAssignHook +GucBoolCheckHook GucContext GucEnumAssignHook +GucEnumCheckHook GucIntAssignHook +GucIntCheckHook GucRealAssignHook +GucRealCheckHook GucShowHook GucSource GucStack GucStackState GucStringAssignHook +GucStringCheckHook HANDLE HASHACTION HASHBUCKET @@ -658,6 +673,7 @@ HASHELEMENT HASHHDR HASHSEGMENT HASH_SEQ_STATUS +HE HEntry HIST_ENTRY HKEY @@ -679,9 +695,7 @@ HashCopyFunc HashJoin HashJoinState HashJoinTable -HashJoinTableData HashJoinTuple -HashJoinTupleData HashMetaPage HashMetaPageData HashPageOpaque @@ -697,8 +711,8 @@ HashValueFunc HbaLine HeadlineParsedText HeadlineWordEntry +HeapPosition HeapScanDesc -HeapScanDescData HeapTuple HeapTupleData HeapTupleFields @@ -708,18 +722,16 @@ HistControl HotStandbyState I32 INFIX -INT -INT32 +INTERFACE_INFO IOFuncSelector IPCompareMethod ITEM IV IdentifierLookup +IdentifySystemCmd IncrementVarSublevelsUp_context Index IndexArrayKeyInfo -IndexAttributeBitMap -IndexAttributeBitMapData IndexBuildCallback IndexBuildResult IndexBulkDeleteCallback @@ -732,7 +744,6 @@ IndexPath IndexRuntimeKeyInfo IndexScan IndexScanDesc -IndexScanDescData IndexScanState IndexStmt IndexTuple @@ -744,18 +755,16 @@ IndxInfo InfoItem InhInfo InhOption -InhPaths InhRelation +InheritableSocket InlineCodeBlock InnerIndexscanInfo InsertStmt -InstrumentOption Instrumentation Int8TransTypeData IntArray InternalDefaultACL InternalGrant -InterpState Interval IntoClause InvalidationChunk @@ -768,11 +777,9 @@ IspellDict Item ItemId ItemIdData -ItemLength -ItemOffset ItemPointer ItemPointerData -ItemResult +IterateForeignScan_function JOBOBJECTINFOCLASS JOBOBJECT_BASIC_LIMIT_INFORMATION JOBOBJECT_BASIC_UI_RESTRICTIONS @@ -784,10 +791,10 @@ JoinPath JoinState JoinType JunkFilter +KeyArray KeySuffix KeyWord LARGE_INTEGER -LCID LDAP LDAPMessage LDAP_TIMEVAL @@ -795,13 +802,14 @@ LINE LOCALLOCK LOCALLOCKOWNER LOCALLOCKTAG +LOCALPREDICATELOCK LOCK LOCKMASK LOCKMETHODID LOCKMODE LOCKTAG LONG -LP +LOOP LPBYTE LPCTSTR LPCWSTR @@ -819,7 +827,9 @@ LWLock LWLockId LWLockMode LWLockPadded +LabelProvider LargeObjectDesc +Latch LexDescr LexemeEntry LexemeHashKey @@ -842,7 +852,6 @@ LocalTransactionId LocationIndex LockAcquireResult LockData -LockInfo LockInfoData LockMethod LockMethodData @@ -853,11 +862,14 @@ LockStmt LockTagType LockTupleMode LockingClause +LogOpts LogStmtLevel LogicalTape LogicalTapeSet MAGIC MBuf +MINIDUMPWRITEDUMP +MINIDUMP_TYPE MJEvalResult Material MaterialPath @@ -866,9 +878,11 @@ MdfdVec MemoryContext MemoryContextData MemoryContextMethods +MergeAppend +MergeAppendPath +MergeAppendState MergeJoin MergeJoinClause -MergeJoinClauseData MergeJoinState MergePath MergeScanSelCache @@ -890,13 +904,13 @@ NODE NUMCacheEntry NUMDesc NUMProc -NUM_poz NV Name NameData NamedArgExpr NamespaceInfo NestLoop +NestLoopParam NestLoopState NestPath NewColumnValue @@ -912,14 +926,14 @@ NullTest NullTestState NullTestType Numeric -NumericData NumericDigit NumericVar -OM_uint32 OP +OSInfo OSSLDigest OSVERSIONINFO OVERLAPPED +ObjectAccessType ObjectAddress ObjectAddressExtra ObjectAddressStack @@ -931,6 +945,7 @@ OffsetNumber OffsetVarNodes_context Oid OidOptions +OldSerXidControl OldToNewMapping OldToNewMappingData OldTriggerInfo @@ -954,12 +969,11 @@ OverrideStackEntry PACE_HEADER PACL PATH -PATTERN PBOOL +PCtxtHandle PFN PGAsyncStatusType PGCALL2 -PGErrorVerbosity PGEvent PGEventConnDestroy PGEventConnReset @@ -983,17 +997,17 @@ PGP_Context PGP_MPI PGP_PubKey PGP_S2K +PGPing PGQueryClass PGRUsage -PGSSTrackLevel PGSemaphore PGSemaphoreData PGSetenvStatusType PGShmemHeader PGTransactionStatusType PGVerbosity +PG_Locale_Strategy PG_Lock_Status -PG_fini_t PG_init_t PGcancel PGconn @@ -1038,6 +1052,7 @@ PLpgSQL_stmt_execsql PLpgSQL_stmt_exit PLpgSQL_stmt_fetch PLpgSQL_stmt_forc +PLpgSQL_stmt_foreach_a PLpgSQL_stmt_fori PLpgSQL_stmt_forq PLpgSQL_stmt_fors @@ -1058,20 +1073,26 @@ PLwdatum PLword PLyDatumToOb PLyDatumToObFunc +PLyExceptionEntry PLyObToDatum PLyObToDatumFunc PLyObToTuple PLyPlanObject PLyProcedure +PLyProcedureEntry PLyResultObject +PLySubtransactionData +PLySubtransactionObject PLyTupleToOb PLyTypeInfo PLyTypeInput PLyTypeOutput +PMINIDUMP_CALLBACK_INFORMATION +PMINIDUMP_EXCEPTION_INFORMATION +PMINIDUMP_USER_STREAM_INFORMATION PMSignalData PMSignalReason PMState -POINT POLYGON PQArgBlock PQEnvironmentOption @@ -1081,7 +1102,10 @@ PQconninfoOption PQnoticeProcessor PQnoticeReceiver PQprintOpt -PROC +PREDICATELOCK +PREDICATELOCKTAG +PREDICATELOCKTARGET +PREDICATELOCKTARGETTAG PROCESS_INFORMATION PROCLOCK PROCLOCKTAG @@ -1094,7 +1118,6 @@ PSQL_ECHO_HIDDEN PSQL_ERROR_ROLLBACK PTOKEN_GROUPS PTOKEN_USER -PULONG PVCPlaceHolderBehavior PVOID PX_Alias @@ -1102,12 +1125,10 @@ PX_Cipher PX_Combo PX_HMAC PX_MD -PacketLen Page PageHeader PageHeaderData PageSplitRecord -PageUpdateRecord PagetableEntry Pairs ParallelSlot @@ -1117,7 +1138,6 @@ ParamExternData ParamFetchHook ParamKind ParamListInfo -ParamListInfoData ParamRef ParseCallbackState ParseParamRefHook @@ -1156,6 +1176,7 @@ PgStat_MsgFuncpurge PgStat_MsgFuncstat PgStat_MsgHdr PgStat_MsgInquiry +PgStat_MsgRecoveryConflict PgStat_MsgResetcounter PgStat_MsgResetsharedcounter PgStat_MsgResetsinglecounter @@ -1179,6 +1200,7 @@ PipeProtoHeader PlaceHolderInfo PlaceHolderVar Plan +PlanForeignScan_function PlanInvalItem PlanRowMark PlanState @@ -1191,7 +1213,6 @@ Pointer Pool Port Portal -PortalData PortalHashEnt PortalStatus PortalStrategy @@ -1202,11 +1223,18 @@ PreParseColumnRefHook PredClass PredIterInfo PredIterInfoData +PredXactList +PredXactListElement +PredicateLockData +PredicateLockTargetType PrepareStmt PreparedParamsData PreparedStatement PrintExtraTocPtr PrintTocDataPtr +PrintfArgType +PrintfArgValue +PrintfTarget PrinttupAttrInfo PrivGrantee PrivTarget @@ -1230,6 +1258,7 @@ PullFilterOps PushFilter PushFilterOps PushFunction +PyCodeObject PyMethodDef PyObject PySequenceMethods @@ -1256,8 +1285,7 @@ QueuePosition RBNode RBOrderControl RBTree -RBTreeIterator -REPARSE_DATA_BUFFER +REPARSE_JUNCTION_DATA_BUFFER RIX RI_CompareHashEntry RI_CompareKey @@ -1266,8 +1294,8 @@ RI_QueryHashEntry RI_QueryKey RSA RTEKind -RUHashEntry -RUHashEntryData +RWConflict +RWConflictPoolHeader RangeFunction RangeQueryClause RangeSubselect @@ -1275,10 +1303,12 @@ RangeTblEntry RangeTblRef RangeVar RawColumnDefault +ReScanForeignScan_function ReadBufPtr ReadBufferMode ReadBytePtr ReadExtraTocPtr +ReadFunc ReassignOwnedStmt RecordCacheEntry RecordCompareData @@ -1292,6 +1322,7 @@ Regis RegisNode ReindexStmt RelFileNode +RelFileNodeBackend RelIdCacheEnt RelInfo RelInfoArr @@ -1317,7 +1348,6 @@ ReopenPtr ResTarget ResolveNew_context ResourceOwner -ResourceOwnerData ResourceReleaseCallback ResourceReleaseCallbackItem ResourceReleasePhase @@ -1331,7 +1361,6 @@ ResultState ReturnSetInfo RewriteRule RewriteState -RewriteStateData RmgrData RmgrId RoleStmtType @@ -1349,7 +1378,11 @@ RunningTransactions RunningTransactionsData SC_HANDLE SECURITY_ATTRIBUTES +SECURITY_STATUS SEG +SERIALIZABLEXACT +SERIALIZABLEXID +SERIALIZABLEXIDTAG SERVICE_STATUS SERVICE_STATUS_HANDLE SERVICE_TABLE_ENTRY @@ -1359,15 +1392,14 @@ SHA256_CTX SHA384_CTX SHA512_CTX SHM_QUEUE -SHORT -SID SID_AND_ATTRIBUTES SID_IDENTIFIER_AUTHORITY SID_NAME_USE SISeg -SIZE SMgrRelation SMgrRelationData +SOCKADDR +SOCKET SPELL SPIPlanPtr SPITupleTable @@ -1376,14 +1408,13 @@ SPNode SPNodeData SQLFunctionCache SQLFunctionCachePtr +SQLFunctionParseInfoPtr SSL SSL_CTX STARTUPINFO STRLEN SV -SYSTEMTIME SaOpControl -SaveArchivePtr ScalarArrayOpExpr ScalarArrayOpExprState ScalarItem @@ -1396,21 +1427,24 @@ ScanKeyword ScanState ScanTypeControl SchemaQuery +SecBuffer +SecBufferDesc +SecLabelItem +SecLabelStmt SelectStmt Selectivity SeqScan SeqScanState SeqTable SeqTableData +SerCommitSeqNo SetConstraintState SetConstraintStateData -SetConstraintTrigger SetConstraintTriggerData SetFunctionReturnMode SetOp SetOpCmd SetOpHashEntry -SetOpHashEntryData SetOpState SetOpStatePerGroup SetOpStatePerGroupData @@ -1435,6 +1469,7 @@ SimpleOidListCell SimpleStringList SimpleStringListCell Size +SlotNumber SlruCtl SlruCtlData SlruErrorCause @@ -1459,9 +1494,12 @@ SplitVar SplitedPageLayout StackElem StandardChunkHeader +StandbyHSFeedbackMessage +StandbyReplyMessage StartBlobPtr StartBlobsPtr StartDataPtr +StartReplicationCmd StartupPacket StatEntry StatMsgType @@ -1484,7 +1522,6 @@ SubqueryScanState SuffixChar Syn SysScanDesc -SysScanDescData SyscacheCallbackFunction TAR_MEMBER TBMIterateResult @@ -1554,14 +1591,15 @@ TimeInterval TimeIntervalData TimeLineID TimeOffset +TimeStamp TimeTzADT +TimeZoneAbbrevTable Timestamp TimestampTz TmFromChar TmToChar TocEntry TokenAuxData -TrackFunctionsLevel TrackItem TransInvalidationInfo TransState @@ -1587,7 +1625,6 @@ TupleHashEntry TupleHashEntryData TupleHashIterator TupleHashTable -TupleHashTableData TupleTableSlot Tuplesortstate Tuplestorestate @@ -1595,6 +1632,10 @@ TwoPhaseCallback TwoPhaseFileHeader TwoPhaseLockRecord TwoPhasePgStatRecord +TwoPhasePredicateLockRecord +TwoPhasePredicateRecord +TwoPhasePredicateRecordType +TwoPhasePredicateXactRecord TwoPhaseRecordOnDisk TwoPhaseRmgrId TwoPhaseStateData @@ -1602,6 +1643,7 @@ TxidEpoch TxidSnapshot Type TypeCacheEntry +TypeCacheEnumData TypeCast TypeFuncClass TypeInfo @@ -1612,7 +1654,6 @@ UINT ULARGE_INTEGER ULONG ULONG_PTR -UUID UV Unique UniquePath @@ -1624,9 +1665,9 @@ UnresolvedTupData UpdateStmt UserAuth UserMapping +UserOpts VacAttrStats VacAttrStatsP -VacuumOption VacuumStmt Value ValuesScan @@ -1648,18 +1689,23 @@ Vfd ViewStmt VirtualTransactionId Vsrt +WAITORTIMERCALLBACK WAIT_ORDER WCHAR WIN32_FILE_ATTRIBUTE_DATA -WIN32_FIND_DATA WORD WORKSTATE +WSABUF +WSADATA +WSANETWORKEVENTS +WSAPROTOCOL_INFO WalDataMessageHeader WalLevel WalRcvData WalRcvState WalSnd WalSndCtlData +WalSndState WindowAgg WindowAggState WindowClause @@ -1672,7 +1718,6 @@ WindowObjectData WindowStatePerAgg WindowStatePerAggData WindowStatePerFunc -WindowStatePerFuncData WithClause WordEntry WordEntryIN @@ -1681,12 +1726,12 @@ WordEntryPosVector WorkTableScan WorkTableScanState WorkerInfo -WorkerInfoData Working_State WriteBufPtr WriteBytePtr WriteDataPtr WriteExtraTocPtr +WriteFunc X509 X509_NAME X509_NAME_ENTRY @@ -1706,19 +1751,15 @@ XLogRecord XLogwrtResult XLogwrtRqst XPVIV -XPVMG -XRV XactCallback XactCallbackItem XactEvent XidStatus -XmlBinaryType XmlExpr XmlExprOp XmlExprState XmlOptionType XmlSerialize -XmlStandaloneType YYLTYPE YYSTYPE YY_BUFFER_STATE @@ -1729,9 +1770,12 @@ __CreateJobObject __CreateRestrictedToken __IsProcessInJob __QueryInformationJobObject +__RegisterWaitForSingleObject __SetInformationJobObject aclitem +allocfunc array_unnest_fctx +assign_collations_context attribute_used_context autovac_table av_relation @@ -1739,37 +1783,39 @@ avl_dbase avw_dbase backslashResult base_yy_extra_type +basebackup_options bitmapword bits16 bits32 bits8 bool -boolean bt_incomplete_action -byte bytea cached_re_str -caddr_t cashKEY celt -char +cfp check_network_data +check_object_relabel_type check_password_hook_type check_ungrouped_columns_context chkpass chr clock_t -cmpEntriesData +cmpEntriesArg cmpfunc codes_t coercion +collation_cache_entry color +config_var_value contain_aggs_of_level_context convert_testexpr_context core_YYSTYPE core_yy_extra_type core_yyscan_t cost_qual_eval_context +count_agg_clauses_context createdb_failure_params crosstab_HashEnt crosstab_cat_desc @@ -1781,7 +1827,6 @@ deparse_namespace destructor dev_t directory_fctx -double ds_state eLogType ean13 @@ -1798,19 +1843,18 @@ fix_join_expr_context fix_scan_expr_context fix_upper_expr_context flatten_join_alias_vars_context -float float4 float4KEY float8 float8KEY fmNodePtr -fmStringInfo -formarray -formfloat +fmgr_hook_type fpos_t +freeaddrinfo_ptr_t freefunc fsec_t func_ptr +gbt_vsrt_arg gbtree_ninfo gbtree_vinfo generate_series_fctx @@ -1821,6 +1865,8 @@ get_attavgwidth_hook_type get_index_stats_hook_type get_relation_info_hook_type get_relation_stats_hook_type +getaddrinfo_ptr_t +getnameinfo_ptr_t gid_t ginIncompleteSplit ginxlogCreatePostingTree @@ -1831,17 +1877,12 @@ ginxlogInsertListPage ginxlogSplit ginxlogUpdateMeta ginxlogVacuumPage -gistIncompleteInsert -gistxlogInsertComplete gistxlogPage gistxlogPageDelete gistxlogPageSplit gistxlogPageUpdate -gss_OID +gseg_picksplit_item gss_buffer_desc -gss_cred_id_t -gss_ctx_id_t -gss_name_t gzFile hashfunc hbaPort @@ -1856,10 +1897,8 @@ inline_error_callback_arg ino_t inquiry instr_time -int int16 int16KEY -int16_t int2 int2vector int32 @@ -1875,6 +1914,7 @@ itemIdSort itemIdSortData jmp_buf join_search_hook_type +keyEntryData key_t krb5_auth_context krb5_ccache @@ -1882,11 +1922,13 @@ krb5_context krb5_error krb5_error_code krb5_keytab +krb5_pointer krb5_principal krb5_ticket lclContext lclTocEntry line_t +locale_t locate_agg_of_level_context locate_var_of_level_context locate_var_of_relation_context @@ -1907,7 +1949,6 @@ mblen_converter mbverifier md5_ctxt metastring -migratorContext mix_data_t mixedStruct mode_t @@ -1919,18 +1960,18 @@ mp_sign mp_size mp_word mpz_t +needs_fmgr_hook_type nodeitem normal_rand_fctx ntile_context numeric objectType +object_access_hook_type off_t oidKEY oidvector -optType ossldata pageCnvCtx -pam_handle_t parse_error_callback_arg pcolor pendingPosition @@ -1944,6 +1985,8 @@ pg_encname pg_gssinfo pg_local_to_utf pg_local_to_utf_combined +pg_locale_t +pg_node_tree pg_on_exit_callback pg_re_flags pg_time_t @@ -1966,13 +2009,19 @@ pgstattuple_type pgthreadlock_t pid_t planner_hook_type +plperl_array_info plperl_call_data +plperl_interp_desc plperl_proc_desc -plperl_proc_entry +plperl_proc_key +plperl_proc_ptr plperl_query_desc plperl_query_entry plpgsql_HashEnt +pltcl_interp_desc pltcl_proc_desc +pltcl_proc_key +pltcl_proc_ptr pltcl_query_desc pqbool pqsigfunc @@ -1987,7 +2036,6 @@ printTextRule priv_map process_sublinks_context promptStatus_t -pthread_attr_t pthread_key_t pthread_mutex_t pthread_once_t @@ -2000,7 +2048,8 @@ radius_attribute radius_packet rangeTableEntry_used_context rank_context -rb_appendator +rb_allocfunc +rb_combiner rb_comparator rb_freefunc reduce_outer_joins_state @@ -2028,11 +2077,10 @@ replace_rte_variables_context rewrite_event rijndael_ctx rm_detail_t -s1byte -s2byte -s4byte +role_auth_extra save_buffer sequence_magic +setter shmem_startup_hook_type sig_atomic_t sigjmp_buf @@ -2042,10 +2090,8 @@ size_t slock_t smgrid sql_error_callback_arg -sqlda_t sqlparseInfo sqlparseState -sqlvar_t ss_lru_item_t ss_scan_location_t ss_scan_locations_t @@ -2055,12 +2101,17 @@ stmtCacheEntry substitute_actual_parameters_context substitute_actual_srf_parameters_context substitute_multiple_relids_context +svtype symbol +tablespaceinfo teReqs teSection +temp_tablespaces_extra text timeKEY time_t +timerCA +timezone_extra tlist_vinfo transferMode trgm @@ -2071,20 +2122,19 @@ tsearch_readline_state txid tzEntry u1byte -u2byte u4byte u_char u_int uchr uid_t -uint uint16 +uint16_t uint32 uint32_t uint64 uint8 uintptr_t -unknown +unlogged_relation_entry uuid_rc_t uuid_t v_i_state @@ -2093,11 +2143,13 @@ validate_string_relopt varattrib_1b varattrib_1b_e varattrib_4b -void walrcv_connect_type walrcv_disconnect_type walrcv_receive_type +walrcv_send_type wchar_t +win32_deadchild_waitinfo +win32_pthread wint_t xl_btree_delete xl_btree_delete_page @@ -2109,9 +2161,7 @@ xl_btree_split xl_btree_vacuum xl_btreetid xl_dbase_create_rec -xl_dbase_create_rec_old xl_dbase_drop_rec -xl_dbase_drop_rec_old xl_heap_clean xl_heap_cleanup_info xl_heap_delete @@ -2128,6 +2178,7 @@ xl_invalid_page_key xl_multixact_create xl_parameter_change xl_relmap_update +xl_restore_point xl_running_xacts xl_seq_rec xl_smgr_create @@ -2154,7 +2205,9 @@ xmlXPathCompExprPtr xmlXPathContextPtr xmlXPathObjectPtr xmltype +xpath_workspace xsltStylesheetPtr +yy_parser yy_size_t yyscan_t z_stream diff --git a/src/tools/pgtest b/src/tools/pgtest index 9a50bea446..c5356fced8 100755 --- a/src/tools/pgtest +++ b/src/tools/pgtest @@ -1,6 +1,6 @@ #!/bin/sh -# $PostgreSQL: pgsql/src/tools/pgtest,v 1.6 2006/03/11 04:38:41 momjian Exp $ +# src/tools/pgtest # This runs a build/initdb/regression test suite # @@ -18,12 +18,12 @@ TMP="/tmp/$$" [ "X$1" != "X-n" ] && PGCLEAN=clean -(gmake $PGCLEAN check 2>&1; echo "$?" > $TMP/ret) | +(gmake $PGCLEAN check 2>&1; echo "$?" > $TMP/ret) | (tee $TMP/0; exit `cat $TMP/ret`) && cat $TMP/0 | -# The following grep's have to be adjusted for your setup because +# The following grep's have to be adjusted for your setup because # certain warnings are acceptable. -grep -i warning | -grep -v setproctitle | -grep -v find_rule | +grep -i warning | +grep -v setproctitle | +grep -v find_rule | grep -v yy_flex_realloc diff --git a/src/tools/version_stamp.pl b/src/tools/version_stamp.pl index aff2c289fd..ef945da2dd 100755 --- a/src/tools/version_stamp.pl +++ b/src/tools/version_stamp.pl @@ -3,9 +3,9 @@ ################################################################# # version_stamp.pl -- update version stamps throughout the source tree # -# Copyright (c) 2008-2010, PostgreSQL Global Development Group +# Copyright (c) 2008-2011, PostgreSQL Global Development Group # -# $PostgreSQL: pgsql/src/tools/version_stamp.pl,v 1.6 2010/02/17 04:19:41 tgl Exp $ +# src/tools/version_stamp.pl ################################################################# # @@ -23,7 +23,7 @@ # Major version is hard-wired into the script. We update it when we branch # a new development version. $major1 = 9; -$major2 = 0; +$major2 = 1; # Validate argument and compute derived variables $minor = shift; diff --git a/src/tools/win32tzlist.pl b/src/tools/win32tzlist.pl index 083cc08850..a5acee7cad 100755 --- a/src/tools/win32tzlist.pl +++ b/src/tools/win32tzlist.pl @@ -2,9 +2,9 @@ # # win32tzlist.pl -- compare Windows timezone information # -# Copyright (c) 2008-2010, PostgreSQL Global Development Group +# Copyright (c) 2008-2011, PostgreSQL Global Development Group # -# $PostgreSQL: pgsql/src/tools/win32tzlist.pl,v 1.1 2010/04/15 11:00:45 mha Exp $ +# src/tools/win32tzlist.pl ################################################################# # |