OSDN Git Service

Rowsヒント句のRULEまたはVIEWの試験(R-2-3-*)を追加した。
[pghintplan/pg_hint_plan.git] / sql / ut-R.sql
1 LOAD 'pg_hint_plan';
2 SET pg_hint_plan.enable_hint TO on;
3 SET pg_hint_plan.debug_print TO on;
4 SET client_min_messages TO LOG;
5 SET search_path TO public;
6
7 \o results/R_sample.out.log
8 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
9 \o
10 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_sample.out.log > results/R_sample.out
11 \! diff expected/R_sample.out results/R_sample.out
12
13 ----
14 ---- No. R-1-1 specified pattern of the object name
15 ----
16
17 -- No. R-1-1-1
18 \o results/R_1-1-1.out.log
19 /*+Rows(t1 t2 #1)*/
20 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
21 \o
22 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-1-1.out.log > results/R_1-1-1.out
23 \! diff expected/R_1-1-1.out results/R_1-1-1.out
24
25 -- No. R-1-1-2
26 \o results/R_1-1-2.out.log
27 /*+Rows(t1 t2 #1)*/
28 EXPLAIN SELECT * FROM s1.t1 t_1, s1.t2 t_2 WHERE t_1.c1 = t_2.c1;
29 \o
30 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-1-2.out.log > results/R_1-1-2.out
31 \! diff expected/R_1-1-2.out results/R_1-1-2.out
32
33 -- No. R-1-1-3
34 \o results/R_1-1-3.out.log
35 /*+Rows(t_1 t_2 #1)*/
36 EXPLAIN SELECT * FROM s1.t1 t_1, s1.t2 t_2 WHERE t_1.c1 = t_2.c1;
37 \o
38 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-1-3.out.log > results/R_1-1-3.out
39 \! diff expected/R_1-1-3.out results/R_1-1-3.out
40
41
42 ----
43 ---- No. R-1-2 specified schema name in the hint option
44 ----
45
46 -- No. R-1-2-1
47 \o results/R_1-2-1.out.log
48 /*+Rows(t1 t2 #1)*/
49 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
50 \o
51 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-2-1.out.log > results/R_1-2-1.out
52 \! diff expected/R_1-2-1.out results/R_1-2-1.out
53
54 -- No. R-1-2-2
55 \o results/R_1-2-2.out.log
56 /*+Rows(s1.t1 s1.t2 #1)*/
57 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
58 \o
59 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-2-2.out.log > results/R_1-2-2.out
60 \! diff expected/R_1-2-2.out results/R_1-2-2.out
61
62 ----
63 ---- No. R-1-3 table doesn't exist in the hint option
64 ----
65
66 -- No. R-1-3-1
67 \o results/R_1-3-1.out.log
68 /*+Rows(t1 t2 #1)*/
69 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
70 \o
71 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-3-1.out.log > results/R_1-3-1.out
72 \! diff expected/R_1-3-1.out results/R_1-3-1.out
73
74 -- No. R-1-3-2
75 \o results/R_1-3-2.out.log
76 /*+Rows(t3 t4 #1)*/
77 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
78 \o
79 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-3-2.out.log > results/R_1-3-2.out
80 \! diff expected/R_1-3-2.out results/R_1-3-2.out
81
82 ----
83 ---- No. R-1-4 conflict table name
84 ----
85
86 -- No. R-1-4-1
87 \o results/R_1-4-1.out.log
88 /*+Rows(t1 t2 #1)*/
89 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
90 \o
91 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-4-1.out.log > results/R_1-4-1.out
92 \! diff expected/R_1-4-1.out results/R_1-4-1.out
93
94 -- No. R-1-4-2
95 \o results/R_1-4-2.out.log
96 EXPLAIN SELECT * FROM s1.t1, s2.t1 WHERE s1.t1.c1 = s2.t1.c1;
97 /*+Rows(t1 t1 #1)*/
98 EXPLAIN SELECT * FROM s1.t1, s2.t1 WHERE s1.t1.c1 = s2.t1.c1;
99 /*+Rows(s1.t1 s2.t1 #1)*/
100 EXPLAIN SELECT * FROM s1.t1, s2.t1 WHERE s1.t1.c1 = s2.t1.c1;
101
102 EXPLAIN SELECT * FROM s1.t1, s2.t1 s2t1 WHERE s1.t1.c1 = s2t1.c1;
103 /*+Rows(t1 s2t1 #1)*/
104 EXPLAIN SELECT * FROM s1.t1, s2.t1 s2t1 WHERE s1.t1.c1 = s2t1.c1;
105 \o
106 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-4-2.out.log > results/R_1-4-2.out
107 \! diff expected/R_1-4-2.out results/R_1-4-2.out
108
109 -- No. R-1-4-3
110 \o results/R_1-4-3.out.log
111 EXPLAIN SELECT *, (SELECT max(t1.c1) FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1) FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
112 /*+Rows(t1 t2 #1)*/
113 EXPLAIN SELECT *, (SELECT max(t1.c1) FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1) FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
114 /*+Rows(st1 st2 #1)Rows(t1 t2 #1)*/
115 EXPLAIN SELECT *, (SELECT max(st1.c1) FROM s1.t1 st1, s1.t2 st2 WHERE st1.c1 = st2.c1) FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
116 \o
117 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-4-3.out.log > results/R_1-4-3.out
118 \! diff expected/R_1-4-3.out results/R_1-4-3.out
119
120 ----
121 ---- No. R-1-5 conflict table name
122 ----
123
124 -- No. R-1-5-1
125 \o results/R_1-5-1.out.log
126 /*+Rows(t1 t2 #1)*/
127 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
128 \o
129 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-5-1.out.log > results/R_1-5-1.out
130 \! diff expected/R_1-5-1.out results/R_1-5-1.out
131
132 -- No. R-1-5-2
133 \o results/R_1-5-2.out.log
134 /*+Rows(t1 t1 #1)*/
135 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
136 \o
137 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-5-2.out.log > results/R_1-5-2.out
138 \! diff expected/R_1-5-2.out results/R_1-5-2.out
139
140 -- No. R-1-5-3
141 \o results/R_1-5-3.out.log
142 /*+(t1 t1)(t2 t2)*/
143 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
144 EXPLAIN SELECT * FROM s1.t1, s1.t2, s1.t3 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1;
145 /*+(t1 t2 t1 t2)*/
146 EXPLAIN SELECT * FROM s1.t1, s1.t2, s1.t3, s1.t4 WHERE t1.c1 = t2.c1 AND t1.c1 = t3.c1 AND t1.c1 = t4.c1;
147 \o
148 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-5-3.out.log > results/R_1-5-3.out
149 \! diff expected/R_1-5-3.out results/R_1-5-3.out
150
151 ----
152 ---- No. R-1-6 object type for the hint
153 ----
154
155 -- No. R-1-6-1
156 \o results/R_1-6-1.out.log
157 /*+Rows(t1 t2 #1)*/
158 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
159 \o
160 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-1.out.log > results/R_1-6-1.out
161 \! diff expected/R_1-6-1.out results/R_1-6-1.out
162
163 -- No. R-1-6-2
164 \o results/R_1-6-2.out.log
165 EXPLAIN SELECT * FROM s1.p1 t1, s1.p1 t2 WHERE t1.c1 = t2.c1;
166 /*+Rows(t1 t2 #1)*/
167 EXPLAIN SELECT * FROM s1.p1 t1, s1.p1 t2 WHERE t1.c1 = t2.c1;
168 \o
169 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-2.out.log > results/R_1-6-2.out
170 \! diff expected/R_1-6-2.out results/R_1-6-2.out
171
172 -- No. R-1-6-3
173 \o results/R_1-6-3.out.log
174 EXPLAIN SELECT * FROM s1.ul1 t1, s1.ul1 t2 WHERE t1.c1 = t2.c1;
175 /*+Rows(t1 t2 #1)*/
176 EXPLAIN SELECT * FROM s1.ul1 t1, s1.ul1 t2 WHERE t1.c1 = t2.c1;
177 \o
178 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-3.out.log > results/R_1-6-3.out
179 \! diff expected/R_1-6-3.out results/R_1-6-3.out
180
181 -- No. R-1-6-4
182 CREATE TEMP TABLE tm1 (LIKE s1.t1 INCLUDING ALL);
183 \o results/R_1-6-4.out.log
184 EXPLAIN SELECT * FROM tm1 t1, tm1 t2 WHERE t1.c1 = t2.c1;
185 /*+Rows(t1 t2 #1)*/
186 EXPLAIN SELECT * FROM tm1 t1, tm1 t2 WHERE t1.c1 = t2.c1;
187 \o
188 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-4.out.log > results/R_1-6-4.out
189 \! diff expected/R_1-6-4.out results/R_1-6-4.out
190
191 -- No. R-1-6-5
192 \o results/R_1-6-5.out.log
193 EXPLAIN SELECT * FROM pg_catalog.pg_class t1, pg_catalog.pg_class t2 WHERE t1.oid = t2.oid;
194 /*+Rows(t1 t2 #1)*/
195 EXPLAIN SELECT * FROM pg_catalog.pg_class t1, pg_catalog.pg_class t2 WHERE t1.oid = t2.oid;
196 \o
197 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-5.out.log > results/R_1-6-5.out
198 \! diff expected/R_1-6-5.out results/R_1-6-5.out
199
200 -- No. R-1-6-6
201 -- refer ut-fdw.sql
202
203 -- No. R-1-6-7
204 \o results/R_1-6-7.out.log
205 EXPLAIN SELECT * FROM s1.f1() t1, s1.f1() t2 WHERE t1.c1 = t2.c1;
206 /*+Rows(t1 t2 #1)*/
207 EXPLAIN SELECT * FROM s1.f1() t1, s1.f1() t2 WHERE t1.c1 = t2.c1;
208 \o
209 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-7.out.log > results/R_1-6-7.out
210 \! diff expected/R_1-6-7.out results/R_1-6-7.out
211
212 -- No. R-1-6-8
213 \o results/R_1-6-8.out.log
214 EXPLAIN SELECT * FROM (VALUES(1,1,1,'1'), (2,2,2,'2'), (3,3,3,'3')) AS t1 (c1, c2, c3, c4),  s1.t2 WHERE t1.c1 = t2.c1;
215 /*+Rows(t1 t2 #1)*/
216 EXPLAIN SELECT * FROM (VALUES(1,1,1,'1'), (2,2,2,'2'), (3,3,3,'3')) AS t1 (c1, c2, c3, c4),  s1.t2 WHERE t1.c1 = t2.c1;
217 /*+Rows(*VALUES* t2 #1)*/
218 EXPLAIN SELECT * FROM (VALUES(1,1,1,'1'), (2,2,2,'2'), (3,3,3,'3')) AS t1 (c1, c2, c3, c4),  s1.t2 WHERE t1.c1 = t2.c1;
219 \o
220 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-8.out.log > results/R_1-6-8.out
221 \! diff expected/R_1-6-8.out results/R_1-6-8.out
222
223 -- No. R-1-6-9
224 \o results/R_1-6-9.out.log
225 EXPLAIN WITH c1(c1) AS (SELECT max(t1.c1) FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1) SELECT * FROM s1.t1, c1 WHERE t1.c1 = c1.c1;
226 /*+Rows(t1 t2 #1)Rows(t1 c1 +1)*/
227 EXPLAIN WITH c1(c1) AS (SELECT max(t1.c1) FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1) SELECT * FROM s1.t1, c1 WHERE t1.c1 = c1.c1;
228 \o
229 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-9.out.log > results/R_1-6-9.out
230 \! diff expected/R_1-6-9.out results/R_1-6-9.out
231
232 -- No. R-1-6-10
233 \o results/R_1-6-10.out.log
234 EXPLAIN SELECT * FROM s1.v1 t1, s1.v1 t2 WHERE t1.c1 = t2.c1;
235 /*+Rows(t1 t2 #1)*/
236 EXPLAIN SELECT * FROM s1.v1 t1, s1.v1 t2 WHERE t1.c1 = t2.c1;
237 /*+Rows(v1t1 v1t1_ #1)*/
238 EXPLAIN SELECT * FROM s1.v1 t1, s1.v1_ t2 WHERE t1.c1 = t2.c1;
239 \o
240 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-10.out.log > results/R_1-6-10.out
241 \! diff expected/R_1-6-10.out results/R_1-6-10.out
242
243 -- No. R-1-6-11
244 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1 AND t1.c1 = (SELECT max(st1.c1) FROM s1.t1 st1, s1.t2 st2 WHERE st1.c1 = st2.c1);
245 /*+Rows(t1 t2 #1)Rows(st1 st2 #1)*/
246 EXPLAIN (COSTS true) SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1 AND t1.c1 = (SELECT max(st1.c1) FROM s1.t1 st1, s1.t2 st2 WHERE st1.c1 = st2.c1);
247 --
248 -- There are cases where difference in the measured value and predicted value
249 -- depending upon the version of PostgreSQL
250 --
251
252 \o results/R_1-6-11.out.log
253 EXPLAIN SELECT * FROM s1.t1, (SELECT t2.c1 FROM s1.t2) st2 WHERE t1.c1 = st2.c1;
254 /*+Rows(t1 st2 #1)*/
255 EXPLAIN SELECT * FROM s1.t1, (SELECT t2.c1 FROM s1.t2) st2 WHERE t1.c1 = st2.c1;
256 /*+Rows(t1 t2 #1)*/
257 EXPLAIN SELECT * FROM s1.t1, (SELECT t2.c1 FROM s1.t2) st2 WHERE t1.c1 = st2.c1;
258 \o
259 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-6-11.out.log > results/R_1-6-11.out
260 \! diff expected/R_1-6-11.out results/R_1-6-11.out
261
262 ----
263 ---- No. R-1-7 specified number of conditions
264 ----
265
266 -- No. R-1-7-1
267 \o results/R_1-7-1.out.log
268 /*+Rows(t1 #1)*/
269 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
270 \o
271 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-7-1.out.log > results/R_1-7-1.out
272 \! diff expected/R_1-7-1.out results/R_1-7-1.out
273
274 -- No. R-1-7-2
275 \o results/R_1-7-2.out.log
276 /*+Rows(t1 t2 1)*/
277 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
278 \o
279 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-7-2.out.log > results/R_1-7-2.out
280 \! diff expected/R_1-7-2.out results/R_1-7-2.out
281
282 -- No. R-1-7-3
283 \o results/R_1-7-3.out.log
284 /*+Rows(t1 t2 #notrows)*/
285 EXPLAIN SELECT * FROM s1.t1, s1.t2 WHERE t1.c1 = t2.c1;
286 \o
287 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_1-7-3.out.log > results/R_1-7-3.out
288 \! diff expected/R_1-7-3.out results/R_1-7-3.out
289
290 ----
291 ---- No. R-2-1 some complexity query blocks
292 ----
293
294 -- No. R-2-1-1
295 \o results/R_2-1-1.out.log
296 /*+
297 Leading(bmt1 bmt2 bmt3 bmt4)
298 Leading(b1t2 b1t3 b1t4 b1t1)
299 Leading(b2t3 b2t4 b2t1 b2t2)
300 MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
301 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
302 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
303 */
304 EXPLAIN
305 SELECT max(bmt1.c1), (
306 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
307 ), (
308 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
309 )
310                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
311 ;
312 /*+
313 Leading(bmt1 bmt2 bmt3 bmt4)
314 Leading(b1t2 b1t3 b1t4 b1t1)
315 Leading(b2t3 b2t4 b2t1 b2t2)
316 MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
317 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
318 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
319 Rows(bmt1 bmt2 #1)Rows(bmt1 bmt2 bmt3 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
320 Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
321 Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
322 */
323 EXPLAIN
324 SELECT max(bmt1.c1), (
325 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
326 ), (
327 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1)
328                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
329 ;
330 \o
331 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-1.out.log > results/R_2-1-1.out
332 \! diff expected/R_2-1-1.out results/R_2-1-1.out
333
334 -- No. R-2-1-2
335 \o results/R_2-1-2.out.log
336 /*+
337 Leading(bmt1 bmt2 bmt3 bmt4)
338 Leading(b1t2 b1t3 b1t4 b1t1)
339 Leading(b2t3 b2t4 b2t1 b2t2)
340 Leading(b3t4 b3t1 b3t2 b3t3)
341 MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
342 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
343 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
344 MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
345 */
346 EXPLAIN
347 SELECT max(bmt1.c1), (
348 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
349 ), (
350 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
351 ), (
352 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
353 )
354                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
355 ;
356 /*+
357 Leading(bmt1 bmt2 bmt3 bmt4)
358 Leading(b1t2 b1t3 b1t4 b1t1)
359 Leading(b2t3 b2t4 b2t1 b2t2)
360 Leading(b3t4 b3t1 b3t2 b3t3)
361 MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
362 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
363 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
364 MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
365 Rows(bmt1 bmt2 #1)Rows(bmt1 bmt2 bmt3 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
366 Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
367 Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
368 Rows(b3t4 b3t1 #1)Rows(b3t4 b3t1 b3t2 #1)Rows(b3t1 b3t2 b3t3 b3t4 #1)
369 */
370 EXPLAIN
371 SELECT max(bmt1.c1), (
372 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
373 ), (
374 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
375 ), (
376 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
377 )
378                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
379 ;
380 \o
381 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-2.out.log > results/R_2-1-2.out
382 \! diff expected/R_2-1-2.out results/R_2-1-2.out
383
384 -- No. R-2-1-3
385 \o results/R_2-1-3.out.log
386 /*+
387 Leading(bmt4 bmt3 bmt2 bmt1)
388 */
389 EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = sbmt3.c1 AND bmt1.c1 = sbmt4.c1;
390 /*+
391 Leading(bmt4 bmt3 bmt2 bmt1)
392 Rows(bmt4 bmt3 #1)Rows(bmt4 bmt3 bmt2 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
393 */
394 EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = sbmt3.c1 AND bmt1.c1 = sbmt4.c1;
395 \o
396 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-3.out.log > results/R_2-1-3.out
397 \! diff expected/R_2-1-3.out results/R_2-1-3.out
398
399 -- No. R-2-1-4
400 \o results/R_2-1-4.out.log
401 /*+
402 Leading(bmt4 bmt3 bmt2 bmt1)
403 */
404 EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, (SELECT ctid, * FROM s1.t2 bmt2) sbmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.c1 = sbmt2.c1 AND bmt1.c1 = sbmt3.c1 AND bmt1.c1 = sbmt4.c1;
405 /*+
406 Leading(bmt4 bmt3 bmt2 bmt1)
407 Rows(bmt4 bmt3 #1)Rows(bmt4 bmt3 bmt2 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
408 */
409 EXPLAIN SELECT max(bmt1.c1) FROM s1.t1 bmt1, (SELECT ctid, * FROM s1.t2 bmt2) sbmt2, (SELECT ctid, * FROM s1.t3 bmt3) sbmt3, (SELECT ctid, * FROM s1.t4 bmt4) sbmt4 WHERE bmt1.c1 = sbmt2.c1 AND bmt1.c1 = sbmt3.c1 AND bmt1.c1 = sbmt4.c1;
410 \o
411 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-4.out.log > results/R_2-1-4.out
412 \! diff expected/R_2-1-4.out results/R_2-1-4.out
413
414 -- No. R-2-1-5
415 \o results/R_2-1-5.out.log
416 /*+
417 Leading(bmt1 bmt2 bmt3 bmt4)
418 Leading(b1t2 b1t3 b1t4 b1t1)
419 Leading(b2t3 b2t4 b2t1 b2t2)
420 MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
421 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
422 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
423 */
424 EXPLAIN
425 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
426 AND bmt1.c1 <> (
427 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
428 ) AND bmt1.c1 <> (
429 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
430 )
431 ;
432 /*+
433 Leading(bmt1 bmt2 bmt3 bmt4)
434 Leading(b1t2 b1t3 b1t4 b1t1)
435 Leading(b2t3 b2t4 b2t1 b2t2)
436 MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
437 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
438 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
439 Rows(bmt1 bmt2 #1)Rows(bmt1 bmt2 bmt3 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
440 Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
441 Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
442 */
443 EXPLAIN
444 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
445 AND bmt1.c1 <> (
446 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
447 ) AND bmt1.c1 <> (
448 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
449 )
450 ;
451 \o
452 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-5.out.log > results/R_2-1-5.out
453 \! diff expected/R_2-1-5.out results/R_2-1-5.out
454
455 -- No. R-2-1-6
456 \o results/R_2-1-6.out.log
457 /*+
458 Leading(bmt1 bmt2 bmt3 bmt4)
459 Leading(b1t2 b1t3 b1t4 b1t1)
460 Leading(b2t3 b2t4 b2t1 b2t2)
461 Leading(b3t4 b3t1 b3t2 b3t3)
462 MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
463 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
464 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
465 MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
466 */
467 EXPLAIN
468 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
469   AND bmt1.c1 <> (
470 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
471 ) AND bmt1.c1 <> (
472 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
473 ) AND bmt1.c1 <> (
474 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
475 )
476 ;
477 /*+
478 Leading(bmt1 bmt2 bmt3 bmt4)
479 Leading(b1t2 b1t3 b1t4 b1t1)
480 Leading(b2t3 b2t4 b2t1 b2t2)
481 Leading(b3t4 b3t1 b3t2 b3t3)
482 MergeJoin(bmt1 bmt2)HashJoin(bmt1 bmt2 bmt3)NestLoop(bmt1 bmt2 bmt3 bmt4)
483 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
484 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
485 MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
486 Rows(bmt1 bmt2 #1)Rows(bmt1 bmt2 bmt3 #1)Rows(bmt1 bmt2 bmt3 bmt4 #1)
487 Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
488 Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
489 Rows(b3t4 b3t1 #1)Rows(b3t4 b3t1 b3t2 #1)Rows(b3t1 b3t2 b3t3 b3t4 #1)
490 */
491 EXPLAIN
492 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
493   AND bmt1.c1 <> (
494 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
495 ) AND bmt1.c1 <> (
496 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
497 ) AND bmt1.c1 <> (
498 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
499 )
500 ;
501 \o
502 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-6.out.log > results/R_2-1-6.out
503 \! diff expected/R_2-1-6.out results/R_2-1-6.out
504
505 -- No. R-2-1-7
506 \o results/R_2-1-7.out.log
507 /*+
508 Leading(c2 c1 bmt1 bmt2 bmt3 bmt4)
509 Leading(b1t2 b1t3 b1t4 b1t1)
510 Leading(b2t3 b2t4 b2t1 b2t2)
511 MergeJoin(c2 c1)HashJoin(c2 c1 bmt1)NestLoop(c2 c1 bmt1 bmt2)MergeJoin(c2 c1 bmt1 bmt2 bmt3)HashJoin(c2 c1 bmt1 bmt2 bmt3 bmt4)
512 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
513 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
514 */
515 EXPLAIN
516 WITH c1 (c1) AS (
517 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
518 )
519 , c2 (c1) AS (
520 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
521 )
522 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
523 , c1, c2
524                                                                         WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
525 AND bmt1.c1 = c1.c1
526 AND bmt1.c1 = c2.c1
527 ;
528 /*+
529 Leading(c2 c1 bmt1 bmt2 bmt3 bmt4)
530 Leading(b1t2 b1t3 b1t4 b1t1)
531 Leading(b2t3 b2t4 b2t1 b2t2)
532 MergeJoin(c2 c1)HashJoin(c2 c1 bmt1)NestLoop(c2 c1 bmt1 bmt2)MergeJoin(c2 c1 bmt1 bmt2 bmt3)HashJoin(c2 c1 bmt1 bmt2 bmt3 bmt4)
533 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
534 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
535 Rows(c2 c1 #1)Rows(c2 c1 bmt1 #1)Rows(c2 c1 bmt1 bmt2 #1)Rows(c2 c1 bmt1 bmt2 bmt3 #1)Rows(c2 c1 bmt1 bmt2 bmt3 bmt4 #1)
536 Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
537 Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
538 */
539 EXPLAIN
540 WITH c1 (c1) AS (
541 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
542 )
543 , c2 (c1) AS (
544 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
545 )
546 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
547 , c1, c2
548                                                                         WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
549 AND bmt1.c1 = c1.c1
550 AND bmt1.c1 = c2.c1
551 ;
552 \o
553 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-7.out.log > results/R_2-1-7.out
554 \! diff expected/R_2-1-7.out results/R_2-1-7.out
555
556 -- No. R-2-1-8
557 \o results/R_2-1-8.out.log
558 /*+
559 Leading(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
560 Leading(b1t2 b1t3 b1t4 b1t1)
561 Leading(b2t3 b2t4 b2t1 b2t2)
562 Leading(b3t4 b3t1 b3t2 b3t3)
563 MergeJoin(c3 c2)HashJoin(c3 c2 c1)NestLoop(c3 c2 c1 bmt1)MergeJoin(c3 c2 c1 bmt1 bmt2)HashJoin(c3 c2 c1 bmt1 bmt2 bmt3)NestLoop(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
564 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
565 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
566 MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
567 */
568 EXPLAIN
569 WITH c1 (c1) AS (
570 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
571 )
572 , c2 (c1) AS (
573 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
574 )
575 , c3 (c1) AS (
576 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
577 )
578 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
579 , c1, c2, c3
580                                                                         WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
581 AND bmt1.c1 = c1.c1
582 AND bmt1.c1 = c2.c1
583 AND bmt1.c1 = c3.c1
584 ;
585 /*+
586 Leading(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
587 Leading(b1t2 b1t3 b1t4 b1t1)
588 Leading(b2t3 b2t4 b2t1 b2t2)
589 Leading(b3t4 b3t1 b3t2 b3t3)
590 MergeJoin(c3 c2)HashJoin(c3 c2 c1)NestLoop(c3 c2 c1 bmt1)MergeJoin(c3 c2 c1 bmt1 bmt2)HashJoin(c3 c2 c1 bmt1 bmt2 bmt3)NestLoop(c3 c2 c1 bmt1 bmt2 bmt3 bmt4)
591 MergeJoin(b1t2 b1t3)HashJoin(b1t2 b1t3 b1t4)NestLoop(b1t2 b1t3 b1t4 b1t1)
592 MergeJoin(b2t3 b2t4)HashJoin(b2t3 b2t4 b2t1)NestLoop(b2t3 b2t4 b2t1 b2t2)
593 MergeJoin(b3t4 b3t1)HashJoin(b3t4 b3t1 b3t2)NestLoop(b3t1 b3t2 b3t3 b3t4)
594 Rows(c3 c2 #1)Rows(c3 c2 c1 #1)Rows(c3 c2 c1 bmt1 #1)Rows(c3 c2 c1 bmt1 bmt2 #1)Rows(c3 c2 c1 bmt1 bmt2 bmt3 #1)Rows(c3 c2 c1 bmt1 bmt2 bmt3 bmt4 #1)
595 Rows(b1t2 b1t3 #1)Rows(b1t2 b1t3 b1t4 #1)Rows(b1t2 b1t3 b1t4 b1t1 #1)
596 Rows(b2t3 b2t4 #1)Rows(b2t3 b2t4 b2t1 #1)Rows(b2t3 b2t4 b2t1 b2t2 #1)
597 Rows(b3t4 b3t1 #1)Rows(b3t4 b3t1 b3t2 #1)Rows(b3t1 b3t2 b3t3 b3t4 #1)
598 */
599 EXPLAIN
600 WITH c1 (c1) AS (
601 SELECT max(b1t1.c1) FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
602 )
603 , c2 (c1) AS (
604 SELECT max(b2t1.c1) FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
605 )
606 , c3 (c1) AS (
607 SELECT max(b3t1.c1) FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
608 )
609 SELECT max(bmt1.c1) FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4
610 , c1, c2, c3
611                                                                         WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1
612 AND bmt1.c1 = c1.c1
613 AND bmt1.c1 = c2.c1
614 AND bmt1.c1 = c3.c1
615 ;
616 \o
617 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-1-8.out.log > results/R_2-1-8.out
618 \! diff expected/R_2-1-8.out results/R_2-1-8.out
619
620 ----
621 ---- No. R-2-2 the number of the tables per quiry block
622 ----
623
624 -- No. R-2-2-1
625 \o results/R_2-2-1.out.log
626 /*+
627 Leading(c1 bmt1)
628 */
629 EXPLAIN
630 WITH c1 (c1) AS (
631 SELECT b1t1.c1 FROM s1.t1 b1t1 WHERE b1t1.c1 = 1
632 )
633 SELECT bmt1.c1, (
634 SELECT b2t1.c1 FROM s1.t1 b2t1 WHERE b2t1.c1 = 1
635 )
636                     FROM s1.t1 bmt1, c1 WHERE bmt1.c1 = 1
637 AND bmt1.c1 = c1.c1
638 AND bmt1.c1 <> (
639 SELECT b3t1.c1 FROM s1.t1 b3t1 WHERE b3t1.c1 = 1
640 )
641 ;
642 /*+
643 Leading(c1 bmt1)
644 Rows(bmt1 c1 #1)
645 Rows(b1t1 c1 #1)
646 Rows(b2t1 c1 #1)
647 Rows(b3t1 c1 #1)
648 */
649 EXPLAIN
650 WITH c1 (c1) AS (
651 SELECT b1t1.c1 FROM s1.t1 b1t1 WHERE b1t1.c1 = 1
652 )
653 SELECT bmt1.c1, (
654 SELECT b2t1.c1 FROM s1.t1 b2t1 WHERE b2t1.c1 = 1
655 )
656                     FROM s1.t1 bmt1, c1 WHERE bmt1.c1 = 1
657 AND bmt1.c1 = c1.c1
658 AND bmt1.c1 <> (
659 SELECT b3t1.c1 FROM s1.t1 b3t1 WHERE b3t1.c1 = 1
660 )
661 ;
662 \o
663 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-2-1.out.log > results/R_2-2-1.out
664 \! diff expected/R_2-2-1.out results/R_2-2-1.out
665
666 -- No. R-2-2-2
667 \o results/R_2-2-2.out.log
668 /*+
669 Leading(c1 bmt2 bmt1)
670 Leading(b1t2 b1t1)
671 Leading(b2t2 b2t1)
672 Leading(b3t2 b3t1)
673 MergeJoin(c1 bmt2)
674 HashJoin(c1 bmt1 bmt2)
675 MergeJoin(b1t1 b1t2)
676 MergeJoin(b2t1 b2t2)
677 MergeJoin(b3t1 b3t2)
678 */
679 EXPLAIN
680 WITH c1 (c1) AS (
681 SELECT b1t1.c1 FROM s1.t1 b1t1, s1.t2 b1t2 WHERE b1t1.c1 = b1t2.c1
682 )
683 SELECT bmt1.c1, (
684 SELECT b2t1.c1 FROM s1.t1 b2t1, s1.t2 b2t2 WHERE b2t1.c1 = b2t2.c1
685 )
686                     FROM s1.t1 bmt1, s1.t2 bmt2, c1 WHERE bmt1.c1 = bmt2.c1
687 AND bmt1.c1 = c1.c1
688 AND bmt1.c1 <> (
689 SELECT b3t1.c1 FROM s1.t1 b3t1, s1.t2 b3t2 WHERE b3t1.c1 = b3t2.c1
690 )
691 ;
692 /*+
693 Leading(c1 bmt2 bmt1)
694 Leading(b1t2 b1t1)
695 Leading(b2t2 b2t1)
696 Leading(b3t2 b3t1)
697 MergeJoin(c1 bmt2)
698 HashJoin(c1 bmt1 bmt2)
699 MergeJoin(b1t1 b1t2)
700 MergeJoin(b2t1 b2t2)
701 MergeJoin(b3t1 b3t2)
702 Rows(c1 bmt2 #1)
703 Rows(c1 bmt1 bmt2 #1)
704 Rows(b1t1 b1t2 #1)
705 Rows(b2t1 b2t2 #1)
706 Rows(b3t1 b3t2 #1)
707 */
708 EXPLAIN
709 WITH c1 (c1) AS (
710 SELECT b1t1.c1 FROM s1.t1 b1t1, s1.t2 b1t2 WHERE b1t1.c1 = b1t2.c1
711 )
712 SELECT bmt1.c1, (
713 SELECT b2t1.c1 FROM s1.t1 b2t1, s1.t2 b2t2 WHERE b2t1.c1 = b2t2.c1
714 )
715                     FROM s1.t1 bmt1, s1.t2 bmt2, c1 WHERE bmt1.c1 = bmt2.c1
716 AND bmt1.c1 = c1.c1
717 AND bmt1.c1 <> (
718 SELECT b3t1.c1 FROM s1.t1 b3t1, s1.t2 b3t2 WHERE b3t1.c1 = b3t2.c1
719 )
720 ;
721 \o
722 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-2-2.out.log > results/R_2-2-2.out
723 \! diff expected/R_2-2-2.out results/R_2-2-2.out
724
725 -- No. R-2-2-3
726 \o results/R_2-2-3.out.log
727 /*+
728 Leading(c1 bmt4 bmt3 bmt2 bmt1)
729 Leading(b1t4 b1t3 b1t2 b1t1) 
730 Leading(b2t4 b2t3 b2t2 b2t1)
731 Leading(b3t4 b3t3 b3t2 b3t1)
732 MergeJoin(c1 bmt4)
733 HashJoin(c1 bmt4 bmt3)
734 NestLoop(c1 bmt4 bmt3 bmt2)
735 MergeJoin(c1 bmt4 bmt3 bmt2 bmt1)
736 HashJoin(b1t4 b1t3)
737 NestLoop(b1t4 b1t3 b1t2)
738 MergeJoin(b1t4 b1t3 b1t2 b1t1)
739 HashJoin(b2t4 b2t3)
740 NestLoop(b2t4 b2t3 b2t2)
741 MergeJoin(b2t4 b2t3 b2t2 b2t1)
742 HashJoin(b3t4 b3t3)
743 NestLoop(b3t4 b3t3 b3t2)
744 MergeJoin(b3t4 b3t3 b3t2 b3t1)
745 */
746 EXPLAIN
747 WITH c1 (c1) AS (
748 SELECT b1t1.c1 FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
749 )
750 SELECT bmt1.c1, (
751 SELECT b2t1.c1 FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
752 )
753                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4, c1 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1 AND bmt1.c1 = c1.c1
754 AND bmt1.c1 <> (
755 SELECT b3t1.c1 FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
756 )
757 ;
758 /*+
759 Leading(c1 bmt4 bmt3 bmt2 bmt1)
760 Leading(b1t4 b1t3 b1t2 b1t1) 
761 Leading(b2t4 b2t3 b2t2 b2t1)
762 Leading(b3t4 b3t3 b3t2 b3t1)
763 MergeJoin(c1 bmt4)
764 HashJoin(c1 bmt4 bmt3)
765 NestLoop(c1 bmt4 bmt3 bmt2)
766 MergeJoin(c1 bmt4 bmt3 bmt2 bmt1)
767 HashJoin(b1t4 b1t3)
768 NestLoop(b1t4 b1t3 b1t2)
769 MergeJoin(b1t4 b1t3 b1t2 b1t1)
770 HashJoin(b2t4 b2t3)
771 NestLoop(b2t4 b2t3 b2t2)
772 MergeJoin(b2t4 b2t3 b2t2 b2t1)
773 HashJoin(b3t4 b3t3)
774 NestLoop(b3t4 b3t3 b3t2)
775 MergeJoin(b3t4 b3t3 b3t2 b3t1)
776 Rows(c1 bmt4 #1)
777 Rows(c1 bmt4 bmt3 #1)
778 Rows(c1 bmt4 bmt3 bmt2 #1)
779 Rows(c1 bmt4 bmt3 bmt2 bmt1 #1)
780 Rows(b1t4 b1t3 #1)
781 Rows(b1t4 b1t3 b1t2 #1)
782 Rows(b1t4 b1t3 b1t2 b1t1 #1)
783 Rows(b2t4 b2t3 #1)
784 Rows(b2t4 b2t3 b2t2 #1)
785 Rows(b2t4 b2t3 b2t2 b2t1 #1)
786 Rows(b3t4 b3t3 #1)
787 Rows(b3t4 b3t3 b3t2 #1)
788 Rows(b3t4 b3t3 b3t2 b3t1 #1)
789 */
790 EXPLAIN
791 WITH c1 (c1) AS (
792 SELECT b1t1.c1 FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
793 )
794 SELECT bmt1.c1, (
795 SELECT b2t1.c1 FROM s1.t1 b2t1, s1.t2 b2t2, s1.t3 b2t3, s1.t4 b2t4 WHERE b2t1.c1 = b2t2.c1 AND b2t1.c1 = b2t3.c1 AND b2t1.c1 = b2t4.c1
796 )
797                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4, c1 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1 AND bmt1.c1 = c1.c1
798 AND bmt1.c1 <> (
799 SELECT b3t1.c1 FROM s1.t1 b3t1, s1.t2 b3t2, s1.t3 b3t3, s1.t4 b3t4 WHERE b3t1.c1 = b3t2.c1 AND b3t1.c1 = b3t3.c1 AND b3t1.c1 = b3t4.c1
800 )
801 ;
802 \o
803 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-2-3.out.log > results/R_2-2-3.out
804 \! diff expected/R_2-2-3.out results/R_2-2-3.out
805
806 -- No. R-2-2-4
807 \o results/R_2-2-4.out.log
808 /*+
809 Leading(c1 bmt4 bmt3 bmt2 bmt1)
810 Leading(b1t4 b1t3 b1t2 b1t1)
811 MergeJoin(c1 bmt4)
812 HashJoin(c1 bmt4 bmt3)
813 NestLoop(c1 bmt4 bmt3 bmt2)
814 MergeJoin(c1 bmt4 bmt3 bmt2 bmt1)
815 MergeJoin(b1t4 b1t3)
816 HashJoin(b1t4 b1t3 b1t2)
817 NestLoop(b1t4 b1t3 b1t2 b1t1)
818 */
819 EXPLAIN
820 WITH c1 (c1) AS (
821 SELECT b1t1.c1 FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
822 )
823 SELECT bmt1.c1, (
824 SELECT b2t1.c1 FROM s1.t1 b2t1 WHERE b2t1.c1 = 1
825 )
826                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4, c1 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1 AND bmt1.c1 = c1.c1
827 AND bmt1.c1 <> (
828 SELECT b3t1.c1 FROM s1.t1 b3t1
829 )
830 ;
831 /*+
832 Leading(c1 bmt4 bmt3 bmt2 bmt1)
833 Leading(b1t4 b1t3 b1t2 b1t1)
834 MergeJoin(c1 bmt4)
835 HashJoin(c1 bmt4 bmt3)
836 NestLoop(c1 bmt4 bmt3 bmt2)
837 MergeJoin(c1 bmt4 bmt3 bmt2 bmt1)
838 MergeJoin(b1t4 b1t3)
839 HashJoin(b1t4 b1t3 b1t2)
840 NestLoop(b1t4 b1t3 b1t2 b1t1)
841 Rows(c1 bmt4 #1)
842 Rows(c1 bmt4 bmt3 #1)
843 Rows(c1 bmt4 bmt3 bmt2 #1)
844 Rows(c1 bmt4 bmt3 bmt2 bmt1 #1)
845 Rows(b1t4 b1t3 #1)
846 Rows(b1t4 b1t3 b1t2 #1)
847 Rows(b1t4 b1t3 b1t2 b1t1 #1)
848 */
849 EXPLAIN
850 WITH c1 (c1) AS (
851 SELECT b1t1.c1 FROM s1.t1 b1t1, s1.t2 b1t2, s1.t3 b1t3, s1.t4 b1t4 WHERE b1t1.c1 = b1t2.c1 AND b1t1.c1 = b1t3.c1 AND b1t1.c1 = b1t4.c1
852 )
853 SELECT bmt1.c1, (
854 SELECT b2t1.c1 FROM s1.t1 b2t1 WHERE b2t1.c1 = 1
855 )
856                     FROM s1.t1 bmt1, s1.t2 bmt2, s1.t3 bmt3, s1.t4 bmt4, c1 WHERE bmt1.c1 = bmt2.c1 AND bmt1.c1 = bmt3.c1 AND bmt1.c1 = bmt4.c1 AND bmt1.c1 = c1.c1
857 AND bmt1.c1 <> (
858 SELECT b3t1.c1 FROM s1.t1 b3t1
859 )
860 ;
861 \o
862 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-2-4.out.log > results/R_2-2-4.out
863 \! diff expected/R_2-2-4.out results/R_2-2-4.out
864
865 ----
866 ---- No. R-2-3 RULE or VIEW
867 ----
868
869 -- No. R-2-3-1
870 \o results/R_2-3-1.out.log
871 /*+
872 Leading(r1 t1 t2 t3 t4)
873 */
874 EXPLAIN UPDATE s1.r1 SET c1 = c1 WHERE c1 = 1;
875 /*+
876 Leading(r1 t1 t2 t3 t4)
877 Rows(r1 t1 t2 t3 t4 #2)
878 Rows(r1 t1 t2 t3 #2)
879 Rows(r1 t1 t2 #2)
880 Rows(r1 t1 #2)
881 */
882 EXPLAIN UPDATE s1.r1 SET c1 = c1 WHERE c1 = 1;
883 /*+
884 Leading(r1_ b1t1 b1t2 b1t3 b1t4)
885 */
886 EXPLAIN UPDATE s1.r1_ SET c1 = c1 WHERE c1 = 1;
887 /*+
888 Leading(r1_ b1t1 b1t2 b1t3 b1t4)
889 Rows(r1_ b1t1 b1t2 b1t3 b1t4 #2)
890 Rows(r1_ b1t1 b1t2 b1t3 #2)
891 Rows(r1_ b1t1 b1t2 #2)
892 Rows(r1_ b1t1 #2)
893 */
894 EXPLAIN UPDATE s1.r1_ SET c1 = c1 WHERE c1 = 1;
895 \o
896 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-3-1.out.log > results/R_2-3-1.out
897 \! diff expected/R_2-3-1.out results/R_2-3-1.out
898
899 -- No. R-2-3-2
900 \o results/R_2-3-2.out.log
901 /*+
902 Leading(r2 t1 t2 t3 t4)
903 */
904 EXPLAIN UPDATE s1.r2 SET c1 = c1 WHERE c1 = 1;
905 /*+
906 Leading(r2 t1 t2 t3 t4)
907 Rows(r2 t1 t2 t3 t4 #2)
908 Rows(r2 t1 t2 t3 #2)
909 Rows(r2 t1 t2 #2)
910 Rows(r2 t1 #2)
911 */
912 EXPLAIN UPDATE s1.r2 SET c1 = c1 WHERE c1 = 1;
913 /*+
914 Leading(r2_ b1t1 b1t2 b1t3 b1t4)
915 Leading(r2_ b2t1 b2t2 b2t3 b2t4)
916 */
917 EXPLAIN UPDATE s1.r2_ SET c1 = c1 WHERE c1 = 1;
918 /*+
919 Leading(r2_ b1t1 b1t2 b1t3 b1t4)
920 Leading(r2_ b2t1 b2t2 b2t3 b2t4)
921 Rows(r2_ b1t1 #2)
922 Rows(r2_ b1t1 b1t2 #2)
923 Rows(r2_ b1t1 b1t2 b1t3 #2)
924 Rows(r2_ b1t1 b1t2 b1t3 b1t4 #2)
925 Rows(r2_ b2t1 #2)
926 Rows(r2_ b2t1 b2t2 #2)
927 Rows(r2_ b2t1 b2t2 b2t3  #2)
928 Rows(r2_ b2t1 b2t2 b2t3 b2t4 #2)
929 */
930 EXPLAIN UPDATE s1.r2_ SET c1 = c1 WHERE c1 = 1;
931 \o
932 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-3-2.out.log > results/R_2-3-2.out
933 \! diff expected/R_2-3-2.out results/R_2-3-2.out
934
935 -- No. R-2-3-3
936 \o results/R_2-3-3.out.log
937 /*+
938 Leading(r3 t1 t2 t3 t4)
939 */
940 EXPLAIN UPDATE s1.r3 SET c1 = c1 WHERE c1 = 1;
941 /*+
942 Leading(r3 t1 t2 t3 t4)
943 Rows(r3 t1 t2 t3 t4 #2)
944 Rows(r3 t1 t2 t3 #2)
945 Rows(r3 t1 t2 #2)
946 Rows(r3 t1 #2)
947 */
948 EXPLAIN UPDATE s1.r3 SET c1 = c1 WHERE c1 = 1;
949 /*+
950 Leading(r3_ b1t1 b1t2 b1t3 b1t4)
951 Leading(r3_ b2t1 b2t2 b2t3 b2t4)
952 Leading(r3_ b3t1 b3t2 b3t3 b3t4)
953 */
954 EXPLAIN UPDATE s1.r3_ SET c1 = c1 WHERE c1 = 1;
955 /*+
956 Leading(r3_ b1t1 b1t2 b1t3 b1t4)
957 Leading(r3_ b2t1 b2t2 b2t3 b2t4)
958 Leading(r3_ b3t1 b3t2 b3t3 b3t4)
959 Rows(r3_ b1t1 #2)
960 Rows(r3_ b1t1 b1t2 #2)
961 Rows(r3_ b1t1 b1t2 b1t3 #2)
962 Rows(r3_ b1t1 b1t2 b1t3 b1t4 #2)
963 Rows(r3_ b2t1 #2)
964 Rows(r3_ b2t1 b2t2 #2)
965 Rows(r3_ b2t1 b2t2 b2t3 #2)
966 Rows(r3_ b2t1 b2t2 b2t3 b2t4 #2)
967 Rows(r3_ b3t1 #2)
968 Rows(r3_ b3t1 b3t2 #2)
969 Rows(r3_ b3t1 b3t2 b3t3 #2)
970 Rows(r3_ b3t1 b3t2 b3t3 b3t4 #2)
971 */
972 EXPLAIN UPDATE s1.r3_ SET c1 = c1 WHERE c1 = 1;
973 \o
974 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-3-3.out.log > results/R_2-3-3.out
975 \! diff expected/R_2-3-3.out results/R_2-3-3.out
976
977 -- No. R-2-3-4
978 \o results/R_2-3-4.out.log
979 /*+HashJoin(v1t1 v1t1)*/
980 EXPLAIN SELECT * FROM s1.v1 v1, s1.v1 v2 WHERE v1.c1 = v2.c1;
981 /*+HashJoin(v1t1 v1t1)Rows(v1t1 v1t1 #1)*/
982 EXPLAIN SELECT * FROM s1.v1 v1, s1.v1 v2 WHERE v1.c1 = v2.c1;
983 \o
984 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-3-4.out.log > results/R_2-3-4.out
985 \! diff expected/R_2-3-4.out results/R_2-3-4.out
986
987 -- No. R-2-3-5
988 \o results/R_2-3-5.out.log
989 /*+NestLoop(v1t1 v1t1_)*/
990 EXPLAIN SELECT * FROM s1.v1 v1, s1.v1_ v2 WHERE v1.c1 = v2.c1;
991 /*+NestLoop(v1t1 v1t1_)Rows(v1t1 v1t1_ #1)*/
992 EXPLAIN SELECT * FROM s1.v1 v1, s1.v1_ v2 WHERE v1.c1 = v2.c1;
993 \o
994 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-3-5.out.log > results/R_2-3-5.out
995 \! diff expected/R_2-3-5.out results/R_2-3-5.out
996
997 -- No. R-2-3-6
998 \o results/R_2-3-6.out.log
999 /*+RowsHashJoin(r4t1 r4t1)*/
1000 EXPLAIN SELECT * FROM s1.r4 t1, s1.r4 t2 WHERE t1.c1 = t2.c1;
1001 /*+RowsHashJoin(r4t1 r4t1)Rows(r4t1 r4t1 #1)*/
1002 EXPLAIN SELECT * FROM s1.r4 t1, s1.r4 t2 WHERE t1.c1 = t2.c1;
1003 \o
1004 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-3-6.out.log > results/R_2-3-6.out
1005 \! diff expected/R_2-3-6.out results/R_2-3-6.out
1006
1007 -- No. R-2-3-7
1008 \o results/R_2-3-7.out.log
1009 /*+NestLoop(r4t1 r5t1)*/
1010 EXPLAIN SELECT * FROM s1.r4 t1, s1.r5 t2 WHERE t1.c1 = t2.c1;
1011 /*+NestLoop(r4t1 r5t1)Rows(r4t1 r5t1 #1)*/
1012 EXPLAIN SELECT * FROM s1.r4 t1, s1.r5 t2 WHERE t1.c1 = t2.c1;
1013 \o
1014 \! sed 's/cost=[\.0-9]*/cost=xxx/' results/R_2-3-7.out.log > results/R_2-3-7.out
1015 \! diff expected/R_2-3-7.out results/R_2-3-7.out