Dollar quoting docs, round 1
Kind people,
Please find attached a diff to the SGML docs that attempts to go over
the new dollar quoting feature.
In eager anticipation of comments & feedback,
I remain,
Your Humble Servant,
D
--
David Fetter david@fetter.org http://fetter.org/
phone: +1 510 893 6100 mobile: +1 415 235 3778
Remember to vote!
Attachments:
dq.difftext/plain; charset=us-asciiDownload+423-385
David Fetter wrote:
Kind people,
Please find attached a diff to the SGML docs that attempts to go over
the new dollar quoting feature.
I think we should just use $$ in each case. Otherwise it might look
more complicated than before.
On Wed, Apr 28, 2004 at 08:28:58AM +0200, Peter Eisentraut wrote:
David Fetter wrote:
Kind people,
Please find attached a diff to the SGML docs that attempts to go
over the new dollar quoting feature.I think we should just use $$ in each case. Otherwise it might look
more complicated than before.
Peter,
I'd be delighted to simplify some of the quotes. They can't all be $$
because of the nesting, so that's out. Also, I believe it is a good
idea to give some idea of what is going on with the tags, as I do with
similar structures in other languages. For example, when I am writing
up a piece of SQL in perl or php, the tag looks like this:
$sql = <<SQL
...
SQL
$sql = <<<SQL
...
SQL;
Thanks as always for your prompt insights.
Cheers,
D
--
David Fetter david@fetter.org http://fetter.org/
phone: +1 510 893 6100 mobile: +1 415 235 3778
Remember to vote!
Peter Eisentraut wrote:
David Fetter wrote:
Kind people,
Please find attached a diff to the SGML docs that attempts to go over
the new dollar quoting feature.I think we should just use $$ in each case. Otherwise it might look
more complicated than before.
Agreed. I was worried about dollar arguments in functions, e.g. $1:
test=> select $$$1$$;
?column?
----------
$1
(1 row)
but that seems to be OK. Is our only problem actual $$ in a function
body? And there is no way of escaping that, right? They have to choose
a different quote characters sequence.
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
David Fetter wrote:
On Wed, Apr 28, 2004 at 08:28:58AM +0200, Peter Eisentraut wrote:
David Fetter wrote:
Kind people,
Please find attached a diff to the SGML docs that attempts to go
over the new dollar quoting feature.I think we should just use $$ in each case. Otherwise it might look
more complicated than before.Peter,
I'd be delighted to simplify some of the quotes. They can't all be $$
because of the nesting, so that's out. Also, I believe it is a good
idea to give some idea of what is going on with the tags, as I do with
similar structures in other languages. For example, when I am writing
up a piece of SQL in perl or php, the tag looks like this:$sql = <<SQL
...
SQL$sql = <<<SQL
...
SQL;
Interesting, but I think most people like to use a tag that identifies
what is happening, rather than the content. I think that's why <<END is
used frequently, so END appears as the end. Seeing SQL alone on a line
seems strange.
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
Bruce Momjian wrote:
David Fetter wrote:
On Wed, Apr 28, 2004 at 08:28:58AM +0200, Peter Eisentraut wrote:
David Fetter wrote:
Kind people,
Please find attached a diff to the SGML docs that attempts to go
over the new dollar quoting feature.I think we should just use $$ in each case. Otherwise it might look
more complicated than before.Peter,
I'd be delighted to simplify some of the quotes. They can't all be $$
because of the nesting, so that's out. Also, I believe it is a good
idea to give some idea of what is going on with the tags, as I do with
similar structures in other languages. For example, when I am writing
up a piece of SQL in perl or php, the tag looks like this:$sql = <<SQL
...
SQL$sql = <<<SQL
...
SQL;Interesting, but I think most people like to use a tag that identifies
what is happening, rather than the content. I think that's why <<END is
used frequently, so END appears as the end. Seeing SQL alone on a line
seems strange.
I typically combine these approaches, with a heredoc marker like EOSQL
cheers
andrew
On Wed, Apr 28, 2004 at 12:30:06PM -0400, Bruce Momjian wrote:
Peter Eisentraut wrote:
David Fetter wrote:
Kind people,
Please find attached a diff to the SGML docs that attempts to go over
the new dollar quoting feature.I think we should just use $$ in each case. Otherwise it might look
more complicated than before.Agreed. I was worried about dollar arguments in functions, e.g. $1:
test=> select $$$1$$;
?column?
----------
$1
(1 row)but that seems to be OK. Is our only problem actual $$ in a
function body?
This is a design feature, as I understand it.
And there is no way of escaping that, right?
Right.
They have to choose a different quote characters sequence.
Yes. Here is a short, but (IMHO) useful example. Incidentally, I
have not yet found a way to get it working in versions prior to CVS
HEAD.
CREATE OR REPLACE FUNCTION has_bad_chars(TEXT) RETURNS BOOLEAN AS
$function$
BEGIN
RETURN ($1 ~ $q$[\t\r\n\v|\\]$q$);
END;
$function$ LANGUAGE plpgsql;
Cheers,
D
--
David Fetter david@fetter.org http://fetter.org/
phone: +1 510 893 6100 mobile: +1 415 235 3778
Remember to vote!
Bruce Momjian wrote:
Peter Eisentraut wrote:
David Fetter wrote:
Kind people,
Please find attached a diff to the SGML docs that attempts to go over
the new dollar quoting feature.I think we should just use $$ in each case. Otherwise it might look
more complicated than before.Agreed. I was worried about dollar arguments in functions, e.g. $1:
test=> select $$$1$$;
?column?
----------
$1
(1 row)but that seems to be OK. Is our only problem actual $$ in a function
body? And there is no way of escaping that, right? They have to choose
a different quote characters sequence.
The string inside $x$ is totally opaque and unescaped. The restriction
on markers is that the string mustn't contain $x$, and mustn't end with
$x, i.e., the scanners see $x$ and simply accumulate all the characters
in the string until they see $x$ again - all 3 scanners (postgres, psql,
plpgsql) work the same way on this.
Functions with arguments might need to be quoted with something other
than plain $$, and in any case if their bodies make use of $$ they
certainly will. pg_dump's approach to quoting function bodies is to
start with $$ and then generate longer and longer markers until the
marker without trailing $ is not found in the string comprising the
function body. In most cases it ends up using $_$.
I hope that makes things clearer.
cheers
andrew