Index: src/pl/plpgsql/src/pl_comp.c =================================================================== RCS file: /opt/src/cvs/pgsql-server/src/pl/plpgsql/src/pl_comp.c,v retrieving revision 1.59 diff -c -r1.59 pl_comp.c *** src/pl/plpgsql/src/pl_comp.c 1 Jul 2003 21:47:09 -0000 1.59 --- src/pl/plpgsql/src/pl_comp.c 3 Jul 2003 17:59:48 -0000 *************** *** 354,359 **** --- 354,395 ---- function->fn_rettyplen = typeStruct->typlen; function->fn_rettypelem = typeStruct->typelem; perm_fmgr_info(typeStruct->typinput, &(function->fn_retinput)); + + /* + * install $0 reference, but only for polymorphic + * return types + */ + if (procStruct->prorettype == ANYARRAYOID || + procStruct->prorettype == ANYELEMENTOID) + { + char buf[32]; + + /* name for variable */ + snprintf(buf, sizeof(buf), "$%d", 0); + + /* + * Normal return values get a var node + */ + var = malloc(sizeof(PLpgSQL_var)); + memset(var, 0, sizeof(PLpgSQL_var)); + + var->dtype = PLPGSQL_DTYPE_VAR; + var->refname = strdup(buf); + var->lineno = 0; + var->datatype = build_datatype(typeTup, -1); + var->isconst = false; + var->notnull = false; + var->default_val = NULL; + + /* preset to NULL */ + var->value = 0; + var->isnull = true; + var->freeval = false; + + plpgsql_adddatum((PLpgSQL_datum *) var); + plpgsql_ns_additem(PLPGSQL_NSTYPE_VAR, var->varno, + var->refname); + } } ReleaseSysCache(typeTup);