summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2001-02-10 02:31:31 +0000
committerTom Lane2001-02-10 02:31:31 +0000
commit30a68c0cd1ce197c75af80402f108aee2f0be2cd (patch)
tree0204fc645b407a38f01e489f5b409a8e7bbf02e8
parentc84ae79fd03841dff9f24b732a07a2cc3aa90ad9 (diff)
Restructure the key include files per recent pghackers discussion: there
are now separate files "postgres.h" and "postgres_fe.h", which are meant to be the primary include files for backend .c files and frontend .c files respectively. By default, only include files meant for frontend use are installed into the installation include directory. There is a new make target 'make install-all-headers' that adds the whole content of the src/include tree to the installed fileset, for use by people who want to develop server-side code without keeping the complete source tree on hand. Cleaned up a whole lot of crufty and inconsistent header inclusions.
-rw-r--r--GNUmakefile.in3
-rw-r--r--Makefile2
-rw-r--r--contrib/cube/cubedata.h2
-rw-r--r--contrib/earthdistance/earthdistance.c9
-rw-r--r--contrib/fulltextindex/fti.c5
-rw-r--r--contrib/intarray/_int.c4
-rw-r--r--contrib/isbn_issn/isbn_issn.c4
-rw-r--r--contrib/lo/lo.c4
-rw-r--r--contrib/pg_dumplo/main.c10
-rw-r--r--contrib/pgbench/pgbench.c5
-rw-r--r--contrib/pgcrypto/encode.c5
-rw-r--r--contrib/pgcrypto/internal.c2
-rw-r--r--contrib/pgcrypto/krb.c6
-rw-r--r--contrib/pgcrypto/md5.c2
-rw-r--r--contrib/pgcrypto/mhash.c3
-rw-r--r--contrib/pgcrypto/openssl.c3
-rw-r--r--contrib/pgcrypto/pgcrypto.c5
-rw-r--r--contrib/pgcrypto/sha1.c2
-rw-r--r--contrib/soundex/soundex.c6
-rw-r--r--contrib/string/string_io.c6
-rw-r--r--doc/src/sgml/installation.sgml17
-rw-r--r--src/GNUmakefile.in3
-rw-r--r--src/Makefile2
-rw-r--r--src/backend/lib/dllist.c15
-rw-r--r--src/backend/libpq/hba.c2
-rw-r--r--src/backend/libpq/pqsignal.c4
-rw-r--r--src/backend/port/dynloader/aix.h1
-rw-r--r--src/backend/port/dynloader/beos.c4
-rw-r--r--src/backend/port/dynloader/bsdi.h1
-rw-r--r--src/backend/port/dynloader/dgux.h1
-rw-r--r--src/backend/port/dynloader/freebsd.c1
-rw-r--r--src/backend/port/dynloader/freebsd.h3
-rw-r--r--src/backend/port/dynloader/hpux.c1
-rw-r--r--src/backend/port/dynloader/irix5.h1
-rw-r--r--src/backend/port/dynloader/linux.h1
-rw-r--r--src/backend/port/dynloader/netbsd.c1
-rw-r--r--src/backend/port/dynloader/netbsd.h3
-rw-r--r--src/backend/port/dynloader/nextstep.h1
-rw-r--r--src/backend/port/dynloader/openbsd.c1
-rw-r--r--src/backend/port/dynloader/openbsd.h3
-rw-r--r--src/backend/port/dynloader/qnx4.c2
-rw-r--r--src/backend/port/dynloader/sco.h1
-rw-r--r--src/backend/port/dynloader/solaris.h2
-rw-r--r--src/backend/port/dynloader/sunos4.h1
-rw-r--r--src/backend/port/dynloader/svr4.h1
-rw-r--r--src/backend/port/dynloader/ultrix4.c5
-rw-r--r--src/backend/port/dynloader/univel.h1
-rw-r--r--src/backend/port/dynloader/unixware.h1
-rw-r--r--src/backend/port/dynloader/win.h1
-rw-r--r--src/backend/port/snprintf.c5
-rw-r--r--src/backend/postmaster/postmaster.c5
-rw-r--r--src/backend/storage/large_object/inv_api.c3
-rw-r--r--src/backend/utils/adt/varchar.c1
-rw-r--r--src/backend/utils/adt/varlena.c5
-rw-r--r--src/backend/utils/fmgr/fmgr.c1
-rw-r--r--src/backend/utils/mb/alt.c2
-rw-r--r--src/backend/utils/mb/big5.c3
-rw-r--r--src/backend/utils/mb/common.c9
-rw-r--r--src/backend/utils/mb/conv.c5
-rw-r--r--src/backend/utils/mb/iso.c2
-rw-r--r--src/backend/utils/mb/liketest.c5
-rw-r--r--src/backend/utils/mb/mbutils.c5
-rw-r--r--src/backend/utils/mb/wchar.c2
-rw-r--r--src/backend/utils/mb/win.c2
-rw-r--r--src/backend/utils/mb/wstrcmp.c2
-rw-r--r--src/backend/utils/mb/wstrncmp.c2
-rw-r--r--src/bin/pg_dump/common.c5
-rw-r--r--src/bin/pg_dump/pg_backup.h7
-rw-r--r--src/bin/pg_dump/pg_backup_archiver.h4
-rw-r--r--src/bin/pg_dump/pg_backup_custom.c3
-rw-r--r--src/bin/pg_dump/pg_backup_db.c21
-rw-r--r--src/bin/pg_dump/pg_backup_files.c5
-rw-r--r--src/bin/pg_dump/pg_backup_null.c5
-rw-r--r--src/bin/pg_dump/pg_backup_tar.c7
-rw-r--r--src/bin/pg_dump/pg_dump.c14
-rw-r--r--src/bin/pg_dump/pg_dump.h3
-rw-r--r--src/bin/pg_dump/pg_restore.c15
-rw-r--r--src/bin/pg_id/pg_id.c2
-rw-r--r--src/bin/pg_passwd/pg_passwd.c3
-rw-r--r--src/bin/psql/command.c3
-rw-r--r--src/bin/psql/common.c4
-rw-r--r--src/bin/psql/common.h2
-rw-r--r--src/bin/psql/copy.c2
-rw-r--r--src/bin/psql/describe.c2
-rw-r--r--src/bin/psql/help.c2
-rw-r--r--src/bin/psql/input.c2
-rw-r--r--src/bin/psql/large_obj.c2
-rw-r--r--src/bin/psql/mainloop.c2
-rw-r--r--src/bin/psql/mainloop.h2
-rw-r--r--src/bin/psql/print.c2
-rw-r--r--src/bin/psql/prompt.c2
-rw-r--r--src/bin/psql/startup.c3
-rw-r--r--src/bin/psql/stringutils.c2
-rw-r--r--src/bin/psql/tab-complete.c2
-rw-r--r--src/bin/psql/tab-complete.h2
-rw-r--r--src/bin/psql/variables.c2
-rw-r--r--src/include/Makefile57
-rw-r--r--src/include/c.h749
-rw-r--r--src/include/executor/spi.h4
-rw-r--r--src/include/libpq/libpq-fs.h75
-rw-r--r--src/include/libpq/pqcomm.h4
-rw-r--r--src/include/mb/pg_wchar.h1
-rw-r--r--src/include/miscadmin.h2
-rw-r--r--src/include/postgres.h603
-rw-r--r--src/include/postgres_ext.h9
-rw-r--r--src/include/postgres_fe.h24
-rw-r--r--src/include/regex/regex.h1
-rw-r--r--src/include/regex/regex2.h4
-rw-r--r--src/include/regex/utils.h10
-rw-r--r--src/include/storage/ipc.h2
-rw-r--r--src/include/utils/dynamic_loader.h6
-rw-r--r--src/include/utils/exc.h2
-rw-r--r--src/include/utils/geo_decls.h1
-rw-r--r--src/include/utils/guc.h2
-rw-r--r--src/include/utils/palloc.h20
-rw-r--r--src/interfaces/ecpg/lib/extern.h2
-rw-r--r--src/interfaces/ecpg/preproc/c_keywords.c3
-rw-r--r--src/interfaces/ecpg/preproc/descriptor.c3
-rw-r--r--src/interfaces/ecpg/preproc/ecpg.c3
-rw-r--r--src/interfaces/ecpg/preproc/ecpg_keywords.c3
-rw-r--r--src/interfaces/ecpg/preproc/extern.h3
-rw-r--r--src/interfaces/ecpg/preproc/keywords.c8
-rw-r--r--src/interfaces/ecpg/preproc/output.c3
-rw-r--r--src/interfaces/ecpg/preproc/pgc.l8
-rw-r--r--src/interfaces/ecpg/preproc/preproc.y78
-rw-r--r--src/interfaces/ecpg/preproc/type.c5
-rw-r--r--src/interfaces/ecpg/preproc/type.h6
-rw-r--r--src/interfaces/ecpg/preproc/variable.c2
-rw-r--r--src/interfaces/libpgtcl/pgtcl.c2
-rw-r--r--src/interfaces/libpgtcl/pgtclCmds.c2
-rw-r--r--src/interfaces/libpgtcl/pgtclId.c2
-rw-r--r--src/interfaces/libpq++/pgconnection.h2
-rw-r--r--src/interfaces/libpq/fe-auth.c5
-rw-r--r--src/interfaces/libpq/fe-connect.c3
-rw-r--r--src/interfaces/libpq/fe-exec.c3
-rw-r--r--src/interfaces/libpq/fe-lobj.c2
-rw-r--r--src/interfaces/libpq/fe-misc.c3
-rw-r--r--src/interfaces/libpq/fe-print.c2
-rw-r--r--src/interfaces/libpq/libpq-int.h1
-rw-r--r--src/interfaces/libpq/pqexpbuffer.c5
-rw-r--r--src/interfaces/libpq/pqsignal.h2
-rw-r--r--src/test/regress/regress.c4
-rw-r--r--src/tutorial/funcs.c2
-rw-r--r--src/tutorial/funcs_new.c2
144 files changed, 957 insertions, 1148 deletions
diff --git a/GNUmakefile.in b/GNUmakefile.in
index 54b6cd7dc6..b62c351635 100644
--- a/GNUmakefile.in
+++ b/GNUmakefile.in
@@ -22,6 +22,9 @@ installdirs uninstall distprep:
$(MAKE) -C doc $@
$(MAKE) -C src $@
+install-all-headers:
+ $(MAKE) -C src $@
+
# clean, distclean, etc should apply to contrib too, even though
# it's not built by default
clean:
diff --git a/Makefile b/Makefile
index d0cdc303e6..9de7cce180 100644
--- a/Makefile
+++ b/Makefile
@@ -11,7 +11,7 @@
# GNUmakefile won't exist yet, so we catch that case as well.
-all check install installdirs installcheck uninstall dep depend clean distclean maintainer-clean:
+all check install installdirs install-all-headers installcheck uninstall dep depend clean distclean maintainer-clean:
@if [ ! -f GNUmakefile ] ; then \
echo "You need to run the 'configure' program first. See the file"; \
echo "'INSTALL' for installation instructions." ; \
diff --git a/contrib/cube/cubedata.h b/contrib/cube/cubedata.h
index 16495e74a5..18bb648546 100644
--- a/contrib/cube/cubedata.h
+++ b/contrib/cube/cubedata.h
@@ -1,5 +1,3 @@
-/*#include "postgres.h"*/
-
typedef struct NDBOX {
unsigned int size; /* required to be a Postgres varlena type */
unsigned int dim;
diff --git a/contrib/earthdistance/earthdistance.c b/contrib/earthdistance/earthdistance.c
index 7f2826a35b..2383256be9 100644
--- a/contrib/earthdistance/earthdistance.c
+++ b/contrib/earthdistance/earthdistance.c
@@ -1,10 +1,9 @@
+#include "postgres.h"
+
#include <math.h>
-#include <stdio.h>
-#include <string.h>
-#include <postgres.h>
-#include <utils/geo_decls.h> /* for Pt */
-#include <utils/palloc.h> /* for palloc */
+#include "utils/geo_decls.h" /* for Pt */
+
/* Earth's radius is in statute miles. */
const int EARTH_RADIUS = 3958.747716;
diff --git a/contrib/fulltextindex/fti.c b/contrib/fulltextindex/fti.c
index 75358958c5..1f9c398fea 100644
--- a/contrib/fulltextindex/fti.c
+++ b/contrib/fulltextindex/fti.c
@@ -1,8 +1,9 @@
#include "postgres.h"
+
+#include <ctype.h>
+
#include "executor/spi.h"
#include "commands/trigger.h"
-#include <ctype.h>
-#include <stdio.h> /* debugging */
/*
* Trigger function takes 2 arguments:
diff --git a/contrib/intarray/_int.c b/contrib/intarray/_int.c
index 6bfe2e1ae4..c81e86237e 100644
--- a/contrib/intarray/_int.c
+++ b/contrib/intarray/_int.c
@@ -4,11 +4,11 @@
format for these routines is dictated by Postgres architecture.
******************************************************************************/
-#include <stdio.h>
+#include "postgres.h"
+
#include <float.h>
#include <string.h>
-#include "postgres.h"
#include "access/gist.h"
#include "access/itup.h"
#include "access/rtree.h"
diff --git a/contrib/isbn_issn/isbn_issn.c b/contrib/isbn_issn/isbn_issn.c
index 8d4eacb46f..ef82eb3c64 100644
--- a/contrib/isbn_issn/isbn_issn.c
+++ b/contrib/isbn_issn/isbn_issn.c
@@ -4,10 +4,8 @@
* $Id$
*/
-#include <stdio.h>
+#include "postgres.h"
-#include <postgres.h>
-#include <utils/palloc.h>
/*
* This is the internal storage format for ISBNs.
diff --git a/contrib/lo/lo.c b/contrib/lo/lo.c
index ab96d80046..15a2de7e10 100644
--- a/contrib/lo/lo.c
+++ b/contrib/lo/lo.c
@@ -7,10 +7,6 @@
#include "postgres.h"
-#include <stdio.h>
-
-#include "utils/palloc.h"
-
/* Required for largeobjects */
#include "libpq/libpq-fs.h"
#include "libpq/be-fsstubs.h"
diff --git a/contrib/pg_dumplo/main.c b/contrib/pg_dumplo/main.c
index c92195a60e..bcd54f5de8 100644
--- a/contrib/pg_dumplo/main.c
+++ b/contrib/pg_dumplo/main.c
@@ -7,17 +7,17 @@
* -------------------------------------------------------------------------
*/
+/* We import postgres_fe.h mostly to get the HAVE_GETOPT_LONG configure result. */
+#ifndef OUT_OF_PG
+#include "postgres_fe.h"
+#endif
+
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
-/* We import postgres.h mostly to get the HAVE_GETOPT_LONG configure result. */
-#ifndef OUT_OF_PG
-#include "postgres.h"
-#endif
-
#include <libpq-fe.h>
#include <libpq/libpq-fs.h>
diff --git a/contrib/pgbench/pgbench.c b/contrib/pgbench/pgbench.c
index 3ac5f63046..862c156864 100644
--- a/contrib/pgbench/pgbench.c
+++ b/contrib/pgbench/pgbench.c
@@ -17,11 +17,8 @@
* suitability of this software for any purpose. It is provided "as
* is" without express or implied warranty.
*/
+#include "postgres_fe.h"
-#include "config.h"
-
-#include <stdio.h>
-#include "postgres.h"
#include "libpq-fe.h"
#include <errno.h>
diff --git a/contrib/pgcrypto/encode.c b/contrib/pgcrypto/encode.c
index 02b3b54e01..db0a1c0fa9 100644
--- a/contrib/pgcrypto/encode.c
+++ b/contrib/pgcrypto/encode.c
@@ -29,8 +29,9 @@
* $Id$
*/
-#include <postgres.h>
-#include <fmgr.h>
+#include "postgres.h"
+
+#include "fmgr.h"
#include "encode.h"
diff --git a/contrib/pgcrypto/internal.c b/contrib/pgcrypto/internal.c
index 7894086e7b..13af51a088 100644
--- a/contrib/pgcrypto/internal.c
+++ b/contrib/pgcrypto/internal.c
@@ -29,7 +29,7 @@
* $Id$
*/
-#include <postgres.h>
+#include "postgres.h"
#include "pgcrypto.h"
diff --git a/contrib/pgcrypto/krb.c b/contrib/pgcrypto/krb.c
index 7880a5c5e9..641d31ee3d 100644
--- a/contrib/pgcrypto/krb.c
+++ b/contrib/pgcrypto/krb.c
@@ -34,12 +34,12 @@
* $Id$
*/
-#include <postgres.h>
+#include "postgres.h"
#include "pgcrypto.h"
-#include <md5.h>
-#include <sha.h>
+#include "md5.h"
+#include "sha.h"
#ifndef MD5_DIGEST_LENGTH
#define MD5_DIGEST_LENGTH 16
diff --git a/contrib/pgcrypto/md5.c b/contrib/pgcrypto/md5.c
index 1f8a0ff1a4..1e6c0feab3 100644
--- a/contrib/pgcrypto/md5.c
+++ b/contrib/pgcrypto/md5.c
@@ -30,7 +30,7 @@
* SUCH DAMAGE.
*/
-#include <postgres.h>
+#include "postgres.h"
#include "md5.h"
diff --git a/contrib/pgcrypto/mhash.c b/contrib/pgcrypto/mhash.c
index 8b866cd7e6..8f2bfc783e 100644
--- a/contrib/pgcrypto/mhash.c
+++ b/contrib/pgcrypto/mhash.c
@@ -29,7 +29,8 @@
* $Id$
*/
-#include <postgres.h>
+#include "postgres.h"
+
#include "pgcrypto.h"
#include <mhash.h>
diff --git a/contrib/pgcrypto/openssl.c b/contrib/pgcrypto/openssl.c
index f3ff775788..ccfeb0ad30 100644
--- a/contrib/pgcrypto/openssl.c
+++ b/contrib/pgcrypto/openssl.c
@@ -29,7 +29,8 @@
* $Id$
*/
-#include <postgres.h>
+#include "postgres.h"
+
#include "pgcrypto.h"
#include <evp.h>
diff --git a/contrib/pgcrypto/pgcrypto.c b/contrib/pgcrypto/pgcrypto.c
index 0773232c76..65b92f2091 100644
--- a/contrib/pgcrypto/pgcrypto.c
+++ b/contrib/pgcrypto/pgcrypto.c
@@ -29,8 +29,9 @@
* $Id$
*/
-#include <postgres.h>
-#include <utils/builtins.h>
+#include "postgres.h"
+
+#include "utils/builtins.h"
#include "pgcrypto.h"
diff --git a/contrib/pgcrypto/sha1.c b/contrib/pgcrypto/sha1.c
index 7f75b50559..a8cf2aa937 100644
--- a/contrib/pgcrypto/sha1.c
+++ b/contrib/pgcrypto/sha1.c
@@ -35,7 +35,7 @@
* implemented by Jun-ichiro itojun Itoh <[email protected]>
*/
-#include <postgres.h>
+#include "postgres.h"
#include "sha1.h"
diff --git a/contrib/soundex/soundex.c b/contrib/soundex/soundex.c
index 4534a37eca..942b9a015e 100644
--- a/contrib/soundex/soundex.c
+++ b/contrib/soundex/soundex.c
@@ -1,10 +1,10 @@
/* $Header$ */
#include "postgres.h"
+
+#include <ctype.h>
+
#include "fmgr.h"
#include "utils/builtins.h"
-#include <ctype.h>
-#include <string.h>
-#include <stdio.h>
Datum text_soundex(PG_FUNCTION_ARGS);
diff --git a/contrib/string/string_io.c b/contrib/string/string_io.c
index 8c4e5b45e1..840782dd51 100644
--- a/contrib/string/string_io.c
+++ b/contrib/string/string_io.c
@@ -9,12 +9,10 @@
* either version 2, or (at your option) any later version.
*/
+#include "postgres.h"
+
#include <ctype.h>
-#include <string.h>
-#include "postgres.h"
-#include "utils/elog.h"
-#include "utils/palloc.h"
#include "utils/builtins.h"
#include "string_io.h"
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index f305c5fa3c..883baf4225 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -783,11 +783,26 @@ All of PostgreSQL is successfully made. Ready to install.
them, but how to do that is left as an exercise.
</para>
+ <para>
+ The standard install installs only the header files needed for client
+ application development. If you plan to do any server-side program
+ development (such as custom functions or datatypes written in C),
+ then you may want to install the entire <productname>PostgreSQL</>
+ include tree into your target include directory. To do that, enter
+<screen>
+<userinput>gmake install-all-headers</userinput>
+</screen>
+ This adds a megabyte or two to the install footprint, and is only
+ useful if you don't plan to keep the whole source tree around for
+ reference. (If you do, you can just use the source's include
+ directory when building server-side software.)
+ </para>
+
<formalpara>
<title>Client-only installation</title>
<para>
If you want to install only the client applications and
- interfaces, then you can use these commands:
+ interface libraries, then you can use these commands:
<screen>
<userinput>gmake -C src/bin install</>
<userinput>gmake -C src/interfaces install</>
diff --git a/src/GNUmakefile.in b/src/GNUmakefile.in
index 61c153b71c..ce5c23b946 100644
--- a/src/GNUmakefile.in
+++ b/src/GNUmakefile.in
@@ -20,6 +20,9 @@ all install installdirs uninstall dep depend distprep:
$(MAKE) -C bin $@
$(MAKE) -C pl $@
+install-all-headers:
+ $(MAKE) -C include $@
+
clean:
$(MAKE) -C backend $@
$(MAKE) -C include $@
diff --git a/src/Makefile b/src/Makefile
index d0cdc303e6..9de7cce180 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -11,7 +11,7 @@
# GNUmakefile won't exist yet, so we catch that case as well.
-all check install installdirs installcheck uninstall dep depend clean distclean maintainer-clean:
+all check install installdirs install-all-headers installcheck uninstall dep depend clean distclean maintainer-clean:
@if [ ! -f GNUmakefile ] ; then \
echo "You need to run the 'configure' program first. See the file"; \
echo "'INSTALL' for installation instructions." ; \
diff --git a/src/backend/lib/dllist.c b/src/backend/lib/dllist.c
index a5a3b40418..4c3a7baa74 100644
--- a/src/backend/lib/dllist.c
+++ b/src/backend/lib/dllist.c
@@ -14,18 +14,17 @@
*-------------------------------------------------------------------------
*/
-#include "postgres.h"
-#include "lib/dllist.h"
-
-/* When this file is compiled for inclusion in libpq,
- * it can't use assert checking. Probably this fix ought to be
- * in c.h or somewhere like that...
- */
+/* can be used in frontend or backend */
#ifdef FRONTEND
-#undef Assert
+#include "postgres_fe.h"
+/* No assert checks in frontend ... */
#define Assert(condition)
+#else
+#include "postgres.h"
#endif
+#include "lib/dllist.h"
+
Dllist *
DLNewList(void)
diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c
index 9d206b3940..978b98f32a 100644
--- a/src/backend/libpq/hba.c
+++ b/src/backend/libpq/hba.c
@@ -882,7 +882,7 @@ struct CharsetItem
char Table[MAX_TOKEN];
};
-int
+static bool
InRange(char *buf, int host)
{
int valid,
diff --git a/src/backend/libpq/pqsignal.c b/src/backend/libpq/pqsignal.c
index fb28782df3..1ed1b2b39c 100644
--- a/src/backend/libpq/pqsignal.c
+++ b/src/backend/libpq/pqsignal.c
@@ -38,10 +38,10 @@
* is to do signal-handler reinstallation, which doesn't work well
* at all.
* ------------------------------------------------------------------------*/
-#include <signal.h>
-
#include "postgres.h"
+#include <signal.h>
+
#include "libpq/pqsignal.h"
diff --git a/src/backend/port/dynloader/aix.h b/src/backend/port/dynloader/aix.h
index 031045c475..556c8cc78c 100644
--- a/src/backend/port/dynloader/aix.h
+++ b/src/backend/port/dynloader/aix.h
@@ -56,7 +56,6 @@ extern "C"
#endif /* HAVE_DLOPEN */
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
#define pg_dlopen(f) dlopen(f, RTLD_LAZY)
diff --git a/src/backend/port/dynloader/beos.c b/src/backend/port/dynloader/beos.c
index 36016e23bf..872ae51ea7 100644
--- a/src/backend/port/dynloader/beos.c
+++ b/src/backend/port/dynloader/beos.c
@@ -14,8 +14,8 @@
*/
#include "postgres.h"
+
#include "utils/dynamic_loader.h"
-#include "utils/elog.h"
void *
@@ -74,4 +74,4 @@ pg_dlclose(void *handle)
elog(NOTICE, "error while unloading add-on");
free(handle);
}
-} \ No newline at end of file
+}
diff --git a/src/backend/port/dynloader/bsdi.h b/src/backend/port/dynloader/bsdi.h
index a7925a23e7..56f3443665 100644
--- a/src/backend/port/dynloader/bsdi.h
+++ b/src/backend/port/dynloader/bsdi.h
@@ -14,7 +14,6 @@
#ifndef PORT_PROTOS_H
#define PORT_PROTOS_H
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
/* dynloader.c */
diff --git a/src/backend/port/dynloader/dgux.h b/src/backend/port/dynloader/dgux.h
index 48f4b3547b..c2be1f3444 100644
--- a/src/backend/port/dynloader/dgux.h
+++ b/src/backend/port/dynloader/dgux.h
@@ -13,7 +13,6 @@
#define PORT_PROTOS_H
#include <dlfcn.h>
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
/*
diff --git a/src/backend/port/dynloader/freebsd.c b/src/backend/port/dynloader/freebsd.c
index d21e27a6c1..5824b8e4b0 100644
--- a/src/backend/port/dynloader/freebsd.c
+++ b/src/backend/port/dynloader/freebsd.c
@@ -45,6 +45,7 @@ static char sccsid[] = "@(#)dl.c 5.4 (Berkeley) 2/23/91";
#include <stdio.h>
#include <stdlib.h>
+#include "postgres.h"
#include "dynloader.h"
static char error_message[BUFSIZ];
diff --git a/src/backend/port/dynloader/freebsd.h b/src/backend/port/dynloader/freebsd.h
index 81831b445f..8848532fd9 100644
--- a/src/backend/port/dynloader/freebsd.h
+++ b/src/backend/port/dynloader/freebsd.h
@@ -18,9 +18,6 @@
#include <nlist.h>
#include <link.h>
-#include "postgres.h"
-
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
/* dynloader.c */
diff --git a/src/backend/port/dynloader/hpux.c b/src/backend/port/dynloader/hpux.c
index e34a5fc9c2..d337b3b3a0 100644
--- a/src/backend/port/dynloader/hpux.c
+++ b/src/backend/port/dynloader/hpux.c
@@ -23,7 +23,6 @@
#include "dl.h"
#include "dynloader.h"
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
void *
diff --git a/src/backend/port/dynloader/irix5.h b/src/backend/port/dynloader/irix5.h
index 5a66240066..355ce1b87d 100644
--- a/src/backend/port/dynloader/irix5.h
+++ b/src/backend/port/dynloader/irix5.h
@@ -15,7 +15,6 @@
#define PORT_PROTOS_H
#include <dlfcn.h>
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
/* dynloader.c */
diff --git a/src/backend/port/dynloader/linux.h b/src/backend/port/dynloader/linux.h
index bc73b95922..eb8a76ca6e 100644
--- a/src/backend/port/dynloader/linux.h
+++ b/src/backend/port/dynloader/linux.h
@@ -14,7 +14,6 @@
#ifndef PORT_PROTOS_H
#define PORT_PROTOS_H
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
#ifdef __ELF__
#include <dlfcn.h>
diff --git a/src/backend/port/dynloader/netbsd.c b/src/backend/port/dynloader/netbsd.c
index adcc555b2f..d98c71675e 100644
--- a/src/backend/port/dynloader/netbsd.c
+++ b/src/backend/port/dynloader/netbsd.c
@@ -45,6 +45,7 @@ static char sccsid[] = "@(#)dl.c 5.4 (Berkeley) 2/23/91";
#include <stdio.h>
#include <stdlib.h>
+#include "postgres.h"
#include "dynloader.h"
static char error_message[BUFSIZ];
diff --git a/src/backend/port/dynloader/netbsd.h b/src/backend/port/dynloader/netbsd.h
index a08c4ead89..49c05d687d 100644
--- a/src/backend/port/dynloader/netbsd.h
+++ b/src/backend/port/dynloader/netbsd.h
@@ -18,9 +18,6 @@
#include <nlist.h>
#include "link.h"
-#include "postgres.h"
-
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
/* dynloader.c */
diff --git a/src/backend/port/dynloader/nextstep.h b/src/backend/port/dynloader/nextstep.h
index dfbbdfaef9..d86c2c5cea 100644
--- a/src/backend/port/dynloader/nextstep.h
+++ b/src/backend/port/dynloader/nextstep.h
@@ -9,7 +9,6 @@
#ifndef PORT_PROTOS_H
#define PORT_PROTOS_H
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
void *next_dlopen(char *name);
diff --git a/src/backend/port/dynloader/openbsd.c b/src/backend/port/dynloader/openbsd.c
index adcc555b2f..d98c71675e 100644
--- a/src/backend/port/dynloader/openbsd.c
+++ b/src/backend/port/dynloader/openbsd.c
@@ -45,6 +45,7 @@ static char sccsid[] = "@(#)dl.c 5.4 (Berkeley) 2/23/91";
#include <stdio.h>
#include <stdlib.h>
+#include "postgres.h"
#include "dynloader.h"
static char error_message[BUFSIZ];
diff --git a/src/backend/port/dynloader/openbsd.h b/src/backend/port/dynloader/openbsd.h
index a08c4ead89..49c05d687d 100644
--- a/src/backend/port/dynloader/openbsd.h
+++ b/src/backend/port/dynloader/openbsd.h
@@ -18,9 +18,6 @@
#include <nlist.h>
#include "link.h"
-#include "postgres.h"
-
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
/* dynloader.c */
diff --git a/src/backend/port/dynloader/qnx4.c b/src/backend/port/dynloader/qnx4.c
index e8f61b02ce..76b932cc5f 100644
--- a/src/backend/port/dynloader/qnx4.c
+++ b/src/backend/port/dynloader/qnx4.c
@@ -20,7 +20,7 @@
#include <dl.h>
*/
#include "postgres.h"
-#include "fmgr.h"
+
#include "utils/dynamic_loader.h"
#include "dynloader.h"
diff --git a/src/backend/port/dynloader/sco.h b/src/backend/port/dynloader/sco.h
index eee860c8e9..c4326d09b1 100644
--- a/src/backend/port/dynloader/sco.h
+++ b/src/backend/port/dynloader/sco.h
@@ -15,7 +15,6 @@
#define PORT_PROTOS_H
#include <dlfcn.h>
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
/* dynloader.c */
diff --git a/src/backend/port/dynloader/solaris.h b/src/backend/port/dynloader/solaris.h
index a6e4b5d54c..c2e9fb6343 100644
--- a/src/backend/port/dynloader/solaris.h
+++ b/src/backend/port/dynloader/solaris.h
@@ -3,9 +3,7 @@
#ifndef DYNLOADER_SOLARIS_H
#define DYNLOADER_SOLARIS_H
-#include "config.h"
#include <dlfcn.h>
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
#define pg_dlopen(f) dlopen(f,1)
diff --git a/src/backend/port/dynloader/sunos4.h b/src/backend/port/dynloader/sunos4.h
index e26a905074..a13ee4dac6 100644
--- a/src/backend/port/dynloader/sunos4.h
+++ b/src/backend/port/dynloader/sunos4.h
@@ -15,7 +15,6 @@
#define PORT_PROTOS_H
#include <dlfcn.h>
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
/* dynloader.c */
diff --git a/src/backend/port/dynloader/svr4.h b/src/backend/port/dynloader/svr4.h
index 23ef44685d..c871fa3461 100644
--- a/src/backend/port/dynloader/svr4.h
+++ b/src/backend/port/dynloader/svr4.h
@@ -15,7 +15,6 @@
#define DYNLOADER_H
#include <dlfcn.h>
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
/* dynloader.h */
diff --git a/src/backend/port/dynloader/ultrix4.c b/src/backend/port/dynloader/ultrix4.c
index 0e63ea8589..3d9f25ca28 100644
--- a/src/backend/port/dynloader/ultrix4.c
+++ b/src/backend/port/dynloader/ultrix4.c
@@ -2,8 +2,6 @@
*
* dynloader.c
* This dynamic loader uses Andrew Yu's libdl-1.0 package for Ultrix 4.x.
- * (Note that pg_dlsym and pg_dlclose are actually macros defined in
- * "port-protos.h".)
*
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
@@ -15,9 +13,8 @@
*-------------------------------------------------------------------------
*/
#include "postgres.h"
+
#include "dl.h"
-#include "fmgr.h"
-#include "port-protos.h"
#include "utils/dynamic_loader.h"
extern char pg_pathname[];
diff --git a/src/backend/port/dynloader/univel.h b/src/backend/port/dynloader/univel.h
index e236fa253f..d490e25e6b 100644
--- a/src/backend/port/dynloader/univel.h
+++ b/src/backend/port/dynloader/univel.h
@@ -15,7 +15,6 @@
#define PORT_PROTOS_H
#include <dlfcn.h>
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
/* dynloader.c */
diff --git a/src/backend/port/dynloader/unixware.h b/src/backend/port/dynloader/unixware.h
index 84eaeaf316..d52842cede 100644
--- a/src/backend/port/dynloader/unixware.h
+++ b/src/backend/port/dynloader/unixware.h
@@ -15,7 +15,6 @@
#define PORT_PROTOS_H
#include <dlfcn.h>
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
/* dynloader.c */
diff --git a/src/backend/port/dynloader/win.h b/src/backend/port/dynloader/win.h
index 434beeff86..5cabfab3fa 100644
--- a/src/backend/port/dynloader/win.h
+++ b/src/backend/port/dynloader/win.h
@@ -15,7 +15,6 @@
#define PORT_PROTOS_H
#include <dlfcn.h>
-#include "fmgr.h"
#include "utils/dynamic_loader.h"
/* dynloader.c */
diff --git a/src/backend/port/snprintf.c b/src/backend/port/snprintf.c
index 566bc18e20..65cf0a6c4f 100644
--- a/src/backend/port/snprintf.c
+++ b/src/backend/port/snprintf.c
@@ -32,11 +32,12 @@
* SUCH DAMAGE.
*/
+/* might be in either frontend or backend */
+#include "postgres_fe.h"
+
#include <sys/ioctl.h>
#include <sys/param.h>
-#include "postgres.h"
-
/*
* We do all internal arithmetic in the widest available integer type,
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index f8ad72d277..4565f710c3 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -235,11 +235,6 @@ static void InitSSL(void);
#endif
-#ifdef CYR_RECODE
-extern void GetCharSetByHost(char *, int, char *);
-
-#endif
-
static void
checkDataDir(const char *checkdir)
diff --git a/src/backend/storage/large_object/inv_api.c b/src/backend/storage/large_object/inv_api.c
index 01c650f2ec..202bb40033 100644
--- a/src/backend/storage/large_object/inv_api.c
+++ b/src/backend/storage/large_object/inv_api.c
@@ -22,8 +22,9 @@
#include "access/genam.h"
#include "access/heapam.h"
-#include "access/nbtree.h"
#include "access/htup.h"
+#include "access/nbtree.h"
+#include "access/tuptoaster.h"
#include "catalog/catalog.h"
#include "catalog/catname.h"
#include "catalog/heap.h"
diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c
index 8862082f0f..7cccf72d09 100644
--- a/src/backend/utils/adt/varchar.c
+++ b/src/backend/utils/adt/varchar.c
@@ -17,6 +17,7 @@
#include "access/hash.h"
#include "catalog/pg_type.h"
+#include "miscadmin.h"
#include "utils/acl.h"
#include "utils/builtins.h"
#include "utils/fmgroids.h"
diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c
index 40c3c75089..f1759c6315 100644
--- a/src/backend/utils/adt/varlena.c
+++ b/src/backend/utils/adt/varlena.c
@@ -12,11 +12,12 @@
*
*-------------------------------------------------------------------------
*/
-#include <ctype.h>
-
#include "postgres.h"
+#include <ctype.h>
+
#include "mb/pg_wchar.h"
+#include "miscadmin.h"
#include "utils/builtins.h"
static int text_cmp(text *arg1, text *arg2);
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c
index 1de343b0e4..38915ef7a1 100644
--- a/src/backend/utils/fmgr/fmgr.c
+++ b/src/backend/utils/fmgr/fmgr.c
@@ -15,6 +15,7 @@
#include "postgres.h"
+#include "access/tuptoaster.h"
#include "catalog/pg_language.h"
#include "catalog/pg_proc.h"
#include "executor/functions.h"
diff --git a/src/backend/utils/mb/alt.c b/src/backend/utils/mb/alt.c
index 647905d0d2..bd479b0158 100644
--- a/src/backend/utils/mb/alt.c
+++ b/src/backend/utils/mb/alt.c
@@ -8,6 +8,8 @@
*/
#include <stdio.h>
+
+
main()
{
int i;
diff --git a/src/backend/utils/mb/big5.c b/src/backend/utils/mb/big5.c
index 01207c3433..f7942da352 100644
--- a/src/backend/utils/mb/big5.c
+++ b/src/backend/utils/mb/big5.c
@@ -10,6 +10,9 @@
* $Id$
*/
+/* can be used in either frontend or backend */
+#include "postgres_fe.h"
+
#include "mb/pg_wchar.h"
typedef struct
diff --git a/src/backend/utils/mb/common.c b/src/backend/utils/mb/common.c
index 3f5d200197..368c061465 100644
--- a/src/backend/utils/mb/common.c
+++ b/src/backend/utils/mb/common.c
@@ -2,10 +2,9 @@
* This file contains some public functions
* usable for both the backend and the frontend.
* Tatsuo Ishii
- * $Id$ */
-
-#include <stdlib.h>
-#include <string.h>
+ * $Id$
+ */
+#include "postgres.h"
#ifdef WIN32
#include "win32.h"
@@ -13,8 +12,6 @@
#include <unistd.h>
#endif
-#include "postgres.h"
-
#include "miscadmin.h"
#include "mb/pg_wchar.h"
#include "utils/builtins.h"
diff --git a/src/backend/utils/mb/conv.c b/src/backend/utils/mb/conv.c
index 3bd18313a5..0d455a2223 100644
--- a/src/backend/utils/mb/conv.c
+++ b/src/backend/utils/mb/conv.c
@@ -10,9 +10,8 @@
*
*
*/
-
-#include <stdio.h>
-#include <string.h>
+/* can be used in either frontend or backend */
+#include "postgres_fe.h"
#include "mb/pg_wchar.h"
diff --git a/src/backend/utils/mb/iso.c b/src/backend/utils/mb/iso.c
index 64fb24a3ab..723c3cfa24 100644
--- a/src/backend/utils/mb/iso.c
+++ b/src/backend/utils/mb/iso.c
@@ -8,6 +8,8 @@
*/
#include <stdio.h>
+
+
main()
{
int i;
diff --git a/src/backend/utils/mb/liketest.c b/src/backend/utils/mb/liketest.c
index 916166104e..3c2e9de750 100644
--- a/src/backend/utils/mb/liketest.c
+++ b/src/backend/utils/mb/liketest.c
@@ -1,5 +1,6 @@
-#include <stdio.h>
-#include <string.h>
+#include "postgres_fe.h"
+
+#include <ctype.h>
#include "mb/pg_wchar.h"
diff --git a/src/backend/utils/mb/mbutils.c b/src/backend/utils/mb/mbutils.c
index c50c9e786d..842bfd9086 100644
--- a/src/backend/utils/mb/mbutils.c
+++ b/src/backend/utils/mb/mbutils.c
@@ -3,9 +3,8 @@
* client encoding and server internal encoding.
* (currently mule internal code (mic) is used)
* Tatsuo Ishii
- * $Id$ */
-
-
+ * $Id$
+ */
#include "postgres.h"
#include "miscadmin.h"
diff --git a/src/backend/utils/mb/wchar.c b/src/backend/utils/mb/wchar.c
index afde5414d0..c39908e552 100644
--- a/src/backend/utils/mb/wchar.c
+++ b/src/backend/utils/mb/wchar.c
@@ -6,6 +6,8 @@
* WIN1250 client encoding updated by Pavel Behal
*
*/
+/* can be used in either frontend or backend */
+#include "postgres_fe.h"
#include "mb/pg_wchar.h"
diff --git a/src/backend/utils/mb/win.c b/src/backend/utils/mb/win.c
index 5def4ffa90..90f4d3a39f 100644
--- a/src/backend/utils/mb/win.c
+++ b/src/backend/utils/mb/win.c
@@ -8,6 +8,8 @@
*/
#include <stdio.h>
+
+
main()
{
int i;
diff --git a/src/backend/utils/mb/wstrcmp.c b/src/backend/utils/mb/wstrcmp.c
index 4b6a16b7d1..13255d7c5e 100644
--- a/src/backend/utils/mb/wstrcmp.c
+++ b/src/backend/utils/mb/wstrcmp.c
@@ -33,6 +33,8 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
+/* can be used in either frontend or backend */
+#include "postgres_fe.h"
#include "mb/pg_wchar.h"
diff --git a/src/backend/utils/mb/wstrncmp.c b/src/backend/utils/mb/wstrncmp.c
index 050a46191b..6464147897 100644
--- a/src/backend/utils/mb/wstrncmp.c
+++ b/src/backend/utils/mb/wstrncmp.c
@@ -32,6 +32,8 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
+/* can be used in either frontend or backend */
+#include "postgres_fe.h"
#include "mb/pg_wchar.h"
diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c
index e769061d37..8d3a8a00f9 100644
--- a/src/bin/pg_dump/common.c
+++ b/src/bin/pg_dump/common.c
@@ -27,18 +27,15 @@
*-------------------------------------------------------------------------
*/
+#include "pg_dump.h"
#include <ctype.h>
-#include "postgres.h"
-
#include "libpq-fe.h"
#ifndef HAVE_STRDUP
#include "strdup.h"
#endif
-#include "pg_dump.h"
-
static char **findParentsByOid(TableInfo *tbinfo, int numTables,
InhInfo *inhinfo, int numInherits,
const char *oid,
diff --git a/src/bin/pg_dump/pg_backup.h b/src/bin/pg_dump/pg_backup.h
index 8fceb26c8e..ae04c7c2ea 100644
--- a/src/bin/pg_dump/pg_backup.h
+++ b/src/bin/pg_dump/pg_backup.h
@@ -40,13 +40,10 @@
*/
#ifndef PG_BACKUP__
-
-#include "config.h"
-#include "c.h"
-
#define PG_BACKUP__
-#include "postgres.h"
+#include "postgres_fe.h"
+
#include "libpq-fe.h"
typedef enum _archiveFormat {
diff --git a/src/bin/pg_dump/pg_backup_archiver.h b/src/bin/pg_dump/pg_backup_archiver.h
index e7f18d1bbf..634c10888b 100644
--- a/src/bin/pg_dump/pg_backup_archiver.h
+++ b/src/bin/pg_dump/pg_backup_archiver.h
@@ -31,10 +31,10 @@
#ifndef __PG_BACKUP_ARCHIVE__
#define __PG_BACKUP_ARCHIVE__
-#include <stdio.h>
+#include "postgres_fe.h"
+
#include <time.h>
-#include "postgres.h"
#include "pqexpbuffer.h"
#ifdef HAVE_LIBZ
diff --git a/src/bin/pg_dump/pg_backup_custom.c b/src/bin/pg_dump/pg_backup_custom.c
index 6256257781..94c598c51b 100644
--- a/src/bin/pg_dump/pg_backup_custom.c
+++ b/src/bin/pg_dump/pg_backup_custom.c
@@ -31,9 +31,10 @@
*-------------------------------------------------------------------------
*/
-#include <stdlib.h>
#include "pg_backup.h"
#include "pg_backup_archiver.h"
+
+#include <stdlib.h>
#include <errno.h>
/*--------
diff --git a/src/bin/pg_dump/pg_backup_db.c b/src/bin/pg_dump/pg_backup_db.c
index 763d94fa80..a3de94df81 100644
--- a/src/bin/pg_dump/pg_backup_db.c
+++ b/src/bin/pg_dump/pg_backup_db.c
@@ -13,33 +13,24 @@
*-------------------------------------------------------------------------
*/
+#include "pg_dump.h"
+#include "pg_backup.h"
+#include "pg_backup_archiver.h"
+#include "pg_backup_db.h"
+
#include <unistd.h> /* for getopt() */
#include <ctype.h>
-#include "postgres.h"
-
#ifdef HAVE_TERMIOS_H
#include <termios.h>
#endif
-#include "access/attnum.h"
-#include "access/htup.h"
-#include "catalog/pg_index.h"
-#include "catalog/pg_language.h"
-#include "catalog/pg_trigger.h"
-#include "catalog/pg_type.h"
-
#include "libpq-fe.h"
-#include <libpq/libpq-fs.h>
+#include "libpq/libpq-fs.h"
#ifndef HAVE_STRDUP
#include "strdup.h"
#endif
-#include "pg_dump.h"
-#include "pg_backup.h"
-#include "pg_backup_archiver.h"
-#include "pg_backup_db.h"
-
static const char *progname = "Archiver(db)";
static void _prompt_for_password(char *username, char *password);
diff --git a/src/bin/pg_dump/pg_backup_files.c b/src/bin/pg_dump/pg_backup_files.c
index 22c5d17dc4..632004ead4 100644
--- a/src/bin/pg_dump/pg_backup_files.c
+++ b/src/bin/pg_dump/pg_backup_files.c
@@ -32,11 +32,12 @@
*-------------------------------------------------------------------------
*/
-#include <stdlib.h>
-#include <string.h>
#include "pg_backup.h"
#include "pg_backup_archiver.h"
+#include <stdlib.h>
+#include <string.h>
+
static void _ArchiveEntry(ArchiveHandle* AH, TocEntry* te);
static void _StartData(ArchiveHandle* AH, TocEntry* te);
static int _WriteData(ArchiveHandle* AH, const void* data, int dLen);
diff --git a/src/bin/pg_dump/pg_backup_null.c b/src/bin/pg_dump/pg_backup_null.c
index 26c30bd8ec..761d2ea446 100644
--- a/src/bin/pg_dump/pg_backup_null.c
+++ b/src/bin/pg_dump/pg_backup_null.c
@@ -30,11 +30,12 @@
*-------------------------------------------------------------------------
*/
+#include "pg_backup.h"
+#include "pg_backup_archiver.h"
+
#include <stdlib.h>
#include <string.h>
#include <unistd.h> /* for dup */
-#include "pg_backup.h"
-#include "pg_backup_archiver.h"
static int _WriteData(ArchiveHandle* AH, const void* data, int dLen);
static void _EndData(ArchiveHandle* AH, TocEntry* te);
diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c
index d9adffb173..40d90ac865 100644
--- a/src/bin/pg_dump/pg_backup_tar.c
+++ b/src/bin/pg_dump/pg_backup_tar.c
@@ -28,13 +28,14 @@
*-------------------------------------------------------------------------
*/
+#include "pg_backup.h"
+#include "pg_backup_archiver.h"
+#include "pg_backup_tar.h"
+
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
-#include "pg_backup.h"
-#include "pg_backup_archiver.h"
-#include "pg_backup_tar.h"
static void _ArchiveEntry(ArchiveHandle* AH, TocEntry* te);
static void _StartData(ArchiveHandle* AH, TocEntry* te);
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 39bc9de8e1..8bd7686de7 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -104,13 +104,18 @@
*-------------------------------------------------------------------------
*/
+/*
+ * Although this is not a backend module, we must include postgres.h anyway
+ * so that we can include a bunch of backend include files. pg_dump has
+ * never pretended to be very independent of the backend anyhow ...
+ */
+#include "postgres.h"
+
#include <unistd.h> /* for getopt() */
#include <ctype.h>
#include "pg_backup.h"
-#include "postgres.h"
-
#ifdef HAVE_GETOPT_H
#include <getopt.h>
#endif
@@ -120,13 +125,12 @@
#include "access/attnum.h"
#include "access/htup.h"
-#include "catalog/pg_index.h"
-#include "catalog/pg_language.h"
+#include "catalog/pg_class.h"
#include "catalog/pg_trigger.h"
#include "catalog/pg_type.h"
#include "libpq-fe.h"
-#include <libpq/libpq-fs.h>
+#include "libpq/libpq-fs.h"
#ifndef HAVE_STRDUP
#include "strdup.h"
#endif
diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h
index 5cf934ddb8..cd56bbbced 100644
--- a/src/bin/pg_dump/pg_dump.h
+++ b/src/bin/pg_dump/pg_dump.h
@@ -29,9 +29,8 @@
#ifndef PG_DUMP_H
#define PG_DUMP_H
-#include "pqexpbuffer.h"
-#include "catalog/pg_index.h"
#include "pg_backup.h"
+#include "pqexpbuffer.h"
/* The data structures used to store system catalog information */
diff --git a/src/bin/pg_dump/pg_restore.c b/src/bin/pg_dump/pg_restore.c
index 7d701c90fa..851688ef1e 100644
--- a/src/bin/pg_dump/pg_restore.c
+++ b/src/bin/pg_dump/pg_restore.c
@@ -50,24 +50,13 @@
*-------------------------------------------------------------------------
*/
+#include "pg_backup.h"
+
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
-
-/*
-#include "postgres.h"
-#include "access/htup.h"
-#include "catalog/pg_type.h"
-#include "catalog/pg_language.h"
-#include "catalog/pg_index.h"
-#include "catalog/pg_trigger.h"
-#include "libpq-fe.h"
-*/
-
-#include "pg_backup.h"
-
#ifndef HAVE_STRDUP
#include "strdup.h"
#endif
diff --git a/src/bin/pg_id/pg_id.c b/src/bin/pg_id/pg_id.c
index fe9d8dc666..7cd1c65558 100644
--- a/src/bin/pg_id/pg_id.c
+++ b/src/bin/pg_id/pg_id.c
@@ -8,7 +8,7 @@
*
* $Header$
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#ifdef HAVE_GETOPT_H
#include <getopt.h>
diff --git a/src/bin/pg_passwd/pg_passwd.c b/src/bin/pg_passwd/pg_passwd.c
index 0f7a0adf16..022a394670 100644
--- a/src/bin/pg_passwd/pg_passwd.c
+++ b/src/bin/pg_passwd/pg_passwd.c
@@ -1,7 +1,8 @@
/*
* @(#) pg_passwd.c 1.8 09:13:16 97/07/02 Y. Ichikawa
*/
-#include "postgres.h"
+#include "postgres_fe.h"
+
#include <unistd.h>
#include <errno.h>
#include <time.h>
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index 68bc2399df..202a9849f7 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -5,7 +5,7 @@
*
* $Header$
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include "command.h"
#include <errno.h>
@@ -37,7 +37,6 @@
#include "variables.h"
#ifdef MULTIBYTE
-#include "miscadmin.h"
#include "mb/pg_wchar.h"
#else
/* Grand unified hard-coded badness */
diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index def3aa7398..d64df4434c 100644
--- a/src/bin/psql/common.c
+++ b/src/bin/psql/common.c
@@ -5,7 +5,8 @@
*
* $Header$
*/
-#include "postgres.h"
+#include "postgres_fe.h"
+
#include "common.h"
#include <errno.h>
@@ -26,7 +27,6 @@
#endif
#include "libpq-fe.h"
-#include "postgres_ext.h"
#include "pqsignal.h"
#include "settings.h"
diff --git a/src/bin/psql/common.h b/src/bin/psql/common.h
index 73b0c6127e..f032c2c511 100644
--- a/src/bin/psql/common.h
+++ b/src/bin/psql/common.h
@@ -8,7 +8,7 @@
#ifndef COMMON_H
#define COMMON_H
-#include "postgres.h"
+#include "postgres_fe.h"
#include <signal.h>
#include "pqsignal.h"
#include "libpq-fe.h"
diff --git a/src/bin/psql/copy.c b/src/bin/psql/copy.c
index 14082417b6..d54b21aa9e 100644
--- a/src/bin/psql/copy.c
+++ b/src/bin/psql/copy.c
@@ -5,7 +5,7 @@
*
* $Header$
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include "copy.h"
#include <errno.h>
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index 83b660b2d7..60c20e7fbd 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -5,7 +5,7 @@
*
* $Header$
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include "describe.h"
#include "libpq-fe.h"
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index 4aad485b38..37c935d398 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -5,7 +5,7 @@
*
* $Header$
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include "help.h"
#include <signal.h>
diff --git a/src/bin/psql/input.c b/src/bin/psql/input.c
index c01727341a..94a5101ac2 100644
--- a/src/bin/psql/input.c
+++ b/src/bin/psql/input.c
@@ -5,7 +5,7 @@
*
* $Header$
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include "input.h"
#include <errno.h>
diff --git a/src/bin/psql/large_obj.c b/src/bin/psql/large_obj.c
index 376bbf0e0e..93db6934b8 100644
--- a/src/bin/psql/large_obj.c
+++ b/src/bin/psql/large_obj.c
@@ -5,7 +5,7 @@
*
* $Header$
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include "large_obj.h"
#include "libpq-fe.h"
diff --git a/src/bin/psql/mainloop.c b/src/bin/psql/mainloop.c
index d763b2779c..0214a10776 100644
--- a/src/bin/psql/mainloop.c
+++ b/src/bin/psql/mainloop.c
@@ -5,7 +5,7 @@
*
* $Header$
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include "mainloop.h"
#include "pqexpbuffer.h"
diff --git a/src/bin/psql/mainloop.h b/src/bin/psql/mainloop.h
index b31ade6216..118cf1a038 100644
--- a/src/bin/psql/mainloop.h
+++ b/src/bin/psql/mainloop.h
@@ -8,7 +8,7 @@
#ifndef MAINLOOP_H
#define MAINLOOP_H
-#include "postgres.h"
+#include "postgres_fe.h"
#include <stdio.h>
#ifndef WIN32
#include <setjmp.h>
diff --git a/src/bin/psql/print.c b/src/bin/psql/print.c
index d4a60b23e4..3ea4dd4496 100644
--- a/src/bin/psql/print.c
+++ b/src/bin/psql/print.c
@@ -5,7 +5,7 @@
*
* $Header$
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include "print.h"
#include <math.h>
diff --git a/src/bin/psql/prompt.c b/src/bin/psql/prompt.c
index 8b558e48e3..40350a35db 100644
--- a/src/bin/psql/prompt.c
+++ b/src/bin/psql/prompt.c
@@ -5,7 +5,7 @@
*
* $Header$
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include "prompt.h"
#include "libpq-fe.h"
diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c
index e215c5ce37..922fa6d8ff 100644
--- a/src/bin/psql/startup.c
+++ b/src/bin/psql/startup.c
@@ -5,7 +5,7 @@
*
* $Header$
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include <sys/types.h>
@@ -34,7 +34,6 @@
#include "variables.h"
#ifdef MULTIBYTE
-#include "miscadmin.h"
#include "mb/pg_wchar.h"
#else
/* XXX Grand unified hard-coded badness; this should go into libpq */
diff --git a/src/bin/psql/stringutils.c b/src/bin/psql/stringutils.c
index d3641cd2e3..6f5454fba1 100644
--- a/src/bin/psql/stringutils.c
+++ b/src/bin/psql/stringutils.c
@@ -5,7 +5,7 @@
*
* $Header$
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include "stringutils.h"
#include <ctype.h>
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index d5f936a1e1..4d3eaeafca 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -42,7 +42,7 @@
*----------------------------------------------------------------------
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include "tab-complete.h"
#include "input.h"
diff --git a/src/bin/psql/tab-complete.h b/src/bin/psql/tab-complete.h
index 0982640577..f9b20e79b8 100644
--- a/src/bin/psql/tab-complete.h
+++ b/src/bin/psql/tab-complete.h
@@ -8,7 +8,7 @@
#ifndef TAB_COMPLETE_H
#define TAB_COMPLETE_H
-#include "postgres.h"
+#include "postgres_fe.h"
void initialize_readline(void);
diff --git a/src/bin/psql/variables.c b/src/bin/psql/variables.c
index d3fbbdafb8..4e2cb49b87 100644
--- a/src/bin/psql/variables.c
+++ b/src/bin/psql/variables.c
@@ -5,7 +5,7 @@
*
* $Header$
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include "variables.h"
#include <assert.h>
diff --git a/src/include/Makefile b/src/include/Makefile
index 686d44c9b2..649e1c5fe3 100644
--- a/src/include/Makefile
+++ b/src/include/Makefile
@@ -2,8 +2,9 @@
#
# Makefile for src/include
#
-# Install exported headers to the include directory (these headers are
-# the minimal ones needed to build loadable backend extensions).
+# 'make install' installs only those headers needed for client-side
+# programming. 'make install-all-headers' installs the whole contents
+# of src/include.
#
# $Header$
#
@@ -13,30 +14,23 @@ subdir = src/include
top_builddir = ../..
include $(top_builddir)/src/Makefile.global
+# Headers needed by clients
+srcdir_headers := c.h postgres_ext.h postgres_fe.h \
+ libpq/pqcomm.h libpq/libpq-fs.h lib/dllist.h
-srcdir_headers := c.h postgres.h postgres_ext.h fmgr.h \
- libpq/pqcomm.h libpq/libpq-fs.h lib/dllist.h \
- utils/geo_decls.h utils/elog.h utils/palloc.h \
- access/attnum.h executor/spi.h commands/trigger.h
-
-builddir_headers := os.h config.h utils/fmgroids.h
+builddir_headers := os.h config.h
HEADERS = $(srcdir_headers) $(builddir_headers)
-
-all: $(HEADERS)
+# Subdirectories containing headers that install-all-headers should install
+SUBDIRS = access bootstrap catalog commands executor lib libpq mb \
+ nodes optimizer parser port regex rewrite storage tcop utils
-# These rules are necessary in case someone installs the include tree
-# before building the backend tree. Very messy.
-utils/fmgroids.h: $(top_builddir)/src/backend/utils/fmgroids.h
- cd utils && rm -f fmgroids.h && $(LN_S) ../$(top_builddir)/src/backend/utils/fmgroids.h .
+all: $(HEADERS)
-# This file is built in the backend tree, but we need to keep track of
-# the dependencies here.
-$(top_builddir)/src/backend/utils/fmgroids.h: $(top_srcdir)/src/backend/utils/Gen_fmgrtab.sh catalog/pg_proc.h
- $(MAKE) -C $(dir $@) fmgroids.h
+# Install only selected headers
install: all installdirs
for file in $(srcdir_headers); do \
@@ -46,13 +40,34 @@ install: all installdirs
$(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/$$file || exit; \
done
-# Automatically pick out the needed subdirectories for the include
-# tree.
+# Automatically pick out the needed subdirectories for the include tree.
installdirs:
$(mkinstalldirs) $(addprefix $(DESTDIR)$(includedir)/, $(sort $(dir $(HEADERS))))
+
+# Install all headers
+
+install-all-headers: all install-all-dirs
+ for file in $(srcdir)/*.h; do \
+ $(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/`basename $$file` || exit; \
+ done
+ for dir in $(SUBDIRS); do \
+ for file in $(srcdir)/$$dir/*.h; do \
+ $(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/$$dir/`basename $$file` || exit; \
+ done \
+ done
+ for file in $(builddir_headers); do \
+ $(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/$$file || exit; \
+ done
+
+install-all-dirs:
+ $(mkinstalldirs) $(addprefix $(DESTDIR)$(includedir)/, $(SUBDIRS))
+
+
+# This isn't a complete uninstall, but rm'ing everything under
+# $(DESTDIR)$(includedir) is probably too drastic...
uninstall:
- rm -f $(addprefix $(DESTDIR)$(includedir)/, $(HEADERS))
+ rm -rf $(addprefix $(DESTDIR)$(includedir)/, $(HEADERS) $(SUBDIRS))
clean:
rm -f utils/fmgroids.h parser/parse.h
diff --git a/src/include/c.h b/src/include/c.h
index 2089774fe7..f5fd74d814 100644
--- a/src/include/c.h
+++ b/src/include/c.h
@@ -2,7 +2,11 @@
*
* c.h
* Fundamental C definitions. This is included by every .c file in
- * postgres.
+ * PostgreSQL (via either postgres.h or postgres_fe.h, as appropriate).
+ *
+ * Note that the definitions here are not intended to be exposed to clients of
+ * the frontend interface libraries --- so we don't worry much about polluting
+ * the namespace with lots of stuff...
*
*
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
@@ -13,6 +17,7 @@
*-------------------------------------------------------------------------
*/
/*
+ *----------------------------------------------------------------
* TABLE OF CONTENTS
*
* When adding stuff to this file, please try to put stuff
@@ -20,21 +25,21 @@
*
* section description
* ------- ------------------------------------------------
- * 1) bool, true, false, TRUE, FALSE, NULL
- * 2) non-ansi C definitions:
- * type prefixes: const, signed, volatile, inline
- * cpp magic macros
+ * 0) config.h and standard system headers
+ * 1) hacks to cope with non-ANSI C compilers
+ * 2) bool, true, false, TRUE, FALSE, NULL
* 3) standard system types
- * 4) datum type
- * 5) IsValid macros for system types
- * 6) offsetof, lengthof, endof
- * 7) exception handling definitions, Assert, Trap, etc macros
- * 8) Min, Max, Abs, StrNCpy macros
- * 9) externs
- * 10) Berkeley-specific defs
- * 11) system-specific hacks
+ * 4) IsValid macros for system types
+ * 5) offsetof, lengthof, endof, alignment
+ * 6) widely useful macros
+ * 7) random stuff
+ * 8) system-specific hacks
*
- * ----------------------------------------------------------------
+ * NOTE: since this file is included by both frontend and backend modules, it's
+ * almost certainly wrong to put an "extern" declaration here. typedefs and macros
+ * are the kind of thing that might go here.
+ *
+ *----------------------------------------------------------------
*/
#ifndef C_H
#define C_H
@@ -63,56 +68,11 @@
#include <SupportDefs.h>
#endif
-/* ----------------------------------------------------------------
- * Section 1: bool, true, false, TRUE, FALSE, NULL
- * ----------------------------------------------------------------
- */
-/*
- * bool
- * Boolean value, either true or false.
- *
- */
-
-/* BeOS defines bool already, but the compiler chokes on the
- * #ifndef unless we wrap it in this check.
- */
-#ifndef __BEOS__
-#ifndef __cplusplus
-#ifndef bool
-typedef char bool;
-
-#endif /* ndef bool */
-#endif /* not C++ */
-#ifndef true
-#define true ((bool) 1)
-#endif
-#ifndef false
-#define false ((bool) 0)
-#endif
-#endif /* __BEOS__ */
-typedef bool *BoolPtr;
-
-#ifndef TRUE
-#define TRUE 1
-#endif /* TRUE */
-
-#ifndef FALSE
-#define FALSE 0
-#endif /* FALSE */
-
-/*
- * NULL
- * Null pointer.
- */
-#ifndef NULL
-#define NULL ((void *) 0)
-#endif /* !defined(NULL) */
/* ----------------------------------------------------------------
- * Section 2: non-ansi C definitions:
+ * Section 1: hacks to cope with non-ANSI C compilers
*
- * type prefixes: const, signed, volatile, inline
- * cpp magic macros
+ * type prefixes (const, signed, volatile, inline) are now handled in config.h.
* ----------------------------------------------------------------
*/
@@ -157,6 +117,57 @@ typedef bool *BoolPtr;
#define dummyret char
#endif
+
+/* ----------------------------------------------------------------
+ * Section 2: bool, true, false, TRUE, FALSE, NULL
+ * ----------------------------------------------------------------
+ */
+/*
+ * bool
+ * Boolean value, either true or false.
+ *
+ */
+
+/* BeOS defines bool already, but the compiler chokes on the
+ * #ifndef unless we wrap it in this check.
+ */
+#ifndef __BEOS__
+
+#ifndef __cplusplus
+#ifndef bool
+typedef char bool;
+#endif /* ndef bool */
+#endif /* not C++ */
+
+#ifndef true
+#define true ((bool) 1)
+#endif
+
+#ifndef false
+#define false ((bool) 0)
+#endif
+
+#endif /* __BEOS__ */
+
+typedef bool *BoolPtr;
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+/*
+ * NULL
+ * Null pointer.
+ */
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+
/* ----------------------------------------------------------------
* Section 3: standard system types
* ----------------------------------------------------------------
@@ -182,6 +193,7 @@ typedef signed char int8; /* == 8 bits */
typedef signed short int16; /* == 16 bits */
typedef signed int int32; /* == 32 bits */
#endif /* __BEOS__ */
+
/*
* uintN
* Unsigned integer, EXACTLY N BITS IN SIZE,
@@ -193,21 +205,6 @@ typedef unsigned char uint8; /* == 8 bits */
typedef unsigned short uint16; /* == 16 bits */
typedef unsigned int uint32; /* == 32 bits */
#endif /* __BEOS__ */
-/*
- * floatN
- * Floating point number, AT LEAST N BITS IN SIZE,
- * used for numerical computations.
- *
- * Since sizeof(floatN) may be > sizeof(char *), always pass
- * floatN by reference.
- *
- * XXX: these typedefs are now deprecated in favor of float4 and float8.
- * They will eventually go away.
- */
-typedef float float32data;
-typedef double float64data;
-typedef float *float32;
-typedef double *float64;
/*
* boolN
@@ -235,44 +232,24 @@ typedef uint16 word16; /* >= 16 bits */
typedef uint32 word32; /* >= 32 bits */
/*
- * Size
- * Size of any memory resident object, as returned by sizeof.
- */
-typedef size_t Size;
-
-/*
- * Index
- * Index into any memory resident array.
+ * floatN
+ * Floating point number, AT LEAST N BITS IN SIZE,
+ * used for numerical computations.
*
- * Note:
- * Indices are non negative.
- */
-typedef unsigned int Index;
-
-#define MAXDIM 6
-typedef struct
-{
- int indx[MAXDIM];
-} IntArray;
-
-/*
- * Offset
- * Offset into any memory resident array.
+ * Since sizeof(floatN) may be > sizeof(char *), always pass
+ * floatN by reference.
*
- * Note:
- * This differs from an Index in that an Index is always
- * non negative, whereas Offset may be negative.
+ * XXX: these typedefs are now deprecated in favor of float4 and float8.
+ * They will eventually go away.
*/
-typedef signed int Offset;
+typedef float float32data;
+typedef double float64data;
+typedef float *float32;
+typedef double *float64;
/*
- * Common Postgres datatypes.
+ * 64-bit integers
*/
-typedef int16 int2;
-typedef int32 int4;
-typedef float float4;
-typedef double float8;
-
#ifndef __BEOS__ /* this is already defined on BeOS */
#ifdef HAVE_LONG_INT_64
/* Plain "long int" fits, use it */
@@ -292,344 +269,117 @@ typedef unsigned long int uint64;
#endif
#endif /* __BEOS__ */
-/* ----------------------------------------------------------------
- * Section 4: datum type + support macros
- * ----------------------------------------------------------------
- */
-/*
- * datum.h
- * POSTGRES abstract data type datum representation definitions.
- *
- * Note:
- *
- * Port Notes:
- * Postgres makes the following assumption about machines:
- *
- * sizeof(Datum) == sizeof(long) >= sizeof(void *) >= 4
- *
- * Postgres also assumes that
- *
- * sizeof(char) == 1
- *
- * and that
- *
- * sizeof(short) == 2
- *
- * If your machine meets these requirements, Datums should also be checked
- * to see if the positioning is correct.
- */
-
-typedef unsigned long Datum; /* XXX sizeof(long) >= sizeof(void *) */
-typedef Datum *DatumPtr;
-
-#define GET_1_BYTE(datum) (((Datum) (datum)) & 0x000000ff)
-#define GET_2_BYTES(datum) (((Datum) (datum)) & 0x0000ffff)
-#define GET_4_BYTES(datum) (((Datum) (datum)) & 0xffffffff)
-#define SET_1_BYTE(value) (((Datum) (value)) & 0x000000ff)
-#define SET_2_BYTES(value) (((Datum) (value)) & 0x0000ffff)
-#define SET_4_BYTES(value) (((Datum) (value)) & 0xffffffff)
-
-/*
- * DatumGetBool
- * Returns boolean value of a datum.
- *
- * Note: any nonzero value will be considered TRUE.
- */
-
-#define DatumGetBool(X) ((bool) (((Datum) (X)) != 0))
-
-/*
- * BoolGetDatum
- * Returns datum representation for a boolean.
- *
- * Note: any nonzero value will be considered TRUE.
- */
-
-#define BoolGetDatum(X) ((Datum) ((X) ? 1 : 0))
-
-/*
- * DatumGetChar
- * Returns character value of a datum.
- */
-
-#define DatumGetChar(X) ((char) GET_1_BYTE(X))
-
/*
- * CharGetDatum
- * Returns datum representation for a character.
- */
-
-#define CharGetDatum(X) ((Datum) SET_1_BYTE(X))
-
-/*
- * Int8GetDatum
- * Returns datum representation for an 8-bit integer.
- */
-
-#define Int8GetDatum(X) ((Datum) SET_1_BYTE(X))
-
-/*
- * DatumGetUInt8
- * Returns 8-bit unsigned integer value of a datum.
- */
-
-#define DatumGetUInt8(X) ((uint8) GET_1_BYTE(X))
-
-/*
- * UInt8GetDatum
- * Returns datum representation for an 8-bit unsigned integer.
- */
-
-#define UInt8GetDatum(X) ((Datum) SET_1_BYTE(X))
-
-/*
- * DatumGetInt16
- * Returns 16-bit integer value of a datum.
- */
-
-#define DatumGetInt16(X) ((int16) GET_2_BYTES(X))
-
-/*
- * Int16GetDatum
- * Returns datum representation for a 16-bit integer.
- */
-
-#define Int16GetDatum(X) ((Datum) SET_2_BYTES(X))
-
-/*
- * DatumGetUInt16
- * Returns 16-bit unsigned integer value of a datum.
- */
-
-#define DatumGetUInt16(X) ((uint16) GET_2_BYTES(X))
-
-/*
- * UInt16GetDatum
- * Returns datum representation for a 16-bit unsigned integer.
- */
-
-#define UInt16GetDatum(X) ((Datum) SET_2_BYTES(X))
-
-/*
- * DatumGetInt32
- * Returns 32-bit integer value of a datum.
- */
-
-#define DatumGetInt32(X) ((int32) GET_4_BYTES(X))
-
-/*
- * Int32GetDatum
- * Returns datum representation for a 32-bit integer.
- */
-
-#define Int32GetDatum(X) ((Datum) SET_4_BYTES(X))
-
-/*
- * DatumGetUInt32
- * Returns 32-bit unsigned integer value of a datum.
- */
-
-#define DatumGetUInt32(X) ((uint32) GET_4_BYTES(X))
-
-/*
- * UInt32GetDatum
- * Returns datum representation for a 32-bit unsigned integer.
- */
-
-#define UInt32GetDatum(X) ((Datum) SET_4_BYTES(X))
-
-/*
- * DatumGetObjectId
- * Returns object identifier value of a datum.
- */
-
-#define DatumGetObjectId(X) ((Oid) GET_4_BYTES(X))
-
-/*
- * ObjectIdGetDatum
- * Returns datum representation for an object identifier.
- */
-
-#define ObjectIdGetDatum(X) ((Datum) SET_4_BYTES(X))
-
-/*
- * DatumGetPointer
- * Returns pointer value of a datum.
- */
-
-#define DatumGetPointer(X) ((Pointer) (X))
-
-/*
- * PointerGetDatum
- * Returns datum representation for a pointer.
- */
-
-#define PointerGetDatum(X) ((Datum) (X))
-
-/*
- * DatumGetCString
- * Returns C string (null-terminated string) value of a datum.
- *
- * Note: C string is not a full-fledged Postgres type at present,
- * but type input functions use this conversion for their inputs.
- */
-
-#define DatumGetCString(X) ((char *) DatumGetPointer(X))
-
-/*
- * CStringGetDatum
- * Returns datum representation for a C string (null-terminated string).
- *
- * Note: C string is not a full-fledged Postgres type at present,
- * but type output functions use this conversion for their outputs.
- * Note: CString is pass-by-reference; caller must ensure the pointed-to
- * value has adequate lifetime.
- */
-
-#define CStringGetDatum(X) PointerGetDatum(X)
-
-/*
- * DatumGetName
- * Returns name value of a datum.
- */
-
-#define DatumGetName(X) ((Name) DatumGetPointer(X))
-
-/*
- * NameGetDatum
- * Returns datum representation for a name.
- *
- * Note: Name is pass-by-reference; caller must ensure the pointed-to
- * value has adequate lifetime.
+ * Size
+ * Size of any memory resident object, as returned by sizeof.
*/
-
-#define NameGetDatum(X) PointerGetDatum(X)
+typedef size_t Size;
/*
- * DatumGetInt64
- * Returns 64-bit integer value of a datum.
+ * Index
+ * Index into any memory resident array.
*
- * Note: this macro hides the fact that int64 is currently a
- * pass-by-reference type. Someday it may be pass-by-value,
- * at least on some platforms.
+ * Note:
+ * Indices are non negative.
*/
-
-#define DatumGetInt64(X) (* ((int64 *) DatumGetPointer(X)))
+typedef unsigned int Index;
/*
- * Int64GetDatum
- * Returns datum representation for a 64-bit integer.
+ * Offset
+ * Offset into any memory resident array.
*
- * Note: this routine returns a reference to palloc'd space.
+ * Note:
+ * This differs from an Index in that an Index is always
+ * non negative, whereas Offset may be negative.
*/
-
-extern Datum Int64GetDatum(int64 X);
+typedef signed int Offset;
/*
- * DatumGetFloat4
- * Returns 4-byte floating point value of a datum.
- *
- * Note: this macro hides the fact that float4 is currently a
- * pass-by-reference type. Someday it may be pass-by-value.
+ * Common Postgres datatype names (as used in the catalogs)
*/
-
-#define DatumGetFloat4(X) (* ((float4 *) DatumGetPointer(X)))
+typedef int16 int2;
+typedef int32 int4;
+typedef float float4;
+typedef double float8;
/*
- * Float4GetDatum
- * Returns datum representation for a 4-byte floating point number.
- *
- * Note: this routine returns a reference to palloc'd space.
+ * Oid, RegProcedure, TransactionId, CommandId
*/
-extern Datum Float4GetDatum(float4 X);
+/* typedef Oid is in postgres_ext.h */
-/*
- * DatumGetFloat8
- * Returns 8-byte floating point value of a datum.
- *
- * Note: this macro hides the fact that float8 is currently a
- * pass-by-reference type. Someday it may be pass-by-value,
- * at least on some platforms.
- */
+/* unfortunately, both regproc and RegProcedure are used */
+typedef Oid regproc;
+typedef Oid RegProcedure;
-#define DatumGetFloat8(X) (* ((float8 *) DatumGetPointer(X)))
+typedef uint32 TransactionId;
-/*
- * Float8GetDatum
- * Returns datum representation for an 8-byte floating point number.
- *
- * Note: this routine returns a reference to palloc'd space.
- */
+#define InvalidTransactionId 0
-extern Datum Float8GetDatum(float8 X);
+typedef uint32 CommandId;
+#define FirstCommandId 0
/*
- * DatumGetFloat32
- * Returns 32-bit floating point value of a datum.
- * This is really a pointer, of course.
- *
- * XXX: this macro is now deprecated in favor of DatumGetFloat4.
- * It will eventually go away.
+ * Array indexing support
*/
+#define MAXDIM 6
+typedef struct
+{
+ int indx[MAXDIM];
+} IntArray;
-#define DatumGetFloat32(X) ((float32) DatumGetPointer(X))
-
-/*
- * Float32GetDatum
- * Returns datum representation for a 32-bit floating point number.
- * This is really a pointer, of course.
+/* ----------------
+ * Variable-length datatypes all share the 'struct varlena' header.
*
- * XXX: this macro is now deprecated in favor of Float4GetDatum.
- * It will eventually go away.
+ * NOTE: for TOASTable types, this is an oversimplification, since the value may be
+ * compressed or moved out-of-line. However datatype-specific routines are mostly
+ * content to deal with de-TOASTed values only, and of course client-side routines
+ * should never see a TOASTed value. See postgres.h for details of the TOASTed form.
+ * ----------------
*/
+struct varlena
+{
+ int32 vl_len;
+ char vl_dat[1];
+};
-#define Float32GetDatum(X) PointerGetDatum(X)
+#define VARHDRSZ ((int32) sizeof(int32))
/*
- * DatumGetFloat64
- * Returns 64-bit floating point value of a datum.
- * This is really a pointer, of course.
- *
- * XXX: this macro is now deprecated in favor of DatumGetFloat8.
- * It will eventually go away.
+ * These widely-used datatypes are just a varlena header and the data bytes.
+ * There is no terminating null or anything like that --- the data length is
+ * always VARSIZE(ptr) - VARHDRSZ.
*/
-
-#define DatumGetFloat64(X) ((float64) DatumGetPointer(X))
+typedef struct varlena bytea;
+typedef struct varlena text;
+typedef struct varlena BpChar; /* blank-padded char, ie SQL char(n) */
+typedef struct varlena VarChar; /* var-length char, ie SQL varchar(n) */
/*
- * Float64GetDatum
- * Returns datum representation for a 64-bit floating point number.
- * This is really a pointer, of course.
- *
- * XXX: this macro is now deprecated in favor of Float8GetDatum.
- * It will eventually go away.
+ * Fixed-length array types (these are not varlena's!)
*/
-#define Float64GetDatum(X) PointerGetDatum(X)
+typedef int2 int2vector[INDEX_MAX_KEYS];
+typedef Oid oidvector[INDEX_MAX_KEYS];
/*
- * Int64GetDatumFast
- * Float4GetDatumFast
- * Float8GetDatumFast
- *
- * These macros are intended to allow writing code that does not depend on
- * whether int64, float4, float8 are pass-by-reference types, while not
- * sacrificing performance when they are. The argument must be a variable
- * that will exist and have the same value for as long as the Datum is needed.
- * In the pass-by-ref case, the address of the variable is taken to use as
- * the Datum. In the pass-by-val case, these will be the same as the non-Fast
- * macros.
+ * We want NameData to have length NAMEDATALEN and int alignment,
+ * because that's how the data type 'name' is defined in pg_type.
+ * Use a union to make sure the compiler agrees.
*/
+typedef union nameData
+{
+ char data[NAMEDATALEN];
+ int alignmentDummy;
+} NameData;
+typedef NameData *Name;
-#define Int64GetDatumFast(X) PointerGetDatum(&(X))
-#define Float4GetDatumFast(X) PointerGetDatum(&(X))
-#define Float8GetDatumFast(X) PointerGetDatum(&(X))
+#define NameStr(name) ((name).data)
/* ----------------------------------------------------------------
- * Section 5: IsValid macros for system types
+ * Section 4: IsValid macros for system types
* ----------------------------------------------------------------
*/
/*
@@ -651,8 +401,13 @@ extern Datum Float8GetDatum(float8 X);
#define PointerIsAligned(pointer, type) \
(((long)(pointer) % (sizeof (type))) == 0)
+#define OidIsValid(objectId) ((bool) ((objectId) != InvalidOid))
+
+#define RegProcedureIsValid(p) OidIsValid(p)
+
+
/* ----------------------------------------------------------------
- * Section 6: offsetof, lengthof, endof
+ * Section 5: offsetof, lengthof, endof, alignment
* ----------------------------------------------------------------
*/
/*
@@ -678,125 +433,28 @@ extern Datum Float8GetDatum(float8 X);
*/
#define endof(array) (&array[lengthof(array)])
-/* ----------------------------------------------------------------
- * Section 7: exception handling definitions
- * Assert, Trap, etc macros
- * ----------------------------------------------------------------
- */
-/*
- * Exception Handling definitions
- */
-
-typedef char *ExcMessage;
-typedef struct Exception
-{
- ExcMessage message;
-} Exception;
-
-/*
- * USE_ASSERT_CHECKING, if defined, turns on all the assertions.
- * - plai 9/5/90
- *
- * It should _NOT_ be defined in releases or in benchmark copies
- */
-
-/*
- * Trap
- * Generates an exception if the given condition is true.
- *
- */
-#define Trap(condition, exception) \
- do { \
- if ((assert_enabled) && (condition)) \
- ExceptionalCondition(CppAsString(condition), &(exception), \
- (char*)NULL, __FILE__, __LINE__); \
- } while (0)
-
-/*
- * TrapMacro is the same as Trap but it's intended for use in macros:
+/* ----------------
+ * Alignment macros: align a length or address appropriately for a given type.
*
- * #define foo(x) (AssertM(x != 0) && bar(x))
- *
- * Isn't CPP fun?
- */
-#define TrapMacro(condition, exception) \
- ((bool) ((! assert_enabled) || ! (condition) || \
- (ExceptionalCondition(CppAsString(condition), \
- &(exception), \
- (char*) NULL, __FILE__, __LINE__))))
-
-#ifndef USE_ASSERT_CHECKING
-#define Assert(condition)
-#define AssertMacro(condition) ((void)true)
-#define AssertArg(condition)
-#define AssertState(condition)
-#define assert_enabled 0
-#else
-#define Assert(condition) \
- Trap(!(condition), FailedAssertion)
-
-#define AssertMacro(condition) \
- ((void) TrapMacro(!(condition), FailedAssertion))
-
-#define AssertArg(condition) \
- Trap(!(condition), BadArg)
-
-#define AssertState(condition) \
- Trap(!(condition), BadState)
-
-extern bool assert_enabled;
-
-#endif /* USE_ASSERT_CHECKING */
-
-/*
- * LogTrap
- * Generates an exception with a message if the given condition is true.
+ * There used to be some incredibly crufty platform-dependent hackery here,
+ * but now we rely on the configure script to get the info for us. Much nicer.
*
+ * NOTE: TYPEALIGN will not work if ALIGNVAL is not a power of 2.
+ * That case seems extremely unlikely to occur in practice, however.
+ * ----------------
*/
-#define LogTrap(condition, exception, printArgs) \
- do { \
- if ((assert_enabled) && (condition)) \
- ExceptionalCondition(CppAsString(condition), &(exception), \
- vararg_format printArgs, __FILE__, __LINE__); \
- } while (0)
-
-/*
- * LogTrapMacro is the same as LogTrap but it's intended for use in macros:
- *
- * #define foo(x) (LogAssertMacro(x != 0, "yow!") && bar(x))
- */
-#define LogTrapMacro(condition, exception, printArgs) \
- ((bool) ((! assert_enabled) || ! (condition) || \
- (ExceptionalCondition(CppAsString(condition), \
- &(exception), \
- vararg_format printArgs, __FILE__, __LINE__))))
-
-#ifndef USE_ASSERT_CHECKING
-#define LogAssert(condition, printArgs)
-#define LogAssertMacro(condition, printArgs) true
-#define LogAssertArg(condition, printArgs)
-#define LogAssertState(condition, printArgs)
-#else
-#define LogAssert(condition, printArgs) \
- LogTrap(!(condition), FailedAssertion, printArgs)
-#define LogAssertMacro(condition, printArgs) \
- LogTrapMacro(!(condition), FailedAssertion, printArgs)
+#define TYPEALIGN(ALIGNVAL,LEN) (((long)(LEN) + (ALIGNVAL-1)) & ~(ALIGNVAL-1))
-#define LogAssertArg(condition, printArgs) \
- LogTrap(!(condition), BadArg, printArgs)
+#define SHORTALIGN(LEN) TYPEALIGN(ALIGNOF_SHORT, (LEN))
+#define INTALIGN(LEN) TYPEALIGN(ALIGNOF_INT, (LEN))
+#define LONGALIGN(LEN) TYPEALIGN(ALIGNOF_LONG, (LEN))
+#define DOUBLEALIGN(LEN) TYPEALIGN(ALIGNOF_DOUBLE, (LEN))
+#define MAXALIGN(LEN) TYPEALIGN(MAXIMUM_ALIGNOF, (LEN))
-#define LogAssertState(condition, printArgs) \
- LogTrap(!(condition), BadState, printArgs)
-
-#ifdef ASSERT_CHECKING_TEST
-extern int assertTest(int val);
-
-#endif
-#endif /* USE_ASSERT_CHECKING */
/* ----------------------------------------------------------------
- * Section 8: Min, Max, Abs macros
+ * Section 6: widely useful macros
* ----------------------------------------------------------------
*/
/*
@@ -887,56 +545,30 @@ extern int assertTest(int val);
/* ----------------------------------------------------------------
- * Section 9: externs
- * ----------------------------------------------------------------
- */
-
-extern Exception FailedAssertion;
-extern Exception BadArg;
-extern Exception BadState;
-
-/* in utils/error/assert.c */
-extern int ExceptionalCondition(char *conditionName,
- Exception *exceptionP, char *details,
- char *fileName, int lineNumber);
-
-
-/* ----------------
- * vararg_format is used by assert and the exception handling stuff
- * ----------------
- */
-extern char *vararg_format(const char *fmt,...);
-
-
-
-/* ----------------------------------------------------------------
- * Section 10: berkeley-specific configuration
- *
- * this section contains settings which are only relevant to the UC Berkeley
- * sites. Other sites can ignore this
+ * Section 7: random stuff
* ----------------------------------------------------------------
*/
-/* ----------------
- * storage managers
- *
- * These are experimental and are not supported in the code that
- * we distribute to other sites.
- * ----------------
- */
-#ifdef NOT_USED
-#define STABLE_MEMORY_STORAGE
-#endif
+/* msb for char */
+#define CSIGNBIT (0x80)
+#define STATUS_OK (0)
+#define STATUS_ERROR (-1)
+#define STATUS_NOT_FOUND (-2)
+#define STATUS_INVALID (-3)
+#define STATUS_UNCATALOGUED (-4)
+#define STATUS_REPLACED (-5)
+#define STATUS_NOT_DONE (-6)
+#define STATUS_BAD_PACKET (-7)
+#define STATUS_FOUND (1)
/* ----------------------------------------------------------------
- * Section 11: system-specific hacks
+ * Section 8: system-specific hacks
*
* This should be limited to things that absolutely have to be
- * included in every source file. The changes should be factored
- * into a separate file so that changes to one port don't require
- * changes to c.h (and everyone recompiling their whole system).
+ * included in every source file. The port-specific header file
+ * is usually a better place for this sort of thing.
* ----------------------------------------------------------------
*/
@@ -951,7 +583,6 @@ extern char *vararg_format(const char *fmt,...);
#endif
#if defined(sun) && defined(__sparc__) && !defined(__SVR4)
-#define memmove(d, s, l) bcopy(s, d, l)
#include <unistd.h>
#include <varargs.h>
#endif
@@ -989,8 +620,8 @@ extern int vsnprintf(char *str, size_t count, const char *fmt, va_list args);
#endif
-#ifndef HAVE_MEMMOVE
-#include <regex/utils.h>
+#if !defined(HAVE_MEMMOVE) && !defined(memmove)
+#define memmove(d, s, c) bcopy(s, d, c)
#endif
/* ----------------
diff --git a/src/include/executor/spi.h b/src/include/executor/spi.h
index 2db0c5d577..4834ab4dd8 100644
--- a/src/include/executor/spi.h
+++ b/src/include/executor/spi.h
@@ -8,6 +8,10 @@
#ifndef SPI_H
#define SPI_H
+/*
+ * This file may be used by client modules that haven't already
+ * included postgres.h
+ */
#include "postgres.h"
/*
diff --git a/src/include/libpq/libpq-fs.h b/src/include/libpq/libpq-fs.h
index 5c9b495f86..bc853dcde5 100644
--- a/src/include/libpq/libpq-fs.h
+++ b/src/include/libpq/libpq-fs.h
@@ -1,7 +1,7 @@
/*-------------------------------------------------------------------------
*
* libpq-fs.h
- * definitions for using Inversion file system routines
+ * definitions for using Inversion file system routines (ie, large objects)
*
*
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
@@ -14,82 +14,11 @@
#ifndef LIBPQ_FS_H
#define LIBPQ_FS_H
-/* UNIX compatibility junk. This should be in all systems' include files,
- but this is not always the case. */
-
-#ifndef MAXNAMLEN
-#define MAXNAMLEN 255
-#endif /* MAXNAMLEN */
-
-struct pgdirent
-{
- unsigned long d_ino;
- unsigned short d_namlen;
- char d_name[MAXNAMLEN + 1];
-};
-
-
-/* for stat(2) */
-#ifndef S_IRUSR
-/* file modes */
-
-#define S_IRWXU 00700 /* read, write, execute: owner */
-#define S_IRUSR 00400 /* read permission: owner */
-#define S_IWUSR 00200 /* write permission: owner */
-#define S_IXUSR 00100 /* execute permission: owner */
-
-#define S_IRWXG 00070 /* read, write, execute: group */
-#define S_IRGRP 00040 /* read permission: group */
-#define S_IWGRP 00020 /* write permission: group */
-#define S_IXGRP 00010 /* execute permission: group */
-
-#define S_IRWXO 00007 /* read, write, execute: other */
-#define S_IROTH 00004 /* read permission: other */
-#define S_IWOTH 00002 /* write permission: other */
-#define S_IXOTH 00001 /* execute permission: other */
-
-#define _S_IFMT 0170000 /* type of file; sync with S_IFMT */
-#define _S_IFBLK 0060000 /* block special; sync with S_IFBLK */
-#define _S_IFCHR 0020000 /* character special sync with S_IFCHR */
-#define _S_IFDIR 0040000 /* directory; sync with S_IFDIR */
-#define _S_IFIFO 0010000 /* FIFO - named pipe; sync with S_IFIFO */
-#define _S_IFREG 0100000 /* regular; sync with S_IFREG */
-
-#define S_IFDIR _S_IFDIR
-#define S_IFREG _S_IFREG
-
-#define S_ISDIR( mode ) (((mode) & _S_IFMT) == _S_IFDIR)
-
-#endif /* S_IRUSR */
-
/*
- * Inversion doesn't have links.
- */
-#ifndef S_ISLNK
-#define S_ISLNK(x) 0
-#endif
-
-/*
- * Flags for inversion file system large objects. Normally, creat()
- * takes mode arguments, but we don't use them in inversion, since
- * you get postgres protections. Instead, we use the low sixteen bits
- * of the integer mode argument to store the number of the storage
- * manager to be used, and the high sixteen bits for flags.
+ * Read/write mode flags for inversion (large object) calls
*/
#define INV_WRITE 0x00020000
#define INV_READ 0x00040000
-/* Error values for p_errno */
-#define PEPERM 1 /* Not owner */
-#define PENOENT 2 /* No such file or directory */
-#define PEACCES 13 /* Permission denied */
-#define PEEXIST 17 /* File exists */
-#define PENOTDIR 20 /* Not a directory */
-#define PEISDIR 21 /* Is a directory */
-#define PEINVAL 22 /* Invalid argument */
-#define PENAMETOOLONG 63 /* File name too long */
-#define PENOTEMPTY 66 /* Directory not empty */
-#define PEPGIO 99 /* postgres backend had problems */
-
#endif /* LIBPQ_FS_H */
diff --git a/src/include/libpq/pqcomm.h b/src/include/libpq/pqcomm.h
index 73f2db94a2..5f5fd53d04 100644
--- a/src/include/libpq/pqcomm.h
+++ b/src/include/libpq/pqcomm.h
@@ -16,11 +16,9 @@
#ifndef PQCOMM_H
#define PQCOMM_H
-#include "postgres.h"
-
#include <sys/types.h>
#ifdef WIN32
-# include "winsock.h"
+# include <winsock.h>
#else /* not WIN32 */
# include <sys/socket.h>
# ifdef HAVE_SYS_UN_H
diff --git a/src/include/mb/pg_wchar.h b/src/include/mb/pg_wchar.h
index 200729cc50..8286bd236b 100644
--- a/src/include/mb/pg_wchar.h
+++ b/src/include/mb/pg_wchar.h
@@ -3,7 +3,6 @@
#ifndef PG_WCHAR_H
#define PG_WCHAR_H
-#include "postgres.h"
#include <sys/types.h>
#ifdef FRONTEND
diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h
index 8f3bd4bf6f..2883a04397 100644
--- a/src/include/miscadmin.h
+++ b/src/include/miscadmin.h
@@ -216,6 +216,8 @@ extern int FindExec(char *full_path, const char *argv0,
extern int CheckPathAccess(char *path, char *name, int open_mode);
#ifdef CYR_RECODE
+extern void GetCharSetByHost(char *TableName, int host, const char *DataDir);
+extern void SetCharSet(void);
extern char *convertstr(unsigned char *buff, int len, int dest);
#endif
diff --git a/src/include/postgres.h b/src/include/postgres.h
index f8d517aa1a..f7fd2f9fae 100644
--- a/src/include/postgres.h
+++ b/src/include/postgres.h
@@ -1,8 +1,11 @@
/*-------------------------------------------------------------------------
*
* postgres.h
- * definition of (and support for) postgres system types.
- * this file is included by almost every .c in the system
+ * Primary include file for PostgreSQL server .c files
+ *
+ * This should be the first file included by PostgreSQL backend modules.
+ * Client-side code should include postgres_fe.h instead.
+ *
*
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1995, Regents of the University of California
@@ -12,26 +15,31 @@
*-------------------------------------------------------------------------
*/
/*
- * NOTES
- * this file will eventually contain the definitions for the
- * following (and perhaps other) system types:
+ *----------------------------------------------------------------
+ * TABLE OF CONTENTS
*
- * int2 int4 float4 float8
- * Oid regproc RegProcedure
- * aclitem
- * struct varlena
- * int2vector oidvector
- * bytea text
- * NameData Name
+ * When adding stuff to this file, please try to put stuff
+ * into the relevant section, or add new sections as appropriate.
*
- * TABLE OF CONTENTS
- * 1) simple type definitions
- * 2) varlena and array types
- * 3) TransactionId and CommandId
+ * section description
+ * ------- ------------------------------------------------
+ * 1) variable-length datatypes (TOAST support)
+ * 2) datum type + support macros
+ * 3) exception handling definitions
* 4) genbki macros used by catalog/pg_xxx.h files
- * 5) random stuff
*
- * ----------------------------------------------------------------
+ * NOTES
+ *
+ * In general, this file should contain declarations that are widely needed in the
+ * backend environment, but are of no interest outside the backend.
+ *
+ * Simple type definitions live in c.h, where they are shared with postgres_fe.h.
+ * We do that since those type definitions are needed by frontend modules that want
+ * to deal with binary data transmission to or from the backend. Type definitions
+ * in this file should be for representations that never escape the backend, such
+ * as Datum or TOASTed varlena objects.
+ *
+ *----------------------------------------------------------------
*/
#ifndef POSTGRES_H
#define POSTGRES_H
@@ -42,59 +50,16 @@
#include "utils/palloc.h"
/* ----------------------------------------------------------------
- * Section 1: simple type definitions
+ * Section 1: variable-length datatypes (TOAST support)
* ----------------------------------------------------------------
*/
-#define InvalidOid ((Oid) 0)
-#define OidIsValid(objectId) ((bool) ((objectId) != InvalidOid))
-
-/* unfortunately, both regproc and RegProcedure are used */
-typedef Oid regproc;
-typedef Oid RegProcedure;
-
-#define RegProcedureIsValid(p) OidIsValid(p)
-
-typedef int4 aclitem; /* PHONY definition for catalog use only */
-
-/* ----------------------------------------------------------------
- * Section 2: variable length and array types
- * ----------------------------------------------------------------
- */
/* ----------------
- * struct varlena
+ * struct varattrib is the header of a varlena object that may have been TOASTed.
* ----------------
*/
-struct varlena
-{
- int32 vl_len;
- char vl_dat[1];
-};
-
#define TUPLE_TOASTER_ACTIVE
-#ifndef TUPLE_TOASTER_ACTIVE
-#define VARSIZE(PTR) (((struct varlena *)(PTR))->vl_len)
-#define VARDATA(PTR) (((struct varlena *)(PTR))->vl_dat)
-#endif
-#define VARHDRSZ ((int32) sizeof(int32))
-
-/*
- * These widely-used datatypes are just a varlena header and the data bytes.
- * There is no terminating null or anything like that --- the data length is
- * always VARSIZE(ptr) - VARHDRSZ.
- */
-typedef struct varlena bytea;
-typedef struct varlena text;
-typedef struct varlena BpChar; /* blank-padded char, ie SQL char(n) */
-typedef struct varlena VarChar; /* var-length char, ie SQL varchar(n) */
-
-/*
- * Proposed new layout for variable length attributes
- * DO NOT USE YET - Jan
- */
-
-#ifdef TUPLE_TOASTER_ACTIVE
typedef struct varattrib
{
int32 va_header; /* External/compressed storage */
@@ -142,64 +107,466 @@ typedef struct varattrib
#define VARATT_IS_COMPRESSED(PTR) \
((VARATT_SIZEP(PTR) & VARATT_FLAG_COMPRESSED) != 0)
-/* ----------
- * This is regularly declared in access/tuptoaster.h,
- * but we don't want to include that into every source,
- * so we (evil evil evil) declare it here once more.
- * ----------
+
+/* ----------------------------------------------------------------
+ * Section 2: datum type + support macros
+ * ----------------------------------------------------------------
+ */
+
+/*
+ * Port Notes:
+ * Postgres makes the following assumption about machines:
+ *
+ * sizeof(Datum) == sizeof(long) >= sizeof(void *) >= 4
+ *
+ * Postgres also assumes that
+ *
+ * sizeof(char) == 1
+ *
+ * and that
+ *
+ * sizeof(short) == 2
+ *
+ * If your machine meets these requirements, Datums should also be checked
+ * to see if the positioning is correct.
+ */
+
+typedef unsigned long Datum; /* XXX sizeof(long) >= sizeof(void *) */
+typedef Datum *DatumPtr;
+
+#define GET_1_BYTE(datum) (((Datum) (datum)) & 0x000000ff)
+#define GET_2_BYTES(datum) (((Datum) (datum)) & 0x0000ffff)
+#define GET_4_BYTES(datum) (((Datum) (datum)) & 0xffffffff)
+#define SET_1_BYTE(value) (((Datum) (value)) & 0x000000ff)
+#define SET_2_BYTES(value) (((Datum) (value)) & 0x0000ffff)
+#define SET_4_BYTES(value) (((Datum) (value)) & 0xffffffff)
+
+/*
+ * DatumGetBool
+ * Returns boolean value of a datum.
+ *
+ * Note: any nonzero value will be considered TRUE.
*/
-extern varattrib *heap_tuple_untoast_attr(varattrib * attr);
-#define VARATT_GETPLAIN(_ARG,_VAR) { \
- if (VARATT_IS_EXTENDED(_ARG)) \
- (_VAR) = (void *)heap_tuple_untoast_attr(_ARG); \
- else \
- (_VAR) = (void *)(_ARG); \
- }
-#define VARATT_FREE(_ARG,_VAR) do { \
- if ((void *)(_VAR) != (void *)(_ARG)) \
- pfree((void *)(_VAR)); \
- } while (0)
-#else /* TUPLE_TOASTER_ACTIVE */
-#define VARATT_SIZE(__PTR) VARSIZE(__PTR)
-#define VARATT_SIZEP(__PTR) VARSIZE(__PTR)
-#endif /* TUPLE_TOASTER_ACTIVE */
+#define DatumGetBool(X) ((bool) (((Datum) (X)) != 0))
+
+/*
+ * BoolGetDatum
+ * Returns datum representation for a boolean.
+ *
+ * Note: any nonzero value will be considered TRUE.
+ */
+#define BoolGetDatum(X) ((Datum) ((X) ? 1 : 0))
-/* fixed-length array types (these are not varlena's!) */
+/*
+ * DatumGetChar
+ * Returns character value of a datum.
+ */
-typedef int2 int2vector[INDEX_MAX_KEYS];
-typedef Oid oidvector[INDEX_MAX_KEYS];
+#define DatumGetChar(X) ((char) GET_1_BYTE(X))
-/* We want NameData to have length NAMEDATALEN and int alignment,
- * because that's how the data type 'name' is defined in pg_type.
- * Use a union to make sure the compiler agrees.
+/*
+ * CharGetDatum
+ * Returns datum representation for a character.
+ */
+
+#define CharGetDatum(X) ((Datum) SET_1_BYTE(X))
+
+/*
+ * Int8GetDatum
+ * Returns datum representation for an 8-bit integer.
+ */
+
+#define Int8GetDatum(X) ((Datum) SET_1_BYTE(X))
+
+/*
+ * DatumGetUInt8
+ * Returns 8-bit unsigned integer value of a datum.
+ */
+
+#define DatumGetUInt8(X) ((uint8) GET_1_BYTE(X))
+
+/*
+ * UInt8GetDatum
+ * Returns datum representation for an 8-bit unsigned integer.
+ */
+
+#define UInt8GetDatum(X) ((Datum) SET_1_BYTE(X))
+
+/*
+ * DatumGetInt16
+ * Returns 16-bit integer value of a datum.
+ */
+
+#define DatumGetInt16(X) ((int16) GET_2_BYTES(X))
+
+/*
+ * Int16GetDatum
+ * Returns datum representation for a 16-bit integer.
+ */
+
+#define Int16GetDatum(X) ((Datum) SET_2_BYTES(X))
+
+/*
+ * DatumGetUInt16
+ * Returns 16-bit unsigned integer value of a datum.
+ */
+
+#define DatumGetUInt16(X) ((uint16) GET_2_BYTES(X))
+
+/*
+ * UInt16GetDatum
+ * Returns datum representation for a 16-bit unsigned integer.
+ */
+
+#define UInt16GetDatum(X) ((Datum) SET_2_BYTES(X))
+
+/*
+ * DatumGetInt32
+ * Returns 32-bit integer value of a datum.
+ */
+
+#define DatumGetInt32(X) ((int32) GET_4_BYTES(X))
+
+/*
+ * Int32GetDatum
+ * Returns datum representation for a 32-bit integer.
+ */
+
+#define Int32GetDatum(X) ((Datum) SET_4_BYTES(X))
+
+/*
+ * DatumGetUInt32
+ * Returns 32-bit unsigned integer value of a datum.
+ */
+
+#define DatumGetUInt32(X) ((uint32) GET_4_BYTES(X))
+
+/*
+ * UInt32GetDatum
+ * Returns datum representation for a 32-bit unsigned integer.
+ */
+
+#define UInt32GetDatum(X) ((Datum) SET_4_BYTES(X))
+
+/*
+ * DatumGetObjectId
+ * Returns object identifier value of a datum.
+ */
+
+#define DatumGetObjectId(X) ((Oid) GET_4_BYTES(X))
+
+/*
+ * ObjectIdGetDatum
+ * Returns datum representation for an object identifier.
+ */
+
+#define ObjectIdGetDatum(X) ((Datum) SET_4_BYTES(X))
+
+/*
+ * DatumGetPointer
+ * Returns pointer value of a datum.
+ */
+
+#define DatumGetPointer(X) ((Pointer) (X))
+
+/*
+ * PointerGetDatum
+ * Returns datum representation for a pointer.
*/
-typedef union nameData
-{
- char data[NAMEDATALEN];
- int alignmentDummy;
-} NameData;
-typedef NameData *Name;
-#define NameStr(name) ((name).data)
+#define PointerGetDatum(X) ((Datum) (X))
+
+/*
+ * DatumGetCString
+ * Returns C string (null-terminated string) value of a datum.
+ *
+ * Note: C string is not a full-fledged Postgres type at present,
+ * but type input functions use this conversion for their inputs.
+ */
+
+#define DatumGetCString(X) ((char *) DatumGetPointer(X))
+
+/*
+ * CStringGetDatum
+ * Returns datum representation for a C string (null-terminated string).
+ *
+ * Note: C string is not a full-fledged Postgres type at present,
+ * but type output functions use this conversion for their outputs.
+ * Note: CString is pass-by-reference; caller must ensure the pointed-to
+ * value has adequate lifetime.
+ */
+
+#define CStringGetDatum(X) PointerGetDatum(X)
+
+/*
+ * DatumGetName
+ * Returns name value of a datum.
+ */
+
+#define DatumGetName(X) ((Name) DatumGetPointer(X))
+
+/*
+ * NameGetDatum
+ * Returns datum representation for a name.
+ *
+ * Note: Name is pass-by-reference; caller must ensure the pointed-to
+ * value has adequate lifetime.
+ */
+
+#define NameGetDatum(X) PointerGetDatum(X)
+
+/*
+ * DatumGetInt64
+ * Returns 64-bit integer value of a datum.
+ *
+ * Note: this macro hides the fact that int64 is currently a
+ * pass-by-reference type. Someday it may be pass-by-value,
+ * at least on some platforms.
+ */
+
+#define DatumGetInt64(X) (* ((int64 *) DatumGetPointer(X)))
+
+/*
+ * Int64GetDatum
+ * Returns datum representation for a 64-bit integer.
+ *
+ * Note: this routine returns a reference to palloc'd space.
+ */
+
+extern Datum Int64GetDatum(int64 X);
+
+/*
+ * DatumGetFloat4
+ * Returns 4-byte floating point value of a datum.
+ *
+ * Note: this macro hides the fact that float4 is currently a
+ * pass-by-reference type. Someday it may be pass-by-value.
+ */
+
+#define DatumGetFloat4(X) (* ((float4 *) DatumGetPointer(X)))
+
+/*
+ * Float4GetDatum
+ * Returns datum representation for a 4-byte floating point number.
+ *
+ * Note: this routine returns a reference to palloc'd space.
+ */
+
+extern Datum Float4GetDatum(float4 X);
+
+/*
+ * DatumGetFloat8
+ * Returns 8-byte floating point value of a datum.
+ *
+ * Note: this macro hides the fact that float8 is currently a
+ * pass-by-reference type. Someday it may be pass-by-value,
+ * at least on some platforms.
+ */
+
+#define DatumGetFloat8(X) (* ((float8 *) DatumGetPointer(X)))
+
+/*
+ * Float8GetDatum
+ * Returns datum representation for an 8-byte floating point number.
+ *
+ * Note: this routine returns a reference to palloc'd space.
+ */
+
+extern Datum Float8GetDatum(float8 X);
+
+
+/*
+ * DatumGetFloat32
+ * Returns 32-bit floating point value of a datum.
+ * This is really a pointer, of course.
+ *
+ * XXX: this macro is now deprecated in favor of DatumGetFloat4.
+ * It will eventually go away.
+ */
+
+#define DatumGetFloat32(X) ((float32) DatumGetPointer(X))
+
+/*
+ * Float32GetDatum
+ * Returns datum representation for a 32-bit floating point number.
+ * This is really a pointer, of course.
+ *
+ * XXX: this macro is now deprecated in favor of Float4GetDatum.
+ * It will eventually go away.
+ */
+
+#define Float32GetDatum(X) PointerGetDatum(X)
+
+/*
+ * DatumGetFloat64
+ * Returns 64-bit floating point value of a datum.
+ * This is really a pointer, of course.
+ *
+ * XXX: this macro is now deprecated in favor of DatumGetFloat8.
+ * It will eventually go away.
+ */
+
+#define DatumGetFloat64(X) ((float64) DatumGetPointer(X))
+
+/*
+ * Float64GetDatum
+ * Returns datum representation for a 64-bit floating point number.
+ * This is really a pointer, of course.
+ *
+ * XXX: this macro is now deprecated in favor of Float8GetDatum.
+ * It will eventually go away.
+ */
+
+#define Float64GetDatum(X) PointerGetDatum(X)
+
+/*
+ * Int64GetDatumFast
+ * Float4GetDatumFast
+ * Float8GetDatumFast
+ *
+ * These macros are intended to allow writing code that does not depend on
+ * whether int64, float4, float8 are pass-by-reference types, while not
+ * sacrificing performance when they are. The argument must be a variable
+ * that will exist and have the same value for as long as the Datum is needed.
+ * In the pass-by-ref case, the address of the variable is taken to use as
+ * the Datum. In the pass-by-val case, these will be the same as the non-Fast
+ * macros.
+ */
+
+#define Int64GetDatumFast(X) PointerGetDatum(&(X))
+#define Float4GetDatumFast(X) PointerGetDatum(&(X))
+#define Float8GetDatumFast(X) PointerGetDatum(&(X))
+
/* ----------------------------------------------------------------
- * Section 3: TransactionId and CommandId
+ * Section 3: exception handling definitions
+ * Assert, Trap, etc macros
* ----------------------------------------------------------------
*/
-typedef uint32 TransactionId;
+typedef char *ExcMessage;
+
+typedef struct Exception
+{
+ ExcMessage message;
+} Exception;
+
+extern Exception FailedAssertion;
+extern Exception BadArg;
+extern Exception BadState;
-#define InvalidTransactionId 0
+extern bool assert_enabled;
-typedef uint32 CommandId;
+/*
+ * USE_ASSERT_CHECKING, if defined, turns on all the assertions.
+ * - plai 9/5/90
+ *
+ * It should _NOT_ be defined in releases or in benchmark copies
+ */
-#define FirstCommandId 0
+/*
+ * Trap
+ * Generates an exception if the given condition is true.
+ *
+ */
+#define Trap(condition, exception) \
+ do { \
+ if ((assert_enabled) && (condition)) \
+ ExceptionalCondition(CppAsString(condition), &(exception), \
+ (char*)NULL, __FILE__, __LINE__); \
+ } while (0)
+
+/*
+ * TrapMacro is the same as Trap but it's intended for use in macros:
+ *
+ * #define foo(x) (AssertM(x != 0) && bar(x))
+ *
+ * Isn't CPP fun?
+ */
+#define TrapMacro(condition, exception) \
+ ((bool) ((! assert_enabled) || ! (condition) || \
+ (ExceptionalCondition(CppAsString(condition), \
+ &(exception), \
+ (char*) NULL, __FILE__, __LINE__))))
+
+#ifndef USE_ASSERT_CHECKING
+#define Assert(condition)
+#define AssertMacro(condition) ((void)true)
+#define AssertArg(condition)
+#define AssertState(condition)
+#define assert_enabled 0
+#else
+#define Assert(condition) \
+ Trap(!(condition), FailedAssertion)
+
+#define AssertMacro(condition) \
+ ((void) TrapMacro(!(condition), FailedAssertion))
+
+#define AssertArg(condition) \
+ Trap(!(condition), BadArg)
+
+#define AssertState(condition) \
+ Trap(!(condition), BadState)
+
+#endif /* USE_ASSERT_CHECKING */
+
+/*
+ * LogTrap
+ * Generates an exception with a message if the given condition is true.
+ *
+ */
+#define LogTrap(condition, exception, printArgs) \
+ do { \
+ if ((assert_enabled) && (condition)) \
+ ExceptionalCondition(CppAsString(condition), &(exception), \
+ vararg_format printArgs, __FILE__, __LINE__); \
+ } while (0)
+
+/*
+ * LogTrapMacro is the same as LogTrap but it's intended for use in macros:
+ *
+ * #define foo(x) (LogAssertMacro(x != 0, "yow!") && bar(x))
+ */
+#define LogTrapMacro(condition, exception, printArgs) \
+ ((bool) ((! assert_enabled) || ! (condition) || \
+ (ExceptionalCondition(CppAsString(condition), \
+ &(exception), \
+ vararg_format printArgs, __FILE__, __LINE__))))
+
+extern int ExceptionalCondition(char *conditionName,
+ Exception *exceptionP, char *details,
+ char *fileName, int lineNumber);
+extern char *vararg_format(const char *fmt, ...);
+
+#ifndef USE_ASSERT_CHECKING
+#define LogAssert(condition, printArgs)
+#define LogAssertMacro(condition, printArgs) true
+#define LogAssertArg(condition, printArgs)
+#define LogAssertState(condition, printArgs)
+#else
+#define LogAssert(condition, printArgs) \
+ LogTrap(!(condition), FailedAssertion, printArgs)
+
+#define LogAssertMacro(condition, printArgs) \
+ LogTrapMacro(!(condition), FailedAssertion, printArgs)
+
+#define LogAssertArg(condition, printArgs) \
+ LogTrap(!(condition), BadArg, printArgs)
+
+#define LogAssertState(condition, printArgs) \
+ LogTrap(!(condition), BadState, printArgs)
+
+#ifdef ASSERT_CHECKING_TEST
+extern int assertTest(int val);
+
+#endif
+
+#endif /* USE_ASSERT_CHECKING */
/* ----------------------------------------------------------------
- * Section 4: genbki macros used by the
- * catalog/pg_xxx.h files
+ * Section 4: genbki macros used by catalog/pg_xxx.h files
* ----------------------------------------------------------------
*/
#define CATALOG(x) \
@@ -217,35 +584,7 @@ typedef uint32 CommandId;
#define BKI_BEGIN
#define BKI_END
-/* ----------------------------------------------------------------
- * Section 5: random stuff
- * CSIGNBIT, STATUS...
- * ----------------------------------------------------------------
- */
-
-/* msb for int/unsigned */
-#define ISIGNBIT (0x80000000)
-#define WSIGNBIT (0x8000)
-
-/* msb for char */
-#define CSIGNBIT (0x80)
-
-#define STATUS_OK (0)
-#define STATUS_ERROR (-1)
-#define STATUS_NOT_FOUND (-2)
-#define STATUS_INVALID (-3)
-#define STATUS_UNCATALOGUED (-4)
-#define STATUS_REPLACED (-5)
-#define STATUS_NOT_DONE (-6)
-#define STATUS_BAD_PACKET (-7)
-#define STATUS_FOUND (1)
+typedef int4 aclitem; /* PHONY definition for catalog use only */
-/* ---------------
- * Cyrillic on the fly charsets recode
- * ---------------
- */
-#ifdef CYR_RECODE
-extern void SetCharSet(void);
-#endif /* CYR_RECODE */
#endif /* POSTGRES_H */
diff --git a/src/include/postgres_ext.h b/src/include/postgres_ext.h
index 14028640fd..0c2f1b4227 100644
--- a/src/include/postgres_ext.h
+++ b/src/include/postgres_ext.h
@@ -2,10 +2,9 @@
*
* postgres_ext.h
*
- * This file contains declarations of things that are visible
- * external to Postgres. For example, the Oid type is part of a
- * structure that is passed to the front end via libpq, and is
- * accordingly referenced in libpq-fe.h.
+ * This file contains declarations of things that are visible everywhere
+ * in PostgreSQL *and* are visible to clients of frontend interface libraries.
+ * For example, the Oid type is part of the API of libpq and other libraries.
*
* Declarations which are specific to a particular interface should
* go in the header file for that interface (such as libpq-fe.h). This
@@ -29,6 +28,8 @@
*/
typedef unsigned int Oid;
+#define InvalidOid ((Oid) 0)
+
#define OID_MAX UINT_MAX
/* you will need to include <limits.h> to use the above #define */
diff --git a/src/include/postgres_fe.h b/src/include/postgres_fe.h
new file mode 100644
index 0000000000..a5a2e68213
--- /dev/null
+++ b/src/include/postgres_fe.h
@@ -0,0 +1,24 @@
+/*-------------------------------------------------------------------------
+ *
+ * postgres_fe.h
+ * Primary include file for PostgreSQL client-side .c files
+ *
+ * This should be the first file included by PostgreSQL client libraries and
+ * application programs --- but not by backend modules, which should include
+ * postgres.h.
+ *
+ *
+ * Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
+ * Portions Copyright (c) 1995, Regents of the University of California
+ *
+ * $Id$
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef POSTGRES_FE_H
+#define POSTGRES_FE_H
+
+#include "postgres_ext.h"
+#include "c.h"
+
+#endif /* POSTGRES_FE_H */
diff --git a/src/include/regex/regex.h b/src/include/regex/regex.h
index 677f5ca9a2..b0b86f3cb6 100644
--- a/src/include/regex/regex.h
+++ b/src/include/regex/regex.h
@@ -40,7 +40,6 @@
#ifndef _REGEX_H_
#define _REGEX_H_
-#include "postgres.h"
#include <sys/types.h>
#include "mb/pg_wchar.h"
diff --git a/src/include/regex/regex2.h b/src/include/regex/regex2.h
index f655a1f2a2..b885ff4318 100644
--- a/src/include/regex/regex2.h
+++ b/src/include/regex/regex2.h
@@ -37,9 +37,7 @@
* @(#)regex2.h 8.4 (Berkeley) 3/20/94
*/
-#include "postgres.h"
-
-#include "limits.h"
+#include <limits.h>
/*
* First, the stuff that ends up in the outside-world include file
diff --git a/src/include/regex/utils.h b/src/include/regex/utils.h
index 461e7ad6b0..72f89dcafc 100644
--- a/src/include/regex/utils.h
+++ b/src/include/regex/utils.h
@@ -37,9 +37,7 @@
* @(#)utils.h 8.3 (Berkeley) 3/20/94
*/
-#include "postgres.h"
-
-#include "limits.h"
+#include <limits.h>
/* utility definitions */
#define DUPMAX 100000000 /* xxx is this right? */
@@ -50,6 +48,7 @@
#else
#define NC (CHAR_MAX - CHAR_MIN + 1)
#endif
+
typedef unsigned char uch;
/* switch off assertions (if not already off) if no REDEBUG */
@@ -58,8 +57,3 @@ typedef unsigned char uch;
#define NDEBUG /* no assertions please */
#endif
#endif
-
-/* for old systems with bcopy() but no memmove() */
-#if !defined(HAVE_MEMMOVE) && !defined(memmove)
-#define memmove(d, s, c) bcopy(s, d, c)
-#endif
diff --git a/src/include/storage/ipc.h b/src/include/storage/ipc.h
index c870a93d49..9a7459181b 100644
--- a/src/include/storage/ipc.h
+++ b/src/include/storage/ipc.h
@@ -18,8 +18,6 @@
#ifndef IPC_H
#define IPC_H
-#include "config.h"
-
#include <sys/types.h>
#ifdef HAVE_SYS_IPC_H
#include <sys/ipc.h>
diff --git a/src/include/utils/dynamic_loader.h b/src/include/utils/dynamic_loader.h
index 0d018ccff3..e8163e15ea 100644
--- a/src/include/utils/dynamic_loader.h
+++ b/src/include/utils/dynamic_loader.h
@@ -14,12 +14,6 @@
#ifndef DYNAMIC_LOADER_H
#define DYNAMIC_LOADER_H
-#include <sys/types.h>
-
-/* we need this include because port files use them */
-#include "postgres.h"
-
-/* and this one for typedef PGFunction */
#include "fmgr.h"
diff --git a/src/include/utils/exc.h b/src/include/utils/exc.h
index e22e126ee6..6c51382d2e 100644
--- a/src/include/utils/exc.h
+++ b/src/include/utils/exc.h
@@ -14,8 +14,6 @@
#ifndef EXC_H
#define EXC_H
-#include "config.h"
-
#include <setjmp.h>
extern char *ExcFileName;
diff --git a/src/include/utils/geo_decls.h b/src/include/utils/geo_decls.h
index fa6b0d8b2b..6b5a1011f0 100644
--- a/src/include/utils/geo_decls.h
+++ b/src/include/utils/geo_decls.h
@@ -21,7 +21,6 @@
#ifndef GEO_DECLS_H
#define GEO_DECLS_H
-#include "access/attnum.h"
#include "fmgr.h"
/*--------------------------------------------------------------------
diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h
index 71c3fb3a68..f9701afac3 100644
--- a/src/include/utils/guc.h
+++ b/src/include/utils/guc.h
@@ -9,8 +9,6 @@
#ifndef GUC_H
#define GUC_H
-#include "postgres.h"
-
/*
* Certain options can only be set at certain times. The rules are
* like this:
diff --git a/src/include/utils/palloc.h b/src/include/utils/palloc.h
index 83ff15cd04..2e7a55162a 100644
--- a/src/include/utils/palloc.h
+++ b/src/include/utils/palloc.h
@@ -64,24 +64,4 @@ extern char *MemoryContextStrdup(MemoryContext context, const char *string);
#define pstrdup(str) MemoryContextStrdup(CurrentMemoryContext, (str))
-/* ----------------
- * Alignment macros: align a length or address appropriately for a given type.
- *
- * There used to be some incredibly crufty platform-dependent hackery here,
- * but now we rely on the configure script to get the info for us. Much nicer.
- *
- * NOTE: TYPEALIGN will not work if ALIGNVAL is not a power of 2.
- * That case seems extremely unlikely to occur in practice, however.
- * ----------------
- */
-
-#define TYPEALIGN(ALIGNVAL,LEN) (((long)(LEN) + (ALIGNVAL-1)) & ~(ALIGNVAL-1))
-
-#define SHORTALIGN(LEN) TYPEALIGN(ALIGNOF_SHORT, (LEN))
-#define INTALIGN(LEN) TYPEALIGN(ALIGNOF_INT, (LEN))
-#define LONGALIGN(LEN) TYPEALIGN(ALIGNOF_LONG, (LEN))
-#define DOUBLEALIGN(LEN) TYPEALIGN(ALIGNOF_DOUBLE, (LEN))
-#define MAXALIGN(LEN) TYPEALIGN(MAXIMUM_ALIGNOF, (LEN))
-
-
#endif /* PALLOC_H */
diff --git a/src/interfaces/ecpg/lib/extern.h b/src/interfaces/ecpg/lib/extern.h
index 780fc933bb..3278b0d079 100644
--- a/src/interfaces/ecpg/lib/extern.h
+++ b/src/interfaces/ecpg/lib/extern.h
@@ -1,4 +1,4 @@
-#include "postgres.h"
+#include "postgres_fe.h"
#include "libpq-fe.h"
/* Here are some methods used by the lib. */
diff --git a/src/interfaces/ecpg/preproc/c_keywords.c b/src/interfaces/ecpg/preproc/c_keywords.c
index 15e1494eea..2dd941f618 100644
--- a/src/interfaces/ecpg/preproc/c_keywords.c
+++ b/src/interfaces/ecpg/preproc/c_keywords.c
@@ -5,9 +5,10 @@
*
*-------------------------------------------------------------------------
*/
+#include "postgres_fe.h"
+
#include <ctype.h>
-#include "postgres.h"
#include "extern.h"
#include "preproc.h"
diff --git a/src/interfaces/ecpg/preproc/descriptor.c b/src/interfaces/ecpg/preproc/descriptor.c
index f3d08484b6..7d49922513 100644
--- a/src/interfaces/ecpg/preproc/descriptor.c
+++ b/src/interfaces/ecpg/preproc/descriptor.c
@@ -2,7 +2,8 @@
* functions needed for descriptor handling
*/
-#include "postgres.h"
+#include "postgres_fe.h"
+
#include "extern.h"
/*
diff --git a/src/interfaces/ecpg/preproc/ecpg.c b/src/interfaces/ecpg/preproc/ecpg.c
index 5c76e3eed7..cfd71f32e6 100644
--- a/src/interfaces/ecpg/preproc/ecpg.c
+++ b/src/interfaces/ecpg/preproc/ecpg.c
@@ -2,8 +2,9 @@
/* (C) Michael Meskes <[email protected]> Feb 5th, 1998 */
/* Placed under the same copyright as PostgresSQL */
+#include "postgres_fe.h"
+
#include <unistd.h>
-#include "postgres.h"
#ifdef HAVE_GETOPT_H
#include "getopt.h"
diff --git a/src/interfaces/ecpg/preproc/ecpg_keywords.c b/src/interfaces/ecpg/preproc/ecpg_keywords.c
index 89a5e58c74..740b7d9cd3 100644
--- a/src/interfaces/ecpg/preproc/ecpg_keywords.c
+++ b/src/interfaces/ecpg/preproc/ecpg_keywords.c
@@ -5,9 +5,10 @@
*
*-------------------------------------------------------------------------
*/
+#include "postgres_fe.h"
+
#include <ctype.h>
-#include "postgres.h"
#include "extern.h"
#include "preproc.h"
diff --git a/src/interfaces/ecpg/preproc/extern.h b/src/interfaces/ecpg/preproc/extern.h
index f94ab94976..3274515ff6 100644
--- a/src/interfaces/ecpg/preproc/extern.h
+++ b/src/interfaces/ecpg/preproc/extern.h
@@ -1,5 +1,5 @@
-#include "parser/keywords.h"
#include "type.h"
+
#include <errno.h>
/* defines */
@@ -74,6 +74,7 @@ extern void reset_variables(void);
extern void check_indicator(struct ECPGtype *);
extern void remove_variables(int);
extern struct variable *new_variable(const char *, struct ECPGtype *);
+extern ScanKeyword *ScanKeywordLookup(char *text);
/* return codes */
diff --git a/src/interfaces/ecpg/preproc/keywords.c b/src/interfaces/ecpg/preproc/keywords.c
index 992d061da5..d89cb8392e 100644
--- a/src/interfaces/ecpg/preproc/keywords.c
+++ b/src/interfaces/ecpg/preproc/keywords.c
@@ -12,14 +12,12 @@
*
*-------------------------------------------------------------------------
*/
+#include "postgres_fe.h"
+
#include <ctype.h>
-#include "postgres.h"
-#include "nodes/parsenodes.h"
-#include "nodes/pg_list.h"
-#include "type.h"
+#include "extern.h"
#include "preproc.h"
-#include "parser/keywords.h"
/*
* List of (keyword-name, keyword-token-value) pairs.
diff --git a/src/interfaces/ecpg/preproc/output.c b/src/interfaces/ecpg/preproc/output.c
index 7fe282586f..cfd703d0db 100644
--- a/src/interfaces/ecpg/preproc/output.c
+++ b/src/interfaces/ecpg/preproc/output.c
@@ -1,6 +1,5 @@
-#include <stdarg.h>
+#include "postgres_fe.h"
-#include "postgres.h"
#include "extern.h"
void
diff --git a/src/interfaces/ecpg/preproc/pgc.l b/src/interfaces/ecpg/preproc/pgc.l
index f6adfcd6fb..833a1ff87f 100644
--- a/src/interfaces/ecpg/preproc/pgc.l
+++ b/src/interfaces/ecpg/preproc/pgc.l
@@ -16,19 +16,15 @@
*
*-------------------------------------------------------------------------
*/
+#include "postgres_fe.h"
+
#include <ctype.h>
#include <sys/types.h>
#include <limits.h>
#include <errno.h>
-#include "postgres.h"
-#include "miscadmin.h"
-#include "nodes/parsenodes.h"
-#include "nodes/pg_list.h"
-#include "parser/scansup.h"
#include "extern.h"
#include "preproc.h"
-#include "utils/builtins.h"
/* some versions of lex define this as a macro */
#if defined(yywrap)
diff --git a/src/interfaces/ecpg/preproc/preproc.y b/src/interfaces/ecpg/preproc/preproc.y
index 4d27ba34db..4ed5ece1c7 100644
--- a/src/interfaces/ecpg/preproc/preproc.y
+++ b/src/interfaces/ecpg/preproc/preproc.y
@@ -1,13 +1,6 @@
/* Copyright comment */
%{
-#include <stdarg.h>
-
-#include "postgres.h"
-#include "access/htup.h"
-#include "catalog/catname.h"
-#include "utils/numeric.h"
-#include "utils/memutils.h"
-#include "storage/bufpage.h"
+#include "postgres_fe.h"
#include "extern.h"
@@ -2976,10 +2969,6 @@ Geometric: PATH_P { $$ = make_str("path"); };
opt_float: '(' PosIntConst ')'
{
- if (atol($2) < 1)
- mmerror(ET_ERROR, "precision for FLOAT must be at least 1");
- else if (atol($2) >= 16)
- mmerror(ET_ERROR, "precision for FLOAT must be less than 16");
$$ = cat_str(3, make_str("("), $2, make_str(")"));
}
| /*EMPTY*/
@@ -2990,22 +2979,10 @@ opt_float: '(' PosIntConst ')'
opt_numeric: '(' PosIntConst ',' PosIntConst ')'
{
- if (atol($2) < 1 || atol($2) > NUMERIC_MAX_PRECISION) {
- sprintf(errortext, "NUMERIC precision %s must be between 1 and %d", $2, NUMERIC_MAX_PRECISION);
- mmerror(ET_ERROR, errortext);
- }
- if (atol($4) < 0 || atol($4) > atol($2)) {
- sprintf(errortext, "NUMERIC scale %s must be between 0 and precision %s", $4, $2);
- mmerror(ET_ERROR, errortext);
- }
$$ = cat_str(5, make_str("("), $2, make_str(","), $4, make_str(")"));
}
| '(' PosIntConst ')'
{
- if (atol($2) < 1 || atol($2) > NUMERIC_MAX_PRECISION) {
- sprintf(errortext, "NUMERIC precision %s must be between 1 and %d", $2, NUMERIC_MAX_PRECISION);
- mmerror(ET_ERROR, errortext);
- }
$$ = cat_str(3, make_str("("), $2, make_str(")"));
}
| /*EMPTY*/
@@ -3016,22 +2993,10 @@ opt_numeric: '(' PosIntConst ',' PosIntConst ')'
opt_decimal: '(' PosIntConst ',' PosIntConst ')'
{
- if (atol($2) < 1 || atol($2) > NUMERIC_MAX_PRECISION) {
- sprintf(errortext, "NUMERIC precision %s must be between 1 and %d", $2, NUMERIC_MAX_PRECISION);
- mmerror(ET_ERROR, errortext);
- }
- if (atol($4) < 0 || atol($4) > atol($2)) {
- sprintf(errortext, "NUMERIC scale %s must be between 0 and precision %s", $4, $2);
- mmerror(ET_ERROR, errortext);
- }
$$ = cat_str(5, make_str("("), $2, make_str(","), $4, make_str(")"));
}
| '(' PosIntConst ')'
{
- if (atol($2) < 1 || atol($2) > NUMERIC_MAX_PRECISION) {
- sprintf(errortext, "NUMERIC precision %s must be between 1 and %d", $2, NUMERIC_MAX_PRECISION);
- mmerror(ET_ERROR, errortext);
- }
$$ = cat_str(3, make_str("("), $2, make_str(")"));
}
| /*EMPTY*/
@@ -3045,23 +3010,12 @@ opt_decimal: '(' PosIntConst ',' PosIntConst ')'
* The following implements BIT() and BIT VARYING().
*/
Bit: bit '(' PosIntConst ')'
- {
- $$ = cat_str(4, $1, make_str("("), $3, make_str(")"));
- if (atol($3) < 1)
- {
- sprintf(errortext,"length for type '%s' must be at least 1",$1);
- mmerror(ET_ERROR, errortext);
- }
- else if (atol($3) > (MaxAttrSize * BITS_PER_BYTE))
- {
- sprintf(errortext, "length for type '%s' cannot exceed %d", $1,
- (MaxAttrSize * BITS_PER_BYTE));
- mmerror(ET_ERROR, errortext);
- }
- }
+ {
+ $$ = cat_str(4, $1, make_str("("), $3, make_str(")"));
+ }
| bit
- {
- $$ = $1;
+ {
+ $$ = $1;
}
;
@@ -3077,17 +3031,6 @@ bit: BIT opt_varying
*/
Character: character '(' PosIntConst ')'
{
- if (atol($3) < 1)
- {
- sprintf(errortext, "length for type '%s' type must be at least 1",$1);
- mmerror(ET_ERROR, errortext);
- }
- else if (atol($3) > MaxAttrSize)
- {
- sprintf(errortext, "length for type '%s' cannot exceed %d", $1, MaxAttrSize);
- mmerror(ET_ERROR, errortext);
- }
-
$$ = cat_str(4, $1, make_str("("), $3, make_str(")"));
}
| character
@@ -3730,14 +3673,7 @@ relation_name: SpecialRuleRelation
}
| ColId
{
- /* disallow refs to variable system tables */
- if (strcmp(LogRelationName, $1) == 0
- || strcmp(VariableRelationName, $1) == 0) {
- sprintf(errortext, make_str("%s cannot be accessed by users"),$1);
- mmerror(ET_ERROR, errortext);
- }
- else
- $$ = $1;
+ $$ = $1;
}
;
diff --git a/src/interfaces/ecpg/preproc/type.c b/src/interfaces/ecpg/preproc/type.c
index 29899b7259..5a1a7d1fa0 100644
--- a/src/interfaces/ecpg/preproc/type.c
+++ b/src/interfaces/ecpg/preproc/type.c
@@ -1,8 +1,5 @@
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
+#include "postgres_fe.h"
-#include "postgres.h"
#include "extern.h"
/* malloc + error check */
diff --git a/src/interfaces/ecpg/preproc/type.h b/src/interfaces/ecpg/preproc/type.h
index dd844cb12b..12e45ab43a 100644
--- a/src/interfaces/ecpg/preproc/type.h
+++ b/src/interfaces/ecpg/preproc/type.h
@@ -163,3 +163,9 @@ struct fetch_desc
char *str;
char *name;
};
+
+typedef struct ScanKeyword
+{
+ char *name;
+ int value;
+} ScanKeyword;
diff --git a/src/interfaces/ecpg/preproc/variable.c b/src/interfaces/ecpg/preproc/variable.c
index afdc033551..d97ef59f44 100644
--- a/src/interfaces/ecpg/preproc/variable.c
+++ b/src/interfaces/ecpg/preproc/variable.c
@@ -1,4 +1,4 @@
-#include "postgres.h"
+#include "postgres_fe.h"
#include "extern.h"
diff --git a/src/interfaces/libpgtcl/pgtcl.c b/src/interfaces/libpgtcl/pgtcl.c
index adebfa0027..4ea245c5de 100644
--- a/src/interfaces/libpgtcl/pgtcl.c
+++ b/src/interfaces/libpgtcl/pgtcl.c
@@ -15,7 +15,7 @@
*-------------------------------------------------------------------------
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include "libpgtcl.h"
#include "pgtclCmds.h"
#include "pgtclId.h"
diff --git a/src/interfaces/libpgtcl/pgtclCmds.c b/src/interfaces/libpgtcl/pgtclCmds.c
index 1d70580ba6..c147ad7dd6 100644
--- a/src/interfaces/libpgtcl/pgtclCmds.c
+++ b/src/interfaces/libpgtcl/pgtclCmds.c
@@ -12,10 +12,10 @@
*
*-------------------------------------------------------------------------
*/
+#include "postgres_fe.h"
#include <ctype.h>
-#include "postgres.h"
#include "pgtclCmds.h"
#include "pgtclId.h"
#include "libpq/libpq-fs.h" /* large-object interface */
diff --git a/src/interfaces/libpgtcl/pgtclId.c b/src/interfaces/libpgtcl/pgtclId.c
index 18deb45366..c1c5f72ab4 100644
--- a/src/interfaces/libpgtcl/pgtclId.c
+++ b/src/interfaces/libpgtcl/pgtclId.c
@@ -17,10 +17,10 @@
*
*-------------------------------------------------------------------------
*/
+#include "postgres_fe.h"
#include <errno.h>
-#include "postgres.h"
#include "pgtclCmds.h"
#include "pgtclId.h"
diff --git a/src/interfaces/libpq++/pgconnection.h b/src/interfaces/libpq++/pgconnection.h
index 4a14c3943f..0bd2c60900 100644
--- a/src/interfaces/libpq++/pgconnection.h
+++ b/src/interfaces/libpq++/pgconnection.h
@@ -38,7 +38,7 @@ extern "C" {
#endif
extern "C" {
-#include "postgres.h"
+#include "postgres_fe.h"
#include "libpq-fe.h"
}
diff --git a/src/interfaces/libpq/fe-auth.c b/src/interfaces/libpq/fe-auth.c
index 478663b73b..2790e1ac75 100644
--- a/src/interfaces/libpq/fe-auth.c
+++ b/src/interfaces/libpq/fe-auth.c
@@ -28,9 +28,8 @@
*
*/
-#ifndef WIN32
-#include "postgres.h"
-#endif
+#include "postgres_fe.h"
+
#include "libpq-fe.h"
#include "libpq-int.h"
#include "fe-auth.h"
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index 30aa75d25e..a4dd0a682c 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -13,7 +13,7 @@
*-------------------------------------------------------------------------
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include <sys/types.h>
#include <fcntl.h>
@@ -45,7 +45,6 @@
#endif
#ifdef MULTIBYTE
-#include "miscadmin.h"
#include "mb/pg_wchar.h"
#endif
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c
index b58b5a1807..c81c994c03 100644
--- a/src/interfaces/libpq/fe-exec.c
+++ b/src/interfaces/libpq/fe-exec.c
@@ -12,11 +12,12 @@
*
*-------------------------------------------------------------------------
*/
+#include "postgres_fe.h"
+
#include <errno.h>
#include <ctype.h>
#include <fcntl.h>
-#include "postgres.h"
#include "libpq-fe.h"
#include "libpq-int.h"
diff --git a/src/interfaces/libpq/fe-lobj.c b/src/interfaces/libpq/fe-lobj.c
index 28d53bbad8..5255881304 100644
--- a/src/interfaces/libpq/fe-lobj.c
+++ b/src/interfaces/libpq/fe-lobj.c
@@ -12,11 +12,11 @@
*
*-------------------------------------------------------------------------
*/
+#include "postgres_fe.h"
#include <fcntl.h>
#include <sys/stat.h>
-#include "postgres.h"
#include "libpq-fe.h"
#include "libpq-int.h"
diff --git a/src/interfaces/libpq/fe-misc.c b/src/interfaces/libpq/fe-misc.c
index 0a29418ef1..4717f9c4c4 100644
--- a/src/interfaces/libpq/fe-misc.c
+++ b/src/interfaces/libpq/fe-misc.c
@@ -30,7 +30,7 @@
*-------------------------------------------------------------------------
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#ifdef WIN32
#include "win32.h"
@@ -52,7 +52,6 @@
#include "pqsignal.h"
#ifdef MULTIBYTE
-#include "miscadmin.h"
#include "mb/pg_wchar.h"
#endif
diff --git a/src/interfaces/libpq/fe-print.c b/src/interfaces/libpq/fe-print.c
index 939c89ef11..637c1a477c 100644
--- a/src/interfaces/libpq/fe-print.c
+++ b/src/interfaces/libpq/fe-print.c
@@ -14,7 +14,7 @@
*
*-------------------------------------------------------------------------
*/
-#include "postgres.h"
+#include "postgres_fe.h"
#include <signal.h>
diff --git a/src/interfaces/libpq/libpq-int.h b/src/interfaces/libpq/libpq-int.h
index 6d56adf0be..dc16a892de 100644
--- a/src/interfaces/libpq/libpq-int.h
+++ b/src/interfaces/libpq/libpq-int.h
@@ -21,6 +21,7 @@
#define LIBPQ_INT_H
/* We assume libpq-fe.h has already been included. */
+#include "postgres_fe.h"
/* include stuff common to fe and be */
#include "libpq/pqcomm.h"
diff --git a/src/interfaces/libpq/pqexpbuffer.c b/src/interfaces/libpq/pqexpbuffer.c
index 354a6d7b5f..03ec48328d 100644
--- a/src/interfaces/libpq/pqexpbuffer.c
+++ b/src/interfaces/libpq/pqexpbuffer.c
@@ -22,12 +22,11 @@
*-------------------------------------------------------------------------
*/
-#include "postgres.h"
+#include "postgres_fe.h"
+
#include "pqexpbuffer.h"
#ifdef WIN32
-#include <stdarg.h>
-#include <stdio.h>
#include "win32.h"
#endif
diff --git a/src/interfaces/libpq/pqsignal.h b/src/interfaces/libpq/pqsignal.h
index 348ef1c323..1bd18122d3 100644
--- a/src/interfaces/libpq/pqsignal.h
+++ b/src/interfaces/libpq/pqsignal.h
@@ -18,7 +18,7 @@
#ifndef PQSIGNAL_H
#define PQSIGNAL_H
-#include "postgres.h"
+#include "postgres_fe.h"
typedef void (*pqsigfunc) (int);
diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c
index a8e5a0b35b..d51023fadf 100644
--- a/src/test/regress/regress.c
+++ b/src/test/regress/regress.c
@@ -2,10 +2,10 @@
* $Header$
*/
-#include <float.h> /* faked on sunos */
-
#include "postgres.h"
+#include <float.h> /* faked on sunos */
+
#include "utils/geo_decls.h" /* includes <math.h> */
#include "executor/executor.h" /* For GetAttributeByName */
#include "commands/sequence.h" /* for nextval() */
diff --git a/src/tutorial/funcs.c b/src/tutorial/funcs.c
index 621503a421..58ede56cc8 100644
--- a/src/tutorial/funcs.c
+++ b/src/tutorial/funcs.c
@@ -9,8 +9,6 @@
See funcs_new.c for examples of "new style".
*****************************************************************************/
-#include <string.h>
-
#include "postgres.h" /* general Postgres declarations */
#include "executor/executor.h" /* for GetAttributeByName() */
diff --git a/src/tutorial/funcs_new.c b/src/tutorial/funcs_new.c
index 20f609d5d2..b897268833 100644
--- a/src/tutorial/funcs_new.c
+++ b/src/tutorial/funcs_new.c
@@ -9,8 +9,6 @@
See funcs.c for examples of "old style".
*****************************************************************************/
-#include <string.h>
-
#include "postgres.h" /* general Postgres declarations */
#include "fmgr.h" /* for argument/result macros */