aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bin/pg_dump/pg_dump.c36
1 files changed, 24 insertions, 12 deletions
diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c
index f5740dc9f9a..1ae6730ad0e 100644
--- a/src/bin/pg_dump/pg_dump.c
+++ b/src/bin/pg_dump/pg_dump.c
@@ -12,7 +12,7 @@
* by PostgreSQL
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.425 2006/01/06 19:08:33 momjian Exp $
+ * $PostgreSQL: pgsql/src/bin/pg_dump/pg_dump.c,v 1.426 2006/01/09 21:16:17 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -6054,9 +6054,10 @@ convertRegProcReference(const char *proc)
*
* Returns what to print, or NULL to print nothing
*
- * In 7.3 the input is a REGOPERATOR display; we have to strip the
- * argument-types part. In prior versions, the input is just a
- * numeric OID, which we search our operator list for.
+ * In 7.3 and up the input is a REGOPERATOR display; we have to strip the
+ * argument-types part, and add OPERATOR() decoration if the name is
+ * schema-qualified. In older versions, the input is just a numeric OID,
+ * which we search our operator list for.
*/
static const char *
convertOperatorReference(const char *opr)
@@ -6070,23 +6071,34 @@ convertOperatorReference(const char *opr)
if (g_fout->remoteVersion >= 70300)
{
char *name;
- char *paren;
+ char *oname;
+ char *ptr;
bool inquote;
+ bool sawdot;
name = strdup(opr);
- /* find non-double-quoted left paren */
+ /* find non-double-quoted left paren, and check for non-quoted dot */
inquote = false;
- for (paren = name; *paren; paren++)
+ sawdot = false;
+ for (ptr = name; *ptr; ptr++)
{
- if (*paren == '(' && !inquote)
+ if (*ptr == '"')
+ inquote = !inquote;
+ else if (*ptr == '.' && !inquote)
+ sawdot = true;
+ else if (*ptr == '(' && !inquote)
{
- *paren = '\0';
+ *ptr = '\0';
break;
}
- if (*paren == '"')
- inquote = !inquote;
}
- return name;
+ /* If not schema-qualified, don't need to add OPERATOR() */
+ if (!sawdot)
+ return name;
+ oname = malloc(strlen(name) + 11);
+ sprintf(oname, "OPERATOR(%s)", name);
+ free(name);
+ return oname;
}
oprInfo = findOprByOid(atooid(opr));