Unbreak plperl building

Started by Alex Kapranoffalmost 26 years ago8 messagespatches
Jump to latest
#1Alex Kapranoff
alex@kapran.bitmcnit.bryansk.su

This patch, when applied in src/pl will unbreak plperl in
7.0.2 release. Sorry, if that's fixed ages ago - I don't track
development versions of PostgreSQL.

Patch is just a little bit tested (some valid functions created and
successfully run as well as some erroneous ones created and emitted proper
error messages when used).

My platform is FreeBSD 5.0-CURRENT (with perl 5.6.0 provided in the
base system).

I'm not subscribed to any of pgsql lists, sorry. Cc: please.

*** ./Makefile.orig	Sat Aug 26 16:22:25 2000
--- ./Makefile	Sat Aug 26 16:14:24 2000
***************
*** 20,30 ****
  ifeq ($(USE_TCL), true)
  	$(MAKE) -C tcl $@
  endif
  # does't work bjm 2000-04-11
! #ifeq ($(USE_PERL), true)
! #	-$(MAKE) $(MFLAGS) plperl/Makefile
! #	-$(MAKE) $(MFLAGS) -C plperl $@
! #endif
  plperl/Makefile: plperl/Makefile.PL
  	cd plperl && $(PERL) Makefile.PL POLLUTE=1
--- 20,32 ----
  ifeq ($(USE_TCL), true)
  	$(MAKE) -C tcl $@
  endif
+ 
  # does't work bjm 2000-04-11
! # works again, 2000-08-26, Alex Kapranoff <kapr@crosswinds.net>
! ifeq ($(USE_PERL), true)
! 	-$(MAKE) $(MFLAGS) plperl/Makefile
! 	-$(MAKE) $(MFLAGS) -C plperl $@
! endif
  plperl/Makefile: plperl/Makefile.PL
  	cd plperl && $(PERL) Makefile.PL POLLUTE=1
*** ./plperl/plperl.c.orig	Sat Aug 26 16:22:49 2000
--- ./plperl/plperl.c	Sat Aug 26 16:03:07 2000
***************
*** 325,337 ****
  	count = perl_call_pv("mksafefunc", G_SCALAR | G_EVAL | G_KEEPERR);
  	SPAGAIN;

! if (SvTRUE(GvSV(errgv)))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "creation of function failed : %s", SvPV(GvSV(errgv), na));
}

  	if (count != 1) {
--- 325,337 ----
  	count = perl_call_pv("mksafefunc", G_SCALAR | G_EVAL | G_KEEPERR);
  	SPAGAIN;

! if (SvTRUE(ERRSV))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "creation of function failed : %s", SvPV_nolen(ERRSV));
}

if (count != 1) {
***************
*** 441,453 ****
elog(ERROR, "plperl : didn't get a return item from function");
}

! if (SvTRUE(GvSV(errgv)))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "plperl : error from function : %s", SvPV(GvSV(errgv), na));
}

  	retval = newSVsv(POPs);
--- 441,453 ----
  		elog(ERROR, "plperl : didn't get a return item from function");
  	}

! if (SvTRUE(ERRSV))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "plperl : error from function : %s", SvPV_nolen(ERRSV));
}

retval = newSVsv(POPs);
***************
*** 651,657 ****
elog(ERROR, "plperl: SPI_finish() failed");

retval = (Datum) (*fmgr_faddr(&prodesc->result_in_func))
! (SvPV(perlret, na),
prodesc->result_in_elem,
prodesc->result_in_len);

--- 651,657 ----
  		elog(ERROR, "plperl: SPI_finish() failed");

retval = (Datum) (*fmgr_faddr(&prodesc->result_in_func))
! (SvPV_nolen(perlret),
prodesc->result_in_elem,
prodesc->result_in_len);

***************
*** 2189,2194 ****
  			sv_catpvf(output, "'%s' => undef,", attname);
  	}
  	sv_catpv(output, "}");
! 	output = perl_eval_pv(SvPV(output, na), TRUE);
  	return output;
  }
--- 2189,2194 ----
  			sv_catpvf(output, "'%s' => undef,", attname);
  	}
  	sv_catpv(output, "}");
! 	output = perl_eval_pv(SvPV_nolen(output), TRUE);
  	return output;
  }

--
Alex Kapranoff, Voice: +7(0832)791845.
127 days till brand new millenium...

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Alex Kapranoff (#1)
Re: Unbreak plperl building

Alex Kapranoff <alex@kapran.bitmcnit.bryansk.su> writes:

This patch, when applied in src/pl will unbreak plperl in
7.0.2 release. Sorry, if that's fixed ages ago - I don't track
development versions of PostgreSQL.

The issue isn't so much that it's "broken" as that we've seen severe
portability problems with it --- it doesn't work on all platforms or
all releases of Perl. What do your proposed changes do for or against
that issue?

regards, tom lane

#3Alex Kapranoff
alex@kapran.bitmcnit.bryansk.su
In reply to: Tom Lane (#2)
Re: Unbreak plperl building

On Mon, Aug 28, 2000 at 10:00:36AM -0400, Tom Lane wrote:

Alex Kapranoff <alex@kapran.bitmcnit.bryansk.su> writes:

This patch, when applied in src/pl will unbreak plperl in
7.0.2 release. Sorry, if that's fixed ages ago - I don't track
development versions of PostgreSQL.

The issue isn't so much that it's "broken" as that we've seen severe
portability problems with it --- it doesn't work on all platforms or
all releases of Perl. What do your proposed changes do for or against
that issue?

I really don't have many platforms for testing available here. I'll
try FreeBSD 4.1-STABLE and probably 3.5-STABLE. Those come with older
(and currently much more used) perl 5.005. No Linuxen of whatever
else, sorry.

These changes work around some nasty compile-time errors. The author
either had a very weird distribution of perl (home-made?) or
maybe just didn't have time to finish work (which is strange as one
can see from "complexity" of my patch).

Anyway, there aren't so many releases of perl available, really.
5.005 and 5.6.0 are surely the only ones to care about.

I just loved the idea of writing functions in Perl, and it works for
me now. Someone is likely to want it too, so I posted. Thanks for the
wonderful PostreeSQL, folks!

--
Alex Kapranoff, Voice: +7(0832)791845.
125 days till brand new millenium...

#4Bruce Momjian
bruce@momjian.us
In reply to: Alex Kapranoff (#1)
Re: Unbreak plperl building

I have applied this and re-enabled plperl compilation. Thanks.

This patch, when applied in src/pl will unbreak plperl in
7.0.2 release. Sorry, if that's fixed ages ago - I don't track
development versions of PostgreSQL.

Patch is just a little bit tested (some valid functions created and
successfully run as well as some erroneous ones created and emitted proper
error messages when used).

My platform is FreeBSD 5.0-CURRENT (with perl 5.6.0 provided in the
base system).

I'm not subscribed to any of pgsql lists, sorry. Cc: please.

*** ./Makefile.orig	Sat Aug 26 16:22:25 2000
--- ./Makefile	Sat Aug 26 16:14:24 2000
***************
*** 20,30 ****
ifeq ($(USE_TCL), true)
$(MAKE) -C tcl $@
endif
# does't work bjm 2000-04-11
! #ifeq ($(USE_PERL), true)
! #	-$(MAKE) $(MFLAGS) plperl/Makefile
! #	-$(MAKE) $(MFLAGS) -C plperl $@
! #endif
plperl/Makefile: plperl/Makefile.PL
cd plperl && $(PERL) Makefile.PL POLLUTE=1
--- 20,32 ----
ifeq ($(USE_TCL), true)
$(MAKE) -C tcl $@
endif
+ 
# does't work bjm 2000-04-11
! # works again, 2000-08-26, Alex Kapranoff <kapr@crosswinds.net>
! ifeq ($(USE_PERL), true)
! 	-$(MAKE) $(MFLAGS) plperl/Makefile
! 	-$(MAKE) $(MFLAGS) -C plperl $@
! endif
plperl/Makefile: plperl/Makefile.PL
cd plperl && $(PERL) Makefile.PL POLLUTE=1
*** ./plperl/plperl.c.orig	Sat Aug 26 16:22:49 2000
--- ./plperl/plperl.c	Sat Aug 26 16:03:07 2000
***************
*** 325,337 ****
count = perl_call_pv("mksafefunc", G_SCALAR | G_EVAL | G_KEEPERR);
SPAGAIN;

! if (SvTRUE(GvSV(errgv)))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "creation of function failed : %s", SvPV(GvSV(errgv), na));
}

if (count != 1) {
--- 325,337 ----
count = perl_call_pv("mksafefunc", G_SCALAR | G_EVAL | G_KEEPERR);
SPAGAIN;

! if (SvTRUE(ERRSV))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "creation of function failed : %s", SvPV_nolen(ERRSV));
}

if (count != 1) {
***************
*** 441,453 ****
elog(ERROR, "plperl : didn't get a return item from function");
}

! if (SvTRUE(GvSV(errgv)))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "plperl : error from function : %s", SvPV(GvSV(errgv), na));
}

retval = newSVsv(POPs);
--- 441,453 ----
elog(ERROR, "plperl : didn't get a return item from function");
}

! if (SvTRUE(ERRSV))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "plperl : error from function : %s", SvPV_nolen(ERRSV));
}

retval = newSVsv(POPs);
***************
*** 651,657 ****
elog(ERROR, "plperl: SPI_finish() failed");

retval = (Datum) (*fmgr_faddr(&prodesc->result_in_func))
! (SvPV(perlret, na),
prodesc->result_in_elem,
prodesc->result_in_len);

--- 651,657 ----
elog(ERROR, "plperl: SPI_finish() failed");

retval = (Datum) (*fmgr_faddr(&prodesc->result_in_func))
! (SvPV_nolen(perlret),
prodesc->result_in_elem,
prodesc->result_in_len);

***************
*** 2189,2194 ****
sv_catpvf(output, "'%s' => undef,", attname);
}
sv_catpv(output, "}");
! 	output = perl_eval_pv(SvPV(output, na), TRUE);
return output;
}
--- 2189,2194 ----
sv_catpvf(output, "'%s' => undef,", attname);
}
sv_catpv(output, "}");
! 	output = perl_eval_pv(SvPV_nolen(output), TRUE);
return output;
}

--
Alex Kapranoff, Voice: +7(0832)791845.
127 days till brand new millenium...

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#5Bruce Momjian
bruce@momjian.us
In reply to: Alex Kapranoff (#3)
Re: Unbreak plperl building

Tom, seems like this patch helps plperl, so I applied it.

On Mon, Aug 28, 2000 at 10:00:36AM -0400, Tom Lane wrote:

Alex Kapranoff <alex@kapran.bitmcnit.bryansk.su> writes:

This patch, when applied in src/pl will unbreak plperl in
7.0.2 release. Sorry, if that's fixed ages ago - I don't track
development versions of PostgreSQL.

The issue isn't so much that it's "broken" as that we've seen severe
portability problems with it --- it doesn't work on all platforms or
all releases of Perl. What do your proposed changes do for or against
that issue?

I really don't have many platforms for testing available here. I'll
try FreeBSD 4.1-STABLE and probably 3.5-STABLE. Those come with older
(and currently much more used) perl 5.005. No Linuxen of whatever
else, sorry.

These changes work around some nasty compile-time errors. The author
either had a very weird distribution of perl (home-made?) or
maybe just didn't have time to finish work (which is strange as one
can see from "complexity" of my patch).

Anyway, there aren't so many releases of perl available, really.
5.005 and 5.6.0 are surely the only ones to care about.

I just loved the idea of writing functions in Perl, and it works for
me now. Someone is likely to want it too, so I posted. Thanks for the
wonderful PostreeSQL, folks!

--
Alex Kapranoff, Voice: +7(0832)791845.
125 days till brand new millenium...

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#6Alex Kapranoff
alex@kapran.bitmcnit.bryansk.su
In reply to: Bruce Momjian (#4)
Re: Unbreak plperl building

On Tue, Sep 12, 2000 at 12:28:45AM -0400, Bruce Momjian wrote:

I have applied this and re-enabled plperl compilation. Thanks.

There were bad experiences with plperl on a RH with perl 5.004
reported on this list. With my patch applied.

This patch, when applied in src/pl will unbreak plperl in
7.0.2 release. Sorry, if that's fixed ages ago - I don't track
development versions of PostgreSQL.

[skip]

--
Alex Kapranoff, Voice: +7(0832)791845
110 days till brand new millenium...

#7Peter Eisentraut
peter_e@gmx.net
In reply to: Bruce Momjian (#4)
Re: Unbreak plperl building

Still doesn't work here. I have Redhat 5.2, fairly average. Please disable
it.

Bruce Momjian writes:

I have applied this and re-enabled plperl compilation. Thanks.

This patch, when applied in src/pl will unbreak plperl in
7.0.2 release. Sorry, if that's fixed ages ago - I don't track
development versions of PostgreSQL.

Patch is just a little bit tested (some valid functions created and
successfully run as well as some erroneous ones created and emitted proper
error messages when used).

My platform is FreeBSD 5.0-CURRENT (with perl 5.6.0 provided in the
base system).

I'm not subscribed to any of pgsql lists, sorry. Cc: please.

*** ./Makefile.orig	Sat Aug 26 16:22:25 2000
--- ./Makefile	Sat Aug 26 16:14:24 2000
***************
*** 20,30 ****
ifeq ($(USE_TCL), true)
$(MAKE) -C tcl $@
endif
# does't work bjm 2000-04-11
! #ifeq ($(USE_PERL), true)
! #	-$(MAKE) $(MFLAGS) plperl/Makefile
! #	-$(MAKE) $(MFLAGS) -C plperl $@
! #endif
plperl/Makefile: plperl/Makefile.PL
cd plperl && $(PERL) Makefile.PL POLLUTE=1
--- 20,32 ----
ifeq ($(USE_TCL), true)
$(MAKE) -C tcl $@
endif
+ 
# does't work bjm 2000-04-11
! # works again, 2000-08-26, Alex Kapranoff <kapr@crosswinds.net>
! ifeq ($(USE_PERL), true)
! 	-$(MAKE) $(MFLAGS) plperl/Makefile
! 	-$(MAKE) $(MFLAGS) -C plperl $@
! endif
plperl/Makefile: plperl/Makefile.PL
cd plperl && $(PERL) Makefile.PL POLLUTE=1
*** ./plperl/plperl.c.orig	Sat Aug 26 16:22:49 2000
--- ./plperl/plperl.c	Sat Aug 26 16:03:07 2000
***************
*** 325,337 ****
count = perl_call_pv("mksafefunc", G_SCALAR | G_EVAL | G_KEEPERR);
SPAGAIN;

! if (SvTRUE(GvSV(errgv)))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "creation of function failed : %s", SvPV(GvSV(errgv), na));
}

if (count != 1) {
--- 325,337 ----
count = perl_call_pv("mksafefunc", G_SCALAR | G_EVAL | G_KEEPERR);
SPAGAIN;

! if (SvTRUE(ERRSV))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "creation of function failed : %s", SvPV_nolen(ERRSV));
}

if (count != 1) {
***************
*** 441,453 ****
elog(ERROR, "plperl : didn't get a return item from function");
}

! if (SvTRUE(GvSV(errgv)))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "plperl : error from function : %s", SvPV(GvSV(errgv), na));
}

retval = newSVsv(POPs);
--- 441,453 ----
elog(ERROR, "plperl : didn't get a return item from function");
}

! if (SvTRUE(ERRSV))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "plperl : error from function : %s", SvPV_nolen(ERRSV));
}

retval = newSVsv(POPs);
***************
*** 651,657 ****
elog(ERROR, "plperl: SPI_finish() failed");

retval = (Datum) (*fmgr_faddr(&prodesc->result_in_func))
! (SvPV(perlret, na),
prodesc->result_in_elem,
prodesc->result_in_len);

--- 651,657 ----
elog(ERROR, "plperl: SPI_finish() failed");

retval = (Datum) (*fmgr_faddr(&prodesc->result_in_func))
! (SvPV_nolen(perlret),
prodesc->result_in_elem,
prodesc->result_in_len);

***************
*** 2189,2194 ****
sv_catpvf(output, "'%s' => undef,", attname);
}
sv_catpv(output, "}");
! 	output = perl_eval_pv(SvPV(output, na), TRUE);
return output;
}
--- 2189,2194 ----
sv_catpvf(output, "'%s' => undef,", attname);
}
sv_catpv(output, "}");
! 	output = perl_eval_pv(SvPV_nolen(output), TRUE);
return output;
}

--
Alex Kapranoff, Voice: +7(0832)791845.
127 days till brand new millenium...

--
Peter Eisentraut peter_e@gmx.net http://yi.org/peter-e/

#8Bruce Momjian
bruce@momjian.us
In reply to: Peter Eisentraut (#7)
Re: Unbreak plperl building

Still doesn't work here. I have Redhat 5.2, fairly average. Please disable
it.

I have again disabled plperl.

Bruce Momjian writes:

I have applied this and re-enabled plperl compilation. Thanks.

This patch, when applied in src/pl will unbreak plperl in
7.0.2 release. Sorry, if that's fixed ages ago - I don't track
development versions of PostgreSQL.

Patch is just a little bit tested (some valid functions created and
successfully run as well as some erroneous ones created and emitted proper
error messages when used).

My platform is FreeBSD 5.0-CURRENT (with perl 5.6.0 provided in the
base system).

I'm not subscribed to any of pgsql lists, sorry. Cc: please.

*** ./Makefile.orig	Sat Aug 26 16:22:25 2000
--- ./Makefile	Sat Aug 26 16:14:24 2000
***************
*** 20,30 ****
ifeq ($(USE_TCL), true)
$(MAKE) -C tcl $@
endif
# does't work bjm 2000-04-11
! #ifeq ($(USE_PERL), true)
! #	-$(MAKE) $(MFLAGS) plperl/Makefile
! #	-$(MAKE) $(MFLAGS) -C plperl $@
! #endif
plperl/Makefile: plperl/Makefile.PL
cd plperl && $(PERL) Makefile.PL POLLUTE=1
--- 20,32 ----
ifeq ($(USE_TCL), true)
$(MAKE) -C tcl $@
endif
+ 
# does't work bjm 2000-04-11
! # works again, 2000-08-26, Alex Kapranoff <kapr@crosswinds.net>
! ifeq ($(USE_PERL), true)
! 	-$(MAKE) $(MFLAGS) plperl/Makefile
! 	-$(MAKE) $(MFLAGS) -C plperl $@
! endif
plperl/Makefile: plperl/Makefile.PL
cd plperl && $(PERL) Makefile.PL POLLUTE=1
*** ./plperl/plperl.c.orig	Sat Aug 26 16:22:49 2000
--- ./plperl/plperl.c	Sat Aug 26 16:03:07 2000
***************
*** 325,337 ****
count = perl_call_pv("mksafefunc", G_SCALAR | G_EVAL | G_KEEPERR);
SPAGAIN;

! if (SvTRUE(GvSV(errgv)))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "creation of function failed : %s", SvPV(GvSV(errgv), na));
}

if (count != 1) {
--- 325,337 ----
count = perl_call_pv("mksafefunc", G_SCALAR | G_EVAL | G_KEEPERR);
SPAGAIN;

! if (SvTRUE(ERRSV))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "creation of function failed : %s", SvPV_nolen(ERRSV));
}

if (count != 1) {
***************
*** 441,453 ****
elog(ERROR, "plperl : didn't get a return item from function");
}

! if (SvTRUE(GvSV(errgv)))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "plperl : error from function : %s", SvPV(GvSV(errgv), na));
}

retval = newSVsv(POPs);
--- 441,453 ----
elog(ERROR, "plperl : didn't get a return item from function");
}

! if (SvTRUE(ERRSV))
{
POPs;
PUTBACK;
FREETMPS;
LEAVE;
! elog(ERROR, "plperl : error from function : %s", SvPV_nolen(ERRSV));
}

retval = newSVsv(POPs);
***************
*** 651,657 ****
elog(ERROR, "plperl: SPI_finish() failed");

retval = (Datum) (*fmgr_faddr(&prodesc->result_in_func))
! (SvPV(perlret, na),
prodesc->result_in_elem,
prodesc->result_in_len);

--- 651,657 ----
elog(ERROR, "plperl: SPI_finish() failed");

retval = (Datum) (*fmgr_faddr(&prodesc->result_in_func))
! (SvPV_nolen(perlret),
prodesc->result_in_elem,
prodesc->result_in_len);

***************
*** 2189,2194 ****
sv_catpvf(output, "'%s' => undef,", attname);
}
sv_catpv(output, "}");
! 	output = perl_eval_pv(SvPV(output, na), TRUE);
return output;
}
--- 2189,2194 ----
sv_catpvf(output, "'%s' => undef,", attname);
}
sv_catpv(output, "}");
! 	output = perl_eval_pv(SvPV_nolen(output), TRUE);
return output;
}

--
Alex Kapranoff, Voice: +7(0832)791845.
127 days till brand new millenium...

--
Peter Eisentraut peter_e@gmx.net http://yi.org/peter-e/

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026