When planning a query at Bind time, be careful to pass the correct
authorTom Lane
Sat, 7 Oct 2006 20:16:57 +0000 (20:16 +0000)
committerTom Lane
Sat, 7 Oct 2006 20:16:57 +0000 (20:16 +0000)
query_list into the Portal, ie, the one seen and possibly modified by
the planner.  My fault :-(  Per report from Sergey Koposov.

src/backend/tcop/postgres.c

index ee63220d956a6b2e31ef94655fdfdc47d38bda98..e22445b4745b5dc9d5b31909632b0672dc77e415 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *   $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.512 2006/10/07 19:25:28 tgl Exp $
+ *   $PostgreSQL: pgsql/src/backend/tcop/postgres.c,v 1.513 2006/10/07 20:16:57 tgl Exp $
  *
  * NOTES
  *   this is the "main" module of the postgres backend and
@@ -1294,6 +1294,7 @@ exec_bind_message(StringInfo input_message)
    PreparedStatement *pstmt;
    Portal      portal;
    ParamListInfo params;
+   List       *query_list;
    List       *plan_list;
    MemoryContext qContext;
    bool        save_log_statement_stats = log_statement_stats;
@@ -1572,13 +1573,13 @@ exec_bind_message(StringInfo input_message)
 
        qContext = PortalGetHeapMemory(portal);
        oldContext = MemoryContextSwitchTo(qContext);
-       plan_list = pg_plan_queries(copyObject(pstmt->query_list),
-                                   params,
-                                   true);
+       query_list = copyObject(pstmt->query_list);
+       plan_list = pg_plan_queries(query_list, params, true);
        MemoryContextSwitchTo(oldContext);
    }
    else
    {
+       query_list = pstmt->query_list;
        plan_list = pstmt->plan_list;
        qContext = pstmt->context;
    }
@@ -1590,7 +1591,7 @@ exec_bind_message(StringInfo input_message)
                      *pstmt->stmt_name ? pstmt->stmt_name : NULL,
                      pstmt->query_string,
                      pstmt->commandTag,
-                     pstmt->query_list,
+                     query_list,
                      plan_list,
                      qContext);