diff options
Diffstat (limited to 'contrib/intarray/_int.c')
-rw-r--r-- | contrib/intarray/_int.c | 310 |
1 files changed, 155 insertions, 155 deletions
diff --git a/contrib/intarray/_int.c b/contrib/intarray/_int.c index 35ee7a659e2..ba91a0eba4a 100644 --- a/contrib/intarray/_int.c +++ b/contrib/intarray/_int.c @@ -33,8 +33,8 @@ /* dimension of array */ #define NDIM 1 -/* - * flags for gist__int_ops, use ArrayType->flags +/* + * flags for gist__int_ops, use ArrayType->flags * which is unused (see array.h) */ #define LEAFKEY (1<<31) @@ -112,7 +112,7 @@ printarr(ArrayType *a, int num) sprintf(cur, "%d ", d[l]); cur = strchr(cur, '\0'); } - elog(NOTICE, "\t\t%s", bbb); + elog(DEBUG3, "\t\t%s", bbb); } static void printbitvec(BITVEC bv) @@ -123,7 +123,7 @@ printbitvec(BITVEC bv) str[SIGLENBIT] = '\0'; LOOPBIT(str[i] = (GETBIT(bv, i)) ? '1' : '0'); - elog(NOTICE, "BV: %s", str); + elog(DEBUG3, "BV: %s", str); } #endif @@ -234,7 +234,7 @@ static void rt__intbig_size(ArrayType *a, float *sz); /***************************************************************************** - * Boolean Search + * Boolean Search *****************************************************************************/ #define BooleanSearchStrategy 20 @@ -261,17 +261,17 @@ typedef struct { PG_FUNCTION_INFO_V1(bqarr_in); PG_FUNCTION_INFO_V1(bqarr_out); -Datum bqarr_in(PG_FUNCTION_ARGS); +Datum bqarr_in(PG_FUNCTION_ARGS); Datum bqarr_out(PG_FUNCTION_ARGS); - + PG_FUNCTION_INFO_V1(boolop); -Datum boolop(PG_FUNCTION_ARGS); +Datum boolop(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(rboolop); -Datum rboolop(PG_FUNCTION_ARGS); +Datum rboolop(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(querytree); -Datum querytree(PG_FUNCTION_ARGS); +Datum querytree(PG_FUNCTION_ARGS); static bool signconsistent( QUERYTYPE *query, BITVEC sign, bool leaf ); static bool execconsistent( QUERYTYPE *query, ArrayType *array, bool leaf ); @@ -294,10 +294,10 @@ g_int_consistent(PG_FUNCTION_ARGS) { bool retval; if ( strategy == BooleanSearchStrategy ) - PG_RETURN_BOOL(execconsistent( (QUERYTYPE*)query, + PG_RETURN_BOOL(execconsistent( (QUERYTYPE*)query, (ArrayType *) DatumGetPointer(entry->key), ISLEAFKEY( (ArrayType *) DatumGetPointer(entry->key) ) ) ); - + /* XXX are we sure it's safe to scribble on the query object here? */ /* XXX what about toasted input? */ /* sort query for fast search, key is already sorted */ @@ -317,10 +317,10 @@ g_int_consistent(PG_FUNCTION_ARGS) { query); break; case RTContainedByStrategyNumber: - if ( GIST_LEAF(entry) ) + if ( GIST_LEAF(entry) ) retval = inner_int_contains(query, (ArrayType *) DatumGetPointer(entry->key) ); - else + else retval = inner_int_overlap((ArrayType *) DatumGetPointer(entry->key), query); break; @@ -334,9 +334,9 @@ Datum g_int_union(PG_FUNCTION_ARGS) { PG_RETURN_POINTER( _int_common_union( - (bytea *) PG_GETARG_POINTER(0), - (int *) PG_GETARG_POINTER(1), - inner_int_union + (bytea *) PG_GETARG_POINTER(0), + (int *) PG_GETARG_POINTER(1), + inner_int_union ) ); } @@ -371,10 +371,10 @@ g_int_compress(PG_FUNCTION_ARGS) if ( r != (ArrayType*)DatumGetPointer(entry->key) ) pfree(r); PG_RETURN_POINTER(entry); - } + } if ( (len=ARRNELEMS(r)) >= 2 * MAXNUMRANGE) { /* compress */ - if ( r == (ArrayType*)DatumGetPointer( entry->key) ) + if ( r == (ArrayType*)DatumGetPointer( entry->key) ) r = (ArrayType *) PG_DETOAST_DATUM_COPY(entry->key); r = resize_intArrayType(r, 2 * (len)); @@ -434,11 +434,11 @@ g_int_decompress(PG_FUNCTION_ARGS) if (lenin < 2 * MAXNUMRANGE || ISLEAFKEY( in ) ) { /* not comressed value */ if ( in != (ArrayType *) DatumGetPointer(entry->key)) { retval = palloc(sizeof(GISTENTRY)); - gistentryinit(*retval, PointerGetDatum(in), + gistentryinit(*retval, PointerGetDatum(in), entry->rel, entry->page, entry->offset, VARSIZE(in), FALSE); PG_RETURN_POINTER(retval); - } + } PG_RETURN_POINTER(entry); } @@ -456,7 +456,7 @@ g_int_decompress(PG_FUNCTION_ARGS) if (in != (ArrayType *) DatumGetPointer(entry->key)) pfree(in); retval = palloc(sizeof(GISTENTRY)); - gistentryinit(*retval, PointerGetDatum(r), + gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page, entry->offset, VARSIZE(r), FALSE); PG_RETURN_POINTER(retval); @@ -468,10 +468,10 @@ g_int_decompress(PG_FUNCTION_ARGS) Datum g_int_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), + 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 ) ); } @@ -481,12 +481,12 @@ Datum g_int_picksplit(PG_FUNCTION_ARGS) { PG_RETURN_POINTER( _int_common_picksplit( - (bytea *)PG_GETARG_POINTER(0), + (bytea *)PG_GETARG_POINTER(0), (GIST_SPLITVEC *)PG_GETARG_POINTER(1), inner_int_union, inner_int_inter, rt__int_size, - 0.01 + 0.01 ) ); } @@ -520,14 +520,14 @@ g_int_same(PG_FUNCTION_ARGS) PG_RETURN_POINTER(result); } -Datum +Datum _int_contained(PG_FUNCTION_ARGS) { - PG_RETURN_BOOL( DatumGetBool( - DirectFunctionCall2( - _int_contains, - PointerGetDatum(PG_GETARG_POINTER(1)), - PointerGetDatum(PG_GETARG_POINTER(0)) + PG_RETURN_BOOL( DatumGetBool( + DirectFunctionCall2( + _int_contains, + PointerGetDatum(PG_GETARG_POINTER(1)), + PointerGetDatum(PG_GETARG_POINTER(0)) ) )); } @@ -570,7 +570,7 @@ inner_int_contains(ArrayType *a, ArrayType *b) db = ARRPTR(b); #ifdef GIST_DEBUG - elog(NOTICE, "contains %d %d", na, nb); + elog(DEBUG3, "contains %d %d", na, nb); #endif i = j = n = 0; @@ -593,14 +593,14 @@ inner_int_contains(ArrayType *a, ArrayType *b) * Operator class for R-tree indexing *****************************************************************************/ -Datum +Datum _int_different(PG_FUNCTION_ARGS) { - PG_RETURN_BOOL( ! DatumGetBool( - DirectFunctionCall2( - _int_same, - PointerGetDatum(PG_GETARG_POINTER(0)), - PointerGetDatum(PG_GETARG_POINTER(1)) + PG_RETURN_BOOL( ! DatumGetBool( + DirectFunctionCall2( + _int_same, + PointerGetDatum(PG_GETARG_POINTER(0)), + PointerGetDatum(PG_GETARG_POINTER(1)) ) )); } @@ -690,7 +690,7 @@ inner_int_overlap(ArrayType *a, ArrayType *b) db = ARRPTR(b); #ifdef GIST_DEBUG - elog(NOTICE, "g_int_overlap"); + elog(DEBUG3, "g_int_overlap"); #endif i = j = 0; @@ -1030,7 +1030,7 @@ rt__intbig_size(ArrayType *a, float *sz) GETBITBYTE(bv,7) ; bv = (BITVECP) ( ((char*)bv) + 1 ); ); - + *sz = (float) len; return; } @@ -1116,19 +1116,19 @@ g_intbig_compress(PG_FUNCTION_ARGS) in = NULL; if (!entry->leafkey) { - LOOPBYTE( + 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), + gistentryinit(*retval, PointerGetDatum(r), entry->rel, entry->page, entry->offset, VARSIZE(r), FALSE); PG_RETURN_POINTER( retval ); - } + } PG_RETURN_POINTER( entry ); } @@ -1148,17 +1148,17 @@ g_intbig_compress(PG_FUNCTION_ARGS) ARRPTR(in), ARRNELEMS(in)); - LOOPBYTE( + 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); @@ -1182,7 +1182,7 @@ g_intbig_decompress(PG_FUNCTION_ARGS) retval = palloc(sizeof(GISTENTRY)); - gistentryinit(*retval, PointerGetDatum(key), + gistentryinit(*retval, PointerGetDatum(key), entry->rel, entry->page, entry->offset, (key) ? VARSIZE(key) : 0, FALSE); PG_RETURN_POINTER( retval ); } @@ -1192,9 +1192,9 @@ g_intbig_decompress(PG_FUNCTION_ARGS) retval = palloc(sizeof(GISTENTRY)); newkey = new_intArrayType(SIGLENINT); - MemSet( (void*)ARRPTR(newkey), 0xff, SIGLEN ); + MemSet( (void*)ARRPTR(newkey), 0xff, SIGLEN ); - gistentryinit(*retval, PointerGetDatum(newkey), + gistentryinit(*retval, PointerGetDatum(newkey), entry->rel, entry->page, entry->offset, VARSIZE(newkey), FALSE); PG_RETURN_POINTER( retval ); } @@ -1205,7 +1205,7 @@ Datum g_intbig_picksplit(PG_FUNCTION_ARGS) { PG_RETURN_POINTER( _int_common_picksplit( - (bytea *)PG_GETARG_POINTER(0), + (bytea *)PG_GETARG_POINTER(0), (GIST_SPLITVEC *)PG_GETARG_POINTER(1), _intbig_union, _intbig_inter, @@ -1217,37 +1217,37 @@ g_intbig_picksplit(PG_FUNCTION_ARGS) Datum g_intbig_union(PG_FUNCTION_ARGS) { - PG_RETURN_POINTER( _int_common_union( - (bytea *) PG_GETARG_POINTER(0), - (int *) PG_GETARG_POINTER(1), - _intbig_union - ) ); + PG_RETURN_POINTER( _int_common_union( + (bytea *) PG_GETARG_POINTER(0), + (int *) PG_GETARG_POINTER(1), + _intbig_union + ) ); } 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), + 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); + 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; if ( strategy == BooleanSearchStrategy ) - PG_RETURN_BOOL(signconsistent( (QUERYTYPE*)query, + PG_RETURN_BOOL(signconsistent( (QUERYTYPE*)query, SIGPTR((ArrayType *) DatumGetPointer(entry->key)), false ) ); - + /* XXX what about toasted input? */ if (ARRISVOID(query)) return FALSE; @@ -1293,7 +1293,7 @@ _int_common_union(bytea *entryvec, int *sizep, formarray unionf) ArrayType *tmp; #ifdef GIST_DEBUG - elog(NOTICE, "_int_common_union in"); + elog(DEBUG3, "_int_common_union in"); #endif numranges = (VARSIZE(entryvec) - VARHDRSZ) / sizeof(GISTENTRY); @@ -1314,12 +1314,12 @@ _int_common_union(bytea *entryvec, int *sizep, formarray unionf) { pfree(out); #ifdef GIST_DEBUG - elog(NOTICE, "_int_common_union out1"); + elog(DEBUG3, "_int_common_union out1"); #endif return NULL; } #ifdef GIST_DEBUG - elog(NOTICE, "_int_common_union out"); + elog(DEBUG3, "_int_common_union out"); #endif return (out); @@ -1339,7 +1339,7 @@ _int_common_penalty(GISTENTRY *origentry, GISTENTRY *newentry, float *result, tmp2; #ifdef GIST_DEBUG - elog(NOTICE, "penalty"); + elog(DEBUG3, "penalty"); #endif ud = (*unionf) ((ArrayType *) DatumGetPointer(origentry->key), (ArrayType *) DatumGetPointer(newentry->key)); @@ -1349,7 +1349,7 @@ _int_common_penalty(GISTENTRY *origentry, GISTENTRY *newentry, float *result, pfree(ud); #ifdef GIST_DEBUG - elog(NOTICE, "--penalty\t%g", *result); + elog(DEBUG3, "--penalty\t%g", *result); #endif return (result); @@ -1360,7 +1360,7 @@ typedef struct { float cost; } SPLITCOST; -static int +static int comparecost( const void *a, const void *b ) { if ( ((SPLITCOST*)a)->cost == ((SPLITCOST*)b)->cost ) return 0; @@ -1408,7 +1408,7 @@ _int_common_picksplit(bytea *entryvec, SPLITCOST *costvector; #ifdef GIST_DEBUG - elog(NOTICE, "--------picksplit %d", (VARSIZE(entryvec) - VARHDRSZ) / sizeof(GISTENTRY)); + elog(DEBUG3, "--------picksplit %d", (VARSIZE(entryvec) - VARHDRSZ) / sizeof(GISTENTRY)); #endif maxoff = ((VARSIZE(entryvec) - VARHDRSZ) / sizeof(GISTENTRY)) - 2; @@ -1471,7 +1471,7 @@ _int_common_picksplit(bytea *entryvec, maxoff = OffsetNumberNext(maxoff); /* - * sort entries + * sort entries */ costvector=(SPLITCOST*)palloc( sizeof(SPLITCOST)*maxoff ); for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i)) { @@ -1486,7 +1486,7 @@ _int_common_picksplit(bytea *entryvec, costvector[i-1].cost = abs( (size_alpha - size_l) - (size_beta - size_r) ); } qsort( (void*)costvector, maxoff, sizeof(SPLITCOST), comparecost ); - + /* * Now split up the regions between the two seeds. An important * property of this split algorithm is that the split vector v has the @@ -1499,7 +1499,7 @@ _int_common_picksplit(bytea *entryvec, * tuples and i == maxoff + 1. */ - + for (j = 0; j < maxoff; j++) { i = costvector[j].pos; @@ -1562,13 +1562,13 @@ _int_common_picksplit(bytea *entryvec, v->spl_rdatum = PointerGetDatum(datum_r); #ifdef GIST_DEBUG - elog(NOTICE, "--------ENDpicksplit %d %d", v->spl_nleft, v->spl_nright); + elog(DEBUG3, "--------ENDpicksplit %d %d", v->spl_nleft, v->spl_nright); #endif return v; } /***************************************************************************** - * BoolSearch + * BoolSearch *****************************************************************************/ @@ -1607,7 +1607,7 @@ typedef struct { /* * get token from query string */ -static int4 +static int4 gettoken( WORKSTATE* state, int4* val ) { char nnn[16], *curnnn; @@ -1616,7 +1616,7 @@ gettoken( WORKSTATE* state, int4* val ) { switch(state->state) { case WAITOPERAND: curnnn=nnn; - if ( (*(state->buf)>='0' && *(state->buf)<='9') || + if ( (*(state->buf)>='0' && *(state->buf)<='9') || *(state->buf)=='-' ) { state->state = WAITENDOPERAND; *curnnn = *(state->buf); @@ -1629,7 +1629,7 @@ gettoken( WORKSTATE* state, int4* val ) { state->count++; (state->buf)++; return OPEN; - } else if ( *(state->buf) != ' ' ) + } else if ( *(state->buf) != ' ' ) return ERR; break; case WAITENDOPERAND: @@ -1640,7 +1640,7 @@ gettoken( WORKSTATE* state, int4* val ) { *curnnn = '\0'; *val=(int4)atoi( nnn ); state->state = WAITOPERATOR; - return ( state->count && *(state->buf) == '\0' ) + return ( state->count && *(state->buf) == '\0' ) ? ERR : VAL; } break; @@ -1648,7 +1648,7 @@ gettoken( WORKSTATE* state, int4* val ) { if ( *(state->buf) == '&' || *(state->buf) == '|' ) { state->state = WAITOPERAND; *val = (int4) *(state->buf); - (state->buf)++; + (state->buf)++; return OPR; } else if ( *(state->buf) == ')' ) { (state->buf)++; @@ -1659,11 +1659,11 @@ gettoken( WORKSTATE* state, int4* val ) { } else if ( *(state->buf) != ' ' ) return ERR; break; - default: + default: return ERR; break; - } - (state->buf)++; + } + (state->buf)++; } return END; } @@ -1686,7 +1686,7 @@ pushquery( WORKSTATE *state, int4 type, int4 val ) { /* * make polish notaion of query */ -static int4 +static int4 makepol(WORKSTATE *state) { int4 val,type; int4 stack[STACKDEPTH]; @@ -1696,7 +1696,7 @@ makepol(WORKSTATE *state) { switch(type) { case VAL: pushquery(state, type, val); - while ( lenstack && (stack[ lenstack-1 ] == (int4)'&' || + while ( lenstack && (stack[ lenstack-1 ] == (int4)'&' || stack[ lenstack-1 ] == (int4)'!') ) { lenstack--; pushquery(state, OPR, stack[ lenstack ]); @@ -1705,7 +1705,7 @@ makepol(WORKSTATE *state) { case OPR: if ( lenstack && val == (int4) '|' ) { pushquery(state, OPR, val); - } else { + } else { if ( lenstack == STACKDEPTH ) elog(ERROR,"Stack too short"); stack[ lenstack ] = val; @@ -1714,7 +1714,7 @@ makepol(WORKSTATE *state) { break; case OPEN: if ( makepol( state ) == ERR ) return ERR; - if ( lenstack && (stack[ lenstack-1 ] == (int4)'&' || + if ( lenstack && (stack[ lenstack-1 ] == (int4)'&' || stack[ lenstack-1 ] == (int4)'!') ) { lenstack--; pushquery(state, OPR, stack[ lenstack ]); @@ -1731,7 +1731,7 @@ makepol(WORKSTATE *state) { default: elog(ERROR,"Syntax error"); return ERR; - + } } @@ -1772,7 +1772,7 @@ checkcondition_arr( void *checkval, int4 val ) { static bool checkcondition_bit( void *checkval, int4 val ) { - return GETBIT( checkval, HASHVAL( val ) ); + return GETBIT( checkval, HASHVAL( val ) ); } /* @@ -1784,8 +1784,8 @@ execute( ITEM* curitem, void *checkval, bool calcnot, bool (*chkcond)(void *chec if ( curitem->type == VAL ) { return (*chkcond)( checkval, curitem->val ); } else if ( curitem->val == (int4)'!' ) { - return ( calcnot ) ? - ( ( execute(curitem - 1, checkval, calcnot, chkcond) ) ? false : true ) + return ( calcnot ) ? + ( ( execute(curitem - 1, checkval, calcnot, chkcond) ) ? false : true ) : true; } else if ( curitem->val == (int4)'&' ) { if ( execute(curitem + curitem->left, checkval, calcnot, chkcond) ) @@ -1799,35 +1799,35 @@ execute( ITEM* curitem, void *checkval, bool calcnot, bool (*chkcond)(void *chec return execute(curitem - 1, checkval, calcnot, chkcond); } return false; -} +} /* * signconsistent & execconsistent called by *_consistent */ -static bool +static bool signconsistent( QUERYTYPE *query, BITVEC sign, bool calcnot ) { - return execute( - GETQUERY(query) + query->size-1 , - (void*)sign, calcnot, - checkcondition_bit - ); + return execute( + GETQUERY(query) + query->size-1 , + (void*)sign, calcnot, + checkcondition_bit + ); } -static bool +static bool execconsistent( QUERYTYPE *query, ArrayType *array, bool calcnot ) { CHKVAL chkval; chkval.arrb = ARRPTR(array); chkval.arre = chkval.arrb + ARRNELEMS(array); - return execute( - GETQUERY(query) + query->size-1 , - (void*)&chkval, calcnot, - checkcondition_arr + return execute( + GETQUERY(query) + query->size-1 , + (void*)&chkval, calcnot, + checkcondition_arr ); } /* - * boolean operations + * boolean operations */ Datum rboolop(PG_FUNCTION_ARGS) { @@ -1844,7 +1844,7 @@ boolop(PG_FUNCTION_ARGS) { QUERYTYPE *query = ( QUERYTYPE * )PG_DETOAST_DATUM(PG_GETARG_POINTER(1)); CHKVAL chkval; bool result; - + if ( ARRISVOID( val ) ) { pfree(val); PG_FREE_IF_COPY(query,1); @@ -1854,10 +1854,10 @@ boolop(PG_FUNCTION_ARGS) { PREPAREARR(val); chkval.arrb = ARRPTR(val); chkval.arre = chkval.arrb + ARRNELEMS(val); - result = execute( - GETQUERY(query) + query->size-1 , - &chkval, true, - checkcondition_arr + result = execute( + GETQUERY(query) + query->size-1 , + &chkval, true, + checkcondition_arr ); pfree(val); @@ -1868,7 +1868,7 @@ boolop(PG_FUNCTION_ARGS) { static void findoprnd( ITEM *ptr, int4 *pos ) { #ifdef BS_DEBUG - elog(NOTICE, ( ptr[*pos].type == OPR ) ? + elog(DEBUG3, ( ptr[*pos].type == OPR ) ? "%d %c" : "%d %d ", *pos, ptr[*pos].val ); #endif if ( ptr[*pos].type == VAL ) { @@ -1880,7 +1880,7 @@ findoprnd( ITEM *ptr, int4 *pos ) { findoprnd( ptr, pos ); } else { ITEM *curitem = &ptr[*pos]; - int4 tmp = *pos; + int4 tmp = *pos; (*pos)--; findoprnd(ptr,pos); curitem->left = *pos - tmp; @@ -1914,7 +1914,7 @@ bqarr_in(PG_FUNCTION_ARGS) { /* make polish notation (postfix, but in reverse order) */ makepol( &state ); - if (!state.num) + if (!state.num) elog( ERROR,"Empty query"); commonlen = COMPUTESIZE(state.num); @@ -1924,26 +1924,26 @@ bqarr_in(PG_FUNCTION_ARGS) { ptr = GETQUERY(query); for(i=state.num-1; i>=0; i-- ) { - ptr[i].type = state.str->type; + ptr[i].type = state.str->type; ptr[i].val = state.str->val; tmp = state.str->next; pfree( state.str ); state.str = tmp; } - + pos = query->size-1; findoprnd( ptr, &pos ); #ifdef BS_DEBUG cur = pbuf; *cur = '\0'; for( i=0;i<query->size;i++ ) { - if ( ptr[i].type == OPR ) + if ( ptr[i].type == OPR ) sprintf(cur, "%c(%d) ", ptr[i].val, ptr[i].left); - else + else sprintf(cur, "%d ", ptr[i].val ); - cur = strchr(cur,'\0'); + cur = strchr(cur,'\0'); } - elog(NOTICE,"POR: %s", pbuf); + elog(DEBUG3,"POR: %s", pbuf); #endif PG_RETURN_POINTER( query ); @@ -1986,17 +1986,17 @@ infix(INFIX *in, bool first) { RESIZEBUF(in, 2); sprintf(in->cur, "( "); in->cur = strchr( in->cur, '\0' ); - } + } infix( in, isopr ); if ( isopr ) { RESIZEBUF(in, 2); sprintf(in->cur, " )"); in->cur = strchr( in->cur, '\0' ); - } + } } else { int4 op = in->curpol->val; INFIX nrm; - + in->curpol--; if ( op == (int4)'|' && ! first) { RESIZEBUF(in, 2); @@ -2007,10 +2007,10 @@ infix(INFIX *in, bool first) { nrm.curpol = in->curpol; nrm.buflen = 16; nrm.cur = nrm.buf = (char*)palloc( sizeof(char) * nrm.buflen ); - + /* get right operand */ infix( &nrm, false ); - + /* get & print left operand */ in->curpol = nrm.curpol; infix( in, false ); @@ -2036,13 +2036,13 @@ bqarr_out(PG_FUNCTION_ARGS) { INFIX nrm; if ( query->size == 0 ) - elog(ERROR,"Empty"); + elog(ERROR,"Empty"); nrm.curpol = GETQUERY(query) + query->size - 1; nrm.buflen = 32; nrm.cur = nrm.buf = (char*)palloc( sizeof(char) * nrm.buflen ); *(nrm.cur) = '\0'; infix( &nrm, true ); - + PG_FREE_IF_COPY(query,0); PG_RETURN_POINTER( nrm.buf ); } @@ -2054,16 +2054,16 @@ countdroptree( ITEM *q, int4 pos ) { } else if ( q[pos].val == (int4)'!' ) { return 1+countdroptree(q, pos-1); } else { - return 1 + countdroptree(q, pos-1) + countdroptree(q, pos + q[pos].left); - } + return 1 + countdroptree(q, pos-1) + countdroptree(q, pos + q[pos].left); + } } /* * common algorithm: - * result of all '!' will be = 'true', so + * result of all '!' will be = 'true', so * we can modify query tree for clearing */ -static int4 +static int4 shorterquery( ITEM *q, int4 len ) { int4 index,posnot,poscor; bool notisleft = false; @@ -2093,7 +2093,7 @@ shorterquery( ITEM *q, int4 len ) { if ( poscor == posnot+1 ) { notisleft = false; break; - } else if ( q[poscor].left + poscor == posnot ) { + } else if ( q[poscor].left + poscor == posnot ) { notisleft = true; break; } @@ -2104,9 +2104,9 @@ shorterquery( ITEM *q, int4 len ) { q[poscor-1].type=VAL; for(i=poscor+1;i<len;i++) if ( q[i].type == OPR && q[i].left + i <= poscor ) - q[i].left += drop - 2; - memcpy( (void*)&q[poscor-drop+1], - (void*)&q[poscor-1], + q[i].left += drop - 2; + memcpy( (void*)&q[poscor-drop+1], + (void*)&q[poscor-1], sizeof(ITEM) * ( len - (poscor-1) )); len -= drop - 2; } else if ( q[poscor].val == (int4)'|' ) { @@ -2116,16 +2116,16 @@ shorterquery( ITEM *q, int4 len ) { q[poscor].left=-1; for(i=poscor+1;i<len;i++) if ( q[i].type == OPR && q[i].left + i < poscor ) - q[i].left += drop - 2; - memcpy( (void*)&q[poscor-drop+1], - (void*)&q[poscor-1], + q[i].left += drop - 2; + memcpy( (void*)&q[poscor-drop+1], + (void*)&q[poscor-1], sizeof(ITEM) * ( len - (poscor-1) )); len -= drop - 2; } else { /* &-operator */ - if ( - (notisleft && q[poscor-1].type == OPR && + if ( + (notisleft && q[poscor-1].type == OPR && q[poscor-1].val == (int4)'!' ) || - (!notisleft && q[poscor+q[poscor].left].type == OPR && + (!notisleft && q[poscor+q[poscor].left].type == OPR && q[poscor+q[poscor].left].val == (int4)'!' ) ) { /* drop subtree */ drop = countdroptree(q, poscor); @@ -2134,26 +2134,26 @@ shorterquery( ITEM *q, int4 len ) { q[poscor].left=-1; for(i=poscor+1;i<len;i++) if ( q[i].type == OPR && q[i].left + i < poscor ) - q[i].left += drop - 2; - memcpy( (void*)&q[poscor-drop+1], - (void*)&q[poscor-1], + q[i].left += drop - 2; + memcpy( (void*)&q[poscor-drop+1], + (void*)&q[poscor-1], sizeof(ITEM) * ( len - (poscor-1) )); len -= drop - 2; } else { /* drop only operator */ - int4 subtreepos = ( notisleft ) ? + int4 subtreepos = ( notisleft ) ? poscor-1 : poscor+q[poscor].left; int4 subtreelen = countdroptree( q, subtreepos ); drop = countdroptree(q, poscor); for(i=poscor+1;i<len;i++) if ( q[i].type == OPR && q[i].left + i < poscor ) - q[i].left += drop - subtreelen; - memcpy( (void*)&q[ subtreepos+1 ], - (void*)&q[poscor+1], - sizeof(ITEM)*( len - (poscor-1) ) ); - memcpy( (void*)&q[ poscor-drop+1 ], - (void*)&q[subtreepos-subtreelen+1], + q[i].left += drop - subtreelen; + memcpy( (void*)&q[ subtreepos+1 ], + (void*)&q[poscor+1], + sizeof(ITEM)*( len - (poscor-1) ) ); + memcpy( (void*)&q[ poscor-drop+1 ], + (void*)&q[subtreepos-subtreelen+1], sizeof(ITEM)*( len - (drop-subtreelen) ) ); - len -= drop - subtreelen; + len -= drop - subtreelen; } } } while( index ); |