mirror of
https://github.com/postgres/postgres.git
synced 2025-11-06 07:49:08 +03:00
Implement the DO statement to support execution of PL code without having
to create a function for it. Procedural languages now have an additional entry point, namely a function to execute an inline code block. This seemed a better design than trying to hide the transient-ness of the code from the PL. As of this patch, only plpgsql has an inline handler, but probably people will soon write handlers for the other standard PLs. In passing, remove the long-dead LANCOMPILER option of CREATE LANGUAGE. Petr Jelinek
This commit is contained in:
@@ -13,7 +13,7 @@
|
||||
* Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.401 2009/08/02 22:14:53 tgl Exp $
|
||||
* $PostgreSQL: pgsql/src/include/nodes/parsenodes.h,v 1.402 2009/09/22 23:43:41 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1570,6 +1570,7 @@ typedef struct CreatePLangStmt
|
||||
NodeTag type;
|
||||
char *plname; /* PL name */
|
||||
List *plhandler; /* PL call handler function (qual. name) */
|
||||
List *plinline; /* optional inline function (qual. name) */
|
||||
List *plvalidator; /* optional validator function (qual. name) */
|
||||
bool pltrusted; /* PL is trusted */
|
||||
} CreatePLangStmt;
|
||||
@@ -1922,6 +1923,25 @@ typedef struct RemoveFuncStmt
|
||||
bool missing_ok; /* skip error if missing? */
|
||||
} RemoveFuncStmt;
|
||||
|
||||
/* ----------------------
|
||||
* DO Statement
|
||||
*
|
||||
* DoStmt is the raw parser output, InlineCodeBlock is the execution-time API
|
||||
* ----------------------
|
||||
*/
|
||||
typedef struct DoStmt
|
||||
{
|
||||
NodeTag type;
|
||||
List *args; /* List of DefElem nodes */
|
||||
} DoStmt;
|
||||
|
||||
typedef struct InlineCodeBlock
|
||||
{
|
||||
NodeTag type;
|
||||
char *source_text; /* source text of anonymous code block */
|
||||
Oid langOid; /* OID of selected language */
|
||||
} InlineCodeBlock;
|
||||
|
||||
/* ----------------------
|
||||
* Drop Operator Class Statement
|
||||
* ----------------------
|
||||
|
||||
Reference in New Issue
Block a user