提交 fb13881f 编写于 作者: T Teodor Sigaev

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/)
上级 fd977434
...@@ -92,7 +92,9 @@ reset_dict(void) ...@@ -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); ...@@ -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) ...@@ -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 ...@@ -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 ...@@ -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) ...@@ -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 ...@@ -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) ...@@ -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 *
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册