diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2002-04-11 20:00:18 +0000 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2002-04-11 20:00:18 +0000 |
| commit | 902a6a0a4bc62d619a5ccd1ef0ff7fb3a5d897f1 (patch) | |
| tree | c5cc85818d8a3ffae03a23bacd3e679945a41dbd /src/bin/psql | |
| parent | 3f6299df6c7d905bdef44eb3a4b19f248ebc14dc (diff) | |
| download | postgresql-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.c | 30 | ||||
| -rw-r--r-- | src/bin/psql/tab-complete.c | 4 |
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'"}, |
