Skip to content
Snippets Groups Projects
Commit 1ca0874f authored by Tom Lane's avatar Tom Lane
Browse files

Ooops, I was a little too enthusiastic about suppressing default

index opclasses; they might be default for some other datatype,
in which case we mustn't suppress 'em.
parent 3f8a50c0
No related branches found
No related tags found
No related merge requests found
......@@ -3,7 +3,7 @@
* back to source text
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.83 2001/10/01 20:15:26 tgl Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.84 2001/10/04 22:00:10 tgl Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
......@@ -136,7 +136,7 @@ static void get_sublink_expr(Node *node, deparse_context *context);
static void get_from_clause(Query *query, deparse_context *context);
static void get_from_clause_item(Node *jtnode, Query *query,
deparse_context *context);
static void get_opclass_name(Oid opclass, bool only_nondefault,
static void get_opclass_name(Oid opclass, Oid actual_datatype,
StringInfo buf);
static bool tleIsArrayAssign(TargetEntry *tle);
static char *quote_identifier(char *ident);
......@@ -408,7 +408,9 @@ pg_get_indexdef(PG_FUNCTION_ARGS)
sep = "";
for (keyno = 0; keyno < INDEX_MAX_KEYS; keyno++)
{
if (idxrec->indkey[keyno] == InvalidAttrNumber)
AttrNumber attnum = idxrec->indkey[keyno];
if (attnum == InvalidAttrNumber)
break;
appendStringInfo(&keybuf, sep);
......@@ -419,13 +421,15 @@ pg_get_indexdef(PG_FUNCTION_ARGS)
*/
appendStringInfo(&keybuf, "%s",
quote_identifier(get_relid_attribute_name(idxrec->indrelid,
idxrec->indkey[keyno])));
attnum)));
/*
* If not a functional index, add the operator class name
*/
if (idxrec->indproc == InvalidOid)
get_opclass_name(idxrec->indclass[keyno], true, &keybuf);
get_opclass_name(idxrec->indclass[keyno],
get_atttype(idxrec->indrelid, attnum),
&keybuf);
}
if (idxrec->indproc != InvalidOid)
......@@ -446,7 +450,7 @@ pg_get_indexdef(PG_FUNCTION_ARGS)
appendStringInfo(&buf, "%s(%s)",
quote_identifier(NameStr(procStruct->proname)),
keybuf.data);
get_opclass_name(idxrec->indclass[0], true, &buf);
get_opclass_name(idxrec->indclass[0], procStruct->prorettype, &buf);
ReleaseSysCache(proctup);
}
......@@ -2504,12 +2508,14 @@ get_from_clause_item(Node *jtnode, Query *query, deparse_context *context)
* get_opclass_name - fetch name of an index operator class
*
* The opclass name is appended (after a space) to buf.
* If "only_nondefault" is true, the opclass name is appended only if
* it isn't the default for its datatype.
*
* Output is suppressed if the opclass is the default for the given
* actual_datatype. (If you don't want this behavior, just pass
* InvalidOid for actual_datatype.)
* ----------
*/
static void
get_opclass_name(Oid opclass, bool only_nondefault,
get_opclass_name(Oid opclass, Oid actual_datatype,
StringInfo buf)
{
HeapTuple ht_opc;
......@@ -2521,7 +2527,7 @@ get_opclass_name(Oid opclass, bool only_nondefault,
if (!HeapTupleIsValid(ht_opc))
elog(ERROR, "cache lookup failed for opclass %u", opclass);
opcrec = (Form_pg_opclass) GETSTRUCT(ht_opc);
if (!only_nondefault || !opcrec->opcdefault)
if (actual_datatype != opcrec->opcintype || !opcrec->opcdefault)
appendStringInfo(buf, " %s",
quote_identifier(NameStr(opcrec->opcname)));
ReleaseSysCache(ht_opc);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment