Re: To know what a macro does

Поиск
Список
Период
Сортировка
От Werner Echezuria
Тема Re: To know what a macro does
Дата
Msg-id 2485a25e0904261803s1ab6714te4b3b0a2b4a9d24c@mail.gmail.com
обсуждение исходный текст
Ответ на Re: To know what a macro does  (Martijn van Oosterhout <kleptog@svana.org>)
Ответы Re: To know what a macro does  (Martijn van Oosterhout <kleptog@svana.org>)
Re: To know what a macro does  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
Well, I do a query like this: "SELECT * FROM historial WHERE id_grupo=grupo_hist ORDER BY grmemb LIMIT 10;", then in
transformSortClauseI know it this way:<br /><br /> /*<br /> * transformSortClause -<br /> *      transform an ORDER BY
clause<br/>  *<br /> * ORDER BY items will be added to the targetlist (as resjunk columns)<br /> * if not already
present,so the targetlist must be passed by reference.<br /> */<br />List *<br />transformSortClause(ParseState
*pstate,<br/>                    List *orderlist,<br />                     List **targetlist,<br />                   
boolresolveUnknown)<br />{<br />    List       *sortlist = NIL;<br />    ListCell   *olitem;<br /><br />   
foreach(olitem,orderlist)<br />    {<br />        SortBy       *sortby = lfirst(olitem);<br />         TargetEntry
*tle;<br/>        //To find out if it is the membership degree<br />        char       *namegrmemb =
strVal(linitial(((ColumnRef*) sortby->node)->fields));<br /><br />        <b>if (strcmp(namegrmemb,
"grmemb")==0)<br/></b>            tle = createTargetFuzzyEntry(targetlist);<br />        else<br />            tle =
findTargetlistEntry(pstate,sortby->node,<br />                                      targetlist, ORDER_CLAUSE);<br
/><br/>        sortlist = addTargetToSortList(pstate, tle,<br />                                        sortlist,
*targetlist,<br/>                                       sortby->sortby_dir,<br />                                   
  sortby->sortby_nulls,<br />                                       sortby->useOp,<br />                        
              resolveUnknown);<br />        <br />        <br /><br />    }<br /><br />    return sortlist;<br />}<br
/><br
/>|***************************************************************************************************************************|<br
/><br/>Then I created a function that includes a new target entry in the targetlist:<br /><br />//To sort the
membershipdegree<br />TargetEntry *<br />createTargetFuzzyEntry(List **targetlist){<br />    <br />    /*I just have to
createthe fuzzy target entry right here */<br />     TargetEntry    *tfp = makeNode(TargetEntry);<br />    Const   *cn
=makeNode(Const);<br />    float    val = 1.0;<br />    TargetEntry *tlast = list_nth(*targetlist,
list_length(*targetlist)-1);<br/><br />    cn = makeConst(700, -1, 4, (Float4GetDatum(val)), false, true); <br />    
tfp->resorigtbl=tlast->resorigtbl;<br/>    tfp->expr = (Expr *) cn;<br />    tfp->resno =
list_length(*targetlist)+ 1;<br />    tfp->resname = "grmemb";<br />    tfp->resorigcol =
list_length(*targetlist)+ 1;<br />     tfp->ressortgroupref = 0;<br />    tfp->resjunk = false;<br /><br />   
*targetlist= lappend(*targetlist, tfp);<br /><br />    return tfp;<br />}<br /><br
/>|*************************************************************************************************************************|<br
/><br/>Later in planner.c on grouping_planner function I do something like this:<br /><br />/*<br />     * If we were
notable to make the plan come out in the right order, add<br />     * an explicit sort step.<br />     */<br />    if
(parse->sortClause)<br/>     {<br />        if (!pathkeys_contained_in(sort_pathkeys, current_pathkeys) ||
parse->hasGrMemb)<br/>        {<br />            result_plan = (Plan *) make_sort_from_pathkeys(root,<br />       
                                                  result_plan,<br />                                                
          sort_pathkeys,<br />                                                           limit_tuples);<br />       
   current_pathkeys = sort_pathkeys;<br />        }<br />    }<br /><br /><br /><div class="gmail_quote">2009/4/26
Martijnvan Oosterhout <span dir="ltr"><<a href="mailto:kleptog@svana.org">kleptog@svana.org</a>></span><br
/><blockquoteclass="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex;
padding-left:1ex;"><div class="im">On Sun, Apr 26, 2009 at 04:20:41PM -0430, Werner Echezuria wrote:<br /> > Hi,
I'vebeen trying to sort a column that performs some calculations, but<br /> > postgres says this: ERROR:  invalid
attnum:-12851. I was searching on the<br /> > source code, and I guess the error araises around this macro:<br /><br
/></div>I'mpretty sure this is a "not supposed to happen" thing. Do you have a<br /> repoducable test case? Also, what
versionof postgres?<br /><div class="im"><br /> > /*<br /> >      * Copy the given tuple into memory we control,
anddecrease availMem.<br /> >      * Then call the common code.<br /> >      */<br /> >     COPYTUP(state,
&stup,(void *) slot);<br /> ><br /> > So, I'd like to know what COPYTUP does?, what is availMem?, How can I
tell<br/> > postgres it is a valid attnum?<br /><br /></div>COPYTUP does exactly what the comment says it does. I'm
guessingthis<br /> is in the sort code somewhere? An "attnum" is a column number, like the<br /> first column is attnum
1.Attnum -12851 is definitly bogus.<br /><br /> Have a nice day,<br /><font color="#888888">--<br /> Martijn van
Oosterhout  <<a href="mailto:kleptog@svana.org">kleptog@svana.org</a>>   <a href="http://svana.org/kleptog/"
target="_blank">http://svana.org/kleptog/</a><br/> > Please line up in a tree and maintain the heap invariant
while<br/> > boarding. Thank you for flying nlogn airlines.<br /></font><br />-----BEGIN PGP SIGNATURE-----<br />
Version:GnuPG v1.4.9 (GNU/Linux)<br /><br /> iD8DBQFJ9M7xIB7bNG8LQkwRAviuAJ9F9GeldnVLInum3ZaT0IKTNvk3dACdElyo<br />
7VZ7cLAgu1q4PncHS8rVYJU=<br/> =Y5Qw<br /> -----END PGP SIGNATURE-----<br /><br /></blockquote></div><br /> 

В списке pgsql-hackers по дате отправления:

Предыдущее
От: Gurjeet Singh
Дата:
Сообщение: Re: RFE: Transparent encryption on all fields
Следующее
От: tomas@tuxteam.de
Дата:
Сообщение: Re: RFE: Transparent encryption on all fields