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

From Bruce Momjian
Subject Re: [HACKERS] Unary % operator is broken in current sources
Date
Msg-id 199903211857.NAA28415@candle.pha.pa.us
Whole thread Raw
In response to Re: [HACKERS] Unary % operator is broken in current sources  (Tom Lane <tgl@sss.pgh.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...

I can tell you what I think.  +,-,*,/,% have special precedence so */ is
done before +-.  This is causing infix/prefix to break.  When % did not
behave with precidence like /, it worked fine.

So, I would only have to add cases for +,-,/,*.   We already have "-"
prefix done for negative numbers.

Comments on how to proceed?

--  Bruce Momjian                        |  http://www.op.net/~candle maillist@candle.pha.pa.us            |  (610)
853-3000+  If your life is a hard drive,     |  830 Blythe Avenue +  Christ can be your backup.        |  Drexel Hill,
Pennsylvania19026
 


pgsql-hackers by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] min() and max() causing aborts
Next
From: Bruce Momjian
Date:
Subject: Re: [HACKERS] discussion on proposed int8_ops patch