Add new \df psql option and oid8types() function.
This commit is contained in:
parent
2e0976e003
commit
4e9df155f0
|
@ -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 *
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
*
|
||||
*
|
||||
* 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)
|
|||
fprintf(fout, " \\d [<table>] -- list tables and indices, columns in <table>, or * for all\n");
|
||||
fprintf(fout, " \\da -- list aggregates\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, " \\do -- list operators\n");
|
||||
fprintf(fout, " \\ds -- list only sequences\n");
|
||||
|
@ -1691,6 +1692,20 @@ HandleSlashCmds(PsqlSettings *pset,
|
|||
else if (strncmp(cmd, "dd", 2) == 0)
|
||||
/* descriptions */
|
||||
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)
|
||||
/* only indices */
|
||||
tableList(pset, false, 'i');
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
*
|
||||
* 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
|
||||
* 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
|
|||
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" - ));
|
||||
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" - ));
|
||||
DESCR("");
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
*
|
||||
* 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
|
||||
* This should normally only be included by fmgr.h.
|
||||
|
@ -410,6 +410,7 @@ extern bool texticregexne(struct varlena * s, struct varlena * p);
|
|||
/* regproc.c */
|
||||
extern int32 regprocin(char *proname);
|
||||
extern char *regprocout(RegProcedure proid);
|
||||
extern text *oid8types(Oid (*oidArray)[]);
|
||||
extern Oid regproctooid(RegProcedure rp);
|
||||
|
||||
/* define macro to replace mixed-case function call - tgl 97/04/27 */
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
.\" This is -*-nroff-*-
|
||||
.\" 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
|
||||
.SH NAME
|
||||
psql \(em run the interactive query front-end
|
||||
|
@ -296,6 +296,8 @@ list all tables and column information for each tables.
|
|||
List aggregates.
|
||||
.IP "\edd object"
|
||||
List the description of the table, table.column, type, operator, or aggregate.
|
||||
.IP "\edf"
|
||||
List functions.
|
||||
.IP "\edi"
|
||||
List only indexes.
|
||||
.IP "\edo"
|
||||
|
|
Loading…
Reference in New Issue