summaryrefslogtreecommitdiff
path: root/src/bin/psql
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2002-04-11 20:00:18 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2002-04-11 20:00:18 +0000
commit902a6a0a4bc62d619a5ccd1ef0ff7fb3a5d897f1 (patch)
treec5cc85818d8a3ffae03a23bacd3e679945a41dbd /src/bin/psql
parent3f6299df6c7d905bdef44eb3a4b19f248ebc14dc (diff)
downloadpostgresql-902a6a0a4bc62d619a5ccd1ef0ff7fb3a5d897f1.tar.gz
Restructure representation of aggregate functions so that they have pg_proc
entries, per pghackers discussion. This fixes aggregates to live in namespaces, and also simplifies/speeds up lookup in parse_func.c. Also, add a 'proimplicit' flag to pg_proc that controls whether a type coercion function may be invoked implicitly, or only explicitly. The current settings of these flags are more permissive than I would like, but we will need to debate and refine the behavior; for now, I avoided breaking regression tests as much as I could.
Diffstat (limited to 'src/bin/psql')
-rw-r--r--src/bin/psql/describe.c30
-rw-r--r--src/bin/psql/tab-complete.c4
2 files changed, 18 insertions, 16 deletions
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index 68bbcfb802..5c00ba8781 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/describe.c,v 1.48 2002/04/05 11:52:38 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/describe.c,v 1.49 2002/04/11 20:00:08 tgl Exp $
*/
#include "postgres_fe.h"
#include "describe.h"
@@ -43,22 +43,23 @@ describeAggregates(const char *name)
/*
* There are two kinds of aggregates: ones that work on particular
- * types ones that work on all
+ * types and ones that work on all (denoted by input type = 0)
*/
snprintf(buf, sizeof(buf),
- "SELECT a.aggname AS \"%s\",\n"
- " CASE a.aggbasetype\n"
+ "SELECT p.proname AS \"%s\",\n"
+ " CASE p.proargtypes[0]\n"
" WHEN 0 THEN CAST('%s' AS text)\n"
- " ELSE format_type(a.aggbasetype, NULL)\n"
+ " ELSE format_type(p.proargtypes[0], NULL)\n"
" END AS \"%s\",\n"
- " obj_description(a.oid, 'pg_aggregate') as \"%s\"\n"
- "FROM pg_aggregate a\n",
+ " obj_description(p.oid, 'pg_proc') as \"%s\"\n"
+ "FROM pg_proc p\n"
+ "WHERE p.proisagg\n",
_("Name"), _("(all types)"),
_("Data type"), _("Description"));
if (name)
{
- strcat(buf, "WHERE a.aggname ~ '^");
+ strcat(buf, " AND p.proname ~ '^");
strncat(buf, name, REGEXP_CUTOFF);
strcat(buf, "'\n");
}
@@ -112,12 +113,12 @@ describeFunctions(const char *name, bool verbose)
if (!verbose)
strcat(buf,
"\nFROM pg_proc p\n"
- "WHERE p.prorettype <> 0 AND (pronargs = 0 OR oidvectortypes(p.proargtypes) <> '')\n");
+ "WHERE p.prorettype <> 0 AND (pronargs = 0 OR oidvectortypes(p.proargtypes) <> '') AND NOT p.proisagg\n");
else
strcat(buf,
"\nFROM pg_proc p, pg_language l, pg_user u\n"
"WHERE p.prolang = l.oid AND p.proowner = u.usesysid\n"
- " AND p.prorettype <> 0 AND (pronargs = 0 OR oidvectortypes(p.proargtypes) <> '')\n");
+ " AND p.prorettype <> 0 AND (pronargs = 0 OR oidvectortypes(p.proargtypes) <> '') AND NOT p.proisagg\n");
if (name)
{
@@ -347,16 +348,17 @@ objectDescription(const char *object)
"FROM (\n"
/* Aggregate descriptions */
- " SELECT a.oid as oid, a.tableoid as tableoid,\n"
- " CAST(a.aggname AS text) as name, CAST('%s' AS text) as object\n"
- " FROM pg_aggregate a\n"
+ " SELECT p.oid as oid, p.tableoid as tableoid,\n"
+ " CAST(p.proname AS text) as name, CAST('%s' AS text) as object\n"
+ " FROM pg_proc p\n"
+ " WHERE p.proisagg\n"
/* Function descriptions (except in/outs for datatypes) */
"UNION ALL\n"
" SELECT p.oid as oid, p.tableoid as tableoid,\n"
" CAST(p.proname AS text) as name, CAST('%s' AS text) as object\n"
" FROM pg_proc p\n"
- " WHERE p.pronargs = 0 or oidvectortypes(p.proargtypes) <> ''\n"
+ " WHERE (p.pronargs = 0 or oidvectortypes(p.proargtypes) <> '') AND NOT p.proisagg\n"
/* Operator descriptions (must get comment via associated function) */
"UNION ALL\n"
diff --git a/src/bin/psql/tab-complete.c b/src/bin/psql/tab-complete.c
index f25a45ef62..ce75211bbe 100644
--- a/src/bin/psql/tab-complete.c
+++ b/src/bin/psql/tab-complete.c
@@ -3,7 +3,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/bin/psql/tab-complete.c,v 1.47 2002/04/01 03:34:27 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/tab-complete.c,v 1.48 2002/04/11 20:00:09 tgl Exp $
*/
/*----------------------------------------------------------------------
@@ -132,7 +132,7 @@ typedef struct
} pgsql_thing_t;
pgsql_thing_t words_after_create[] = {
- {"AGGREGATE", "SELECT distinct aggname FROM pg_aggregate WHERE substr(aggname,1,%d)='%s'"},
+ {"AGGREGATE", "SELECT distinct proname FROM pg_proc WHERE proisagg AND substr(proname,1,%d)='%s'"},
{"DATABASE", "SELECT datname FROM pg_database WHERE substr(datname,1,%d)='%s'"},
{"FUNCTION", "SELECT distinct proname FROM pg_proc WHERE substr(proname,1,%d)='%s'"},
{"GROUP", "SELECT groname FROM pg_group WHERE substr(groname,1,%d)='%s'"},