Robert Haas wrote:
On Sep 8, 2010, at 3:17 PM, Darren Duncan wrote:
Bruce Momjian wrote:
Sergey Konoplev wrote:
CREATE FUNCTION func_very_very_very_very_long_name() RETURNS integer AS $$
<< func_alias >>
var_name text := 'bla';
RAISE INFO '%', func_alias.var_name;
I suggest that it might be reasonable to introduce a new syntax, that isn't already valid for something inside a routine, and use that as a terse way to reference the current function and/or its parameters. This may best be a simple constant syntax.
This has been proposed in the past and Tom has rejected it, but I agree that it would be useful. The key word in this proposal is "terse".
In fact I'm not particularly enamored with my ".foo" example suggestion because
I would actually prefer for that particular syntax to be left unused and
available for other possible future uses that are better thought out.
I think instead that something akin to an explicit alias would both be more
future-proofed and be the least surprising to existing users, as per #3. If the
alias was very short, then we have something terse for usage.
I should also say that this subject has some bearing on the topic of aliases or
synonyms in general. In the situations where one wants an entity to be
referenceable by more than one name, and knows this at the time of declaring
said entity, there could be a syntax for declaring the extra names inline with
For example, if it wouldn't conflict with anything, one could use the "|" symbol
(mnemonic is that means "alternation" in regular expressions) like this:
CREATE FUNCTION func_very_very_very_very_long_name|short_name() ...
... but this could use some work since I also see that being useful for
declaring synonyms inline, which are public names like the original, not just
internal private names. When used for synonyms, this would still be represented
in the system catalog as a function named func_very... and a synonym named
short_name, this synonym being akin to a Unix soft link or a C symbolic alias in
Similarly, and mainly for use with named argument syntax, a named parameter
could have several names it could go by, declared with | also. Example:
CREATE FUNCTION func_name(arg_name|altnm text) ...
It doesn't have to be that syntax, but I demonstrated a principle, and I
personally like "|" for the mnemonic.
-- Darren Duncan