aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt')
-rw-r--r--src/backend/utils/adt/ruleutils.c55
-rw-r--r--src/backend/utils/adt/sets.c11
-rw-r--r--src/backend/utils/adt/varchar.c15
3 files changed, 50 insertions, 31 deletions
diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c
index d8340234397..501d5a2095f 100644
--- a/src/backend/utils/adt/ruleutils.c
+++ b/src/backend/utils/adt/ruleutils.c
@@ -3,7 +3,7 @@
* back to source text
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.95 2002/03/22 02:56:35 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/ruleutils.c,v 1.96 2002/04/11 20:00:04 tgl Exp $
*
* This software is copyrighted by Jan Wieck - Hamburg.
*
@@ -130,6 +130,7 @@ static void get_names_for_var(Var *var, deparse_context *context,
char **refname, char **attname);
static void get_rule_expr(Node *node, deparse_context *context);
static void get_func_expr(Expr *expr, deparse_context *context);
+static void get_agg_expr(Aggref *aggref, deparse_context *context);
static Node *strip_type_coercion(Node *expr, Oid resultType);
static void get_tle_expr(TargetEntry *tle, deparse_context *context);
static void get_const_expr(Const *constval, deparse_context *context);
@@ -1694,18 +1695,7 @@ get_rule_expr(Node *node, deparse_context *context)
break;
case T_Aggref:
- {
- Aggref *aggref = (Aggref *) node;
-
- appendStringInfo(buf, "%s(%s",
- quote_identifier(aggref->aggname),
- aggref->aggdistinct ? "DISTINCT " : "");
- if (aggref->aggstar)
- appendStringInfo(buf, "*");
- else
- get_rule_expr(aggref->target, context);
- appendStringInfoChar(buf, ')');
- }
+ get_agg_expr((Aggref *) node, context);
break;
case T_Iter:
@@ -2000,6 +1990,45 @@ get_func_expr(Expr *expr, deparse_context *context)
ReleaseSysCache(proctup);
}
+/* ----------
+ * get_agg_expr - Parse back an Aggref node
+ * ----------
+ */
+static void
+get_agg_expr(Aggref *aggref, deparse_context *context)
+{
+ StringInfo buf = context->buf;
+ HeapTuple proctup;
+ Form_pg_proc procStruct;
+ char *proname;
+
+ /*
+ * Get the aggregate's pg_proc tuple
+ */
+ proctup = SearchSysCache(PROCOID,
+ ObjectIdGetDatum(aggref->aggfnoid),
+ 0, 0, 0);
+ if (!HeapTupleIsValid(proctup))
+ elog(ERROR, "cache lookup for proc %u failed", aggref->aggfnoid);
+
+ procStruct = (Form_pg_proc) GETSTRUCT(proctup);
+ proname = NameStr(procStruct->proname);
+
+ /*
+ * Display it
+ */
+ appendStringInfo(buf, "%s(%s",
+ quote_identifier(proname),
+ aggref->aggdistinct ? "DISTINCT " : "");
+ if (aggref->aggstar)
+ appendStringInfo(buf, "*");
+ else
+ get_rule_expr(aggref->target, context);
+ appendStringInfoChar(buf, ')');
+
+ ReleaseSysCache(proctup);
+}
+
/*
* strip_type_coercion
diff --git a/src/backend/utils/adt/sets.c b/src/backend/utils/adt/sets.c
index 2302928624a..a0403615527 100644
--- a/src/backend/utils/adt/sets.c
+++ b/src/backend/utils/adt/sets.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/sets.c,v 1.42 2002/04/05 00:31:29 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/Attic/sets.c,v 1.43 2002/04/11 20:00:05 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -58,16 +58,19 @@ SetDefine(char *querystr, Oid elemType)
true, /* returnsSet */
elemType, /* returnType */
SQLlanguageId, /* language */
- querystr, /* sourceCode */
- fileName, /* fileName */
+ querystr, /* prosrc */
+ fileName, /* probin */
+ false, /* not aggregate */
true, /* trusted */
+ false, /* not implicit coercion */
false, /* isStrict (irrelevant, no args) */
PROVOLATILE_VOLATILE, /* assume unsafe */
100, /* byte_pct */
0, /* perbyte_cpu */
0, /* percall_cpu */
100, /* outin_ratio */
- NIL); /* argList */
+ 0, /* parameterCount */
+ NULL); /* parameterTypes */
/*
* Since we're still inside this command of the transaction, we can't
diff --git a/src/backend/utils/adt/varchar.c b/src/backend/utils/adt/varchar.c
index e384b3f6220..f2d318b820b 100644
--- a/src/backend/utils/adt/varchar.c
+++ b/src/backend/utils/adt/varchar.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.88 2002/03/09 17:35:36 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/adt/varchar.c,v 1.89 2002/04/11 20:00:05 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -307,19 +307,6 @@ _bpchar(PG_FUNCTION_ARGS)
}
-/* bpchar_char()
- * Convert bpchar(1) to char.
- *
- * If input is multiple chars, only the first is returned.
- */
-Datum
-bpchar_char(PG_FUNCTION_ARGS)
-{
- BpChar *s = PG_GETARG_BPCHAR_P(0);
-
- PG_RETURN_CHAR(*VARDATA(s));
-}
-
/* char_bpchar()
* Convert char to bpchar(1).
*/