mirror of
https://github.com/postgres/postgres.git
synced 2025-04-22 23:02:54 +03:00
1 fix various comparing functions
2 implement gtsvector_out for use with gevel module (debug GiST indexes, http://www.sai.msu.su/~megera/postgres/gist/gevel/)
This commit is contained in:
parent
fd977434b3
commit
fb13881f42
@ -92,7 +92,9 @@ reset_dict(void)
|
|||||||
static int
|
static int
|
||||||
comparedict(const void *a, const void *b)
|
comparedict(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
return ((DictInfo *) a)->dict_id - ((DictInfo *) b)->dict_id;
|
if ( ((DictInfo *) a)->dict_id == ((DictInfo *) b)->dict_id )
|
||||||
|
return 0;
|
||||||
|
return ( ((DictInfo *) a)->dict_id < ((DictInfo *) b)->dict_id ) ? -1 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
DictInfo *
|
DictInfo *
|
||||||
|
@ -54,6 +54,7 @@ Datum gtsvector_picksplit(PG_FUNCTION_ARGS);
|
|||||||
GETBITBYTE(val,7) \
|
GETBITBYTE(val,7) \
|
||||||
)
|
)
|
||||||
|
|
||||||
|
static int4 sizebitvec(BITVECP sign);
|
||||||
|
|
||||||
Datum
|
Datum
|
||||||
gtsvector_in(PG_FUNCTION_ARGS)
|
gtsvector_in(PG_FUNCTION_ARGS)
|
||||||
@ -64,13 +65,31 @@ gtsvector_in(PG_FUNCTION_ARGS)
|
|||||||
PG_RETURN_DATUM(0);
|
PG_RETURN_DATUM(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define SINGOUTSTR "%d true bits, %d false bits"
|
||||||
|
#define ARROUTSTR "%d unique words"
|
||||||
|
#define EXTRALEN ( 2*13 )
|
||||||
|
|
||||||
|
static int outbuf_maxlen = 0;
|
||||||
|
|
||||||
Datum
|
Datum
|
||||||
gtsvector_out(PG_FUNCTION_ARGS)
|
gtsvector_out(PG_FUNCTION_ARGS)
|
||||||
{
|
{
|
||||||
ereport(ERROR,
|
GISTTYPE *key = (GISTTYPE *) DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_POINTER(0)));
|
||||||
(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
|
char *outbuf;
|
||||||
errmsg("gtsvector_out not implemented")));
|
|
||||||
PG_RETURN_DATUM(0);
|
if ( outbuf_maxlen==0 )
|
||||||
|
outbuf_maxlen = 2*EXTRALEN + Max( strlen(SINGOUTSTR), strlen(ARROUTSTR) ) + 1;
|
||||||
|
outbuf = palloc( outbuf_maxlen );
|
||||||
|
|
||||||
|
if ( ISARRKEY(key) )
|
||||||
|
sprintf( outbuf, ARROUTSTR, ARRNELEM(key) );
|
||||||
|
else {
|
||||||
|
int cnttrue = ( ISALLTRUE(key) ) ? SIGLENBIT : sizebitvec(GETSIGN(key));
|
||||||
|
sprintf( outbuf, SINGOUTSTR, cnttrue, SIGLENBIT - cnttrue );
|
||||||
|
}
|
||||||
|
|
||||||
|
PG_FREE_IF_COPY(key,0);
|
||||||
|
PG_RETURN_POINTER(outbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -386,7 +386,7 @@ static int
|
|||||||
compareDocR(const void *a, const void *b)
|
compareDocR(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
if (((DocRepresentation *) a)->pos == ((DocRepresentation *) b)->pos)
|
if (((DocRepresentation *) a)->pos == ((DocRepresentation *) b)->pos)
|
||||||
return 1;
|
return 0;
|
||||||
return (((DocRepresentation *) a)->pos > ((DocRepresentation *) b)->pos) ? 1 : -1;
|
return (((DocRepresentation *) a)->pos > ((DocRepresentation *) b)->pos) ? 1 : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -654,7 +654,7 @@ static int
|
|||||||
compareDocWord(const void *a, const void *b)
|
compareDocWord(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
if (((DocWord *) a)->pos == ((DocWord *) b)->pos)
|
if (((DocWord *) a)->pos == ((DocWord *) b)->pos)
|
||||||
return 1;
|
return 0;
|
||||||
return (((DocWord *) a)->pos > ((DocWord *) b)->pos) ? 1 : -1;
|
return (((DocWord *) a)->pos > ((DocWord *) b)->pos) ? 1 : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,7 +186,9 @@ reset_cfg(void)
|
|||||||
static int
|
static int
|
||||||
comparecfg(const void *a, const void *b)
|
comparecfg(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
return ((TSCfgInfo *) a)->id - ((TSCfgInfo *) b)->id;
|
if ( ((TSCfgInfo *) a)->id == ((TSCfgInfo *) b)->id )
|
||||||
|
return 0;
|
||||||
|
return ( ((TSCfgInfo *) a)->id < ((TSCfgInfo *) b)->id ) ? -1 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
TSCfgInfo *
|
TSCfgInfo *
|
||||||
|
@ -51,7 +51,7 @@ static int
|
|||||||
comparePos(const void *a, const void *b)
|
comparePos(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
if (WEP_GETPOS(*(WordEntryPos *) a) == WEP_GETPOS(*(WordEntryPos *) b))
|
if (WEP_GETPOS(*(WordEntryPos *) a) == WEP_GETPOS(*(WordEntryPos *) b))
|
||||||
return 1;
|
return 0;
|
||||||
return (WEP_GETPOS(*(WordEntryPos *) a)> WEP_GETPOS(*(WordEntryPos *) b)) ? 1 : -1;
|
return (WEP_GETPOS(*(WordEntryPos *) a)> WEP_GETPOS(*(WordEntryPos *) b)) ? 1 : -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +93,9 @@ reset_prs(void)
|
|||||||
static int
|
static int
|
||||||
compareprs(const void *a, const void *b)
|
compareprs(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
return ((WParserInfo *) a)->prs_id - ((WParserInfo *) b)->prs_id;
|
if ( ((WParserInfo *) a)->prs_id == ((WParserInfo *) b)->prs_id )
|
||||||
|
return 0;
|
||||||
|
return ( ((WParserInfo *) a)->prs_id < ((WParserInfo *) b)->prs_id ) ? -1 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
WParserInfo *
|
WParserInfo *
|
||||||
|
Loading…
x
Reference in New Issue
Block a user