Re: [HACKERS] Unary % operator is broken in current sources

From: Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)us>
To: tgl(at)sss(dot)pgh(dot)pa(dot)us (Tom Lane)
Cc: pgsql-hackers(at)postgreSQL(dot)org
Subject: Re: [HACKERS] Unary % operator is broken in current sources
Date: 1999-03-21 18:57:17
Message-ID: 199903211857.NAA28415@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

> Bruce Momjian <maillist(at)candle(dot)pha(dot)pa(dot)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(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Bruce Momjian 1999-03-21 18:58:37 Re: [HACKERS] min() and max() causing aborts
Previous Message Bruce Momjian 1999-03-21 18:51:38 Re: [HACKERS] discussion on proposed int8_ops patch