On Wed, Jan 22, 2014 at 1:44 PM, Yugo Nagata <nagata@sraoss.co.jp> wrote:
> On Wed, 22 Jan 2014 20:04:12 +0900 (JST)
> Tatsuo Ishii <ishii@postgresql.org> wrote:
> parseTypeString() is called by some other functions and I avoided
> influences of modifying the definition on them, since this should
> raise errors in most cases. This is same reason for other *MissingOk
> functions in parse_type.c.
>
> Is it better to write definitions of these function and all there callers?
Yes, for parseTypeString certainly. There have been many refactorings
like that in the past and all of them use this pattern.
typenameTypeIdAndMod is less clear since the code paths differ so
much, maybe keep 2 versions (merging back to 1 function is OK too, but
in any case you don't need 3).
typenameTypeIdAndModMissingOk(...)
{ Type tup = LookupTypeName(pstate, typeName, typmod_p); if (tup == NULL || !((Form_pg_type)
GETSTRUCT(tup))->typisdefined) *typeid_p = InvalidOid; else *typeid_p = HeapTupleGetOid(tup);
if (tup) ReleaseSysCache(tup);
}
typenameTypeIdAndMod(...)
{ Type tup = typenameType(pstate, typeName, typmod_p); *typeid_p = HeapTupleGetOid(tup); ReleaseSysCache(tup);
}
----
Also, there's no need for "else" here: if (raiseError) ereport(ERROR, ...); else return InvalidOid;
Regards,
Marti