diff options
author | Teodor Sigaev <teodor@sigaev.ru> | 2004-06-03 12:26:10 +0000 |
---|---|---|
committer | Teodor Sigaev <teodor@sigaev.ru> | 2004-06-03 12:26:10 +0000 |
commit | 7b81988f9b5275e2cdf7bbb0ca0620a24f1afc82 (patch) | |
tree | a21263073a48e6b7f9e6949734a3f0724a799579 /contrib/btree_gist/btree_utils_num.c | |
parent | 921d749bd4c34c3349f1c254d5faa2f1cec03911 (diff) | |
download | postgresql-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.c | 23 |
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 ); } - } |