diff options
Diffstat (limited to 'src/backend/utils/adt')
-rw-r--r-- | src/backend/utils/adt/ruleutils.c | 55 | ||||
-rw-r--r-- | src/backend/utils/adt/sets.c | 11 | ||||
-rw-r--r-- | src/backend/utils/adt/varchar.c | 15 |
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). */ |