mirror of
https://github.com/postgres/postgres.git
synced 2025-06-02 00:01:40 -04:00
Add new \df psql option and oid8types() function.
This commit is contained in:
parent
2e0976e003
commit
4e9df155f0
@ -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)
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* 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)
|
|||||||
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,
|
|||||||
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 @@
|
|||||||
*
|
*
|
||||||
* 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
|
|||||||
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 @@
|
|||||||
*
|
*
|
||||||
* 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);
|
|||||||
/* 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 */
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
.\" 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.
|
|||||||
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"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user