Commit 4e9df155 authored by Bruce Momjian's avatar Bruce Momjian

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

parent 2e0976e0
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * 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) ...@@ -118,7 +118,7 @@ regprocout(RegProcedure proid)
if (!HeapScanIsValid(procscan)) if (!HeapScanIsValid(procscan))
{ {
heap_close(proc); heap_close(proc);
elog(WARN, "regprocin: could not being scan of %s", elog(WARN, "regprocout: could not being scan of %s",
ProcedureRelationName); ProcedureRelationName);
return (0); return (0);
} }
...@@ -150,6 +150,81 @@ regprocout(RegProcedure proid) ...@@ -150,6 +150,81 @@ regprocout(RegProcedure proid)
return (result); 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 * * PUBLIC ROUTINES *
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.105 1997/11/14 21:37:41 momjian Exp $ * $Header: /cvsroot/pgsql/src/bin/psql/Attic/psql.c,v 1.106 1997/11/15 16:32:03 momjian Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -219,6 +219,7 @@ slashUsage(PsqlSettings *pset) ...@@ -219,6 +219,7 @@ slashUsage(PsqlSettings *pset)
fprintf(fout, " \\d [<table>] -- list tables and indices, columns in <table>, or * for all\n"); fprintf(fout, " \\d [<table>] -- list tables and indices, columns in <table>, or * for all\n");
fprintf(fout, " \\da -- list aggregates\n"); fprintf(fout, " \\da -- list aggregates\n");
fprintf(fout, " \\dd [<object>]- list comment for table, field, type, function, or operator.\n"); fprintf(fout, " \\dd [<object>]- list comment for table, field, type, function, or operator.\n");
fprintf(fout, " \\df -- list functions\n");
fprintf(fout, " \\di -- list only indices\n"); fprintf(fout, " \\di -- list only indices\n");
fprintf(fout, " \\do -- list operators\n"); fprintf(fout, " \\do -- list operators\n");
fprintf(fout, " \\ds -- list only sequences\n"); fprintf(fout, " \\ds -- list only sequences\n");
...@@ -1691,6 +1692,20 @@ HandleSlashCmds(PsqlSettings *pset, ...@@ -1691,6 +1692,20 @@ HandleSlashCmds(PsqlSettings *pset,
else if (strncmp(cmd, "dd", 2) == 0) else if (strncmp(cmd, "dd", 2) == 0)
/* descriptions */ /* descriptions */
objectDescription(pset, optarg+1, NULL); objectDescription(pset, optarg+1, NULL);
else if (strncmp(cmd, "df", 2) == 0)
/* functions/procedures */
/* we skip in/out funcs by excluding functions that take
some arguments, but have no types defined for those arguments */
SendQuery(&success, pset,"\
SELECT p.proname as function, \
t.typname as return_type, \
oid8types(p.proargtypes) as arguments, \
obj_description(p.oid) \
FROM pg_proc p, pg_type t \
WHERE p.prorettype = t.oid and \
(pronargs = 0 or oid8types(p.proargtypes) != '') \
ORDER BY function;",
false, false, 0);
else if (strncmp(cmd, "di", 2) == 0) else if (strncmp(cmd, "di", 2) == 0)
/* only indices */ /* only indices */
tableList(pset, false, 'i'); tableList(pset, false, 'i');
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: pg_proc.h,v 1.35 1997/11/14 21:37:54 momjian Exp $ * $Id: pg_proc.h,v 1.36 1997/11/15 16:32:09 momjian Exp $
* *
* NOTES * NOTES
* The script catalog/genbki.sh reads this file and generates .bki * The script catalog/genbki.sh reads this file and generates .bki
...@@ -1651,6 +1651,8 @@ DATA(insert OID = 1347 ( int4 PGUID 14 f t f 1 f 23 "25" 100 0 0 100 "sele ...@@ -1651,6 +1651,8 @@ DATA(insert OID = 1347 ( int4 PGUID 14 f t f 1 f 23 "25" 100 0 0 100 "sele
DESCR(""); DESCR("");
DATA(insert OID = 1348 ( obj_description PGUID 14 f t f 1 f 25 "26" 100 0 0 100 "select description from pg_description where objoid = $1" - )); DATA(insert OID = 1348 ( obj_description PGUID 14 f t f 1 f 25 "26" 100 0 0 100 "select description from pg_description where objoid = $1" - ));
DESCR(""); DESCR("");
DATA(insert OID = 1349 ( oid8types PGUID 11 f t f 1 f 25 "30" 100 0 0 100 foo bar ));
DESCR("");
DATA(insert OID = 1350 ( datetime PGUID 14 f t f 1 f 1184 "1184" 100 0 0 100 "select $1" - )); DATA(insert OID = 1350 ( datetime PGUID 14 f t f 1 f 1184 "1184" 100 0 0 100 "select $1" - ));
DESCR(""); DESCR("");
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* *
* Copyright (c) 1994, Regents of the University of California * Copyright (c) 1994, Regents of the University of California
* *
* $Id: builtins.h,v 1.29 1997/10/30 16:42:50 thomas Exp $ * $Id: builtins.h,v 1.30 1997/11/15 16:32:15 momjian Exp $
* *
* NOTES * NOTES
* This should normally only be included by fmgr.h. * This should normally only be included by fmgr.h.
...@@ -410,6 +410,7 @@ extern bool texticregexne(struct varlena * s, struct varlena * p); ...@@ -410,6 +410,7 @@ extern bool texticregexne(struct varlena * s, struct varlena * p);
/* regproc.c */ /* regproc.c */
extern int32 regprocin(char *proname); extern int32 regprocin(char *proname);
extern char *regprocout(RegProcedure proid); extern char *regprocout(RegProcedure proid);
extern text *oid8types(Oid (*oidArray)[]);
extern Oid regproctooid(RegProcedure rp); extern Oid regproctooid(RegProcedure rp);
/* define macro to replace mixed-case function call - tgl 97/04/27 */ /* define macro to replace mixed-case function call - tgl 97/04/27 */
......
.\" This is -*-nroff-*- .\" This is -*-nroff-*-
.\" XXX standard disclaimer belongs here.... .\" XXX standard disclaimer belongs here....
.\" $Header: /cvsroot/pgsql/src/man/Attic/psql.1,v 1.16 1997/11/15 02:47:23 thomas Exp $ .\" $Header: /cvsroot/pgsql/src/man/Attic/psql.1,v 1.17 1997/11/15 16:32:25 momjian Exp $
.TH PSQL UNIX 1/20/96 PostgreSQL PostgreSQL .TH PSQL UNIX 1/20/96 PostgreSQL PostgreSQL
.SH NAME .SH NAME
psql \(em run the interactive query front-end psql \(em run the interactive query front-end
...@@ -296,6 +296,8 @@ list all tables and column information for each tables. ...@@ -296,6 +296,8 @@ list all tables and column information for each tables.
List aggregates. List aggregates.
.IP "\edd object" .IP "\edd object"
List the description of the table, table.column, type, operator, or aggregate. List the description of the table, table.column, type, operator, or aggregate.
.IP "\edf"
List functions.
.IP "\edi" .IP "\edi"
List only indexes. List only indexes.
.IP "\edo" .IP "\edo"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment