Patch to add table function support to PL/Tcl (Todo item)

From: Karl Lehenbauer <karllehenbauer(at)gmail(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Patch to add table function support to PL/Tcl (Todo item)
Date: 2010-12-28 15:33:42
Message-ID: 6832CE40-94A9-42A0-A54D-36CF5C6BC6AC@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Project name: Add table function support to PL/Tcl (Todo item)

What the patch does:

This patch adds table function support (returning record and SETOF record)
to PL/Tcl. This patch also updates PL/Tcl to use the Tcl object-style
interface instead of the older string-style one, increasing performance.

Status of the patch:

The code seems to work well, but this is its first submission.

Branch the patch is against: HEAD

Compiles and tests successfully on FreeBSD and Mac OS X. Have not tested
it with other systems but there is nothing platform specific about it.

Regression tests: Passes all existing tests but there aren't many for PL/Tcl.

This change removes PL/Tcl backward compatibility to Tcl version 7.
Since Tcl 8 has been in production release since 1997, I felt
that 13 years was long enough and PL/Tcl users linking with Tcl 7 should
go ahead and upgrade. This also allowed removal of the Tcl 7 compatibility
shims.

More importantly, this patch extends PL/Tcl to support returning rows and
sets of rows. While I studied all of the other PL languages (PL/PgSql,
PL/Perl, PL/Python and PL/C) while developing this patch, it hews most
closely to to approach taken by PL/PgSQL.

All existing semantics for functions and triggers have been retained, requiring
no changes to existing PL/Tcl code.

PL/Tcl coders who want to create functions returning a record will use "return"
to return results, the same as for a scalar, except that the value returned
should be a list of key-value pairs ("array get" format) where the keys are
`the field names and the values are the corresponding values.

To return sets of rows, one needs to use the new PL/Tcl function "return_next".
Return_next also accepts a list of key-value pairs, as "return" does.

Typically this will be invoked as something like

return_next [array get row]

To return multiple rows, the function should invoke return_next
multiple times (once for each row returned). As mentioned, the C
implementation works like PL/PgSQL, so PL/Tcl saves up the tuples in a
tuple store and then uses the SFRM_Materialize return mode to send the
results back. Fields are converted to Datum during the call to return_next,
so if any field names are in the list that aren't in the row or there are
data conversion errors, they will be returned as a Tcl error to the caller of
return_next and can be caught using Tcl's "catch", etc.

Attachment Content-Type Size
pltclobj-try-1.patch application/octet-stream 79.4 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2010-12-28 15:34:53 Re: pg_primary_conninfo
Previous Message Joachim Wieland 2010-12-28 15:33:07 Re: page compression