|
7 | 7 | *
|
8 | 8 | *
|
9 | 9 | * IDENTIFICATION
|
10 |
| - * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.21 1997/03/0611:41:09 vadim Exp $ |
| 10 | + * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.22 1997/03/0618:38:35 momjian Exp $ |
11 | 11 | *
|
12 | 12 | *-------------------------------------------------------------------------
|
13 | 13 | */
|
@@ -427,8 +427,8 @@ vc_vacone (Oid relid)
|
427 | 427 | memmove(stats->attr,attr[i],ATTRIBUTE_TUPLE_SIZE);
|
428 | 428 | stats->best=stats->guess1=stats->guess2=0;
|
429 | 429 | stats->max=stats->min=0;
|
430 |
| -stats->best_len=stats->guess1_len=stats->guess2_len=0; |
431 |
| -stats->max_len=stats->min_len=0; |
| 430 | +stats->best_len=stats->guess1_len=stats->guess2_len=-1; |
| 431 | +stats->max_len=stats->min_len=-1; |
432 | 432 | stats->initialized= false;
|
433 | 433 | stats->best_cnt=stats->guess1_cnt=stats->guess1_hits=stats->guess2_hits=0;
|
434 | 434 | stats->max_cnt=stats->min_cnt=stats->null_cnt=stats->nonnull_cnt=0;
|
@@ -1628,14 +1628,14 @@ vc_bucketcpy(AttributeTupleForm attr, Datum value, Datum *bucket, int16 *bucket_
|
1628 | 1628 | else {
|
1629 | 1629 | intlen= (attr->attlen!=-1 ?attr->attlen :VARSIZE(value));
|
1630 | 1630 |
|
1631 |
| -if (len>*bucket_len) |
| 1631 | +if (len>*bucket_len)/* bucket_len only grows, prevents thrashing */ |
1632 | 1632 | {
|
1633 |
| -if (*bucket_len!=0) |
| 1633 | +if (*bucket_len!=-1)/* have we allocated before? */ |
1634 | 1634 | pfree(DatumGetPointer(*bucket));
|
1635 |
| -*bucket=PointerGetDatum(palloc(len)); |
| 1635 | +*bucket=PointerGetDatum(palloc(len+VARHDRSZ)); |
| 1636 | +*bucket_len=len; |
1636 | 1637 | }
|
1637 |
| -*bucket_len=len; |
1638 |
| -memmove(DatumGetPointer(*bucket),DatumGetPointer(value),len); |
| 1638 | +memmove(DatumGetPointer(*bucket),DatumGetPointer(value),len+VARHDRSZ); |
1639 | 1639 | }
|
1640 | 1640 | }
|
1641 | 1641 |
|
|