Skip site navigation (1) Skip section navigation (2)

PL patches (one more)

From: jwieck(at)debis(dot)com (Jan Wieck)
To: brook(at)trillium(dot)NMSU(dot)Edu (Brook Milligan)
Cc: hackers(at)postgreSQL(dot)org, patches(at)postgreSQL(dot)org
Subject: PL patches (one more)
Date: 1998-10-09 09:00:21
Message-ID: m0zRYPN-000EBPC@orion.SAPserv.Hamburg.dsh.de (view raw or flat)
Thread:
Lists: pgsql-hackers
    Bruce, please apply this too.

>
> I have had a few problems with the PL stuff recently committed.  The
> following patches fix the problems (i.e., all regression tests pass)
> in what I hope to be a platform-independent fashion.  The accomplish
> the following:

    Thanks for assisting in that area, Brook. It all really needs
    to become platform independent.

    There where a few more problems fixed by the patch below.

      o configure.in

        The tclConfig.sh file here  doesn't  reside  in  the  tcl
        subdirectory.   It  is  sitting  in  /usr/lib directly. I
        added another check for that.

        NOTE: run autoconf

      o pl/tcl/mkMakefile.tcldefs.sh.in

        At least one bash I'm using on one of my  systems  single
        quotes  the  values in the output of the set command. But
        make interprets CC=gcc -O2 different from CC='gcc -O2'.

      o pl/tcl/pltcl.c

        Return values where allocated in SPI memory  context  and
        got freed on SPI_finish().

      o pl/pgsql/Makefile.in

        David Hartwig had some bad problems compiling PL/pgSQL on
        AIX.  I found that the AIX specific mkldexport.sh doesn't
        support  multiple  object  files. I added another linking
        step where  all  the  objects  are  combined  first  into
        plpgsql.o  and only this one is then linked into a shared
        object.

        David (or someone else with access  to  AIX),  could  you
        please check if this works now?


Jan

--

#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me.                                  #
#======================================== jwieck(at)debis(dot)com (Jan Wieck) #


diff -cr src.orig/configure.in src/configure.in
*** src.orig/configure.in	Fri Oct  9 09:13:14 1998
--- src/configure.in	Fri Oct  9 09:54:18 1998
***************
*** 812,817 ****
--- 812,822 ----
  				fi
  			fi
  		done
+ 		if test -z "$TCL_CONFIG_SH"; then
+ 			if test -d "$dir" -a -r "$dir/tclConfig.sh"; then
+ 				TCL_CONFIG_SH=$dir/tclConfig.sh
+ 			fi
+ 		fi
  	done
  	if test -z "$TCL_CONFIG_SH"; then
  		AC_MSG_RESULT(no)
diff -cr src.orig/pl/plpgsql/src/Makefile.in src/pl/plpgsql/src/Makefile.in
*** src.orig/pl/plpgsql/src/Makefile.in	Fri Oct  9 09:13:42 1998
--- src/pl/plpgsql/src/Makefile.in	Fri Oct  9 09:26:59 1998
***************
*** 79,85 ****
  #
  DLOBJ= plpgsql$(DLSUFFIX)
  
! OBJS=	pl_parse.o pl_handler.o pl_comp.o pl_exec.o pl_funcs.o
  
  ALL=	$(DLOBJ)
  
--- 79,87 ----
  #
  DLOBJ= plpgsql$(DLSUFFIX)
  
! OBJS=	plpgsql.o
! 
! PLOBJS=	pl_parse.o pl_handler.o pl_comp.o pl_exec.o pl_funcs.o
  
  ALL=	$(DLOBJ)
  
***************
*** 87,92 ****
--- 89,97 ----
  # Build the shared object
  #
  all: $(ALL)
+ 
+ $(OBJS):	$(PLOBJS)
+ 	$(LD) -r -o $(OBJS) $(PLOBJS)
  
  $(DLOBJ):	$(OBJS)
  
diff -cr src.orig/pl/tcl/mkMakefile.tcldefs.sh.in src/pl/tcl/mkMakefile.tcldefs.sh.in
*** src.orig/pl/tcl/mkMakefile.tcldefs.sh.in	Fri Oct  9 09:13:41 1998
--- src/pl/tcl/mkMakefile.tcldefs.sh.in	Fri Oct  9 09:15:44 1998
***************
*** 8,12 ****
      exit 1
  fi
  
! set | grep '^TCL' > Makefile.tcldefs
  exit 0
--- 8,15 ----
      exit 1
  fi
  
! for v in `set | grep '^TCL' | sed -e 's/=.*//'` ; do
!     echo $v = `eval "echo \\$$v"`
! done >Makefile.tcldefs
! 
  exit 0
diff -cr src.orig/pl/tcl/pltcl.c src/pl/tcl/pltcl.c
*** src.orig/pl/tcl/pltcl.c	Fri Oct  9 09:13:41 1998
--- src/pl/tcl/pltcl.c	Fri Oct  9 10:40:08 1998
***************
*** 417,428 ****
  
  	pltcl_call_level--;
  
- 	/************************************************************
- 	 * Disconnect from SPI manager
- 	 ************************************************************/
- 	if (SPI_finish() != SPI_OK_FINISH)
- 		elog(ERROR, "pltcl: SPI_finish() failed");
- 
  	return retval;
  }
  
--- 417,422 ----
***************
*** 731,736 ****
--- 725,739 ----
  		siglongjmp(Warn_restart, 1);
  	}
  
+ 	/************************************************************
+ 	 * Disconnect from SPI manager and then create the return
+ 	 * values datum (if the input function does a palloc for it
+ 	 * this must not be allocated in the SPI memory context
+ 	 * because SPI_finish would free it).
+ 	 ************************************************************/
+ 	if (SPI_finish() != SPI_OK_FINISH)
+ 		elog(ERROR, "pltcl: SPI_finish() failed");
+ 
  	retval = (Datum) (*fmgr_faddr(&prodesc->result_in_func))
  		(pltcl_safe_interp->result,
  		 prodesc->result_in_elem,
***************
*** 1051,1058 ****
  	 * The return value from the procedure might be one of
  	 * the magic strings OK or SKIP or a list from array get
  	 ************************************************************/
! 	if (strcmp(pltcl_safe_interp->result, "OK") == 0)
  		return rettup;
  	if (strcmp(pltcl_safe_interp->result, "SKIP") == 0)
  	{
  		return (HeapTuple) NULL;;
--- 1054,1065 ----
  	 * The return value from the procedure might be one of
  	 * the magic strings OK or SKIP or a list from array get
  	 ************************************************************/
! 	if (SPI_finish() != SPI_OK_FINISH)
! 		elog(ERROR, "pltcl: SPI_finish() failed");
! 
! 	if (strcmp(pltcl_safe_interp->result, "OK") == 0) {
  		return rettup;
+ 	}
  	if (strcmp(pltcl_safe_interp->result, "SKIP") == 0)
  	{
  		return (HeapTuple) NULL;;
***************
*** 1309,1315 ****
  	int			loop_rc;
  	int			ntuples;
  	HeapTuple  *tuples;
! 	TupleDesc	tupdesc;
  	sigjmp_buf	save_restart;
  
  	char	   *usage = "syntax error - 'SPI_exec "
--- 1316,1322 ----
  	int			loop_rc;
  	int			ntuples;
  	HeapTuple  *tuples;
! 	TupleDesc	tupdesc = NULL;
  	sigjmp_buf	save_restart;
  
  	char	   *usage = "syntax error - 'SPI_exec "

In response to

  • PL patches at 1998-10-08 17:27:22 from Brook Milligan

Responses

pgsql-hackers by date

Next:From: Justin HickeyDate: 1998-10-09 09:07:23
Subject: Re: [HACKERS] version functions (was NT port of PGSQL - success)
Previous:From: Tom Ivar HelbekkmoDate: 1998-10-09 08:50:00
Subject: Re: [HACKERS] Open 6.4 items

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group