Commit graph

417 commits

Author SHA1 Message Date
Neil Conway
bf578aedca Fix three Python reference leaks in PLy_traceback(). This would result
in leaking memory when invoking a PL/Python procedure that raises an
exception. Unfortunately this still leaks memory, but at least the
largest leak has been plugged.

This patch also fixes a reference counting mistake in PLy_modify_tuple()
for 8.0, 8.1 and HEAD: we don't actually own a reference to `platt', so
we shouldn't Py_DECREF() it.
2006-02-20 20:10:45 +00:00
Bruce Momjian
6a2c659b31 [ Patch to 7.4.X.]
In several places PL/Python was calling PyObject_Str() and then
PyString_AsString() without checking if the former had returned
NULL to indicate an error.  PyString_AsString() doesn't expect a
NULL argument, so passing one causes a segmentation fault.  This
patch adds checks for NULL and raises errors via PLy_elog(), which
prints details of the underlying Python exception.  The patch also
adds regression tests for these checks.  All tests pass on my
Solaris 9 box running HEAD and Python 2.4.1.
2005-09-25 03:18:16 +00:00
Tom Lane
a6f0dee775 plpgsql's exec_assign_value() freed the old value of a variable before
copying/converting the new value, which meant that it failed badly on
"var := var" if var is of pass-by-reference type.  Fix this and a similar
hazard in exec_move_row(); not sure that the latter can manifest before
8.0, but patch it all the way back anyway.  Per report from Dave Chapeskie.
2005-06-20 20:44:57 +00:00
Tom Lane
d60b1f5689 If we're gonna check for array overrun, we really should do so before
overrunning the array, not after.
2005-02-08 18:22:11 +00:00
Neil Conway
5c057d4b44 Prevent 4 more buffer overruns in the PL/PgSQL parser. This is just a
minimally-invasive fix for stable branches; a cleaner fix will be
committed to HEAD soon.
2005-02-07 03:55:28 +00:00
Tom Lane
03a7dd013e Back-patch 8.0 version of plperl_hash_from_tuple() into prior releases
to fix failure to cope with quote marks in field values; not to mention
that it is shorter and faster.  Per report from Charles Haron.
2005-01-26 17:09:21 +00:00
Neil Conway
3b01217d7d Prevent overrunning a heap-allocated buffer if more than 1024 parameters
to a refcursor declaration are specified. This is a minimally-invasive fix
for the buffer overrun -- a more thorough cleanup will be checked into
HEAD.
2005-01-21 00:31:21 +00:00
Tom Lane
bce5fd63fd Don't crash when a rowtype argument to a plpgsql function is NULL.
Per report from Chris Campbell.
2004-02-24 01:44:47 +00:00
Tom Lane
8c99671a3b Implement a solution to the 'Turkish locale downcases I incorrectly'
problem, per previous discussion.  Make some additional changes to
centralize the knowledge of just how identifier downcasing is done,
in hopes of simplifying any future tweaking in this area.
2004-02-21 00:35:13 +00:00
Tom Lane
18b8cb5a9e Repair missing inclusions of -lintl for shared libraries. 2004-02-10 07:26:48 +00:00
Tom Lane
5eb2076c3c Fix problems with dropped columns in pltcl triggers, per report from Patrick Samson. 2004-01-24 23:06:41 +00:00
Tom Lane
ab65429adf Back-patch repairs for --disable-shared support. 2004-01-21 19:25:11 +00:00
Bruce Momjian
3d5c2692e7 Remove trailing semicolons from macro initializations in plpython.
Problem report on True64 Unix by Nikola Milutinovic.
]
2004-01-04 00:14:55 +00:00
Tom Lane
3108b5db28 Allow the query for a plpgsql cursor to begin with '(' as well as 'SELECT'.
Per example from Kumar, 30-Oct-03.
2003-10-30 17:18:55 +00:00
Tom Lane
04b40923d6 Add code to check that IF/WHILE/EXIT test expressions are boolean,
and try to coerce the values to boolean if not.  Per recent discussions.
2003-10-01 21:47:42 +00:00
Tom Lane
47ed658c59 heap_open => relation_open to avoid unwanted restriction on relkind.
Per gripe from Gaetano Mendola.
2003-09-30 00:59:51 +00:00
Jan Wieck
36f15ddecd Fixed type lookup in spi_prepare for possible qualified
type name specification.

Jan
2003-09-29 19:24:06 +00:00
Tom Lane
8b510838f6 Restructure plpgsql's caching of 'simple' expression evaluation trees
to be less dangerous, and often faster as well.  ExprState trees are
not kept across transaction boundaries; this eliminates problems with
resource leakage in failed transactions.  But by keeping them in a
per-transaction EState, we can safely arrange for a single ExprState
to be shared by all the expression evaluations done in a given plpgsql
function call.  (Formerly it seemed necessary to create and destroy an
ExprState for each exec_eval_simple_expr() call.)  This saves time in
any scenario where a plpgsql function executes more than one expression.
Seems to be about as fast as 7.3 for simple cases, and significantly
faster for functions that do a lot of calculations.
2003-09-28 23:37:45 +00:00
Tom Lane
cd75f94daf Adjust Darwin build to use the default 'two level namespace' linking
method.  Fix a number of places where shared libraries were linked without
mentioning all the libraries they depend on; the Darwin and AIX ports
are known to require this, and it doesn't seem to hurt any other supported
platforms.  (Hence, remove code in pl/tcl makefile that tried to avoid
mentioning other libs if not needed.)
2003-09-27 19:35:32 +00:00
Tom Lane
2848dc5fea Make the world safe (more or less) for dropped columns in plpgsql rowtypes. 2003-09-25 23:02:12 +00:00
Tom Lane
b8f8896888 Fix some problems with dropped columns in plpython trigger functions. 2003-09-16 01:07:51 +00:00
Tom Lane
0441e269ea Make pltcl create separate function objects when the same function is
used as trigger on different relations.  I am not convinced that Tcl
actually has to have this, but it seems a good idea to make it be
parallel to the other PLs that definitely do need it.
2003-09-14 17:25:54 +00:00
Tom Lane
96e63199f3 Fix plpython to generate separate cached procedure data for each
relation, when the same function is used as a trigger on more than
one relation.  This avoids crashes due to differing rowtypes for
different relations.  Per bug report from Lance Thomas, 7-Feb-03.
2003-09-14 17:13:06 +00:00
Tom Lane
fe055e9280 Looks like plperl has same bug as pltcl. 2003-09-04 15:16:39 +00:00
Tom Lane
9dbfcc2261 Fix some problems with dropped columns in pltcl functions. 2003-09-04 15:10:10 +00:00
Tom Lane
23e10843db When compiling a plpgsql trigger function, include the OID of the table
the trigger is attached to in the hashkey.  This ensures that we will
create separate compiled trees for each table the trigger is used with,
avoiding possible datatype-mismatch problems if the tables have different
rowtypes.  This is essentially the same bug recently identified in plpython
--- though plpgsql doesn't seem as prone to crash when the rowtype changes
underneath it.  But failing robustly is no substitute for just working.
2003-08-18 19:16:02 +00:00
Bruce Momjian
46785776c4 Another pgindent run with updated typedefs. 2003-08-08 21:42:59 +00:00
Tom Lane
635d00ecea Avoid malloc(0). Although standard mallocs seem not to object,
some debugging malloc packages do.
2003-08-08 19:19:32 +00:00
Tom Lane
e627dd2db9 Fix pltcl and plpython to support STATEMENT triggers.
Joe Conway
2003-08-04 18:40:50 +00:00
Tom Lane
010c6504cb Put back braces removed by pgindent (not really pgindent's fault). 2003-08-04 01:57:58 +00:00
Bruce Momjian
089003fb46 pgindent run. 2003-08-04 00:43:34 +00:00
Tom Lane
8b1ea2f58b Cause library-preload feature to report error if specified initialization
function is not found.  Also, make all the PL libraries have initialization
functions with standard names.  Patch from Joe Conway.
2003-07-31 18:36:46 +00:00
Tom Lane
81b5c8a136 A visit from the message-style police ... 2003-07-28 00:09:16 +00:00
Tom Lane
b556e8200e elog mop-up: bring some straggling fprintf(stderr)'s into the elog world. 2003-07-27 21:49:55 +00:00
Tom Lane
e7f3645171 Fix some localizability issues with existing errcontext() calls. 2003-07-27 18:38:26 +00:00
Tom Lane
e8db9b26d0 elog mop-up. 2003-07-27 17:10:07 +00:00
Bruce Momjian
1be17f1f26 >>You can alias $0, similar to the argument variables. And, I confirmed
>>that you cannot change the value, similar to the argument variables:
>
> Perhaps you shouldn't mark it isconst; then it would actually have some
> usefulness (you could use it directly as a temporary variable to hold
> the intended result).  I can't see much value in aliasing it if it's
> const, either.

OK; the only change in this version is "isconst = false;". Now you can
use $0 as a result placeholder if desired. E.g.:

create or replace function tmp(anyelement, anyelement) returns anyarray as '
declare
  v_ret alias for $0;
  v_el1 alias for $1;
  v_el2 alias for $2;
begin
  v_ret := ARRAY[v_el1, v_el2];
  return v_ret;
end;
' language 'plpgsql';

create table f(f1 text, f2 text, f3 int, f4 int);
insert into f values ('a','b',1,2);
insert into f values ('z','x',3,4);

select tmp(f1,f2) from f;
select tmp(f3,f4) from f;


Joe Conway
2003-07-26 23:58:23 +00:00
Tom Lane
5f2499d5af Update to match error editing. 2003-07-26 00:02:02 +00:00
Tom Lane
3b04893ffc Error message editing in src/pl. The plpython module could use another
look ... I'm not real certain which errors are strictly internal and which
are likely to be provoked by users.
2003-07-25 23:37:31 +00:00
Tom Lane
b837c99210 Support polymorphic functions in plpgsql. Along the way, replace
linked-list search of function cache with hash-table lookup.
By Joe Conway.
2003-07-01 21:47:09 +00:00
Tom Lane
6115224448 Rename plpython to plpythonu, and update documentation to reflect its
now-untrusted status.
2003-06-30 18:31:42 +00:00
Tom Lane
bee217924d Support expressions of the form 'scalar op ANY (array)' and
'scalar op ALL (array)', where the operator is applied between the
lefthand scalar and each element of the array.  The operator must
yield boolean; the result of the construct is the OR or AND of the
per-element results, respectively.

Original coding by Joe Conway, after an idea of Peter's.  Rewritten
by Tom to keep the implementation strictly separate from subqueries.
2003-06-29 00:33:44 +00:00
Bruce Momjian
afb17d912b > I've worked with the Pl/Python code in the past and will see about removing
> rexec and making it an untrusted language.  Last time I looked, it didn't
> look particularly difficult.  I've set aside some time next week, so stay
> tuned.

Attached is a patch that removes all of the RExec code from plpython from
the current PostgreSQL CVS.  In addition, plpython needs to be changed to an
untrusted language in createlang.  Please let me know if there are any
problems.

Kevin Jacobs
2003-06-25 01:18:58 +00:00
Tom Lane
1bd22f55cf Disallow dollar sign in operator names, instead allow it as a non-first
character in identifiers.  The first change eliminates the current need
to put spaces around parameter references, as in "x<=$2".  The second
change improves compatibility with Oracle and some other RDBMSes.  This
was discussed and agreed to back in January, but did not get done.
2003-06-19 23:22:40 +00:00
Tom Lane
f12f8990e4 Fix error line numbers reported for errors in plpgsql_parse_word and
siblings.
2003-06-17 04:35:03 +00:00
Tom Lane
d2e028b1b0 Fix brain damage in deciding which python input converter to use. 2003-06-11 18:33:39 +00:00
Tom Lane
5666462f2e Ensure that in all flex lexers that are part of the backend, a
yy_fatal_error() call results in elog(ERROR) not exit().  This was
already fixed in the main lexer and plpgsql, but extend same technique
to all the other dot-l files.  Also, on review of the possible calls
to yy_fatal_error(), it seems safe to use elog(ERROR) not elog(FATAL).
2003-05-29 22:30:02 +00:00
Bruce Momjian
98b6f37e47 Make debug_ GUC varables output DEBUG1 rather than LOG, and mention in
docs that CLIENT/LOG_MIN_MESSAGES now controls debug_* output location.
Doc changes included.
2003-05-27 17:49:47 +00:00
Tom Lane
450d7e276e Seems pl_funcs didn't have support for plpgsql PERFORM statement. 2003-05-23 04:08:34 +00:00
Tom Lane
f9b232f019 Small changes to use the absolute path to system catalogs.
Greg Sabino Mullane
2003-05-16 13:37:00 +00:00