From 52ee800ed33b071c4b047092797fb6a37e80ce87 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Fri, 23 Aug 2002 02:56:36 +0000 Subject: [PATCH] Patch resolve ERROR problem for non-goog query_txt. Teodor Sigaev --- contrib/tsearch/README.tsearch | 2 ++ contrib/tsearch/gistidx.c | 3 +++ contrib/tsearch/query.c | 21 ++++++++++++++------- contrib/tsearch/rewrite.c | 2 +- 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/contrib/tsearch/README.tsearch b/contrib/tsearch/README.tsearch index a57df55eea..e3bb9d91ec 100644 --- a/contrib/tsearch/README.tsearch +++ b/contrib/tsearch/README.tsearch @@ -6,6 +6,8 @@ All work was done by Teodor Sigaev (teodor@stack.net) and Oleg Bartunov CHANGES: +August 22, 2002 + Fix works with 'bad' queries August 13, 2002 Use parser of OpenFTS v0.33. diff --git a/contrib/tsearch/gistidx.c b/contrib/tsearch/gistidx.c index 5e52703684..61ab1bd8f0 100644 --- a/contrib/tsearch/gistidx.c +++ b/contrib/tsearch/gistidx.c @@ -231,6 +231,9 @@ gtxtidx_consistent(PG_FUNCTION_ARGS) { ((GISTENTRY *)PG_GETARG_POINTER(0))->key ); + if ( !query->size ) + PG_RETURN_BOOL(false); + if ( ISSIGNKEY(key) ) { if ( ISALLTRUE(key) ) PG_RETURN_BOOL(true); diff --git a/contrib/tsearch/query.c b/contrib/tsearch/query.c index 6666720c9b..c3917f204f 100644 --- a/contrib/tsearch/query.c +++ b/contrib/tsearch/query.c @@ -419,7 +419,7 @@ execqtxt(PG_FUNCTION_ARGS) CHKVAL chkval; bool result; - if (!val->size) + if (!val->size || !query->size) { PG_FREE_IF_COPY(val, 0); PG_FREE_IF_COPY(query, 1); @@ -593,8 +593,9 @@ mqtxt_in(PG_FUNCTION_ARGS) res = clean_fakeval(GETQUERY(query), &len); if (!res) { - pfree(query); - PG_RETURN_NULL(); + query->len=HDRSIZEQT; + query->size=0; + PG_RETURN_POINTER(query); } memcpy((void *) GETQUERY(query), (void *) res, len * sizeof(ITEM)); #ifdef BS_DEBUG @@ -738,8 +739,11 @@ qtxt_out(PG_FUNCTION_ARGS) QUERYTYPE *query = (QUERYTYPE *) DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(0))); INFIX nrm; - if (query->size == 0) - elog(ERROR, "Empty"); + if (query->size == 0) { + char *b=palloc(1); + *b='\0'; + PG_RETURN_POINTER(b); + } nrm.curpol = GETQUERY(query); nrm.buflen = 32; nrm.cur = nrm.buf = (char *) palloc(sizeof(char) * nrm.buflen); @@ -765,8 +769,11 @@ querytree(PG_FUNCTION_ARGS) int4 len; - if (query->size == 0) - elog(ERROR, "Empty"); + if (query->size == 0) { + res = (text *) palloc(VARHDRSZ); + VARATT_SIZEP(res) = VARHDRSZ; + PG_RETURN_POINTER(res); + } q = clean_NOT(GETQUERY(query), &len); diff --git a/contrib/tsearch/rewrite.c b/contrib/tsearch/rewrite.c index 5036c420ff..33e948faf8 100644 --- a/contrib/tsearch/rewrite.c +++ b/contrib/tsearch/rewrite.c @@ -283,7 +283,7 @@ clean_fakeval(ITEM * ptr, int4 *len) resroot = clean_fakeval_intree(root, &result); 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; return NULL; }