diff --git a/src/bin/pg_dump/common.c b/src/bin/pg_dump/common.c index 3ad451408b00a547760e506c6f7e3afdf16efebe..cf5bf3d0b1eea15cba4e68f642c714d971c32211 100644 --- a/src/bin/pg_dump/common.c +++ b/src/bin/pg_dump/common.c @@ -7,7 +7,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/pg_dump/common.c,v 1.30 1999/05/25 16:13:05 momjian Exp $ + * $Header: /cvsroot/pgsql/src/bin/pg_dump/common.c,v 1.31 1999/05/26 21:51:13 tgl Exp $ * * Modifications - 6/12/96 - dave@bensoft.com - version 1.13.dhb.2 * @@ -502,7 +502,7 @@ const char * fmtId(const char *rawid, bool force_quotes) { const char *cp; - static char id[MAXQUERYLEN]; + static char id[MAX_QUERY_SIZE]; if (!force_quotes) for (cp = rawid; *cp != '\0'; cp++) diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 9218b5bcbbae922ad4fa3b03f5c3590423d4e5a4..e94faf35b160414b63ec07f0bc5cc35dded3d73c 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -21,7 +21,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.111 1999/05/26 19:45:53 momjian Exp $ + * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.112 1999/05/26 21:51:12 tgl Exp $ * * Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb * @@ -188,7 +188,7 @@ isViewRule(char *relname) { PGresult *res; int ntups; - char query[MAXQUERYLEN]; + char query[MAX_QUERY_SIZE]; res = PQexec(g_conn, "begin"); if (!res || @@ -319,11 +319,10 @@ dumpClasses_dumpData(FILE *fout, const char *classname, const TableInfo tblinfo, bool oids) { PGresult *res; - char q[MAXQUERYLEN]; + char q[MAX_QUERY_SIZE]; int tuple; int field; char *expsrc; - char *expdest; sprintf(q, "SELECT * FROM %s", fmtId(classname, force_quotes)); res = PQexec(g_conn, q); @@ -348,60 +347,58 @@ dumpClasses_dumpData(FILE *fout, const char *classname, strcat(q, ") "); fprintf(fout, "%s", q); } - fprintf(fout, "values ("); + fprintf(fout, "VALUES ("); for (field = 0; field < PQnfields(res); field++) { if (field > 0) fprintf(fout, ","); if (PQgetisnull(res, tuple, field)) + { fprintf(fout, "NULL"); - else + continue; + } + switch (PQftype(res, field)) { - switch (PQftype(res, field)) - { - case INT2OID: - case INT4OID: - case OIDOID: /* int types */ - case FLOAT4OID: - case FLOAT8OID: /* float types */ - /* These types are printed without quotes */ - fprintf(fout, "%s", - PQgetvalue(res, tuple, field)); - break; - default: - - /* - * All other types are printed as string literals, - * with appropriate escaping of special - * characters. Quote mark ' goes to '' per SQL - * standard, other stuff goes to \ sequences. - */ - expsrc = PQgetvalue(res, tuple, field); - expdest = q; - for (; *expsrc; expsrc++) + case INT2OID: + case INT4OID: + case OIDOID: /* int types */ + case FLOAT4OID: + case FLOAT8OID: /* float types */ + /* These types are printed without quotes */ + fprintf(fout, "%s", + PQgetvalue(res, tuple, field)); + break; + default: + /* + * All other types are printed as string literals, + * with appropriate escaping of special + * characters. Quote mark ' goes to '' per SQL + * standard, other stuff goes to \ sequences. + */ + putc('\'', fout); + expsrc = PQgetvalue(res, tuple, field); + while (*expsrc) + { + char ch = *expsrc++; + + if (ch == '\\' || ch == '\'') { - char ch = *expsrc; - - if (ch == '\\' || ch == '\'') - { - *expdest++ = ch; /* double it */ - *expdest++ = ch; - } - else if (ch < '\040') - { - /* generate octal escape for control chars */ - *expdest++ = '\\'; - *expdest++ = ((ch >> 6) & 3) + '0'; - *expdest++ = ((ch >> 3) & 7) + '0'; - *expdest++ = (ch & 7) + '0'; - } - else - *expdest++ = ch; + putc(ch, fout); /* double these */ + putc(ch, fout); } - *expdest = '\0'; - fprintf(fout, "'%s'", q); - break; - } + else if (ch < '\040') + { + /* generate octal escape for control chars */ + putc('\\', fout); + putc(((ch >> 6) & 3) + '0', fout); + putc(((ch >> 3) & 7) + '0', fout); + putc((ch & 7) + '0', fout); + } + else + putc(ch, fout); + } + putc('\'', fout); + break; } } fprintf(fout, ");\n"); @@ -746,7 +743,9 @@ main(int argc, char **argv) } fflush(g_fout); - fclose(g_fout); + if (g_fout != stdout) + fclose(g_fout); + clearTableInfo(tblinfo, numTables); PQfinish(g_conn); exit(0); @@ -766,7 +765,7 @@ getTypes(int *numTypes) PGresult *res; int ntups; int i; - char query[MAXQUERYLEN]; + char query[MAX_QUERY_SIZE]; TypeInfo *tinfo; int i_oid; @@ -895,7 +894,7 @@ getOperators(int *numOprs) PGresult *res; int ntups; int i; - char query[MAXQUERYLEN]; + char query[MAX_QUERY_SIZE]; OprInfo *oprinfo; @@ -1238,7 +1237,7 @@ getAggregates(int *numAggs) PGresult *res; int ntups; int i; - char query[MAXQUERYLEN]; + char query[MAX_QUERY_SIZE]; AggInfo *agginfo; int i_oid; @@ -1332,7 +1331,7 @@ getFuncs(int *numFuncs) PGresult *res; int ntups; int i; - char query[MAXQUERYLEN]; + char query[MAX_QUERY_SIZE]; FuncInfo *finfo; int i_oid; @@ -1432,7 +1431,7 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs) PGresult *res; int ntups; int i; - char query[MAXQUERYLEN]; + char query[MAX_QUERY_SIZE]; TableInfo *tblinfo; int i_oid; @@ -1651,7 +1650,7 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs) int tgnargs = atoi(PQgetvalue(res2, i2, i_tgnargs)); char *tgargs = PQgetvalue(res2, i2, i_tgargs); char *p; - char farg[MAXQUERYLEN]; + char farg[MAX_QUERY_SIZE]; int findx; for (findx = 0; findx < numFuncs; findx++) @@ -1778,7 +1777,7 @@ getInherits(int *numInherits) PGresult *res; int ntups; int i; - char query[MAXQUERYLEN]; + char query[MAX_QUERY_SIZE]; InhInfo *inhinfo; int i_inhrel; @@ -1840,7 +1839,7 @@ getTableAttrs(TableInfo *tblinfo, int numTables) { int i, j; - char q[MAXQUERYLEN]; + char q[MAX_QUERY_SIZE]; int i_attname; int i_typname; int i_atttypmod; @@ -1951,7 +1950,7 @@ IndInfo * getIndices(int *numIndices) { int i; - char query[MAXQUERYLEN]; + char query[MAX_QUERY_SIZE]; PGresult *res; int ntups; IndInfo *indinfo; @@ -2042,7 +2041,7 @@ dumpTypes(FILE *fout, FuncInfo *finfo, int numFuncs, TypeInfo *tinfo, int numTypes) { int i; - char q[MAXQUERYLEN]; + char q[MAX_QUERY_SIZE]; int funcInd; for (i = 0; i < numTypes; i++) @@ -2122,7 +2121,7 @@ dumpProcLangs(FILE *fout, FuncInfo *finfo, int numFuncs, TypeInfo *tinfo, int numTypes) { PGresult *res; - char query[MAXQUERYLEN]; + char query[MAX_QUERY_SIZE]; int ntups; int i_lanname; int i_lanpltrusted; @@ -2224,7 +2223,7 @@ static void dumpOneFunc(FILE *fout, FuncInfo *finfo, int i, TypeInfo *tinfo, int numTypes) { - char q[MAXQUERYLEN]; + char q[MAX_QUERY_SIZE]; int j; char *func_def; char func_lang[NAMEDATALEN + 1]; @@ -2344,15 +2343,15 @@ 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 restrictor[MAXQUERYLEN]; - char join[MAXQUERYLEN]; - char sort1[MAXQUERYLEN]; - char sort2[MAXQUERYLEN]; + char q[MAX_QUERY_SIZE]; + char leftarg[MAX_QUERY_SIZE/8]; + char rightarg[MAX_QUERY_SIZE/8]; + char commutator[MAX_QUERY_SIZE/8]; + char negator[MAX_QUERY_SIZE/8]; + char restrictor[MAX_QUERY_SIZE/8]; + char join[MAX_QUERY_SIZE/8]; + char sort1[MAX_QUERY_SIZE/8]; + char sort2[MAX_QUERY_SIZE/8]; for (i = 0; i < numOperators; i++) { @@ -2460,11 +2459,11 @@ dumpAggs(FILE *fout, AggInfo *agginfo, int numAggs, TypeInfo *tinfo, int numTypes) { int i; - char q[MAXQUERYLEN]; - char sfunc1[MAXQUERYLEN]; - char sfunc2[MAXQUERYLEN]; - char basetype[MAXQUERYLEN]; - char finalfunc[MAXQUERYLEN]; + char q[MAX_QUERY_SIZE]; + char sfunc1[MAX_QUERY_SIZE]; + char sfunc2[MAX_QUERY_SIZE]; + char basetype[MAX_QUERY_SIZE]; + char finalfunc[MAX_QUERY_SIZE]; char comma1[2], comma2[2]; @@ -2667,10 +2666,11 @@ dumpACL(FILE *fout, TableInfo tbinfo) else { *eqpos = '\0'; /* it's ok to clobber aclbuf */ - if (strncmp(tok, "group ",strlen("group ")) == 0) - fprintf(fout, "GROUP %s;\n", - fmtId(tok + sizeof("group ") - 1, force_quotes)); - else fprintf(fout, "%s;\n", fmtId(tok, force_quotes)); + if (strncmp(tok, "group ", strlen("group ")) == 0) + fprintf(fout, "GROUP %s;\n", + fmtId(tok + strlen("group "), force_quotes)); + else + fprintf(fout, "%s;\n", fmtId(tok, force_quotes)); } } free(priv); @@ -2694,7 +2694,7 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables, int i, j, k; - char q[MAXQUERYLEN]; + char q[MAX_QUERY_SIZE]; char *serialSeq = NULL; /* implicit sequence name created * by SERIAL datatype */ const char *serialSeqSuffix = "_id_seq"; /* suffix for implicit @@ -2873,9 +2873,9 @@ dumpIndices(FILE *fout, IndInfo *indinfo, int numIndices, indclass; int nclass; - char q[MAXQUERYLEN], - id1[MAXQUERYLEN], - id2[MAXQUERYLEN]; + char q[MAX_QUERY_SIZE], + id1[MAX_QUERY_SIZE], + id2[MAX_QUERY_SIZE]; PGresult *res; for (i = 0; i < numIndices; i++) @@ -3213,7 +3213,7 @@ dumpSequence(FILE *fout, TableInfo tbinfo) char cycled, called, *t; - char query[MAXQUERYLEN]; + char query[MAX_QUERY_SIZE]; sprintf(query, "SELECT sequence_name, last_value, increment_by, max_value, " @@ -3310,7 +3310,7 @@ dumpRules(FILE *fout, const char *tablename, int nrules; int i, t; - char query[MAXQUERYLEN]; + char query[MAX_QUERY_SIZE]; int i_definition; diff --git a/src/bin/pg_dump/pg_dump.h b/src/bin/pg_dump/pg_dump.h index 1d83387a14f18563138a429e843ba6c74b39772d..fc2aab94d5e44df78e2dc8a8b1e1f3acd2975028 100644 --- a/src/bin/pg_dump/pg_dump.h +++ b/src/bin/pg_dump/pg_dump.h @@ -5,7 +5,7 @@ * * Copyright (c) 1994, Regents of the University of California * - * $Id: pg_dump.h,v 1.38 1999/05/25 16:13:09 momjian Exp $ + * $Id: pg_dump.h,v 1.39 1999/05/26 21:51:11 tgl Exp $ * * Modifications - 6/12/96 - dave@bensoft.com - version 1.13.dhb.2 * @@ -224,9 +224,4 @@ extern void dumpTables(FILE *fout, TableInfo *tbinfo, int numTables, const bool acls); extern void dumpIndices(FILE *fout, IndInfo *indinfo, int numIndices, TableInfo *tbinfo, int numTables, const char *tablename); - -extern const char * - fmtId(const char *identifier, bool force_quotes); - -/* largest query string size */ -#define MAXQUERYLEN 5000 +extern const char *fmtId(const char *identifier, bool force_quotes);