提交 e18d900d 编写于 作者: T Thomas G. Lockhart

Adjust handling of data type names to suppress double quotes

 unless necessary.
Label internal bpchar types as "character" and varchar types as
 "character varying" to be less Postgres-specific. These types map to
 the SQL92 definitions anyway.
Redefine g_force_quotes to be the local variable force_quotes.
Pass this as an argument to fmtId().
These should help with handling the single-byte internal "char" type.
上级 239564e9
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/bin/pg_dump/common.c,v 1.27 1998/10/06 22:14:17 momjian Exp $ * $Header: /cvsroot/pgsql/src/bin/pg_dump/common.c,v 1.28 1998/12/13 23:41:32 thomas Exp $
* *
* Modifications - 6/12/96 - dave@bensoft.com - version 1.13.dhb.2 * Modifications - 6/12/96 - dave@bensoft.com - version 1.13.dhb.2
* *
...@@ -496,20 +496,20 @@ findFuncByName(FuncInfo *finfo, int numFuncs, const char *name) ...@@ -496,20 +496,20 @@ findFuncByName(FuncInfo *finfo, int numFuncs, const char *name)
* returns pointer to input string or string surrounded by double quotes * returns pointer to input string or string surrounded by double quotes
* *
* Note that the returned string should be used immediately since it * Note that the returned string should be used immediately since it
* uses a static buffer to hold the string. Non-reentrant but fast. * uses a static buffer to hold the string. Non-reentrant but faster?
*/ */
const char * const char *
fmtId(const char *rawid) fmtId(const char *rawid, bool force_quotes)
{ {
const char *cp; const char *cp;
static char id[MAXQUERYLEN]; static char id[MAXQUERYLEN];
if (! g_force_quotes) if (! force_quotes)
for (cp = rawid; *cp != '\0'; cp++) for (cp = rawid; *cp != '\0'; cp++)
if (!(islower(*cp) || isdigit(*cp) || (*cp == '_'))) if (!(islower(*cp) || isdigit(*cp) || (*cp == '_')))
break; break;
if (g_force_quotes || (*cp != '\0')) if (force_quotes || (*cp != '\0'))
{ {
strcpy(id, "\""); strcpy(id, "\"");
strcat(id, rawid); strcat(id, rawid);
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.96 1998/12/05 22:09:57 tgl Exp $ * $Header: /cvsroot/pgsql/src/bin/pg_dump/pg_dump.c,v 1.97 1998/12/13 23:41:32 thomas Exp $
* *
* Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb * Modifications - 6/10/96 - dave@bensoft.com - version 1.13.dhb
* *
...@@ -101,12 +101,13 @@ extern int optind, ...@@ -101,12 +101,13 @@ extern int optind,
opterr; opterr;
/* global decls */ /* global decls */
bool g_force_quotes; /* User wants to suppress double-quotes */
bool g_verbose; /* User wants verbose narration of our bool g_verbose; /* User wants verbose narration of our
* activities. */ * activities. */
int g_last_builtin_oid; /* value of the last builtin oid */ int g_last_builtin_oid; /* value of the last builtin oid */
FILE *g_fout; /* the script file */ FILE *g_fout; /* the script file */
PGconn *g_conn; /* the database connection */ PGconn *g_conn; /* the database connection */
bool force_quotes; /* User wants to suppress double-quotes */
int dumpData; /* dump data using proper insert strings */ int dumpData; /* dump data using proper insert strings */
int attrNames; /* put attr names into insert strings */ int attrNames; /* put attr names into insert strings */
int schemaOnly; int schemaOnly;
...@@ -228,14 +229,14 @@ dumpClasses_nodumpData(FILE *fout, const char *classname, const bool oids) ...@@ -228,14 +229,14 @@ dumpClasses_nodumpData(FILE *fout, const char *classname, const bool oids)
if (oids) if (oids)
{ {
fprintf(fout, "COPY %s WITH OIDS FROM stdin;\n", fprintf(fout, "COPY %s WITH OIDS FROM stdin;\n",
fmtId(classname)); fmtId(classname, force_quotes));
sprintf(query, "COPY %s WITH OIDS TO stdout;\n", sprintf(query, "COPY %s WITH OIDS TO stdout;\n",
fmtId(classname)); fmtId(classname, force_quotes));
} }
else else
{ {
fprintf(fout, "COPY %s FROM stdin;\n", fmtId(classname)); fprintf(fout, "COPY %s FROM stdin;\n", fmtId(classname, force_quotes));
sprintf(query, "COPY %s TO stdout;\n", fmtId(classname)); sprintf(query, "COPY %s TO stdout;\n", fmtId(classname, force_quotes));
} }
res = PQexec(g_conn, query); res = PQexec(g_conn, query);
if (!res || if (!res ||
...@@ -322,7 +323,7 @@ dumpClasses_dumpData(FILE *fout, const char *classname, ...@@ -322,7 +323,7 @@ dumpClasses_dumpData(FILE *fout, const char *classname,
int tuple; int tuple;
int field; int field;
sprintf(query, "SELECT * FROM %s", fmtId(classname)); sprintf(query, "SELECT * FROM %s", fmtId(classname, force_quotes));
res = PQexec(g_conn, query); res = PQexec(g_conn, query);
if (!res || if (!res ||
PQresultStatus(res) != PGRES_TUPLES_OK) PQresultStatus(res) != PGRES_TUPLES_OK)
...@@ -333,7 +334,7 @@ dumpClasses_dumpData(FILE *fout, const char *classname, ...@@ -333,7 +334,7 @@ dumpClasses_dumpData(FILE *fout, const char *classname,
tuple = 0; tuple = 0;
while (tuple < PQntuples(res)) while (tuple < PQntuples(res))
{ {
fprintf(fout, "INSERT INTO %s ", fmtId(classname)); fprintf(fout, "INSERT INTO %s ", fmtId(classname, force_quotes));
if (attrNames) if (attrNames)
{ {
int j; int j;
...@@ -347,7 +348,7 @@ dumpClasses_dumpData(FILE *fout, const char *classname, ...@@ -347,7 +348,7 @@ dumpClasses_dumpData(FILE *fout, const char *classname,
sprintf(q, "%s%s%s", sprintf(q, "%s%s%s",
q, q,
(actual_atts > 0) ? "," : "", (actual_atts > 0) ? "," : "",
fmtId(tblinfo.attnames[j])); fmtId(tblinfo.attnames[j], force_quotes));
actual_atts++; actual_atts++;
} }
} }
...@@ -551,7 +552,7 @@ main(int argc, char **argv) ...@@ -551,7 +552,7 @@ main(int argc, char **argv)
int use_password = 0; int use_password = 0;
g_verbose = false; g_verbose = false;
g_force_quotes = true; force_quotes = true;
strcpy(g_comment_start, "-- "); strcpy(g_comment_start, "-- ");
g_comment_end[0] = '\0'; g_comment_end[0] = '\0';
...@@ -583,10 +584,10 @@ main(int argc, char **argv) ...@@ -583,10 +584,10 @@ main(int argc, char **argv)
pghost = optarg; pghost = optarg;
break; break;
case 'n': /* Do not force double-quotes on identifiers */ case 'n': /* Do not force double-quotes on identifiers */
g_force_quotes = false; force_quotes = false;
break; break;
case 'N': /* Force double-quotes on identifiers */ case 'N': /* Force double-quotes on identifiers */
g_force_quotes = true; force_quotes = true;
break; break;
case 'o': /* Dump oids */ case 'o': /* Dump oids */
oids = 1; oids = 1;
...@@ -1555,7 +1556,7 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs) ...@@ -1555,7 +1556,7 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
query[0] = '\0'; query[0] = '\0';
if (name[0] != '$') if (name[0] != '$')
sprintf(query, "CONSTRAINT %s ", fmtId(name)); sprintf(query, "CONSTRAINT %s ", fmtId(name, force_quotes));
sprintf(query + strlen(query), "CHECK (%s)", expr); sprintf(query + strlen(query), "CHECK (%s)", expr);
tblinfo[i].check_expr[i2] = strdup(query); tblinfo[i].check_expr[i2] = strdup(query);
} }
...@@ -1630,7 +1631,7 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs) ...@@ -1630,7 +1631,7 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
exit_nicely(g_conn); exit_nicely(g_conn);
} }
tgfunc = finfo[findx].proname; tgfunc = finfo[findx].proname;
sprintf(query, "CREATE TRIGGER %s ", fmtId(PQgetvalue(res2, i2, i_tgname))); sprintf(query, "CREATE TRIGGER %s ", fmtId(PQgetvalue(res2, i2, i_tgname), force_quotes));
/* Trigger type */ /* Trigger type */
findx = 0; findx = 0;
if (TRIGGER_FOR_BEFORE(tgtype)) if (TRIGGER_FOR_BEFORE(tgtype))
...@@ -1658,7 +1659,7 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs) ...@@ -1658,7 +1659,7 @@ getTables(int *numTables, FuncInfo *finfo, int numFuncs)
strcat(query, " UPDATE"); strcat(query, " UPDATE");
} }
sprintf(query, "%s ON %s FOR EACH ROW EXECUTE PROCEDURE %s (", sprintf(query, "%s ON %s FOR EACH ROW EXECUTE PROCEDURE %s (",
query, fmtId(tblinfo[i].relname), tgfunc); query, fmtId(tblinfo[i].relname, force_quotes), tgfunc);
for (findx = 0; findx < tgnargs; findx++) for (findx = 0; findx < tgnargs; findx++)
{ {
char *s, char *s,
...@@ -2030,7 +2031,7 @@ dumpTypes(FILE *fout, FuncInfo *finfo, int numFuncs, ...@@ -2030,7 +2031,7 @@ dumpTypes(FILE *fout, FuncInfo *finfo, int numFuncs,
"CREATE TYPE %s " "CREATE TYPE %s "
"( internallength = %s, externallength = %s, input = %s, " "( internallength = %s, externallength = %s, input = %s, "
"output = %s, send = %s, receive = %s, default = '%s'", "output = %s, send = %s, receive = %s, default = '%s'",
fmtId(tinfo[i].typname), fmtId(tinfo[i].typname, force_quotes),
tinfo[i].typlen, tinfo[i].typlen,
tinfo[i].typprtlen, tinfo[i].typprtlen,
tinfo[i].typinput, tinfo[i].typinput,
...@@ -2126,7 +2127,7 @@ dumpProcLangs(FILE *fout, FuncInfo *finfo, int numFuncs, ...@@ -2126,7 +2127,7 @@ dumpProcLangs(FILE *fout, FuncInfo *finfo, int numFuncs,
"HANDLER %s LANCOMPILER '%s';\n", "HANDLER %s LANCOMPILER '%s';\n",
(PQgetvalue(res, i, i_lanpltrusted)[0] == 't') ? "TRUSTED " : "", (PQgetvalue(res, i, i_lanpltrusted)[0] == 't') ? "TRUSTED " : "",
lanname, lanname,
fmtId(finfo[fidx].proname), fmtId(finfo[fidx].proname, force_quotes),
lancompiler); lancompiler);
free(lanname); free(lanname);
...@@ -2237,7 +2238,7 @@ dumpOneFunc(FILE *fout, FuncInfo *finfo, int i, ...@@ -2237,7 +2238,7 @@ dumpOneFunc(FILE *fout, FuncInfo *finfo, int i,
PQclear(res); PQclear(res);
} }
sprintf(q, "CREATE FUNCTION %s (", fmtId(finfo[i].proname)); sprintf(q, "CREATE FUNCTION %s (", fmtId(finfo[i].proname, force_quotes));
for (j = 0; j < finfo[i].nargs; j++) for (j = 0; j < finfo[i].nargs; j++)
{ {
char *typname; char *typname;
...@@ -2246,12 +2247,12 @@ dumpOneFunc(FILE *fout, FuncInfo *finfo, int i, ...@@ -2246,12 +2247,12 @@ dumpOneFunc(FILE *fout, FuncInfo *finfo, int i,
sprintf(q, "%s%s%s", sprintf(q, "%s%s%s",
q, q,
(j > 0) ? "," : "", (j > 0) ? "," : "",
fmtId(typname)); fmtId(typname, false));
} }
sprintf(q, "%s ) RETURNS %s%s AS '%s' LANGUAGE '%s';\n", sprintf(q, "%s ) RETURNS %s%s AS '%s' LANGUAGE '%s';\n",
q, q,
(finfo[i].retset) ? " SETOF " : "", (finfo[i].retset) ? " SETOF " : "",
fmtId(findTypeByOid(tinfo, numTypes, finfo[i].prorettype)), fmtId(findTypeByOid(tinfo, numTypes, finfo[i].prorettype), false),
func_def, func_lang); func_def, func_lang);
fputs(q, fout); fputs(q, fout);
...@@ -2302,13 +2303,13 @@ dumpOprs(FILE *fout, OprInfo *oprinfo, int numOperators, ...@@ -2302,13 +2303,13 @@ dumpOprs(FILE *fout, OprInfo *oprinfo, int numOperators,
strcmp(oprinfo[i].oprkind, "b") == 0) strcmp(oprinfo[i].oprkind, "b") == 0)
{ {
sprintf(leftarg, ", LEFTARG = %s ", sprintf(leftarg, ", LEFTARG = %s ",
fmtId(findTypeByOid(tinfo, numTypes, oprinfo[i].oprleft))); fmtId(findTypeByOid(tinfo, numTypes, oprinfo[i].oprleft), false));
} }
if (strcmp(oprinfo[i].oprkind, "l") == 0 || if (strcmp(oprinfo[i].oprkind, "l") == 0 ||
strcmp(oprinfo[i].oprkind, "b") == 0) strcmp(oprinfo[i].oprkind, "b") == 0)
{ {
sprintf(rightarg, ", RIGHTARG = %s ", sprintf(rightarg, ", RIGHTARG = %s ",
fmtId(findTypeByOid(tinfo, numTypes, oprinfo[i].oprright))); fmtId(findTypeByOid(tinfo, numTypes, oprinfo[i].oprright), false));
} }
if (strcmp(oprinfo[i].oprcom, "0") == 0) if (strcmp(oprinfo[i].oprcom, "0") == 0)
commutator[0] = '\0'; commutator[0] = '\0';
...@@ -2391,7 +2392,7 @@ dumpAggs(FILE *fout, AggInfo *agginfo, int numAggs, ...@@ -2391,7 +2392,7 @@ dumpAggs(FILE *fout, AggInfo *agginfo, int numAggs,
sprintf(basetype, sprintf(basetype,
"BASETYPE = %s, ", "BASETYPE = %s, ",
fmtId(findTypeByOid(tinfo, numTypes, agginfo[i].aggbasetype))); fmtId(findTypeByOid(tinfo, numTypes, agginfo[i].aggbasetype), false));
if (strcmp(agginfo[i].aggtransfn1, "-") == 0) if (strcmp(agginfo[i].aggtransfn1, "-") == 0)
sfunc1[0] = '\0'; sfunc1[0] = '\0';
...@@ -2400,7 +2401,7 @@ dumpAggs(FILE *fout, AggInfo *agginfo, int numAggs, ...@@ -2400,7 +2401,7 @@ dumpAggs(FILE *fout, AggInfo *agginfo, int numAggs,
sprintf(sfunc1, sprintf(sfunc1,
"SFUNC1 = %s, STYPE1 = %s", "SFUNC1 = %s, STYPE1 = %s",
agginfo[i].aggtransfn1, agginfo[i].aggtransfn1,
fmtId(findTypeByOid(tinfo, numTypes, agginfo[i].aggtranstype1))); fmtId(findTypeByOid(tinfo, numTypes, agginfo[i].aggtranstype1), false));
if (agginfo[i].agginitval1) if (agginfo[i].agginitval1)
sprintf(sfunc1, "%s, INITCOND1 = '%s'", sprintf(sfunc1, "%s, INITCOND1 = '%s'",
sfunc1, agginfo[i].agginitval1); sfunc1, agginfo[i].agginitval1);
...@@ -2414,7 +2415,7 @@ dumpAggs(FILE *fout, AggInfo *agginfo, int numAggs, ...@@ -2414,7 +2415,7 @@ dumpAggs(FILE *fout, AggInfo *agginfo, int numAggs,
sprintf(sfunc2, sprintf(sfunc2,
"SFUNC2 = %s, STYPE2 = %s", "SFUNC2 = %s, STYPE2 = %s",
agginfo[i].aggtransfn2, agginfo[i].aggtransfn2,
fmtId(findTypeByOid(tinfo, numTypes, agginfo[i].aggtranstype2))); fmtId(findTypeByOid(tinfo, numTypes, agginfo[i].aggtranstype2), false));
if (agginfo[i].agginitval2) if (agginfo[i].agginitval2)
sprintf(sfunc2, "%s, INITCOND2 = '%s'", sprintf(sfunc2, "%s, INITCOND2 = '%s'",
sfunc2, agginfo[i].agginitval2); sfunc2, agginfo[i].agginitval2);
...@@ -2525,7 +2526,7 @@ dumpACL(FILE *fout, TableInfo tbinfo) ...@@ -2525,7 +2526,7 @@ dumpACL(FILE *fout, TableInfo tbinfo)
*/ */
fprintf(fout, fprintf(fout,
"REVOKE ALL on %s from PUBLIC;\n", "REVOKE ALL on %s from PUBLIC;\n",
fmtId(tbinfo.relname)); fmtId(tbinfo.relname, force_quotes));
/* Make a working copy of acls so we can use strtok */ /* Make a working copy of acls so we can use strtok */
aclbuf = strdup(acls); aclbuf = strdup(acls);
...@@ -2556,7 +2557,7 @@ dumpACL(FILE *fout, TableInfo tbinfo) ...@@ -2556,7 +2557,7 @@ dumpACL(FILE *fout, TableInfo tbinfo)
{ {
fprintf(fout, fprintf(fout,
"GRANT %s on %s to ", "GRANT %s on %s to ",
priv, fmtId(tbinfo.relname)); priv, fmtId(tbinfo.relname, force_quotes));
/* Note: fmtId() can only be called once per printf, so don't /* Note: fmtId() can only be called once per printf, so don't
* try to merge printing of username into the above printf. * try to merge printing of username into the above printf.
*/ */
...@@ -2568,7 +2569,7 @@ dumpACL(FILE *fout, TableInfo tbinfo) ...@@ -2568,7 +2569,7 @@ dumpACL(FILE *fout, TableInfo tbinfo)
else else
{ {
*eqpos = '\0'; /* it's ok to clobber aclbuf */ *eqpos = '\0'; /* it's ok to clobber aclbuf */
fprintf(fout, "%s;\n", fmtId(tok)); fprintf(fout, "%s;\n", fmtId(tok, force_quotes));
} }
} }
free(priv); free(priv);
...@@ -2630,7 +2631,7 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables, ...@@ -2630,7 +2631,7 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
becomeUser(fout, tblinfo[i].usename); becomeUser(fout, tblinfo[i].usename);
sprintf(q, "CREATE TABLE %s (\n\t", fmtId(tblinfo[i].relname)); sprintf(q, "CREATE TABLE %s (\n\t", fmtId(tblinfo[i].relname, force_quotes));
actual_atts = 0; actual_atts = 0;
for (j = 0; j < tblinfo[i].numatts; j++) for (j = 0; j < tblinfo[i].numatts; j++)
{ {
...@@ -2639,28 +2640,39 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables, ...@@ -2639,28 +2640,39 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
if (actual_atts > 0) if (actual_atts > 0)
strcat(q, ",\n\t"); strcat(q, ",\n\t");
sprintf(q + strlen(q), "%s ", sprintf(q + strlen(q), "%s ",
fmtId(tblinfo[i].attnames[j])); fmtId(tblinfo[i].attnames[j], force_quotes));
/* Show lengths on bpchar and varchar */ /* Show lengths on bpchar and varchar */
if (!strcmp(tblinfo[i].typnames[j], "bpchar")) if (!strcmp(tblinfo[i].typnames[j], "bpchar"))
{ {
sprintf(q + strlen(q), "char(%d)", int len = (tblinfo[i].atttypmod[j] - VARHDRSZ);
tblinfo[i].atttypmod[j] - VARHDRSZ); sprintf(q + strlen(q), "character");
if (len > 1)
sprintf(q + strlen(q), "(%d)",
tblinfo[i].atttypmod[j] - VARHDRSZ);
} }
else if (!strcmp(tblinfo[i].typnames[j], "varchar")) else if (!strcmp(tblinfo[i].typnames[j], "varchar"))
{ {
sprintf(q + strlen(q), "%s", sprintf(q + strlen(q), "character varying");
tblinfo[i].typnames[j]);
if (tblinfo[i].atttypmod[j] != -1) if (tblinfo[i].atttypmod[j] != -1)
{ {
sprintf(q + strlen(q), "(%d)", sprintf(q + strlen(q), "(%d)",
tblinfo[i].atttypmod[j] - VARHDRSZ); tblinfo[i].atttypmod[j] - VARHDRSZ);
} }
} }
/* char is an internal single-byte data type;
* Let's make sure we force it through with quotes.
* - thomas 1998-12-13
*/
else if (!strcmp(tblinfo[i].typnames[j], "char"))
{
sprintf(q + strlen(q), "%s",
fmtId(tblinfo[i].typnames[j], true));
}
else else
{ {
sprintf(q + strlen(q), "%s", sprintf(q + strlen(q), "%s",
fmtId(tblinfo[i].typnames[j])); fmtId(tblinfo[i].typnames[j], false));
} }
if (tblinfo[i].adef_expr[j] != NULL) if (tblinfo[i].adef_expr[j] != NULL)
sprintf(q + strlen(q), " DEFAULT %s", sprintf(q + strlen(q), " DEFAULT %s",
...@@ -2689,7 +2701,7 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables, ...@@ -2689,7 +2701,7 @@ dumpTables(FILE *fout, TableInfo *tblinfo, int numTables,
{ {
sprintf(q + strlen(q), "%s%s", sprintf(q + strlen(q), "%s%s",
(k > 0) ? ", " : "", (k > 0) ? ", " : "",
fmtId(parentRels[k])); fmtId(parentRels[k], force_quotes));
} }
strcat(q, ")"); strcat(q, ")");
} }
...@@ -2807,7 +2819,7 @@ dumpIndices(FILE *fout, IndInfo *indinfo, int numIndices, ...@@ -2807,7 +2819,7 @@ dumpIndices(FILE *fout, IndInfo *indinfo, int numIndices,
attname = tblinfo[tableInd].attnames[indkey]; attname = tblinfo[tableInd].attnames[indkey];
if (funcname) if (funcname)
sprintf(attlist + strlen(attlist), "%s%s", sprintf(attlist + strlen(attlist), "%s%s",
(k == 0) ? "" : ", ", fmtId(attname)); (k == 0) ? "" : ", ", fmtId(attname, force_quotes));
else else
{ {
if (k >= nclass) if (k >= nclass)
...@@ -2817,8 +2829,8 @@ dumpIndices(FILE *fout, IndInfo *indinfo, int numIndices, ...@@ -2817,8 +2829,8 @@ dumpIndices(FILE *fout, IndInfo *indinfo, int numIndices,
attname, indinfo[i].indexrelname); attname, indinfo[i].indexrelname);
exit_nicely(g_conn); exit_nicely(g_conn);
} }
strcpy(id1, fmtId(attname)); strcpy(id1, fmtId(attname, force_quotes));
strcpy(id2, fmtId(classname[k])); strcpy(id2, fmtId(classname[k], force_quotes));
sprintf(attlist + strlen(attlist), "%s%s %s", sprintf(attlist + strlen(attlist), "%s%s %s",
(k == 0) ? "" : ", ", id1, id2); (k == 0) ? "" : ", ", id1, id2);
free(classname[k]); free(classname[k]);
...@@ -2833,8 +2845,8 @@ dumpIndices(FILE *fout, IndInfo *indinfo, int numIndices, ...@@ -2833,8 +2845,8 @@ dumpIndices(FILE *fout, IndInfo *indinfo, int numIndices,
*/ */
becomeUser(fout, tblinfo[tableInd].usename); becomeUser(fout, tblinfo[tableInd].usename);
strcpy(id1, fmtId(indinfo[i].indexrelname)); strcpy(id1, fmtId(indinfo[i].indexrelname, force_quotes));
strcpy(id2, fmtId(indinfo[i].indrelname)); strcpy(id2, fmtId(indinfo[i].indrelname, force_quotes));
fprintf(fout, "CREATE %s INDEX %s on %s using %s (", fprintf(fout, "CREATE %s INDEX %s on %s using %s (",
(strcmp(indinfo[i].indisunique, "t") == 0) ? "UNIQUE" : "", (strcmp(indinfo[i].indisunique, "t") == 0) ? "UNIQUE" : "",
id1, id1,
...@@ -2843,8 +2855,8 @@ dumpIndices(FILE *fout, IndInfo *indinfo, int numIndices, ...@@ -2843,8 +2855,8 @@ dumpIndices(FILE *fout, IndInfo *indinfo, int numIndices,
if (funcname) if (funcname)
{ {
/* need 2 printf's here cuz fmtId has static return area */ /* need 2 printf's here cuz fmtId has static return area */
fprintf(fout, " %s", fmtId(funcname)); fprintf(fout, " %s", fmtId(funcname, false));
fprintf(fout, " (%s) %s );\n", attlist, fmtId(classname[0])); fprintf(fout, " (%s) %s );\n", attlist, fmtId(classname[0], force_quotes));
free(funcname); free(funcname);
free(classname[0]); free(classname[0]);
} }
...@@ -3058,7 +3070,7 @@ dumpSequence(FILE *fout, TableInfo tbinfo) ...@@ -3058,7 +3070,7 @@ dumpSequence(FILE *fout, TableInfo tbinfo)
sprintf(query, sprintf(query,
"SELECT sequence_name, last_value, increment_by, max_value, " "SELECT sequence_name, last_value, increment_by, max_value, "
"min_value, cache_value, is_cycled, is_called from %s", "min_value, cache_value, is_cycled, is_called from %s",
fmtId(tbinfo.relname)); fmtId(tbinfo.relname, force_quotes));
res = PQexec(g_conn, query); res = PQexec(g_conn, query);
if (!res || PQresultStatus(res) != PGRES_TUPLES_OK) if (!res || PQresultStatus(res) != PGRES_TUPLES_OK)
...@@ -3098,7 +3110,7 @@ dumpSequence(FILE *fout, TableInfo tbinfo) ...@@ -3098,7 +3110,7 @@ dumpSequence(FILE *fout, TableInfo tbinfo)
sprintf(query, sprintf(query,
"CREATE SEQUENCE %s start %d increment %d maxvalue %d " "CREATE SEQUENCE %s start %d increment %d maxvalue %d "
"minvalue %d cache %d %s;\n", "minvalue %d cache %d %s;\n",
fmtId(tbinfo.relname), last, incby, maxv, minv, cache, fmtId(tbinfo.relname, force_quotes), last, incby, maxv, minv, cache,
(cycled == 't') ? "cycle" : ""); (cycled == 't') ? "cycle" : "");
fputs(query, fout); fputs(query, fout);
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: pg_dump.h,v 1.36 1998/12/05 22:09:56 tgl Exp $ * $Id: pg_dump.h,v 1.37 1998/12/13 23:41:32 thomas Exp $
* *
* Modifications - 6/12/96 - dave@bensoft.com - version 1.13.dhb.2 * Modifications - 6/12/96 - dave@bensoft.com - version 1.13.dhb.2
* *
...@@ -226,7 +226,7 @@ extern void dumpIndices(FILE *fout, IndInfo *indinfo, int numIndices, ...@@ -226,7 +226,7 @@ extern void dumpIndices(FILE *fout, IndInfo *indinfo, int numIndices,
TableInfo *tbinfo, int numTables, const char *tablename); TableInfo *tbinfo, int numTables, const char *tablename);
extern const char * extern const char *
fmtId(const char *identifier); fmtId(const char *identifier, bool force_quotes);
/* largest query string size */ /* largest query string size */
#define MAXQUERYLEN 5000 #define MAXQUERYLEN 5000
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册