PL/PgSQL: EXIT USING ROLLBACK - Mailing list pgsql-hackers

From Marko Tiikkaja
Subject PL/PgSQL: EXIT USING ROLLBACK
Date
Msg-id 53D3E1D9.5060808@joh.to
Whole thread Raw
Responses Re: PL/PgSQL: EXIT USING ROLLBACK  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: PL/PgSQL: EXIT USING ROLLBACK  (Pavel Stehule <pavel.stehule@gmail.com>)
Re: PL/PgSQL: EXIT USING ROLLBACK  (Simon Riggs <simon@2ndQuadrant.com>)
List pgsql-hackers
Hello,

Today I'd like to present a way to get rid of code like this:

   $$
   BEGIN

   BEGIN
     INSERT INTO foo VALUES (1);
     -- run some tests/checks/whatever
     RAISE EXCEPTION 'OK';
   EXCEPTION WHEN raise_exception THEN
     IF SQLERRM <> 'OK' THEN
       RAISE;
     END IF;
   END;

   RETURN 'success';
   END
   $$

And replace it with code like this:

   $$
   BEGIN

   <<testsomething>>
   BEGIN
     INSERT INTO foo VALUES (1);
     -- run some tests/checks/whatever
     EXIT USING ROLLBACK testsomething;
   EXCEPTION WHEN others THEN
     RAISE;
   END;

   RETURN 'success';
   END
   $$

I'm not set on the USING ROLLBACK syntax; it was the only thing I could
come up with that seemed even remotely sane and didn't break backwards
compatibility.

Thoughts?  Patch attached, if someone cares.


.marko

Attachment

pgsql-hackers by date:

Previous
From: Fabien COELHO
Date:
Subject: Re: parametric block size?
Next
From: Andres Freund
Date:
Subject: Re: parametric block size?