aboutsummaryrefslogtreecommitdiff
path: root/contrib/btree_gist/btree_utils_num.c
diff options
context:
space:
mode:
authorTeodor Sigaev <teodor@sigaev.ru>2004-06-03 12:26:10 +0000
committerTeodor Sigaev <teodor@sigaev.ru>2004-06-03 12:26:10 +0000
commit7b81988f9b5275e2cdf7bbb0ca0620a24f1afc82 (patch)
treea21263073a48e6b7f9e6949734a3f0724a799579 /contrib/btree_gist/btree_utils_num.c
parent921d749bd4c34c3349f1c254d5faa2f1cec03911 (diff)
downloadpostgresql-7b81988f9b5275e2cdf7bbb0ca0620a24f1afc82.tar.gz
postgresql-7b81988f9b5275e2cdf7bbb0ca0620a24f1afc82.zip
- Add aligment of variable data types
- Add aligment for interval data types - Avoid floating point overflow in penalty functions Janko Richter <jankorichter@yahoo.de> and teodor
Diffstat (limited to 'contrib/btree_gist/btree_utils_num.c')
-rw-r--r--contrib/btree_gist/btree_utils_num.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/contrib/btree_gist/btree_utils_num.c b/contrib/btree_gist/btree_utils_num.c
index 80fccbaef05..cba5739dcf2 100644
--- a/contrib/btree_gist/btree_utils_num.c
+++ b/contrib/btree_gist/btree_utils_num.c
@@ -15,8 +15,8 @@ gbt_num_compress( GISTENTRY *retval , GISTENTRY *entry , const gbtree_ninfo *
TimeADT ts;
DateADT dt;
} v ;
-
- GBT_NUMKEY *r = ( GBT_NUMKEY * ) palloc(2 * tinfo->size);
+
+ GBT_NUMKEY *r = ( GBT_NUMKEY * ) palloc(2 * tinfo->size );
void *leaf = NULL;
switch ( tinfo->t )
@@ -45,12 +45,12 @@ gbt_num_compress( GISTENTRY *retval , GISTENTRY *entry , const gbtree_ninfo *
leaf = DatumGetPointer(entry->key);
}
- memcpy ( (void*) &r[0] , leaf, tinfo->size );
- memcpy ( (void*) &r[tinfo->size] , leaf, tinfo->size );
-
+ memset ( (void*) &r[0] , 0 , 2*tinfo->size );
+ memcpy ( (void*) &r[0] , leaf, tinfo->size );
+ memcpy ( (void*) &r[tinfo->size] , leaf, tinfo->size );
retval = palloc(sizeof(GISTENTRY));
gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page,
- entry->offset,( 2 * tinfo->size), FALSE);
+ entry->offset,( 2 * tinfo->size ), FALSE);
} else
retval = entry;
@@ -72,8 +72,8 @@ gbt_num_union( GBT_NUMKEY * out, const GistEntryVector * entryvec, const gbtree_
GBT_NUMKEY * cur ;
GBT_NUMKEY_R o, c;
- numranges = entryvec->n;
- cur = (GBT_NUMKEY *) DatumGetPointer((entryvec->vector[0].key));
+ numranges = entryvec->n;
+ cur = (GBT_NUMKEY *) DatumGetPointer((entryvec->vector[0].key));
o.lower = &((GBT_NUMKEY *)out)[0];
@@ -86,7 +86,6 @@ gbt_num_union( GBT_NUMKEY * out, const GistEntryVector * entryvec, const gbtree_
cur = (GBT_NUMKEY *) DatumGetPointer((entryvec->vector[i].key));
c.lower = &cur[0];
c.upper = &cur[tinfo->size];
-
if ( (*tinfo->f_gt)(o.lower, c.lower) ) /* out->lower > cur->lower */
memcpy( (void* ) o.lower, (void*) c.lower, tinfo->size );
if ( (*tinfo->f_lt)(o.upper, c.upper) ) /* out->upper < cur->upper */
@@ -127,26 +126,26 @@ gbt_num_bin_union(Datum * u , GBT_NUMKEY * e , const gbtree_ninfo * tinfo )
{
GBT_NUMKEY_R rd;
+
rd.lower = &e[0];
rd.upper = &e[tinfo->size];
if (!DatumGetPointer(*u))
{
*u = PointerGetDatum(palloc(2 * tinfo->size));
- memcpy( (void* ) &( ( (GBT_NUMKEY *) DatumGetPointer(*u) )[0] ) , (void*)rd.lower , tinfo->size );
+ memcpy( (void* ) &( ( (GBT_NUMKEY *) DatumGetPointer(*u) )[0] ) , (void*)rd.lower , tinfo->size );
memcpy( (void* ) &( ( (GBT_NUMKEY *) DatumGetPointer(*u) )[tinfo->size]) , (void*)rd.upper , tinfo->size );
}
else
{
GBT_NUMKEY_R ur ;
- ur.lower = &( ( (GBT_NUMKEY *) DatumGetPointer(*u) )[0] ) ;
+ ur.lower = &( ( (GBT_NUMKEY *) DatumGetPointer(*u) )[0] ) ;
ur.upper = &( ( (GBT_NUMKEY *) DatumGetPointer(*u) )[tinfo->size]) ;
if ( (*tinfo->f_gt)((void*)ur.lower, (void*)rd.lower) )
memcpy( (void*) ur.lower, (void*) rd.lower, tinfo->size );
if ( (*tinfo->f_lt)((void*)ur.upper, (void*)rd.upper) )
memcpy( (void*) ur.upper, (void*) rd.upper, tinfo->size );
}
-
}