head	1.4;
access;
symbols
	REL7_4_29:1.3
	REL8_0_25:1.3
	REL8_1_21:1.3
	REL8_2_17:1.3
	REL8_3_11:1.3
	REL8_4_4:1.3
	REL7_4_28:1.3
	REL8_0_24:1.3
	REL8_1_20:1.3
	REL8_2_16:1.3
	REL8_3_10:1.3
	REL8_4_3:1.3
	REL7_4_27:1.3
	REL8_0_23:1.3
	REL8_1_19:1.3
	REL8_2_15:1.3
	REL8_3_9:1.3
	REL8_4_2:1.3
	REL7_4_26:1.3
	REL8_0_22:1.3
	REL8_1_18:1.3
	REL8_2_14:1.3
	REL8_3_8:1.3
	REL8_4_1:1.3
	REL8_5_ALPHA1:1.3
	REL8_5_ALPHA1_BRANCH:1.3.0.18
	REL8_4_STABLE:1.3.0.16
	REL8_4_0:1.3
	REL8_4_RC2:1.3
	REL8_4_RC1:1.3
	REL8_4_BETA2:1.3
	REL8_4_BETA1:1.3
	REL7_4_25:1.3
	REL8_0_21:1.3
	REL8_1_17:1.3
	REL8_2_13:1.3
	REL8_3_7:1.3
	REL7_4_24:1.3
	REL8_0_20:1.3
	REL8_1_16:1.3
	REL8_2_12:1.3
	REL8_3_6:1.3
	REL7_4_23:1.3
	REL8_0_19:1.3
	REL8_1_15:1.3
	REL8_2_11:1.3
	REL8_3_5:1.3
	REL7_4_22:1.3
	REL8_0_18:1.3
	REL8_1_14:1.3
	REL8_2_10:1.3
	REL8_3_4:1.3
	REL7_4_21:1.3
	REL8_0_17:1.3
	REL8_1_13:1.3
	REL8_2_9:1.3
	REL8_3_3:1.3
	REL7_4_20:1.3
	REL8_0_16:1.3
	REL8_1_12:1.3
	REL8_2_8:1.3
	REL8_3_2:1.3
	REL8_2_7:1.3
	REL8_3_1:1.3
	REL8_3_STABLE:1.3.0.14
	REL8_3_0:1.3
	REL8_3_RC2:1.3
	REL7_3_21:1.2
	REL7_4_19:1.3
	REL8_0_15:1.3
	REL8_1_11:1.3
	REL8_2_6:1.3
	REL8_3_RC1:1.3
	REL8_3_BETA4:1.3
	REL8_3_BETA3:1.3
	REL8_3_BETA2:1.3
	REL8_3_BETA1:1.3
	REL7_3_20:1.2
	REL7_4_18:1.3
	REL8_0_14:1.3
	REL8_1_10:1.3
	REL8_2_5:1.3
	REL7_3_19:1.2
	REL7_4_17:1.3
	REL8_0_13:1.3
	REL8_1_9:1.3
	REL8_2_4:1.3
	REL8_0_12:1.3
	REL8_1_8:1.3
	REL8_2_3:1.3
	REL7_3_18:1.2
	REL7_4_16:1.3
	REL8_0_11:1.3
	REL8_1_7:1.3
	REL8_2_2:1.3
	REL8_0_10:1.3
	REL8_1_6:1.3
	REL8_2_1:1.3
	REL7_4_15:1.3
	REL7_3_17:1.2
	REL8_2_STABLE:1.3.0.12
	REL8_2_0:1.3
	REL8_2_RC1:1.3
	REL8_2_BETA3:1.3
	REL8_2_BETA2:1.3
	REL8_1_5:1.3
	REL8_0_9:1.3
	REL7_4_14:1.3
	REL7_3_16:1.2
	REL8_2_BETA1:1.3
	REL7_3_15:1.2
	REL7_4_13:1.3
	REL8_0_8:1.3
	REL8_1_4:1.3
	REL7_3_14:1.2
	REL7_4_12:1.3
	REL8_0_7:1.3
	REL8_1_3:1.3
	REL7_3_13:1.2
	REL7_4_11:1.3
	REL8_0_6:1.3
	REL8_1_2:1.3
	REL7_3_12:1.2
	REL7_4_10:1.3
	REL8_0_5:1.3
	REL8_1_1:1.3
	REL8_1_STABLE:1.3.0.10
	REL8_1_0:1.3
	REL8_1_0RC1:1.3
	REL8_1_0BETA4:1.3
	REL8_1_0BETA3:1.3
	REL7_3_11:1.2
	REL7_4_9:1.3
	REL8_0_4:1.3
	REL8_1_0BETA2:1.3
	REL8_1_0BETA1:1.3
	REL7_2_8:1.2
	REL7_3_10:1.2
	REL7_4_8:1.3
	REL8_0_3:1.3
	REL8_0_2:1.3
	REL7_2_7:1.2
	REL7_3_9:1.2
	REL7_4_7:1.3
	REL8_0_1:1.3
	REL8_0_STABLE:1.3.0.8
	REL8_0_0:1.3.0.6
	REL8_0_0RC5:1.3
	REL8_0_0RC4:1.3
	REL8_0_0RC3:1.3
	REL8_0_0RC2:1.3
	REL8_0_0RC1:1.3
	REL8_0_0BETA5:1.3
	REL8_0_0BETA4:1.3
	REL7_4_6:1.3
	REL7_3_8:1.2
	REL7_2_6:1.2
	REL8_0_0BETA3:1.3
	REL8_0_0BETA2:1.3
	REL7_2_5:1.2
	REL7_4_5:1.3
	REL7_3_7:1.2
	REL7_4_4:1.3
	REL8_0_0BETA1:1.3
	REL7_4_3:1.3
	REL7_4_2:1.3
	REL7_3_6:1.2
	REL7_4_1:1.3
	REL7_3_5:1.2
	REL7_4:1.3
	REL7_4_RC2:1.3
	REL7_4_STABLE:1.3.0.4
	REL7_4_RC1:1.3
	REL7_4_BETA5:1.3
	REL7_4_BETA4:1.3
	REL7_4_BETA3:1.3
	REL7_4_BETA2:1.3
	WIN32_DEV:1.3.0.2
	REL7_4_BETA1:1.3
	REL7_3_4:1.2
	REL7_3_2:1.2
	REL7_2_4:1.2
	REL7_3_STABLE:1.2.0.4
	REL7_2_3:1.2
	REL7_2_STABLE:1.2.0.2
	REL7_2:1.2
	REL7_2_RC2:1.2
	REL7_2_RC1:1.2
	REL7_2_BETA5:1.2
	REL7_2_BETA4:1.2
	REL7_2_BETA3:1.2
	REL7_2_BETA2:1.2
	REL7_2_BETA1:1.2;
locks; strict;
comment	@# @;


1.4
date	2009.09.12.15.21.27;	author petere;	state dead;
branches;
next	1.3;

1.3
date	2003.06.30.18.31.42;	author tgl;	state Exp;
branches;
next	1.2;

1.2
date	2001.05.12.17.49.32;	author petere;	state Exp;
branches;
next	1.1;

1.1
date	2001.05.09.19.55.22;	author momjian;	state Exp;
branches;
next	;


desc
@@


1.4
log
@Remove TODO file; it has been added to the main Todo list in the wiki.
@
text
@In no particular order...

* Develop a trusted variant of PL/Python.  Now that RExec has been shown
  to be full of holes, this may take a while :-(

* Allow arrays as function arguments and return values.  (almost done)

* Create a new restricted execution class that will allow me to pass
  function arguments in as locals.  Passing them as globals means
  functions cannot be called recursively.

* Functions cache the input and output functions for their arguments,
  so the following will make PostgreSQL unhappy:

    create table users (first_name text, last_name text);
    create function user_name(user) returns text as 'mycode' language plpython;
    select user_name(user) from users;
    alter table add column user_id integer;
    select user_name(user) from users;

  You have to drop and create the function(s) each time its arguments
  are modified (not nice), or don't cache the input and output functions
  (slower?), or check if the structure of the argument has been
  altered (is this possible, easy, quick?) and recreate cache.

* Better documentation

* Add a DB-API compliant interface on top of the SPI interface.
@


1.3
log
@Rename plpython to plpythonu, and update documentation to reflect its
now-untrusted status.
@
text
@@


1.2
log
@PL/Python should build portably now, if you can get over the fact that
there's no shared libpython.  Test suite works as well. Also, add some
documentation.
@
text
@d3 3
d16 1
a16 1
    create function user_name(user) returns text as 'mycode' language 'plpython';
@


1.1
log
@Add TODO file.
@
text
@d1 25
a25 9
<html>
<head><title>TODO</title></head>
<body bgcolor="white">
In no special order<br>
<li>allow arrays as function arguments and return values (almost done).
<li>more and better documentation.
<li>improve/automate configuration.
<li>???
</body>@
