Shouldn't we turn on warnings by the compiler on uninitialized
variables? This can also be helpful.
Advertising
--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