Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit385c76f

Browse files
committed
Add PROCOID, COLLOID, OPEROID translation
1 parent057683c commit385c76f

File tree

4 files changed

+81
-8
lines changed

4 files changed

+81
-8
lines changed

‎init.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,5 +11,5 @@ RETURNS VOID AS 'pg_execplan'
1111
LANGUAGE C;
1212

1313
CREATEOR REPLACE FUNCTION @extschema@.pg_exec_query_plan(filenameTEXT)
14-
RETURNSVOIDAS'pg_execplan'
14+
RETURNSBOOLAS'pg_execplan'
1515
LANGUAGE C;

‎pg_execplan.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include"commands/extension.h"
1010
#include"commands/prepare.h"
1111
#include"executor/executor.h"
12+
#include"nodes/nodes.h"
1213
#include"nodes/plannodes.h"
1314
#include"tcop/pquery.h"
1415
#include"tcop/utility.h"
@@ -146,7 +147,7 @@ pg_exec_query_plan(PG_FUNCTION_ARGS)
146147
}
147148
PG_CATCH();
148149
{
149-
elog(INFO,"!!!BAD PLAN: %s",plan_string);
150+
elog(INFO,"BAD PLAN: %s",plan_string);
150151
PG_RE_THROW();
151152
}
152153
PG_END_TRY();
@@ -172,6 +173,8 @@ pg_exec_query_plan(PG_FUNCTION_ARGS)
172173
query_string,
173174
cplan->stmt_list,
174175
cplan);
176+
PG_TRY();
177+
{
175178
PortalStart(portal,paramLI,eflags,InvalidSnapshot);
176179
PortalSetResultFormat(portal,0,&format);
177180
(void)PortalRun(portal,
@@ -180,12 +183,20 @@ pg_exec_query_plan(PG_FUNCTION_ARGS)
180183
receiver,
181184
receiver,
182185
query_string);
186+
}
187+
PG_CATCH();
188+
{
189+
elog(INFO,"BAD QUERY: %s",query_string);
190+
PG_RETURN_BOOL(false);
191+
}
192+
PG_END_TRY();
193+
183194
receiver->rDestroy(receiver);
184195
PortalDrop(portal, false);
185196
DropPreparedStatement(query_string, false);
186197

187198
if (EXPLAN_DEBUG_LEVEL>0)
188199
elog(INFO,"query execution finished.\n");
189200

190-
PG_RETURN_VOID();
201+
PG_RETURN_BOOL(true);
191202
}

‎tests/create_objects.sql

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
CREATESCHEMAtests;
2+
SET search_path='tests';
3+
4+
CREATETYPEint42;
15
-- Make dummy I/O routines using the existing internal support for int4, text
26
CREATEFUNCTIONint42_in(cstring)
37
RETURNS int42
@@ -17,4 +21,29 @@ CREATE TYPE int42 (
1721
passedbyvalue
1822
);
1923

20-
CREATETABLEt1 (id int42);
24+
-- RELOID, TYPEOID
25+
CREATETABLEtests.t1 (id int42);
26+
CREATETABLEt2 (idint, payloadTEXT, par1INT);
27+
28+
CREATEFUNCTIONselect1(tidINT) RETURNS VOIDAS $$
29+
BEGIN
30+
INSERT INTOtests.t2 (id, payload, par1)VALUES (1,'qwe',2);
31+
END;
32+
$$ LANGUAGE plpgsql;
33+
34+
-- COLLOID
35+
CREATE COLLATION test1 (locale='en_US.utf8');
36+
CREATETABLEttest1 (
37+
idserial,
38+
atext COLLATE test1,
39+
btext COLLATE test1
40+
);
41+
INSERT INTO ttest1 (a, b)VALUES ('one','one');
42+
INSERT INTO ttest1 (a, b)VALUES ('one','two');
43+
44+
-- OPEROID
45+
CREATEOPERATORpublic.### (
46+
leftarg=numeric,
47+
rightarg=numeric,
48+
procedure= numeric_add
49+
);

‎tests/rpl.sh

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
#!/bin/bash
22

3-
#Script for the plan passingbetween separate instances
3+
#This script to pass some plansbetween separate instances.
44
U=`whoami`
5+
export LC_ALL=C
6+
export LANGUAGE="en_US:en"
57

68
# Paths
79
PGINSTALL=`pwd`/tmp_install/
@@ -25,8 +27,8 @@ make -C contrib install > /dev/null
2527

2628
mkdir PGDATA_Master
2729
mkdir PGDATA_Slave
28-
initdb -D PGDATA_Master
29-
initdb -D PGDATA_Slave
30+
initdb -D PGDATA_Master -E UTF8 --locale=C
31+
initdb -D PGDATA_Slave -E UTF8 --locale=C
3032
echo"shared_preload_libraries = 'postgres_fdw, pg_execplan'">> PGDATA_Master/postgresql.conf
3133
echo"shared_preload_libraries = 'postgres_fdw, pg_execplan'">> PGDATA_Slave/postgresql.conf
3234

@@ -47,8 +49,39 @@ psql -p 5433 -c "DROP TABLE t0;"
4749
#create database objects for check of oid switching
4850
psql -p 5432 -f contrib/pg_execplan/tests/create_objects.sql
4951
psql -p 5433 -f contrib/pg_execplan/tests/create_objects.sql
52+
psql -p 5433 -c"SELECT current_schemas(true);"
5053

5154
# TEST ON RELOID and TYPEOID objects.
52-
psql -p 5432 -c"SELECT pg_store_query_plan('../test.txt', 'SELECT * FROM t1;');"
55+
psql -p 5432 -c"SELECT pg_store_query_plan('../test.txt', 'SELECT * FROM tests.t1;');"
56+
psql -p 5433 -c"SELECT pg_exec_query_plan('../test.txt');"
57+
58+
psql -p 5432 -c"SELECT pg_store_query_plan('../test.txt', 'SELECT tests.select1(42);');"
59+
psql -p 5433 -c"SELECT pg_exec_query_plan('../test.txt');"
60+
psql -p 5432 -c"SELECT pg_exec_query_plan('../test.txt');"
61+
62+
psql -p 5432 -c"SELECT * FROM tests.t2;"
63+
psql -p 5433 -c"SELECT * FROM tests.t2;"
64+
65+
# COLLOID ----------------------------------------------------------------------
66+
# Check on different oids
67+
psql -p 5432 -c"SELECT oid, * FROM pg_collation WHERE collname LIKE 'test%';"
68+
psql -p 5433 -c"SELECT oid, * FROM pg_collation WHERE collname LIKE 'test%';"
69+
70+
psql -p 5432 -c"SELECT pg_store_query_plan('../test.txt', 'SELECT max(id) FROM tests.ttest1 WHERE a < b COLLATE tests.test1');"
71+
psql -p 5433 -c"SELECT pg_exec_query_plan('../test.txt');"
72+
73+
# OPEROID ----------------------------------------------------------------------
74+
# Check on different oids
75+
psql -p 5432 -c"SELECT oid, oprname, oprnamespace FROM pg_operator WHERE oprname LIKE '###';"
76+
psql -p 5433 -c"SELECT oid, oprname, oprnamespace FROM pg_operator WHERE oprname LIKE '###';"
77+
78+
# Test
79+
psql -p 5432 -c"SELECT pg_store_query_plan('../test.txt', 'SELECT id ### 1 FROM tests.ttest1;');"
80+
psql -p 5433 -c"SELECT pg_exec_query_plan('../test.txt');"
81+
82+
psql -p 5433 -c"SELECT pg_store_query_plan('../test.txt', 'SELECT collname, nspname
83+
FROM pg_collation JOIN pg_namespace ON (collnamespace = pg_namespace.oid)
84+
WHERE collname LIKE ''test%''
85+
ORDER BY 1;');"
5386
psql -p 5433 -c"SELECT pg_exec_query_plan('../test.txt');"
5487

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp