From: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | Robert Haas <robertmhaas(at)gmail(dot)com> |
Cc: | Marko Tiikkaja <marko(at)joh(dot)to>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org> |
Subject: | Re: Assertions in PL/PgSQL |
Date: | 2013-09-20 13:16:17 |
Message-ID: | CAFj8pRAnvWe+11Opw41zbNzFb-HKjc-5bU2Yt1gD5J9rufM_Ew@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
2013/9/20 Robert Haas <robertmhaas(at)gmail(dot)com>
> On Fri, Sep 20, 2013 at 6:24 AM, Marko Tiikkaja <marko(at)joh(dot)to> wrote:
> >> The issue of how this is spelled is somewhat secondary for me. I
> >> think ASSERT is probably as good as anything. But let's not kid
> >> ourselves: even reserving this word only in PL/pgsql WILL break things
> >> for some users, and there are LOTS of people out there with LOTS of
> >> procedural code. Every tiny backward-incompatibility reduces by just
> >> a little bit the percentage of those people who can upgrade and
> >> increases the delay before they do. This is an area where past
> >> experience has made me quite wary.
> >
> > The thing is, what this means is that to add a new feature to the
> language,
> > you have to make the syntax so damn ugly that no one wants to use it (see
> > row_count, for example) or you will break some poor user's function. And
> > now we got all this cool functionality which nobody wants to use, and the
> > language itself actually gets progressively worse. All this is starting
> to
> > sound like it's already too late to make PL/PgSQL better, and we should
> just
> > start afresh.
>
> To some extent I agree that PL/pgsql is hopeless. I think there are
> some things we can do to improve it, but most of what gets proposed at
> least in this forum strikes me as tinkering around the edges, and it
> can't make up for fundamentally bad language design decisions. Part
> of the problem, of course, is that most programming languages don't
> get re-released every year. It's not that it would be OK for C to
> suddenly reserve a bunch of new keywords; it's that they don't try.
> And when they do release no language versions (like C99) some people
> (like us) don't adopt them, for fear of being unable to run our code
> on older systems. Such considerations apply with equal force to
> PL/pgsql, but it gets a new release every year rather than every
> decade, so the problems are magnified.
>
> The other part of the problem is that the language isn't designed from
> the beginning to be extensible. In Perl, for example, they chose to
> mark variables with a leading $, @, or % and functions with a leading
> &. That last marking has largely fallen into desuetude, but the point
> is that - to the extent that you do have and use such markers - you
> can add new keywords without breaking anything. Some languages can
> also distinguish keywords positionally; for example, ABORT doesn't
> need to be reserved in PostgreSQL's SQL dialect because it can only
> appear as a command at the beginning of a line, and it can't be a
> column, type, or function name in that position. Such an approach
> might even work ASSERT in PL/pgsql, if there's a clean way to
> disambiguate vs. the assignment syntax. But even if we can make that
> work, we're going to continue to face this problem with each new
> language extension.
>
PL/pgSQL had a ADA completeness, uniformity and beauty newer. But it is not
too bad, and one new specialized statement doesn't kill us. A proposed
functionality is often used and we have not tools (macros) how to implement
it simply.
we support a conditions for few statement - so enhancing RAISE statement is
possible
so some form of RAISE EXCEPTION WHEN NOT FOUND AND use_assrts USING
message = 'there are no some';
but this form is relative long and less readable (can be difficult find
asserts in code and separate it from custom exceptions). I am fully for
some variant of ASSERT statement. The benefit is higher than cost.
ASSERT keyword is simply, readable - and I can accept it, if we found a
syntax for complete functionality (although I prefer a PRAGMA introduction).
Regards
Pavel
>
> --
> Robert Haas
> EnterpriseDB: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company
>
From | Date | Subject | |
---|---|---|---|
Next Message | Hannu Krosing | 2013-09-20 13:31:18 | Re: Assertions in PL/PgSQL |
Previous Message | Robert Haas | 2013-09-20 12:54:26 | Re: Freezing without write I/O |