Patch resolve ERROR problem for non-goog query_txt.

Teodor Sigaev
This commit is contained in:
Bruce Momjian 2002-08-23 02:56:36 +00:00
parent 2e0e430659
commit 52ee800ed3
4 changed files with 20 additions and 8 deletions

View file

@ -6,6 +6,8 @@ All work was done by Teodor Sigaev (teodor@stack.net) and Oleg Bartunov
CHANGES: CHANGES:
August 22, 2002
Fix works with 'bad' queries
August 13, 2002 August 13, 2002
Use parser of OpenFTS v0.33. Use parser of OpenFTS v0.33.

View file

@ -231,6 +231,9 @@ gtxtidx_consistent(PG_FUNCTION_ARGS) {
((GISTENTRY *)PG_GETARG_POINTER(0))->key ((GISTENTRY *)PG_GETARG_POINTER(0))->key
); );
if ( !query->size )
PG_RETURN_BOOL(false);
if ( ISSIGNKEY(key) ) { if ( ISSIGNKEY(key) ) {
if ( ISALLTRUE(key) ) if ( ISALLTRUE(key) )
PG_RETURN_BOOL(true); PG_RETURN_BOOL(true);

View file

@ -419,7 +419,7 @@ execqtxt(PG_FUNCTION_ARGS)
CHKVAL chkval; CHKVAL chkval;
bool result; bool result;
if (!val->size) if (!val->size || !query->size)
{ {
PG_FREE_IF_COPY(val, 0); PG_FREE_IF_COPY(val, 0);
PG_FREE_IF_COPY(query, 1); PG_FREE_IF_COPY(query, 1);
@ -593,8 +593,9 @@ mqtxt_in(PG_FUNCTION_ARGS)
res = clean_fakeval(GETQUERY(query), &len); res = clean_fakeval(GETQUERY(query), &len);
if (!res) if (!res)
{ {
pfree(query); query->len=HDRSIZEQT;
PG_RETURN_NULL(); query->size=0;
PG_RETURN_POINTER(query);
} }
memcpy((void *) GETQUERY(query), (void *) res, len * sizeof(ITEM)); memcpy((void *) GETQUERY(query), (void *) res, len * sizeof(ITEM));
#ifdef BS_DEBUG #ifdef BS_DEBUG
@ -738,8 +739,11 @@ qtxt_out(PG_FUNCTION_ARGS)
QUERYTYPE *query = (QUERYTYPE *) DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(0))); QUERYTYPE *query = (QUERYTYPE *) DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(0)));
INFIX nrm; INFIX nrm;
if (query->size == 0) if (query->size == 0) {
elog(ERROR, "Empty"); char *b=palloc(1);
*b='\0';
PG_RETURN_POINTER(b);
}
nrm.curpol = GETQUERY(query); nrm.curpol = GETQUERY(query);
nrm.buflen = 32; nrm.buflen = 32;
nrm.cur = nrm.buf = (char *) palloc(sizeof(char) * nrm.buflen); nrm.cur = nrm.buf = (char *) palloc(sizeof(char) * nrm.buflen);
@ -765,8 +769,11 @@ querytree(PG_FUNCTION_ARGS)
int4 len; int4 len;
if (query->size == 0) if (query->size == 0) {
elog(ERROR, "Empty"); res = (text *) palloc(VARHDRSZ);
VARATT_SIZEP(res) = VARHDRSZ;
PG_RETURN_POINTER(res);
}
q = clean_NOT(GETQUERY(query), &len); q = clean_NOT(GETQUERY(query), &len);

View file

@ -283,7 +283,7 @@ clean_fakeval(ITEM * ptr, int4 *len)
resroot = clean_fakeval_intree(root, &result); resroot = clean_fakeval_intree(root, &result);
if (result != V_UNKNOWN) if (result != V_UNKNOWN)
{ {
elog(ERROR, "Your query contained only stopword(s), ignored"); elog(NOTICE, "Query contains only stopword(s) or doesn't contain lexem(s), ignored");
*len = 0; *len = 0;
return NULL; return NULL;
} }