Show index predicate when doing \d on a partial index.
This commit is contained in:
parent
e8f1097361
commit
4cba72ccc8
@ -3,7 +3,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright 2000 by PostgreSQL Global Development Group
|
* Copyright 2000 by PostgreSQL Global Development Group
|
||||||
*
|
*
|
||||||
* $Header: /cvsroot/pgsql/src/bin/psql/describe.c,v 1.35 2001/07/08 14:42:17 petere Exp $
|
* $Header: /cvsroot/pgsql/src/bin/psql/describe.c,v 1.36 2001/08/05 22:13:46 tgl Exp $
|
||||||
*/
|
*/
|
||||||
#include "postgres_fe.h"
|
#include "postgres_fe.h"
|
||||||
#include "describe.h"
|
#include "describe.h"
|
||||||
@ -27,8 +27,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* the maximal size of regular expression we'll accept here */
|
/* the maximal size of regular expression we'll accept here */
|
||||||
/* (it is save to just change this here) */
|
/* (it is safe to just change this here) */
|
||||||
#define REGEXP_CUTOFF 10 * NAMEDATALEN
|
#define REGEXP_CUTOFF (10 * NAMEDATALEN)
|
||||||
|
|
||||||
|
|
||||||
/* \da
|
/* \da
|
||||||
@ -637,49 +637,65 @@ describeTableDetails(const char *name, bool desc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Make footers */
|
/* Make footers */
|
||||||
/* Information about the index */
|
|
||||||
if (tableinfo.relkind == 'i')
|
if (tableinfo.relkind == 'i')
|
||||||
{
|
{
|
||||||
|
/* Footer information about an index */
|
||||||
PGresult *result;
|
PGresult *result;
|
||||||
|
|
||||||
sprintf(buf, "SELECT i.indisunique, i.indisprimary, i.indislossy, a.amname\n"
|
sprintf(buf, "SELECT i.indisunique, i.indisprimary, i.indislossy, a.amname,\n"
|
||||||
|
" pg_get_expr(i.indpred, i.indrelid) as indpred\n"
|
||||||
"FROM pg_index i, pg_class c, pg_am a\n"
|
"FROM pg_index i, pg_class c, pg_am a\n"
|
||||||
"WHERE i.indexrelid = c.oid AND c.relname = '%s' AND c.relam = a.oid",
|
"WHERE i.indexrelid = c.oid AND c.relname = '%s' AND c.relam = a.oid",
|
||||||
name);
|
name);
|
||||||
|
|
||||||
result = PSQLexec(buf);
|
result = PSQLexec(buf);
|
||||||
if (!result)
|
if (!result || PQntuples(result) != 1)
|
||||||
error = true;
|
error = true;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
char *indisunique = PQgetvalue(result, 0, 0);
|
||||||
|
char *indisprimary = PQgetvalue(result, 0, 1);
|
||||||
|
char *indislossy = PQgetvalue(result, 0, 2);
|
||||||
|
char *indamname = PQgetvalue(result, 0, 3);
|
||||||
|
char *indpred = PQgetvalue(result, 0, 4);
|
||||||
|
|
||||||
|
footers = xmalloc(3 * sizeof(*footers));
|
||||||
/* XXX This construction is poorly internationalized. */
|
/* XXX This construction is poorly internationalized. */
|
||||||
footers = xmalloc(2 * sizeof(*footers));
|
|
||||||
footers[0] = xmalloc(NAMEDATALEN + 128);
|
footers[0] = xmalloc(NAMEDATALEN + 128);
|
||||||
snprintf(footers[0], NAMEDATALEN + 128, "%s%s%s",
|
snprintf(footers[0], NAMEDATALEN + 128, "%s%s",
|
||||||
strcmp(PQgetvalue(result, 0, 0), "t") == 0 ? _("unique ") : "",
|
strcmp(indisunique, "t") == 0 ? _("unique ") : "",
|
||||||
PQgetvalue(result, 0, 3),
|
indamname);
|
||||||
strcmp(PQgetvalue(result, 0, 2), "t") == 0 ? _(" (lossy)") : ""
|
if (strcmp(indisprimary, "t") == 0)
|
||||||
);
|
|
||||||
if (strcmp(PQgetvalue(result, 0, 1), "t") == 0)
|
|
||||||
snprintf(footers[0] + strlen(footers[0]),
|
snprintf(footers[0] + strlen(footers[0]),
|
||||||
NAMEDATALEN + 128 - strlen(footers[0]),
|
NAMEDATALEN + 128 - strlen(footers[0]),
|
||||||
_(" (primary key)"));
|
_(" (primary key)"));
|
||||||
footers[1] = NULL;
|
if (strcmp(indislossy, "t") == 0)
|
||||||
|
snprintf(footers[0] + strlen(footers[0]),
|
||||||
|
NAMEDATALEN + 128 - strlen(footers[0]),
|
||||||
|
_(" (lossy)"));
|
||||||
|
if (strlen(indpred) > 0)
|
||||||
|
{
|
||||||
|
footers[1] = xmalloc(64 + strlen(indpred));
|
||||||
|
snprintf(footers[1], 64 + strlen(indpred),
|
||||||
|
_("Index predicate: %s"), indpred);
|
||||||
|
footers[2] = NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
footers[1] = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Information about the view */
|
|
||||||
else if (view_def)
|
else if (view_def)
|
||||||
{
|
{
|
||||||
|
/* Footer information about a view */
|
||||||
footers = xmalloc(2 * sizeof(*footers));
|
footers = xmalloc(2 * sizeof(*footers));
|
||||||
footers[0] = xmalloc(64 + strlen(view_def));
|
footers[0] = xmalloc(64 + strlen(view_def));
|
||||||
snprintf(footers[0], 64 + strlen(view_def),
|
snprintf(footers[0], 64 + strlen(view_def),
|
||||||
_("View definition: %s"), view_def);
|
_("View definition: %s"), view_def);
|
||||||
footers[1] = NULL;
|
footers[1] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Information about the table */
|
|
||||||
else if (tableinfo.relkind == 'r')
|
else if (tableinfo.relkind == 'r')
|
||||||
{
|
{
|
||||||
|
/* Footer information about a table */
|
||||||
PGresult *result1 = NULL,
|
PGresult *result1 = NULL,
|
||||||
*result2 = NULL,
|
*result2 = NULL,
|
||||||
*result3 = NULL,
|
*result3 = NULL,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user