Re: [HACKERS] WIP: Faster Expression Processing v4 - Mailing list pgsql-hackers

From Andres Freund
Subject Re: [HACKERS] WIP: Faster Expression Processing v4
Date
Msg-id 20170314011104.mtcepqxip7qo5ax4@alap3.anarazel.de
Whole thread Raw
In response to Re: [HACKERS] WIP: Faster Expression Processing v4  (Andres Freund <andres@anarazel.de>)
Responses Re: [HACKERS] WIP: Faster Expression Processing v4  (Alvaro Herrera <alvherre@2ndquadrant.com>)
List pgsql-hackers
Hi,

On 2017-03-13 01:03:51 -0700, Andres Freund wrote:
> What's basically missing here is:
> - pgindent run and minimizing resulting damage

Running into a bit of an issue here - pgindent mangles something like
   EEO_SWITCH (op->opcode)   {       EEO_CASE(EEO_DONE):           goto out;
       EEO_CASE(EEO_INNER_FETCHSOME):           /* XXX: worthwhile to check tts_nvalid inline first? */
slot_getsomeattrs(innerslot,op->d.fetch.last_var);           EEO_DISPATCH(op);
 
       EEO_CASE(EEO_OUTER_FETCHSOME):           slot_getsomeattrs(outerslot, op->d.fetch.last_var);
EEO_DISPATCH(op);
       EEO_CASE(EEO_SCAN_FETCHSOME):           slot_getsomeattrs(scanslot, op->d.fetch.last_var);
EEO_DISPATCH(op);
       EEO_CASE(EEO_INNER_VAR):           {               int attnum = op->d.var.attnum;
               /*                * Can't assert tts_nvalid, as wholerow var evaluation or such                * could
havematerialized the slot - but the contents are                * still valid :/                */
Assert(op->d.var.attnum>= 0);               *op->resnull = innerslot->tts_isnull[attnum];               *op->resvalue =
innerslot->tts_values[attnum];              EEO_DISPATCH(op);           }
 

into
   EEO_SWITCH(op->opcode)   {
EEO_CASE(EEO_DONE):       goto out;

EEO_CASE(EEO_INNER_FETCHSOME):       /* XXX: worthwhile to check tts_nvalid inline first? */
slot_getsomeattrs(innerslot,op->d.fetch.last_var);       EEO_DISPATCH(op);
 

EEO_CASE(EEO_OUTER_FETCHSOME):       slot_getsomeattrs(outerslot, op->d.fetch.last_var);       EEO_DISPATCH(op);

EEO_CASE(EEO_SCAN_FETCHSOME):       slot_getsomeattrs(scanslot, op->d.fetch.last_var);       EEO_DISPATCH(op);

EEO_CASE(EEO_INNER_VAR):       {           int         attnum = op->d.var.attnum;
           /*            * Can't assert tts_nvalid, as wholerow var evaluation or such            * could have
materializedthe slot - but the contents are still            * valid :/            */           Assert(op->d.var.attnum
>=0);           *op->resnull = innerslot->tts_isnull[attnum];           *op->resvalue = innerslot->tts_values[attnum];
        EEO_DISPATCH(op);       }
 


which is a bit annoying.  (the EEO_CASE is either a jump label or a case
statement, depending on computed goto availability).

It seems we could either:
1) live with the damage
2) disable pgindent
3) move the : inside EEO_CASE's definition, and only use {} blocks.

I'm inclined to go for 3).

Opinions?

- Andres



pgsql-hackers by date:

Previous
From: Corey Huinker
Date:
Subject: Re: [HACKERS] asynchronous execution
Next
From: Peter Geoghegan
Date:
Subject: Re: [HACKERS] tuplesort_gettuple_common() and *should_free argument