OSDN Git Service

REmove pg4_dump...its old stuff that is sooo out of date as to be useless...
authorMarc G. Fournier <scrappy@hub.org>
Mon, 6 Jan 1997 03:25:40 +0000 (03:25 +0000)
committerMarc G. Fournier <scrappy@hub.org>
Mon, 6 Jan 1997 03:25:40 +0000 (03:25 +0000)
src/bin/pg4_dump/Makefile [deleted file]
src/bin/pg4_dump/README [deleted file]
src/bin/pg4_dump/common.c [deleted file]
src/bin/pg4_dump/pg4_dump.c [deleted file]
src/bin/pg4_dump/pg_dump.h [deleted file]

diff --git a/src/bin/pg4_dump/Makefile b/src/bin/pg4_dump/Makefile
deleted file mode 100644 (file)
index 74136f2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# /usr/local/devel/pglite/cvs/src/bin/pg_dump/Makefile.v4r2,v 1.1 1995/05/17 18:57:10 jolly Exp
-#
-
-.include <postgres.global.mk>
-
-CFLAGS+= -I${.CURDIR}/../../backend/tmp -I${.CURDIR}/../../backend/port/${PORTNAME}
-
-PROG= pg4_dump
-
-SRCS= pg4_dump.c common.c
-
-.include <postgres.prog.mk>
diff --git a/src/bin/pg4_dump/README b/src/bin/pg4_dump/README
deleted file mode 100644 (file)
index 4ac5451..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-pg4_dump is a utility for dumping out a postgres (version 4, release 2)
-database into a script file containing query commands.  The script
-files are in a ASCII format and can be used to reconstruct the
-database, even on other machines and other architectures.  pg_dump
-will produce the queries necessary to re-generate all user-defined
-types, functions, tables, indices, aggregates, and operators.  In
-addition, all the data is copied out in ASCII format so that it can be
-readily copied in again.
-
-The sources in this directory can be used to build two different
-versions of the program.  The two versions require different
-versions of libpq, and the same binary cannot serve both purposes.
-
-
-       To build:
-
-          % bmake clean install
-
-       This version of the program will read in your postgres v4r2
-database and output the schema and the data tuples in one of two
-formats:  POSTQUEL or SQL.  The POSTQUEL->POSTQUEL dumps are useful
-for moving from one v4r2 installation to another.  The POSTQUEL->SQL
-dumps are useful for migrating from v4r2 to postgres95.  
-
-Use the -o [SQL|POSTQUEL] option to specify output query language.
-
-
-How to use pg4_dump:
--------------------
-
-The command line options are fairly self explanatory.  Use -help to 
-see the command line options.  I recommend using -v to get more
-verbose descriptions of what pg_dump is doing.  
-
-After running pg4_dump, one should examine the output script file for any 
-warnings, especially in light of the limitations listed below.
-
-A typical use of pg4_dump:
-
-       %  pg4_dump -v -f oldDB.dump  oldDB
-       %  createdb newDB
-       %  monitor newDB < oldDB.dump
-
-
-Caveats and limitations:
-------------------------
-
-pg4_dump has a few limitations.  The limitations mostly stem from
-difficulty in extracting certain meta-information from the system
-catalogs.   
-
-   rules and views:  
-       pg4_dump does not understand user-defined rules and views and
-       will fail to dump them properly.  (This is due to the fact that
-       rules are stored as plans in the catalogs and not textually)
-       
-   partial indices:
-       pg4_dump does not understand partial indices. (The reason is
-       the same as above.  Partial index predicates are stored as plans)
-       
-   source text of POSTQUEL functions:
-       pg4_dump does not convert the source text of a user-defined
-       POSTQUEL function into SQL.  Manual intervention is required.
-
-   large objects:
-       pg4_dump does not handle large objects.  Inversion large
-       objects are ignored and must be dealt with manually.
-
-   oid preservation:
-       pg4_dump does not preserve oid's while dumping.  If you have
-       stored oid's explicitly in tables in user-defined attributes,
-       and are using them as keys, then the output scripts will not
-       regenerate your database correctly. 
-
-pg4_dump has not been tested and will probably not work properly for
-versions of postgres prior to 4.2.
-
-Bug-reporting
---------------
-
-If you should find a problem with pg4_dump, it is very important that
-you provide a (small) sample database which illustrates the problem.
-Please send bugs, questions, and feedback to the
-       postgres95@postgres.berkeley.edu
-
-
-
diff --git a/src/bin/pg4_dump/common.c b/src/bin/pg4_dump/common.c
deleted file mode 100644 (file)
index 408a4a7..0000000
+++ /dev/null
@@ -1,401 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * common.c--
- *    common routines between pg_dump and pg4_dump
- *
- * Copyright (c) 1994, Regents of the University of California
- *
- *
- * IDENTIFICATION
- *    /usr/local/devel/pglite/cvs/src/bin/pg_dump/common.c,v 1.5 1995/06/28 22:32:35 jolly Exp
- *
- *-------------------------------------------------------------------------
- */
-
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/param.h> /* for MAXHOSTNAMELEN on most */
-#if defined(sparc_solaris) || defined(i386_solaris)
-#include <netdb.h>     /* for MAXHOSTNAMELEN on some */
-#endif
-
-#include "postgres.h"
-#include "libpq-fe.h"
-#include "libpq/auth.h"
-#include <port-protos.h> /* for strdup () *(
-
-#include "pg_dump.h"
-
-/*
- *  check_conn_and_db checks the connection and the database
- */
-void 
-check_conn_and_db()
-{
-    char *string= PQexec(" ");
-    switch(*string) {
-    case 'E':
-    case 'R':
-       PQfinish();
-       exit(2);
-       break;
-    }
-}
-
-
-/*
- * findTypeByOid 
- *    given an oid of a type, return its typename
- *
- * if oid is "0", return "opaque" -- this is a special case
- *
- * NOTE:  should hash this, but just do linear search for now
- */
-
-char*
-findTypeByOid(TypeInfo* tinfo, int numTypes, char* oid)
-{
-    int i;
-
-    if (strcmp(oid, "0") == 0) return g_opaque_type;
-
-    for (i=0;i<numTypes;i++) {
-       if (strcmp(tinfo[i].oid, oid) == 0)
-           return tinfo[i].typname;
-    }
-
-    /* should never get here */
-    fprintf(stderr,"failed sanity check,  type with oid %s was not found\n",
-           oid);
-    exit(2);
-}
-
-/*
- * findOprByOid
- *    given the oid of an operator, return the name of the operator
- *
- *
- * NOTE:  should hash this, but just do linear search for now
- * 
- */
-char*
-findOprByOid(OprInfo *oprinfo, int numOprs, char *oid)
-{
-    int i;
-    for (i=0;i<numOprs;i++) {
-       if (strcmp(oprinfo[i].oid, oid) == 0)
-           return oprinfo[i].oprname;
-    }
-
-    /* should never get here */
-    fprintf(stderr,"failed sanity check,  opr with oid %s was not found\n",
-           oid);
-    exit(2);
-}
-
-
-/*
- * findParentsByOid --
- *    given the oid of a class, return the names of its parent classes
- * and assign the number of parents to the last argument.
- *
- *
- * returns NULL if none
- */
-
-char** 
-findParentsByOid(TableInfo* tblinfo, int numTables,
-                InhInfo* inhinfo, int numInherits, char *oid,
-                int *numParentsPtr)
-{
-    int i,j;
-    int parentInd;
-    char** result;
-    int numParents;
-
-    numParents = 0;
-    for (i=0;i<numInherits;i++) {
-       if ( strcmp(inhinfo[i].inhrel, oid) == 0) {
-           numParents++;
-       }
-    }
-
-    *numParentsPtr = numParents;
-
-    if (numParents > 0) {
-       result = (char**)malloc(sizeof(char*) * numParents);
-       j = 0;
-       for (i=0;i<numInherits;i++) {
-           if ( strcmp(inhinfo[i].inhrel, oid) == 0) {
-               parentInd = findTableByOid(tblinfo, numTables, 
-                                          inhinfo[i].inhparent);
-               result[j++] = tblinfo[parentInd].relname;
-           }
-       }
-       return result;
-    }
-    else 
-       return NULL;
-}
-
-/*
- * parseArgTypes
- *    parse a string of eight numbers delimited by spaces
- * into a character array
- */
-
-void 
-parseArgTypes(char **argtypes, char* str)
-{
-    int i, j, argNum;
-    char temp[100];
-    char s;
-
-    argNum = 0;
-    j = 0;
-    while ( (s = *str) != '\0') {
-       if (s == ' ') {
-           temp[j] = '\0';
-           argtypes[argNum] = strdup(temp);
-           argNum++;
-           j = 0;
-       } else {
-           temp[j] = s;
-           j++;
-       }
-       str++;
-    }
-    if (j != 0)  {
-       temp[j] = '\0';
-        argtypes[argNum] = strdup(temp);
-    }
-    
-}
-
-
-/*
- * strInArray:
- *    takes in a string and a string array and the number of elements in the 
- * string array.  
- *    returns the index if the string is somewhere in the array, -1 otherwise
- *
- */
-
-int 
-strInArray(char* pattern, char** arr, int arr_size)
-{
-    int i;
-    for (i=0;i<arr_size;i++) {
-       if (strcmp(pattern, arr[i]) == 0) 
-           return i;
-    }
-    return -1;
-}
-
-/*
- * dumpSchema:
- *    we have a valid connection, we are now going to dump the schema
- * into the file
- *
- */
-
-TableInfo *
-dumpSchema(FILE* fout, int *numTablesPtr)
-{
-    int numTypes;
-    int numFuncs;
-    int numTables;
-    int numInherits;
-    int numIndices;
-    int numAggregates;
-    int numOperators;
-    TypeInfo *tinfo;
-    FuncInfo *finfo;
-    AggInfo *agginfo;
-    TableInfo *tblinfo;
-    InhInfo *inhinfo;
-    IndInfo *indinfo;
-    OprInfo *oprinfo;
-
-if (g_verbose) fprintf(stderr,"%s reading user-defined types %s\n",
-                      g_comment_start, g_comment_end);
-    tinfo = getTypes(&numTypes);
-
-if (g_verbose) fprintf(stderr,"%s reading user-defined functions %s\n",
-                      g_comment_start, g_comment_end);
-    finfo = getFuncs(&numFuncs);
-
-if (g_verbose) fprintf(stderr,"%s reading user-defined aggregates %s\n",
-                      g_comment_start, g_comment_end);
-    agginfo = getAggregates(&numAggregates);
-
-if (g_verbose) fprintf(stderr,"%s reading user-defined operators %s\n",
-                      g_comment_start, g_comment_end);
-    oprinfo = getOperators(&numOperators);
-
-if (g_verbose) fprintf(stderr,"%s reading user-defined tables %s\n",
-                      g_comment_start, g_comment_end);
-    tblinfo = getTables(&numTables);
-
-if (g_verbose) fprintf(stderr,"%s reading table inheritance information %s\n",
-                      g_comment_start, g_comment_end);
-    inhinfo = getInherits(&numInherits);
-
-if (g_verbose) fprintf(stderr, "%s finding the attribute names and types for each table %s\n",
-                      g_comment_start, g_comment_end);
-    getTableAttrs(tblinfo, numTables);
-
-if (g_verbose) fprintf(stderr, "%s flagging inherited attributes in subtables %s\n",
-                      g_comment_start, g_comment_end);
-    flagInhAttrs(tblinfo, numTables, inhinfo, numInherits);
-
-if (g_verbose) fprintf(stderr,"%s reading indices information %s\n",
-                      g_comment_start, g_comment_end);
-    indinfo = getIndices(&numIndices);
-
-if (g_verbose) fprintf(stderr,"%s dumping out user-defined types %s\n",
-                      g_comment_start, g_comment_end);
-    dumpTypes(fout, finfo, numFuncs, tinfo, numTypes);
-
-if (g_verbose) fprintf(stderr,"%s dumping out tables %s\n",
-                      g_comment_start, g_comment_end);
-    dumpTables(fout, tblinfo, numTables, inhinfo, numInherits,
-              tinfo, numTypes);
-
-if (g_verbose) fprintf(stderr,"%s dumping out user-defined functions %s\n",
-                      g_comment_start, g_comment_end);
-    dumpFuncs(fout, finfo, numFuncs, tinfo, numTypes);
-
-if (g_verbose) fprintf(stderr,"%s dumping out user-defined functions %s\n",
-                      g_comment_start, g_comment_end);
-    dumpAggs(fout, agginfo, numAggregates, tinfo, numTypes);
-
-if (g_verbose) fprintf(stderr,"%s dumping out user-defined operators %s\n",
-                      g_comment_start, g_comment_end);
-    dumpOprs(fout, oprinfo, numOperators, tinfo, numTypes);
-
-if (g_verbose) fprintf(stderr,"%s dumping out indices %s\n",
-                      g_comment_start, g_comment_end);
-    dumpIndices(fout, indinfo, numIndices, tblinfo, numTables);
-
-    *numTablesPtr = numTables;
-    return tblinfo;
-}
-
-
-/* flagInhAttrs -
- *   for each table in tblinfo, flag its inherited attributes
- * so when we dump the table out, we don't dump out the inherited attributes
- *   
- * initializes the parentRels field of each table
- *
- * modifies tblinfo
- *
- */
-void
-flagInhAttrs(TableInfo* tblinfo, int numTables,
-            InhInfo* inhinfo, int numInherits)
-{
-    int i,j,k;
-    int parentInd;
-    char *parentRels;
-    int numParents;
-
-    /* we go backwards because the tables in tblinfo are in OID
-       order, meaning the subtables are after the parent tables
-       we flag inherited attributes from child tables first */
-    for (i = numTables-1; i >= 0; i--) {
-       tblinfo[i].parentRels = findParentsByOid(tblinfo, numTables,
-                                               inhinfo, numInherits,
-                                               tblinfo[i].oid,
-                                               &tblinfo[i].numParents);
-       for (k=0;k<tblinfo[i].numParents;k++) {
-           parentInd = findTableByName(tblinfo, numTables, 
-                                       tblinfo[i].parentRels[k]);
-           for (j=0;j<tblinfo[i].numatts;j++) {
-               if (strInArray(tblinfo[i].attnames[j],
-                              tblinfo[parentInd].attnames,
-                              tblinfo[parentInd].numatts) != -1) {
-                   tblinfo[i].inhAttrs[j] = 1;
-               }
-           }
-       }
-    }
-}
-
-
-/*
- * findTableByName
- *    finds the index (in tblinfo) of the table with the given relname
- *  returns -1 if not found
- *
- * NOTE:  should hash this, but just do linear search for now
- */
-
-int
-findTableByName(TableInfo* tblinfo, int numTables, char* relname)
-{
-    int i;
-    for (i=0;i<numTables;i++) {
-       if  (strcmp(tblinfo[i].relname, relname) == 0)
-           return i;
-    }
-    return -1;
-}
-
-/*
- * findTableByOid
- *    finds the index (in tblinfo) of the table with the given oid
- *  returns -1 if not found
- *
- * NOTE:  should hash this, but just do linear search for now
- */
-
-int
-findTableByOid(TableInfo* tblinfo, int numTables, char* oid)
-{
-    int i;
-    for (i=0;i<numTables;i++) {
-       if  (strcmp(tblinfo[i].oid, oid) == 0)
-           return i;
-    }
-    return -1;
-}
-
-
-/*
- * findFuncByName
- *    finds the index (in finfo) of the function with the given name
- *  returns -1 if not found
- *
- * NOTE:  should hash this, but just do linear search for now
- */
-
-int
-findFuncByName(FuncInfo* finfo, int numFuncs, char* name)
-{
-    int i;
-    for (i=0;i<numFuncs;i++) {
-       if  (strcmp(finfo[i].proname, name) == 0)
-           return i;
-    }
-    return -1;
-}
-
-/*
- * isArchiveName
- *
- *   returns true if the relation name is an archive name, false otherwise
- */ 
-int
-isArchiveName(char* relname)
-{
-    return (strlen(relname) > 1 && relname[1] == ',');
-}
-
-
-
-
-
-
diff --git a/src/bin/pg4_dump/pg4_dump.c b/src/bin/pg4_dump/pg4_dump.c
deleted file mode 100644 (file)
index dad51dc..0000000
+++ /dev/null
@@ -1,1604 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * pg4_dump.c--
- *    pg4_dump is an utility for dumping out a postgres database
- * into a script file.
- *
- *  pg4_dump will read the system catalogs from a postgresV4r2 database and 
- *  dump out a script that reproduces the schema of the database in terms of
- *        user-defined types
- *        user-defined functions
- *        tables
- *        indices
- *        aggregates
- *        operators
- *
- * the output script is either POSTQUEL or SQL 
- *
- * Copyright (c) 1994, Regents of the University of California
- *
- *
- * IDENTIFICATION
- *    /usr/local/devel/pglite/cvs/src/bin/pg_dump/pg4_dump.c,v 1.1 1995/05/18 19:23:53 jolly Exp
- *
- *-------------------------------------------------------------------------
- */
-
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <sys/param.h> /* for MAXHOSTNAMELEN on most */
-#ifndef  MAXHOSTNAMELEN
-#include <netdb.h>     /* for MAXHOSTNAMELEN on some */
-#endif
-#endif
-
-#include "tmp/postgres.h"
-#include "tmp/libpq-fe.h"
-#include "libpq/auth.h"
-#include <port-protos.h> /* for strdup () */
-
-#include "pg_dump.h"
-
-extern char *optarg;
-extern int optind, opterr;
-
-/* these are used in libpq  */
-extern char    *PQhost;     /* machine on which the backend is running */
-extern char    *PQport;     /* comm. port with the postgres backend. */
-extern char    *PQtty;      /* the tty where postgres msgs are displayed */
-extern char    *PQdatabase; /* the postgres db to access.  */
-
-/* global decls */
-int g_verbose;  /* verbose flag */
-int g_last_builtin_oid; /* value of the last builtin oid */
-FILE *g_fout;     /* the script file */
-
-char g_opaque_type[10]; /* name for the opaque type */
-
-/* placeholders for the delimiters for comments */
-char g_comment_start[10]; 
-char g_comment_end[10]; 
-
-int g_outputSQL; /* if 1, output SQL, otherwise , output Postquel */
-
-static
-usage(char* progname)
-{
-    fprintf(stderr, "usage:  %s [options] [dbname]\n",progname);
-    fprintf(stderr, "\t -f filename \t\t script output filename\n");
-    fprintf(stderr, "\t -H hostname \t\t server host name\n");
-    fprintf(stderr, "\t -o [SQL|POSTQUEL} \t\t output format\n");
-    fprintf(stderr, "\t -p port     \t\t server port number\n");
-    fprintf(stderr, "\t -v          \t\t verbose\n");
-    fprintf(stderr, "\t -S          \t\t dump out only the schema, no data\n");
-    fprintf(stderr, "\n if dbname is not supplied, then the DATABASE environment name is used\n");
-    fprintf(stderr, "\n");
-
-    fprintf(stderr, "\tpg4_dump dumps out postgres databases and produces a script file\n");
-    fprintf(stderr, "\tof query commands to regenerate the schema\n");
-    fprintf(stderr, "\tThe output format is either POSTQUEL or SQL.  The default is SQL\n");
-    exit(1);
-}
-
-void
-main(int argc, char** argv)
-{
-    int c;
-    char* progname;
-    char* filename;
-    char* dbname;
-    char *username, usernamebuf[NAMEDATALEN + 1];
-    char hostbuf[MAXHOSTNAMELEN];
-    int schemaOnly;
-
-    TableInfo *tblinfo;
-    int numTables;
-
-
-    dbname = NULL;
-    filename = NULL;
-    g_verbose = 0;
-    g_outputSQL = 1;
-    schemaOnly = 0;
-
-    progname = *argv;
-
-    while ((c = getopt(argc, argv,"f:H:o:p:vSD")) != EOF) {
-       switch(c) {
-       case 'f': /* output file name */
-           filename = optarg;
-           break;
-       case 'H' : /* server host */
-           PQhost = optarg;
-           break;
-       case 'o': 
-           {
-           char *lang = optarg;
-           if (lang) {
-               if (strcmp(lang,"SQL") != 0)
-                   g_outputSQL = 0;
-           }
-           }
-           break;
-       case 'p' : /* server port */
-           PQport = optarg;
-           break;
-       case 'v': /* verbose */
-           g_verbose = 1;
-           break;
-       case 'S': /* dump schema only */
-           schemaOnly = 1;
-           break;
-       default:
-           usage(progname);
-           break;
-       }
-    }
-
-    /* open the output file */
-    if (filename == NULL) {
-       g_fout = stdout;
-    } else {
-       g_fout = fopen(filename, "w");
-       if (g_fout == NULL) {
-           fprintf(stderr,"%s: could not open output file named %s for writing\n",
-                   progname, filename);
-           exit(2);
-       }
-    }
-
-    /* Determine our username (according to the authentication system, if
-     * there is one).
-     */
-    if ((username = fe_getauthname()) == (char *) NULL) {
-           fprintf(stderr, "%s: could not find a valid user name\n",progname);
-           exit(2);
-    }
-    memset(usernamebuf, 0, sizeof(usernamebuf));
-    (void) strncpy(usernamebuf, username, NAMEDATALEN);
-    username = usernamebuf;
-
-    /*
-     *  Determine the hostname of the database server.  Try to avoid using
-     * "localhost" if at all possible.
-     */
-    if (!PQhost && !(PQhost = getenv("PGHOST")))
-           PQhost = "localhost";
-    if (!strcmp(PQhost, "localhost")) {
-           if (gethostname(hostbuf, MAXHOSTNAMELEN) != -1)
-                   PQhost = hostbuf;
-    }
-
-
-    /* find database */
-    if (!(dbname = argv[optind]) &&
-       !(dbname = getenv("DATABASE")) &&
-       !(dbname = username)) {
-           fprintf(stderr, "%s: no database name specified\n",progname);
-           exit (2);
-    }
-
-    PQsetdb(dbname);
-
-    /* make sure things are ok before giving users a warm welcome! */
-    check_conn_and_db();
-
-    if (g_outputSQL) {
-       strcpy(g_comment_start,"-- ");
-       g_comment_end[0] = '\0';
-       strcpy(g_opaque_type, "opaque");
-    } else {
-       strcpy(g_comment_start,"/* ");
-       strcpy(g_comment_end,"*/ ");
-       strcpy(g_opaque_type, "any");
-    }
-
-    g_last_builtin_oid = findLastBuiltinOid();
-       
-
-if (g_verbose) 
-    fprintf(stderr, "%s last builtin oid is %d %s\n", 
-           g_comment_start, g_last_builtin_oid, g_comment_end);
-
-    tblinfo = dumpSchema(g_fout, &numTables);
-    
-    if (!schemaOnly) {
-
-if (g_verbose) {
-    fprintf(stderr, "%s dumping out the contents of each table %s\n",
-           g_comment_start, g_comment_end );
-    fprintf(stderr, "%s the output language is %s %s\n",
-           g_comment_start,
-           (g_outputSQL) ? "SQL" : "POSTQUEL",
-           g_comment_end);
-}
-
-      dumpClasses(tblinfo, numTables, g_fout); 
-    }     
-
-    fflush(g_fout);
-    fclose(g_fout);
-    exit(0);
-}
-
-/*
- * getTypes: 
- *    read all base types in the system catalogs and return them in the 
- * TypeInfo* structure
- *
- *  numTypes is set to the number of types read in 
- *
- */
-TypeInfo*
-getTypes(int *numTypes)
-{
-    char* res;
-    PortalBuffer* pbuf;
-    int ntups;
-    int i;
-    char query[MAXQUERYLEN];
-    TypeInfo *tinfo;
-
-    int i_oid;
-    int i_typowner;
-    int i_typname;
-    int i_typlen;
-    int i_typprtlen;
-    int i_typinput;
-    int i_typoutput;
-    int i_typreceive;
-    int i_typsend;
-    int i_typelem;
-    int i_typdelim;
-    int i_typdefault;
-    int i_typrelid;
-    int i_typbyval;
-
-    PQexec("begin");
-    
-   /* find all base types */
-   /* we include even the built-in types 
-      because those may be used as array elements by user-defined types */
-   /* we filter out the built-in types when 
-      we dump out the types */
-
-/*
-    sprintf(query, "SELECT oid, typowner,typname, typlen, typprtlen, typinput, typoutput, typreceive, typsend, typelem, typdelim, typdefault, typrelid,typbyval from pg_type");
-*/
-    sprintf(query, "retrieve (t.oid, t.typowner, t.typname, t.typlen, t.typprtlen, t.typinput, t.typoutput, t.typreceive, t.typsend, t.typelem, t.typdelim, t.typdefault, t.typrelid, t.typbyval) from t in pg_type");
-    
-
-    res = PQexec(query);
-    pbuf = PQparray(res+1);
-    ntups = PQntuplesGroup(pbuf,0);
-    
-    tinfo = (TypeInfo*)malloc(ntups * sizeof(TypeInfo));
-
-    i_oid = PQfnumberGroup(pbuf,0,"oid");
-    i_typowner = PQfnumberGroup(pbuf,0,"typowner");
-    i_typname = PQfnumberGroup(pbuf,0,"typname");
-    i_typlen = PQfnumberGroup(pbuf,0,"typlen");
-    i_typprtlen = PQfnumberGroup(pbuf,0,"typprtlen");
-    i_typinput = PQfnumberGroup(pbuf,0,"typinput");
-    i_typoutput = PQfnumberGroup(pbuf,0,"typoutput");
-    i_typreceive = PQfnumberGroup(pbuf,0,"typreceive");
-    i_typsend = PQfnumberGroup(pbuf,0,"typsend");
-    i_typelem = PQfnumberGroup(pbuf,0,"typelem");
-    i_typdelim = PQfnumberGroup(pbuf,0,"typdelim");
-    i_typdefault = PQfnumberGroup(pbuf,0,"typdefault");
-    i_typrelid = PQfnumberGroup(pbuf,0,"typrelid");
-    i_typbyval = PQfnumberGroup(pbuf,0,"typbyval");
-
-    for (i=0;i<ntups;i++) {
-       tinfo[i].oid = strdup(PQgetvalue(pbuf,i,i_oid));
-       tinfo[i].typowner = strdup(PQgetvalue(pbuf,i,i_typowner));
-       tinfo[i].typname = strdup(PQgetvalue(pbuf,i,i_typname));
-       tinfo[i].typlen = strdup(PQgetvalue(pbuf,i,i_typlen));
-       tinfo[i].typprtlen = strdup(PQgetvalue(pbuf,i,i_typprtlen));
-       tinfo[i].typinput = strdup(PQgetvalue(pbuf,i,i_typinput));
-       tinfo[i].typoutput = strdup(PQgetvalue(pbuf,i,i_typoutput));
-       tinfo[i].typreceive = strdup(PQgetvalue(pbuf,i,i_typreceive));
-       tinfo[i].typsend = strdup(PQgetvalue(pbuf,i,i_typsend));
-       tinfo[i].typelem = strdup(PQgetvalue(pbuf,i,i_typelem));
-       tinfo[i].typdelim = strdup(PQgetvalue(pbuf,i,i_typdelim));
-       tinfo[i].typdefault = strdup(PQgetvalue(pbuf,i,i_typdefault));
-       tinfo[i].typrelid = strdup(PQgetvalue(pbuf,i,i_typrelid));
-
-       if (strcmp(PQgetvalue(pbuf,i,i_typbyval), "f") == 0)
-           tinfo[i].passedbyvalue = 0;
-       else
-           tinfo[i].passedbyvalue = 1;
-
-       /* check for user-defined array types,
-          omit system generated ones */
-       if ( (strcmp(tinfo[i].typelem, "0") != 0)  &&
-            tinfo[i].typname[0] != '_')
-           tinfo[i].isArray = 1;
-       else
-           tinfo[i].isArray = 0;
-    }
-
-    *numTypes = ntups;
-
-    PQexec("end");
-    PQclear(res+1);
-    return tinfo;
-}
-
-/*
- * getOperators:
- *    read all operators in the system catalogs and return them in the 
- * OprInfo* structure
- *
- *  numOprs is set to the number of operators read in 
- *    
- *
- */
-
-OprInfo*
-getOperators(int *numOprs)
-{
-    char *res;
-    PortalBuffer *pbuf;
-    int ntups;
-    int i;
-    char query[MAXQUERYLEN];
-
-    OprInfo* oprinfo;
-
-    int i_oid;
-    int i_oprname;
-    int i_oprkind;
-    int i_oprcode;
-    int i_oprleft;
-    int i_oprright;
-    int i_oprcom;
-    int i_oprnegate;
-    int i_oprrest;
-    int i_oprjoin;
-    int i_oprcanhash;
-    int i_oprlsortop;
-    int i_oprrsortop;
-    
-    /* find all operators, including builtin operators,
-       filter out system-defined operators at dump-out time */
-    PQexec("begin");
-/*
-    sprintf(query, "SELECT oid, oprname, oprkind, oprcode, oprleft, oprright, oprcom, oprnegate, oprrest, oprjoin, oprcanhash, oprlsortop, oprrsortop from pg_operator");
-*/
-    sprintf(query, "retrieve (o.oid, o.oprname, o.oprkind, o.oprcode, o.oprleft, o.oprright, o.oprcom, o.oprnegate, o.oprrest, o.oprjoin, o.oprcanhash, o.oprlsortop, o.oprrsortop) from o in pg_operator");
-
-
-    res = PQexec(query);
-    pbuf = PQparray(res+1);
-    ntups = PQntuplesGroup(pbuf,0);
-    *numOprs = ntups;
-
-    oprinfo = (OprInfo*)malloc(ntups * sizeof(OprInfo));
-
-    i_oid = PQfnumberGroup(pbuf,0,"oid");
-    i_oprname = PQfnumberGroup(pbuf,0,"oprname");
-    i_oprkind = PQfnumberGroup(pbuf,0,"oprkind");
-    i_oprcode = PQfnumberGroup(pbuf,0,"oprcode");
-    i_oprleft = PQfnumberGroup(pbuf,0,"oprleft");
-    i_oprright = PQfnumberGroup(pbuf,0,"oprright");
-    i_oprcom = PQfnumberGroup(pbuf,0,"oprcom");
-    i_oprnegate = PQfnumberGroup(pbuf,0,"oprnegate");
-    i_oprrest = PQfnumberGroup(pbuf,0,"oprrest");
-    i_oprjoin = PQfnumberGroup(pbuf,0,"oprjoin");
-    i_oprcanhash = PQfnumberGroup(pbuf,0,"oprcanhash");
-    i_oprlsortop = PQfnumberGroup(pbuf,0,"oprlsortop");
-    i_oprrsortop = PQfnumberGroup(pbuf,0,"oprrsortop");
-
-    for (i=0;i<ntups;i++) {
-       oprinfo[i].oid = strdup(PQgetvalue(pbuf,i,i_oid));
-       oprinfo[i].oprname = strdup(PQgetvalue(pbuf,i,i_oprname));
-       oprinfo[i].oprkind = strdup(PQgetvalue(pbuf,i,i_oprkind));
-       oprinfo[i].oprcode = strdup(PQgetvalue(pbuf,i,i_oprcode));
-       oprinfo[i].oprleft = strdup(PQgetvalue(pbuf,i,i_oprleft));
-       oprinfo[i].oprright = strdup(PQgetvalue(pbuf,i,i_oprright));
-       oprinfo[i].oprcom = strdup(PQgetvalue(pbuf,i,i_oprcom));
-       oprinfo[i].oprnegate = strdup(PQgetvalue(pbuf,i,i_oprnegate));
-       oprinfo[i].oprrest = strdup(PQgetvalue(pbuf,i,i_oprrest));
-       oprinfo[i].oprjoin = strdup(PQgetvalue(pbuf,i,i_oprjoin));
-       oprinfo[i].oprcanhash = strdup(PQgetvalue(pbuf,i,i_oprcanhash));
-       oprinfo[i].oprlsortop = strdup(PQgetvalue(pbuf,i,i_oprlsortop));
-       oprinfo[i].oprrsortop = strdup(PQgetvalue(pbuf,i,i_oprrsortop));
-    }
-
-    PQclear(res+1);
-    PQexec("end");
-
-    return oprinfo;
-}
-
-
-/*
- * getAggregates:
- *    read all the user-defined aggregates in the system catalogs and
- * return them in the AggInfo* structure
- *
- * numAggs is set to the number of aggregates read in 
- *    
- *
- */
-AggInfo*
-getAggregates(int *numAggs)
-{
-    char* res;
-    PortalBuffer *pbuf;
-    int ntups;
-    int i;
-    char query[MAXQUERYLEN];
-    AggInfo *agginfo;
-
-    int i_oid;
-    int i_aggname;
-    int i_aggtransfn1;
-    int i_aggtransfn2;
-    int i_aggfinalfn;
-    int i_aggtranstype1;
-    int i_aggbasetype;
-    int i_aggtranstype2;
-    int i_agginitval1;
-    int i_agginitval2;
-
-    /* find all user-defined aggregates */
-
-    PQexec("begin");
-/*
-    sprintf(query, 
-           "SELECT oid, aggname, aggtransfn1, aggtransfn2, aggfinalfn, aggtranstype1, aggbasetype, aggtranstype2, agginitval1, agginitval2 from pg_aggregate;");
-*/
-    sprintf(query, 
-           "retrieve (a.oid, a.aggname, a.aggtransfn1, a.aggtransfn2, a.aggfinalfn, a.aggtranstype1, a.aggbasetype, a.aggtranstype2, a.agginitval1, a.agginitval2) from a in pg_aggregate");
-
-    res = PQexec(query);
-    pbuf = PQparray(res+1);
-    ntups = PQntuplesGroup(pbuf,0);
-    *numAggs = ntups;
-
-    agginfo = (AggInfo*)malloc(ntups * sizeof(AggInfo));
-    
-    i_oid = PQfnumberGroup(pbuf,0,"oid");
-    i_aggname = PQfnumberGroup(pbuf,0,"aggname");
-    i_aggtransfn1 = PQfnumberGroup(pbuf,0,"aggtransfn1");
-    i_aggtransfn2 = PQfnumberGroup(pbuf,0,"aggtransfn2");
-    i_aggfinalfn = PQfnumberGroup(pbuf,0,"aggfinalfn");
-    i_aggtranstype1 = PQfnumberGroup(pbuf,0,"aggtranstype1");
-    i_aggbasetype = PQfnumberGroup(pbuf,0,"aggbasetype");
-    i_aggtranstype2 = PQfnumberGroup(pbuf,0,"aggtranstype2");
-    i_agginitval1 = PQfnumberGroup(pbuf,0,"agginitval1");
-    i_agginitval2 = PQfnumberGroup(pbuf,0,"agginitval2");
-
-    for (i=0;i<ntups;i++) {
-       agginfo[i].oid = strdup(PQgetvalue(pbuf,i,i_oid));
-       agginfo[i].aggname = strdup(PQgetvalue(pbuf,i,i_aggname));
-       agginfo[i].aggtransfn1 = strdup(PQgetvalue(pbuf,i,i_aggtransfn1));
-       agginfo[i].aggtransfn2 = strdup(PQgetvalue(pbuf,i,i_aggtransfn2));
-       agginfo[i].aggfinalfn = strdup(PQgetvalue(pbuf,i,i_aggfinalfn));
-       agginfo[i].aggtranstype1 = strdup(PQgetvalue(pbuf,i,i_aggtranstype1));
-       agginfo[i].aggbasetype = strdup(PQgetvalue(pbuf,i,i_aggbasetype));
-       agginfo[i].aggtranstype2 = strdup(PQgetvalue(pbuf,i,i_aggtranstype2));
-       agginfo[i].agginitval1 = strdup(PQgetvalue(pbuf,i,i_agginitval1));
-       agginfo[i].agginitval2 = strdup(PQgetvalue(pbuf,i,i_agginitval2));
-    }
-
-    PQclear(res+1);
-    PQexec("end");
-
-    return agginfo;
-}
-
-/*
- * getFuncs:
- *    read all the user-defined functions in the system catalogs and
- * return them in the FuncInfo* structure
- *
- * numFuncs is set to the number of functions read in 
- *    
- *
- */
-FuncInfo*
-getFuncs(int *numFuncs)
-{
-    char* res;
-    PortalBuffer *pbuf;
-    int ntups;
-    int i, j;
-    char query[MAXQUERYLEN];
-    FuncInfo *finfo;
-    char *proargtypes;
-
-    int i_oid;
-    int i_proname;
-    int i_proowner;
-    int i_prolang;
-    int i_pronargs;
-    int i_proargtypes;
-    int i_prorettype;
-    int i_proretset;
-    int i_prosrc;
-    int i_probin;
-
-   /* find all user-defined funcs */
-
-    PQexec("begin");
-
-/*
-    sprintf(query, 
-           "SELECT oid, proname, proowner, prolang, pronargs, prorettype, proretset, proargtypes, prosrc, probin from pg_proc where oid > '%d'::oid", 
-           g_last_builtin_oid);
-*/
-    sprintf(query, 
-           "retrieve (f.oid, f.proname, f.proowner, f.prolang, f.pronargs, f.prorettype, f.proretset, f.proargtypes, f.prosrc, f.probin) from f in pg_proc where f.oid > \"%d\"::oid", 
-           g_last_builtin_oid);
-
-    res = PQexec(query);
-    pbuf = PQparray(res+1);
-    ntups = PQntuplesGroup(pbuf,0);
-    
-    *numFuncs = ntups;
-
-    finfo = (FuncInfo*)malloc(ntups * sizeof(FuncInfo));
-
-    i_oid = PQfnumberGroup(pbuf,0,"oid");
-    i_proname = PQfnumberGroup(pbuf,0,"proname");
-    i_proowner = PQfnumberGroup(pbuf,0,"proowner");
-    i_prolang = PQfnumberGroup(pbuf,0,"prolang");
-    i_pronargs = PQfnumberGroup(pbuf,0,"pronargs");
-    i_proargtypes = PQfnumberGroup(pbuf,0,"proargtypes");
-    i_prorettype = PQfnumberGroup(pbuf,0,"prorettype");
-    i_proretset = PQfnumberGroup(pbuf,0,"proretset");
-    i_prosrc = PQfnumberGroup(pbuf,0,"prosrc");
-    i_probin = PQfnumberGroup(pbuf,0,"probin");
-    
-    for (i=0;i<ntups;i++) {
-       finfo[i].oid = strdup(PQgetvalue(pbuf,i,i_oid));
-       finfo[i].proname = strdup(PQgetvalue(pbuf,i,i_proname));
-       finfo[i].proowner = strdup(PQgetvalue(pbuf,i,i_proowner));
-
-       finfo[i].prosrc = checkForQuote(PQgetvalue(pbuf,i,i_prosrc));
-       finfo[i].probin = strdup(PQgetvalue(pbuf,i,i_probin));
-
-       finfo[i].prorettype = strdup(PQgetvalue(pbuf,i,i_prorettype));
-       finfo[i].retset = (strcmp(PQgetvalue(pbuf,i,i_proretset),"t") == 0);
-       finfo[i].nargs = atoi(PQgetvalue(pbuf,i,i_pronargs));
-       finfo[i].lang = (atoi(PQgetvalue(pbuf,i,i_prolang)) == C_PROLANG_OID);
-
-       parseArgTypes(finfo[i].argtypes, PQgetvalue(pbuf,i,i_proargtypes));
-
-       finfo[i].dumped = 0;
-    }
-
-    PQclear(res+1);
-    PQexec("end");
-
-    return finfo;
-
-}
-
-/*
- * getTables
- *    read all the user-defined tables (no indices, no catalogs)
- * in the system catalogs return them in the TableInfo* structure
- *
- * numTables is set to the number of tables read in 
- *    
- *
- */
-TableInfo*
-getTables(int *numTables)
-{
-    char* res;
-    PortalBuffer* pbuf;
-    int ntups;
-    int i, j;
-    char query[MAXQUERYLEN];
-    TableInfo *tblinfo;
-    
-    int i_oid;
-    int i_relname;
-    int i_relarch;
-
-    /* find all the user-defined tables (no indices and no catalogs),
-     ordering by oid is important so that we always process the parent
-     tables before the child tables when traversing the tblinfo* */
-    PQexec("begin");
-/*
-    sprintf(query, 
-           "SELECT oid, relname, relarch from pg_class where relkind = 'r' and relname !~ '^pg_' order by oid;");
-*/
-    sprintf(query, 
-           "retrieve (r.oid, r.relname, r.relarch) from r in pg_class where r.relkind = \"r\" and r.relname !~ \"^pg_\" and r.relname !~ \"^Xinv\" sort by oid");
-
-    res = PQexec(query);
-    pbuf = PQparray(res+1);
-    ntups = PQntuplesGroup(pbuf,0);
-
-    *numTables = ntups;
-
-    tblinfo = (TableInfo*)malloc(ntups * sizeof(TableInfo));
-
-    i_oid = PQfnumberGroup(pbuf,0,"oid");
-    i_relname = PQfnumberGroup(pbuf,0,"relname");
-    i_relarch = PQfnumberGroup(pbuf,0,"relarch");
-
-    for (i=0;i<ntups;i++) {
-       tblinfo[i].oid = strdup(PQgetvalue(pbuf,i,i_oid));
-       tblinfo[i].relname = strdup(PQgetvalue(pbuf,i,i_relname));
-       tblinfo[i].relarch = strdup(PQgetvalue(pbuf,i,i_relarch));
-    }
-
-    PQclear(res+1);
-    PQexec("end");
-
-    return tblinfo;
-
-}
-
-/*
- * getInherits
- *    read all the inheritance information
- * from the system catalogs return them in the InhInfo* structure
- *
- * numInherits is set to the number of tables read in 
- *    
- *
- */
-InhInfo*
-getInherits(int *numInherits)
-{
-    char* res;
-    PortalBuffer* pbuf;
-    int ntups;
-    int i;
-    char query[MAXQUERYLEN];
-    InhInfo *inhinfo;
-    
-    int i_inhrel;
-    int i_inhparent;
-
-    /* find all the inheritance information */
-    PQexec("begin");
-/*
-    sprintf(query,  "SELECT inhrel, inhparent from pg_inherits");
-*/
-    sprintf(query,  "retrieve (i.inhrel, i.inhparent) from i in pg_inherits");
-
-    res = PQexec(query);
-    pbuf = PQparray(res+1);
-    ntups = PQntuplesGroup(pbuf,0);
-
-    *numInherits = ntups;
-
-    inhinfo = (InhInfo*)malloc(ntups * sizeof(InhInfo));
-
-    i_inhrel = PQfnumberGroup(pbuf,0,"inhrel");
-    i_inhparent = PQfnumberGroup(pbuf,0,"inhparent");
-
-    for (i=0;i<ntups;i++) {
-       inhinfo[i].inhrel = strdup(PQgetvalue(pbuf,i,i_inhrel));
-       inhinfo[i].inhparent = strdup(PQgetvalue(pbuf,i,i_inhparent));
-    }
-
-    PQclear(res+1);
-    PQexec("end");
-    return inhinfo;
-}
-
-/*
- * getTableAttrs -
- *    for each table in tblinfo, read its attributes types and names
- * 
- * this is implemented in a very inefficient way right now, looping
- * through the tblinfo and doing a join per table to find the attrs and their 
- * types
- *
- *  modifies tblinfo
- */
-void
-getTableAttrs(TableInfo* tblinfo, int numTables)
-{
-    int i,j;
-    char q[MAXQUERYLEN];
-    int i_attname;
-    int i_typname;
-    char *res;
-    PortalBuffer *pbuf;
-    int ntups;
-
-    for (i=0;i<numTables;i++)  {
-
-       /* find all the user attributes and their types*/
-       /* we must read the attribute names in attribute number order! */
-       /* because we will use the attnum to index into the attnames array 
-          later */
-/*
-       sprintf(q,"SELECT a.attnum, a.attname, t.typname from pg_attribute a, pg_type t where a.attrelid = '%s' and a.atttypid = t.oid and a.attnum > 0 order by attnum",tblinfo[i].oid);
-*/
-if (g_verbose) 
-    fprintf(stderr,"%s finding the attrs and types for table: %s %s\n",
-           g_comment_start,
-           tblinfo[i].relname,
-           g_comment_end);
-
-
-       sprintf(q,"retrieve (a.attnum, a.attname, t.typname) from a in pg_attribute, t in pg_type where a.attrelid = \"%s\" and a.atttypid = t.oid and a.attnum > 0 sort by attnum",tblinfo[i].oid);
-
-       res = PQexec(q);
-       pbuf = PQparray(res+1);
-       ntups = PQntuplesGroup(pbuf,0);
-
-       i_attname = PQfnumberGroup(pbuf,0,"attname");
-       i_typname = PQfnumberGroup(pbuf,0,"typname");
-
-       tblinfo[i].numatts = ntups;
-       tblinfo[i].attnames = (char**) malloc( ntups * sizeof(char*));
-       tblinfo[i].out_attnames = (char**) malloc( ntups * sizeof(char*));
-       tblinfo[i].typnames = (char**) malloc( ntups * sizeof(char*));
-       tblinfo[i].inhAttrs = (int*) malloc (ntups * sizeof(int));
-       tblinfo[i].parentRels = NULL;
-       tblinfo[i].numParents = 0;
-       for (j=0;j<ntups;j++) {
-           tblinfo[i].attnames[j] = strdup(PQgetvalue(pbuf,j,i_attname));
-           tblinfo[i].typnames[j] = strdup(PQgetvalue(pbuf,j,i_typname));
-           tblinfo[i].inhAttrs[j] = 0; /* this flag is set in flagInhAttrs()*/
-       }
-       PQclear(res+1);
-    } 
-}
-
-
-/*
- * getIndices
- *    read all the user-defined indices information
- * from the system catalogs return them in the InhInfo* structure
- *
- * numIndices is set to the number of indices read in 
- *    
- *
- */
-IndInfo*
-getIndices(int *numIndices)
-{
-    int i;
-    char query[MAXQUERYLEN];
-    char *res;
-    PortalBuffer *pbuf;
-    int ntups;
-    IndInfo *indinfo;
-
-    int i_indexrelname;
-    int i_indrelname;
-    int i_indamname;
-    int i_indproc;
-    int i_indkey;
-    int i_indclassname;
-    
-    /* find all the user-define indices.
-       We do not handle partial indices.
-       We also assume that only single key indices 
-
-       this is a 5-way join !!
-    */
-       
-    PQexec("begin");
-/*
-    sprintf(query,
-           "SELECT t1.relname as indexrelname, t2.relname as indrelname, i.indproc, i.indkey[0], o.opcname as indclassname, a.amname as indamname from pg_index i, pg_class t1, pg_class t2, pg_opclass o, pg_am a where t1.oid = i.indexrelid and t2.oid = i.indrelid and o.oid = i.indclass[0] and t1.relam = a.oid and i.indexrelid > '%d'::oid and t2.relname !~ '^pg_';",
-           g_last_builtin_oid);
-*/
-
-    sprintf(query,
-           "retrieve (indexrelname = t1.relname, indrelname = t2.relname, i.indproc, i.indkey[0], indclassname = o.opcname, indamname = a.amname) from i in pg_index, t1 in pg_class, t2 in pg_class, o in pg_opclass, a in pg_am where t1.oid = i.indexrelid and t2.oid = i.indrelid and o.oid = i.indclass[0] and t1.relam = a.oid and i.indexrelid > \"%d\"::oid and t2.relname !~ \"^pg_\" and t1.relname !~ \"^Xinx\"",
-           g_last_builtin_oid);
-
-    res = PQexec(query);
-    pbuf = PQparray(res+1);
-    ntups = PQntuplesGroup(pbuf,0);
-
-    *numIndices = ntups;
-
-    indinfo = (IndInfo*)malloc(ntups * sizeof (IndInfo));
-
-    i_indexrelname = PQfnumberGroup(pbuf,0,"indexrelname");
-    i_indrelname = PQfnumberGroup(pbuf,0,"indrelname");
-    i_indamname = PQfnumberGroup(pbuf,0,"indamname");
-    i_indproc = PQfnumberGroup(pbuf,0,"indproc");
-    i_indkey = PQfnumberGroup(pbuf,0,"indkey");
-    i_indclassname = PQfnumberGroup(pbuf,0,"indclassname");
-
-    for (i=0;i<ntups;i++) {
-       indinfo[i].indexrelname = strdup(PQgetvalue(pbuf,i,i_indexrelname));
-       indinfo[i].indrelname = strdup(PQgetvalue(pbuf,i,i_indrelname));
-       indinfo[i].indamname = strdup(PQgetvalue(pbuf,i,i_indamname));
-       indinfo[i].indproc = strdup(PQgetvalue(pbuf,i,i_indproc));
-       indinfo[i].indkey = strdup(PQgetvalue(pbuf,i,i_indkey));
-       indinfo[i].indclassname = strdup(PQgetvalue(pbuf,i,i_indclassname));
-    }
-    PQclear(res+1);
-    PQexec("end");
-
-    return indinfo;
-}
-
-/*
- * dumpTypes
- *    writes out to fout queries to recreate all the user-defined types
- *
- */
-
-void
-dumpTypes(FILE* fout, FuncInfo* finfo, int numFuncs,
-         TypeInfo* tinfo, int numTypes)
-{
-    int i;
-    char q[MAXQUERYLEN];
-    int funcInd;
-
-    for (i=0;i<numTypes;i++) {
-
-       /* skip all the builtin types */
-       if (atoi(tinfo[i].oid) < g_last_builtin_oid)
-           continue;
-
-       /* skip relation types */
-       if (atoi(tinfo[i].typrelid) != 0)
-           continue;
-
-       /* skip all array types that start w/ underscore */
-       if ( (tinfo[i].typname[0] == '_') &&
-            (strcmp(tinfo[i].typinput, "array_in") == 0))
-           continue;
-
-       /* before we create a type, we need to create the input and
-          output functions for it, if they haven't been created already */
-       funcInd = findFuncByName(finfo, numFuncs, tinfo[i].typinput);
-       if (funcInd !=  -1) 
-           dumpOneFunc(fout,finfo,funcInd,tinfo,numTypes);
-
-       funcInd = findFuncByName(finfo, numFuncs, tinfo[i].typoutput);
-       if (funcInd !=  -1) 
-           dumpOneFunc(fout,finfo,funcInd,tinfo,numTypes);
-
-       if (g_outputSQL) {
-           sprintf(q,
-                   "CREATE TYPE %s ( internallength = %s, externallength = %s, input = %s, output = %s, send = %s, receive = %s, default = '%s'",
-                   tinfo[i].typname,
-                   tinfo[i].typlen,
-                   tinfo[i].typprtlen,
-                   tinfo[i].typinput,
-                   tinfo[i].typoutput,
-                   tinfo[i].typsend,
-                   tinfo[i].typreceive,
-                   tinfo[i].typdefault);
-       } else {
-           sprintf(q,
-                   "define type %s ( internallength = %s, externallength = %s, input = %s, output = %s, send = %s, receive = %s, default = \"%s\"",
-                   tinfo[i].typname,
-                   (strcmp(tinfo[i].typlen, "-1") == 0) ? "variable" : tinfo[i].typlen,
-                   (strcmp(tinfo[i].typprtlen, "-1") == 0) ? "variable " :tinfo[i].typprtlen,
-                   tinfo[i].typinput,
-                   tinfo[i].typoutput,
-                   tinfo[i].typsend,
-                   tinfo[i].typreceive,
-                   tinfo[i].typdefault);
-       }
-
-       if (tinfo[i].isArray) {
-           char* elemType;
-
-           elemType = findTypeByOid(tinfo, numTypes, tinfo[i].typelem);
-           
-           if (g_outputSQL)
-               sprintf(q,"%s, element = %s, delimiter = '%s'",
-                       q, elemType,tinfo[i].typdelim);
-           else
-               sprintf(q,"%s, element = %s, delimiter = \"%s\"",
-                       q, elemType,tinfo[i].typdelim);
-       }
-       if (tinfo[i].passedbyvalue)
-           strcat(q,",passedbyvalue");
-       else
-           strcat(q,")");
-
-       if (g_outputSQL) 
-           strcat(q,";\n");
-       else
-           strcat(q,"\\g\n");
-       
-       fputs(q,fout);
-    }
-    fflush(fout);
-}
-
-/*
- * dumpFuncs
- *    writes out to fout the queries to recreate all the user-defined functions
- *
- */
-void
-dumpFuncs(FILE* fout, FuncInfo* finfo, int numFuncs, 
-         TypeInfo *tinfo, int numTypes)
-{
-    int i;
-    char q[MAXQUERYLEN];
-    for (i=0;i<numFuncs;i++)  {
-       dumpOneFunc(fout,finfo,i,tinfo,numTypes);
-    }
-}
-
-/*
- * dumpOneFunc:
- *    dump out only one function,  the index of which is given in the third
- *  argument
- *
- */
-
-void
-dumpOneFunc(FILE* fout, FuncInfo* finfo, int i,
-           TypeInfo *tinfo, int numTypes)
-{
-    char q[MAXQUERYLEN];
-    int j;
-    
-    if (finfo[i].dumped)
-       return;
-    else
-       finfo[i].dumped = 1;
-
-    if (g_outputSQL) {
-       sprintf(q,"CREATE FUNCTION %s (",finfo[i].proname);
-
-       for (j=0;j<finfo[i].nargs;j++) {
-           char* typname;
-           typname = findTypeByOid(tinfo, numTypes, finfo[i].argtypes[j]);
-           sprintf(q, "%s%s%s",
-                   q,  
-               (j > 0) ? "," : "",
-                   typname);
-       }
-       sprintf(q,"%s ) RETURNS %s%s AS '%s' LANGUAGE '%s';\n",
-               q, 
-               finfo[i].retset ? " SETOF " : "",
-               findTypeByOid(tinfo, numTypes, finfo[i].prorettype),
-               (finfo[i].lang) ? finfo[i].probin : finfo[i].prosrc,
-               (finfo[i].lang) ? "C" : "SQL");
-if (finfo[i].lang != 1) {
-    fprintf(stderr, 
-           "%s WARNING: text of function named %s is in POSTQUEL %s\n",
-           g_comment_start,
-           finfo[i].proname,
-           g_comment_end);
-}
-
-    } else {
-       sprintf(q,"define function %s ( language = \"%s\", returntype = %s%s) arg is (",
-               finfo[i].proname,
-               (finfo[i].lang) ? "c" : "postquel",
-               finfo[i].retset ? " setof " : "",
-               findTypeByOid(tinfo, numTypes, finfo[i].prorettype)
-               );
-
-       for (j=0;j<finfo[i].nargs;j++) {
-           char* typname;
-           typname = findTypeByOid(tinfo, numTypes, finfo[i].argtypes[j]);
-           sprintf(q, "%s%s%s",
-                   q,  
-               (j > 0) ? "," : "",
-                   typname);
-       }
-       sprintf(q,"%s ) as \"%s\"\\g\n",
-               q, 
-               (finfo[i].lang) ? finfo[i].probin : finfo[i].prosrc);
-    }
-    
-    fputs(q,fout);
-    fflush(fout);
-
-}
-
-/*
- * dumpOprs
- *    writes out to fout the queries to recreate all the user-defined operators
- *
- */
-void 
-dumpOprs(FILE* fout, OprInfo* oprinfo, int numOperators,
-        TypeInfo *tinfo, int numTypes)
-{
-    int i;
-    char q[MAXQUERYLEN];
-    char leftarg[MAXQUERYLEN];
-    char rightarg[MAXQUERYLEN];
-    char commutator[MAXQUERYLEN];
-    char negator[MAXQUERYLEN];
-    char restrict[MAXQUERYLEN];
-    char join[MAXQUERYLEN];
-    char sortop[MAXQUERYLEN];
-    char comma[2];
-
-    for (i=0;i<numOperators;i++) {
-
-       /* skip all the builtin oids */
-       if (atoi(oprinfo[i].oid) < g_last_builtin_oid)
-           continue;
-
-       /* some operator are invalid because they were the result
-          of user defining operators before commutators exist */
-       if (strcmp(oprinfo[i].oprcode, "-") == 0)
-           continue;
-
-       leftarg[0] = '\0';
-       rightarg[0] = '\0';
-       /* right unary means there's a left arg
-          and left unary means there's a right arg */
-       if (strcmp(oprinfo[i].oprkind, "r") == 0 || 
-           strcmp(oprinfo[i].oprkind, "b") == 0 ) {
-           sprintf(leftarg, ", %s = %s ",
-                   (g_outputSQL) ? "LEFTARG" : "arg1",
-                   findTypeByOid(tinfo, numTypes, oprinfo[i].oprleft));
-       } 
-       if (strcmp(oprinfo[i].oprkind, "l") == 0 || 
-           strcmp(oprinfo[i].oprkind, "b") == 0 ) {
-           sprintf(rightarg, ", %s = %s ",
-                   (g_outputSQL) ? "RIGHTARG" : "arg2",
-                   findTypeByOid(tinfo, numTypes, oprinfo[i].oprright));
-       }
-       if (strcmp(oprinfo[i].oprcom, "0") == 0) 
-           commutator[0] = '\0';
-       else
-           sprintf(commutator,", commutator = %s ",
-                   findOprByOid(oprinfo, numOperators, oprinfo[i].oprcom));
-
-       if (strcmp(oprinfo[i].oprnegate, "0") == 0) 
-           negator[0] = '\0';
-       else
-           sprintf(negator,", negator = %s ",
-                   findOprByOid(oprinfo, numOperators, oprinfo[i].oprnegate));
-
-       if (strcmp(oprinfo[i].oprrest, "-") == 0)
-           restrict[0] = '\0';
-       else
-           sprintf(restrict,", restrict = %s ", oprinfo[i].oprrest);
-                   
-       if (strcmp(oprinfo[i].oprjoin,"-") == 0)
-           join[0] = '\0';
-       else
-           sprintf(join,", join = %s ", oprinfo[i].oprjoin);
-                   
-       if (strcmp(oprinfo[i].oprlsortop, "0") == 0) 
-           sortop[0] = '\0';
-       else
-           {
-           sprintf(sortop,", SORT = %s ",
-                   findOprByOid(oprinfo, numOperators,
-                                oprinfo[i].oprlsortop));
-           if (strcmp(oprinfo[i].oprrsortop, "0") != 0)
-               sprintf(sortop, "%s , %s", sortop, 
-                       findOprByOid(oprinfo, numOperators,
-                                    oprinfo[i].oprlsortop));
-       }
-
-       if (g_outputSQL)  {
-           sprintf(q,
-                   "CREATE OPERATOR %s (PROCEDURE = %s %s %s %s %s %s %s %s %s);\n ",
-                   oprinfo[i].oprname,
-                   oprinfo[i].oprcode,
-                   leftarg,
-                   rightarg,
-                   commutator,
-                   negator,
-                   restrict,
-                   (strcmp(oprinfo[i].oprcanhash, "t")) ? ", HASHES" : "",
-                   join,
-                   sortop);
-       } else
-           sprintf(q,
-                   "define operator %s (procedure = %s %s %s %s %s %s %s %s %s)\\g\n ",
-                   oprinfo[i].oprname,
-                   oprinfo[i].oprcode,
-                   leftarg,
-                   rightarg,
-                   commutator,
-                   negator,
-                   restrict,
-                   (strcmp(oprinfo[i].oprcanhash, "t")) ? ", hashes" : "",
-                   join,
-                   sortop);
-
-       fputs(q,fout);
-    }
-    fflush(fout);
-
-}
-
-/*
- * dumpAggs
- *    writes out to fout the queries to create all the user-defined aggregates
- *
- */
-void
-dumpAggs(FILE* fout, AggInfo* agginfo, int numAggs,
-       TypeInfo *tinfo, int numTypes)
-{
-    int i;
-    char q[MAXQUERYLEN];
-    char sfunc1[MAXQUERYLEN];
-    char sfunc2[MAXQUERYLEN];
-    char finalfunc[MAXQUERYLEN];
-    char *basetype;
-    char *stype1;
-    char *stype2;
-    char comma1[2], comma2[2];
-
-    for (i=0;i<numAggs;i++) {
-       /* skip all the builtin oids */
-       if (atoi(agginfo[i].oid) < g_last_builtin_oid)
-           continue;
-
-       if ( strcmp(agginfo[i].aggtransfn1, "-") == 0) 
-           sfunc1[0] = '\0';
-       else {
-           sprintf(sfunc1, 
-                   "sfunc1 = %s, basetype = %s, stype1 = %s",
-                   agginfo[i].aggtransfn1,
-                   findTypeByOid(tinfo,numTypes,agginfo[i].aggbasetype),
-                   findTypeByOid(tinfo,numTypes,agginfo[i].aggtranstype1));
-           if (agginfo[i].agginitval1) {
-               if (g_outputSQL)
-                   sprintf(sfunc1, "%s ,INITCOND1 = '%s'",
-                           sfunc1, agginfo[i].agginitval1);
-               else
-                   sprintf(sfunc1, "%s ,initcond1 = \"%s\"",
-                           sfunc1, agginfo[i].agginitval1);
-
-           }
-           
-       }
-
-       if ( strcmp(agginfo[i].aggtransfn2, "-") == 0) 
-           sfunc2[0] = '\0';
-       else {
-           sprintf(sfunc2, 
-                   "sfunc2 = %s, stype2 = %s",
-                   agginfo[i].aggtransfn2,
-                   findTypeByOid(tinfo,numTypes,agginfo[i].aggtranstype2));
-           if (agginfo[i].agginitval2) {
-               if (g_outputSQL)
-                   sprintf(sfunc2,"%s ,initcond2 = '%s'",
-                           sfunc2, agginfo[i].agginitval2);
-               else
-                   sprintf(sfunc2,"%s ,initcond2 = \"%s\"",
-                           sfunc2, agginfo[i].agginitval2);
-
-           }
-       }
-       
-       if ( strcmp(agginfo[i].aggfinalfn, "-") == 0)
-           finalfunc[0] = '\0';
-       else {
-           sprintf(finalfunc, "finalfunc = %s", agginfo[i].aggfinalfn);
-       }
-       if (sfunc1[0] != '\0' && sfunc2[0] != '\0') {
-           comma1[0] = ','; comma1[1] = '\0';
-       } else
-           comma1[0] = '\0';
-
-       if (finalfunc[0] != '\0' && (sfunc1[0] != '\0' || sfunc2[0] != '\0')) {
-           comma2[0] = ',';comma2[1] = '\0';
-       } else
-           comma2[0] = '\0';
-
-       if (g_outputSQL) {
-           sprintf(q,"CREATE AGGREGATE %s ( %s %s %s %s %s );\n",
-                   agginfo[i].aggname,
-                   sfunc1,
-                   comma1,
-                   sfunc2,
-                   comma2,
-                   finalfunc);
-       } else {
-           sprintf(q,"define aggregate %s ( %s %s %s %s %s )\\g\n",
-                   agginfo[i].aggname,
-                   sfunc1,
-                   comma1,
-                   sfunc2,
-                   comma2,
-                   finalfunc);
-       }
-       
-       fputs(q,fout);
-    }
-    fflush(fout);
-}
-
-/*
- * dumpTables:
- *    write out to fout all the user-define tables
- */
-
-void
-dumpTables(FILE* fout, TableInfo *tblinfo, int numTables,
-          InhInfo *inhinfo, int numInherits,
-          TypeInfo *tinfo, int numTypes)
-{
-    int i,j,k;
-    char q[MAXQUERYLEN];
-    char **parentRels;  /* list of names of parent relations */
-    int numParents;
-    char *res;
-    PortalBuffer *pbuf;
-    int ntups;
-    int actual_atts; /* number of attrs in this CREATE statment */
-    char *archiveMode;
-
-    for (i=0;i<numTables;i++) {
-       parentRels = tblinfo[i].parentRels;
-       numParents = tblinfo[i].numParents;
-
-       if (g_outputSQL) {
-           sprintf(q, "CREATE TABLE %s (", tblinfo[i].relname);
-       } else {
-           sprintf(q, "create %s (", tblinfo[i].relname);
-       }
-       
-       actual_atts = 0;
-       for (j=0;j<tblinfo[i].numatts;j++) {
-           if (tblinfo[i].inhAttrs[j] == 0) {
-               if (g_outputSQL) {
-                   sprintf(q, "%s%s%s %s",
-                           q,
-                           (actual_atts > 0) ? ", " : "",
-                           tblinfo[i].attnames[j],
-                           tblinfo[i].typnames[j]);
-               }
-               else { 
-                   sprintf(q, "%s%s %s = %s",
-                           q,
-                           (actual_atts > 0) ? ", " : "",
-                           tblinfo[i].attnames[j],
-                           tblinfo[i].typnames[j]);
-
-               }
-               actual_atts++;
-           }
-       }
-
-       strcat(q,")");
-
-       if (numParents > 0) {
-           int oa = 0; /* index for the out_attnames array */
-           int l;
-           int parentInd;
-
-           sprintf(q, "%s inherits ( ",q);
-           for (k=0;k<numParents;k++){
-               sprintf(q, "%s%s%s",
-                       q,
-                       (k>0) ? ", " : "",
-                       parentRels[k]);
-               parentInd = findTableByName(tblinfo,numTables,parentRels[k]);
-
-               /* the out_attnames are in order of the out_attnames
-                  of the parent tables */
-               for (l=0; l<tblinfo[parentInd].numatts;l++)
-                   tblinfo[i].out_attnames[oa++] =
-                       tblinfo[parentInd].out_attnames[l];
-           }
-
-           /* include non-inherited attrs in out_attnames also,
-              oa should never exceed numatts */
-           for (l=0; l < tblinfo[i].numatts && oa < tblinfo[i].numatts ; l++)
-               if (tblinfo[i].inhAttrs[l] == 0) {
-                   tblinfo[i].out_attnames[oa++] = 
-                       tblinfo[i].attnames[l];
-               }
-
-           strcat(q,")");
-       }  else { /* for non-inherited tables, out_attnames 
-                    and attnames are the same  */
-           tblinfo[i].out_attnames = tblinfo[i].attnames;
-       }
-
-       switch(tblinfo[i].relarch[0]) {
-       case 'n':
-           archiveMode = "none";
-           break;
-       case 'h':
-           archiveMode = "heavy";
-           break;
-       case 'l':
-           archiveMode = "light";
-           break;
-       default:
-           fprintf(stderr, "unknown archive mode\n");
-           archiveMode = "none";
-           break;
-       }
-           
-       if (g_outputSQL) {
-           sprintf(q, "%s archive = %s;\n",
-                   q,
-                   archiveMode);
-       } else {
-           sprintf(q, "%s archive = %s\\g\n",
-                   q,
-                   archiveMode);
-       }
-           
-       fputs(q,fout);
-    }
-    fflush(fout);
-}
-
-/*
- * dumpIndices:
- *    write out to fout all the user-define indices
- */
-void 
-dumpIndices(FILE* fout, IndInfo* indinfo, int numIndices,
-           TableInfo* tblinfo, int numTables)
-{
-    int i,j;
-    int tableInd;
-    char *attname;  /* the name of the indexed attribute  */
-    char *funcname; /* the name of the function to compute the index key from*/
-    int indkey;
-
-    char q[MAXQUERYLEN];
-    char *res;
-    PortalBuffer *pbuf;
-
-    for (i=0;i<numIndices;i++) {
-       tableInd = findTableByName(tblinfo, numTables,
-                                  indinfo[i].indrelname);
-       indkey = atoi(indinfo[i].indkey) - 1; 
-       attname = tblinfo[tableInd].attnames[indkey];
-       if (strcmp(indinfo[i].indproc,"0") == 0) {
-           funcname = NULL;
-       } else {
-           /* the funcname is an oid which we use to 
-              find the name of the pg_proc.  We need to do this
-              because getFuncs() only reads in the user-defined funcs
-              not all the funcs.  We might not find what we want
-              by looking in FuncInfo**/
-           sprintf(q,
-                   "retrieve(p.proname) from p in pg_proc where p.oid = \"%s\"::oid",
-                   indinfo[i].indproc);
-           res = PQexec(q);
-           pbuf = PQparray(res+1);
-           funcname = strdup(PQgetvalue(pbuf,0,
-                                        PQfnumberGroup(pbuf,0,"proname")));
-           PQclear(res+1);
-       }
-       if (g_outputSQL) {
-           sprintf(q,"CREATE INDEX %s on %s using %s (",
-                   indinfo[i].indexrelname,
-                   indinfo[i].indrelname,
-                   indinfo[i].indamname);
-       } else {
-           sprintf(q,"define index %s on %s using %s (",
-                   indinfo[i].indexrelname,
-                   indinfo[i].indrelname,
-                   indinfo[i].indamname);
-
-       }
-       if (funcname) {
-           sprintf(q, "%s %s(%s) %s",
-                   q,funcname, attname, indinfo[i].indclassname);
-           free(funcname); 
-       } else
-           sprintf(q, "%s %s %s",
-                   q,attname,indinfo[i].indclassname);
-
-       if (g_outputSQL) {
-           strcat(q,");\n");
-       } else
-           strcat(q,")\\g\n");
-
-       fputs(q,fout);
-    }
-    fflush(fout);
-}
-
-
-/*
- * dumpClasses -
- *    dump the contents of all the classes.
- */
-void
-dumpClasses(TableInfo *tblinfo, int numTables, FILE *fout)
-{
-    char query[255];
-    char *res;
-    int i,j;
-
-    int *attrmap; /* this is an vector map of how the actual attributes
-                    map to the corresponding output attributes.
-                    This is necessary because of a difference between
-                    SQL and POSTQUEL in the order of inherited attributes */
-
-    for(i = 0; i < numTables; i++) {
-       char *classname = tblinfo[i].relname;
-
-       if (g_outputSQL) 
-           fprintf(fout, "copy %s from stdin;\n", classname);
-       else
-           fprintf(fout, "copy %s from stdin\\g\n", classname);
-
-       sprintf(query, "retrieve (p.all) from p in %s", classname);
-       res = PQexec(query);
-
-       attrmap = (int*)malloc(tblinfo[i].numatts * sizeof(int));
-       if (tblinfo[i].numParents == 0) {
-           /* table with no inheritance use an identity mapping */
-           for (j=0;j<tblinfo[i].numatts;j++)
-               attrmap[j] = j;
-       } else {
-           int n = tblinfo[i].numatts;
-           for (j=0;j < n;j++) {
-               attrmap[j] = strInArray(tblinfo[i].attnames[j],
-                                      tblinfo[i].out_attnames,
-                                      n);
-           }
-       }
-
-/*
-       {
-           int j;
-           for (j=0;j<tblinfo[i].numatts;j++) {
-               fprintf(stderr,":%s\t",tblinfo[i].out_attnames[j]);
-           }
-           fprintf(stderr,"\n");
-       }
-*/
-
-       fflush(stdout);
-       fflush(stderr);
-       switch (*res) {
-       case 'P':
-           dumpTuples(&(res[1]), fout, attrmap);
-           PQclear(&(res[1]));
-           break;
-       case 'E':
-       case 'R':
-           fprintf(stderr, "Error while dumping %s\n", classname);
-           exit(1);
-           break;
-       }
-
-       fprintf(fout, ".\n");
-       free(attrmap);
-    }
-}
-
-/*
- * dumpTuples --
- *    prints out the tuples in ASCII representaiton. The output is a valid
- *    input to COPY FROM stdin.
- *
- *    We only need to do this for POSTGRES 4.2 databases since the
- *    COPY TO statement doesn't escape newlines properly. It's been fixed
- *    in Postgres95.
- * 
- * the attrmap passed in tells how to map the attributes copied in to the
- * attributes copied out
- */
-void
-dumpTuples(char *portalname, FILE *fout, int* attrmap)
-{
-    PortalBuffer *pbuf;
-    int i, j, k;
-    int m, n, t;
-    char **outVals = NULL; /* values to copy out */
-
-    /* Now to examine all tuples fetched. */
-    pbuf = PQparray(portalname);
-
-    n = PQntuplesGroup(pbuf,0); /* always assume only one group */
-    m = PQnfieldsGroup(pbuf,0);
-
-    if ( m > 0 ) {
-       /*
-        * Print out the tuples but only print tuples with at least
-        * 1 field.
-        */
-       outVals = (char**)malloc(m * sizeof(char*));
-    
-       for (j = 0; j < n; j++) {
-           for (k = 0; k < m; k++) {
-               outVals[attrmap[k]] = PQgetvalue(pbuf, j, k);
-           }
-           for (k = 0; k < m; k++) {
-               char *pval = outVals[k];
-
-               if (k!=0)
-                   fputc('\t', fout);  /* delimiter for attribute */
-
-               if (pval) {
-                   while (*pval != '\0') {
-                       /* escape tabs, newlines and backslashes */
-                       if (*pval=='\t' || *pval=='\n' || *pval=='\\')
-                           fputc('\\', fout);
-                       fputc(*pval, fout);
-                       pval++;
-                   }
-               }
-           }
-           fputc('\n', fout);  /* delimiter for a tuple */
-       }
-       free (outVals);
-    }
-    
-}
-
-
-
-/*
- * findLastBuiltInOid -
- * find the last built in oid 
- * we do this by looking up the oid of 'template1' in pg_database,
- * this is probably not foolproof but comes close 
-*/
-
-int
-findLastBuiltinOid()
-{
-       char *res;
-       PortalBuffer* pbuf;
-       int ntups;
-       int last_oid;
-
-       res = PQexec("retrieve (d.oid) from d in pg_database where d.datname = \"template1\"");
-       pbuf = PQparray(res+1);
-       ntups = PQntuplesGroup(pbuf,0);
-       if (ntups != 1) {
-           fprintf(stderr,"pg_dump: couldn't find the template1 database.  You are really hosed\nGiving up\n");
-           exit(2);
-       }
-       return (atoi(PQgetvalue(pbuf,0, PQfnumberGroup(pbuf,0,"oid"))));
-
-}
-
-
-/*
- * checkForQuote:
- *    checks a string for quote characters and backslashes them
- */
-char*
-checkForQuote(char* s)
-{
-    char *r;
-    char c;
-    char *result;
-
-    int j = 0;
-
-    r = malloc(strlen(s)*3 + 1);  /* definitely long enough */
-
-    while ( (c = *s) != '\0') {
-
-       if (c == '\"') {
-           /* backslash the double quotes */
-           if (g_outputSQL) {
-               r[j++] = '\\'; 
-               c = '\'';
-           } else {
-               r[j++] = '\\';
-               r[j++] = '\\';
-           }
-       }
-       r[j++] = c;
-       s++;
-    }
-    r[j] = '\0';
-
-    result = strdup(r);
-    free(r);
-
-    return result;
-    
-}
diff --git a/src/bin/pg4_dump/pg_dump.h b/src/bin/pg4_dump/pg_dump.h
deleted file mode 100644 (file)
index 94e95b0..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * pg_dump.h
- *    header file for the pg_dump utility
- *
- * Copyright (c) 1994, Regents of the University of California
- *
- * pg_dump.h,v 1.5 1995/06/28 22:32:36 jolly Exp
- *
- *-------------------------------------------------------------------------
- */
-
-
-/* The *Info data structures run-time C structures used to store
-   system catalog information */
-   
-typedef struct _typeInfo {
-    char* oid;
-    char* typowner;
-    char* typname;
-    char* typlen;
-    char* typprtlen;
-    char* typinput;
-    char* typoutput;
-    char* typreceive;
-    char* typsend;
-    char* typelem;
-    char* typdelim;
-    char* typdefault;
-    char* typrelid;
-    int passedbyvalue;
-    int isArray;
-} TypeInfo;
-
-typedef struct _funcInfo {
-    char* oid;
-    char* proname;
-    char* proowner;
-    int lang;  /* 1 if C, else SQL */
-    int nargs;
-    char* argtypes[8];  /* should be derived from obj/fmgr.h instead of hardwired*/
-    char* prorettype;
-    int retset; /* 1 if the function returns a set, 0 otherwise */
-    char* prosrc;
-    char* probin;
-    int dumped; /* 1 if already dumped */
-} FuncInfo;
-
-typedef struct _tableInfo {
-    char *oid;
-    char *relname;
-    char *relarch;
-    int numatts;            /* number of attributes */
-    int *inhAttrs;          /* an array of flags, one for each attribute
-                             if the value is 1, then this attribute is
-                             an inherited attribute */
-    char **attnames;        /* the attribute names */
-    char **typnames;        /* fill out attributes */
-    int numParents;         /* number of (immediate) parent supertables */
-    char **parentRels;      /* names of parent relations, NULL
-                              if numParents == 0 */
-    char **out_attnames;    /* the attribute names, in the order they would
-                              be in, when the table is created in the
-                              target query language.
-                              this is needed because the SQL tables will
-                              not have the same order of attributes as
-                              the POSTQUEL tables */
-           
-} TableInfo;
-
-typedef struct _inhInfo {
-    char *oid;
-    char *inhrel;
-    char *inhparent;
-} InhInfo;
-
-typedef struct _indInfo {
-    char *indexrelname;  /* name of the secondary index class */
-    char *indrelname;    /* name of the indexed heap class */
-    char *indamname;     /* name of the access method (e.g. btree, rtree, etc.) */
-    char *indproc;       /* oid of the function to compute the index, 0 if none*/
-    char *indkey;        /* attribute number of the key attribute */
-    char *indclassname;  /* name of the opclass of the key */
-} IndInfo;
-
-typedef struct _aggInfo {
-    char *oid;
-    char *aggname;
-    char *aggtransfn1;
-    char *aggtransfn2;
-    char *aggfinalfn;
-    char *aggtranstype1;
-    char *aggbasetype;
-    char *aggtranstype2;
-    char *agginitval1;
-    char *agginitval2;
-} AggInfo;
-
-typedef struct _oprInfo {
-    char *oid;
-    char *oprname;
-    char *oprkind;   /* "b" = binary, "l" = left unary, "r" = right unary */
-    char *oprcode;   /* operator function name */
-    char *oprleft;   /* left operand type */
-    char *oprright;  /* right operand type */
-    char *oprcom;    /* oid of the commutator operator */
-    char *oprnegate; /* oid of the negator operator */
-    char *oprrest;   /* name of the function to calculate operator restriction
-                       selectivity */
-    char *oprjoin;    /* name of the function to calculate operator join
-                        selectivity */
-    char *oprcanhash; /* can we use hash join strategy ? */
-    char *oprlsortop; /* oid's of the left and right sort operators */
-    char *oprrsortop;
-} OprInfo;
-
-
-/* global decls */
-extern int g_verbose;  /* verbose flag */
-extern int g_last_builtin_oid; /* value of the last builtin oid */
-extern FILE *g_fout;     /* the script file */
-
-/* placeholders for comment starting and ending delimiters */
-extern char g_comment_start[10]; 
-extern char g_comment_end[10]; 
-
-extern char g_opaque_type[10]; /* name for the opaque type */
-
-/* pg_dump is really two programs in one
-    one version works with postgres v4r2
-    and the other works with postgres95
-    the common routines are declared here
-
-/*
- *  common utility functions 
-*/
-
-extern TableInfo* dumpSchema(FILE* fout, int *numTablesPtr);
-
-extern char* findTypeByOid(TypeInfo* tinfo, int numTypes, char* oid);
-extern char* findOprByOid(OprInfo *oprinfo, int numOprs, char *oid);
-extern int findFuncByName(FuncInfo* finfo, int numFuncs, char* name);
-extern char** findParentsByOid(TableInfo* tbinfo, int numTables,
-                             InhInfo* inhinfo, int numInherits,
-                             char *oid, 
-                             int *numParents);
-extern int findTableByName(TableInfo *tbinfo, int numTables, char *relname);
-extern int findTableByOid(TableInfo *tbinfo, int numTables, char *oid);
-extern void flagInhAttrs(TableInfo* tbinfo, int numTables,
-                          InhInfo* inhinfo, int numInherits);
-
-extern void check_conn_and_db();
-extern int strInArray(char* pattern, char** arr, int arr_size);
-extern void parseArgTypes(char **argtypes, char* str);
-extern int isArchiveName(char*);
-
-/*
- * version specific routines 
- */
-extern TypeInfo* getTypes(int *numTypes);
-extern FuncInfo* getFuncs(int *numFuncs);
-extern AggInfo* getAggregates(int *numAggregates);
-extern OprInfo* getOperators(int *numOperators);
-extern TableInfo* getTables(int *numTables);
-extern InhInfo* getInherits(int *numInherits);
-extern void getTableAttrs(TableInfo* tbinfo, int numTables);
-extern IndInfo* getIndices(int *numIndices);
-extern void dumpTypes(FILE* fout, FuncInfo* finfo, int numFuncs,
-                     TypeInfo* tinfo, int numTypes);
-extern void dumpFuncs(FILE* fout, FuncInfo* finfo, int numFuncs,
-                     TypeInfo *tinfo, int numTypes);
-extern void dumpAggs(FILE* fout, AggInfo* agginfo, int numAggregates,
-                    TypeInfo *tinfo, int numTypes);
-extern void dumpOprs(FILE* fout, OprInfo* agginfo, int numOperators,
-                    TypeInfo *tinfo, int numTypes);
-extern void dumpOneFunc(FILE* fout, FuncInfo* finfo, int i,
-                       TypeInfo *tinfo, int numTypes);
-extern void dumpTables(FILE* fout, TableInfo* tbinfo, int numTables,
-                      InhInfo *inhinfo, int numInherits,
-                      TypeInfo *tinfo, int numTypes);
-extern void dumpIndices(FILE* fout, IndInfo* indinfo, int numIndices,
-                       TableInfo* tbinfo, int numTables);
-
-extern void dumpClasses(TableInfo *tbinfo, int numTables, FILE *fout);
-extern void dumpTuples(char *portalname, FILE *fout, int *attrmap);
-extern char* checkForQuote(char* s);
-extern int findLastBuiltinOid();
-
-
-/* largest query string size */
-#define MAXQUERYLEN  5000
-
-/* these voodoo constants are from the backend */
-#define C_PROLANG_OID       13