*** pgsql/src/backend/commands/prepare.c 2008/05/12 20:01:59 1.87 --- pgsql/src/backend/commands/prepare.c 2008/07/18 20:26:06 1.88 *************** *** 10,16 **** * Copyright (c) 2002-2008, PostgreSQL Global Development Group * * IDENTIFICATION ! * $PostgreSQL: pgsql/src/backend/commands/prepare.c,v 1.86 2008/05/12 00:00:47 alvherre Exp $ * *------------------------------------------------------------------------- */ --- 10,16 ---- * Copyright (c) 2002-2008, PostgreSQL Global Development Group * * IDENTIFICATION ! * $PostgreSQL: pgsql/src/backend/commands/prepare.c,v 1.87 2008/05/12 20:01:59 alvherre Exp $ * *------------------------------------------------------------------------- */ *************** ExecuteQuery(ExecuteStmt *stmt, const ch *** 174,179 **** --- 174,180 ---- ParamListInfo paramLI = NULL; EState *estate = NULL; Portal portal; + char *query_string; /* Look it up in the hash table */ entry = FetchPreparedStatement(stmt->name, true); *************** ExecuteQuery(ExecuteStmt *stmt, const ch *** 203,208 **** --- 204,213 ---- /* Don't display the portal in pg_cursors, it is for internal use only */ portal->visible = false; + /* Copy the plan's saved query string into the portal's memory */ + query_string = MemoryContextStrdup(PortalGetHeapMemory(portal), + entry->plansource->query_string); + /* * For CREATE TABLE / AS EXECUTE, we must make a copy of the stored query * so that we can modify its destination (yech, but this has always been *************** ExecuteQuery(ExecuteStmt *stmt, const ch *** 249,261 **** plan_list = cplan->stmt_list; } - /* - * Note: we don't bother to copy the source query string into the portal. - * Any errors it might be useful for will already have been reported. - */ PortalDefineQuery(portal, NULL, ! NULL, entry->plansource->commandTag, plan_list, cplan); --- 254,262 ---- plan_list = cplan->stmt_list; } PortalDefineQuery(portal, NULL, ! query_string, entry->plansource->commandTag, plan_list, cplan); *************** pg_prepared_statement(PG_FUNCTION_ARGS) *** 777,788 **** MemSet(nulls, 0, sizeof(nulls)); values[0] = CStringGetTextDatum(prep_stmt->stmt_name); ! ! if (prep_stmt->plansource->query_string == NULL) ! nulls[1] = true; ! else ! values[1] = CStringGetTextDatum(prep_stmt->plansource->query_string); ! values[2] = TimestampTzGetDatum(prep_stmt->prepare_time); values[3] = build_regtype_array(prep_stmt->plansource->param_types, prep_stmt->plansource->num_params); --- 778,784 ---- MemSet(nulls, 0, sizeof(nulls)); values[0] = CStringGetTextDatum(prep_stmt->stmt_name); ! values[1] = CStringGetTextDatum(prep_stmt->plansource->query_string); values[2] = TimestampTzGetDatum(prep_stmt->prepare_time); values[3] = build_regtype_array(prep_stmt->plansource->param_types, prep_stmt->plansource->num_params);