1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-10 17:42:29 +03:00

Add new \df psql option and oid8types() function.

This commit is contained in:
Bruce Momjian
1997-11-15 16:32:25 +00:00
parent 2e0976e003
commit 4e9df155f0
5 changed files with 101 additions and 6 deletions

View File

@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.8 1997/10/25 01:10:45 momjian Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/adt/regproc.c,v 1.9 1997/11/15 16:32:01 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -118,7 +118,7 @@ regprocout(RegProcedure proid)
if (!HeapScanIsValid(procscan))
{
heap_close(proc);
elog(WARN, "regprocin: could not being scan of %s",
elog(WARN, "regprocout: could not being scan of %s",
ProcedureRelationName);
return (0);
}
@@ -150,6 +150,81 @@ regprocout(RegProcedure proid)
return (result);
}
/*
* int8typeout - converts int8 type oids to "typname" list
*/
text *
oid8types(Oid (*oidArray)[])
{
Relation type;
HeapScanDesc typescan;
HeapTuple typetup;
text *result;
ScanKeyData key;
register int num;
register Oid *sp;
if (oidArray == NULL)
{
result = (text *) palloc(VARHDRSZ);
VARSIZE(result) = 0;
return (result);
}
result = (text *) palloc(NAMEDATALEN * 8 + 8 + VARHDRSZ);
*VARDATA(result) = '\0';
type = heap_openr(TypeRelationName);
if (!RelationIsValid(type))
{
elog(WARN, "int8typeout: could not open %s",
TypeRelationName);
return (0);
}
sp = *oidArray;
for (num = 8; num != 0; num--, sp++)
{
if (*sp != InvalidOid)
{
ScanKeyEntryInitialize(&key,
(bits16) 0,
(AttrNumber) ObjectIdAttributeNumber,
(RegProcedure) F_INT4EQ,
(Datum) *sp);
typescan = heap_beginscan(type, 0, NowTimeQual, 1, &key);
if (!HeapScanIsValid(typescan))
{
heap_close(type);
elog(WARN, "int8typeout: could not being scan of %s",
TypeRelationName);
return (0);
}
typetup = heap_getnext(typescan, 0, (Buffer *) NULL);
if (HeapTupleIsValid(typetup))
{
char *s;
bool isnull;
s = (char *) heap_getattr(typetup, InvalidBuffer, 1,
RelationGetTupleDescriptor(type), &isnull);
if (!isnull)
{
StrNCpy(VARDATA(result)+strlen(VARDATA(result)),s,16);
strcat(VARDATA(result)," ");
}
else
elog(FATAL, "int8typeout: null procedure %d", *sp);
/* FALLTHROUGH */
}
heap_endscan(typescan);
}
}
heap_close(type);
VARSIZE(result) = strlen(VARDATA(result)) + VARHDRSZ;
return (result);
}
/*****************************************************************************
* PUBLIC ROUTINES *