Re: [HACKERS] Unary % operator is broken in current sources - Mailing list pgsql-hackers

From Tom Lane
Subject Re: [HACKERS] Unary % operator is broken in current sources
Date
Msg-id 7395.922031711@sss.pgh.pa.us
Whole thread Raw
In response to Re: [HACKERS] Unary % operator is broken in current sources  (Bruce Momjian <maillist@candle.pha.pa.us>)
Responses Re: [HACKERS] Unary % operator is broken in current sources
List pgsql-hackers
Bruce Momjian <maillist@candle.pha.pa.us> writes:
> Not sure.  I know I only changed % to have precedence like /.  No one is
> complaining, and I think the problems are restricted to +,-,*,/, and %. 
> Should I fix any of these other ones?

Right now I think % is the only problem, since it's the only operator
that has all three syntaxes (infix, prefix, postfix):

regression=> select distinct p1.oprname, p1.oprkind, p2.oprkind from
regression-> pg_operator as p1, pg_operator as p2
regression-> where p1.oprname = p2.oprname and p1.oprkind < p2.oprkind;
oprname|oprkind|oprkind
-------+-------+-------
#      |b      |l
%      |b      |l
%      |b      |r
%      |l      |r
-      |b      |l
?-     |b      |l
?|     |b      |l
@      |b      |l
(8 rows)

Having both infix and prefix syntaxes doesn't seem to confuse the
parser --- at least, we have regress tests of both prefix @ and
infix @ (likewise #) and they're not complaining.  Probably you need
a postfix syntax plus one or both of the other syntaxes to yield an
ambiguity that will confuse the parser.  I haven't tried to track it
down in the grammar, however.

My concern with hacking in a special case for '%' in the grammar
is that we'll need to do it again anytime someone adds an operator
with the right set of syntaxes.  It'd be better to understand *why*
the parser is having a hard time with this all of a sudden, and fix it
without reference to any particular operator.  Postgres is supposed to
be extensible after all...
        regards, tom lane


pgsql-hackers by date:

Previous
From: Thomas Lockhart
Date:
Subject: Re: [HACKERS] non existing table error message changed?
Next
From: Tom Lane
Date:
Subject: Re: [HACKERS] min() and max() causing aborts