Set read_only = TRUE while evaluating input queries for ts_rewrite()
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 24 Oct 2007 03:30:03 +0000 (03:30 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 24 Oct 2007 03:30:03 +0000 (03:30 +0000)
and ts_stat(), per my recent suggestion.  Also add a possibly-not-needed-
but-can't-hurt check for NULL SPI_tuptable, before we try to dereference
same.

src/backend/utils/adt/tsquery_rewrite.c
src/backend/utils/adt/tsvector_op.c

index ccf5e67debfa3bd80d19beab3aa244a79df4540b..f7a335b337e616c473510c50dcdbdb3df4db247a 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/adt/tsquery_rewrite.c,v 1.6 2007/10/24 02:24:47 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/adt/tsquery_rewrite.c,v 1.7 2007/10/24 03:30:03 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -259,7 +259,7 @@ tsquery_rewrite_query(PG_FUNCTION_ARGS)
        MemoryContext oldcontext;
        QTNode     *tree;
        char       *buf;
-       void       *plan;
+       SPIPlanPtr      plan;
        Portal          portal;
        bool            isnull;
        int                     i;
@@ -281,12 +281,13 @@ tsquery_rewrite_query(PG_FUNCTION_ARGS)
        if ((plan = SPI_prepare(buf, 0, NULL)) == NULL)
                elog(ERROR, "SPI_prepare(\"%s\") failed", buf);
 
-       if ((portal = SPI_cursor_open(NULL, plan, NULL, NULL, false)) == NULL)
+       if ((portal = SPI_cursor_open(NULL, plan, NULL, NULL, true)) == NULL)
                elog(ERROR, "SPI_cursor_open(\"%s\") failed", buf);
 
        SPI_cursor_fetch(portal, true, 100);
 
-       if (SPI_tuptable->tupdesc->natts != 2 ||
+       if (SPI_tuptable == NULL ||
+               SPI_tuptable->tupdesc->natts != 2 ||
                SPI_gettypeid(SPI_tuptable->tupdesc, 1) != TSQUERYOID ||
                SPI_gettypeid(SPI_tuptable->tupdesc, 2) != TSQUERYOID)
                ereport(ERROR,
index 44b69ac76e381f36d4d4914a5ef751674406fd1a..f67b53407a6fbcb0474589b202a5898b2a385db4 100644 (file)
@@ -7,7 +7,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/adt/tsvector_op.c,v 1.6 2007/10/23 00:51:23 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/adt/tsvector_op.c,v 1.7 2007/10/24 03:30:03 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -1088,19 +1088,20 @@ ts_stat_sql(text *txt, text *ws)
                           *stat;
        bool            isnull;
        Portal          portal;
-       void       *plan;
+       SPIPlanPtr      plan;
 
        if ((plan = SPI_prepare(query, 0, NULL)) == NULL)
                /* internal error */
                elog(ERROR, "SPI_prepare(\"%s\") failed", query);
 
-       if ((portal = SPI_cursor_open(NULL, plan, NULL, NULL, false)) == NULL)
+       if ((portal = SPI_cursor_open(NULL, plan, NULL, NULL, true)) == NULL)
                /* internal error */
                elog(ERROR, "SPI_cursor_open(\"%s\") failed", query);
 
        SPI_cursor_fetch(portal, true, 100);
 
-       if (SPI_tuptable->tupdesc->natts != 1 ||
+       if (SPI_tuptable == NULL ||
+               SPI_tuptable->tupdesc->natts != 1 ||
                SPI_gettypeid(SPI_tuptable->tupdesc, 1) != TSVECTOROID)
                ereport(ERROR,
                                (errcode(ERRCODE_INVALID_PARAMETER_VALUE),