Re: massive quotes? - Mailing list pgsql-hackers

From Andrew Dunstan
Subject Re: massive quotes?
Date
Msg-id 3F50CDB4.8020401@dunslane.net
Whole thread Raw
In response to Re: massive quotes?  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-hackers
There's certainly a TODO, but I'm not yet 100% sure that the solution 
Jon proposed is best. I'm looking at it as we write, and making it work 
looks to be somewhat complex. If we go that road we would probably need 
to generalise somewhat the COPY code.

The alternative in my mind is some function foo such that foo(e) = 'e'

Comments are welcome - this is virgin ground for me :-)

andrew

Bruce Momjian wrote:

>Is there a TODO here?  The only problem I see is that it introduces the
>idea of special column-1 handling, which we don't have right now, except
>in COPY.
>
>---------------------------------------------------------------------------
>
>Andrew Dunstan wrote:
>  
>
>>Jon Jensen wrote:
>>
>>    
>>
>>>On Thu, 28 Aug 2003, Andrew Dunstan wrote:
>>>
>>> 
>>>
>>>      
>>>
>>>>What is the state of things regarding having to use massive strings of 
>>>>quotes like this (taken from the 7.3 docs)?:
>>>>
>>>>a_output := a_output || '' if v_'' || 
>>>>    referrer_keys.kind || '' like '''''''''' 
>>>>    || referrer_keys.key_string || '''''''''' 
>>>>    then return ''''''  || referrer_keys.referrer_type 
>>>>    || ''''''; end if;''; 
>>>>
>>>>This is truly ugly, IMNSHO. Perl has its q() construct - any chance of
>>>>us doing something here?
>>>>
>>>>I'm prepared to put in effort to implement a solution if there is
>>>>agreement on what the solution should be. Maybe some sort of magical
>>>>operator/function?
>>>>   
>>>>
>>>>        
>>>>
>>>I was thinking the most natural thing would be to use something similar to 
>>>COPY's stdin quoting:
>>>
>>>CREATE FUNCTION bob() RETURNS INTEGER AS stdin LANGUAGE 'plpgsql';
>>>BEGIN
>>>    ...
>>>END;
>>>\.
>>>
>>>Another possibility would be shell/Perl-style here documents, like this:
>>>
>>>CREATE FUNCTION bob() RETURNS INTEGER AS <<EOF
>>>BEGIN
>>>    ...
>>>END;
>>>EOF
>>>LANGUAGE 'plpgsql';
>>>
>>>The former seems preferable since it uses a syntax PostgreSQL already
>>>supports in another context.
>>>
>>>Jon
>>> 
>>>
>>>      
>>>
>>Nice idea. I would probably never have thought of it :-) Makes function 
>>text almost first class, in the way that Oracle's is AFAICS,
>>
>>I also prefer the first version, not least because it hoists the 
>>LANGUAGE clause to the top where it seems to me it belongs.
>>
>>I have no idea how hard this would be.
>>
>>
>>cheers
>>
>>andrew
>>
>>    
>>



pgsql-hackers by date:

Previous
From: Jon Jensen
Date:
Subject: Re: massive quotes?
Next
From: Bruce Momjian
Date:
Subject: Re: FE/BE Protocol - Specific version