aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/bin/pg_dump/pg_backup_db.c26
-rw-r--r--src/bin/pg_dump/pg_dump.c220
-rw-r--r--src/bin/pg_dump/pg_dump.h5
3 files changed, 180 insertions, 71 deletions
diff --git a/src/bin/pg_dump/pg_backup_db.c b/src/bin/pg_dump/pg_backup_db.c
index 51a05646cd1..fc5864bc693 100644
--- a/src/bin/pg_dump/pg_backup_db.c
+++ b/src/bin/pg_dump/pg_backup_db.c
@@ -5,7 +5,7 @@
* Implements the basic DB functions used by the archiver.
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_db.c,v 1.21 2001/07/03 20:21:48 petere Exp $
+ * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_backup_db.c,v 1.22 2001/08/03 19:43:05 tgl Exp $
*
* NOTES
*
@@ -207,6 +207,8 @@ UserIsSuperuser(ArchiveHandle *AH, char *user)
}
PQclear(res);
+ destroyPQExpBuffer(qry);
+
return isSuper;
}
@@ -678,7 +680,7 @@ ExecuteSqlCommandBuf(ArchiveHandle *AH, void *qryv, int bufLen)
void
FixupBlobRefs(ArchiveHandle *AH, char *tablename)
{
- PQExpBuffer tblQry = createPQExpBuffer();
+ PQExpBuffer tblQry;
PGresult *res,
*uRes;
int i,
@@ -688,6 +690,8 @@ FixupBlobRefs(ArchiveHandle *AH, char *tablename)
if (strcmp(tablename, BLOB_XREF_TABLE) == 0)
return;
+ tblQry = createPQExpBuffer();
+
appendPQExpBuffer(tblQry, "SELECT a.attname FROM pg_class c, pg_attribute a, pg_type t "
" WHERE a.attnum > 0 AND a.attrelid = c.oid AND a.atttypid = t.oid "
" AND t.typname = 'oid' AND c.relname = '%s';", tablename);
@@ -699,10 +703,8 @@ FixupBlobRefs(ArchiveHandle *AH, char *tablename)
if ((n = PQntuples(res)) == 0)
{
- /* We're done */
+ /* nothing to do */
ahlog(AH, 1, "no OID type columns in table %s\n", tablename);
- PQclear(res);
- return;
}
for (i = 0; i < n; i++)
@@ -741,7 +743,7 @@ FixupBlobRefs(ArchiveHandle *AH, char *tablename)
}
PQclear(res);
-
+ destroyPQExpBuffer(tblQry);
}
/**********
@@ -766,6 +768,8 @@ CreateBlobXrefTable(ArchiveHandle *AH)
appendPQExpBuffer(qry, "Create Unique Index %s_ix on %s(oldOid)", BLOB_XREF_TABLE, BLOB_XREF_TABLE);
ExecuteSqlCommand(AH, qry, "could not create index on BLOB cross reference table", true);
+
+ destroyPQExpBuffer(qry);
}
void
@@ -776,6 +780,8 @@ InsertBlobXref(ArchiveHandle *AH, int old, int new)
appendPQExpBuffer(qry, "Insert Into %s(oldOid, newOid) Values (%d, %d);", BLOB_XREF_TABLE, old, new);
ExecuteSqlCommand(AH, qry, "could not create BLOB cross reference entry", true);
+
+ destroyPQExpBuffer(qry);
}
void
@@ -787,6 +793,8 @@ StartTransaction(ArchiveHandle *AH)
ExecuteSqlCommand(AH, qry, "could not start database transaction", false);
AH->txActive = true;
+
+ destroyPQExpBuffer(qry);
}
void
@@ -799,6 +807,8 @@ StartTransactionXref(ArchiveHandle *AH)
ExecuteSqlCommand(AH, qry,
"could not start transaction for BLOB cross references", true);
AH->blobTxActive = true;
+
+ destroyPQExpBuffer(qry);
}
void
@@ -810,6 +820,8 @@ CommitTransaction(ArchiveHandle *AH)
ExecuteSqlCommand(AH, qry, "could not commit database transaction", false);
AH->txActive = false;
+
+ destroyPQExpBuffer(qry);
}
void
@@ -821,4 +833,6 @@ CommitTransactionXref(ArchiveHandle *AH)
ExecuteSqlCommand(AH, qry, "could not commit transaction for BLOB cross references", true);
AH->blobTxActive = false;
+
+ destroyPQExpBuffer(qry);
}
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index 1a18bb223c4..c2bcbce4450 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -22,7 +22,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.216 2001/07/29 22:12:23 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.217 2001/08/03 19:43:05 tgl Exp $
*
* Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
*
@@ -182,7 +182,8 @@ typedef enum _formatLiteralOptions
/* only checks for 'opts == CONV_ALL' anyway. */
} formatLiteralOptions;
-static void dumpComment(Archive *outfile, const char *target, const char *oid);
+static void dumpComment(Archive *outfile, const char *target, const char *oid,
+ const char *((*deps)[]));
static void dumpSequence(Archive *fout, TableInfo tbinfo, const bool schemaOnly, const bool dataOnly);
static void dumpACL(Archive *fout, TableInfo tbinfo);
static void dumpTriggers(Archive *fout, const char *tablename,
@@ -571,6 +572,7 @@ dumpClasses_dumpData(Archive *fout, char *oid, void *dctxv)
archprintf(fout, ");\n");
}
PQclear(res);
+ destroyPQExpBuffer(q);
return 1;
}
@@ -1202,6 +1204,10 @@ dumpDatabase(Archive *AH)
PQclear(res);
+ destroyPQExpBuffer(dbQry);
+ destroyPQExpBuffer(delQry);
+ destroyPQExpBuffer(creaQry);
+
return 1;
}
@@ -1298,6 +1304,9 @@ dumpBlobs(Archive *AH, char *junkOid, void *junkVal)
}
} while (PQntuples(res) > 0);
+ destroyPQExpBuffer(oidQry);
+ destroyPQExpBuffer(oidFetchQry);
+
return 1;
}
@@ -1331,7 +1340,10 @@ getTypes(int *numTypes)
int i_typdelim;
int i_typdefault;
int i_typrelid;
+ int i_typalign;
+ int i_typstorage;
int i_typbyval;
+ int i_typisdefined;
int i_usename;
int i_typedefn;
@@ -1340,9 +1352,7 @@ getTypes(int *numTypes)
/*
* 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
*/
@@ -1350,14 +1360,14 @@ getTypes(int *numTypes)
{
appendPQExpBuffer(query, "SELECT pg_type.oid, typowner, typname, typlen, typprtlen, "
"typinput, typoutput, typreceive, typsend, typelem, typdelim, "
- "typdefault, typrelid, typbyval, "
+ "typdefault, typrelid, typalign, 'p'::char as typstorage, typbyval, typisdefined, "
"(select usename from pg_user where typowner = usesysid) as usename, "
"typname as typedefn "
"from pg_type");
} else {
appendPQExpBuffer(query, "SELECT pg_type.oid, typowner, typname, typlen, typprtlen, "
"typinput, typoutput, typreceive, typsend, typelem, typdelim, "
- "typdefault, typrelid, typbyval, "
+ "typdefault, typrelid, typalign, typstorage, typbyval, typisdefined, "
"(select usename from pg_user where typowner = usesysid) as usename, "
"format_type(pg_type.oid, NULL) as typedefn "
"from pg_type");
@@ -1388,7 +1398,10 @@ getTypes(int *numTypes)
i_typdelim = PQfnumber(res, "typdelim");
i_typdefault = PQfnumber(res, "typdefault");
i_typrelid = PQfnumber(res, "typrelid");
+ i_typalign = PQfnumber(res, "typalign");
+ i_typstorage = PQfnumber(res, "typstorage");
i_typbyval = PQfnumber(res, "typbyval");
+ i_typisdefined = PQfnumber(res, "typisdefined");
i_usename = PQfnumber(res, "usename");
i_typedefn = PQfnumber(res, "typedefn");
@@ -1407,6 +1420,8 @@ getTypes(int *numTypes)
tinfo[i].typdelim = strdup(PQgetvalue(res, i, i_typdelim));
tinfo[i].typdefault = strdup(PQgetvalue(res, i, i_typdefault));
tinfo[i].typrelid = strdup(PQgetvalue(res, i, i_typrelid));
+ tinfo[i].typalign = strdup(PQgetvalue(res, i, i_typalign));
+ tinfo[i].typstorage = strdup(PQgetvalue(res, i, i_typstorage));
tinfo[i].usename = strdup(PQgetvalue(res, i, i_usename));
tinfo[i].typedefn = strdup(PQgetvalue(res, i, i_typedefn));
@@ -1427,12 +1442,19 @@ getTypes(int *numTypes)
tinfo[i].isArray = 1;
else
tinfo[i].isArray = 0;
+
+ if (strcmp(PQgetvalue(res, i, i_typisdefined), "f") == 0)
+ tinfo[i].isDefined = 0;
+ else
+ tinfo[i].isDefined = 1;
}
*numTypes = ntups;
PQclear(res);
+ destroyPQExpBuffer(query);
+
return tinfo;
}
@@ -1534,6 +1556,8 @@ getOperators(int *numOprs)
PQclear(res);
+ destroyPQExpBuffer(query);
+
return oprinfo;
}
@@ -1570,8 +1594,14 @@ clearTypeInfo(TypeInfo *tp, int numTypes)
free(tp[i].typdefault);
if (tp[i].typrelid)
free(tp[i].typrelid);
+ if (tp[i].typalign)
+ free(tp[i].typalign);
+ if (tp[i].typstorage)
+ free(tp[i].typstorage);
if (tp[i].usename)
free(tp[i].usename);
+ if (tp[i].typedefn)
+ free(tp[i].typedefn);
}
free(tp);
}
@@ -1893,6 +1923,8 @@ getAggregates(int *numAggs)
PQclear(res);
+ destroyPQExpBuffer(query);
+
return agginfo;
}
@@ -2014,8 +2046,9 @@ getFuncs(int *numFuncs)
PQclear(res);
- return finfo;
+ destroyPQExpBuffer(query);
+ return finfo;
}
/*
@@ -2610,8 +2643,10 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
PQclear(res);
- return tblinfo;
+ destroyPQExpBuffer(query);
+ destroyPQExpBuffer(delqry);
+ return tblinfo;
}
/*
@@ -2664,6 +2699,9 @@ getInherits(int *numInherits)
}
PQclear(res);
+
+ destroyPQExpBuffer(query);
+
return inhinfo;
}
@@ -2695,7 +2733,6 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
for (i = 0; i < numTables; i++)
{
-
if (tblinfo[i].sequence)
continue;
@@ -2831,6 +2868,8 @@ getTableAttrs(TableInfo *tblinfo, int numTables)
}
PQclear(res);
}
+
+ destroyPQExpBuffer(q);
}
@@ -2937,6 +2976,9 @@ getIndexes(int *numIndexes)
indinfo[i].indhaspred = strdup(PQgetvalue(res, i, i_indhaspred));
}
PQclear(res);
+
+ destroyPQExpBuffer(query);
+
return indinfo;
}
@@ -2947,16 +2989,17 @@ getIndexes(int *numIndexes)
* oid handed to this routine. The routine takes a constant character
* string for the target part of the object and the oid of the object
* whose comments are to be dumped. It is perfectly acceptable
- * to hand an oid to this routine which has not been commented. In
- * addition, the routine takes the stdio FILE handle to which the
- * output should be written.
+ * to hand an oid to this routine which has not been commented. Additional
+ * dependencies can be passed for the comment, too --- this is needed for
+ * VIEWs, whose comments are filed under the table OID but which are dumped
+ * in order by their rule OID.
*------------------------------------------------------------------
*/
static void
-dumpComment(Archive *fout, const char *target, const char *oid)
+dumpComment(Archive *fout, const char *target, const char *oid,
+ const char *((*deps)[]))
{
-
PGresult *res;
PQExpBuffer query;
int i_description;
@@ -2991,7 +3034,8 @@ dumpComment(Archive *fout, const char *target, const char *oid)
formatStringLiteral(query, PQgetvalue(res, 0, i_description), PASS_LFTAB);
appendPQExpBuffer(query, ";\n");
- ArchiveEntry(fout, oid, target, "COMMENT", NULL, query->data, "" /* Del */ ,
+ ArchiveEntry(fout, oid, target, "COMMENT", deps,
+ query->data, "" /* Del */ ,
"" /* Copy */ , "" /* Owner */ , NULL, NULL);
}
@@ -2999,7 +3043,7 @@ dumpComment(Archive *fout, const char *target, const char *oid)
/*** Clear the statement buffer and return ***/
PQclear(res);
-
+ destroyPQExpBuffer(query);
}
/*------------------------------------------------------------------
@@ -3015,7 +3059,6 @@ dumpComment(Archive *fout, const char *target, const char *oid)
void
dumpDBComment(Archive *fout)
{
-
PGresult *res;
PQExpBuffer query;
int i_oid;
@@ -3043,13 +3086,13 @@ dumpDBComment(Archive *fout)
i_oid = PQfnumber(res, "oid");
resetPQExpBuffer(query);
appendPQExpBuffer(query, "DATABASE %s", fmtId(PQdb(g_conn), force_quotes));
- dumpComment(fout, query->data, PQgetvalue(res, 0, i_oid));
+ dumpComment(fout, query->data, PQgetvalue(res, 0, i_oid), NULL);
}
/*** Clear the statement buffer and return ***/
PQclear(res);
-
+ destroyPQExpBuffer(query);
}
/*
@@ -3066,13 +3109,10 @@ dumpTypes(Archive *fout, FuncInfo *finfo, int numFuncs,
PQExpBuffer delq = createPQExpBuffer();
int funcInd;
const char *((*deps)[]);
- int depIdx = 0;
-
- deps = malloc(sizeof(char*) * 10);
+ int depIdx;
for (i = 0; i < numTypes; i++)
{
-
/* skip all the builtin types */
if (atooid(tinfo[i].oid) <= g_last_builtin_oid)
continue;
@@ -3081,11 +3121,18 @@ dumpTypes(Archive *fout, FuncInfo *finfo, int numFuncs,
if (atoi(tinfo[i].typrelid) != 0)
continue;
+ /* skip undefined placeholder types */
+ if (!tinfo[i].isDefined)
+ continue;
+
/* skip all array types that start w/ underscore */
if ((tinfo[i].typname[0] == '_') &&
(strcmp(tinfo[i].typinput, "array_in") == 0))
continue;
+ deps = malloc(sizeof(char*) * 10);
+ depIdx = 0;
+
/*
* before we create a type, we need to create the input and output
* functions for it, if they haven't been created already
@@ -3104,6 +3151,7 @@ dumpTypes(Archive *fout, FuncInfo *finfo, int numFuncs,
dumpOneFunc(fout, finfo, funcInd, tinfo, numTypes);
}
+ resetPQExpBuffer(delq);
appendPQExpBuffer(delq, "DROP TYPE %s;\n", fmtId(tinfo[i].typname, force_quotes));
resetPQExpBuffer(q);
@@ -3133,8 +3181,6 @@ dumpTypes(Archive *fout, FuncInfo *finfo, int numFuncs,
{
write_msg(NULL, "notice: array type %s - type for elements (oid %s) is not dumped\n",
tinfo[i].typname, tinfo[i].typelem);
- resetPQExpBuffer(q);
- resetPQExpBuffer(delq);
continue;
}
@@ -3143,8 +3189,24 @@ dumpTypes(Archive *fout, FuncInfo *finfo, int numFuncs,
(*deps)[depIdx++] = strdup(tinfo[i].typelem);
}
+
+ /* XXX these are all the aligns currently handled by DefineType */
+ if (strcmp(tinfo[i].typalign, "i") == 0)
+ appendPQExpBuffer(q, ", alignment = int4");
+ else if (strcmp(tinfo[i].typalign, "d") == 0)
+ appendPQExpBuffer(q, ", alignment = double");
+
+ if (strcmp(tinfo[i].typstorage, "p") == 0)
+ appendPQExpBuffer(q, ", storage = plain");
+ if (strcmp(tinfo[i].typstorage, "e") == 0)
+ appendPQExpBuffer(q, ", storage = external");
+ if (strcmp(tinfo[i].typstorage, "x") == 0)
+ appendPQExpBuffer(q, ", storage = extended");
+ if (strcmp(tinfo[i].typstorage, "m") == 0)
+ appendPQExpBuffer(q, ", storage = main");
+
if (tinfo[i].passedbyvalue)
- appendPQExpBuffer(q, ",passedbyvalue);\n");
+ appendPQExpBuffer(q, ", passedbyvalue);\n");
else
appendPQExpBuffer(q, ");\n");
@@ -3156,13 +3218,13 @@ dumpTypes(Archive *fout, FuncInfo *finfo, int numFuncs,
/*** Dump Type Comments ***/
resetPQExpBuffer(q);
- resetPQExpBuffer(delq);
appendPQExpBuffer(q, "TYPE %s", fmtId(tinfo[i].typname, force_quotes));
- dumpComment(fout, q->data, tinfo[i].oid);
-
- resetPQExpBuffer(q);
+ dumpComment(fout, q->data, tinfo[i].oid, NULL);
}
+
+ destroyPQExpBuffer(q);
+ destroyPQExpBuffer(delq);
}
/*
@@ -3258,6 +3320,9 @@ dumpProcLangs(Archive *fout, FuncInfo *finfo, int numFuncs,
PQclear(res);
+ destroyPQExpBuffer(query);
+ destroyPQExpBuffer(defqry);
+ destroyPQExpBuffer(delqry);
}
/*
@@ -3290,11 +3355,11 @@ dumpOneFunc(Archive *fout, FuncInfo *finfo, int i,
PQExpBuffer fn = createPQExpBuffer();
PQExpBuffer delqry = createPQExpBuffer();
PQExpBuffer fnlist = createPQExpBuffer();
- int j;
PQExpBuffer asPart = createPQExpBuffer();
char func_lang[NAMEDATALEN + 1];
PGresult *res;
int nlangs;
+ int j;
int i_lanname;
char query[256];
@@ -3304,9 +3369,9 @@ dumpOneFunc(Archive *fout, FuncInfo *finfo, int i,
char *rettypename;
if (finfo[i].dumped)
- return;
- else
- finfo[i].dumped = 1;
+ goto done;
+
+ finfo[i].dumped = 1;
/* becomeUser(fout, finfo[i].usename); */
@@ -3370,12 +3435,7 @@ dumpOneFunc(Archive *fout, FuncInfo *finfo, int i,
write_msg(NULL, "reason: data type name of argument %d (oid %s) not found\n",
j, finfo[i].argtypes[j]);
- resetPQExpBuffer(q);
- resetPQExpBuffer(fn);
- resetPQExpBuffer(delqry);
- resetPQExpBuffer(fnlist);
- resetPQExpBuffer(asPart);
- return;
+ goto done;
}
appendPQExpBuffer(fn, "%s%s",
@@ -3399,12 +3459,7 @@ dumpOneFunc(Archive *fout, FuncInfo *finfo, int i,
write_msg(NULL, "reason: name of return data type (oid %s) not found\n",
finfo[i].prorettype);
- resetPQExpBuffer(q);
- resetPQExpBuffer(fn);
- resetPQExpBuffer(delqry);
- resetPQExpBuffer(fnlist);
- resetPQExpBuffer(asPart);
- return;
+ goto done;
}
resetPQExpBuffer(q);
@@ -3445,8 +3500,14 @@ dumpOneFunc(Archive *fout, FuncInfo *finfo, int i,
appendPQExpBuffer(q, "FUNCTION %s ",
fmtId(finfo[i].proname, force_quotes));
appendPQExpBuffer(q, "( %s )", fnlist->data);
- dumpComment(fout, q->data, finfo[i].oid);
-
+ dumpComment(fout, q->data, finfo[i].oid, NULL);
+
+done:
+ destroyPQExpBuffer(q);
+ destroyPQExpBuffer(fn);
+ destroyPQExpBuffer(delqry);
+ destroyPQExpBuffer(fnlist);
+ destroyPQExpBuffer(asPart);
}
/*
@@ -3617,6 +3678,17 @@ dumpOprs(Archive *fout, OprInfo *oprinfo, int numOperators,
ArchiveEntry(fout, oprinfo[i].oid, oprinfo[i].oprname, "OPERATOR", NULL,
q->data, delq->data, "", oprinfo[i].usename, NULL, NULL);
}
+
+ destroyPQExpBuffer(q);
+ destroyPQExpBuffer(delq);
+ destroyPQExpBuffer(leftarg);
+ destroyPQExpBuffer(rightarg);
+ destroyPQExpBuffer(commutator);
+ destroyPQExpBuffer(negator);
+ destroyPQExpBuffer(restrictor);
+ destroyPQExpBuffer(join);
+ destroyPQExpBuffer(sort1);
+ destroyPQExpBuffer(sort2);
}
/*
@@ -3723,9 +3795,13 @@ dumpAggs(Archive *fout, AggInfo *agginfo, int numAggs,
resetPQExpBuffer(q);
appendPQExpBuffer(q, "AGGREGATE %s %s", agginfo[i].aggname,
findTypeByOid(tinfo, numTypes, agginfo[i].aggbasetype, zeroAsOpaque + useBaseTypeName));
- dumpComment(fout, q->data, agginfo[i].oid);
-
+ dumpComment(fout, q->data, agginfo[i].oid, NULL);
}
+
+ destroyPQExpBuffer(q);
+ destroyPQExpBuffer(delq);
+ destroyPQExpBuffer(aggSig);
+ destroyPQExpBuffer(details);
}
/*
@@ -3981,6 +4057,7 @@ dumpTables(Archive *fout, TableInfo *tblinfo, int numTables,
int actual_atts; /* number of attrs in this CREATE statment */
char *reltypename;
char *objoid;
+ const char *((*commentDeps)[]);
/* First - dump SEQUENCEs */
if (tablename && strlen(tablename) > 0)
@@ -4023,12 +4100,15 @@ dumpTables(Archive *fout, TableInfo *tblinfo, int numTables,
objoid = tblinfo[i].viewoid;
appendPQExpBuffer(delq, "DROP VIEW %s;\n", fmtId(tblinfo[i].relname, force_quotes));
appendPQExpBuffer(q, "CREATE VIEW %s as %s\n", fmtId(tblinfo[i].relname, force_quotes), tblinfo[i].viewdef);
-
+ commentDeps = malloc(sizeof(char*) * 2);
+ (*commentDeps)[0] = strdup(objoid);
+ (*commentDeps)[1] = NULL; /* end of list */
}
else
{
reltypename = "TABLE";
objoid = tblinfo[i].oid;
+ commentDeps = NULL;
parentRels = tblinfo[i].parentRels;
numParents = tblinfo[i].numParents;
@@ -4148,17 +4228,20 @@ dumpTables(Archive *fout, TableInfo *tblinfo, int numTables,
appendPQExpBuffer(q, "COLUMN %s", fmtId(tblinfo[i].relname, force_quotes));
appendPQExpBuffer(q, ".");
appendPQExpBuffer(q, "%s", fmtId(tblinfo[i].attnames[j], force_quotes));
- dumpComment(fout, q->data, tblinfo[i].attoids[j]);
+ dumpComment(fout, q->data, tblinfo[i].attoids[j], NULL);
}
/* Dump Table Comments */
resetPQExpBuffer(q);
appendPQExpBuffer(q, "%s %s", reltypename, fmtId(tblinfo[i].relname, force_quotes));
- dumpComment(fout, q->data, tblinfo[i].oid);
+ dumpComment(fout, q->data, tblinfo[i].oid, commentDeps);
}
}
+
+ destroyPQExpBuffer(q);
+ destroyPQExpBuffer(delq);
}
static PQExpBuffer
@@ -4237,16 +4320,15 @@ dumpIndexes(Archive *fout, IndInfo *indinfo, int numIndexes,
k;
int tableInd;
PQExpBuffer attlist = createPQExpBuffer();
+ PQExpBuffer q = createPQExpBuffer();
+ PQExpBuffer delq = createPQExpBuffer();
+ PQExpBuffer id1 = createPQExpBuffer();
+ PQExpBuffer id2 = createPQExpBuffer();
char *classname[INDEX_MAX_KEYS];
char *funcname; /* the name of the function to comput the
* index key from */
int indclass;
int nclass;
-
- PQExpBuffer q = createPQExpBuffer(),
- delq = createPQExpBuffer(),
- id1 = createPQExpBuffer(),
- id2 = createPQExpBuffer();
PGresult *res;
for (i = 0; i < numIndexes; i++)
@@ -4475,11 +4557,16 @@ dumpIndexes(Archive *fout, IndInfo *indinfo, int numIndexes,
/* Dump Index Comments */
resetPQExpBuffer(q);
appendPQExpBuffer(q, "INDEX %s", id1->data);
- dumpComment(fout, q->data, indinfo[i].indexreloid);
+ dumpComment(fout, q->data, indinfo[i].indexreloid, NULL);
}
}
+ destroyPQExpBuffer(attlist);
+ destroyPQExpBuffer(q);
+ destroyPQExpBuffer(delq);
+ destroyPQExpBuffer(id1);
+ destroyPQExpBuffer(id2);
}
/*
@@ -4640,6 +4727,7 @@ findLastBuiltinOid_V71(const char *dbname)
}
last_oid = atooid(PQgetvalue(res, 0, PQfnumber(res, "datlastsysoid")));
PQclear(res);
+ destroyPQExpBuffer(query);
return last_oid;
}
@@ -4722,7 +4810,6 @@ dumpSequence(Archive *fout, TableInfo tbinfo, const bool schemaOnly, const bool
exit_nicely();
}
-
last = atoi(PQgetvalue(res, 0, 1));
incby = atoi(PQgetvalue(res, 0, 2));
maxv = atoi(PQgetvalue(res, 0, 3));
@@ -4779,8 +4866,11 @@ dumpSequence(Archive *fout, TableInfo tbinfo, const bool schemaOnly, const bool
resetPQExpBuffer(query);
appendPQExpBuffer(query, "SEQUENCE %s", fmtId(tbinfo.relname, force_quotes));
- dumpComment(fout, query->data, tbinfo.oid);
+ dumpComment(fout, query->data, tbinfo.oid, NULL);
}
+
+ destroyPQExpBuffer(query);
+ destroyPQExpBuffer(delqry);
}
@@ -4804,7 +4894,7 @@ dumpTriggers(Archive *fout, const char *tablename,
ArchiveEntry(fout, tblinfo[i].triggers[j].oid, tblinfo[i].triggers[j].tgname,
"TRIGGER", NULL, tblinfo[i].triggers[j].tgsrc, "", "",
tblinfo[i].usename, NULL, NULL);
- dumpComment(fout, tblinfo[i].triggers[j].tgcomment, tblinfo[i].triggers[j].oid);
+ dumpComment(fout, tblinfo[i].triggers[j].tgcomment, tblinfo[i].triggers[j].oid, NULL);
}
}
}
@@ -4883,10 +4973,12 @@ dumpRules(Archive *fout, const char *tablename,
resetPQExpBuffer(query);
appendPQExpBuffer(query, "RULE %s", fmtId(PQgetvalue(res, i, i_rulename), force_quotes));
- dumpComment(fout, query->data, PQgetvalue(res, i, i_oid));
+ dumpComment(fout, query->data, PQgetvalue(res, i, i_oid), NULL);
}
PQclear(res);
}
+
+ destroyPQExpBuffer(query);
}
diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h
index 180b7f87efb..5ddbcf36317 100644
--- a/src/bin/pg_dump/pg_dump.h
+++ b/src/bin/pg_dump/pg_dump.h
@@ -6,7 +6,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: pg_dump.h,v 1.67 2001/07/17 00:30:35 tgl Exp $
+ * $Id: pg_dump.h,v 1.68 2001/08/03 19:43:05 tgl Exp $
*
* Modifications - 6/12/96 - dave@bensoft.com - version 1.13.dhb.2
*
@@ -49,10 +49,13 @@ typedef struct _typeInfo
char *typdelim;
char *typdefault;
char *typrelid;
+ char *typalign;
+ char *typstorage;
char *usename;
char *typedefn;
int passedbyvalue;
int isArray;
+ int isDefined;
} TypeInfo;
typedef struct _funcInfo