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.
This commit is contained in:
parent
239564e9ef
commit
e18d900da4
@ -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)
|
|||||||
* 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 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* 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,
|
|||||||
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)
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
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,
|
|||||||
"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,
|
|||||||
"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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
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)
|
|||||||
*/
|
*/
|
||||||
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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
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,
|
|||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
{
|
{
|
||||||
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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
*/
|
*/
|
||||||
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,
|
|||||||
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)
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
*
|
*
|
||||||
* 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,
|
|||||||
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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user