1. 05 1月, 2006 8 次提交
  2. 04 1月, 2006 6 次提交
  3. 03 1月, 2006 3 次提交
  4. 02 1月, 2006 3 次提交
  5. 01 1月, 2006 6 次提交
  6. 31 12月, 2005 4 次提交
  7. 30 12月, 2005 5 次提交
    • B
      Add: · 7211ff7d
      Bruce Momjian 提交于
      > * Make CLUSTER preserve recently-dead tuples per MVCC requirements
      7211ff7d
    • P
      81053002
    • N
      Index: src/pl/plpython/plpython.c · edafb4f0
      Neil Conway 提交于
      ===================================================================
      RCS file: /Users/neilc/postgres/cvs_root/pgsql/src/pl/plpython/plpython.c,v
      retrieving revision 1.67
      diff -c -r1.67 plpython.c
      *** src/pl/plpython/plpython.c	26 Dec 2005 04:28:48 -0000	1.67
      --- src/pl/plpython/plpython.c	29 Dec 2005 16:54:57 -0000
      ***************
      *** 2,8 ****
         * plpython.c - python as a procedural language for PostgreSQL
         *
         * This software is copyright by Andrew Bosma
      !  * but is really shameless cribbed from pltcl.c by Jan Weick, and
         * plperl.c by Mark Hollomon.
         *
         * The author hereby grants permission to use, copy, modify,
      --- 2,8 ----
         * plpython.c - python as a procedural language for PostgreSQL
         *
         * This software is copyright by Andrew Bosma
      !  * but is really shamelessly cribbed from pltcl.c by Jan Wieck, and
         * plperl.c by Mark Hollomon.
         *
         * The author hereby grants permission to use, copy, modify,
      ***************
      *** 1996,2002 ****
        	int			i,
        				rv;
        	PLyPlanObject *plan;
      - 	char	   *nulls;
        	MemoryContext oldcontext;
      
        	if (list != NULL)
      --- 1996,2001 ----
      ***************
      *** 2018,2024 ****
        	if (nargs != plan->nargs)
        	{
        		char	   *sv;
      -
        		PyObject   *so = PyObject_Str(list);
      
        		if (!so)
      --- 2017,2022 ----
      ***************
      *** 2036,2048 ****
        	oldcontext = CurrentMemoryContext;
        	PG_TRY();
        	{
      ! 		nulls = palloc(nargs * sizeof(char));
      
        		for (i = 0; i < nargs; i++)
        		{
        			PyObject   *elem,
        					   *so;
      - 			char	   *sv;
      
        			elem = PySequence_GetItem(list, i);
        			if (elem != Py_None)
      --- 2034,2045 ----
        	oldcontext = CurrentMemoryContext;
        	PG_TRY();
        	{
      ! 		char	   *nulls = palloc(nargs * sizeof(char));
      
        		for (i = 0; i < nargs; i++)
        		{
        			PyObject   *elem,
        					   *so;
      
        			elem = PySequence_GetItem(list, i);
        			if (elem != Py_None)
      ***************
      *** 2051,2070 ****
        				if (!so)
        					PLy_elog(ERROR, "function \"%s\" could not execute plan",
        							 PLy_procedure_name(PLy_curr_procedure));
      ! 				sv = PyString_AsString(so);
      
      ! 				/*
      ! 				 * FIXME -- if this elogs, we have Python reference leak
      ! 				 */
      ! 				plan->values[i] =
      ! 					FunctionCall3(&(plan->args[i].out.d.typfunc),
      ! 								  CStringGetDatum(sv),
      ! 							ObjectIdGetDatum(plan->args[i].out.d.typioparam),
      ! 								  Int32GetDatum(-1));
      
      ! 				Py_DECREF(so);
      ! 				Py_DECREF(elem);
      
        				nulls[i] = ' ';
        			}
        			else
      --- 2048,2073 ----
        				if (!so)
        					PLy_elog(ERROR, "function \"%s\" could not execute plan",
        							 PLy_procedure_name(PLy_curr_procedure));
      ! 				Py_DECREF(elem);
      
      ! 				PG_TRY();
      ! 				{
      ! 					char *sv = PyString_AsString(so);
      
      ! 					plan->values[i] =
      ! 						FunctionCall3(&(plan->args[i].out.d.typfunc),
      ! 									  CStringGetDatum(sv),
      ! 								ObjectIdGetDatum(plan->args[i].out.d.typioparam),
      ! 									  Int32GetDatum(-1));
      ! 				}
      ! 				PG_CATCH();
      ! 				{
      ! 					Py_DECREF(so);
      ! 					PG_RE_THROW();
      ! 				}
      ! 				PG_END_TRY();
      
      + 				Py_DECREF(so);
        				nulls[i] = ' ';
        			}
        			else
      edafb4f0
    • T
      Get rid of the SpinLockAcquire/SpinLockAcquire_NoHoldoff distinction · 195f1642
      Tom Lane 提交于
      in favor of having just one set of macros that don't do HOLD/RESUME_INTERRUPTS
      (hence, these correspond to the old SpinLockAcquire_NoHoldoff case).
      Given our coding rules for spinlock use, there is no reason to allow
      CHECK_FOR_INTERRUPTS to be done while holding a spinlock, and also there
      is no situation where ImmediateInterruptOK will be true while holding a
      spinlock.  Therefore doing HOLD/RESUME_INTERRUPTS while taking/releasing a
      spinlock is just a waste of cycles.  Qingqing Zhou and Tom Lane.
      195f1642
    • B
      Update: · e135d963
      Bruce Momjian 提交于
      < * Add missing rtree optimizer selectivity
      > * Improve selectivity functions for geometric operators
      e135d963
  8. 29 12月, 2005 5 次提交