Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 3700981

Browse files
committed
Add new make_oidjoin_check utility and template1_check.sql. Fix some
pg_operator problems.
1 parent f1bcb17 commit 3700981

File tree

6 files changed

+223
-7
lines changed

6 files changed

+223
-7
lines changed

contrib/findoidjoins/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# Makefile, requires pgsql/contrib/pginterface
33
#
44
#
5-
PGINTERFACE = pginterface.o halt.o # these have to be in your library search path
5+
PGINTERFACE = ../pginterface/pginterface.o ../pginterface/halt.o # these have to be in your library search path
66
TARGET = findoidjoins
77
CFLAGS = -g -Wall -I. -I../../src/interfaces/libpq -I/usr/local/pgsql/include
88
LDFLAGS = -L/usr/local/pgsql/lib -lpq

contrib/findoidjoins/README

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ Join pg_am.ambuild => pg_proc.oid
3535
Join pg_amop.amopid => pg_am.oid
3636
Join pg_amop.amopclaid => pg_opclass.oid
3737
Join pg_amop.amopopr => pg_operator.oid
38+
Join pg_amop.amopopr => pg_proc.oid
3839
Join pg_amop.amopselect => pg_proc.oid
3940
Join pg_amop.amopnpages => pg_proc.oid
4041
Join pg_amproc.amid => pg_am.oid
@@ -51,7 +52,6 @@ Join pg_description.objoid => pg_proc.oid
5152
Join pg_description.objoid => pg_type.oid
5253
Join pg_index.indexrelid => pg_class.oid
5354
Join pg_index.indrelid => pg_class.oid
54-
Join pg_index.indproc => pg_proc.oid
5555
Join pg_opclass.opcdeftype => pg_type.oid
5656
Join pg_operator.oprleft => pg_type.oid
5757
Join pg_operator.oprright => pg_type.oid

contrib/findoidjoins/findoidjoins.c

+2
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ main(int argc, char **argv)
3535
FROM pg_class c, pg_attribute a, pg_type t \
3636
WHERE a.attnum > 0 AND \
3737
relkind = 'r' AND \
38+
relhasrules = 'f' AND \
3839
(typname = 'oid' OR \
3940
typname = 'regproc') AND \
4041
a.attrelid = c.oid AND \
@@ -49,6 +50,7 @@ main(int argc, char **argv)
4950
SELECT relname \
5051
FROM pg_class c \
5152
WHERE relkind = 'r' AND \
53+
relhasrules = 'f' AND \
5254
relname != 'pg_user' \
5355
ORDER BY 1; \
5456
");
+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
:
2+
# You first run findoidjoins on the template1 database, and send that
3+
# output into this file to generate a list of SQL statements.
4+
trap "rm -f /tmp/$$ /tmp/$$a /tmp/$$b" 0 1 2 3 15
5+
6+
cat "$@" >/tmp/$$
7+
cat /tmp/$$ | cut -d' ' -f2 | sort | uniq -d >/tmp/$$a
8+
cat /tmp/$$ | while read LINE
9+
do
10+
set -- $LINE
11+
grep "$2" /tmp/$$a >/dev/null 2>&1 || echo $LINE
12+
done >/tmp/$$b
13+
cat /tmp/$$b |
14+
awk -F'[ \.]' '\
15+
BEGIN \
16+
{
17+
printf "\
18+
--\n\
19+
-- This is created by pgsql/contrib/findoidjoins/make_oidjoin_check\n\
20+
--\n";
21+
}
22+
{
23+
printf "\
24+
SELECT oid, %s.%s \n\
25+
FROM %s \n\
26+
WHERE %s%s.%s%s NOT IN (SELECT oid FROM %s) AND \n\
27+
%s%s.%s%s != 0;\n", $2, $3, $2,
28+
($5 == "pg_proc") ? "RegprocToOid(" : "",
29+
$2, $3,
30+
($5 == "pg_proc") ? ")" : "",
31+
$5,
32+
($5 == "pg_proc") ? "RegprocToOid(" : "",
33+
$2, $3,
34+
($5 == "pg_proc") ? ")" : "";
35+
}'

src/include/catalog/pg_operator.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
* Copyright (c) 1994, Regents of the University of California
99
*
10-
* $Id: pg_operator.h,v 1.37 1998/09/13 14:29:06 thomas Exp $
10+
* $Id: pg_operator.h,v 1.38 1998/09/14 01:14:48 momjian Exp $
1111
*
1212
* NOTES
1313
* the genbki.sh script reads this file and generates .bki
@@ -200,8 +200,8 @@ DATA(insert OID = 525 ( ">=" PGUID 0 b t f 23 23 16 523 97 0 0 int4ge
200200
DATA(insert OID = 526 ( "*" PGUID 0 b t f 21 21 21 526 0 0 0 int2mul intltsel intltjoinsel ));
201201
DATA(insert OID = 527 ( "/" PGUID 0 b t f 21 21 21 0 0 0 0 int2div intltsel intltjoinsel ));
202202
DATA(insert OID = 528 ( "/" PGUID 0 b t f 23 23 23 0 0 0 0 int4div intltsel intltjoinsel ));
203-
DATA(insert OID = 529 ( "%" PGUID 0 b t f 21 21 21 6 0 0 0 int2mod intltsel intltjoinsel ));
204-
DATA(insert OID = 530 ( "%" PGUID 0 b t f 23 23 23 6 0 0 0 int4mod intltsel intltjoinsel ));
203+
DATA(insert OID = 529 ( "%" PGUID 0 b t f 21 21 21 0 0 0 0 int2mod intltsel intltjoinsel ));
204+
DATA(insert OID = 530 ( "%" PGUID 0 b t f 23 23 23 0 0 0 0 int4mod intltsel intltjoinsel ));
205205
DATA(insert OID = 531 ( "<>" PGUID 0 b t f 25 25 16 531 98 0 0 textne neqsel neqjoinsel ));
206206
DATA(insert OID = 532 ( "=" PGUID 0 b t t 21 23 16 533 538 95 97 int24eq eqsel eqjoinsel ));
207207
DATA(insert OID = 533 ( "=" PGUID 0 b t t 23 21 16 532 539 97 95 int42eq eqsel eqjoinsel ));
@@ -219,8 +219,8 @@ DATA(insert OID = 544 ( "*" PGUID 0 b t f 21 23 23 545 0 0 0 int24mul
219219
DATA(insert OID = 545 ( "*" PGUID 0 b t f 23 21 23 544 0 0 0 int42mul intltsel intltjoinsel ));
220220
DATA(insert OID = 546 ( "/" PGUID 0 b t f 21 23 23 0 0 0 0 int24div intltsel intltjoinsel ));
221221
DATA(insert OID = 547 ( "/" PGUID 0 b t f 23 21 23 0 0 0 0 int42div intltsel intltjoinsel ));
222-
DATA(insert OID = 548 ( "%" PGUID 0 b t f 21 23 23 6 0 0 0 int24mod intltsel intltjoinsel ));
223-
DATA(insert OID = 549 ( "%" PGUID 0 b t f 23 21 23 6 0 0 0 int42mod intltsel intltjoinsel ));
222+
DATA(insert OID = 548 ( "%" PGUID 0 b t f 21 23 23 0 0 0 0 int24mod intltsel intltjoinsel ));
223+
DATA(insert OID = 549 ( "%" PGUID 0 b t f 23 21 23 0 0 0 0 int42mod intltsel intltjoinsel ));
224224
DATA(insert OID = 550 ( "+" PGUID 0 b t f 21 21 21 550 0 0 0 int2pl intltsel intltjoinsel ));
225225
DATA(insert OID = 551 ( "+" PGUID 0 b t f 23 23 23 551 0 0 0 int4pl intltsel intltjoinsel ));
226226
DATA(insert OID = 552 ( "+" PGUID 0 b t f 21 23 23 553 0 0 0 int24pl intltsel intltjoinsel ));
+179
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
--
2+
-- This is created by pgsql/contrib/findoidjoins/make_oidjoin_check
3+
--
4+
SELECT oid, pg_aggregate.aggtransfn1
5+
FROM pg_aggregate
6+
WHERE RegprocToOid(pg_aggregate.aggtransfn1) NOT IN (SELECT oid FROM pg_proc) AND
7+
RegprocToOid(pg_aggregate.aggtransfn1) != 0;
8+
SELECT oid, pg_aggregate.aggtransfn2
9+
FROM pg_aggregate
10+
WHERE RegprocToOid(pg_aggregate.aggtransfn2) NOT IN (SELECT oid FROM pg_proc) AND
11+
RegprocToOid(pg_aggregate.aggtransfn2) != 0;
12+
SELECT oid, pg_aggregate.aggfinalfn
13+
FROM pg_aggregate
14+
WHERE RegprocToOid(pg_aggregate.aggfinalfn) NOT IN (SELECT oid FROM pg_proc) AND
15+
RegprocToOid(pg_aggregate.aggfinalfn) != 0;
16+
SELECT oid, pg_aggregate.aggtranstype2
17+
FROM pg_aggregate
18+
WHERE pg_aggregate.aggtranstype2 NOT IN (SELECT oid FROM pg_type) AND
19+
pg_aggregate.aggtranstype2 != 0;
20+
SELECT oid, pg_am.amgettuple
21+
FROM pg_am
22+
WHERE RegprocToOid(pg_am.amgettuple) NOT IN (SELECT oid FROM pg_proc) AND
23+
RegprocToOid(pg_am.amgettuple) != 0;
24+
SELECT oid, pg_am.aminsert
25+
FROM pg_am
26+
WHERE RegprocToOid(pg_am.aminsert) NOT IN (SELECT oid FROM pg_proc) AND
27+
RegprocToOid(pg_am.aminsert) != 0;
28+
SELECT oid, pg_am.amdelete
29+
FROM pg_am
30+
WHERE RegprocToOid(pg_am.amdelete) NOT IN (SELECT oid FROM pg_proc) AND
31+
RegprocToOid(pg_am.amdelete) != 0;
32+
SELECT oid, pg_am.ambeginscan
33+
FROM pg_am
34+
WHERE RegprocToOid(pg_am.ambeginscan) NOT IN (SELECT oid FROM pg_proc) AND
35+
RegprocToOid(pg_am.ambeginscan) != 0;
36+
SELECT oid, pg_am.amrescan
37+
FROM pg_am
38+
WHERE RegprocToOid(pg_am.amrescan) NOT IN (SELECT oid FROM pg_proc) AND
39+
RegprocToOid(pg_am.amrescan) != 0;
40+
SELECT oid, pg_am.amendscan
41+
FROM pg_am
42+
WHERE RegprocToOid(pg_am.amendscan) NOT IN (SELECT oid FROM pg_proc) AND
43+
RegprocToOid(pg_am.amendscan) != 0;
44+
SELECT oid, pg_am.ammarkpos
45+
FROM pg_am
46+
WHERE RegprocToOid(pg_am.ammarkpos) NOT IN (SELECT oid FROM pg_proc) AND
47+
RegprocToOid(pg_am.ammarkpos) != 0;
48+
SELECT oid, pg_am.amrestrpos
49+
FROM pg_am
50+
WHERE RegprocToOid(pg_am.amrestrpos) NOT IN (SELECT oid FROM pg_proc) AND
51+
RegprocToOid(pg_am.amrestrpos) != 0;
52+
SELECT oid, pg_am.ambuild
53+
FROM pg_am
54+
WHERE RegprocToOid(pg_am.ambuild) NOT IN (SELECT oid FROM pg_proc) AND
55+
RegprocToOid(pg_am.ambuild) != 0;
56+
SELECT oid, pg_amop.amopid
57+
FROM pg_amop
58+
WHERE pg_amop.amopid NOT IN (SELECT oid FROM pg_am) AND
59+
pg_amop.amopid != 0;
60+
SELECT oid, pg_amop.amopclaid
61+
FROM pg_amop
62+
WHERE pg_amop.amopclaid NOT IN (SELECT oid FROM pg_opclass) AND
63+
pg_amop.amopclaid != 0;
64+
SELECT oid, pg_amop.amopselect
65+
FROM pg_amop
66+
WHERE RegprocToOid(pg_amop.amopselect) NOT IN (SELECT oid FROM pg_proc) AND
67+
RegprocToOid(pg_amop.amopselect) != 0;
68+
SELECT oid, pg_amop.amopnpages
69+
FROM pg_amop
70+
WHERE RegprocToOid(pg_amop.amopnpages) NOT IN (SELECT oid FROM pg_proc) AND
71+
RegprocToOid(pg_amop.amopnpages) != 0;
72+
SELECT oid, pg_amproc.amid
73+
FROM pg_amproc
74+
WHERE pg_amproc.amid NOT IN (SELECT oid FROM pg_am) AND
75+
pg_amproc.amid != 0;
76+
SELECT oid, pg_attribute.attrelid
77+
FROM pg_attribute
78+
WHERE pg_attribute.attrelid NOT IN (SELECT oid FROM pg_class) AND
79+
pg_attribute.attrelid != 0;
80+
SELECT oid, pg_attribute.atttypid
81+
FROM pg_attribute
82+
WHERE pg_attribute.atttypid NOT IN (SELECT oid FROM pg_type) AND
83+
pg_attribute.atttypid != 0;
84+
SELECT oid, pg_class.reltype
85+
FROM pg_class
86+
WHERE pg_class.reltype NOT IN (SELECT oid FROM pg_type) AND
87+
pg_class.reltype != 0;
88+
SELECT oid, pg_class.relam
89+
FROM pg_class
90+
WHERE pg_class.relam NOT IN (SELECT oid FROM pg_am) AND
91+
pg_class.relam != 0;
92+
SELECT oid, pg_index.indexrelid
93+
FROM pg_index
94+
WHERE pg_index.indexrelid NOT IN (SELECT oid FROM pg_class) AND
95+
pg_index.indexrelid != 0;
96+
SELECT oid, pg_index.indrelid
97+
FROM pg_index
98+
WHERE pg_index.indrelid NOT IN (SELECT oid FROM pg_class) AND
99+
pg_index.indrelid != 0;
100+
SELECT oid, pg_opclass.opcdeftype
101+
FROM pg_opclass
102+
WHERE pg_opclass.opcdeftype NOT IN (SELECT oid FROM pg_type) AND
103+
pg_opclass.opcdeftype != 0;
104+
SELECT oid, pg_operator.oprleft
105+
FROM pg_operator
106+
WHERE pg_operator.oprleft NOT IN (SELECT oid FROM pg_type) AND
107+
pg_operator.oprleft != 0;
108+
SELECT oid, pg_operator.oprright
109+
FROM pg_operator
110+
WHERE pg_operator.oprright NOT IN (SELECT oid FROM pg_type) AND
111+
pg_operator.oprright != 0;
112+
SELECT oid, pg_operator.oprresult
113+
FROM pg_operator
114+
WHERE pg_operator.oprresult NOT IN (SELECT oid FROM pg_type) AND
115+
pg_operator.oprresult != 0;
116+
SELECT oid, pg_operator.oprcom
117+
FROM pg_operator
118+
WHERE pg_operator.oprcom NOT IN (SELECT oid FROM pg_operator) AND
119+
pg_operator.oprcom != 0;
120+
SELECT oid, pg_operator.oprnegate
121+
FROM pg_operator
122+
WHERE pg_operator.oprnegate NOT IN (SELECT oid FROM pg_operator) AND
123+
pg_operator.oprnegate != 0;
124+
SELECT oid, pg_operator.oprlsortop
125+
FROM pg_operator
126+
WHERE pg_operator.oprlsortop NOT IN (SELECT oid FROM pg_operator) AND
127+
pg_operator.oprlsortop != 0;
128+
SELECT oid, pg_operator.oprrsortop
129+
FROM pg_operator
130+
WHERE pg_operator.oprrsortop NOT IN (SELECT oid FROM pg_operator) AND
131+
pg_operator.oprrsortop != 0;
132+
SELECT oid, pg_operator.oprcode
133+
FROM pg_operator
134+
WHERE RegprocToOid(pg_operator.oprcode) NOT IN (SELECT oid FROM pg_proc) AND
135+
RegprocToOid(pg_operator.oprcode) != 0;
136+
SELECT oid, pg_operator.oprrest
137+
FROM pg_operator
138+
WHERE RegprocToOid(pg_operator.oprrest) NOT IN (SELECT oid FROM pg_proc) AND
139+
RegprocToOid(pg_operator.oprrest) != 0;
140+
SELECT oid, pg_operator.oprjoin
141+
FROM pg_operator
142+
WHERE RegprocToOid(pg_operator.oprjoin) NOT IN (SELECT oid FROM pg_proc) AND
143+
RegprocToOid(pg_operator.oprjoin) != 0;
144+
SELECT oid, pg_parg.partype
145+
FROM pg_parg
146+
WHERE pg_parg.partype NOT IN (SELECT oid FROM pg_type) AND
147+
pg_parg.partype != 0;
148+
SELECT oid, pg_proc.prolang
149+
FROM pg_proc
150+
WHERE pg_proc.prolang NOT IN (SELECT oid FROM pg_language) AND
151+
pg_proc.prolang != 0;
152+
SELECT oid, pg_proc.prorettype
153+
FROM pg_proc
154+
WHERE pg_proc.prorettype NOT IN (SELECT oid FROM pg_type) AND
155+
pg_proc.prorettype != 0;
156+
SELECT oid, pg_rewrite.ev_class
157+
FROM pg_rewrite
158+
WHERE pg_rewrite.ev_class NOT IN (SELECT oid FROM pg_class) AND
159+
pg_rewrite.ev_class != 0;
160+
SELECT oid, pg_type.typrelid
161+
FROM pg_type
162+
WHERE pg_type.typrelid NOT IN (SELECT oid FROM pg_class) AND
163+
pg_type.typrelid != 0;
164+
SELECT oid, pg_type.typinput
165+
FROM pg_type
166+
WHERE RegprocToOid(pg_type.typinput) NOT IN (SELECT oid FROM pg_proc) AND
167+
RegprocToOid(pg_type.typinput) != 0;
168+
SELECT oid, pg_type.typoutput
169+
FROM pg_type
170+
WHERE RegprocToOid(pg_type.typoutput) NOT IN (SELECT oid FROM pg_proc) AND
171+
RegprocToOid(pg_type.typoutput) != 0;
172+
SELECT oid, pg_type.typreceive
173+
FROM pg_type
174+
WHERE RegprocToOid(pg_type.typreceive) NOT IN (SELECT oid FROM pg_proc) AND
175+
RegprocToOid(pg_type.typreceive) != 0;
176+
SELECT oid, pg_type.typsend
177+
FROM pg_type
178+
WHERE RegprocToOid(pg_type.typsend) NOT IN (SELECT oid FROM pg_proc) AND
179+
RegprocToOid(pg_type.typsend) != 0;

0 commit comments

Comments
 (0)