From: | Tatsuo Ishii <t-ishii(at)sra(dot)co(dot)jp> |
---|---|
To: | Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us> |
Cc: | t-ishii(at)sra(dot)co(dot)jp, hackers(at)postgreSQL(dot)org |
Subject: | Re: [HACKERS] odd pg_dump output? |
Date: | 1998-08-29 14:52:52 |
Message-ID: | 199808291452.XAA29626@srapc451.sra.co.jp |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
>This appears to be fixed. Beta is September 1.
Ok. BTW Mr. Kataoka who is maintaing Japanese version of PostgreSQL
ODBC driver have found a bug in 6.3.2 pg_dump and have made patches. I
confirmed that the same bug still exists in the current source
tree. So I made up patches based on Kataoka's. Here are some
explanations.
o fmtId() returns pointer to a static memory in it. In the meantime
there is a line where is fmtId() called twice without saving the first
value returned by fmtId(). So second call to fmtId() will break the
first one.
o findTableByName() looks up a table by its name. if a table name
contanins upper letters or non ascii chars, fmtId() will returns a
name quoted in double quotes, which will not what findTableByName()
wants. The result is SEG fault.
--
Tatsuo Ishii
t-ishii(at)sra(dot)co(dot)jp
*** pg_dump.c.orig Wed Aug 26 00:02:04 1998
--- pg_dump.c Sat Aug 29 22:34:24 1998
***************
*** 2435,2441 ****
int i,
j,
k;
! char q[MAXQUERYLEN];
char **parentRels; /* list of names of parent relations */
int numParents;
int actual_atts; /* number of attrs in this CREATE statment */
--- 2435,2443 ----
int i,
j,
k;
! char q[MAXQUERYLEN],
! id1[MAXQUERYLEN],
! id2[MAXQUERYLEN];
char **parentRels; /* list of names of parent relations */
int numParents;
int actual_atts; /* number of attrs in this CREATE statment */
***************
*** 2506,2516 ****
}
else
{
sprintf(q, "%s%s%s %s",
q,
(actual_atts > 0) ? ", " : "",
! fmtId(tblinfo[i].attnames[j]),
! fmtId(tblinfo[i].typnames[j]));
actual_atts++;
}
if (tblinfo[i].adef_expr[j] != NULL)
--- 2508,2520 ----
}
else
{
+ strcpy(id1, fmtId(tblinfo[i].attnames[j]));
+ strcpy(id2, fmtId(tblinfo[i].typnames[j]));
sprintf(q, "%s%s%s %s",
q,
(actual_atts > 0) ? ", " : "",
! id1,
! id2);
actual_atts++;
}
if (tblinfo[i].adef_expr[j] != NULL)
***************
*** 2572,2584 ****
indclass;
int nclass;
! char q[MAXQUERYLEN];
PGresult *res;
for (i = 0; i < numIndices; i++)
{
tableInd = findTableByName(tblinfo, numTables,
! fmtId(indinfo[i].indrelname));
if (strcmp(indinfo[i].indproc, "0") == 0)
funcname = NULL;
--- 2576,2590 ----
indclass;
int nclass;
! char q[MAXQUERYLEN],
! id1[MAXQUERYLEN],
! id2[MAXQUERYLEN];
PGresult *res;
for (i = 0; i < numIndices; i++)
{
tableInd = findTableByName(tblinfo, numTables,
! (indinfo[i].indrelname));
if (strcmp(indinfo[i].indproc, "0") == 0)
funcname = NULL;
***************
*** 2659,2666 ****
attname, indinfo[i].indexrelname);
exit_nicely(g_conn);
}
sprintf(attlist + strlen(attlist), "%s%s %s",
! (k == 0) ? "" : ", ", fmtId(attname), fmtId(classname[k]));
free(classname[k]);
}
}
--- 2665,2674 ----
attname, indinfo[i].indexrelname);
exit_nicely(g_conn);
}
+ strcpy(id1, fmtId(attname));
+ strcpy(id2, fmtId(classname[k]));
sprintf(attlist + strlen(attlist), "%s%s %s",
! (k == 0) ? "" : ", ", id1, id2);
free(classname[k]);
}
}
***************
*** 2668,2677 ****
if (!tablename || (!strcmp(indinfo[i].indrelname, tablename)))
{
sprintf(q, "CREATE %s INDEX %s on %s using %s (",
(strcmp(indinfo[i].indisunique, "t") == 0) ? "UNIQUE" : "",
! fmtId(indinfo[i].indexrelname),
! fmtId(indinfo[i].indrelname),
indinfo[i].indamname);
if (funcname)
{
--- 2676,2687 ----
if (!tablename || (!strcmp(indinfo[i].indrelname, tablename)))
{
+ strcpy(id1, fmtId(indinfo[i].indexrelname));
+ strcpy(id2, fmtId(indinfo[i].indrelname));
sprintf(q, "CREATE %s INDEX %s on %s using %s (",
(strcmp(indinfo[i].indisunique, "t") == 0) ? "UNIQUE" : "",
! id1,
! id2,
indinfo[i].indamname);
if (funcname)
{
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas G. Lockhart | 1998-08-29 15:14:39 | Re: [DOCS] Re: [HACKERS] vacuum problem |
Previous Message | D'Arcy J.M. Cain | 1998-08-29 10:36:19 | Re: [HACKERS] IP data type |