From 6f2182fe18b983d4906cd0067da47310491ce8f4 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 11 Jun 2001 02:31:25 +0000 Subject: [PATCH] contrib/intarray updates from Oleg Bartunov: it's reimplemented to use function interface version 1 and special treating of degenerated signatures. --- contrib/intarray/_int.c | 401 ++++++++++++++++++++++++++-------------- 1 file changed, 263 insertions(+), 138 deletions(-) diff --git a/contrib/intarray/_int.c b/contrib/intarray/_int.c index dc49355739..56d15dac01 100644 --- a/contrib/intarray/_int.c +++ b/contrib/intarray/_int.c @@ -41,13 +41,13 @@ #define SORT(x) \ do { \ if ( ARRNELEMS( x ) > 1 ) \ - isort( (void*)ARRPTR( x ), ARRNELEMS( x ) ); \ + isort( ARRPTR( x ), ARRNELEMS( x ) ); \ } while(0) #define PREPAREARR(x) \ do { \ if ( ARRNELEMS( x ) > 1 ) \ - if ( isort( (void*)ARRPTR( x ), ARRNELEMS( x ) ) ) \ + if ( isort( ARRPTR( x ), ARRNELEMS( x ) ) ) \ x = _int_unique( x ); \ } while(0) @@ -126,7 +126,7 @@ typedef void (*formfloat) (ArrayType *, float *); /* ** usefull function */ -static bool isort(int *a, const int len); +static bool isort(int4 *a, const int len); static ArrayType *new_intArrayType(int num); static ArrayType *copy_intArrayType(ArrayType *a); static ArrayType *resize_intArrayType(ArrayType *a, int num); @@ -152,48 +152,72 @@ static ArrayType *_int_common_union(bytea *entryvec, /* ** GiST support methods */ -bool g_int_consistent(GISTENTRY *entry, ArrayType *query, StrategyNumber strategy); -GISTENTRY *g_int_compress(GISTENTRY *entry); -GISTENTRY *g_int_decompress(GISTENTRY *entry); -float *g_int_penalty(GISTENTRY *origentry, GISTENTRY *newentry, float *result); -GIST_SPLITVEC *g_int_picksplit(bytea *entryvec, GIST_SPLITVEC *v); -ArrayType *g_int_union(bytea *entryvec, int *sizep); -bool *g_int_same(ArrayType *b1, ArrayType *b2, bool *result); +PG_FUNCTION_INFO_V1( g_int_consistent ); +PG_FUNCTION_INFO_V1( g_int_compress ); +PG_FUNCTION_INFO_V1( g_int_decompress ); +PG_FUNCTION_INFO_V1( g_int_penalty ); +PG_FUNCTION_INFO_V1( g_int_picksplit ); +PG_FUNCTION_INFO_V1( g_int_union ); +PG_FUNCTION_INFO_V1( g_int_same ); + +Datum g_int_consistent(PG_FUNCTION_ARGS); +Datum g_int_compress(PG_FUNCTION_ARGS); +Datum g_int_decompress(PG_FUNCTION_ARGS); +Datum g_int_penalty(PG_FUNCTION_ARGS); +Datum g_int_picksplit(PG_FUNCTION_ARGS); +Datum g_int_union(PG_FUNCTION_ARGS); +Datum g_int_same(PG_FUNCTION_ARGS); /* ** R-tree support functions */ -bool inner_int_contains(ArrayType *a, ArrayType *b); -bool inner_int_overlap(ArrayType *a, ArrayType *b); -ArrayType *inner_int_union(ArrayType *a, ArrayType *b); -ArrayType *inner_int_inter(ArrayType *a, ArrayType *b); - -bool _int_different(ArrayType *a, ArrayType *b); -bool _int_same(ArrayType *a, ArrayType *b); -bool _int_contains(ArrayType *a, ArrayType *b); -bool _int_contained(ArrayType *a, ArrayType *b); -bool _int_overlap(ArrayType *a, ArrayType *b); -ArrayType *_int_union(ArrayType *a, ArrayType *b); -ArrayType *_int_inter(ArrayType *a, ArrayType *b); -void rt__int_size(ArrayType *a, float *sz); +static bool inner_int_contains(ArrayType *a, ArrayType *b); +static bool inner_int_overlap(ArrayType *a, ArrayType *b); +static ArrayType *inner_int_union(ArrayType *a, ArrayType *b); +static ArrayType *inner_int_inter(ArrayType *a, ArrayType *b); +static void rt__int_size(ArrayType *a, float *sz); + +PG_FUNCTION_INFO_V1( _int_different ); +PG_FUNCTION_INFO_V1( _int_same ); +PG_FUNCTION_INFO_V1( _int_contains ); +PG_FUNCTION_INFO_V1( _int_contained ); +PG_FUNCTION_INFO_V1( _int_overlap ); +PG_FUNCTION_INFO_V1( _int_union ); +PG_FUNCTION_INFO_V1( _int_inter ); + +Datum _int_different(PG_FUNCTION_ARGS); +Datum _int_same(PG_FUNCTION_ARGS); +Datum _int_contains(PG_FUNCTION_ARGS); +Datum _int_contained(PG_FUNCTION_ARGS); +Datum _int_overlap(PG_FUNCTION_ARGS); +Datum _int_union(PG_FUNCTION_ARGS); +Datum _int_inter(PG_FUNCTION_ARGS); /* ** _intbig methods */ -bool g_intbig_consistent(GISTENTRY *entry, ArrayType *query, StrategyNumber strategy); -GISTENTRY *g_intbig_compress(GISTENTRY *entry); -GISTENTRY *g_intbig_decompress(GISTENTRY *entry); -float *g_intbig_penalty(GISTENTRY *origentry, GISTENTRY *newentry, float *result); -GIST_SPLITVEC *g_intbig_picksplit(bytea *entryvec, GIST_SPLITVEC *v); -ArrayType *g_intbig_union(bytea *entryvec, int *sizep); -bool *g_intbig_same(ArrayType *a, ArrayType *b, bool *result); +PG_FUNCTION_INFO_V1( g_intbig_consistent ); +PG_FUNCTION_INFO_V1( g_intbig_compress ); +PG_FUNCTION_INFO_V1( g_intbig_decompress ); +PG_FUNCTION_INFO_V1( g_intbig_penalty ); +PG_FUNCTION_INFO_V1( g_intbig_picksplit ); +PG_FUNCTION_INFO_V1( g_intbig_union ); +PG_FUNCTION_INFO_V1( g_intbig_same ); + +Datum g_intbig_consistent(PG_FUNCTION_ARGS); +Datum g_intbig_compress(PG_FUNCTION_ARGS); +Datum g_intbig_decompress(PG_FUNCTION_ARGS); +Datum g_intbig_penalty(PG_FUNCTION_ARGS); +Datum g_intbig_picksplit(PG_FUNCTION_ARGS); +Datum g_intbig_union(PG_FUNCTION_ARGS); +Datum g_intbig_same(PG_FUNCTION_ARGS); static bool _intbig_contains(ArrayType *a, ArrayType *b); static bool _intbig_overlap(ArrayType *a, ArrayType *b); static ArrayType *_intbig_union(ArrayType *a, ArrayType *b); -/*static ArrayType * _intbig_inter(ArrayType *a, ArrayType *b);*/ +static ArrayType * _intbig_inter(ArrayType *a, ArrayType *b); static void rt__intbig_size(ArrayType *a, float *sz); static void gensign(BITVEC sign, int *a, int len); @@ -207,11 +231,11 @@ static void gensign(BITVEC sign, int *a, int len); ** the predicate x op query == FALSE, where op is the oper ** corresponding to strategy in the pg_amop table. */ -bool -g_int_consistent(GISTENTRY *entry, - ArrayType *query, - StrategyNumber strategy) -{ +Datum +g_int_consistent(PG_FUNCTION_ARGS) { + GISTENTRY *entry = (GISTENTRY *)PG_GETARG_POINTER(0); + ArrayType *query = ( ArrayType * )PG_GETARG_POINTER(1); + StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2); bool retval; /* sort query for fast search, key is already sorted */ @@ -239,21 +263,26 @@ g_int_consistent(GISTENTRY *entry, default: retval = FALSE; } - return (retval); + PG_RETURN_BOOL(retval); } -ArrayType * -g_int_union(bytea *entryvec, int *sizep) +Datum +g_int_union(PG_FUNCTION_ARGS) { - return _int_common_union(entryvec, sizep, inner_int_union); + PG_RETURN_POINTER( _int_common_union( + (bytea *) PG_GETARG_POINTER(0), + (int *) PG_GETARG_POINTER(1), + inner_int_union + ) ); } /* ** GiST Compress and Decompress methods */ -GISTENTRY * -g_int_compress(GISTENTRY *entry) +Datum +g_int_compress(PG_FUNCTION_ARGS) { + GISTENTRY *entry = (GISTENTRY *)PG_GETARG_POINTER(0); GISTENTRY *retval; ArrayType *r; int len; @@ -280,7 +309,7 @@ g_int_compress(GISTENTRY *entry) gistentryinit(*retval, (Datum) 0, entry->rel, entry->page, entry->offset, 0, FALSE); - return (retval); + PG_RETURN_POINTER(retval); } if (entry->leafkey) @@ -320,12 +349,13 @@ g_int_compress(GISTENTRY *entry) gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page, entry->offset, VARSIZE(r), FALSE); - return (retval); + PG_RETURN_POINTER(retval); } -GISTENTRY * -g_int_decompress(GISTENTRY *entry) +Datum +g_int_decompress(PG_FUNCTION_ARGS) { + GISTENTRY *entry = (GISTENTRY *)PG_GETARG_POINTER(0); GISTENTRY *retval; ArrayType *r; int *dr, @@ -352,7 +382,7 @@ g_int_decompress(GISTENTRY *entry) #ifdef GIST_DEBUG elog(NOTICE, "DECOMP IN: NULL"); #endif - return (retval); + PG_RETURN_POINTER(retval); } @@ -363,7 +393,7 @@ g_int_decompress(GISTENTRY *entry) { /* not comressed value */ /* sometimes strange bytesize */ gistentryinit(*entry, PointerGetDatum(in), entry->rel, entry->page, entry->offset, VARSIZE(in), FALSE); - return (entry); + PG_RETURN_POINTER(entry); } #ifdef GIST_DEBUG @@ -386,28 +416,35 @@ g_int_decompress(GISTENTRY *entry) gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page, entry->offset, VARSIZE(r), FALSE); - return (retval); + PG_RETURN_POINTER(retval); } /* ** The GiST Penalty method for _intments */ -float * -g_int_penalty(GISTENTRY *origentry, GISTENTRY *newentry, float *result) +Datum +g_int_penalty(PG_FUNCTION_ARGS) { - return _int_common_penalty(origentry, newentry, result, inner_int_union, rt__int_size); + PG_RETURN_POINTER( _int_common_penalty( + (GISTENTRY *)PG_GETARG_POINTER(0), + (GISTENTRY *)PG_GETARG_POINTER(1), + (float *) PG_GETARG_POINTER(2), + inner_int_union, rt__int_size + ) ); } -GIST_SPLITVEC * -g_int_picksplit(bytea *entryvec, - GIST_SPLITVEC *v) +Datum +g_int_picksplit(PG_FUNCTION_ARGS) { - return _int_common_picksplit(entryvec, v, - inner_int_union, - inner_int_inter, - rt__int_size, - 1e-8); + PG_RETURN_POINTER( _int_common_picksplit( + (bytea *)PG_GETARG_POINTER(0), + (GIST_SPLITVEC *)PG_GETARG_POINTER(1), + inner_int_union, + inner_int_inter, + rt__int_size, + 1e-8 + ) ); } /* @@ -415,26 +452,38 @@ g_int_picksplit(bytea *entryvec, */ -bool * -g_int_same(ArrayType *b1, ArrayType *b2, bool *result) +Datum +g_int_same(PG_FUNCTION_ARGS) { - if (_int_same(b1, b2)) - *result = TRUE; - else - *result = FALSE; + bool *result = (bool *)PG_GETARG_POINTER(2); + *result = DatumGetBool( + DirectFunctionCall2( + _int_same, + PointerGetDatum(PG_GETARG_POINTER(0)), + PointerGetDatum(PG_GETARG_POINTER(1)) + ) + ); - return (result); + PG_RETURN_POINTER(result); } -bool -_int_contained(ArrayType *a, ArrayType *b) +Datum +_int_contained(PG_FUNCTION_ARGS) { - return (_int_contains(b, a)); + PG_RETURN_BOOL( DatumGetBool( + DirectFunctionCall2( + _int_contains, + PointerGetDatum(PG_GETARG_POINTER(1)), + PointerGetDatum(PG_GETARG_POINTER(0)) + ) + )); } -bool -_int_contains(ArrayType *a, ArrayType *b) +Datum +_int_contains(PG_FUNCTION_ARGS) { + ArrayType *a = (ArrayType *)PG_GETARG_POINTER(0); + ArrayType *b = (ArrayType *)PG_GETARG_POINTER(1); bool res; ArrayType *an, *bn; @@ -451,10 +500,10 @@ _int_contains(ArrayType *a, ArrayType *b) res = inner_int_contains(an, bn); pfree(an); pfree(bn); - return res; + PG_RETURN_BOOL( res ); } -bool +static bool inner_int_contains(ArrayType *a, ArrayType *b) { int na, @@ -497,15 +546,23 @@ inner_int_contains(ArrayType *a, ArrayType *b) * Operator class for R-tree indexing *****************************************************************************/ -bool -_int_different(ArrayType *a, ArrayType *b) +Datum +_int_different(PG_FUNCTION_ARGS) { - return (!_int_same(a, b)); + PG_RETURN_BOOL( ! DatumGetBool( + DirectFunctionCall2( + _int_same, + PointerGetDatum(PG_GETARG_POINTER(0)), + PointerGetDatum(PG_GETARG_POINTER(1)) + ) + )); } -bool -_int_same(ArrayType *a, ArrayType *b) +Datum +_int_same(PG_FUNCTION_ARGS) { + ArrayType *a = (ArrayType *)PG_GETARG_POINTER(0); + ArrayType *b = (ArrayType *)PG_GETARG_POINTER(1); int na, nb; int n; @@ -546,14 +603,16 @@ _int_same(ArrayType *a, ArrayType *b) pfree(an); pfree(bn); - return result; + PG_RETURN_BOOL(result); } /* _int_overlap -- does a overlap b? */ -bool -_int_overlap(ArrayType *a, ArrayType *b) +Datum +_int_overlap(PG_FUNCTION_ARGS) { + ArrayType *a = (ArrayType *)PG_GETARG_POINTER(0); + ArrayType *b = (ArrayType *)PG_GETARG_POINTER(1); bool result; ArrayType *an, *bn; @@ -572,10 +631,10 @@ _int_overlap(ArrayType *a, ArrayType *b) pfree(an); pfree(bn); - return result; + PG_RETURN_BOOL( result ); } -bool +static bool inner_int_overlap(ArrayType *a, ArrayType *b) { int na, @@ -609,9 +668,11 @@ inner_int_overlap(ArrayType *a, ArrayType *b) return FALSE; } -ArrayType * -_int_union(ArrayType *a, ArrayType *b) +Datum +_int_union(PG_FUNCTION_ARGS) { + ArrayType *a = (ArrayType *)PG_GETARG_POINTER(0); + ArrayType *b = (ArrayType *)PG_GETARG_POINTER(1); ArrayType *result; ArrayType *an, *bn; @@ -631,10 +692,10 @@ _int_union(ArrayType *a, ArrayType *b) if (bn) pfree(bn); - return result; + PG_RETURN_POINTER( result ); } -ArrayType * +static ArrayType * inner_int_union(ArrayType *a, ArrayType *b) { ArrayType *r = NULL; @@ -691,15 +752,17 @@ inner_int_union(ArrayType *a, ArrayType *b) } -ArrayType * -_int_inter(ArrayType *a, ArrayType *b) +Datum +_int_inter(PG_FUNCTION_ARGS) { + ArrayType *a = (ArrayType *)PG_GETARG_POINTER(0); + ArrayType *b = (ArrayType *)PG_GETARG_POINTER(1); ArrayType *result; ArrayType *an, *bn; if (ARRISNULL(a) || ARRISNULL(b)) - return new_intArrayType(0); + PG_RETURN_POINTER(new_intArrayType(0)); an = copy_intArrayType(a); bn = copy_intArrayType(b); @@ -712,10 +775,10 @@ _int_inter(ArrayType *a, ArrayType *b) pfree(an); pfree(bn); - return result; + PG_RETURN_POINTER( result ); } -ArrayType * +static ArrayType * inner_int_inter(ArrayType *a, ArrayType *b) { ArrayType *r; @@ -764,7 +827,7 @@ inner_int_inter(ArrayType *a, ArrayType *b) return resize_intArrayType(r, dr - ARRPTR(r)); } -void +static void rt__int_size(ArrayType *a, float *size) { if (ARRISNULL(a)) @@ -782,11 +845,11 @@ rt__int_size(ArrayType *a, float *size) /* len >= 2 */ static bool -isort(int *a, int len) +isort(int4 *a, int len) { - int tmp, + int4 tmp, index; - int *cur, + int4 *cur, *end; bool r = FALSE; @@ -1006,9 +1069,12 @@ _intbig_inter(ArrayType *a, ArrayType *b) return r; } -bool * -g_intbig_same(ArrayType *a, ArrayType *b, bool *result) +Datum +g_intbig_same(PG_FUNCTION_ARGS) { + ArrayType *a = (ArrayType *)PG_GETARG_POINTER(0); + ArrayType *b = (ArrayType *)PG_GETARG_POINTER(1); + bool *result = (bool *)PG_GETARG_POINTER(2); BITVECP da, db; int i; @@ -1016,7 +1082,7 @@ g_intbig_same(ArrayType *a, ArrayType *b, bool *result) if (ARRISNULL(a) || ARRISNULL(b)) { *result = (ARRISNULL(a) && ARRISNULL(b)) ? TRUE : FALSE; - return result; + PG_RETURN_POINTER( result ); } da = SIGPTR(a); @@ -1026,28 +1092,46 @@ g_intbig_same(ArrayType *a, ArrayType *b, bool *result) if (da[i] != db[i]) { *result = FALSE; - return result; + PG_RETURN_POINTER( result ); } ); *result = TRUE; - return result; + PG_RETURN_POINTER( result ); } -GISTENTRY * -g_intbig_compress(GISTENTRY *entry) +Datum +g_intbig_compress(PG_FUNCTION_ARGS) { + GISTENTRY *entry = (GISTENTRY *)PG_GETARG_POINTER(0); GISTENTRY *retval; ArrayType *r, *in; + bool maycompress = true; + int i; if (DatumGetPointer(entry->key) != NULL) in = (ArrayType *) PG_DETOAST_DATUM(entry->key); else in = NULL; - if (!entry->leafkey) - return entry; + if (!entry->leafkey) { + if ( ! ARRISNULL(in) ) { + LOOPBYTE( + if ( ( ((char*)ARRPTR(in))[i] & 0xff ) != 0xff ) { + maycompress = false; + break; + } + ); + if ( maycompress ) { + retval = palloc(sizeof(GISTENTRY)); + r = new_intArrayType(1); + gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page, entry->offset, VARSIZE(r), FALSE); + PG_RETURN_POINTER( retval ); + } + } + PG_RETURN_POINTER( entry ); + } retval = palloc(sizeof(GISTENTRY)); @@ -1057,7 +1141,7 @@ g_intbig_compress(GISTENTRY *entry) if (in != (ArrayType *) DatumGetPointer(entry->key)) pfree(in); gistentryinit(*retval, (Datum) 0, entry->rel, entry->page, entry->offset, 0, FALSE); - return (retval); + PG_RETURN_POINTER (retval); } r = new_intArrayType(SIGLENINT); @@ -1065,60 +1149,101 @@ g_intbig_compress(GISTENTRY *entry) ARRPTR(in), ARRNELEMS(in)); + LOOPBYTE( + if( ( ((char*)ARRPTR(in))[i] & 0xff ) != 0xff ) { + maycompress = false; + break; + } + ); + + if ( maycompress ) { + pfree(r); + r = new_intArrayType(1); + } + gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page, entry->offset, VARSIZE(r), FALSE); if (in) - if (in != (ArrayType *) DatumGetPointer(entry->key)) + if ( in != (ArrayType *) DatumGetPointer(entry->key)) pfree(in); - return (retval); + PG_RETURN_POINTER (retval); } -GISTENTRY * -g_intbig_decompress(GISTENTRY *entry) +Datum +g_intbig_decompress(PG_FUNCTION_ARGS) { + GISTENTRY *entry = (GISTENTRY *)PG_GETARG_POINTER(0); ArrayType *key; - key = (ArrayType *) PG_DETOAST_DATUM(entry->key); - if (key != (ArrayType *) DatumGetPointer(entry->key)) + if ( DatumGetPointer(entry->key) != NULL ) + key = (ArrayType *) PG_DETOAST_DATUM(entry->key); + else + key = NULL; + + if ( key != (ArrayType *) DatumGetPointer(entry->key)) { GISTENTRY *retval; retval = palloc(sizeof(GISTENTRY)); - gistentryinit(*retval, PointerGetDatum(key), entry->rel, entry->page, entry->offset, VARSIZE(key), FALSE); - return retval; + gistentryinit(*retval, PointerGetDatum(key), entry->rel, entry->page, entry->offset, (key) ? VARSIZE(key) : 0, FALSE); + PG_RETURN_POINTER( retval ); } - return entry; -} + if ( ! ARRISNULL(key) ) + if ( ARRNELEMS(key) == 1 ) { + GISTENTRY *retval; + ArrayType *newkey; -GIST_SPLITVEC * -g_intbig_picksplit(bytea *entryvec, GIST_SPLITVEC *v) -{ - return _int_common_picksplit(entryvec, v, - _intbig_union, - _intbig_inter, - rt__intbig_size, - 1.0); + retval = palloc(sizeof(GISTENTRY)); + newkey = new_intArrayType(SIGLENINT); + MemSet( (void*)ARRPTR(newkey), 0xff, SIGLEN ); + gistentryinit(*retval, PointerGetDatum(newkey), entry->rel, entry->page, entry->offset, VARSIZE(newkey), FALSE); + PG_RETURN_POINTER( retval ); + } + PG_RETURN_POINTER( entry ); } -ArrayType * -g_intbig_union(bytea *entryvec, int *sizep) +Datum +g_intbig_picksplit(PG_FUNCTION_ARGS) { - return _int_common_union(entryvec, sizep, _intbig_union); + PG_RETURN_POINTER( _int_common_picksplit( + (bytea *)PG_GETARG_POINTER(0), + (GIST_SPLITVEC *)PG_GETARG_POINTER(1), + _intbig_union, + _intbig_inter, + rt__intbig_size, + 1.0 + ) ); } -float * -g_intbig_penalty(GISTENTRY *origentry, GISTENTRY *newentry, float *result) +Datum +g_intbig_union(PG_FUNCTION_ARGS) { - _int_common_penalty(origentry, newentry, result, _intbig_union, rt__intbig_size); - return result; + PG_RETURN_POINTER( _int_common_union( + (bytea *) PG_GETARG_POINTER(0), + (int *) PG_GETARG_POINTER(1), + _intbig_union + ) ); } -bool -g_intbig_consistent(GISTENTRY *entry, ArrayType *query, StrategyNumber strategy) +Datum +g_intbig_penalty(PG_FUNCTION_ARGS) { + PG_RETURN_POINTER( _int_common_penalty( + (GISTENTRY *)PG_GETARG_POINTER(0), + (GISTENTRY *)PG_GETARG_POINTER(1), + (float *) PG_GETARG_POINTER(2), + _intbig_union, rt__intbig_size + ) ); +} + +Datum +g_intbig_consistent(PG_FUNCTION_ARGS) { + GISTENTRY *entry = (GISTENTRY *)PG_GETARG_POINTER(0); + ArrayType *query = ( ArrayType * )PG_GETARG_POINTER(1); + StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2); bool retval; ArrayType *q; @@ -1147,7 +1272,7 @@ g_intbig_consistent(GISTENTRY *entry, ArrayType *query, StrategyNumber strategy) retval = FALSE; } pfree(q); - return (retval); + PG_RETURN_BOOL(retval); } /***************************************************************** @@ -1158,7 +1283,7 @@ g_intbig_consistent(GISTENTRY *entry, ArrayType *query, StrategyNumber strategy) ** The GiST Union method for _intments ** returns the minimal set that encloses all the entries in entryvec */ -ArrayType * +static ArrayType * _int_common_union(bytea *entryvec, int *sizep, formarray unionf) { int numranges, @@ -1202,7 +1327,7 @@ _int_common_union(bytea *entryvec, int *sizep, formarray unionf) * The GiST Penalty method for _intments * *****************************************/ -float * +static float * _int_common_penalty(GISTENTRY *origentry, GISTENTRY *newentry, float *result, formarray unionf, formfloat sizef) @@ -1232,7 +1357,7 @@ _int_common_penalty(GISTENTRY *origentry, GISTENTRY *newentry, float *result, ** The GiST PickSplit method for _intments ** We use Guttman's poly time split algorithm */ -GIST_SPLITVEC * +static GIST_SPLITVEC * _int_common_picksplit(bytea *entryvec, GIST_SPLITVEC *v, formarray unionf, -- GitLab