Skip to content

Commit 057683c

Browse files
committed
Add RELOID and TYPEOID portbility.
1 parent c3ec548 commit 057683c

File tree

4 files changed

+92
-3
lines changed

4 files changed

+92
-3
lines changed

init.sql

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@
44
-- query - query string which will be parsed and planned.
55
-- filename - path to the file on a disk.
66
CREATE OR REPLACE FUNCTION @extschema@.pg_store_query_plan(
7-
query TEXT,
8-
filename TEXT)
7+
filename TEXT,
8+
query TEXT
9+
)
910
RETURNS VOID AS 'pg_execplan'
1011
LANGUAGE C;
1112

pg_execplan.c

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,9 @@ pg_store_query_plan(PG_FUNCTION_ARGS)
8383
fwrite(&string_len, sizeof(size_t), 1, fout);
8484
fwrite(query_string, sizeof(char), string_len, fout);
8585

86+
set_portable_output(true);
8687
plan_string = nodeToString(queryDesc->plannedstmt);
88+
set_portable_output(false);
8789
string_len = strlen(plan_string);
8890
fwrite(&string_len, sizeof(size_t), 1, fout);
8991
fwrite(plan_string, sizeof(char), string_len, fout);
@@ -135,7 +137,19 @@ pg_exec_query_plan(PG_FUNCTION_ARGS)
135137
int eflags = 0;
136138

137139
LoadPlanFromFile(filename, &query_string, &plan_string);
138-
pstmt = (PlannedStmt *) stringToNode(plan_string);
140+
141+
PG_TRY();
142+
{
143+
set_portable_input(true);
144+
pstmt = (PlannedStmt *) stringToNode(plan_string);
145+
set_portable_input(false);
146+
}
147+
PG_CATCH();
148+
{
149+
elog(INFO, "!!!BAD PLAN: %s", plan_string);
150+
PG_RE_THROW();
151+
}
152+
PG_END_TRY();
139153

140154
psrc = CreateCachedPlan(NULL, query_string, query_string);
141155
CompleteCachedPlan(psrc, NIL, NULL, NULL, 0, NULL, NULL,

tests/create_objects.sql

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
-- Make dummy I/O routines using the existing internal support for int4, text
2+
CREATE FUNCTION int42_in(cstring)
3+
RETURNS int42
4+
AS 'int4in'
5+
LANGUAGE internal STRICT IMMUTABLE;
6+
CREATE FUNCTION int42_out(int42)
7+
RETURNS cstring
8+
AS 'int4out'
9+
LANGUAGE internal STRICT IMMUTABLE;
10+
11+
CREATE TYPE int42 (
12+
internallength = 4,
13+
input = int42_in,
14+
output = int42_out,
15+
alignment = int4,
16+
default = 42,
17+
passedbyvalue
18+
);
19+
20+
CREATE TABLE t1 (id int42);

tests/rpl.sh

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
#!/bin/bash
2+
3+
# Script for the plan passing between separate instances
4+
U=`whoami`
5+
6+
# Paths
7+
PGINSTALL=`pwd`/tmp_install/
8+
LD_LIBRARY_PATH=$PGINSTALL/lib
9+
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH
10+
export PATH=$PGINSTALL/bin:$PATH
11+
12+
pkill -9 postgres || true
13+
sleep 1
14+
rm -rf $PGINSTALL || true
15+
rm -rf PGDATA_Master || true
16+
rm -rf PGDATA_Slave || true
17+
rm -rf master.log || true
18+
rm -rf slave.log || true
19+
20+
# Building project
21+
make > /dev/null
22+
make -C contrib > /dev/null
23+
make install > /dev/null
24+
make -C contrib install > /dev/null
25+
26+
mkdir PGDATA_Master
27+
mkdir PGDATA_Slave
28+
initdb -D PGDATA_Master
29+
initdb -D PGDATA_Slave
30+
echo "shared_preload_libraries = 'postgres_fdw, pg_execplan'" >> PGDATA_Master/postgresql.conf
31+
echo "shared_preload_libraries = 'postgres_fdw, pg_execplan'" >> PGDATA_Slave/postgresql.conf
32+
33+
pg_ctl -w -D PGDATA_Master -o "-p 5432" -l master.log start
34+
pg_ctl -w -D PGDATA_Slave -o "-p 5433" -l slave.log start
35+
createdb $U -p 5432
36+
createdb $U -p 5433
37+
38+
psql -p 5432 -c "CREATE EXTENSION postgres_fdw;"
39+
psql -p 5433 -c "CREATE EXTENSION postgres_fdw;"
40+
psql -p 5432 -c "CREATE EXTENSION pg_execplan;"
41+
psql -p 5433 -c "CREATE EXTENSION pg_execplan;"
42+
43+
# shift oids
44+
psql -p 5433 -c "CREATE TABLE t0 (id int);"
45+
psql -p 5433 -c "DROP TABLE t0;"
46+
47+
#create database objects for check of oid switching
48+
psql -p 5432 -f contrib/pg_execplan/tests/create_objects.sql
49+
psql -p 5433 -f contrib/pg_execplan/tests/create_objects.sql
50+
51+
# TEST ON RELOID and TYPEOID objects.
52+
psql -p 5432 -c "SELECT pg_store_query_plan('../test.txt', 'SELECT * FROM t1;');"
53+
psql -p 5433 -c "SELECT pg_exec_query_plan('../test.txt');"
54+

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