aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>1997-03-06 18:38:35 +0000
committerBruce Momjian <bruce@momjian.us>1997-03-06 18:38:35 +0000
commitda90363c126cc7d6381f7e5c1530ff99647e4fa4 (patch)
treeb9c4f48676d6479f3da07f4d3b3f39fb4aa83562
parent74bd93d5979540915e9bb5fafb4122b897214f19 (diff)
downloadpostgresql-da90363c126cc7d6381f7e5c1530ff99647e4fa4.tar.gz
postgresql-da90363c126cc7d6381f7e5c1530ff99647e4fa4.zip
Fix vacuum bug Vadim found with text fields.
-rw-r--r--src/backend/commands/vacuum.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c
index 74df108c63a..85e1941d185 100644
--- a/src/backend/commands/vacuum.c
+++ b/src/backend/commands/vacuum.c
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.21 1997/03/06 11:41:09 vadim Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.22 1997/03/06 18:38:35 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -427,8 +427,8 @@ vc_vacone (Oid relid)
memmove(stats->attr,attr[i],ATTRIBUTE_TUPLE_SIZE);
stats->best = stats->guess1 = stats->guess2 = 0;
stats->max = stats->min = 0;
- stats->best_len = stats->guess1_len = stats->guess2_len = 0;
- stats->max_len = stats->min_len = 0;
+ stats->best_len = stats->guess1_len = stats->guess2_len = -1;
+ stats->max_len = stats->min_len = -1;
stats->initialized = false;
stats->best_cnt = stats->guess1_cnt = stats->guess1_hits = stats->guess2_hits = 0;
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_
else {
int len = (attr->attlen != -1 ? attr->attlen : VARSIZE(value));
- if (len > *bucket_len)
+ if (len > *bucket_len) /* bucket_len only grows, prevents thrashing */
{
- if (*bucket_len != 0)
+ if (*bucket_len != -1) /* have we allocated before? */
pfree(DatumGetPointer(*bucket));
- *bucket = PointerGetDatum(palloc(len));
+ *bucket = PointerGetDatum(palloc(len+VARHDRSZ));
+ *bucket_len = len;
}
- *bucket_len = len;
- memmove(DatumGetPointer(*bucket), DatumGetPointer(value), len);
+ memmove(DatumGetPointer(*bucket), DatumGetPointer(value), len+VARHDRSZ);
}
}