Thread: Another small pl/perl patch

Another small pl/perl patch

From
"Greg Sabino Mullane"
Date:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


Another quick little patch to clean up the docs. If we are going
to provide examples of perl code, no matter how trivial, we might
as well provide well-written perl code. :)

- --
Greg Sabino Mullane greg@turnstep.com
PGP Key: 0x14964AC8 200510231745
http://biglumber.com/x/web?pk=2529DF6AB8F79407E94445B4BC9B906714964AC8

Index: plperl.sgml
===================================================================
RCS file: /projects/cvsroot/pgsql/doc/src/sgml/plperl.sgml,v
retrieving revision 2.47
diff -c -r2.47 plperl.sgml
*** plperl.sgml 18 Oct 2005 22:53:54 -0000      2.47
- --- plperl.sgml 23 Oct 2005 21:44:00 -0000
***************
*** 554,561 ****
     system operations are not allowed for security reasons:
  <programlisting>
  CREATE FUNCTION badfunc() RETURNS integer AS $$
!     open(TEMP, ">/tmp/badfile");
!     print TEMP "Gotcha!\n";
      return 1;
  $$ LANGUAGE plperl;
  </programlisting>
- --- 554,564 ----
     system operations are not allowed for security reasons:
  <programlisting>
  CREATE FUNCTION badfunc() RETURNS integer AS $$
!     my $tmpfile = "/tmp/badfile";
!     open my $fh, '>', $tmpfile
!         or elog(ERROR, qq{Could not open the file "$tmpfile": $!});
!     print $fh "Testing writing to a file\n";
!     close $fh or elog(ERROR, qq{Could not close the file "$tmpfile": $!});
      return 1;
  $$ LANGUAGE plperl;
  </programlisting>

-----BEGIN PGP SIGNATURE-----

iD8DBQFDXATPvJuQZxSWSsgRAsWQAJ9hKI+mIJmRhUuqC+kVM73P78ZjxACfejgE
ESnpPV0+8hs4DDbXVE60YcE=
=zLS9
-----END PGP SIGNATURE-----



Re: Another small pl/perl patch

From
Andrew Dunstan
Date:
Well, I personally almost always use indirect file handles rather than
globals. But I don't know that using globals file handles (which is what
I gather you are objecting to) is deprecated, is it? The perl docs are
absolutely littered with examples.

(I also use BSD style intentation consistently across my C, perl and
Java ... which is unusual at least in the latter 2 cases but works well
for me ;-) )

I don't mind applying this patch, if other people think it matters more
than I do.

cheers

andrew

Greg Sabino Mullane wrote:

>-----BEGIN PGP SIGNED MESSAGE-----
>Hash: SHA1
>
>
>Another quick little patch to clean up the docs. If we are going
>to provide examples of perl code, no matter how trivial, we might
>as well provide well-written perl code. :)
>
>- --
>Greg Sabino Mullane greg@turnstep.com
>PGP Key: 0x14964AC8 200510231745
>http://biglumber.com/x/web?pk=2529DF6AB8F79407E94445B4BC9B906714964AC8
>
>Index: plperl.sgml
>===================================================================
>RCS file: /projects/cvsroot/pgsql/doc/src/sgml/plperl.sgml,v
>retrieving revision 2.47
>diff -c -r2.47 plperl.sgml
>*** plperl.sgml 18 Oct 2005 22:53:54 -0000      2.47
>- --- plperl.sgml 23 Oct 2005 21:44:00 -0000
>***************
>*** 554,561 ****
>     system operations are not allowed for security reasons:
>  <programlisting>
>  CREATE FUNCTION badfunc() RETURNS integer AS $$
>!     open(TEMP, ">/tmp/badfile");
>!     print TEMP "Gotcha!\n";
>      return 1;
>  $$ LANGUAGE plperl;
>  </programlisting>
>- --- 554,564 ----
>     system operations are not allowed for security reasons:
>  <programlisting>
>  CREATE FUNCTION badfunc() RETURNS integer AS $$
>!     my $tmpfile = "/tmp/badfile";
>!     open my $fh, '>', $tmpfile
>!         or elog(ERROR, qq{Could not open the file "$tmpfile": $!});
>!     print $fh "Testing writing to a file\n";
>!     close $fh or elog(ERROR, qq{Could not close the file "$tmpfile": $!});
>      return 1;
>  $$ LANGUAGE plperl;
>  </programlisting>
>
>-----BEGIN PGP SIGNATURE-----
>
>iD8DBQFDXATPvJuQZxSWSsgRAsWQAJ9hKI+mIJmRhUuqC+kVM73P78ZjxACfejgE
>ESnpPV0+8hs4DDbXVE60YcE=
>=zLS9
>-----END PGP SIGNATURE-----
>
>
>
>---------------------------(end of broadcast)---------------------------
>TIP 9: In versions below 8.0, the planner will ignore your desire to
>       choose an index scan if your joining column's datatypes do not
>       match
>
>
>

Re: Another small pl/perl patch

From
"Greg Sabino Mullane"
Date:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


> Well, I personally almost always use indirect file handles rather than
> globals. But I don't know that using globals file handles (which is what
> I gather you are objecting to) is deprecated, is it? The perl docs are
> absolutely littered with examples.

No, my primary objection was using open() without checking the result.
Everything else was icing. :)

> (I also use BSD style intentation consistently across my C, perl and
> Java ... which is unusual at least in the latter 2 cases but works well
> for me ;-) )

I tried to match the indenting to what is already in the docs, which is
fairly close to my own style.

- --
Greg Sabino Mullane greg@turnstep.com
PGP Key: 0x14964AC8 200510241105
http://biglumber.com/x/web?pk=2529DF6AB8F79407E94445B4BC9B906714964AC8

-----BEGIN PGP SIGNATURE-----

iD8DBQFDXPhjvJuQZxSWSsgRAm6RAKD0RmrD5U5Uzv73wBVIfiCAIpAWewCg6XzJ
cPfuNaMX/gD+vA1VugR2YYo=
=va+e
-----END PGP SIGNATURE-----



Re: Another small pl/perl patch

From
Andrew Dunstan
Date:

Greg Sabino Mullane wrote:

>-----BEGIN PGP SIGNED MESSAGE-----
>Hash: SHA1
>
>
>
>
>>Well, I personally almost always use indirect file handles rather than
>>globals. But I don't know that using globals file handles (which is what
>>I gather you are objecting to) is deprecated, is it? The perl docs are
>>absolutely littered with examples.
>>
>>
>
>No, my primary objection was using open() without checking the result.
>Everything else was icing. :)
>
>


I see. Well, given that it is meant to illustrate something that won't
run, I don't think that matters too much. But there is another error on
that page, where we state that the function will be created but fail to
run. In fact, now that we have a validator, it will not even be created:

andrew=# CREATE FUNCTION badfunc() RETURNS integer AS $$
andrew$#     open(TEMP, ">/tmp/badfile");
andrew$#     print TEMP "Gotcha!\n";
andrew$#     return 1;
andrew$# $$ LANGUAGE plperl;
ERROR:  creation of Perl function failed: 'open' trapped by operation
mask at line 2.
andrew=#



I'll make your change and fix the incorrect wording shortly.

cheers

andrew