Shouldn't we turn on warnings by the compiler on uninitialized
variables? This can also be helpful.

--Imad
www.EnterpriseDB.com


On 11/2/06, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:

 I've noticed a trend in the PostgreSQL code base - for some reason, we tend
to avoid initializing automatic variables (actually, the code base is pretty
mixed on this point).

 For example in _bt_check_unique() we have:
 ________________________________
 static TransactionId
_bt_check_unique(Relation rel, IndexTuple itup, Relation heapRel,
                 Buffer buf, ScanKey itup_scankey)
{
    TupleDesc    itupdesc = RelationGetDescr(rel);
    int          natts = rel->rd_rel->relnatts;
    OffsetNumber offset,
                 maxoff;
    Page         page;
    BTPageOpaque opaque;
    Buffer       nbuf = InvalidBuffer;

    page = BufferGetPage(buf);
    opaque = (BTPageOpaque) PageGetSpecialPointer(page);
    maxoff = PageGetMaxOffsetNumber(page);
    offset = _bt_binsrch(rel, buf, natts, itup_scankey, false);
 ...


 ________________________________


 Notice that four variables are not initialized; instead we assign values to
them immediately after declaring them.

 I would probably write that as:
 ________________________________
 static TransactionId
_bt_check_unique(Relation rel, IndexTuple itup, Relation heapRel,
                 Buffer buf, ScanKey itup_scankey)
{
    TupleDesc    itupdesc = RelationGetDescr(rel);
    int          natts    = rel->rd_rel->relnatts;
    Page         page     = BufferGetPage(buf);
    OffsetNumber maxoff   = PageGetMaxOffsetNumber(page);
    BTPageOpaque opaque   = (BTPageOpaque) PageGetSpecialPointer(page);
    OffsetNumber offset   = _bt_binsrch(rel, buf, natts, itup_scankey,
false);
    Buffer       nbuf     = InvalidBuffer;
 ...

 ________________________________


 I'm not trying to be pedantic (it just comes naturally), but is there some
reason that the first form would be better?  I know that there is no
difference in the resulting code, so this is purely a style/maintainability
question.

 I guess the first form let's you intersperse comments (which is good).

 On the other hand, the second form makes it easy to see which variables are
un-initialized.  The second form also prevents you from adding any code
between declaring the variable and assigning a value to it (which is good in
complicated code; you might introduce a reference to an unitialized
variable).

 Just curious.

             -- Korry

---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
      choose an index scan if your joining column's datatypes do not
      match

Reply via email to