From: Bruce Momjian <bruce@momjian.us>
Date: Fri, 23 Aug 2002 02:56:36 +0000 (+0000)
Subject: Patch resolve ERROR problem for non-goog query_txt.
X-Git-Tag: REL7_3~802
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=52ee800ed33b071c4b047092797fb6a37e80ce87;p=postgresql

Patch resolve ERROR problem for non-goog query_txt.

Teodor Sigaev
---

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;
 	}