Skip to content

Commit 853a993

Browse files
committed
Remove portals from pg_execplan, temporarily add DestLog receiver. + pgindent of code processing
1 parent 1cd24be commit 853a993

File tree

13 files changed

+559
-469
lines changed

13 files changed

+559
-469
lines changed

contrib/pg_execplan/pg_execplan.c

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -104,9 +104,8 @@ exec_plan(char *query_string, char *plan_string)
104104
ParamListInfo paramLI = NULL;
105105
CachedPlanSource *psrc;
106106
CachedPlan *cplan;
107-
Portal portal;
107+
QueryDesc *queryDesc;
108108
DestReceiver *receiver;
109-
int16 format = 0;
110109
int eflags = 0;
111110

112111
PG_TRY();
@@ -134,36 +133,35 @@ exec_plan(char *query_string, char *plan_string)
134133
SetRemoteSubplan(psrc, pstmt);
135134
cplan = GetCachedPlan(psrc, paramLI, false);
136135

137-
receiver = CreateDestReceiver(DestNone);
138-
portal = CreateNewPortal();
139-
portal->visible = false;
140-
PortalDefineQuery(portal,
141-
NULL,
142-
query_string,
143-
NULL,
144-
NULL,
145-
cplan);
136+
receiver = CreateDestReceiver(DestLog);
137+
146138
PG_TRY();
147139
{
148-
PortalStart(portal, paramLI, eflags, InvalidSnapshot);
149-
PortalSetResultFormat(portal, 0, &format);
150-
(void) PortalRun(portal,
151-
FETCH_ALL,
152-
true,
153-
receiver,
154-
receiver,
155-
query_string);
140+
queryDesc = CreateQueryDesc(pstmt,
141+
query_string,
142+
GetActiveSnapshot(),
143+
InvalidSnapshot,
144+
receiver,
145+
paramLI,
146+
0);
147+
ExecutorStart(queryDesc, eflags);
148+
PushActiveSnapshot(queryDesc->snapshot);
149+
ExecutorRun(queryDesc, ForwardScanDirection, 0);
150+
PopActiveSnapshot();
151+
ExecutorFinish(queryDesc);
152+
ExecutorEnd(queryDesc);
153+
FreeQueryDesc(queryDesc);
156154
}
157155
PG_CATCH();
158156
{
159157
elog(INFO, "BAD QUERY: '%s'.", query_string);
160-
PortalDrop(portal, false);
158+
ReleaseCachedPlan(cplan, false);
161159
PG_RE_THROW();
162160
}
163161
PG_END_TRY();
164162

165163
receiver->rDestroy(receiver);
166-
PortalDrop(portal, false);
164+
ReleaseCachedPlan(cplan, false);
167165

168166
if (EXPLAN_DEBUG_LEVEL > 0)
169167
elog(INFO, "query execution finished.\n");

contrib/pg_execplan/tests/create_objects.sql

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,24 @@ CREATE OPERATOR public.### (
4747
rightarg = numeric,
4848
procedure = numeric_add
4949
);
50+
51+
-- Different types and parameter types
52+
CREATE TYPE bug_status AS ENUM ('new', 'open', 'closed');
53+
54+
CREATE TABLE public.bug (
55+
id serial,
56+
description TEXT,
57+
status bug_status
58+
);
59+
60+
INSERT INTO public.bug (description, status) VALUES ('abc', 'open');
61+
INSERT INTO public.bug (description, status) VALUES ('abc1', 'closed');
62+
63+
CREATE TABLE public.bug1 (
64+
id serial,
65+
status bug_status
66+
);
67+
INSERT INTO public.bug1 (status) VALUES ('new');
68+
INSERT INTO public.bug1 (status) VALUES ('new');
69+
INSERT INTO public.bug1 (status) VALUES ('closed');
70+

contrib/pg_execplan/tests/rpl.sh

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -80,15 +80,18 @@ psql -p 5432 -c "SELECT pg_store_query_plan('../test.txt', 'SELECT id ### 1 FROM
8080
psql -p 5433 -c "SELECT pg_exec_stored_plan('../test.txt');"
8181

8282
#ENUMOID -----------------------------------------------------------------------
83-
psql -p 5432 -c "CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');"
84-
psql -p 5432 -c "CREATE TABLE person ( name text, current_mood mood);"
85-
psql -p 5433 -c "CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');"
86-
psql -p 5433 -c "CREATE TABLE person ( name text, current_mood mood);"
87-
88-
psql -p 5432 -c "SELECT pg_store_query_plan('../test.txt', 'INSERT INTO person VALUES (''Moe'', ''happy'');');"
89-
psql -p 5432 -c "SELECT pg_exec_stored_plan('../test.txt');"
83+
psql -p 5432 -c "SELECT pg_store_query_plan('../test.txt', 'INSERT INTO bug (description, status) VALUES (''abc3'', ''new''::tests.bug_status);');"
9084
psql -p 5433 -c "SELECT pg_exec_stored_plan('../test.txt');"
91-
92-
psql -p 5432 -c "SELECT * FROM person WHERE current_mood = 'happy';"
93-
psql -p 5433 -c "SELECT * FROM person WHERE current_mood = 'happy';"
85+
#psql -p 5432 -c "SELECT pg_store_query_plan('../test.txt', 'SELECT * FROM bug WHERE status=''open''');"
86+
#psql -p 5433 -c "SELECT pg_exec_stored_plan('../test.txt');"
87+
echo "ENUMOID test"
88+
#psql -p 5432 -c "INSERT INTO public.bug1 (status) VALUES ('new');"
89+
psql -p 5432 -c "SELECT pg_store_query_plan('../test.txt', '
90+
SELECT A.description, B.id
91+
FROM bug as A, bug1 AS B
92+
WHERE A.status = B.status;
93+
');"
94+
psql -p 5433 -c "SELECT pg_exec_stored_plan('../test.txt');"
95+
psql -p 5432 -c "SELECT * FROM bug;"
96+
psql -p 5432 -c "SELECT * FROM bug1;"
9497

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy