Received: from maia.hub.org (unknown [200.46.204.183]) by mail.postgresql.org (Postfix) with ESMTP id D67FD6328A5 for ; Fri, 28 Aug 2009 20:39:34 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by maia.hub.org (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 49522-01 for ; Fri, 28 Aug 2009 23:39:27 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from phoenix.advel.cz (phoenix.advel.cz [81.0.239.26]) by mail.postgresql.org (Postfix) with SMTP id BE91C63287D for ; Fri, 28 Aug 2009 20:39:26 -0300 (ADT) Received: (qmail 6601 invoked from network); 29 Aug 2009 01:39:24 +0200 Received: from unknown (HELO ?10.12.0.96?) (88.103.48.48) by 192.168.1.50 with SMTP; 29 Aug 2009 01:39:24 +0200 Message-ID: <4A986AA6.7030505@pjmodos.net> Date: Sat, 29 Aug 2009 01:39:18 +0200 From: Petr Jelinek User-Agent: Thunderbird 2.0.0.23 (Windows/20090812) MIME-Version: 1.0 To: PostgreSQL-development CC: Tom Lane , Alvaro Herrera Subject: Anonymous code blocks (was: Re: GRANT ON ALL IN schema) References: <4A86B5D5.6060807@dunslane.net> <4A871F46.1040002@agliodbs.com> <5D5ECAE0-F2B0-479B-9594-50AAF18F10ED@hi-media.com> <20090815223102.GS5407@samason.me.uk> <1250378139.18992.6.camel@vanquo.pezone.net> <603c8f070908152051mbd1d706hb0e29f5cfaf2f151@mail.gmail.com> <4A87854B.3070707@dunslane.net> <1250427428.26280.2.camel@vanquo.pezone.net> <395.1250439160@sss.pgh.pa.us> <4A8D9CA0.1040607@pjmodos.net> <20090820190604.GK6261@alvh.no-ip.org> <3493.1250864810@sss.pgh.pa.us> <4A8F1986.3030506@pjmodos.net> <11481.1250892674@sss.pgh.pa.us> <4A8F24D4.9040801@pjmodos.net> In-Reply-To: <4A8F24D4.9040801@pjmodos.net> Content-Type: multipart/mixed; boundary="------------070907010702020307070600" X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-2.599 tagged_above=-10 required=5 tests=BAYES_00=-2.599 X-Spam-Level: X-Archive-Number: 200908/2013 X-Sequence-Number: 144655 This is a multi-part message in MIME format. --------------070907010702020307070600 Content-Type: text/plain; charset=windows-1250; format=flowed Content-Transfer-Encoding: 7bit > The question is still valid, though it's better put in your words - do > we want to refactor the existing compiler or write a separate one ? So, for now I went with the path of custom compiler and current executor. I attached current version of the patch. I don't expect this to get committed or anything, but I'd like other eyes to take a look at it. What it does: Adds laninline Oid which points to function handling inline code (aka anonymous code block). Adds DO $$some code$$ [ LANGUAGE lanname ] syntax which sends the source code to that laninline function of the specified language (or language set by default_do_language guc). There is implementation for plpgsql with simpler compiler which still creates function struct for the executor (I believe there is no harm in adjusting executor later, when current one works, just does unnecessary stuff). There is doc and a simple regression test for plpgsql implementation. -- Regards Petr Jelinek (PJMODOS) --------------070907010702020307070600 Content-Type: application/x-tar; name="inlinepl-2009-08-28.diff.gz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="inlinepl-2009-08-28.diff.gz" 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 WhH/F4vi330jgk0JiQAA --------------070907010702020307070600--