While trying to understand dollar-quoting, I found the following in psql:

    select $a$ hello $a$;

behaves as expected, but psql does not like

    select $a$ \ $a$;
or
    select $a$ \\ $a$;

Should it? How should a dollar-quote handle:

    $a$ \$a\$a $a$

?



----------------------------------------------------------------
Philip Warner                    |     __---_____
Albatross Consulting Pty. Ltd.   |----/       -  \
(A.B.N. 75 008 659 498)          |          /(@)   ______---_
Tel: (+61) 0500 83 82 81         |                 _________  \
Fax: (+61) 03 5330 3172          |                 ___________ |
Http://www.rhyme.com.au          |                /           \|
                                  |    --________--
PGP key available upon request,  |  /
and from pgp.mit.edu:11371       |/  


Thu, 12 Aug 2004 11:28:53 +1000
Philip Warner <pjw@rhyme.com.au>
dollar-quoting in psql and in general
Philip Warner <pjw@rhyme.com.au> writes:
> While trying to understand dollar-quoting, I found the following in psql:
>     select $a$ hello $a$;

> behaves as expected, but psql does not like

>     select $a$ \ $a$;
> or
>     select $a$ \\ $a$;

Define "does not like".  The behavior seems correct to me.

> Should it? How should a dollar-quote handle:
>     $a$ \$a\$a $a$

The value of that is " \$a\$a ".  Backslashes are not special inside
dollar quotes --- nor is anything else, except the matching close tag.

			regards, tom lane

Wed, 11 Aug 2004 22:47:15 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: dollar-quoting in psql and in general 
At 12:47 PM 12/08/2004, Tom Lane wrote:
>Backslashes are not special inside
>dollar quotes --- nor is anything else, except the matching close tag

If they are not special, then shouldnt:

    select $a$\$a$;

result in

    ?column?
       \

rather than an error?



----------------------------------------------------------------
Philip Warner                    |     __---_____
Albatross Consulting Pty. Ltd.   |----/       -  \
(A.B.N. 75 008 659 498)          |          /(@)   ______---_
Tel: (+61) 0500 83 82 81         |                 _________  \
Fax: (+61) 03 5330 3172          |                 ___________ |
Http://www.rhyme.com.au          |                /           \|
                                  |    --________--
PGP key available upon request,  |  /
and from pgp.mit.edu:11371       |/ 


Thu, 12 Aug 2004 13:00:26 +1000
Philip Warner <pjw@rhyme.com.au>
Re: dollar-quoting in psql and in general 


Philip Warner wrote:

> While trying to understand dollar-quoting, I found the following in psql:
>
>    select $a$ hello $a$;
>
> behaves as expected, but psql does not like
>
>    select $a$ \ $a$;
> or
>    select $a$ \\ $a$;
>
> Should it? How should a dollar-quote handle:
>
>    $a$ \$a\$a $a$
>
> ?
>
>
andrew=# select $a$ \ $a$;
 ?column?
----------
  \
(1 row)

andrew=# select $a$ \\ $a$;
 ?column?
----------
  \\
(1 row)

It is behaving as *I* expect, and as designed. \ is not magical inside 
dollar quotes, and if it were it would defeat the whole purpose of 
having them.

Dollar quotes are really designed for strings that are reparsed - most 
typically function bodies. The strings inside them are therefore totally 
opaque, and there is no escape character. Otherwise, if we wanted the 
plpgsql parsers, say, to see \ we'd have to write \\, and the idea was 
to get away from \\, \', '' and friends.

cheers

andrew

Wed, 11 Aug 2004 23:07:44 -0400
Andrew Dunstan <andrew@dunslane.net>
Re: dollar-quoting in psql and in general
At 01:07 PM 12/08/2004, Andrew Dunstan wrote:
>\ is not magical inside dollar quotes,

Sorry, I was confused by the manual: the paragraph that starts "C-style 
backslash escapes are also available..." is right after the paragraphs on 
dollar-quoting.

The section on dollar-quoting is also not explicit about valid tags, "zero 
or more characters" is all I can see. Can you give me a definitive answer 
as to what is valid? AFAICT, must be [A-Z,a-z,0-9,_]*, with non-numeric 
start. Is that right?






----------------------------------------------------------------
Philip Warner                    |     __---_____
Albatross Consulting Pty. Ltd.   |----/       -  \
(A.B.N. 75 008 659 498)          |          /(@)   ______---_
Tel: (+61) 0500 83 82 81         |                 _________  \
Fax: (+61) 03 5330 3172          |                 ___________ |
Http://www.rhyme.com.au          |                /           \|
                                  |    --________--
PGP key available upon request,  |  /
and from pgp.mit.edu:11371       |/ 


Thu, 12 Aug 2004 13:21:06 +1000
Philip Warner <pjw@rhyme.com.au>
Re: dollar-quoting in psql and in general
Philip Warner <pjw@rhyme.com.au> writes:
> At 12:47 PM 12/08/2004, Tom Lane wrote:
>> Backslashes are not special inside
>> dollar quotes --- nor is anything else, except the matching close tag

> If they are not special, then shouldnt:
>     select $a$\$a$;
> result in
>     ?column?
>        \
> rather than an error?

Worksforme (TM).

regression=#     select $a$\$a$;
 ?column? 
----------
 \
(1 row)

regression=# 

Are you sure your psql and backend are both current?

			regards, tom lane

Wed, 11 Aug 2004 23:27:49 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: dollar-quoting in psql and in general 
Philip Warner <pjw@rhyme.com.au> writes:
> At 01:07 PM 12/08/2004, Andrew Dunstan wrote:
>> \ is not magical inside dollar quotes,

> Sorry, I was confused by the manual: the paragraph that starts "C-style 
> backslash escapes are also available..." is right after the paragraphs on 
> dollar-quoting.

The documentation for dollar-quoting is pretty awful at the moment, as
it seems to have been pasted in with no thought to context, and is
incomplete anyway.  I have on my to-do list to go over it, but if
someone else beats me to it I won't pout.

> The section on dollar-quoting is also not explicit about valid tags, "zero 
> or more characters" is all I can see.

Use the source, Luke ... scan.l explains

/* $foo$ style quotes ("dollar quoting")
 * The quoted string starts with $foo$ where "foo" is an optional string
 * in the form of an identifier, except that it may not contain "$", 
 * and extends to the first occurrence of an identical string.  
 * There is *no* processing of the quoted text.
 */
dolq_start		[A-Za-z\200-\377_]
dolq_cont		[A-Za-z\200-\377_0-9]
dolqdelim		\$({dolq_start}{dolq_cont}*)?\$

			regards, tom lane

Wed, 11 Aug 2004 23:49:59 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: dollar-quoting in psql and in general 


Philip Warner wrote:

> At 01:07 PM 12/08/2004, Andrew Dunstan wrote:
>
>> \ is not magical inside dollar quotes,
>
>
> Sorry, I was confused by the manual: the paragraph that starts 
> "C-style backslash escapes are also available..." is right after the 
> paragraphs on dollar-quoting.
>
> The section on dollar-quoting is also not explicit about valid tags, 
> "zero or more characters" is all I can see. Can you give me a 
> definitive answer as to what is valid? AFAICT, must be 
> [A-Z,a-z,0-9,_]*, with non-numeric start. Is that right?
>
>

Don't forget the high-bit chars too. pgsqlscan.l says:

dolq_start      [A-Za-z\200-\377_]
dolq_cont       [A-Za-z\200-\377_0-9]
dolqdelim       \$({dolq_start}{dolq_cont}*)?\$

The scanner files for plpgsql and the backend have equivalent specs, so 
this is definitive.

cheers

andrew

Wed, 11 Aug 2004 23:53:12 -0400
Andrew Dunstan <andrew@dunslane.net>
Re: dollar-quoting in psql and in general