From a734979e0a786276e3dc1d4755f025d664a4a4de Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Wed, 3 Jun 2009 18:42:13 +0000
Subject: [PATCH] Fix tsquerysel() to not fail on an empty TSQuery.  Per report
 from Tatsuo Ishii.

---
 src/backend/tsearch/ts_selfuncs.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/backend/tsearch/ts_selfuncs.c b/src/backend/tsearch/ts_selfuncs.c
index 27cb30f77b7..890019c0589 100644
--- a/src/backend/tsearch/ts_selfuncs.c
+++ b/src/backend/tsearch/ts_selfuncs.c
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *	  $PostgreSQL: pgsql/src/backend/tsearch/ts_selfuncs.c,v 1.2 2009/01/01 17:23:48 momjian Exp $
+ *	  $PostgreSQL: pgsql/src/backend/tsearch/ts_selfuncs.c,v 1.3 2009/06/03 18:42:13 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -146,19 +146,23 @@ static Selectivity
 tsquerysel(VariableStatData *vardata, Datum constval)
 {
 	Selectivity			selec;
+	TSQuery				query;
+
+	/* The caller made sure the const is a TSQuery, so get it now */
+	query = DatumGetTSQuery(constval);
+
+	/* Empty query matches nothing */
+	if (query->size == 0)
+		return (Selectivity) 0.0;
 
 	if (HeapTupleIsValid(vardata->statsTuple))
 	{
-		TSQuery				query;
 		Form_pg_statistic	stats;
 		Datum				*values;
 		int					nvalues;
 		float4				*numbers;
 		int					nnumbers;
 
-		/* The caller made sure the const is a TSQuery, so get it now */
-		query = DatumGetTSQuery(constval);
-
 		stats = (Form_pg_statistic) GETSTRUCT(vardata->statsTuple);
 
 		/* MCELEM will be an array of TEXT elements for a tsvector column */
-- 
GitLab