git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: fab789e)
Make clearer how arguments and return values in pl/perl are escaped. This is to clari...
Fri, 4 May 2007 14:55:32 +0000 (14:55 +0000)
Fri, 4 May 2007 14:55:32 +0000 (14:55 +0000)

diff --git a/doc/src/sgml/plperl.sgml b/doc/src/sgml/plperl.sgml
index 1be0ae5b8e50aef4b19218fb07b7c1e012a63dae..826088c9c5f1afb52f22e81ac5d6e81c70c35798 100644 (file)
--- a/doc/src/sgml/plperl.sgml
+++ b/doc/src/sgml/plperl.sgml
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/plperl.sgml,v 2.65 2007年05月03日 15:05:56 neilc Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/plperl.sgml,v 2.66 2007年05月04日 14:55:32 adunstan Exp $ -->
<chapter id="plperl">
<title>PL/Perl - Perl Procedural Language</title>
@@ -137,6 +137,36 @@ $$ LANGUAGE plperl;
function is strict or not.
</para>
+ <para>
+ Anything in a function argument that is not a reference is
+ a string, which is in the standard <productname>PostgreSQL</productname>
+ external text representation for the relevant data type. In the case of
+ ordinary numeric or text types, Perl will just do the right thing and
+ the programmer will normally not have to worry about it. However, in
+ other cases the argument will need to be converted into a form that is
+ more usable in Perl. For example, here is how to convert an argument of
+ type <type>bytea</> into unescaped binary
+ data:
+
+<programlisting>
+ my $arg = shift;
+ $arg =~ s!\\(\d{3})!chr(oct(1ドル))!ge;
+</programlisting>
+
+ </para>
+
+ <para>
+ Similarly, values passed back to <productname>PostgreSQL</productname>
+ must be in the external text representation format. For example, here
+ is how to escape binary data for a return value of type <type>bytea</>:
+
+<programlisting>
+ $retval =~ s!([^ -~])!sprintf("\\%03o",ord(1ドル))!ge;
+ return $retval;
+</programlisting>
+
+ </para>
+
<para>
Perl can return <productname>PostgreSQL</productname> arrays as
references to Perl arrays. Here is an example:
@@ -144,7 +174,7 @@ $$ LANGUAGE plperl;
<programlisting>
CREATE OR REPLACE function returns_array()
RETURNS text[][] AS $$
- return [['a"b','c,d'],['e\\f','g']];
+ return [['a&quot;b','c,d'],['e\\f','g']];
$$ LANGUAGE plperl;
select returns_array();
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /