When given a nonzero column number, pg_get_indexdef() is only supposed to

print the index key variable or expression for that column.  It was mistakenly
printing ASC/DESC/NULLS FIRST/NULLS LAST decoration too --- and not only for
the target column, but all columns.  Someday we should have an option to
extract that info (and the opclass decoration as well) for a single index
column ... but today is not that day.  Per bug #3829 and subsequent
discussion.
This commit is contained in:
Tom Lane 2007-12-20 00:23:19 +00:00
parent 1b1f7e977b
commit ef6bac3323

View File

@ -9,7 +9,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.266 2007/12/01 23:44:44 tgl Exp $ * $PostgreSQL: pgsql/src/backend/utils/adt/ruleutils.c,v 1.267 2007/12/20 00:23:19 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
@ -769,25 +769,28 @@ pg_get_indexdef_worker(Oid indexrelid, int colno, bool showTblSpc,
keycoltype = exprType(indexkey); keycoltype = exprType(indexkey);
} }
/* Add the operator class name */ /* Provide decoration only in the colno=0 case */
if (!colno) if (!colno)
{
/* Add the operator class name, if not default */
get_opclass_name(indclass->values[keyno], keycoltype, &buf); get_opclass_name(indclass->values[keyno], keycoltype, &buf);
/* Add options if relevant */ /* Add options if relevant */
if (amrec->amcanorder) if (amrec->amcanorder)
{
/* if it supports sort ordering, report DESC and NULLS opts */
if (opt & INDOPTION_DESC)
{ {
appendStringInfo(&buf, " DESC"); /* if it supports sort ordering, report DESC and NULLS opts */
/* NULLS FIRST is the default in this case */ if (opt & INDOPTION_DESC)
if (!(opt & INDOPTION_NULLS_FIRST)) {
appendStringInfo(&buf, " NULLS LAST"); appendStringInfo(&buf, " DESC");
} /* NULLS FIRST is the default in this case */
else if (!(opt & INDOPTION_NULLS_FIRST))
{ appendStringInfo(&buf, " NULLS LAST");
if (opt & INDOPTION_NULLS_FIRST) }
appendStringInfo(&buf, " NULLS FIRST"); else
{
if (opt & INDOPTION_NULLS_FIRST)
appendStringInfo(&buf, " NULLS FIRST");
}
} }
} }
} }